You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
270 lines
7.6 KiB
270 lines
7.6 KiB
#ifndef __USB100_H__ |
|
#define __USB100_H__ |
|
|
|
|
|
#include <PSHPACK1.H> |
|
|
|
|
|
//bmRequest.Dir |
|
#define BMREQUEST_HOST_TO_DEVICE 0 |
|
#define BMREQUEST_DEVICE_TO_HOST 1 |
|
|
|
//bmRequest.Type |
|
#define BMREQUEST_STANDARD 0 |
|
#define BMREQUEST_CLASS 1 |
|
#define BMREQUEST_VENDOR 2 |
|
|
|
//bmRequest.Recipient |
|
#define BMREQUEST_TO_DEVICE 0 |
|
#define BMREQUEST_TO_INTERFACE 1 |
|
#define BMREQUEST_TO_ENDPOINT 2 |
|
#define BMREQUEST_TO_OTHER 3 |
|
|
|
|
|
#define MAXIMUM_USB_STRING_LENGTH 255 |
|
|
|
// values for the bits returned by the USB GET_STATUS command |
|
#define USB_GETSTATUS_SELF_POWERED 0x01 |
|
#define USB_GETSTATUS_REMOTE_WAKEUP_ENABLED 0x02 |
|
|
|
|
|
#define USB_DEVICE_DESCRIPTOR_TYPE 0x01 |
|
#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02 |
|
#define USB_STRING_DESCRIPTOR_TYPE 0x03 |
|
#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04 |
|
#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05 |
|
|
|
// descriptor types defined by DWG documents |
|
#define USB_RESERVED_DESCRIPTOR_TYPE 0x06 |
|
#define USB_CONFIG_POWER_DESCRIPTOR_TYPE 0x07 |
|
#define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 0x08 |
|
|
|
#define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) ((USHORT)((USHORT)d<<8 | i)) |
|
|
|
// |
|
// Values for bmAttributes field of an |
|
// endpoint descriptor |
|
// |
|
|
|
#define USB_ENDPOINT_TYPE_MASK 0x03 |
|
|
|
#define USB_ENDPOINT_TYPE_CONTROL 0x00 |
|
#define USB_ENDPOINT_TYPE_ISOCHRONOUS 0x01 |
|
#define USB_ENDPOINT_TYPE_BULK 0x02 |
|
#define USB_ENDPOINT_TYPE_INTERRUPT 0x03 |
|
|
|
|
|
// |
|
// definitions for bits in the bmAttributes field of a |
|
// configuration descriptor. |
|
// |
|
#define USB_CONFIG_POWERED_MASK 0xc0 |
|
|
|
#define USB_CONFIG_BUS_POWERED 0x80 |
|
#define USB_CONFIG_SELF_POWERED 0x40 |
|
#define USB_CONFIG_REMOTE_WAKEUP 0x20 |
|
|
|
// |
|
// Endpoint direction bit, stored in address |
|
// |
|
|
|
#define USB_ENDPOINT_DIRECTION_MASK 0x80 |
|
|
|
// test direction bit in the bEndpointAddress field of |
|
// an endpoint descriptor. |
|
#define USB_ENDPOINT_DIRECTION_OUT(addr) (!((addr) & USB_ENDPOINT_DIRECTION_MASK)) |
|
#define USB_ENDPOINT_DIRECTION_IN(addr) ((addr) & USB_ENDPOINT_DIRECTION_MASK) |
|
|
|
// |
|
// USB defined request codes |
|
// see chapter 9 of the USB 1.0 specifcation for |
|
// more information. |
|
// |
|
|
|
// These are the correct values based on the USB 1.0 |
|
// specification |
|
|
|
#define USB_REQUEST_GET_STATUS 0x00 |
|
#define USB_REQUEST_CLEAR_FEATURE 0x01 |
|
|
|
#define USB_REQUEST_SET_FEATURE 0x03 |
|
|
|
#define USB_REQUEST_SET_ADDRESS 0x05 |
|
#define USB_REQUEST_GET_DESCRIPTOR 0x06 |
|
#define USB_REQUEST_SET_DESCRIPTOR 0x07 |
|
#define USB_REQUEST_GET_CONFIGURATION 0x08 |
|
#define USB_REQUEST_SET_CONFIGURATION 0x09 |
|
#define USB_REQUEST_GET_INTERFACE 0x0A |
|
#define USB_REQUEST_SET_INTERFACE 0x0B |
|
#define USB_REQUEST_SYNC_FRAME 0x0C |
|
|
|
|
|
// |
|
// defined USB device classes |
|
// |
|
|
|
|
|
#define USB_DEVICE_CLASS_RESERVED 0x00 |
|
#define USB_DEVICE_CLASS_AUDIO 0x01 |
|
#define USB_DEVICE_CLASS_COMMUNICATIONS 0x02 |
|
#define USB_DEVICE_CLASS_HUMAN_INTERFACE 0x03 |
|
#define USB_DEVICE_CLASS_MONITOR 0x04 |
|
#define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05 |
|
#define USB_DEVICE_CLASS_POWER 0x06 |
|
#define USB_DEVICE_CLASS_PRINTER 0x07 |
|
#define USB_DEVICE_CLASS_STORAGE 0x08 |
|
#define USB_DEVICE_CLASS_HUB 0x09 |
|
#define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF |
|
|
|
// |
|
// USB Core defined Feature selectors |
|
// |
|
|
|
#define USB_FEATURE_ENDPOINT_STALL 0x0000 |
|
#define USB_FEATURE_REMOTE_WAKEUP 0x0001 |
|
|
|
// |
|
// USB DWG defined Feature selectors |
|
// |
|
|
|
#define USB_FEATURE_INTERFACE_POWER_D0 0x0002 |
|
#define USB_FEATURE_INTERFACE_POWER_D1 0x0003 |
|
#define USB_FEATURE_INTERFACE_POWER_D2 0x0004 |
|
#define USB_FEATURE_INTERFACE_POWER_D3 0x0005 |
|
|
|
typedef struct _USB_DEVICE_DESCRIPTOR { |
|
UCHAR bLength; |
|
UCHAR bDescriptorType; |
|
USHORT bcdUSB; |
|
UCHAR bDeviceClass; |
|
UCHAR bDeviceSubClass; |
|
UCHAR bDeviceProtocol; |
|
UCHAR bMaxPacketSize0; |
|
USHORT idVendor; |
|
USHORT idProduct; |
|
USHORT bcdDevice; |
|
UCHAR iManufacturer; |
|
UCHAR iProduct; |
|
UCHAR iSerialNumber; |
|
UCHAR bNumConfigurations; |
|
} USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR; |
|
|
|
typedef struct _USB_ENDPOINT_DESCRIPTOR { |
|
UCHAR bLength; |
|
UCHAR bDescriptorType; |
|
UCHAR bEndpointAddress; |
|
UCHAR bmAttributes; |
|
USHORT wMaxPacketSize; |
|
UCHAR bInterval; |
|
} USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR; |
|
|
|
typedef struct _USB_CONFIGURATION_DESCRIPTOR { |
|
UCHAR bLength; |
|
UCHAR bDescriptorType; |
|
USHORT wTotalLength; |
|
UCHAR bNumInterfaces; |
|
UCHAR bConfigurationValue; |
|
UCHAR iConfiguration; |
|
UCHAR bmAttributes; |
|
UCHAR MaxPower; |
|
} USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR; |
|
|
|
typedef struct _USB_INTERFACE_DESCRIPTOR { |
|
UCHAR bLength; |
|
UCHAR bDescriptorType; |
|
UCHAR bInterfaceNumber; |
|
UCHAR bAlternateSetting; |
|
UCHAR bNumEndpoints; |
|
UCHAR bInterfaceClass; |
|
UCHAR bInterfaceSubClass; |
|
UCHAR bInterfaceProtocol; |
|
UCHAR iInterface; |
|
} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR; |
|
|
|
typedef struct _USB_STRING_DESCRIPTOR { |
|
UCHAR bLength; |
|
UCHAR bDescriptorType; |
|
WCHAR bString[1]; |
|
} USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR; |
|
|
|
typedef struct _USB_COMMON_DESCRIPTOR { |
|
UCHAR bLength; |
|
UCHAR bDescriptorType; |
|
} USB_COMMON_DESCRIPTOR, *PUSB_COMMON_DESCRIPTOR; |
|
|
|
|
|
// |
|
// Standard USB HUB definitions |
|
// |
|
// See Chapter 11 USB core specification |
|
// |
|
|
|
typedef struct _USB_HUB_DESCRIPTOR { |
|
UCHAR bDescriptorLength; // Length of this descriptor |
|
UCHAR bDescriptorType; // Hub configuration type |
|
UCHAR bNumberOfPorts; // number of ports on this hub |
|
USHORT wHubCharacteristics; // Hub Charateristics |
|
UCHAR bPowerOnToPowerGood; // port power on till power good in 2ms |
|
UCHAR bHubControlCurrent; // max current in mA |
|
// |
|
// room for 255 ports power control and removable bitmask |
|
UCHAR bRemoveAndPowerMask[64]; |
|
} USB_HUB_DESCRIPTOR, *PUSB_HUB_DESCRIPTOR; |
|
|
|
|
|
// |
|
// Structures defined by various DWG feature documents |
|
// |
|
|
|
|
|
// |
|
// See DWG USB Feature Specification: Interface Power Management |
|
// |
|
|
|
#define USB_SUPPORT_D0_COMMAND 0x01 |
|
#define USB_SUPPORT_D1_COMMAND 0x02 |
|
#define USB_SUPPORT_D2_COMMAND 0x04 |
|
#define USB_SUPPORT_D3_COMMAND 0x08 |
|
|
|
#define USB_SUPPORT_D1_WAKEUP 0x10 |
|
#define USB_SUPPORT_D2_WAKEUP 0x20 |
|
|
|
|
|
typedef struct _USB_CONFIGURATION_POWER_DESCRIPTOR { |
|
UCHAR bLength; |
|
UCHAR bDescriptorType; |
|
UCHAR SelfPowerConsumedD0[3]; |
|
UCHAR bPowerSummaryId; |
|
UCHAR bBusPowerSavingD1; |
|
UCHAR bSelfPowerSavingD1; |
|
UCHAR bBusPowerSavingD2; |
|
UCHAR bSelfPowerSavingD2; |
|
UCHAR bBusPowerSavingD3; |
|
UCHAR bSelfPowerSavingD3; |
|
USHORT TransitionTimeFromD1; |
|
USHORT TransitionTimeFromD2; |
|
USHORT TransitionTimeFromD3; |
|
} USB_CONFIGURATION_POWER_DESCRIPTOR, *PUSB_CONFIGURATION_POWER_DESCRIPTOR; |
|
|
|
|
|
typedef struct _USB_INTERFACE_POWER_DESCRIPTOR { |
|
UCHAR bLength; |
|
UCHAR bDescriptorType; |
|
UCHAR bmCapabilitiesFlags; |
|
UCHAR bBusPowerSavingD1; |
|
UCHAR bSelfPowerSavingD1; |
|
UCHAR bBusPowerSavingD2; |
|
UCHAR bSelfPowerSavingD2; |
|
UCHAR bBusPowerSavingD3; |
|
UCHAR bSelfPowerSavingD3; |
|
USHORT TransitionTimeFromD1; |
|
USHORT TransitionTimeFromD2; |
|
USHORT TransitionTimeFromD3; |
|
} USB_INTERFACE_POWER_DESCRIPTOR, *PUSB_INTERFACE_POWER_DESCRIPTOR; |
|
|
|
|
|
#include <POPPACK.H> |
|
|
|
|
|
#endif /* __USB100_H__ */ |
|
|
|
|