270 lines
7.6 KiB
C
270 lines
7.6 KiB
C
#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__ */
|