亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? combi.c

?? USB技術大全-54.8M.zip
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*
**
** FILE: combi.c
**
**
** purpose: USB firmware for Cypress USB/PS2 mouse reference design
**			   
**
** revision history:
** 6/27/00  bth : modified ps2 scaling algorithm
** 7/11/00  sea : modified ps2 resolution constants and 
**					ps2_send() start bit inhibit response
**
*/



#pragma option INSTRUCTIONTIMING			//needed for Cypress debugger to work properly
#pragma option f0							//do not insert page breaks in listing file 
#pragma option REGSAVEOFF;					//do not automatically save AC and IX in interrupts
#pragma option NOINIT;
#define DEBUG 


#include "chip.h"
#include "usbdefs.h"
#include "ps2defs.h"

#define BIT0 1
#define BIT1 2
#define BIT2 4
#define BIT3 8
#define BIT4 0x10
#define BIT5 0x20
#define BIT6 0x40
#define BIT7 0x80


//*************************************************************************************************
//USER_DEFINES
/*
**
** the following defines can be changed to accomodate different I/O pinouts.  It is assumed that
** all 6 quadrature inputs (optics) are connected to the same port.
**
*/

#define OPTICS_PORT				PORT0				//optics port
#define OPTICS_MASK				0x3f				//mask of all optics inputs
/*
** for each set of x,y, and z optics, define a macro that will move the corresponding 2 quadrature bits
** into bit1 and bit0.  For instance, in the reference design
** the y- quadrature inputs are at bits 3 and 2, so the macro shifts the bits by 2 and
** masks them.
*/

#define GET_X_OPTICS(x) ((x >> 0) & 0x3)			//no shift necessary					
#define GET_Y_OPTICS(x) ((x >> 2) & 0x3)			//shift bits [3:2] into [1:0]
#define GET_Z_OPTICS(x) ((x >> 4) & 0x3)			//shift bits [5:4] into [1:0]


/*
** define each switch's port and bit position
*/
#define LEFT_SWITCH_PORT		PORT0
#define LEFT_SWITCH_MASK		BIT7
#define RIGHT_SWITCH_PORT		PORT1
#define RIGHT_SWITCH_MASK		BIT0
#define MIDDLE_SWITCH_PORT		PORT1
#define MIDDLE_SWITCH_MASK		BIT1


/*
**define masks for the port pin functions.  This information is used to establish the mode
**settings for the GPIO pins
**
*/
#define PORT0_OPTICS_MASK		0b00111111			//optics pins [5:0] on port 0
#define PORT1_OPTICS_MASK		0b00000000			//no optics on port 1
#define PORT0_LED_MASK		    0b01000000			//led drive at pin [6] on port 0
#define PORT1_LED_MASK			0b00000000			//no led drive on port 1
#define PORT0_SWITCH_MASK		0b10000000			//switch input at pin [7] on port 0
#define PORT1_SWITCH_MASK		0b00000011			//switch inputs at [1:0] on port 1




//comment the following lines if you do not want PS2 resolution and scaling commands to be implemented 
//in the code.
#define ENABLE_RESOLUTION
#define ENABLE_SCALING
//END OF USER DEFINES
//*************************************************************************************************





//*************************************************************************************************
//COMMON DECLARATIONS USED BY BOTH INTERFACES
#include "macros.h"								//include macro definitions

/*
** define port data and mode initial values for the 3 operating states -- normal, suspend, and suspend with remote
** wakeup -- based on the masks provided by the user
*/
/*
**normal operating mode
*/
#define PORT0_INIT				PORT0_SWITCH_MASK
#define PORT1_INIT				PORT1_SWITCH_MASK
#define PORT0_MODE1_INIT		PORT0_SWITCH_MASK
#define PORT1_MODE1_INIT		PORT1_SWITCH_MASK
#define PORT0_MODE0_INIT		PORT0_LED_MASK
#define PORT1_MODE0_INIT		PORT1_LED_MASK

/*
** suspend mode (no remote wakeup)
*/


