usbdCoreLib.h
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:14k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* usbdCoreLib.h - Defines internal between usbdLib and usbdCoreLib */
  2. /* Copyright 2000 Wind River Systems, Inc. */
  3. /*
  4. Modification history
  5. --------------------
  6. 01d,26jan00,rcb  Redefine "bandwidth" field in URB_PIPE_CREATE as UINT32.
  7. 01c,29nov99,rcb  Increase frame number fields to 32 bits in 
  8.  URB_CURRENT_FRAME_GET.
  9. 01b,07sep99,rcb  Add support for management callbacks and set-bus-state API.
  10. 01a,20aug99,rcb  First.
  11. */
  12. #ifndef __INCusbdCoreLibh
  13. #define __INCusbdCoreLibh
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. /* includes */
  18. #include "usb/usbdLib.h"
  19. /* defines */
  20. /* USBD Function Request Codes - URB_HEADER.Function */
  21. #define USBD_FNC_ASYNC_MASK 0x8000 /* Set if USBD function */
  22. /* execute asynchronously */
  23. /* 
  24.  * Synchronous USBD functions always execute synchronously.
  25.  *
  26.  * Asynchronous USBD functions may or may not execute asynchronously, 
  27.  * depending on the USBD implementation.  However, clients must expect that 
  28.  * such functions may execute asynchronously. 
  29.  */
  30. #define USBD_FNC_INITIALIZE 0x0000 /* initialize USBD */
  31. #define USBD_FNC_SHUTDOWN 0x0001 /* shut down USBD */
  32. #define USBD_FNC_CLIENT_REG 0x0100 /* Client register */
  33. #define USBD_FNC_CLIENT_UNREG 0x0101 /* Client unregister */
  34. #define USBD_FNC_MNGMT_CALLBACK_SET 0x0102 /* set client's mngmt callback */
  35. #define USBD_FNC_VERSION_GET 0x0200 /* Get USBD version */
  36. #define USBD_FNC_HCD_ATTACH 0x0201 /* Attach HCD to USBD */
  37. #define USBD_FNC_HCD_DETACH 0x0202 /* Detach HCD from USBD */
  38. #define USBD_FNC_STATISTICS_GET  0x0203 /* Get USBD statistics */
  39. #define USBD_FNC_BUS_COUNT_GET 0x0300 /* Get bus count */
  40. #define USBD_FNC_ROOT_ID_GET 0x0301 /* Get root id */
  41. #define USBD_FNC_HUB_PORT_COUNT_GET 0x0302 /* Get count of hub ports */
  42. #define USBD_FNC_NODE_ID_GET 0x0303 /* Get node id */
  43. #define USBD_FNC_NODE_INFO_GET 0x0304 /* Get node information */
  44. #define USBD_FNC_DYNA_ATTACH_REG 0x0400 /* Dynamic attach register */
  45. #define USBD_FNC_DYNA_ATTACH_UNREG 0x0401 /* Dynamic attach unregister */
  46. #define USBD_FNC_FEATURE_CLEAR 0x8500 /* Clear feature */
  47. #define USBD_FNC_FEATURE_SET 0x8501 /* Set feature */
  48. #define USBD_FNC_CONFIG_GET 0x8502 /* Get configuration */
  49. #define USBD_FNC_CONFIG_SET 0x8503 /* Set configuration */
  50. #define USBD_FNC_DESCRIPTOR_GET  0x8504 /* Get descriptor */
  51. #define USBD_FNC_DESCRIPTOR_SET  0x8505 /* Set descriptor */
  52. #define USBD_FNC_INTERFACE_GET 0x8506 /* Get interface */
  53. #define USBD_FNC_INTERFACE_SET 0x8507 /* Set interface */
  54. #define USBD_FNC_STATUS_GET 0x8508 /* Get status */
  55. #define USBD_FNC_ADDRESS_GET 0x0509 /* Get device address */
  56. #define USBD_FNC_ADDRESS_SET 0x850a /* Set device address */
  57. #define USBD_FNC_VENDOR_SPECIFIC 0x850b /* Vendor specific */
  58. #define USBD_FNC_PIPE_CREATE 0x0600 /* Create pipe */
  59. #define USBD_FNC_PIPE_DESTROY 0x0601 /* Destroy pipe */
  60. #define USBD_FNC_TRANSFER 0x0602 /* Initiate transfer */
  61. #define USBD_FNC_TRANSFER_ABORT  0x0603 /* Abort transfers */
  62. #define USBD_FNC_SYNCH_FRAME_GET 0x8604 /* Get synch frame */
  63. #define USBD_FNC_CURRENT_FRAME_GET 0x8605 /* Get current frame */
  64. #define USBD_FNC_SOF_MASTER_TAKE 0x0606 /* Become SOF master */
  65. #define USBD_FNC_SOF_MASTER_RELEASE 0x0607 /* release SOF master */
  66. #define USBD_FNC_SOF_INTERVAL_GET 0x0608 /* retrieve SOF */
  67. #define USBD_FNC_SOF_INTERVAL_SET 0x0609 /* set SOF (master only) */
  68. #define USBD_FNC_BUS_STATE_SET 0x060a /* set bus state */
  69. /* typedefs */
  70. /*
  71.  * URB_HEADER
  72.  *
  73.  * The URB_HEADER must be the first field in each URB data structure.  It
  74.  * identifies the USBD function to be executed, the size of the URB, etc.
  75.  */
  76. typedef struct urb_header
  77.     {
  78.     pVOID link;  /* n/a USBD private link ptr */
  79.     USBD_CLIENT_HANDLE handle; /* I/O Client's handle with USBD */
  80.     UINT16 function; /* IN USBD function code */
  81.     int result;  /* OUT Final URB result: S_usbdLib_xxxx */
  82.     UINT16 urbLength; /* IN Length of the total URB */
  83.     URB_CALLBACK callback; /* IN Completion callback */
  84.     pVOID userPtr; /* IN Generic pointer for client use */
  85.     } URB_HEADER, *pURB_HEADER;
  86. /* URBs */
  87. /*
  88.  * URB_CLIENT_REG
  89.  *
  90.  * Note: For this function and only this function, the client does *not* pass
  91.  * its USBD_CLIENT_HANDLE in the URB_HEADER.Handle field.  Instead, upon
  92.  * completion of this function, the USBD will have stored a newly assigned
  93.  * USBD_CLIENT_HANDLE in the URB_HEADER.Handle field, from which it should
  94.  * be retrieved by the client.
  95.  */
  96. typedef struct urb_client_reg
  97.     {
  98.     URB_HEADER header; /* URB header */
  99.     char clientName [USBD_NAME_LEN+1]; /* IN Client name */
  100.     } URB_CLIENT_REG, *pURB_CLIENT_REG;
  101. /*
  102.  * URB_CLIENT_UNREG
  103.  */
  104. typedef struct urb_client_unreg
  105.     {
  106.     URB_HEADER header; /* URB header */
  107.     } URB_CLIENT_UNREG, *pURB_CLIENT_UNREG;
  108. /*
  109.  * URB_MNGMT_CALLBACK_SET
  110.  */
  111. typedef struct urb_mngmt_callback_set
  112.     {
  113.     URB_HEADER header; /* URB header */
  114.     USBD_MNGMT_CALLBACK mngmtCallback; /* IN management callback or NULL */
  115.     pVOID mngmtCallbackParam; /* IN client-defined mngmt callback */
  116.     } URB_MNGMT_CALLBACK_SET, *pURB_MNGMT_CALLBACK_SET;
  117. /*
  118.  * URB_BUS_STATE_SET
  119.  */
  120. typedef struct urb_bus_state_set
  121.     {
  122.     URB_HEADER header; /* URB header */
  123.     USBD_NODE_ID nodeId; /* IN node ID */
  124.     UINT16 busState; /* IN desired bus state */
  125.     } URB_BUS_STATE_SET, *pURB_BUS_STATE_SET;
  126. /*
  127.  * URB_BUS_COUNT_GET
  128.  */
  129. typedef struct urb_bus_count_get
  130.     {
  131.     URB_HEADER header; /* URB header */
  132.     UINT16 busCount; /* OUT bus count */
  133.     } URB_BUS_COUNT_GET, *pURB_BUS_COUNT_GET;
  134. /*
  135.  * URB_ROOT_ID_GET
  136.  */
  137. typedef struct urb_root_id_get
  138.     {
  139.     URB_HEADER header; /* URB header */
  140.     UINT16 busIndex; /* IN bus index */
  141.     USBD_NODE_ID rootId; /* OUT Node Id for root hub */
  142.     } URB_ROOT_ID_GET, *pURB_ROOT_ID_GET;
  143. /*
  144.  * URB_HUB_PORT_COUNT_GET
  145.  */
  146. typedef struct urb_hub_port_count_get
  147.     {
  148.     URB_HEADER header; /* URB header */
  149.     USBD_NODE_ID hubId;  /* IN Node Id for desired hub */
  150.     UINT16 portCount; /* OUT port count for specified hub */
  151.     } URB_HUB_PORT_COUNT_GET, *pURB_HUB_PORT_COUNT_GET;
  152. /*
  153.  * URB_NODE_ID_GET
  154.  */
  155. typedef struct urb_node_id_get
  156.     {
  157.     URB_HEADER header; /* URB header */
  158.     USBD_NODE_ID hubId;  /* IN Node Id for desired hub */
  159.     UINT16 portIndex; /* IN Index of desired port */
  160.     UINT16 nodeType; /* OUT Type of node attached to port */
  161.     USBD_NODE_ID nodeId; /* OUT Node Id for device attached to port */
  162.     } URB_NODE_ID_GET, *pURB_NODE_ID_GET;
  163. /*
  164.  * URB_NODE_INFO_GET
  165.  */
  166. typedef struct urb_node_info_get
  167.     {
  168.     URB_HEADER header; /* URB header */
  169.     USBD_NODE_ID nodeId; /* IN Node id of device/hub */
  170.     pUSBD_NODE_INFO pNodeInfo; /* IN Ptr to struct to receive info */
  171.     UINT16 infoLen; /* IN Length of struct allocated by client */
  172.     } URB_NODE_INFO_GET, *pURB_NODE_INFO_GET;
  173. /* 
  174.  * URB_DYNAMIC_ATTACH_REG_UNREG
  175.  */
  176. typedef struct urb_dynamic_attach_reg_unreg
  177.     {
  178.     URB_HEADER header; /* URB header */
  179.     UINT16 deviceClass;  /* IN USB Device class to register */
  180.     UINT16 deviceSubClass; /* IN USB Device sub-class to register */
  181.     UINT16 deviceProtocol; /* IN USB Device protocol */
  182.     USBD_ATTACH_CALLBACK attachCallback;
  183. /* IN Caller-supplied notification callback */
  184.     } URB_DYNA_ATTACH_REG_UNREG, *pURB_DYNA_ATTACH_REG_UNREG;
  185. /*
  186.  * URB_FEATURE_CLEAR_SET
  187.  *
  188.  * NOTE: Same URB is used for USBD_FNC_FEATURE_CLEAR and USBD_FNC_FEATURE_SET.
  189.  */
  190. typedef struct urb_feature_clear_set
  191.     {
  192.     URB_HEADER header; /* URB header */
  193.     USBD_NODE_ID nodeId; /* IN Node ID of device/hub */
  194.     UINT16 requestType;  /* IN Selects request type */
  195.     UINT16 feature; /* IN Feature selector */
  196.     UINT16 index; /* IN Interface/endpoint index */
  197.     } URB_FEATURE_CLEAR_SET, *pURB_FEATURE_CLEAR_SET;
  198. /*
  199.  * URB_CONFIG_GET_SET
  200.  *
  201.  * NOTE: Same URB is used for USBD_FNC_CONFIG_GET and USBD_FNC_CONFIG_SET.
  202.  */
  203. typedef struct urb_config_get_set
  204.     {
  205.     URB_HEADER header; /* URB header */
  206.     USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
  207.     UINT16 maxPower; /* IN Max power to be consumed (set only) */
  208.     UINT16 configuration; /* I/O Configuration value */
  209.     } URB_CONFIG_GET_SET, *pURB_CONFIG_GET_SET;
  210. /*
  211.  * URB_DECSRIPTOR_GET_SET
  212.  *
  213.  * NOTE: Same URB is used for USBD_FNC_DESCRIPTOR_GET and 
  214.  * USBD_FNC_DESCRIPTOR_SET.
  215.  */
  216. typedef struct urb_descriptor_get_set
  217.     {
  218.     URB_HEADER header; /* URB header */
  219.     USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
  220.     UINT8 requestType; /* IN selects request type */
  221.     UINT8 descriptorType; /* IN Type of descriptor */
  222.     UINT8 descriptorIndex; /* IN Index of descriptor */
  223.     UINT16 languageId; /* IN Language ID */
  224.     UINT16 bfrLen; /* IN Max length of data to be returned */
  225.     pUINT8 pBfr; /* IN Pointer to bfr to receive data */
  226.     UINT16 actLen; /* OUT Actual length of data transferred */
  227.     } URB_DESCRIPTOR_GET_SET, *pURB_DESCRIPTOR_GET_SET;
  228. /*
  229.  * URB_INTERFACE_GET_SET
  230.  *
  231.  * NOTE: Same URB is used for USBD_FNC_INTERFACE_GET and USBD_FNC_INTERFACE_SET.
  232.  */
  233. typedef struct urb_interface_get_set
  234.     {
  235.     URB_HEADER header; /* URB header */
  236.     USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
  237.     UINT16 interfaceIndex; /* IN Index of interface */
  238.     UINT16 alternateSetting; /* I/O Current alternate setting */
  239.     } URB_INTERFACE_GET_SET, *pURB_INTERFACE_GET_SET;
  240. /*
  241.  * URB_STATUS_GET
  242.  */
  243. typedef struct urb_status_get
  244.     {
  245.     URB_HEADER header; /* URB header */
  246.     USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
  247.     UINT8 requestType; /* IN selects request type */
  248.     UINT16 index; /* IN Interface/endpoint index */
  249.     UINT16 bfrLen; /* IN max len of status to receive */
  250.     pUINT8 pBfr; /* OUT bfr to receive status from device */
  251.     UINT16 actLen; /* OUT actual length of status received */
  252.     } URB_STATUS_GET, *pURB_STATUS_GET;
  253. /*
  254.  * URB_ADDRESS_GET_SET
  255.  *
  256.  * NOTE: Same URB is used for USBD_FNC_ADDRESS_GET and USBD_FNC_ADDRESS_SET.
  257.  */
  258. typedef struct urb_address_get_set
  259.     {
  260.     URB_HEADER header; /* URB header */
  261.     USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
  262.     UINT16 deviceAddress; /* I/O device address */
  263.     } URB_ADDRESS_GET_SET, *pURB_ADDRESS_GET_SET;
  264. /*
  265.  * URB_VENDOR_SPECIFIC
  266.  */
  267. typedef struct urb_vendor_specific
  268.     {
  269.     URB_HEADER header; /* URB header */
  270.     USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
  271.     UINT8 requestType; /* IN bmRequestType in USB spec. */
  272.     UINT8 request; /* IN bRequest in USB spec. */
  273.     UINT16 value; /* IN wValue in USB spec. */
  274.     UINT16 index; /* IN wIndex in USB spec. */
  275.     UINT16 length; /* IN wLength in USB spec. */
  276.     pUINT8 pBfr; /* IN ptr to data buffer */
  277.     UINT16 actLen; /* OUT actual length transferred */
  278.     } URB_VENDOR_SPECIFIC, *pURB_VENDOR_SPECIFIC;
  279. /*
  280.  * URB_PIPE_CREATE
  281.  */
  282. typedef struct urb_pipe_create
  283.     {
  284.     URB_HEADER header; /* URB header */
  285.     USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
  286.     UINT16 endpoint; /* IN Endpoint number */
  287.     UINT16 configuration; /* IN config w/which pipe associated */
  288.     UINT16 interface; /* IN interface w/which pipe associated */
  289.     UINT16 transferType; /* IN Type of transfer: control, bulk, etc. */
  290.     UINT16 direction; /* IN Specifies IN or OUT endpoint */
  291.     UINT16 maxPayload; /* IN Maximum data payload per packet */
  292.     UINT32 bandwidth; /* IN Bandwidth required for pipe */
  293.     UINT16 serviceInterval; /* IN Required service interval */
  294.     USBD_PIPE_HANDLE pipeHandle;/* OUT pipe handle returned by USBD */
  295.     } URB_PIPE_CREATE, *pURB_PIPE_CREATE;
  296. /*
  297.  * URB_PIPE_DESTROY
  298.  */
  299. typedef struct urb_pipe_destroy
  300.     {
  301.     URB_HEADER header; /* URB header */
  302.     USBD_PIPE_HANDLE pipeHandle;/* IN handle returned by usbdPipeCreate */
  303.     } URB_PIPE_DESTROY, *pURB_PIPE_DESTROY;
  304. /*
  305.  * URB_TRANSFER
  306.  */
  307. typedef struct urb_transfer
  308.     {
  309.     URB_HEADER header; /* URB header */
  310.     USBD_PIPE_HANDLE pipeHandle;/* IN Pipe handle */
  311.     pUSB_IRP pIrp; /* IN ptr to I/O request packet */
  312.     } URB_TRANSFER, *pURB_TRANSFER;
  313. /*
  314.  * URB_SYNCH_FRAME_GET
  315.  */
  316. typedef struct urb_synch_frame_get
  317.     {
  318.     URB_HEADER header; /* URB header */
  319.     USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
  320.     UINT16 endpoint; /* IN Endpoint to be queried */
  321.     UINT16 frameNo; /* OUT Frame number returned by device */
  322.     } URB_SYNCH_FRAME_GET, *pURB_SYNCH_FRAME_GET;
  323. /* 
  324.  * URB_CURRENT_FRAME_GET
  325.  */
  326. typedef struct urb_current_frame_get
  327.     {
  328.     URB_HEADER header; /* URB header */
  329.     USBD_NODE_ID nodeId; /* IN Node Id of a device on desired USB */
  330.     UINT32 frameNo; /* OUT Current frame number for USB */
  331.     UINT32 frameWindow;  /* OUT Frame scheduling window */
  332.     } URB_CURRENT_FRAME_GET, *pURB_CURRENT_FRAME_GET;
  333. /*
  334.  * URB_SOF_MASTER
  335.  */
  336. typedef struct urb_sof_master
  337.     {
  338.     URB_HEADER header; /* URB header */
  339.     USBD_NODE_ID nodeId; /* IN node ID of a device on desired USB */
  340.     } URB_SOF_MASTER, *pURB_SOF_MASTER;
  341. /*
  342.  * URB_SOF_INTERVAL_GET_SET
  343.  */
  344. typedef struct urb_sof_interval_get_set
  345.     {
  346.     URB_HEADER header; /* URB header */
  347.     USBD_NODE_ID nodeId; /* IN node ID of a device on desired USB */
  348.     UINT16 sofInterval;  /* I/O SOF interval in bit times */
  349.     } URB_SOF_INTERVAL_GET_SET, *pURB_SOF_INTERVAL_GET_SET;
  350. /*
  351.  * URB_VERSION_GET
  352.  */
  353. typedef struct urb_version_get
  354.     {
  355.     URB_HEADER header; /* URB header */
  356.     UINT16 version; /* OUT USBD version in BCD */
  357.     UINT8 mfg [USBD_NAME_LEN+1];/* OUT USBD manufacturer name */
  358.     } URB_VERSION_GET, *pURB_VERSION_GET;
  359. /*
  360.  * URB_HCD_ATTACH
  361.  */
  362. typedef struct urb_hcd_attach
  363.     {
  364.     URB_HEADER header;     /*     URB header */
  365.     HCD_EXEC_FUNC hcdExecFunc;     /* IN   HCD primary entry point */
  366.     pVOID param;     /* IN   HCD-specific parameter */
  367.     GENERIC_HANDLE attachToken;     /* OUT  attach token */
  368.     } URB_HCD_ATTACH, *pURB_HCD_ATTACH;
  369. /*
  370.  * URB_HCD_DETACH
  371.  */
  372. typedef struct urb_hcd_detach
  373.     {
  374.     URB_HEADER header;     /*     URB header */
  375.     GENERIC_HANDLE attachToken;     /* IN   attach token */
  376.     } URB_HCD_DETACH, *pURB_HCD_DETACH;
  377. /*
  378.  * URB_STATISTICS_GET
  379.  */
  380. typedef struct urb_statistics_get
  381.     {
  382.     URB_HEADER header; /* URB header */
  383.     USBD_NODE_ID nodeId; /* IN Node Id of a node on desired USB */
  384.     pUSBD_STATS pStatistics; /* IN Ptr to structure to receive stats */
  385.     UINT16 statLen; /* IN Len of stats bfr provided by caller */
  386.     } URB_STATISTICS_GET, *pURB_STATISTICS_GET;
  387. /* function prototypes */
  388. STATUS usbdCoreEntry
  389.     (
  390.     pURB_HEADER pUrb /* URB to be executed */
  391.     );
  392. #ifdef __cplusplus
  393. }
  394. #endif
  395. #endif /* __INCusbdCoreLibh */
  396. /* End of file. */