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

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

?? fw2hid.c

?? 基于sy2100 ez-usb開發板的程序
?? C
字號:
//-----------------------------------------------------------------------------
//	File:		fw2HID.c (fw.c modified by LTH on 20-Aug-01
//	Contents:	Firmware frameworks task dispatcher and device request parser
//				source.
//
//	Copyright (c) 2001 Cypress Semiconductor, Inc. All rights reserved
//-----------------------------------------------------------------------------
#include "ezusb.h"
#include "ezregs.h"
//-----------------------------------------------------------------------------
// Macros
//-----------------------------------------------------------------------------
#define	min(a,b) (((a)<(b))?(a):(b))
#define	max(a,b) (((a)>(b))?(a):(b))
//-----------------------------------------------------------------------------
// Constants
//-----------------------------------------------------------------------------
#define	bmRequestType 	0
#define bRequest		1
#define	wValueL		 	2
#define wValueH			3
#define	wIndexL		 	4
#define wIndexH			5
#define	wLengthL		6
#define wLengthH		7
//
#define GET_REPORT		0x01	// HID Request Types
#define SET_REPORT		0x09
#define GET_IDLE		0x02
#define SET_IDLE		0x0A
//
#define rt_INPUT		1		// HID report types
#define rt_OUTPUT		2
#define rt_FEATURE		3		// all others are 'reserved'
//-----------------------------------------------------------------------------
// Global Variables
//-----------------------------------------------------------------------------
//volatile BOOL	GotSUD;	// set by SUDAV ISR
//volatile BOOL	Sleep;	// Sleep mode enable flag
BOOL	GotSUD;			// set by SUDAV ISR
BOOL	Sleep;			// Sleep mode enable flag
BOOL	Rwuen;
BOOL	Selfpwr;
BYTE	IdleRate;
//-----------------------------------------------------------------------------
// Prototypes
//-----------------------------------------------------------------------------
void SetupCommand(void);
void TD_Init(void);
void TD_Poll(void);
BOOL TD_Suspend(void);
BOOL TD_Resume(void);

BOOL DR_SetConfiguration(void);
BOOL DR_GetConfiguration(void);
BOOL DR_SetInterface(void);
BOOL DR_GetInterface(void);
BOOL DR_GetStatus(void);
BOOL DR_ClearFeature(void);
BOOL DR_SetFeature(void);

void process_standard_request(void);
void process_class_request(void);
void process_descriptor(void);

//-----------------------------------------------------------------------------
// Descriptors
//-----------------------------------------------------------------------------
extern code	DeviceDescr,ConfigDescr,String0,String1,String2,HIDDescr;
extern code ReportDescr,ReportDescr_end;
//-----------------------------------------------------------------------------
// Code
//-----------------------------------------------------------------------------

// Task dispatcher
void main(void)						// power-on reset takes us here
{
	// Initialize Global States
	Sleep = FALSE;					// Disable sleep mode
	Rwuen = FALSE;					// Disable remote wakeup
	Selfpwr = FALSE;				// Disable self powered
	GotSUD = FALSE;					// Clear "Got setup data" flag

	// Initialize user device
	TD_Init();

	EZUSB_IRQ_ENABLE();					// Enable USB interrupt (INT2)
	EZUSB_ENABLE_RSMIRQ();				// Wake-up interrupt
	PORTCCFG |= 0xc0;					// Turn on r/w lines for external memory (Keil monitor)
	USBBAV = USBBAV | 1 & ~bmBREAK;		// Disable breakpoints and ENABLE autovectoring
	USBIEN |= bmSUDAV | bmSUSP | bmURES;	// Enable selected interrupts
	EA = 1;								// Enable 8051 interrupts

    EZUSB_Discon(TRUE); 				// ReNumerate
 
	// Task Dispatcher
	while(TRUE)							// Main Loop
	{
		if(GotSUD)						// Wait for SUDAV
		{
			SetupCommand();	 			// Service the SETUP request
  			GotSUD = FALSE;				// Clear SUDAV flag--NOTE: clearing GotSUD after calling SetupCommand()
		}								// properly handles multi-packet Get_Descriptor_Report requests
										// (which would generate multiple SUDAV interrupts).
		if (Sleep)						// set to TRUE by the SUSPEND ISR
		    {
    		if(TD_Suspend())			// hook in periph.c to do stuff before suspending
    		    { 
    		    Sleep = FALSE;	   		// Clear the "go to sleep" flag.  Do it here to prevent any race condition between wakeup and the next sleep.
    		    do
    		        {
       			    EZUSB_Susp();		// Place processor in idle mode.
    		        }
                while(!Rwuen && EZUSB_EXTWAKEUP());
                // Must continue to go back into suspend if the host has disabled remote wakeup
                // *and* the wakeup was caused by the external wakeup pin.
                
    			// 8051 activity will resume here due to USB bus or Wakeup# pin activity.
    			EZUSB_Resume();	// If source is the Wakeup# pin, signal the host to Resume.		
    			TD_Resume();
    		    }   
		    }

		TD_Poll();
	} // end while(TRUE)
}

