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

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

?? usb_enumerate.c

?? atmel arm9系列的USB與PC通信
?? C
?? 第 1 頁 / 共 2 頁
字號:
//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_GetStatusInterface
//* \brief Answer to a standard GET STATUS INTERFACE request
//*----------------------------------------------------------------------------
__inline void AT91F_USB_GetStatusInterface(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	AT91PS_UDP   pUdp = pUSBCTL->pUdp; // Pointer to UDP registers

	// Return 0 (Cf. Fig 9.5 in USB Spec Rev 1.1)
	AT91F_UDP_EpWrite(pUdp, 0, 0);
	AT91F_UDP_EpWrite(pUdp, 0, 0);
	AT91F_UDP_EpEndOfWr(pUdp, 0);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_GetStatusEndpoint
//* \brief Answer to a standard GET STATUS ENDPOINT request
//*----------------------------------------------------------------------------
__inline void AT91F_USB_GetStatusEndpoint(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	AT91PS_UDP   pUdp = pUSBCTL->pUdp; // Pointer to UDP registers
	unsigned char endpoint = (pUSBCTL->pSetup[4] & 0x7F);

	// Return halt or not (Cf. Fig 9.6 in USB Spec Rev 1.1)
	if ((AT91F_UDP_GetState(pUdp) != AT91C_UDP_CONFG) ||  (endpoint > 3))
		AT91F_UDP_EpStall(pUdp, 0);
	else {
		if (AT91F_UDP_EpStatus(pUdp, endpoint) & AT91C_UDP_EPEDS)
			AT91F_UDP_EpWrite(pUdp, 0, 1);
		else
			AT91F_UDP_EpWrite(pUdp, 0, 0);
		AT91F_UDP_EpWrite(pUdp, 0, 0);
		AT91F_UDP_EpEndOfWr(pUdp, 0);
	}
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_SetFeatureZero
//* \brief Answer to a standard SET FEATURE ZERO request
//*----------------------------------------------------------------------------
__inline void AT91F_USB_SetFeatureZero(
	AT91PS_SVC_USBCTL pUSBCTL)
{
    // Device feature RWUp is not supported STALL it
	AT91F_UDP_EpStall(pUSBCTL->pUdp, 0);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_SetFeatureInterface
//* \brief Answer to a standard SET FEATURE INTERFACE request
//*----------------------------------------------------------------------------
__inline void AT91F_USB_SetFeatureInterface(
	AT91PS_SVC_USBCTL pUSBCTL)
{
    // Assumed RFU...
    // Send a zero length packet
	AT91F_UDP_EpEndOfWr(pUSBCTL->pUdp, 0);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_SetFeatureEndpoint
//* \brief Answer to a standard SET FEATURE ENDPOINT request
//*----------------------------------------------------------------------------
__inline void AT91F_USB_SetFeatureEndpoint(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	AT91PS_UDP   pUdp = pUSBCTL->pUdp; // Pointer to UDP registers
	unsigned char endpoint = (pUSBCTL->pSetup[4] & 0x7F);

    // If Feature different from ENDPOINT_HALT, Stall the request !!! (Cf table 9.6 in USB Spec. )
	if (pUSBCTL->pSetup[2])
		AT91F_UDP_EpStall(pUdp, 0);

	if ((AT91F_UDP_GetState(pUdp) != AT91C_UDP_CONFG) ||  (endpoint < 1) || (endpoint > 3))
		AT91F_UDP_EpStall(pUdp, 0);
	else {
		// Disable the endpoint
		AT91F_UDP_DisableEp(pUdp, endpoint);
    	// Send a zero length packet
		AT91F_UDP_EpEndOfWr(pUdp, 0);
	}
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_ClrFeatureZero
//* \brief Answer to a standard CLEAR FEATURE ZERO request
//*----------------------------------------------------------------------------
__inline void AT91F_USB_ClrFeatureZero(
	AT91PS_SVC_USBCTL pUSBCTL)
{
    // Device feature RWUp is not supported STALL it
	AT91F_UDP_EpStall(pUSBCTL->pUdp, 0);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_ClrFeatureInterface
//* \brief Answer to a standard CLEAR FEATURE INTERFACE request
//*----------------------------------------------------------------------------
__inline void AT91F_USB_ClrFeatureInterface(
	AT91PS_SVC_USBCTL pUSBCTL)
{
    // Assumed RFU...
    // Send a zero length packet
	AT91F_UDP_EpEndOfWr(pUSBCTL->pUdp, 0);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_ClrFeatureEndpoint
//* \brief Answer to a standard CLEAR FEATURE ENDPOINT request
//*----------------------------------------------------------------------------
__inline void AT91F_USB_ClrFeatureEndpoint(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	AT91PS_UDP   pUdp = pUSBCTL->pUdp; // Pointer to UDP registers
	unsigned char endpoint = (pUSBCTL->pSetup[4] & 0x7F);

    // If Feature different from ENDPOINT_HALT, Stall the request !!! (Cf table 9.6 in USB Spec. )
	if (pUSBCTL->pSetup[2])
		AT91F_UDP_EpStall(pUdp, 0);

	if ((AT91F_UDP_GetState(pUdp) != AT91C_UDP_CONFG) ||  (endpoint < 1) || (endpoint > 3))
		AT91F_UDP_EpStall(pUdp, 0);
	else {
		// Disable the endpoint
		AT91F_UDP_EnableEp(pUdp, endpoint);
    	// Send a zero length packet
		AT91F_UDP_EpEndOfWr(pUdp, 0);
	}
}

char serialState[] = {
	0xA1, 0x20, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,
	0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
	};

char networkConnection[] = {
	0xA1, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00
	};

typedef struct {
	unsigned int dwDTERRate;
	char bCharFormat;
	char bParityType;
	char bDataBits;
} AT91S_CDC_LINE_CODING, *AT91PS_CDC_LINE_CODING;

	
AT91S_CDC_LINE_CODING lineCoding = {
	921600, // baudrate
	0,      // 1 Stop Bit
	2,      // None Parity
	8};     // 8 Data bits

	
//*----------------------------------------------------------------------------
//* \fn    AT91F_CDC_GetLineCoding
//* \brief This request allows the host to find out the currently configured line coding
//*----------------------------------------------------------------------------
__inline void AT91F_CDC_GetLineCoding(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	unsigned short wLength = *((unsigned short *) &(pUSBCTL->pSetup[6]));
	pUSBCTL->Write(pUSBCTL,
		(const char *) &lineCoding,
		MIN(sizeof(lineCoding), wLength),
		(AT91PF_SVC_USBCTL_RWComplete) 0);    // No callback
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_CDC_SetLineCodingComplete
//* \brief AT91F_CDC_SetLineCodingComplete once AT91F_CDC_SetLineCoding is achieved
//*----------------------------------------------------------------------------
__inline void AT91F_CDC_SetLineCodingComplete(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	AT91PS_UDP   pUdp = pUSBCTL->pUdp; // Pointer to UDP registers
	// Send a STATUS IN
	AT91F_UDP_EpEndOfWr(pUdp, 0);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_CDC_SetLineCoding
//* \brief This request allows the host to specify typical asynchronous line-characterformatting properties
//*----------------------------------------------------------------------------
__inline void AT91F_CDC_SetLineCoding(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	unsigned short wLength = *((unsigned short *) &(pUSBCTL->pSetup[6]));
	pUSBCTL->Read(pUSBCTL,
		(char *) &lineCoding,
		MIN(sizeof(lineCoding), wLength),
		(AT91PF_SVC_USBCTL_RWComplete) AT91F_CDC_SetLineCodingComplete);    // No callback
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_SetAddress
//* \brief Answer to a standard SET ADDRESS request
//*----------------------------------------------------------------------------
void AT91F_CDC_NotificationComplete(
	AT91PS_SVC_USBIN pUSBIN)
{
	usbEp3.Write(&usbEp3, networkConnection, sizeof(networkConnection), (AT91PF_SVC_SVCUSBIN_TxComplete) 0);

}

void AT91F_CDC_SetControlLineStateComplete(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	currentConnection = pUSBCTL->pSetup[2];
	if (currentConnection == 3)
		usbEp3.Write(&usbEp3, serialState, sizeof(serialState), (AT91PF_SVC_SVCUSBIN_TxComplete) 0);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_CDC_SetControlLineState
//* \brief This request allows the host to specify typical asynchronous line-characterformatting properties
//*----------------------------------------------------------------------------
__inline void AT91F_CDC_SetControlLineState(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	//AT91PS_UDP   pUdp = pUSBCTL->pUdp; // Pointer to UDP registers
	// Send a STATUS IN
	pUSBCTL->Write(pUSBCTL,	(char *) 0,	0, AT91F_CDC_SetControlLineStateComplete);
	//AT91F_UDP_EpEndOfWr(pUdp, 0);
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_USB_DispatchRequest
//* \brief This function is a callback invoked when a SETUP packet is received
//*----------------------------------------------------------------------------
void AT91F_USB_DispatchRequest(
	AT91PS_SVC_USBCTL pUSBCTL)
{
	unsigned short request = *((unsigned short *) pUSBCTL->pSetup);

	// Handle supported standard device request Cf Table 9-3 in USB specification Rev 1.1
	if ((request == STD_GET_DESCRIPTOR) && (pUSBCTL->pSetup[3] == 1))
		AT91F_USB_GetDescriptorDevice(pUSBCTL);
	else if ((request == STD_GET_DESCRIPTOR) && (pUSBCTL->pSetup[3] == 2))
		AT91F_USB_GetDescriptorConfiguration(pUSBCTL);
	else if (request == STD_SET_ADDRESS)             AT91F_USB_SetAddress(pUSBCTL);
	else if (request == STD_SET_CONFIGURATION)       AT91F_USB_SetConfiguration(pUSBCTL);
	else if (request == STD_GET_CONFIGURATION)       AT91F_USB_GetConfiguration(pUSBCTL);
	else if (request == STD_GET_STATUS_ZERO)         AT91F_USB_GetStatusZero(pUSBCTL);
	else if (request == STD_GET_STATUS_INTERFACE)    AT91F_USB_GetStatusInterface(pUSBCTL);
	else if (request == STD_GET_STATUS_ENDPOINT)     AT91F_USB_GetStatusEndpoint(pUSBCTL);
	else if (request == STD_SET_FEATURE_ZERO)        AT91F_USB_SetFeatureZero(pUSBCTL);
	else if (request == STD_SET_FEATURE_INTERFACE)   AT91F_USB_SetFeatureInterface(pUSBCTL);
	else if (request == STD_SET_FEATURE_ENDPOINT)    AT91F_USB_SetFeatureEndpoint(pUSBCTL);
	else if (request == STD_CLEAR_FEATURE_ZERO)      AT91F_USB_ClrFeatureZero(pUSBCTL);
	else if (request == STD_CLEAR_FEATURE_INTERFACE) AT91F_USB_ClrFeatureInterface(pUSBCTL);
	else if (request == STD_CLEAR_FEATURE_ENDPOINT)  AT91F_USB_ClrFeatureEndpoint(pUSBCTL);

	// handle CDC class requests
	else if (request == SET_LINE_CODING) AT91F_CDC_SetLineCoding(pUSBCTL);
	else if (request == GET_LINE_CODING) AT91F_CDC_GetLineCoding(pUSBCTL);
	else if (request == SET_CONTROL_LINE_STATE) AT91F_CDC_SetControlLineState(pUSBCTL);
	// Unsupported requests
	else
		AT91F_UDP_EpStall(pUSBCTL->pUdp, 0);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99在线视频精品| 国产精品免费观看视频| 午夜视频在线观看一区二区 | 国产精品人人做人人爽人人添| 91福利精品视频| 国产一区在线观看视频| 麻豆91在线播放| 毛片基地黄久久久久久天堂| 蜜桃视频在线观看一区二区| 理论电影国产精品| 午夜影院久久久| 成人av影院在线| 欧美精品日韩一区| 99久久777色| 日本三级亚洲精品| 有码一区二区三区| 亚洲午夜一二三区视频| 亚洲一区二区三区四区在线观看 | 日本视频在线一区| 成人福利视频网站| 精品久久久三级丝袜| 日韩成人免费在线| 欧美老肥妇做.爰bbww| 久久久久久久久岛国免费| 欧美国产欧美亚州国产日韩mv天天看完整 | 国产一区啦啦啦在线观看| 亚洲444eee在线观看| 青青草一区二区三区| 精品在线观看免费| 婷婷夜色潮精品综合在线| 91蜜桃免费观看视频| 色婷婷综合久久久中文字幕| 欧美色图激情小说| 日韩欧美中文字幕制服| 国产日本欧美一区二区| 亚洲精品久久久蜜桃| 午夜精品久久久久久久久久久 | 国产福利一区二区三区视频| 色综合视频一区二区三区高清| 欧美日韩国产欧美日美国产精品| 欧美刺激脚交jootjob| 国产精品毛片高清在线完整版 | 成人免费视频视频| 欧美日韩精品久久久| 欧美精品一区二区精品网| 欧美区一区二区三区| 亚洲婷婷综合色高清在线| 精品一二三四在线| 亚洲三级免费观看| 色狠狠桃花综合| 欧美三级中文字幕在线观看| 精品久久久久久久久久久久包黑料 | 久久久精品国产免费观看同学| 欧美国产日本视频| 午夜激情一区二区三区| 成人午夜又粗又硬又大| 91精品国产综合久久小美女| 国产精品嫩草影院com| 日本成人在线网站| 色综合咪咪久久| 久久久.com| 久久国产三级精品| 欧美日韩精品一区二区在线播放 | 五月激情六月综合| av成人老司机| 国产清纯在线一区二区www| 亚洲一区二区欧美| 一本色道亚洲精品aⅴ| 亚洲国产精品激情在线观看| 青青国产91久久久久久| 欧美日韩久久久| 午夜精品影院在线观看| 日本精品一区二区三区四区的功能| 国产欧美日韩在线观看| 麻豆高清免费国产一区| 日韩欧美国产综合在线一区二区三区| 国产精品不卡一区二区三区| 国产成人免费av在线| 久久人人97超碰com| 国产福利一区二区三区视频在线| 日韩免费性生活视频播放| 麻豆91在线看| 久久久久久久综合| 色综合久久天天| 亚洲第一久久影院| 欧美男男青年gay1069videost| 亚洲一区二区精品久久av| 欧美午夜影院一区| 美女性感视频久久| 久久婷婷一区二区三区| 国产精品影音先锋| 国产精品免费视频网站| 不卡视频在线看| 亚洲福利视频三区| 欧美精品乱码久久久久久| 精品一区二区三区在线视频| 国产精品白丝在线| 欧美日韩日日夜夜| 国产酒店精品激情| 性感美女极品91精品| 欧美精品粉嫩高潮一区二区| 国内久久精品视频| 亚洲欧美日韩国产综合| 精品噜噜噜噜久久久久久久久试看| 国产精品99久久久久久有的能看| 亚洲另类在线视频| 日韩欧美国产系列| 91成人免费电影| 国产在线不卡一区| 日韩专区欧美专区| 亚洲男人的天堂网| 久久午夜电影网| 欧美精品在线观看播放| 成人一区二区三区视频在线观看| 日韩不卡一区二区| 亚洲精选视频免费看| 国产精品久久久久aaaa樱花 | 91精品国产综合久久精品图片| 国产精品亚洲午夜一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 中文字幕日本不卡| 国产调教视频一区| 久久久高清一区二区三区| 日韩免费观看高清完整版| 69久久夜色精品国产69蝌蚪网| 欧洲一区在线电影| 91蝌蚪国产九色| 欧美中文一区二区三区| 成人国产在线观看| 成人精品视频一区二区三区尤物| 国产老肥熟一区二区三区| 韩国毛片一区二区三区| 国产精品一区专区| 国内不卡的二区三区中文字幕| 国产综合久久久久影院| 国产91精品精华液一区二区三区 | 蜜桃一区二区三区四区| 视频在线观看91| 久久精品国产秦先生| 国产精品亚洲一区二区三区在线| 国产综合一区二区| 一本大道av伊人久久综合| 91官网在线免费观看| 91精品国产色综合久久ai换脸 | 久久久亚洲精品一区二区三区| www精品美女久久久tv| 国产精品盗摄一区二区三区| 亚洲一区二区三区国产| 久久国产夜色精品鲁鲁99| 大胆亚洲人体视频| 555www色欧美视频| 欧美国产亚洲另类动漫| 日韩av一区二区三区四区| 国产精品一区二区免费不卡| 欧美在线短视频| 日本一区二区三区四区在线视频 | 国产精品一区二区免费不卡| 丁香六月久久综合狠狠色| 欧美日韩中文国产| 1024成人网| 国产二区国产一区在线观看| 欧美精品自拍偷拍| 亚洲裸体xxx| 国产99精品在线观看| 精品少妇一区二区| 婷婷成人综合网| 91传媒视频在线播放| 亚洲免费视频中文字幕| 国产美女久久久久| 精品国产乱码久久久久久1区2区| 亚洲v精品v日韩v欧美v专区| 成人午夜电影小说| 久久免费偷拍视频| 国产麻豆日韩欧美久久| 日韩精品一区二区三区swag| 日本不卡在线视频| 在线观看www91| 亚洲乱码国产乱码精品精98午夜 | 亚洲精品视频在线| 成av人片一区二区| 国产精品人妖ts系列视频| 成av人片一区二区| 国产精品久久久久久久久搜平片| 国产馆精品极品| 亚洲视频免费观看| 欧美在线观看禁18| 日本sm残虐另类| 久久精品视频在线看| 国产成人精品一区二区三区四区| 久久久久久久综合色一本| 国产一区二区视频在线| 国产精品美女久久久久久久久| 日本韩国精品在线| 亚洲成人一区二区| 精品国产乱码久久| 99久久99久久精品国产片果冻| 一区二区在线观看不卡| 日韩欧美电影在线| 成人免费电影视频| 视频在线观看一区二区三区|