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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usbcontrol.c

?? Free Usb Stack for NXP LPC2xxx microcontrollers.
?? C
字號:
/*	LPCUSB, an USB device driver for LPC microcontrollers		Copyright (C) 2006 Bertrik Sikken (bertrik@sikken.nl)	Redistribution and use in source and binary forms, with or without	modification, are permitted provided that the following conditions are met:	1. Redistributions of source code must retain the above copyright	   notice, this list of conditions and the following disclaimer.	2. Redistributions in binary form must reproduce the above copyright	   notice, this list of conditions and the following disclaimer in the	   documentation and/or other materials provided with the distribution.	3. The name of the author may not be used to endorse or promote products	   derived from this software without specific prior written permission.	THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR	IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES	OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.	IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 	INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT	NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,	DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY	THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT	(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF	THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*//** @file	Control transfer handler.		This module handles control transfers and is normally installed on the	endpoint 0 callback.		Control transfers can be of the following type:	0 Standard;	1 Class;	2 Vendor;	3 Reserved.	A callback can be installed for each of these control transfers using	USBRegisterRequestHandler.	When an OUT request arrives, data is collected in the data store provided	with the USBRegisterRequestHandler call. When the transfer is done, the	callback is called.	When an IN request arrives, the callback is called immediately to either	put the control transfer data in the data store, or to get a pointer to	control transfer data. The data is then packetised and sent to the host.*/#include "type.h"#include "usbdebug.h"#include "usbstruct.h"#include "usbapi.h"#define	MAX_CONTROL_SIZE	128	/**< maximum total size of control transfer data */#define	MAX_REQ_HANDLERS	4	/**< standard, class, vendor, reserved */static TSetupPacket		Setup;	/**< setup packet */static U8				*pbData;	/**< pointer to data buffer */static int				iResidue;	/**< remaining bytes in buffer */static int				iLen;		/**< total length of control transfer *//** Array of installed request handler callbacks */static TFnHandleRequest *apfnReqHandlers[4] = {NULL, NULL, NULL, NULL};/** Array of installed request data pointers */static U8				*apbDataStore[4] = {NULL, NULL, NULL, NULL};/**	Local function to handle a request by calling one of the installed	request handlers.			In case of data going from host to device, the data is at *ppbData.	In case of data going from device to host, the handler can either	choose to write its data at *ppbData or update the data pointer.			@param [in]		pSetup		The setup packet	@param [in,out]	*piLen		Pointer to data length	@param [in,out]	ppbData		Data buffer.	@return TRUE if the request was handles successfully */static BOOL _HandleRequest(TSetupPacket *pSetup, int *piLen, U8 **ppbData){	TFnHandleRequest *pfnHandler;	int iType;		iType = REQTYPE_GET_TYPE(pSetup->bmRequestType);	pfnHandler = apfnReqHandlers[iType];	if (pfnHandler == NULL) {		DBG("No handler for reqtype %d\n", iType);		return FALSE;	}	return pfnHandler(pSetup, piLen, ppbData);}/**	Local function to stall the control endpoint		@param [in]	bEPStat	Endpoint status */static void StallControlPipe(U8 bEPStat){	U8	*pb;	int	i;	USBHwEPStall(0x80, TRUE);// dump setup packet	DBG("STALL on [");	pb = (U8 *)&Setup;	for (i = 0; i < 8; i++) {		DBG(" %02x", *pb++);	}	DBG("] stat=%x\n", bEPStat);}/**	Sends next chunk of data (possibly 0 bytes) to host */static void DataIn(void){	int iChunk;	iChunk = MIN(MAX_PACKET_SIZE0, iResidue);	USBHwEPWrite(0x80, pbData, iChunk);	pbData += iChunk;	iResidue -= iChunk;}/** *	Handles IN/OUT transfers on EP0 * *	@param [in]	bEP		Endpoint address *	@param [in]	bEPStat	Endpoint status */void USBHandleControlTransfer(U8 bEP, U8 bEPStat){	int iChunk, iType;	if (bEP == 0x00) {		// OUT transfer		if (bEPStat & EP_STATUS_SETUP) {			// setup packet, reset request message state machine			USBHwEPRead(0x00, (U8 *)&Setup, sizeof(Setup));			DBG("S%x", Setup.bRequest);			// defaults for data pointer and residue			iType = REQTYPE_GET_TYPE(Setup.bmRequestType);			pbData = apbDataStore[iType];			iResidue = Setup.wLength;			iLen = Setup.wLength;			if ((Setup.wLength == 0) ||				(REQTYPE_GET_DIR(Setup.bmRequestType) == REQTYPE_DIR_TO_HOST)) {				// ask installed handler to process request				if (!_HandleRequest(&Setup, &iLen, &pbData)) {					DBG("_HandleRequest1 failed\n");					StallControlPipe(bEPStat);					return;				}				// send smallest of requested and offered length				iResidue = MIN(iLen, Setup.wLength);				// send first part (possibly a zero-length status message)				DataIn();			}		}		else {					if (iResidue > 0) {				// store data				iChunk = USBHwEPRead(0x00, pbData, iResidue);				if (iChunk < 0) {					StallControlPipe(bEPStat);					return;				}				pbData += iChunk;				iResidue -= iChunk;				if (iResidue == 0) {					// received all, send data to handler					iType = REQTYPE_GET_TYPE(Setup.bmRequestType);					pbData = apbDataStore[iType];					if (!_HandleRequest(&Setup, &iLen, &pbData)) {						DBG("_HandleRequest2 failed\n");						StallControlPipe(bEPStat);						return;					}					// send status to host					DataIn();				}			}			else {				// absorb zero-length status message				iChunk = USBHwEPRead(0x00, NULL, 0);				DBG(iChunk > 0 ? "?" : "");			}		}	}	else if (bEP == 0x80) {		// IN transfer		// send more data if available (possibly a 0-length packet)		DataIn();	}	else {		ASSERT(FALSE);	}}/**	Registers a callback for handling requests			@param [in]	iType			Type of request, e.g. REQTYPE_TYPE_STANDARD	@param [in]	*pfnHandler		Callback function pointer	@param [in]	*pbDataStore	Data storage area for this type of request */void USBRegisterRequestHandler(int iType, TFnHandleRequest *pfnHandler, U8 *pbDataStore){	ASSERT(iType >= 0);	ASSERT(iType < 4);	apfnReqHandlers[iType] = pfnHandler;	apbDataStore[iType] = pbDataStore;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美va欧美不卡在线 | 99久久精品免费精品国产| 99riav一区二区三区| 日韩欧美精品三级| 一区二区三区视频在线观看| 国产原创一区二区| 欧美日韩成人一区二区| 亚洲欧洲日韩av| 国内精品视频一区二区三区八戒| 在线免费一区三区| 18成人在线视频| 丁香激情综合国产| 2017欧美狠狠色| 日韩av不卡一区二区| 在线精品视频一区二区三四| 国产精品美女久久久久久久久| 韩国av一区二区三区| 欧美一区二区三区视频免费| 亚洲伊人色欲综合网| 色综合色综合色综合| 最新国产成人在线观看| 成人免费毛片嘿嘿连载视频| 国产欧美一区二区精品仙草咪 | 国产一区二区调教| 欧美一区二区福利视频| 天天综合天天做天天综合| 欧洲一区在线观看| 亚洲一二三级电影| 欧美午夜在线一二页| 亚洲成人动漫在线观看| 欧美日精品一区视频| 性久久久久久久久| 91精品国产91久久综合桃花 | 国产乱对白刺激视频不卡 | 欧美肥妇bbw| 欧美成人女星排行榜| 久久66热re国产| 欧美麻豆精品久久久久久| 综合久久久久综合| 久久99精品久久只有精品| 国产亚洲福利社区一区| 欧美精品三级日韩久久| 99re热这里只有精品免费视频| 日本成人在线视频网站| 樱花影视一区二区| 久久久久久久久久久99999| 欧美日韩午夜精品| 99国产一区二区三精品乱码| 国产一区二区在线视频| 日韩电影免费在线看| 亚洲男人的天堂在线aⅴ视频| 久久综合色综合88| 欧美一区二区视频在线观看2020| 99久久国产免费看| 成人黄色一级视频| 国产一区二区不卡老阿姨| 日本不卡的三区四区五区| 亚洲综合一区在线| 1024成人网色www| 日本一区二区综合亚洲| 久久久久久久久岛国免费| 日韩欧美成人一区| 337p亚洲精品色噜噜噜| 欧美色欧美亚洲另类二区| 91浏览器打开| 91农村精品一区二区在线| 成人av在线一区二区三区| 国产激情91久久精品导航 | 视频一区在线视频| 亚洲成国产人片在线观看| 亚洲男人都懂的| 亚洲精品一二三| 尤物视频一区二区| 亚洲一区二区在线视频| 亚洲综合无码一区二区| 亚洲一区二区三区视频在线播放 | 美女视频网站黄色亚洲| 蜜桃久久精品一区二区| 麻豆精品在线看| 久久精品久久久精品美女| 精品一区二区久久久| 男女男精品视频| 看电影不卡的网站| 国产老肥熟一区二区三区| 国产一区二区在线免费观看| 国产精品亚洲专一区二区三区| 国产精品一二三四五| 国产91高潮流白浆在线麻豆| av电影在线观看完整版一区二区| voyeur盗摄精品| 色狠狠av一区二区三区| 欧美丝袜自拍制服另类| 欧美一级免费大片| 欧美精品一区二区在线观看| 久久久久久久久久久99999| 国产精品久久久久影院老司| 国产精品毛片久久久久久| 亚洲精品国产第一综合99久久| 亚洲免费资源在线播放| 天天av天天翘天天综合网色鬼国产| 日韩激情中文字幕| 国产精品白丝jk黑袜喷水| 91香蕉视频mp4| 在线成人小视频| 久久精品在这里| 一区二区三区四区中文字幕| 久久黄色级2电影| 99国产精品国产精品毛片| 欧美电影一区二区| 国产欧美一区二区精品性色超碰 | 久久综合九色综合97婷婷| 国产精品久久综合| 视频精品一区二区| 国产成人免费视频| 欧美精品久久一区二区三区| 久久影院视频免费| 亚洲自拍偷拍图区| 国产剧情av麻豆香蕉精品| 欧美色图天堂网| 欧美国产亚洲另类动漫| 水野朝阳av一区二区三区| 丁香啪啪综合成人亚洲小说| 欧美久久婷婷综合色| 国产欧美精品一区二区三区四区| 亚洲午夜精品久久久久久久久| 经典三级一区二区| 91国产成人在线| 欧美激情一区二区三区在线| 亚洲成a人片在线不卡一二三区| 国产成a人无v码亚洲福利| 欧美久久高跟鞋激| 中文字幕综合网| 国产精品一级在线| 91精品国产综合久久香蕉的特点| 亚洲人成小说网站色在线| 国产一区二区三区免费| 欧美日韩精品免费| 亚洲女同女同女同女同女同69| 国产乱色国产精品免费视频| 欧美夫妻性生活| 一区二区三区国产豹纹内裤在线 | 韩国av一区二区三区在线观看| 色94色欧美sute亚洲线路一久| 久久久久久久久久久久久久久99 | 亚洲一区二区四区蜜桃| 波多野结衣在线一区| 久久这里只有精品视频网| 午夜精品久久久| 91极品视觉盛宴| 亚洲精品免费电影| caoporm超碰国产精品| 国产视频一区二区在线| 国产一区二区免费在线| 欧美一区二区三区精品| 日韩福利视频网| 欧美日韩精品一区二区| 亚洲成人资源网| 91黄色免费版| 亚洲国产乱码最新视频 | 亚洲免费在线视频| 99久久精品国产毛片| 欧美激情一区二区三区在线| 国产一区二区福利视频| 2020日本不卡一区二区视频| 精彩视频一区二区三区| 久久综合一区二区| 国产成人午夜电影网| 欧美国产激情二区三区| 高清在线不卡av| 中文字幕av不卡| 99re6这里只有精品视频在线观看| 国产日韩欧美高清| 成人app网站| 亚洲综合精品自拍| 欧美日韩电影在线播放| 人人精品人人爱| 久久综合狠狠综合久久综合88| 精品一区二区久久| 久久亚洲综合av| 不卡电影免费在线播放一区| 综合激情成人伊人| 欧美性生活影院| 久久精品99国产国产精| 国产亚洲一区二区三区在线观看| 成人av在线一区二区| 夜色激情一区二区| 91精品国产乱| 国产成人精品一区二 | 全国精品久久少妇| 精品国产麻豆免费人成网站| 国产精品综合一区二区三区| 国产精品久久久久久久午夜片 | 91麻豆精品国产自产在线| 久久不见久久见免费视频7| 国产精品美女久久久久aⅴ| 欧美私人免费视频| 狠狠色丁香久久婷婷综合_中| 自拍偷拍欧美精品| 日韩欧美在线不卡| 97精品电影院|