#define PORT0_SUSPEND					PORT0_LED_MASK
#define PORT1_SUSPEND					PORT1_LED_MASK
#define PORT0_MODE1_SUSPEND				PORT0_LED_MASK
#define PORT1_MODE1_SUSPEND				PORT1_LED_MASK
#define PORT0_MODE0_SUSPEND				PORT0_SWITCH_MASK
#define PORT1_MODE0_SUSPEND				PORT1_SWITCH_MASK
/*
** remote wakeup
*/
#define PORT0_RW						(PORT0_LED_MASK | PORT0_SWITCH_MASK)
#define PORT1_RW						(PORT1_LED_MASK | PORT1_SWITCH_MASK)
#define PORT0_MODE1_RW					(PORT0_SWITCH_MASK | PORT0_LED_MASK)
#define PORT1_MODE1_RW					(PORT1_SWITCH_MASK | PORT1_LED_MASK)
#define PORT0_MODE0_RW					0
#define PORT1_MODE0_RW					0


#define LEFT_SWITCH_ASSERTED		(!(LEFT_SWITCH_PORT & LEFT_SWITCH_MASK))
#define MIDDLE_SWITCH_ASSERTED		(!(MIDDLE_SWITCH_PORT & MIDDLE_SWITCH_MASK))
#define RIGHT_SWITCH_ASSERTED		(!(RIGHT_SWITCH_PORT & RIGHT_SWITCH_MASK))


/*
** switches are debounced in a routine that is called every 4 msec.  10
** successive stable samples are required for a switch change to be reported.
*/
#define DEBOUNCE_COUNT				10		  //10 identical samples must be taken to recognize switch changes





/*
** define a structure containing variables updated in the 1-msec interrupt
*/

typedef struct
{
	char b1msCounter;				//incremented inside 1msec interrupt for general timing
	char b1msFlags;					//flag set inside 1msec interrupt
}ONE_MSEC_STATUS;
#define ONE_MSEC_FLAG 1


/*
** Quadrature inputs are sampled inside the 128 usec interrupt and placed in a queue for later
** processing in the main loop.
**
*/
typedef struct
{
	char near *headP;					//head of queue
	char near *tailP;					//tail of queue
	char bLen;							//length of queue
}QUEUE_STRUCT;


/*
** current state of each quadrature pair is stored to compare with the next sample.
**
*/
 
typedef struct
{
	char bXstate;						//current state of X optics
	char bYstate;						//current state of Y optics
	char bZstate;						//current state of Z optics
			
}OPTICS_STATE;



/*
** the order of the bytes in this structure is important! These bytes are in the
** proper order for a packet returned to a USB host in response to a Get_Report command.
*/
typedef struct
{
	char bChange;						//set to 1 if mouse state has changed
	char bButtons;						//current state of mouse buttons
	signed char bXcount;						//current accumulation of X counts
	signed char bYcount;						//current accumulation of Y counts
	signed char bZcount;						//current accumulation of Z counts
}MOUSE_STATE;



/*
** global variables used by both USB and PS2 interfaces
*/

QUEUE_STRUCT		OpticsQueue;		//optics queue		

ONE_MSEC_STATUS		MsecStatus;			//status of 1msec interrupt
OPTICS_STATE		Optics;				//current state of optics
MOUSE_STATE			Mouse;				//current state of mouse (buttons, x,y,z)
char bLastButtons;
char bDebounceCount;


char bOpticsArray[16];					//16-byte array used for optics queue data


const signed char quad_table[] = 
/*
;***
; Quadrature state table. This table assists processing of quadrature state
; transitions. The table index is calculated as:
;       [(last_state)*4 + current_state],
; and the table entry at that point is 1, 0 or -1 indicating increment, hold
; or decrement the count, respectively.
;***
*/
{
	0,					//;State 0 => state 0 (NoChange)
	1,					//;        => state 1 (Increment)
	0xff,				//;        => state 2 (Decrement)
	0,					//;        => state 3 (Fault)
	
	0xff,				//;State 1 => state 0 (Decrement)
	0,					//;       => state 1  (NoChange)
	0,					//;       => state 2  (Fault)
	1,    				//;       => state 3  (Increment)
	
	1,					//;State 2 => state 0 (Increment)
	0,					//;       => state 1  (Fault)
	0,					//;     => state 2    (NoChange)
	0xff,				//;       => state 3  (Decrement)
	
	0,					//;State 3 => state 0 (Fault)
	0xff,				//;       => state 1  (Decrement)
	1,					//;       => state 2  (Increment)
	0					//;      => state 3   (NoChange)
};