// Device request parser
void SetupCommand(void)
{
	switch(SETUPDAT[bmRequestType] & 0x60)	// 00-std,20-class,40-vendor,60-reserved.
	{
		case SETUP_STANDARD_REQUEST:
			process_standard_request();
		break;
		case SETUP_CLASS_REQUEST:
			process_class_request();
		break;
		default:
 			EZUSB_STALL_EP0();		// we don't handle SETUP_VENDOR_REQUEST or "Reserved".
	}
EP0CS = bmHS;						// Clear the HS-NAK bit by writing '1' to it
}

void process_standard_request(void)
{
	switch(SETUPDAT[bRequest])
	{
		case SC_GET_DESCRIPTOR:		// *** Get Descriptor
			process_descriptor();
		break;
		case SC_GET_INTERFACE:					// *** Get Interface
			DR_GetInterface();
		break;
		case SC_SET_INTERFACE:					// *** Set Interface
			DR_SetInterface();
		break;
		case SC_SET_CONFIGURATION:				// *** Set Configuration
			DR_SetConfiguration();
		break;
		case SC_GET_CONFIGURATION:				// *** Get Configuration
			DR_GetConfiguration();
		break;
		case SC_GET_STATUS:						// *** Get Status
			if(DR_GetStatus())
				switch(SETUPDAT[bmRequestType])
				{
					case GS_DEVICE:				// Device
						IN0BUF[0] = ((BYTE)Rwuen << 1) | (BYTE)Selfpwr;
						IN0BUF[1] = 0;
						EZUSB_SET_EP_BYTES(IN0BUF_ID,2);
					break;
					case GS_INTERFACE:			// Interface
						IN0BUF[0] = 0;
						IN0BUF[1] = 0;
						EZUSB_SET_EP_BYTES(IN0BUF_ID,2);
					break;
					case GS_ENDPOINT:			// End Point
						IN0BUF[0] = EPIO[EPID(SETUPDAT[wIndexL])].cntrl & bmEPSTALL;
						IN0BUF[1] = 0;
						EZUSB_SET_EP_BYTES(IN0BUF_ID,2);
					break;
					default:					// Invalid Command
						EZUSB_STALL_EP0();	
				}
		break;
		case SC_CLEAR_FEATURE:					// *** Clear Feature
			if(DR_ClearFeature())
				switch(SETUPDAT[bmRequestType])
				{
					case FT_DEVICE:				// Device
						if(SETUPDAT[wValueL] == 1)
							Rwuen = FALSE; 		// Disable Remote Wakeup
						else
							EZUSB_STALL_EP0();	// we only recognize '1'
					break;
					case FT_ENDPOINT:			// End Point
						if(SETUPDAT[wValueL] == 0)
                  		{
							EZUSB_UNSTALL_EP(EPID(SETUPDAT[wIndexL]));
                    		EZUSB_RESET_DATA_TOGGLE(SETUPDAT[wIndexL]);
                  		}
						else
							EZUSB_STALL_EP0();
					break;
				}
		break;
		case SC_SET_FEATURE:					// *** Set Feature
			if(DR_SetFeature())
				switch(SETUPDAT[bmRequestType])
				{
					case FT_DEVICE:				// Device
						if(SETUPDAT[wValueL] == 1)
							Rwuen = TRUE;		// Enable Remote Wakeup
						else
							EZUSB_STALL_EP0();
					break;
					case FT_ENDPOINT:			// End Point
						if(SETUPDAT[wValueL] == 0)
							EZUSB_STALL_EP( EPID(SETUPDAT[wIndexL]) );
						else
							EZUSB_STALL_EP0();
					break;
				}
		break;
		default:								// *** Invalid Command
				EZUSB_STALL_EP0();
	} // end switch
} // end process_request()

