usbdCoreLib.h
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:14k
- /* usbdCoreLib.h - Defines internal between usbdLib and usbdCoreLib */
- /* Copyright 2000 Wind River Systems, Inc. */
- /*
- Modification history
- --------------------
- 01d,26jan00,rcb Redefine "bandwidth" field in URB_PIPE_CREATE as UINT32.
- 01c,29nov99,rcb Increase frame number fields to 32 bits in
- URB_CURRENT_FRAME_GET.
- 01b,07sep99,rcb Add support for management callbacks and set-bus-state API.
- 01a,20aug99,rcb First.
- */
- #ifndef __INCusbdCoreLibh
- #define __INCusbdCoreLibh
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* includes */
- #include "usb/usbdLib.h"
- /* defines */
- /* USBD Function Request Codes - URB_HEADER.Function */
- #define USBD_FNC_ASYNC_MASK 0x8000 /* Set if USBD function */
- /* execute asynchronously */
- /*
- * Synchronous USBD functions always execute synchronously.
- *
- * Asynchronous USBD functions may or may not execute asynchronously,
- * depending on the USBD implementation. However, clients must expect that
- * such functions may execute asynchronously.
- */
- #define USBD_FNC_INITIALIZE 0x0000 /* initialize USBD */
- #define USBD_FNC_SHUTDOWN 0x0001 /* shut down USBD */
- #define USBD_FNC_CLIENT_REG 0x0100 /* Client register */
- #define USBD_FNC_CLIENT_UNREG 0x0101 /* Client unregister */
- #define USBD_FNC_MNGMT_CALLBACK_SET 0x0102 /* set client's mngmt callback */
- #define USBD_FNC_VERSION_GET 0x0200 /* Get USBD version */
- #define USBD_FNC_HCD_ATTACH 0x0201 /* Attach HCD to USBD */
- #define USBD_FNC_HCD_DETACH 0x0202 /* Detach HCD from USBD */
- #define USBD_FNC_STATISTICS_GET 0x0203 /* Get USBD statistics */
- #define USBD_FNC_BUS_COUNT_GET 0x0300 /* Get bus count */
- #define USBD_FNC_ROOT_ID_GET 0x0301 /* Get root id */
- #define USBD_FNC_HUB_PORT_COUNT_GET 0x0302 /* Get count of hub ports */
- #define USBD_FNC_NODE_ID_GET 0x0303 /* Get node id */
- #define USBD_FNC_NODE_INFO_GET 0x0304 /* Get node information */
- #define USBD_FNC_DYNA_ATTACH_REG 0x0400 /* Dynamic attach register */
- #define USBD_FNC_DYNA_ATTACH_UNREG 0x0401 /* Dynamic attach unregister */
- #define USBD_FNC_FEATURE_CLEAR 0x8500 /* Clear feature */
- #define USBD_FNC_FEATURE_SET 0x8501 /* Set feature */
- #define USBD_FNC_CONFIG_GET 0x8502 /* Get configuration */
- #define USBD_FNC_CONFIG_SET 0x8503 /* Set configuration */
- #define USBD_FNC_DESCRIPTOR_GET 0x8504 /* Get descriptor */
- #define USBD_FNC_DESCRIPTOR_SET 0x8505 /* Set descriptor */
- #define USBD_FNC_INTERFACE_GET 0x8506 /* Get interface */
- #define USBD_FNC_INTERFACE_SET 0x8507 /* Set interface */
- #define USBD_FNC_STATUS_GET 0x8508 /* Get status */
- #define USBD_FNC_ADDRESS_GET 0x0509 /* Get device address */
- #define USBD_FNC_ADDRESS_SET 0x850a /* Set device address */
- #define USBD_FNC_VENDOR_SPECIFIC 0x850b /* Vendor specific */
- #define USBD_FNC_PIPE_CREATE 0x0600 /* Create pipe */
- #define USBD_FNC_PIPE_DESTROY 0x0601 /* Destroy pipe */
- #define USBD_FNC_TRANSFER 0x0602 /* Initiate transfer */
- #define USBD_FNC_TRANSFER_ABORT 0x0603 /* Abort transfers */
- #define USBD_FNC_SYNCH_FRAME_GET 0x8604 /* Get synch frame */
- #define USBD_FNC_CURRENT_FRAME_GET 0x8605 /* Get current frame */
- #define USBD_FNC_SOF_MASTER_TAKE 0x0606 /* Become SOF master */
- #define USBD_FNC_SOF_MASTER_RELEASE 0x0607 /* release SOF master */
- #define USBD_FNC_SOF_INTERVAL_GET 0x0608 /* retrieve SOF */
- #define USBD_FNC_SOF_INTERVAL_SET 0x0609 /* set SOF (master only) */
- #define USBD_FNC_BUS_STATE_SET 0x060a /* set bus state */
- /* typedefs */
- /*
- * URB_HEADER
- *
- * The URB_HEADER must be the first field in each URB data structure. It
- * identifies the USBD function to be executed, the size of the URB, etc.
- */
- typedef struct urb_header
- {
- pVOID link; /* n/a USBD private link ptr */
- USBD_CLIENT_HANDLE handle; /* I/O Client's handle with USBD */
- UINT16 function; /* IN USBD function code */
- int result; /* OUT Final URB result: S_usbdLib_xxxx */
- UINT16 urbLength; /* IN Length of the total URB */
- URB_CALLBACK callback; /* IN Completion callback */
- pVOID userPtr; /* IN Generic pointer for client use */
- } URB_HEADER, *pURB_HEADER;
- /* URBs */
- /*
- * URB_CLIENT_REG
- *
- * Note: For this function and only this function, the client does *not* pass
- * its USBD_CLIENT_HANDLE in the URB_HEADER.Handle field. Instead, upon
- * completion of this function, the USBD will have stored a newly assigned
- * USBD_CLIENT_HANDLE in the URB_HEADER.Handle field, from which it should
- * be retrieved by the client.
- */
- typedef struct urb_client_reg
- {
- URB_HEADER header; /* URB header */
- char clientName [USBD_NAME_LEN+1]; /* IN Client name */
- } URB_CLIENT_REG, *pURB_CLIENT_REG;
- /*
- * URB_CLIENT_UNREG
- */
- typedef struct urb_client_unreg
- {
- URB_HEADER header; /* URB header */
- } URB_CLIENT_UNREG, *pURB_CLIENT_UNREG;
- /*
- * URB_MNGMT_CALLBACK_SET
- */
- typedef struct urb_mngmt_callback_set
- {
- URB_HEADER header; /* URB header */
- USBD_MNGMT_CALLBACK mngmtCallback; /* IN management callback or NULL */
- pVOID mngmtCallbackParam; /* IN client-defined mngmt callback */
- } URB_MNGMT_CALLBACK_SET, *pURB_MNGMT_CALLBACK_SET;
-
- /*
- * URB_BUS_STATE_SET
- */
- typedef struct urb_bus_state_set
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID nodeId; /* IN node ID */
- UINT16 busState; /* IN desired bus state */
- } URB_BUS_STATE_SET, *pURB_BUS_STATE_SET;
- /*
- * URB_BUS_COUNT_GET
- */
- typedef struct urb_bus_count_get
- {
- URB_HEADER header; /* URB header */
- UINT16 busCount; /* OUT bus count */
- } URB_BUS_COUNT_GET, *pURB_BUS_COUNT_GET;
- /*
- * URB_ROOT_ID_GET
- */
- typedef struct urb_root_id_get
- {
- URB_HEADER header; /* URB header */
- UINT16 busIndex; /* IN bus index */
- USBD_NODE_ID rootId; /* OUT Node Id for root hub */
- } URB_ROOT_ID_GET, *pURB_ROOT_ID_GET;
- /*
- * URB_HUB_PORT_COUNT_GET
- */
- typedef struct urb_hub_port_count_get
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID hubId; /* IN Node Id for desired hub */
- UINT16 portCount; /* OUT port count for specified hub */
- } URB_HUB_PORT_COUNT_GET, *pURB_HUB_PORT_COUNT_GET;
- /*
- * URB_NODE_ID_GET
- */
- typedef struct urb_node_id_get
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID hubId; /* IN Node Id for desired hub */
- UINT16 portIndex; /* IN Index of desired port */
- UINT16 nodeType; /* OUT Type of node attached to port */
- USBD_NODE_ID nodeId; /* OUT Node Id for device attached to port */
- } URB_NODE_ID_GET, *pURB_NODE_ID_GET;
- /*
- * URB_NODE_INFO_GET
- */
- typedef struct urb_node_info_get
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID nodeId; /* IN Node id of device/hub */
- pUSBD_NODE_INFO pNodeInfo; /* IN Ptr to struct to receive info */
- UINT16 infoLen; /* IN Length of struct allocated by client */
- } URB_NODE_INFO_GET, *pURB_NODE_INFO_GET;
- /*
- * URB_DYNAMIC_ATTACH_REG_UNREG
- */
- typedef struct urb_dynamic_attach_reg_unreg
- {
- URB_HEADER header; /* URB header */
- UINT16 deviceClass; /* IN USB Device class to register */
- UINT16 deviceSubClass; /* IN USB Device sub-class to register */
- UINT16 deviceProtocol; /* IN USB Device protocol */
- USBD_ATTACH_CALLBACK attachCallback;
- /* IN Caller-supplied notification callback */
- } URB_DYNA_ATTACH_REG_UNREG, *pURB_DYNA_ATTACH_REG_UNREG;
- /*
- * URB_FEATURE_CLEAR_SET
- *
- * NOTE: Same URB is used for USBD_FNC_FEATURE_CLEAR and USBD_FNC_FEATURE_SET.
- */
- typedef struct urb_feature_clear_set
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID nodeId; /* IN Node ID of device/hub */
- UINT16 requestType; /* IN Selects request type */
- UINT16 feature; /* IN Feature selector */
- UINT16 index; /* IN Interface/endpoint index */
- } URB_FEATURE_CLEAR_SET, *pURB_FEATURE_CLEAR_SET;
- /*
- * URB_CONFIG_GET_SET
- *
- * NOTE: Same URB is used for USBD_FNC_CONFIG_GET and USBD_FNC_CONFIG_SET.
- */
- typedef struct urb_config_get_set
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
- UINT16 maxPower; /* IN Max power to be consumed (set only) */
- UINT16 configuration; /* I/O Configuration value */
- } URB_CONFIG_GET_SET, *pURB_CONFIG_GET_SET;
- /*
- * URB_DECSRIPTOR_GET_SET
- *
- * NOTE: Same URB is used for USBD_FNC_DESCRIPTOR_GET and
- * USBD_FNC_DESCRIPTOR_SET.
- */
- typedef struct urb_descriptor_get_set
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
- UINT8 requestType; /* IN selects request type */
- UINT8 descriptorType; /* IN Type of descriptor */
- UINT8 descriptorIndex; /* IN Index of descriptor */
- UINT16 languageId; /* IN Language ID */
- UINT16 bfrLen; /* IN Max length of data to be returned */
- pUINT8 pBfr; /* IN Pointer to bfr to receive data */
- UINT16 actLen; /* OUT Actual length of data transferred */
- } URB_DESCRIPTOR_GET_SET, *pURB_DESCRIPTOR_GET_SET;
- /*
- * URB_INTERFACE_GET_SET
- *
- * NOTE: Same URB is used for USBD_FNC_INTERFACE_GET and USBD_FNC_INTERFACE_SET.
- */
- typedef struct urb_interface_get_set
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
- UINT16 interfaceIndex; /* IN Index of interface */
- UINT16 alternateSetting; /* I/O Current alternate setting */
- } URB_INTERFACE_GET_SET, *pURB_INTERFACE_GET_SET;
- /*
- * URB_STATUS_GET
- */
- typedef struct urb_status_get
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
- UINT8 requestType; /* IN selects request type */
- UINT16 index; /* IN Interface/endpoint index */
- UINT16 bfrLen; /* IN max len of status to receive */
- pUINT8 pBfr; /* OUT bfr to receive status from device */
- UINT16 actLen; /* OUT actual length of status received */
- } URB_STATUS_GET, *pURB_STATUS_GET;
- /*
- * URB_ADDRESS_GET_SET
- *
- * NOTE: Same URB is used for USBD_FNC_ADDRESS_GET and USBD_FNC_ADDRESS_SET.
- */
- typedef struct urb_address_get_set
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
- UINT16 deviceAddress; /* I/O device address */
- } URB_ADDRESS_GET_SET, *pURB_ADDRESS_GET_SET;
- /*
- * URB_VENDOR_SPECIFIC
- */
- typedef struct urb_vendor_specific
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
- UINT8 requestType; /* IN bmRequestType in USB spec. */
- UINT8 request; /* IN bRequest in USB spec. */
- UINT16 value; /* IN wValue in USB spec. */
- UINT16 index; /* IN wIndex in USB spec. */
- UINT16 length; /* IN wLength in USB spec. */
- pUINT8 pBfr; /* IN ptr to data buffer */
- UINT16 actLen; /* OUT actual length transferred */
- } URB_VENDOR_SPECIFIC, *pURB_VENDOR_SPECIFIC;
- /*
- * URB_PIPE_CREATE
- */
- typedef struct urb_pipe_create
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
- UINT16 endpoint; /* IN Endpoint number */
- UINT16 configuration; /* IN config w/which pipe associated */
- UINT16 interface; /* IN interface w/which pipe associated */
- UINT16 transferType; /* IN Type of transfer: control, bulk, etc. */
- UINT16 direction; /* IN Specifies IN or OUT endpoint */
- UINT16 maxPayload; /* IN Maximum data payload per packet */
- UINT32 bandwidth; /* IN Bandwidth required for pipe */
- UINT16 serviceInterval; /* IN Required service interval */
- USBD_PIPE_HANDLE pipeHandle;/* OUT pipe handle returned by USBD */
- } URB_PIPE_CREATE, *pURB_PIPE_CREATE;
- /*
- * URB_PIPE_DESTROY
- */
- typedef struct urb_pipe_destroy
- {
- URB_HEADER header; /* URB header */
- USBD_PIPE_HANDLE pipeHandle;/* IN handle returned by usbdPipeCreate */
- } URB_PIPE_DESTROY, *pURB_PIPE_DESTROY;
- /*
- * URB_TRANSFER
- */
- typedef struct urb_transfer
- {
- URB_HEADER header; /* URB header */
- USBD_PIPE_HANDLE pipeHandle;/* IN Pipe handle */
- pUSB_IRP pIrp; /* IN ptr to I/O request packet */
- } URB_TRANSFER, *pURB_TRANSFER;
- /*
- * URB_SYNCH_FRAME_GET
- */
- typedef struct urb_synch_frame_get
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID nodeId; /* IN Node Id of device/hub */
- UINT16 endpoint; /* IN Endpoint to be queried */
- UINT16 frameNo; /* OUT Frame number returned by device */
- } URB_SYNCH_FRAME_GET, *pURB_SYNCH_FRAME_GET;
- /*
- * URB_CURRENT_FRAME_GET
- */
- typedef struct urb_current_frame_get
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID nodeId; /* IN Node Id of a device on desired USB */
- UINT32 frameNo; /* OUT Current frame number for USB */
- UINT32 frameWindow; /* OUT Frame scheduling window */
- } URB_CURRENT_FRAME_GET, *pURB_CURRENT_FRAME_GET;
- /*
- * URB_SOF_MASTER
- */
- typedef struct urb_sof_master
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID nodeId; /* IN node ID of a device on desired USB */
- } URB_SOF_MASTER, *pURB_SOF_MASTER;
- /*
- * URB_SOF_INTERVAL_GET_SET
- */
- typedef struct urb_sof_interval_get_set
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID nodeId; /* IN node ID of a device on desired USB */
- UINT16 sofInterval; /* I/O SOF interval in bit times */
- } URB_SOF_INTERVAL_GET_SET, *pURB_SOF_INTERVAL_GET_SET;
- /*
- * URB_VERSION_GET
- */
- typedef struct urb_version_get
- {
- URB_HEADER header; /* URB header */
- UINT16 version; /* OUT USBD version in BCD */
- UINT8 mfg [USBD_NAME_LEN+1];/* OUT USBD manufacturer name */
- } URB_VERSION_GET, *pURB_VERSION_GET;
- /*
- * URB_HCD_ATTACH
- */
- typedef struct urb_hcd_attach
- {
- URB_HEADER header; /* URB header */
- HCD_EXEC_FUNC hcdExecFunc; /* IN HCD primary entry point */
- pVOID param; /* IN HCD-specific parameter */
- GENERIC_HANDLE attachToken; /* OUT attach token */
- } URB_HCD_ATTACH, *pURB_HCD_ATTACH;
- /*
- * URB_HCD_DETACH
- */
- typedef struct urb_hcd_detach
- {
- URB_HEADER header; /* URB header */
- GENERIC_HANDLE attachToken; /* IN attach token */
- } URB_HCD_DETACH, *pURB_HCD_DETACH;
- /*
- * URB_STATISTICS_GET
- */
- typedef struct urb_statistics_get
- {
- URB_HEADER header; /* URB header */
- USBD_NODE_ID nodeId; /* IN Node Id of a node on desired USB */
- pUSBD_STATS pStatistics; /* IN Ptr to structure to receive stats */
- UINT16 statLen; /* IN Len of stats bfr provided by caller */
- } URB_STATISTICS_GET, *pURB_STATISTICS_GET;
- /* function prototypes */
- STATUS usbdCoreEntry
- (
- pURB_HEADER pUrb /* URB to be executed */
- );
- #ifdef __cplusplus
- }
- #endif
- #endif /* __INCusbdCoreLibh */
- /* End of file. */