const signed char z_quad_table[] = 
/*
;***
; Quadrature state table. This table assists processing of quadrature state
; transitions. The table index is calculated as:
;       [(last_state)*4 + current_state],
; and the table entry at that point is 1, 0 or -1 indicating increment, hold
; or decrement the count, respectively.
;***
*/
{
	0,					//;State 0 => state 0 (NoChange)
	0,					//;        => state 1 (NoChange)
	0,		  			//;        => state 2 (NoChange)
	0,					//;        => state 3 (Fault)
	
	0,				//;State 1 => state 0 (NoChange)
	0,					//;       => state 1 (NoChange)
	0,					//;       => state 2 (NoChange)
	1,    				//;       => state 3 (Increment)
	
	1,					//;State 2 => state 0 (Increment)
	0,					//;       => state 1 (Fault)
	0,					//;     => state 2 (NoChange)
	0xff,				//;       => state 3 (Decrement)
	
	0,					//;State 3 => state 0 (Fault)
	0xff,				//;       => state 1 (Decrement)
	0,					//;       => state 2 (NoChange)
	0					//;      => state 3 (NoChange)
};
/*
** function prototypes for shared functions
*/
void main(void);
void ClearRam(void);
void Delay(char delay);
//void delay(void);

//*************************************************************************************************
//USB DECLARATIONS 

#include "usb_desc.h"						//include usb descriptors



#define SET_EP0_MODE(x) EP_A0_MODE = x		//set mode register for EP0


/*
** define a structure that will maintain the parameters of multibyte data that is returned
** to the host in response to successive IN commands on endpoint 0 (descriptors, status, reports, etc).
*/
typedef struct
{
	char bLength;							//length of data remaining to be returned		
	far char *p;							//pointer to the data
    char dummy;								//padding -- compiler bug doesn't allocate enough space for a far *
}TRANSMIT_STRUCT;


/*
** define a structure that contains the current USB device status
*/
typedef struct
{
	char bConfiguration;					//configured or not
	char bRemoteWakeup;						//remote wakeup enabled or not
	char bDeviceStatus;						//spare, do not remove! this byte is a placeholder
											//for the 2nd byte of device status.
	char bEP1Stall;							//endpoint 1 stalled or not
	char bEPStatus;							//spare, do not remove! this byte is a placeholder
											//for the 2nd byte of device status
	char bAddress;							//current address
	char bProtocol;							//boot protocol or report protocol
}DEVICE_STATUS;


/*
** define a structure for mouse transmit status
*/

typedef struct
{
	char bIdlePeriod;						//current idle period setting
	char bIdleCounter;						//counter for idle period
}
MOUSE_STATUS;




MOUSE_STATUS		MouseStatus;			//status of mouse
TRANSMIT_STRUCT		XmtBuff;				//EP0 transmit buffer parameters

DEVICE_STATUS		DeviceStatus;			//device status
char				bSuspendCounter;		//counter for keeping track of suspend interval

//declare the following registers global. They are used by ISRs to avoid compiler issues.
char byte_count;
char byte_count1;
char bWakeupCount;


/*
** USB function prototypes
*/
void UsbReInitialize(void);
void MouseTask(void);
void Suspend(void);
void usbmain(void);
void HandleSetup(void);
void HandleIn(void);
void USB_control_read(void);
char LoadEP0Fifo(void);
void ClearRemoteWakeup(void);
void SetRemoteWakeup(void);
void SetConfiguration(void);
void SetAddress(void);
void ClearEndpointStall(void);
void SetEndpointStall(void);
void GetDeviceStatus(void);
void GetDescriptor(void);
void GetInterfaceStatus(void);
void GetEndpointStatus(void);
void SetIdle(void);
void SetProtocol(void);
void GetReport(void);
void GetIdle(void);
void GetProtocol(void);
void GetConfiguration(void);
void USB_Stall_In_Out(void);
char BusInactive(void);



//*************************************************************************************************
//PS2 DECLARATIONS 


/*
** define a structure that contains all mouse parameters that can be set via host commands
*/
typedef struct
{
	char bReportRate;								
	char bReportInterval;							
	char bScale;
	char bStream;
	char bResolution;
	char bEnabled;
	char bZmouse;
	char bWrap;
}MOUSEPARMS;

