usb.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:17k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* usb.h - Basic USB (Universal Serial Bus) definitions */
  2. /* Copyright 2000-2002 Wind River Systems, Inc. */
  3. /*
  4. Modification history
  5. --------------------
  6. 01i,28mar02,h_k  removed #if (CPU==SH7700)&&(_BYTE_ORDER==_BIG_ENDIAN) and set
  7.                  USB_MAX_DESCR_LEN 255 for SH7700 (SPR #73896).
  8. 01h,16nov11,wef  Pack ENDPOINT_DESCRIPTOR structure.
  9. 01g,08nov11,wef  add provisions for SH - pack structures and conditionally make 
  10.  USB_MAX_DESCR_LEN a multiple of 4
  11. 01f,18sep01,wef  merge from wrs.tor2_0.usb1_1-f for veloce
  12. 01e,25jul01,rcb  fixed spr #69287
  13. 01d,26jan00,rcb  Add "dataBlockSize" field to USB_IRP to give application
  14.  greater control over isochronous transfer sizes.
  15.  Change USB_BFR_LIST "bfrLen" and "actLen" fields to UINT32.
  16. 01c,12jan00,rcb  Add definition for USB_CLASS_AUDIO.
  17.  Add typedef for USB_DESCR_HDR_SUBHDR.
  18. 01b,07sep99,rcb  Add definition for USB_TIME_RESUME.
  19. 01a,03jun99,rcb  First.
  20. */
  21. /*
  22. DESCRIPTION
  23. This file defines constants and structures related to the USB (Universal
  24. Serial Bus).
  25. NOTE: The USB specification defines that multi-byte fields will be stored
  26. in little-endian format.
  27. */
  28. #ifndef __INCusbh
  29. #define __INCusbh
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33. /* includes */
  34. #include "usb/usbListLib.h"
  35. #include "usb/usbHandleLib.h"
  36. /* Defined by the USB */
  37. /* defines */
  38. #define USB_MAX_DEVICES  127
  39. #define USB_MAX_TOPOLOGY_DEPTH 6
  40. #define USB_MAX_DESCR_LEN 255
  41. /* USB class codes */
  42. #define USB_CLASS_AUDIO  0x01
  43. #define USB_CLASS_HID 0x03
  44. #define USB_CLASS_PRINTER 0x07
  45. #define USB_CLASS_HUB 0x09
  46. /* USB requestType (bmRequestType) bit fields */
  47. #define USB_RT_DIRECTION_MASK 0x80
  48. #define USB_RT_HOST_TO_DEV 0x00
  49. #define USB_RT_DEV_TO_HOST 0x80
  50. #define USB_RT_CATEGORY_MASK 0x60
  51. #define USB_RT_STANDARD  0x00
  52. #define USB_RT_CLASS 0x20
  53. #define USB_RT_VENDOR 0x40
  54. #define USB_RT_RECIPIENT_MASK 0x03
  55. #define USB_RT_DEVICE 0x00
  56. #define USB_RT_INTERFACE 0x01
  57. #define USB_RT_ENDPOINT  0x02
  58. #define USB_RT_OTHER 0x03
  59. /* USB requests (bRequest) */
  60. #define USB_REQ_GET_STATUS     0
  61. #define USB_REQ_CLEAR_FEATURE     1
  62. #define USB_REQ_GET_STATE     2
  63. #define USB_REQ_SET_FEATURE     3
  64. #define USB_REQ_SET_ADDRESS     5
  65. #define USB_REQ_GET_DESCRIPTOR     6
  66. #define USB_REQ_SET_DESCRIPTOR     7
  67. #define USB_REQ_GET_CONFIGURATION   8
  68. #define USB_REQ_SET_CONFIGURATION   9
  69. #define USB_REQ_GET_INTERFACE     10
  70. #define USB_REQ_SET_INTERFACE     11
  71. #define USB_REQ_GET_SYNCH_FRAME     12
  72. /* USB descriptor types */
  73. #define USB_DESCR_DEVICE     0x01
  74. #define USB_DESCR_CONFIGURATION     0x02
  75. #define USB_DESCR_STRING     0x03
  76. #define USB_DESCR_INTERFACE     0x04
  77. #define USB_DESCR_ENDPOINT     0x05
  78. #define USB_DESCR_HID     0x21
  79. #define USB_DESCR_REPORT     0x22    /* HID report descriptor */
  80. #define USB_DESCR_PHYSICAL     0x23    /* HID physical descriptor */
  81. #define USB_DESCR_HUB     0x29
  82. /* configuration descriptor attributes values */
  83. #define USB_ATTR_SELF_POWERED     0x40
  84. #define USB_ATTR_REMOTE_WAKEUP     0x20
  85. /* Max power available from a hub port */
  86. #define USB_POWER_SELF_POWERED     500     /* 500 mA */
  87. #define USB_POWER_BUS_POWERED     100     /* 100 mA */
  88. /* power requirements as reported in configuration descriptors */
  89. #define USB_POWER_MA_PER_UNIT     2     /* 2 mA per unit */
  90. /* endpoint descriptor attributes values */
  91. #define USB_ATTR_EPTYPE_MASK     0x03
  92. #define USB_ATTR_CONTROL     0x00
  93. #define USB_ATTR_ISOCH     0x01
  94. #define USB_ATTR_BULK     0x02
  95. #define USB_ATTR_INTERRUPT     0x03
  96. /* standard USB feature selectors */
  97. #define USB_FSEL_DEV_REMOTE_WAKEUP 1
  98. #define USB_FSEL_DEV_ENDPOINT_HALT 0
  99. /* hub feature selections */
  100. #define USB_HUB_FSEL_C_HUB_LOCAL_POWER 0
  101. #define USB_HUB_FSEL_C_HUB_OVER_CURRENT 1
  102. #define USB_HUB_FSEL_PORT_CONNECTION 0
  103. #define USB_HUB_FSEL_PORT_ENABLE 1
  104. #define USB_HUB_FSEL_PORT_SUSPEND 2
  105. #define USB_HUB_FSEL_PORT_OVER_CURRENT 3
  106. #define USB_HUB_FSEL_PORT_RESET  4
  107. #define USB_HUB_FSEL_PORT_POWER  8
  108. #define USB_HUB_FSEL_PORT_LOW_SPEED 9
  109. #define USB_HUB_FSEL_C_PORT_CONNECTION 16
  110. #define USB_HUB_FSEL_C_PORT_ENABLE 17
  111. #define USB_HUB_FSEL_C_PORT_SUSPEND 18
  112. #define USB_HUB_FSEL_C_PORT_OVER_CURRENT 19
  113. #define USB_HUB_FSEL_C_PORT_RESET 20
  114. /* endpoint direction mask */
  115. #define USB_ENDPOINT_DIR_MASK 0x80
  116. #define USB_ENDPOINT_OUT 0x00
  117. #define USB_ENDPOINT_IN  0x80
  118. /* standard endpoints */
  119. #define USB_MAX_ENDPOINT_NUM 15
  120. #define USB_ENDPOINT_MASK 0xf
  121. #define USB_ENDPOINT_DEFAULT_CONTROL 0
  122. /* hub characteristics */
  123. #define USB_HUB_GANGED_POWER 0x0000
  124. #define USB_HUB_INDIVIDUAL_POWER 0x0001
  125. #define USB_HUB_NOT_COMPOUND 0x0000
  126. #define USB_HUB_COMPOUND 0x0004
  127. #define USB_HUB_GLOBAL_OVERCURRENT 0x0000
  128. #define USB_HUB_INDIVIDUAL_OVERCURRENT 0x0008
  129. /* standard device status */
  130. #define USB_DEV_STS_LOCAL_POWER  0x0001
  131. #define USB_DEV_STS_REMOTE_WAKEUP 0x0002
  132. /* standard endpoint status */
  133. #define USB_ENDPOINT_STS_HALT 0x0001
  134. /* hub status & change */
  135. #define USB_HUB_STS_LOCAL_POWER  0x0001
  136. #define USB_HUB_STS_OVER_CURRENT 0x0002
  137. #define USB_HUB_C_LOCAL_POWER 0x0001
  138. #define USB_HUB_C_OVER_CURRENT 0x0002
  139. /* hub port status & change */
  140. #define USB_HUB_STS_PORT_CONNECTION 0x0001
  141. #define USB_HUB_STS_PORT_ENABLE  0x0002
  142. #define USB_HUB_STS_PORT_SUSPEND 0x0004
  143. #define USB_HUB_STS_PORT_OVER_CURRENT 0x0008
  144. #define USB_HUB_STS_PORT_RESET 0x0010
  145. #define USB_HUB_STS_PORT_POWER 0x0100
  146. #define USB_HUB_STS_PORT_LOW_SPEED 0x0200
  147. #define USB_HUB_C_PORT_CONNECTION 0x0001
  148. #define USB_HUB_C_PORT_ENABLE 0x0002
  149. #define USB_HUB_C_PORT_SUSPEND 0x0004
  150. #define USB_HUB_C_PORT_OVER_CURRENT 0x0008
  151. #define USB_HUB_C_PORT_RESET 0x0010
  152. /* hub status endpoint */
  153. #define USB_HUB_ENDPOINT_STS_HUB 0x01
  154. #define USB_HUB_ENDPOINT_STS_PORT0 0x02
  155. /* USB timing */
  156. #define USB_TIME_POWER_ON 100 /* 100 msec */
  157. #define USB_TIME_RESET 50 /* 50 msec */
  158. #define USB_TIME_RESET_RECOVERY  10 /* 10 msec */
  159. #define USB_TIME_SET_ADDRESS 2 /* 2 msec */
  160. #define USB_TIME_REQUEST 5000 /* 5 seconds */
  161. #define USB_TIME_RESUME  20 /* 20 msec */
  162. /* USB packet identifiers */
  163. #define USB_PID_SETUP 0x2d
  164. #define USB_PID_OUT 0xe1
  165. #define USB_PID_IN 0x69
  166. /* packet size range */
  167. #define USB_MIN_CTRL_PACKET_SIZE 8   /* min for control pipe */
  168. #define USB_MAX_CTRL_PACKET_SIZE 64  /* max for control pipe */
  169. /* maximum bandwidth (expressed as nanoseconds per frame) which may be
  170.  * allocated for various purposes.
  171.  */
  172. #define USB_LIMIT_ISOCH_INT ((UINT32) 900000L)  /* 900 usec */
  173. #define USB_LIMIT_ALL ((UINT32) 999000L)  /* 999 usec */
  174. /* Typedefs */
  175. /*
  176.  * USB_SETUP
  177.  */
  178. typedef struct usb_setup
  179.     {
  180.     UINT8 requestType;     /* bmRequestType */
  181.     UINT8 request;     /* bRequest */
  182.     UINT16 value;     /* wValue */
  183.     UINT16 index;     /* wIndex */
  184.     UINT16 length;     /* wLength */
  185.     } USB_SETUP, *pUSB_SETUP;
  186. /*
  187.  * USB_DESCR_HDR
  188.  *
  189.  * header common to all USB descriptors
  190.  */
  191. typedef struct usb_descr_hdr
  192.     {
  193.     UINT8 length;     /* bLength */
  194.     UINT8 descriptorType;     /* bDescriptorType */
  195.     } USB_DESCR_HDR, *pUSB_DESCR_HDR;
  196. #define USB_DESCR_HDR_LEN       2
  197. /*
  198.  * USB_DESCR_HDR_SUBHDR
  199.  *
  200.  * Some classes of USB devices (e.g., audio) use descriptors with a
  201.  * header and a subheader.
  202.  */
  203. typedef struct usb_descr_hdr_subhdr
  204.     {
  205.     UINT8 length;     /* bLength */
  206.     UINT8 descriptorType;     /* bDescriptorType */
  207.     UINT8 descriptorSubType;     /* bDescriptorSubType */
  208.     } USB_DESCR_HDR_SUBHDR, *pUSB_DESCR_HDR_SUBHDR;
  209. /*
  210.  * USB_DEVICE_DESCR
  211.  */
  212. typedef struct usb_device_descr
  213.     {
  214.     UINT8 length;     /* bLength */
  215.     UINT8 descriptorType;     /* bDescriptorType */
  216.     UINT16 bcdUsb;     /* bcdUSB - USB release in BCD */
  217.     UINT8 deviceClass;     /* bDeviceClass */
  218.     UINT8 deviceSubClass;     /* bDeviceSubClass */
  219.     UINT8 deviceProtocol;     /* bDeviceProtocol */
  220.     UINT8 maxPacketSize0;     /* bMaxPacketSize0 */
  221.     UINT16 vendor;     /* idVendor */
  222.     UINT16 product;     /* idProduct */
  223.     UINT16 bcdDevice;     /* bcdDevice - dev release in BCD */
  224.     UINT8 manufacturerIndex;     /* iManufacturer */
  225.     UINT8 productIndex;      /* iProduct */
  226.     UINT8 serialNumberIndex;     /* iSerialNumber */
  227.     UINT8 numConfigurations;     /* bNumConfigurations */
  228.     } WRS_PACK_ALIGN(4) USB_DEVICE_DESCR, *pUSB_DEVICE_DESCR;
  229. #define USB_DEVICE_DESCR_LEN 18
  230. /*
  231.  * USB_CONFIG_DESCR
  232.  */
  233. typedef struct usb_config_descr
  234.     {
  235.     UINT8 length;     /* bLength */
  236.     UINT8 descriptorType;     /* bDescriptorType */
  237.     UINT16 totalLength;      /* wTotalLength */
  238.     UINT8 numInterfaces;     /* bNumInterfaces */
  239.     UINT8 configurationValue;     /* bConfigurationValue */
  240.     UINT8 configurationIndex;     /* iConfiguration */
  241.     UINT8 attributes;     /* bmAttributes */
  242.     UINT8 maxPower;     /* MaxPower */
  243.     } WRS_PACK_ALIGN(4) USB_CONFIG_DESCR, *pUSB_CONFIG_DESCR;
  244. #define USB_CONFIG_DESCR_LEN 9
  245. /*
  246.  * USB_INTERFACE_DESCR
  247.  */
  248. typedef struct usb_interface_descr
  249.     {
  250.     UINT8 length;     /* bLength */
  251.     UINT8 descriptorType;     /* bDescriptorType */
  252.     UINT8 interfaceNumber;     /* bInterfaceNumber */
  253.     UINT8 alternateSetting;     /* bAlternateSetting */
  254.     UINT8 numEndpoints;      /* bNumEndpoints */
  255.     UINT8 interfaceClass;     /* bInterfaceClass */
  256.     UINT8 interfaceSubClass;     /* bInterfaceSubClass */
  257.     UINT8 interfaceProtocol;     /* bInterfaceProtocol */
  258.     UINT8 interfaceIndex;     /* iInterface */
  259.     } USB_INTERFACE_DESCR, *pUSB_INTERFACE_DESCR;
  260. #define USB_INTERFACE_DESCR_LEN 9
  261. /*
  262.  * USB_ENDPOINT_DESCR
  263.  */
  264. typedef struct usb_endpoint_descr
  265.     {
  266.     UINT8 length;     /* bLength */
  267.     UINT8 descriptorType;     /* bDescriptorType */
  268.     UINT8 endpointAddress;     /* bEndpointAddress */
  269.     UINT8 attributes;     /* bmAttributes */
  270.     UINT16 maxPacketSize;     /* wMaxPacketSize */
  271.     UINT8 interval;     /* bInterval */
  272.     } WRS_PACK_ALIGN(1) USB_ENDPOINT_DESCR, *pUSB_ENDPOINT_DESCR;
  273. #define USB_ENDPOINT_DESCR_LEN 7
  274. /*
  275.  * USB_LANGUAGE_DESCR
  276.  */
  277. typedef struct usb_language_descr
  278.     {
  279.     UINT8 length;     /* bLength */
  280.     UINT8 descriptorType;     /* bDescriptorType */
  281.     UINT16 langId [1];     /* wLANGID[] - variable len */
  282.     } USB_LANGUAGE_DESCR, *pUSB_LANGUAGE_DESCR;
  283. /*
  284.  * USB_STRING_DESCR
  285.  */
  286. typedef struct usb_string_descr
  287.     {
  288.     UINT8 length;     /* bLength */
  289.     UINT8 descriptorType;     /* bDescriptorType */
  290.     UINT8 string [1];     /* bString - variable len */
  291.     } USB_STRING_DESCR, *pUSB_STRING_DESCR;
  292. /*
  293.  * USB_HID_DESCR
  294.  */
  295. typedef struct usb_descr_typlen
  296.     {
  297.     UINT8 type;      /* bDescriptorType */
  298.     UINT16 length;     /* wDescriptorLength */
  299.     } USB_DESCR_TYPLEN;
  300. typedef struct usb_hid_descr
  301.     {
  302.     UINT8 length;     /* bLength */
  303.     UINT8 descriptorType;     /* bDescriptorType */
  304.     UINT16 bcdHid;     /* bcdHID */
  305.     UINT8 countryCode;     /* bCountryCode */
  306.     UINT8 numDescriptors;     /* bNumDescriptors */
  307.     USB_DESCR_TYPLEN descriptor [1]; /* (variable length) */
  308.     } USB_HID_DESCR, *pUSB_HID_DESCR;
  309. /*
  310.  * USB_HUB_DESCR
  311.  */
  312. typedef struct usb_hub_descr
  313.     {
  314.     UINT8 length;     /* bLength */
  315.     UINT8 descriptorType;     /* bDescriptorType */
  316.     UINT8 nbrPorts;     /* bNbrPorts */
  317.     UINT16 hubCharacteristics;     /* wHubCharacteristics */
  318.     UINT8 pwrOn2PwrGood;     /* bPwrOn2PwrGood */
  319.     UINT8 hubContrCurrent;     /* bHubContrCurrent */
  320.     UINT8 deviceRemovable [1];     /* DeviceRemovable - variable len */
  321.     UINT8 portPwrCtrlMask [1];     /* portPwrCtrlMask - variable len */
  322.     } WRS_PACK_ALIGN(4) USB_HUB_DESCR, *pUSB_HUB_DESCR;
  323. #define USB_HUB_DESCR_LEN   9
  324. /*
  325.  * USB_STANDARD_STATUS
  326.  */
  327. typedef struct usb_standard_status
  328.     {
  329.     UINT16 status;     /* status word */
  330.     } USB_STANDARD_STATUS, *pUSB_STANDARD_STATUS;
  331. /*
  332.  * USB_HUB_STATUS
  333.  */
  334. typedef struct usb_hub_status
  335.     {
  336.     UINT16 status;     /* wHubStatus or wPortStatus*/
  337.     UINT16 change;     /* wHubChange or wPortChange*/
  338.     } USB_HUB_STATUS, *pUSB_HUB_STATUS;
  339. /* Implementation-specific host definitions */
  340. /* defines */
  341. /* node types */
  342. #define USB_NODETYPE_NONE 0
  343. #define USB_NODETYPE_HUB 1
  344. #define USB_NODETYPE_DEVICE 2
  345. /* node speeds */
  346. #define USB_SPEED_FULL 0   /* 12 mbit device */
  347. #define USB_SPEED_LOW 1   /* low speed device (1.5 mbit) */
  348. /* standard endpoints */
  349. #define USB_ENDPOINT_CONTROL 0
  350. /* transfer (pipe) types */
  351. #define USB_XFRTYPE_CONTROL 1
  352. #define USB_XFRTYPE_ISOCH 2
  353. #define USB_XFRTYPE_INTERRUPT 3
  354. #define USB_XFRTYPE_BULK 4
  355. /* direction indicators for IRPs */
  356. #define USB_DIR_OUT 1
  357. #define USB_DIR_IN 2
  358. #define USB_DIR_INOUT 3
  359. /* data toggle specifiers for USB_IRP */
  360. #define USB_DATA0 0
  361. #define USB_DATA1 1
  362. /* flags for IRPs */
  363. #define USB_FLAG_SHORT_OK 0x00
  364. #define USB_FLAG_SHORT_FAIL 0x01
  365. #define USB_FLAG_ISO_ASAP 0x02
  366. /* IRP timeouts */
  367. #define USB_TIMEOUT_DEFAULT 5000     /* 5 seconds */
  368. #define USB_TIMEOUT_NONE 0xffffffff  /* no timeout */
  369. /* typedefs */
  370. /*
  371.  * IRP_CALLBACK
  372.  */
  373. typedef VOID (*IRP_CALLBACK) (pVOID pIrp);
  374. /*
  375.  * USB_BFR_LIST
  376.  */
  377. typedef struct usb_bfr_list
  378.     {
  379.     UINT16 pid;  /* Specifies packet type as USB_PID_xxxx */
  380.     pUINT8 pBfr; /* Pointer to bfr */
  381.     UINT32 bfrLen; /* Length of buffer */
  382.     UINT32 actLen; /* actual length transferred */
  383.     } USB_BFR_LIST, *pUSB_BFR_LIST;
  384.     
  385. /*
  386.  * USB_IRP
  387.  *
  388.  * NOTE: There are certain requirements on the layout of buffers described
  389.  * in the bfrList[].  
  390.  *
  391.  * For control transfers, the first bfrList [] entry must be the Setup packet.
  392.  * If there is a data stage, the bfrList [] entry for the data stage should
  393.  * follow.  Finally, a zero-length bfrList [] entry must follow which serves
  394.  * as a place-holder for the status stage.
  395.  *
  396.  * For isochronous, interrupt, and bulk transfers there may be one or more
  397.  * bfrList[] entries.
  398.  *
  399.  * If there is more than one bfrList[] entry for an isochronous, interrupt, 
  400.  * or bulk transfers or more than two bfrList [] entries for control 
  401.  * transfers, then each bfrList[].bfrLen (except the last) must be an exact
  402.  * multiple of the maxPacketSize.  The HCD and underlying hardware will 
  403.  * make no attempt to gather (during OUT) or scatter (during IN) a single
  404.  * USB packet across multiple bfrList[] entries.
  405.  */
  406. typedef struct usb_irp
  407.     {
  408.     LINK usbdLink; /* Link field used internally by USBD */
  409.     pVOID usbdPtr; /* Ptr field for use by USBD */
  410.     LINK hcdLink; /* Link field used internally by USB HCD */
  411.     pVOID hcdPtr; /* Ptr field for use by USB HCD */
  412.     pVOID userPtr; /* Ptr field for use by client */
  413.     UINT16 irpLen; /* Total length of IRP structure */
  414.     int result;  /* IRP completion result: S_usbHcdLib_xxxx */
  415.     IRP_CALLBACK usbdCallback; /* USBD completion callback routine */
  416.     IRP_CALLBACK userCallback; /* client's completion callback routine */
  417.     UINT16 dataToggle; /* IRP should start with DATA0/DATA1. */
  418.     UINT16 flags; /* Defines other IRP processing options */
  419.     UINT32 timeout; /* IRP timeout in milliseconds */
  420.     UINT16 startFrame; /* Start frame for isoch transfer */
  421.     UINT16 dataBlockSize; /* Data granularity for isoch transfer */
  422.     UINT32 transferLen;  /* Total length of data to be transferred */
  423.     UINT16 bfrCount; /* Indicates count of buffers in BfrList */
  424.     USB_BFR_LIST bfrList [1];
  425.     } USB_IRP, *pUSB_IRP;
  426. /* Implementation-specific target definitions */
  427. /*
  428.  * ERP_CALLBACK
  429.  */
  430. typedef VOID (*ERP_CALLBACK) (pVOID pErp);
  431. /*
  432.  * USB_ERP
  433.  *
  434.  * The USB_ERP is similar to the USB_IRP, except that it applies to data transfers
  435.  * as viewed from the perspective of a USB device - as opposed to the USB_IRP, which
  436.  * is used by the USB host.
  437.  *
  438.  * Each USB_ERP (USB Endpoint Request Packet) describes a transfer through a device
  439.  * endpoint.  As with USB_IRPs, the USB_ERP carries a bfrList[] which is an array
  440.  * of USB_BFR_LIST structures - each describing a block of data to be transferred.
  441.  * 
  442.  * There are certain limitations on the bfrList[].  If the first entry in a bfrList[]
  443.  * has a PID of USB_PID_SETUP, then there may be only a single bfrList[] entry.
  444.  * 
  445.  * bfrList[] entries must be all IN or all OUT.  A single ERP cannot describe 
  446.  * transfers in both directions.
  447.  */
  448. typedef struct usb_erp
  449.     {
  450.     LINK targLink; /* Link field used internally by usbTargLib */
  451.     pVOID targPtr; /* Ptr field for use by usbTargLib */
  452.     LINK tcdLink; /* Link field used internally by USB TCD */
  453.     pVOID tcdPtr; /* Ptr field for use by USB TCD */
  454.     pVOID userPtr; /* Ptr field for use by client */
  455.     UINT16 erpLen; /* Total length of ERP structure */
  456.     int result;  /* ERP completion result: S_usbTcdLib_xxxx */
  457.     ERP_CALLBACK targCallback; /* usbTargLib completion callback routine */
  458.     ERP_CALLBACK userCallback; /* client's completion callback routine */
  459.     UINT16 endpointId; /* device endpoint */
  460.     UINT16 transferType; /* Type of ERP: control, bulk, etc. */
  461.     UINT16 dataToggle; /* ERP should start with DATA0/DATA1. */
  462.     UINT16 bfrCount; /* Indicates count of buffers in BfrList */
  463.     USB_BFR_LIST bfrList [1];
  464.     } USB_ERP, *pUSB_ERP;
  465. #ifdef __cplusplus
  466. }
  467. #endif
  468. #endif /* __INCusbh */
  469. /* End of file. */