1 typedef struct USBH_HOST_DRIVER_INST { 2 U32 Magic; 3 USBH_DLIST HostControllerList; 4 U32 HostControllerCount; 5 USBH_DLIST NotificationList; // Registered PNP notifications 6 U32 NotificationCount; // *** USBH_RegisterPnPNotification() 7 USBH_DLIST DelayedPnPNotificationList; // Delayed Pnp notifications 8 U32 DelayedPnPNotificationCount; // called in an timer routine 9 USBH_TIMER_HANDLE DelayedPnPNotifyTimer; // call Delayed Pnp notifications 10 USBH_DLIST EnumErrorNotificationList; // *** USBH_RegisterEnumErrorNotification() 11 U32 EnumErrorNotificationCount; // *** USBH_RegisterEnumErrorNotification() 12 USBH_INTERFACE_ID NextInterfaceId; // Next free ID's for a new enumerated device 13 USBH_DEVICE_ID NextDeviceId; // Next free ID's for a new enumerated device 14 } USBH_HOST_DRIVER_INST; 15 16 typedef struct USBH_GLOBAL { 17 U8 ConfigCompleted; 18 U8 InitCompleted; 19 USBH_HC_HANDLE hHC; // Context for the host controller driver 20 USBH_HC_BD_HANDLE hHCBD; // Handle of the bus driver of a host controller 21 USBH_HOST_DRIVER_INST DriverInst; // 22 USBH_HOST_DRIVER * pDriver; // USBH_HOST_INIT_FUNC, USBH_HOST_EXIT_FUNC, etc. 23 USBH_ON_SETCONFIGURATION_FUNC * pfOnSetConfiguration; // USBH_SetOnSetConfiguration() 24 void * pOnSetConfigContext; // USBH_SetOnSetConfiguration() 25 struct { // Config ************** 26 U32 TransferBufferSize; // USBH_AssignMemory() USBH_AssignTransferMemory() 27 U8 NumRootHubs; 28 U8 RootHubPortsAlwaysPowered; 29 U8 RootHubPerPortPowered; 30 U8 RootHubSupportOvercurrent; 31 U8 NumUSBDevices; // USBH_ConfigMaxUSBDevices() 32 U8 NumBulkEndpoints; // USBH_ConfigMaxNumEndpoints() 33 U8 NumIntEndpoints; // USBH_ConfigMaxNumEndpoints() 34 U8 NumIsoEndpoints; // USBH_ConfigMaxNumEndpoints() 35 U8 SupportExternalHubs; // USBH_ConfigSupportExternalHubs() 36 U8 SetHighIsPowerOn; 37 U32 DefaultPowerGoodTime; 38 } Config; // Config ************** 39 U8 IsRunning; // USBH_Task() 40 U8 TimerTaskIsRunning; 41 U8 ISRTaskIsRunning; // USBH_ISRTask() 42 USBH_DRIVER_REMOVE_FUNC * pfDriverRemove; 43 } USBH_GLOBAL; // void USBH_ON_PNP_EVENT_FUNC(USBH_INTERFACE_ID InterfaceId); 44 // USBH_GetInterfaceInfo( InterfaceId, &InterfaceInfo ) 45 struct USB_DEVICE { // USBH_BD_GetDeviceById( DeviceId ) = InterfaceInfo.DeviceId 46 U32 Magic; 47 USBH_DLIST ListEntry; // To store this object in the host controller object 48 USBH_DLIST TempEntry; // To store this object in an temporary list 49 USBH_BOOL TempFlag; 50 long RefCount; // deleted when ( RefCount == 0 ) ? 51 USBH_HOST_CONTROLLER * pHostController; // Pointer to the owning host controller 52 53 USBH_DLIST UsbInterfaceList; // List for interfaces 54 unsigned int InterfaceCount; // USB_X_INTERFACE_ARRAY[ *** InterfaceCount *** ] 55 56 USBH_HUB_PORT * pParentPort; // This is the hub port where this device is connected to 57 U8 UsbAddress; // This is the USB address of the device 58 USBH_SPEED DeviceSpeed; // pSpeed of the device connection 59 U8 MaxFifoSize; // The FIFO size <--- Host Controller ---> 60 U8 ConfigurationIndex; // The index of the current configuration 61 U8 NumConfigurations; // The index of the current configuration 62 USBH_DEVICE_DESCRIPTOR DeviceDescriptor; // Device Descriptor 63 U8 ** ppConfigDesc; // Points to the All configuration descriptors 64 U16 * paConfigSize; // paConfigSize[ index ] 65 U8 * pConfigDescriptor; // Points to the current configuration descriptor 66 U16 ConfigDescriptorSize; // Size of the current configuration descriptor 67 U16 LanguageId; // First language ID 68 U8 * pSerialNumber; // Serial number without header, UNICODE 69 unsigned int SerialNumberSize; 70 U16 DevStatus; // Device status returned from USB GetStatus 71 USBH_DEFAULT_EP DefaultEp; // Embedded default endpoint 72 USB_HUB * pUsbHub; // This pointer is valid if the device is a hub 73 USB_DEV_STATE State; // Current device state 74 USBH_URB EnumUrb; // Embedded URB 75 void * pCtrlTransferBuffer; // Used from USBH_BD_ProcessEnum and ProcessEnumHub() 76 unsigned int CtrlTransferBufferSize; 77 URB_SUB_STATE SubState; 78 DEV_ENUM_STATE EnumState; 79 USBH_BOOL EnumSubmitFlag; // Used during enumeration if the device is as an hub 80 POST_ENUM_FUNC * pfPostEnumFunction; 81 void * pPostEnumerationContext; 82 USBH_DEVICE_ID DeviceId; // Device ID for this device 83 }; 84 85 struct USB_INTERFACE { // USBH_GetInterfaceByInterfaceId( InterfaceId ) 86 U32 Magic; 87 USBH_DLIST ListEntry; // To store this object in the device object 88 USB_DEVICE * pDevice; // Backward pointer 89 90 USBH_DLIST UsbEndpointList; // List for endpoints 91 unsigned int EndpointCount; // USB_X_ENDPOINT_ARRAY[ *** USB_X_ENDPOINT *** ] 92 93 U8 CurrentAlternateSetting; // 94 U8 * pInterfaceDescriptor; // Interface Descriptor 95 U8 * pAlternateSettingDescriptor; 96 U8 NewAlternateSetting; // 97 U8 * pNewAlternateSettingDescriptor; 98 unsigned int OpenCount; // 99 U8 ExclusiveUsed; // EndpointCount <= USB_MAX_ENDPOINTS 100 USB_ENDPOINT * pEpMap[USB_MAX_ENDPOINTS]; // A map for fast access to endpoint structures 101 USBH_INTERFACE_ID InterfaceId; // ID of this interface 102 }; 103 104 typedef struct USB_ENDPOINT { 105 USBH_DLIST ListEntry; // to store this object in the interface object 106 U32 Magic; 107 USB_INTERFACE * pUsbInterface; // Backward pointer 108 U8 * pEndpointDescriptor; // Endpoint Descriptor 109 USBH_HC_EP_HANDLE hEP; // Endpoint handle must be used to submit an URB 110 U32 UrbCount; 111 } USB_ENDPOINT;