void process_descriptor()
{
unsigned int	j,k,ReportSize;
	switch(SETUPDAT[wValueH])
	{
		case GD_DEVICE:					// Device
			SUDPTRH = MSB(&DeviceDescr);
			SUDPTRL = LSB(&DeviceDescr);
		break;
		case GD_CONFIGURATION:			// Configuration
			SUDPTRH = MSB(&ConfigDescr);
			SUDPTRL = LSB(&ConfigDescr);
		break;
		case GD_STRING:					// String
			{
			switch(SETUPDAT[wValueL])
				{
				case 0:					// string index 1
					SUDPTRH = MSB(&String0);
					SUDPTRL = LSB(&String0);
				break;
				case 1:					// string index 1
					SUDPTRH = MSB(&String1);
					SUDPTRL = LSB(&String1);
				break;
				case 2:					// string index 2
					SUDPTRH = MSB(&String2);
					SUDPTRL = LSB(&String2);
				break;
				default:				// Invalid string requested
					EZUSB_STALL_EP0();
				} // end switch
			} // end case
		break;
		case GD_HID:					// Get-Descriptor: HID
			SUDPTRH = MSB(&HIDDescr);
			SUDPTRL = LSB(&HIDDescr);
		break;
		case GD_REPORT:					// Get-Descriptor: Report
/*
Note: A HID report does not have a length field which the SIE can read to determine how many
bytes to send using the Setup Data Pointer. Therefore we need to 'manually' send the data.
*/
			ReportSize = (WORD)&ReportDescr_end - (WORD)&ReportDescr;
			AUTOPTRH = MSB(&ReportDescr);
			AUTOPTRL = LSB(&ReportDescr);
			while(ReportSize)
				{
				k = min(ReportSize,64);		// smaller of ReportSize or IN0 Buffer (64 bytes)
				for(j=0;j<k;j++)
					IN0BUF[j]=AUTODATA;
					IN0BC = j;					// arm the IN transfer
					ReportSize = ReportSize-j;
					while(EP0CS & bmIN);		// wait for it to go out and get ACK'd
				}
		break;
 	    default:					// *** Invalid Command
			EZUSB_STALL_EP0();
	} // end switch
} // end function

void process_class_request(void)	// Handle the HID class
{
switch(SETUPDAT[bRequest])
	{
	case SET_REPORT:
		switch(SETUPDAT[wValueH])			// wValueH has report type
			{
			case rt_INPUT:
			break;
			case rt_OUTPUT:
			break;
			case rt_FEATURE:
			break;
			default:
				EZUSB_STALL_EP0();
			}
	break;
	case GET_REPORT:
		switch(SETUPDAT[wValueH])			// wValueH has report type
			{
			case rt_INPUT:
			break;
			case rt_OUTPUT:
			break;
			case rt_FEATURE:
			break;
			default:
				EZUSB_STALL_EP0();
			}
	break;
	case SET_IDLE:
		IdleRate = SETUPDAT[wValueH];
	break;
	case GET_IDLE:
		IN0BUF[0]=IdleRate;
		IN0BC = 1;					// arm the IN transfer
	break;
	default:
			EZUSB_STALL_EP0();		// this includes 'GET/SET_PROTOCOL'
	} // end switch
}

