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

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

?? usbstdreq.c

?? 最新的LPC214X USB驅動程序
?? C
字號:
////  $Id: usbstdreq.c 42 2008-10-04 18:40:36Z jcw $//  $Revision: 42 $//  $Author: jcw $//  $Date: 2008-10-04 14:40:36 -0400 (Sat, 04 Oct 2008) $//  $HeadURL: http://tinymicros.com/svn_public/arm/lpc2148_demo/trunk/usb/usbstdreq.c $///** @file  Standard request handler.    This modules handles the 'chapter 9' processing, specifically the  standard device requests in table 9-3 from the universal serial bus  specification revision 2.0    Specific types of devices may specify additional requests (for example  HID devices add a GET_DESCRIPTOR request for interfaces), but they  will not be part of this module.  @todo some requests have to return a request error if device not configured:  @todo GET_INTERFACE, GET_STATUS, SET_INTERFACE, SYNCH_FRAME  @todo this applies to the following if endpoint != 0:  @todo SET_FEATURE, GET_FEATURE */#include "usbstruct.h"#include "usbapi.h"#define MAX_DESC_HANDLERS 4   /**< device, interface, endpoint, other */////  General descriptor field offsets //#define DESC_bLength          0 /**< length offset */#define DESC_bDescriptorType  1 /**< descriptor type offset */  ////  Config descriptor field offsets //#define CONF_DESC_wTotalLength        2 /**< total length offset */#define CONF_DESC_bConfigurationValue 5 /**< configuration value offset */  #define CONF_DESC_bmAttributes        7 /**< configuration characteristics */////  Interface descriptor field offsets //#define INTF_DESC_bAlternateSetting   3 /**< alternate setting offset */////  Endpoint descriptor field offsets //#define ENDP_DESC_bEndpointAddress    2 /**< endpoint address offset */#define ENDP_DESC_wMaxPacketSize      4 /**< maximum packet size offset */static U8 bConfiguration = 0;                       /** Currently selected configuration */static TFnHandleRequest *pfnHandleCustomReq = NULL; /** Installed custom request handler */static const U8 *pabDescrip = NULL;                 /** Pointer to registered descriptors */////  Registers a pointer to a descriptor block containing all descriptors for the device.//void usbRegisterDescriptors (const U8 *pabDescriptors){  pabDescrip = pabDescriptors;}////  Parses the list of installed USB descriptors and attempts to find the specified USB descriptor.//BOOL usbGetDescriptor (U16 wTypeIndex, U16 wLangID __attribute__ ((unused)), int *piLen, U8 **ppbData){  U8  bType, bIndex;  U8  *pab;  int iCurIndex;  bType = GET_DESC_TYPE (wTypeIndex);  bIndex = GET_DESC_INDEX (wTypeIndex);  pab = (U8 *)pabDescrip;  iCurIndex = 0;  while (pab [DESC_bLength] != 0)   {    if (pab [DESC_bDescriptorType] == bType)     {      if (iCurIndex == bIndex)       {        *ppbData = pab;        if (bType == DESC_CONFIGURATION)           *piLen =  (pab [CONF_DESC_wTotalLength]) | (pab [CONF_DESC_wTotalLength + 1] << 8);        else           *piLen = pab [DESC_bLength];        return TRUE;      }      iCurIndex++;    }    pab += pab [DESC_bLength];  }  return FALSE;}////  Configures the device according to the specified configuration index and//  alternate setting by parsing the installed USB descriptor list.//  A configuration index of 0 unconfigures the device.//static BOOL usbSetConfiguration (U8 bConfigIndex, U8 bAltSetting){  U8  *pab;  U8  bCurConfig, bCurAltSetting;  U8  bEP;  U16 wMaxPktSize;  if (bConfigIndex == 0)     usbHardwareConfigDevice(FALSE);  else   {    pab = (U8 *) pabDescrip;    bCurConfig = 0xFF;    bCurAltSetting = 0xFF;    while (pab [DESC_bLength] != 0)     {      switch (pab [DESC_bDescriptorType])       {        case DESC_CONFIGURATION :          {            bCurConfig = pab [CONF_DESC_bConfigurationValue];          }          break;        case DESC_INTERFACE :          {            bCurAltSetting = pab [INTF_DESC_bAlternateSetting];          }          break;        case DESC_ENDPOINT :          {            if ((bCurConfig == bConfigIndex) && (bCurAltSetting == bAltSetting))             {              bEP = pab [ENDP_DESC_bEndpointAddress];              wMaxPktSize = (pab [ENDP_DESC_wMaxPacketSize]) | (pab [ENDP_DESC_wMaxPacketSize + 1] << 8);              usbHardwareEndpointConfig (bEP, wMaxPktSize);            }          }          break;        default :          break;      }      pab += pab [DESC_bLength];    }    usbHardwareConfigDevice (TRUE);  }  return TRUE;}////  Local function to handle a standard device request//static BOOL usbHandleStdDeviceReq (TSetupPacket *pSetup, int *piLen, U8 **ppbData){  U8  *pbData = *ppbData;  switch (pSetup->bRequest)   {    case REQ_GET_STATUS :      {        pbData [0] = 0;        pbData [1] = 0;        *piLen = 2;      }      break;    case REQ_SET_ADDRESS :      {        usbHardwareSetAddress (pSetup->wValue);      }      break;    case REQ_GET_DESCRIPTOR :      return usbGetDescriptor (pSetup->wValue, pSetup->wIndex, piLen, ppbData);    case REQ_GET_CONFIGURATION :      {        pbData [0] = bConfiguration;        *piLen = 1;      }      break;    case REQ_SET_CONFIGURATION :      {        if (!usbSetConfiguration(pSetup->wValue & 0xFF, 0))          return FALSE;        bConfiguration = pSetup->wValue & 0xFF;       }      break;    case REQ_CLEAR_FEATURE :    case REQ_SET_FEATURE :      {        if (pSetup->wValue == FEA_REMOTE_WAKEUP) {        }        if (pSetup->wValue == FEA_TEST_MODE) {        }      }      return FALSE;    case REQ_SET_DESCRIPTOR :      return FALSE;    default :      return FALSE;  }  return TRUE;}////  Local function to handle a standard interface request//static BOOL usbHandleStdInterfaceReq (TSetupPacket  *pSetup, int *piLen, U8 **ppbData){  U8  *pbData = *ppbData;  switch (pSetup->bRequest)   {    case REQ_GET_STATUS :      {        pbData [0] = 0;        pbData [1] = 0;        *piLen = 2;      }      break;    case REQ_CLEAR_FEATURE :    case REQ_SET_FEATURE :      return FALSE;    case REQ_GET_INTERFACE :      {        pbData [0] = 0;        *piLen = 1;      }      break;    case REQ_SET_INTERFACE :      {        if (pSetup->wValue != 0)          return FALSE;        *piLen = 0;      }      break;    default :      return FALSE;  }  return TRUE;}////  Local function to handle a standard endpoint request// static BOOL usbHandleStdEndPointReq (TSetupPacket *pSetup, int *piLen, U8 **ppbData){  U8  *pbData = *ppbData;  switch (pSetup->bRequest)   {    case REQ_GET_STATUS :      {        pbData [0] = usbHardwareEndpointIsStalled (pSetup->wIndex) ? 1 : 0;        pbData [1] = 0;        *piLen = 2;      }      break;    case REQ_CLEAR_FEATURE :      {        if (pSetup->wValue == FEA_ENDPOINT_HALT)         {          usbHardwareEndpointStall(pSetup->wIndex, FALSE);          break;        }      }      return FALSE;    case REQ_SET_FEATURE :      {        if (pSetup->wValue == FEA_ENDPOINT_HALT)         {          usbHardwareEndpointStall(pSetup->wIndex, TRUE);          break;        }      }      return FALSE;    case REQ_SYNCH_FRAME :      return FALSE;    default :      return FALSE;  }  return TRUE;}////  Default handler for standard ('chapter 9') requests//  If a custom request handler was installed, this handler is called first.//BOOL usbHandleStandardRequest (TSetupPacket  *pSetup, int *piLen, U8 **ppbData){  if ((pfnHandleCustomReq != NULL) && pfnHandleCustomReq (pSetup, piLen, ppbData))    return TRUE;  switch (REQTYPE_GET_RECIP(pSetup->bmRequestType))   {    case REQTYPE_RECIP_DEVICE :    return usbHandleStdDeviceReq (pSetup, piLen, ppbData);    case REQTYPE_RECIP_INTERFACE : return usbHandleStdInterfaceReq (pSetup, piLen, ppbData);    case REQTYPE_RECIP_ENDPOINT :  return usbHandleStdEndPointReq (pSetup, piLen, ppbData);    default :                      return FALSE;  }}////  Registers a callback for custom device requests// //  In usbHandleStandardRequest, the custom request handler gets a first//  chance at handling the request before it is handed over to the 'chapter 9'//  request handler.// //  This can be used for example in HID devices, where a REQ_GET_DESCRIPTOR//  request is sent to an interface, which is not covered by the 'chapter 9'//  specification.//    void usbRegisterCustomReqHandler (TFnHandleRequest *pfnHandler){  pfnHandleCustomReq = pfnHandler;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区在线观看免费视频播放| 久久99精品国产麻豆婷婷| 亚洲一区二区成人在线观看| 喷水一区二区三区| 99国产精品一区| 精品女同一区二区| 亚洲精品少妇30p| 国产不卡在线一区| 91精品在线观看入口| 中文字幕亚洲区| 国产麻豆视频一区二区| 欧美日韩高清一区二区| 亚洲丝袜自拍清纯另类| 国产一区二区三区四区五区美女| 欧美喷潮久久久xxxxx| 国产精品美女久久久久久| 青青草国产精品97视觉盛宴| 欧美影院一区二区| 亚洲视频 欧洲视频| 国产精品一区二区91| 4438x成人网最大色成网站| 樱花草国产18久久久久| 岛国精品在线观看| 国产三级精品在线| 国产精品综合在线视频| 欧美刺激午夜性久久久久久久| 亚洲bdsm女犯bdsm网站| 在线欧美日韩精品| 亚洲免费观看在线视频| 97aⅴ精品视频一二三区| 国产精品久久久久aaaa樱花| 国产不卡一区视频| 亚洲国产精品传媒在线观看| 国产精品一卡二卡在线观看| 精品国产乱子伦一区| 免费观看在线色综合| 日韩美女视频在线| 狠狠色伊人亚洲综合成人| 亚洲精品一区二区三区精华液 | 色综合色狠狠综合色| 中文字幕的久久| 国产91精品一区二区麻豆网站| 久久久777精品电影网影网| 国产盗摄一区二区三区| 中文字幕不卡的av| 91浏览器打开| 亚洲成av人影院在线观看网| 欧美日本高清视频在线观看| 婷婷开心久久网| 欧美一级日韩免费不卡| 美国十次了思思久久精品导航| 日韩美一区二区三区| 国产不卡在线播放| 亚洲三级免费电影| 欧美午夜电影一区| 久久精品国产亚洲aⅴ| 久久久久青草大香线综合精品| 国产精一区二区三区| 亚洲色图视频网站| 3751色影院一区二区三区| 国产美女精品一区二区三区| 中文字幕一区二区三区在线观看| 在线中文字幕不卡| 国产乱色国产精品免费视频| 亚洲人成网站色在线观看| 欧美高清视频一二三区 | 91麻豆.com| 日韩中文字幕一区二区三区| 精品国产欧美一区二区| aaa欧美日韩| 午夜久久久久久久久| 国产亚洲人成网站| 欧美色倩网站大全免费| 激情深爱一区二区| 亚洲高清免费观看高清完整版在线观看 | 五月天激情综合网| 国产三级一区二区三区| 欧美系列在线观看| 成人一区二区三区视频在线观看 | 99精品久久99久久久久| 日韩中文字幕1| 亚洲日本va在线观看| 欧美成人vr18sexvr| 日本电影亚洲天堂一区| 国产a精品视频| 日韩和欧美一区二区| 中文字幕佐山爱一区二区免费| 日韩一区二区在线观看| 91精品办公室少妇高潮对白| 国产资源精品在线观看| 午夜天堂影视香蕉久久| 亚洲视频香蕉人妖| 日本一区二区视频在线| 欧美电视剧在线看免费| 欧美久久久久久久久中文字幕| 成人精品鲁一区一区二区| 日产国产欧美视频一区精品| 夜夜夜精品看看| 中日韩av电影| 久久影音资源网| 日韩免费电影一区| 7777精品伊人久久久大香线蕉完整版 | 亚洲免费观看高清完整版在线观看 | 久久久久久久久一| 91精品国产91热久久久做人人| 色天天综合色天天久久| 成人黄色电影在线 | 99精品视频在线播放观看| 国产精品亚洲综合一区在线观看| 青青青伊人色综合久久| 丝袜亚洲另类欧美| 午夜激情一区二区| 午夜久久久久久电影| 午夜伊人狠狠久久| 婷婷成人激情在线网| 亚洲国产aⅴ成人精品无吗| 亚洲一区二区美女| 亚洲丶国产丶欧美一区二区三区| 一区二区三区av电影| 一区二区三区**美女毛片| 一区二区三区鲁丝不卡| 亚洲一区二区三区四区在线| 亚洲va在线va天堂| 婷婷综合另类小说色区| 视频在线观看国产精品| 蜜臀av一区二区| 精品一区二区在线看| 国产精品2024| 99久久夜色精品国产网站| 91麻豆免费视频| 欧美日韩精品电影| 日韩精品中文字幕一区| 国产性天天综合网| 亚洲欧美偷拍三级| 亚洲国产一区二区在线播放| 青青草视频一区| 国产激情视频一区二区在线观看| 成人丝袜高跟foot| 在线观看亚洲精品视频| 91麻豆精品国产91久久久更新时间| 日韩欧美123| 国产精品乱人伦中文| 日韩福利电影在线| 国产另类ts人妖一区二区| 成人av电影在线网| 欧美精三区欧美精三区| 精品国产一区二区三区忘忧草| 亚洲国产岛国毛片在线| 亚洲一二三级电影| 精品中文字幕一区二区| 成人黄色免费短视频| 欧美日韩综合在线免费观看| 精品久久国产97色综合| 中文字幕欧美一| 日韩高清欧美激情| 成人在线视频首页| 在线电影一区二区三区| 国产亚洲欧美色| 亚洲丶国产丶欧美一区二区三区| 精品一区二区三区av| 日本乱人伦一区| 久久亚洲综合色一区二区三区| 一区av在线播放| 国产成人精品在线看| 欧美精品久久99久久在免费线 | 国产精品久久久久久久岛一牛影视| 亚洲国产一区二区a毛片| 国产在线视频一区二区| 欧美视频自拍偷拍| 国产人伦精品一区二区| 舔着乳尖日韩一区| 一本一道波多野结衣一区二区| 精品三级在线观看| 亚洲丶国产丶欧美一区二区三区| 国产99一区视频免费| 日韩三级伦理片妻子的秘密按摩| 日韩码欧中文字| 国产99精品国产| 欧美成人a∨高清免费观看| 亚洲国产wwwccc36天堂| www.欧美精品一二区| 久久视频一区二区| 青青青伊人色综合久久| 欧美日韩一区二区三区四区 | 久久av老司机精品网站导航| 欧美怡红院视频| 亚洲精品国产品国语在线app| 国产真实精品久久二三区| 9191精品国产综合久久久久久| 亚洲精品v日韩精品| av在线这里只有精品| 久久久久国产成人精品亚洲午夜| 日本不卡视频在线观看| 欧美日韩成人在线一区| 一区二区免费看| 欧美在线观看一二区| 亚洲国产你懂的| 在线国产电影不卡| 亚洲一区二区三区中文字幕| 日本精品一级二级|