/*
** define a structure to hold messages to be sent back to the host.  This can be either a mouse packet
** or a response to a command (device id, BAT response, etc).
*/
typedef struct
{
	char bMsgBuff[5];						//array of bytes
	char bMsgLen;							//initial length of message
	char bXmtLen;							//length of bytes remaining to send
}PS2_XMT_STRUCT;


int16 bBatDelay;							//bat delay, in msec.

char ConsecutiveSetSamples;					//keeps track of number of consecutive set-sample commands
											//received from the host (for enabling z-mice)
char  bIntervalCount;						//interval count, in msec, for reporting mouse packets

MOUSEPARMS  MouseParms;						//mouse parameters
PS2_XMT_STRUCT Ps2Xmt;						//transmit buffer
char ksc_delay;								//storage for assembly routines
char ps2_temp0;								//storage for assembly routines




/*
** function prototypes for PS2 routines
*/

void ps2BAT(void);
void ps2_send(char data);
char ps2_receive(void);
void Reset(void);
void Resend(void);
void SetDefault(void);
void Disable(void);
void Enable(void);
char SetSampleRate(char p);
void ReadDeviceType(void);
void SetRemoteMode(void);
void SetWrapMode(void);
void ReadData(void);
void SetStreamMode(void);
void StatusRequest(void);
char SetResolution(char p);
void SetScaling(void);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91免费版在线看| 国产精品初高中害羞小美女文| 粉嫩一区二区三区在线看| 日本特黄久久久高潮| 亚洲一区二区视频| 一区二区三区精品视频| 18欧美亚洲精品| 亚洲男人的天堂在线观看| 亚洲三级在线观看| 亚洲蜜臀av乱码久久精品| 亚洲男人天堂av| 天天色天天操综合| 麻豆国产一区二区| 国产精一区二区三区| 北岛玲一区二区三区四区| 91美女精品福利| 欧美三级日韩在线| 精品免费99久久| 国产精品久久免费看| 国产精品国产a| 亚洲一区二区三区视频在线播放| 亚洲一区二区三区中文字幕| 丝袜美腿一区二区三区| 九色综合国产一区二区三区| 国产一区二区三区黄视频 | 成人av网址在线| 成人久久视频在线观看| 色久优优欧美色久优优| 欧美一级欧美三级| 国产精品美女久久久久久久久久久| 日本一区二区三区国色天香| 一区二区成人在线视频| 精品一区二区三区视频在线观看| 国产成人鲁色资源国产91色综| 91丨porny丨在线| 欧美一区二区三区色| 国产精品福利电影一区二区三区四区| 一区二区三区在线不卡| 国产一区在线观看视频| 91黄色免费网站| 欧美精品一区二区精品网| 一区二区三区在线免费观看| 精品一区二区三区蜜桃| 91国偷自产一区二区开放时间| 日韩欧美一区二区三区在线| 亚洲欧美日韩国产中文在线| 精品夜夜嗨av一区二区三区| 在线观看亚洲一区| 亚洲国产精品精华液ab| 日韩成人免费电影| 成人精品免费看| 91精品国产欧美一区二区18| 中文子幕无线码一区tr| 日韩精品电影在线观看| 91免费看`日韩一区二区| 久久久亚洲欧洲日产国码αv| 亚洲精品视频观看| 成人午夜精品一区二区三区| 精品日韩一区二区三区| 日日摸夜夜添夜夜添国产精品 | 亚洲国产精品影院| 国产成人三级在线观看| 91麻豆精品国产自产在线观看一区| 中文字幕乱码亚洲精品一区| 精品制服美女丁香| 精品国产伦一区二区三区观看方式| 亚洲宅男天堂在线观看无病毒| va亚洲va日韩不卡在线观看| 国产欧美日韩在线| 国产福利一区二区三区视频 | 国产情人综合久久777777| 日本欧美久久久久免费播放网| 在线免费观看不卡av| 亚洲欧美另类小说| 色婷婷一区二区三区四区| 亚洲欧美偷拍另类a∨色屁股| 成人国产精品免费网站| 国产精品麻豆欧美日韩ww| 成人一区在线看| ...xxx性欧美| 在线观看免费成人| 午夜精品福利在线| 日韩亚洲欧美在线观看| 毛片av一区二区三区| 精品91自产拍在线观看一区| 久久精品久久精品| 精品国产成人在线影院| 国产精品一二三四区| 亚洲国产经典视频| 色综合久久综合| 午夜伦欧美伦电影理论片| 在线不卡a资源高清| 捆绑调教一区二区三区| 久久久久久久综合日本| 99久久综合狠狠综合久久| 一区二区高清在线| 日韩视频一区二区三区在线播放| 裸体在线国模精品偷拍| 久久久亚洲国产美女国产盗摄| 处破女av一区二区| 亚洲国产精品久久人人爱蜜臀 | 国产精品久久久久精k8| 色天天综合色天天久久| 日本亚洲电影天堂| 国产女同互慰高潮91漫画| 色综合久久久久综合体桃花网| 午夜伊人狠狠久久| 久久久精品免费观看| 91久久精品一区二区| 久久99精品久久只有精品| 亚洲婷婷综合久久一本伊一区| 欧美日韩精品一区二区天天拍小说| 蜜桃av噜噜一区二区三区小说| 国产精品网站在线观看| 欧美精品vⅰdeose4hd| 成人中文字幕合集| 麻豆国产91在线播放| 亚洲日本va在线观看| 日韩欧美亚洲国产另类| 色噜噜狠狠成人网p站| 国产精品一二三四| 免费看欧美美女黄的网站| 亚洲色图清纯唯美| www精品美女久久久tv| 色菇凉天天综合网| 粉嫩嫩av羞羞动漫久久久| 免费观看91视频大全| 亚洲综合在线第一页| 国产精品丝袜在线| 精品国产污污免费网站入口| 欧美日韩一区二区三区免费看| 国产成人综合视频| 精东粉嫩av免费一区二区三区| 亚洲精选一二三| 国产视频一区二区在线| 日韩视频免费观看高清完整版在线观看| 91亚洲资源网| 99久久精品免费看| 日韩黄色片在线观看| 亚洲一二三四区| 亚洲免费在线看| 亚洲欧美影音先锋| 国产精品美女久久久久av爽李琼| 欧美精品一区二区久久婷婷| 欧美一个色资源| 91精品国产品国语在线不卡| 欧美丰满美乳xxx高潮www| 欧美在线视频全部完| 91激情在线视频| 在线观看www91| 欧美亚洲综合色| 欧美性猛交xxxx黑人交| 欧美影院精品一区| 欧美日韩综合在线免费观看| 在线观看日韩电影| 欧美久久久一区| 777a∨成人精品桃花网| 69堂国产成人免费视频| 欧美午夜视频网站| 69久久夜色精品国产69蝌蚪网| 欧美日韩国产小视频| 91精品蜜臀在线一区尤物| 欧美一级淫片007| 337p粉嫩大胆色噜噜噜噜亚洲 | 日精品一区二区| 亚洲国产精品久久久久婷婷884| 玉米视频成人免费看| 亚洲一区二区三区爽爽爽爽爽| 午夜精品福利一区二区三区av| 五月天网站亚洲| 国产一区二区福利视频| 国产超碰在线一区| 一本到高清视频免费精品| 欧美性色欧美a在线播放| 91麻豆精品国产91久久久资源速度 | 日本女人一区二区三区| 韩国精品免费视频| 99re在线精品| 911精品国产一区二区在线| 91久久精品日日躁夜夜躁欧美| 韩国一区二区视频| 一区二区三区四区不卡在线| 日韩电影免费在线| 不卡的av中国片| 看电影不卡的网站| 亚洲h动漫在线| 国产传媒日韩欧美成人| 91免费国产视频网站| 日韩一区二区影院| 亚洲色图19p| 久久99精品国产91久久来源| 91玉足脚交白嫩脚丫在线播放| 欧美日韩精品欧美日韩精品一综合| 精品国产乱码久久久久久老虎| 国产精品国产三级国产aⅴ中文| 天天操天天综合网| 99精品国产99久久久久久白柏| 欧美日韩精品一区二区天天拍小说 | 色噜噜久久综合| 久久人人爽人人爽|