void resume_isr(void) interrupt WKUP_VECT	// Wakeup interrupt handler
{
	EZUSB_CLEAR_RSMIRQ();
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日韩精品一区| 99精品桃花视频在线观看| 亚洲天堂网中文字| 国产欧美一区二区三区在线老狼 | 亚洲另类春色校园小说| 中日韩av电影| 中文字幕在线不卡一区| 1区2区3区国产精品| 国产精品剧情在线亚洲| 成人免费一区二区三区在线观看| 国产精品美女视频| 成人免费小视频| 亚洲第四色夜色| 青草国产精品久久久久久| 久久aⅴ国产欧美74aaa| 国产原创一区二区| 国产91丝袜在线播放0| 99r国产精品| 欧美日韩综合在线| 日韩一卡二卡三卡| 久久久久久久久久久电影| 国产女同互慰高潮91漫画| 日韩美女视频19| 亚洲高清免费观看 | 精品国产乱码久久久久久久| 精品成人佐山爱一区二区| 国产亚洲欧美在线| 一区二区久久久| 久久成人18免费观看| 成人污视频在线观看| 欧美伊人精品成人久久综合97 | 欧美成人精品3d动漫h| 久久嫩草精品久久久精品一| 1区2区3区精品视频| 午夜天堂影视香蕉久久| 国产揄拍国内精品对白| 色诱亚洲精品久久久久久| 日韩精品专区在线影院重磅| 国产色产综合产在线视频| 亚洲国产精品嫩草影院| 韩国欧美一区二区| 欧美无乱码久久久免费午夜一区| 欧美草草影院在线视频| 亚洲精品国产品国语在线app| 男女性色大片免费观看一区二区| 国产69精品久久99不卡| 91精品国产欧美一区二区18| 国产精品另类一区| 韩国毛片一区二区三区| 在线一区二区三区四区五区| 精品久久久久久久人人人人传媒| 一区精品在线播放| 99久久99久久精品免费看蜜桃| 日韩一级片网站| 亚洲人成网站在线| 成人激情免费网站| 亚洲精品在线免费观看视频| 亚洲第一二三四区| 色综合久久中文字幕| 国产精品私人影院| 国产精品1区2区3区在线观看| 欧美精品丝袜中出| 一区二区在线免费观看| heyzo一本久久综合| 国产欧美视频一区二区三区| 激情五月婷婷综合网| 制服丝袜国产精品| 日韩电影一区二区三区四区| 欧美专区日韩专区| 亚洲国产欧美在线| 欧美在线影院一区二区| 一二三区精品视频| 91污片在线观看| 中文字幕中文字幕一区二区| www.亚洲国产| 国产精品久久看| 波多野洁衣一区| 亚洲视频一区在线| 色天使色偷偷av一区二区| 亚洲特黄一级片| 久久久久久久av麻豆果冻| 国产一本一道久久香蕉| 国产欧美精品一区aⅴ影院| 国产不卡在线视频| 自拍偷拍欧美激情| 在线观看一区日韩| 日韩中文字幕1| 欧美v国产在线一区二区三区| 久久精品国产999大香线蕉| 精品国产乱码久久久久久老虎| 精彩视频一区二区| 国产精品久久久久久久久久免费看| 成人福利视频在线| 一区二区三区国产| 欧美一区二区三区免费在线看| 麻豆精品视频在线| 国产精品毛片a∨一区二区三区| 99久久99久久综合| 天堂va蜜桃一区二区三区漫画版| 欧美一区二区视频网站| 国产精品综合久久| 一区二区三区视频在线观看| 欧美日本一区二区三区四区| 久久aⅴ国产欧美74aaa| 国产精品免费丝袜| 在线电影一区二区三区| 国产曰批免费观看久久久| 最近日韩中文字幕| 宅男噜噜噜66一区二区66| 高清av一区二区| 亚洲成人自拍网| 国产精品三级av| 欧美一区二区三区爱爱| 亚洲一区二区在线播放相泽| 成人av集中营| 亚洲一级在线观看| 日韩一区二区不卡| www.av亚洲| 韩国女主播成人在线观看| 亚洲美女免费在线| 日韩亚洲欧美中文三级| 91麻豆国产精品久久| 国内国产精品久久| 国产精品一区二区果冻传媒| 亚洲乱码国产乱码精品精的特点| 日韩视频中午一区| 在线亚洲+欧美+日本专区| 国产在线观看免费一区| 亚洲国产精品久久久久婷婷884| xf在线a精品一区二区视频网站| 色综合久久久久久久久| 国产乱码精品一品二品| 日韩vs国产vs欧美| 亚洲午夜精品网| 成人免费一区二区三区在线观看| 欧美大度的电影原声| 欧美日韩激情在线| 在线观看一区二区视频| 懂色av噜噜一区二区三区av | 在线观看国产精品网站| 高清在线成人网| 国产精品一区二区三区网站| 日本最新不卡在线| 午夜视频在线观看一区| 亚洲综合自拍偷拍| 亚洲蜜臀av乱码久久精品| 亚洲国产成人在线| 国产婷婷一区二区| 国产性天天综合网| 久久久不卡网国产精品一区| 久久丝袜美腿综合| 久久日韩精品一区二区五区| 欧美mv日韩mv亚洲| 精品国产露脸精彩对白| 欧美成人aa大片| 久久综合久久鬼色| 国产欧美日韩视频一区二区| 国产午夜精品久久久久久久| 精品福利在线导航| 久久久午夜精品| 国产亚洲综合av| 国产精品久线观看视频| 伊人婷婷欧美激情| 午夜精品久久久久| 欧美96一区二区免费视频| 久久激情五月婷婷| 国产成人午夜视频| 色综合久久中文综合久久97| 色88888久久久久久影院野外| 欧美亚洲禁片免费| 日韩三级免费观看| 国产亚洲制服色| 一区二区三区精品| 欧美专区日韩专区| 欧美精品一级二级| 精品捆绑美女sm三区| 欧美国产日韩一二三区| 日韩理论片一区二区| 午夜久久久久久久久久一区二区| 麻豆精品在线观看| 成人一区在线看| 欧美日韩一区二区三区四区 | 中文字幕日韩一区| 亚洲国产综合视频在线观看| 蜜臀99久久精品久久久久久软件| 国产一区二区不卡在线| 色欧美片视频在线观看| 日韩精品在线看片z| 亚洲图片欧美激情| 人人狠狠综合久久亚洲| 97se亚洲国产综合自在线不卡| 欧美日韩精品系列| 国产欧美精品一区二区色综合| 一区二区三区四区不卡视频 | 亚洲日本成人在线观看| 日韩影院免费视频| 99re热视频精品| 精品噜噜噜噜久久久久久久久试看| 成人欧美一区二区三区小说| 日本91福利区|