📄 usb.h
字号:
/*
USB.H : USB defined data structures and constants
(C) Copyright TransDimension, Inc. All rights reserved.
Modification history
====================
20Aug1999 Original Release
*/
#ifndef USB_H
#define USB_H
/* PID bit patterns (Ch 8.3.1) */
#define PID_DATA0 0xc3 /* DATA0 pid */
#define PID_DATA1 0x4b /* DATA1 pid */
#define PID_SETUP 0x2d /* SETUP pid */
#define PID_SOF 0xa5 /* SOF pid */
#define PID_IN 0x69 /* IN pid */
#define PID_OUT 0xe1 /* OUT pid */
#define PID_ACK 0xd2 /* ACK pid */
#define PID_NAK 0x5a /* NAK pid */
#define PID_STALL 0x1e /* STALL pid */
#define PID_PRE 0x3c /* PRE pid for low spd xfers */
/* setup packet data field offsets (Ch 9.3) */
#define SP_SIZE 8 /* size of setup packet in bytes */
#define SP_bmRequestType 0 /* request type */
#define SP_bRequest 1 /* request */
#define SP_wValueLSB 2 /* value lsb */
#define SP_wValueMSB 3 /* value msb */
#define SP_wIndexLSB 4 /* index lsb */
#define SP_wIndexMSB 5 /* index msb */
#define SP_wLengthLSB 6 /* data length lsb */
#define SP_wLengthMSB 7 /* data length msb */
/* bit masks and defs for bmRequestType (Ch 9.3.1) */
#define RT_XFER_DIR 0x80 /* data phase dir bit mask */
#define RT_XFER_IN 0x80 /* data phase dir - to host */
#define RT_XFER_OUT 0x00 /* data phase dir - to dev */
#define RT_TYPE_MSK 0x60 /* request type bit mask */
#define RT_TYPE_STD 0x00 /* request type: standard */
#define RT_TYPE_CLS 0x20 /* request type: class */
#define RT_TYPE_VDR 0x40 /* request type: vendor */
#define RT_RECP_MSK 0x1f /* recipient bit mask */
#define RT_RECP_DEV 0x00 /* recipient: device */
#define RT_RECP_ITF 0x01 /* recipient: interface */
#define RT_RECP_EPT 0x02 /* recipient: end point */
#define RT_RECP_OTR 0x03 /* recopient: others */
/* standard/hub request codes (Ch 9.4, Ch 11.16.2) */
#define GET_STATUS 0x00 /* request: get_status */
#define CLEAR_FEATURE 0x01 /* request: clear_feature */
#define GET_STATE 0x02 /* request: get_state */
#define SET_FEATURE 0x03 /* request: set_feature */
#define SET_ADDRESS 0x05 /* request: set_address */
#define GET_DESCRIPTOR 0x06 /* request: get_descriptor */
#define SET_DESCRIPTOR 0x07 /* request: set_descriptor */
#define GET_CONFIGURATION 0x08 /* request: get_configuration */
#define SET_CONFIGURATION 0x09 /* request: set_configuration */
#define GET_INTERFACE 0x0a /* request: get_interface */
#define SET_INTERFACE 0x0b /* request: set_interface */
#define SYNCH_FRAME 0x0c /* request: synch_frame */
/* feature selector (Ch 9.4) used as wValue for some reqs */
#define DEVICE_REMOTE_WAKEUP 1
#define ENDPOINT_STALL 0
/* descriptor type and length */
#define D_bDescriptorType 1
#define D_bLength 0
/* device descriptor data field offsets (Ch 9.6.1) */
#define DD_SIZE 18 /* size of dev descriptor in bytes */
#define DD_bLength 0 /* size of this descriptor in bytes */
#define DD_bDescriptorType 1 /* dev descriptor type */
#define DD_bcdUSBLSB 2 /* USB spec ver num in bcd - lsb */
#define DD_bcdUSBMSB 3 /* USB spec ver num in bcd - msb */
#define DD_bDeviceClass 4 /* class code - assigned by usb */
#define DD_bDeviceSubClass 5 /* sub class code - assigned by usb */
#define DD_bDeviceProtocol 6 /* protol code - assigned by usb */
#define DD_bMaxPacketSize0 7 /* max packet size for ep 0 */
#define DD_idVendorLSB 8 /* vendor id - assigned by usb - lsb */
#define DD_idVendorMSB 9 /* vendor id - assigned by usb - msb */
#define DD_idProductLSB 10 /* prod id - assigned by vendor - lsb */
#define DD_idProductMSB 11 /* prod id - assigned by vendor - msb */
#define DD_bcdDeviceLSB 12 /* device release num in bcd - lsb */
#define DD_bcdDeviceMSB 13 /* device release num in bcd - msb */
#define DD_iManufacturer 14 /* index of str desc for vendor */
#define DD_iProduct 15 /* index of str desc for prod */
#define DD_iSerialNumber 16 /* index of str desc for serial num */
#define DD_bNumConfigurations 17 /* num of possible confs */
/* classification */
#define INTF_CLASS 0 /* interface specifies class */
#define HID_CLASS 3 /* human interface class */
#define HUB_CLASS 9 /* hub class */
#define VEND_CLASS 255 /* vendor specific class */
/* configuration descriptor data field offsets (Ch 9.6,2) */
#define CD_SIZE 9 /* size of conf desc in bytes */
#define CD_bLength 0 /* size of this descriptor in bytes */
#define CD_bDescriptorType 1 /* CONFIGURATION descriptor type */
#define CD_wTotalLengthLSB 2 /* total len of data returned - lsb */
#define CD_wTotalLengthMSB 3 /* total len of data returned - msb */
#define CD_bNumInterfaces 4 /* num of interfaces under this conf */
#define CD_bConfigurationValue 5 /* val to sel this conf */
#define CD_iConfiguration 6 /* index of str desc for this config */
#define CD_bmAttributes 7 /* configuration charateristics */
#define CD_bMaxPower 8 /* max pwr under conf - in 2ma */
/* bit masks and defs for bmAttributes */
#define CC_SLF_PWR 0x40 /* self powered */
#define CC_REM_WAK 0x20 /* remote wakeup */
/* interface descriptor data field offsets (Ch 9.6.3) */
#define ID_SIZE 9 /* size of intf desc in bytes */
#define ID_bLength 0 /* size of this descriptor */
#define ID_bDescriptorType 1 /* INTERFACE descriptor type */
#define ID_bInterfaceNumber 2 /* interface num */
#define ID_bAlternateSetting 3 /* alternate setting for this intf */
#define ID_bNumEndpoints 4 /* num of eps used by this intf */
#define ID_bInterfaceClass 5 /* class code - assigned by usb */
#define ID_bInterfaceSubClass 6 /* sub-class code - assigned by usb */
#define ID_bInterfaceProtocol 7 /* protocol code - assigned by usb */
#define ID_iInterface 8 /* index of str desc for this intf */
/* endpoint descriptor data field offsets (Ch 9.6.4) */
#define ED_SIZE 7 /* size of ep desc in bytes */
#define ED_bLength 0 /* size of this descriptor */
#define ED_bDescriptorType 1 /* ENDPOINT descriptor type */
#define ED_bEndpointAddress 2 /* addr of ep on dev */
#define ED_bmAttributes 3 /* ep attributes */
#define ED_wMaxPacketSizeLSB 4 /* max packet size for this ep - lsb */
#define ED_wMaxPacketSizeMSB 5 /* max packet size for this ep - msb */
#define ED_bInterval 6 /* interval for polling ep for xfer */
/* bit masks and defs for bEndpointAddress for an ep desc */
#define EP_NUM 0xf /* end point num */
#define EP_DIR 0x80 /* ep xfer dir - bit mask */
#define EP_IN 0x80 /* ep xfer dir - in */
#define EP_OUT 0x0 /* ep xfer dir - out */
/* bit masks and defs for bmAttributes for an ep desc */
#define EP_XFER 0x3 /* xfer type mask */
#define EP_CTL 0x0 /* control xfer type */
#define EP_ISO 0x1 /* isochronous xfer type */
#define EP_BUL 0x2 /* bulk xfer type */
#define EP_INT 0x3 /* interrupt transfer type */
/* descriptor types (Ch 9.4) */
#define DEVICE 0x1
#define CONFIGURATION 0x2
#define STRING 0x3
#define INTERFACE 0x4
#define ENDPOINT 0x5
#define HUB 0x29
#define HID 0x21
#define REPORT 0x22
#define PHYSICAL 0x23
/* hub descriptor data field offsets (Ch. 11.15.2.1) */
#define HD_SIZE 7 /* size of hub desc in bytes */
#define HD_bDescLength 0 /* size of this descriptor */
#define HD_bDescriptorType 1 /* 29H for hub descriptor */
#define HD_bNbrPorts 2 /* num of ports */
#define HD_wHubCharacteristicsLSB 3 /* hub charateristics - lsb */
#define HD_wHubCharacteristicsMSB 4 /* hub charateristics - msb */
#define HD_bPwrOn2PwrGood 5 /* time in 2 ms from pwr-on to good */
#define HD_bHubContrCurrent 6 /* max current requirement in mA */
#define HD_DeviceRemovable 7 /* indicates a port is removable */
/* hub charateristics definitions (Ch. 11.16.2) */
#define HUB_PSM_MSK 0x3 /* hub pwr switching mode mask */
#define HUB_PSM_GANG 0x0 /* hub pwr switching gang mode */
#define HUB_PSM_INDV 0x1 /* hub pwr switching individual mode */
#define HUB_CPD_DEV 0x4 /* hub in compound device */
#define HUB_OCP_MSK 0x18 /* hub overload protect mode mask */
#define HUB_OCP_GLOB 0x0 /* hub overload protect global */
#define HUB_OCP_INDV 0x8 /* hub overload protect individual */
#define HUB_OCP_NONE 0x10 /* hub overload protect none */
/* hub status byte order (Ch. 11.16.2.5) */
#define HS_wHubStatusLSB 0 /* hub status LSB */
#define HS_wHubStatusMSB 1 /* hub status MSB */
#define HS_wHubChangeLSB 2 /* hub change LSB */
#define HS_wHubChangeMSB 3 /* hub change MSB */
/* port status byte order (Ch. 11.16.2.5) */
#define PS_wPortStatusLSB 0 /* Port status LSB */
#define PS_wPortStatusMSB 1 /* Port status MSB */
#define PS_wPortChangeLSB 2 /* Port change LSB */
#define PS_wPortChangeMSB 3 /* Port change MSB */
/* hub class feature select (Ch. 11.16.2) */
#define C_HUB_LOCAL_POWER 0 /* hub uses its own pwr */
#define C_HUB_OVER_CURRENT 1 /* hub over current */
#define PORT_CONNECTION 0 /* a dev attached to port */
#define PORT_ENABLE 1 /* port enabled */
#define PORT_SUSPEND 2 /* port suspend */
#define PORT_OVER_CURRENT 3 /* port over current */
#define PORT_RESET 4 /* port reset */
#define PORT_POWER 8 /* port pwr turned on/off */
#define PORT_LOW_SPEED 9 /* low speed dev attached to port */
#define C_PORT_CONNECTION 16 /* port connectivity change */
#define C_PORT_ENABLE 17 /* change on enable */
#define C_PORT_SUSPEND 18 /* change on suspend */
#define C_PORT_OVER_CURRENT 19 /* change on over current cond */
#define C_PORT_RESET 20 /* port reset status change */
/* hub status/change words (Ch 11.16.2.5) */
#define HS_LCP 0x1 /* local power source */
#define HS_OVC 0x2 /* over current indicator */
/* port status/change word (Ch 11.16.2.6) */
#define PS_CONN 0x1 /* current connection */
#define PS_ENA 0x2 /* port enable */
#define PS_SSPD 0x4 /* port suspend */
#define PS_OVC 0x8 /* port over current */
#define PS_RST 0x10 /* port reset */
#define PS_PWRON 0x100 /* port power */
#define PS_LSPD 0x200 /* port low speed device attached */
/* device status defintions (Ch. 9.4.5) */
#define DS_SELF_PWR 0x1 /* device is being self-powered */
#define DS_RMT_WAKEUP 0x2 /* remote wakeup enabled */
/* endpoint status definition (Ch. 9.4.5)*/
#define ES_HALT 0x1 /* endpoint halt bit mask */
/* data size of status and configuration (Ch 9.4, Ch. 11.16.2.4-5) */
#define ST_SIZE 2 /* data size for get_status */
#define CF_SIZE 1 /* data size for get_conf */
#define IF_SIZE 1 /* data size for get_intf */
#define FR_SIZE 2 /* data size for sync_frame */
#define BS_SIZE 1 /* data size for bus_state */
#define HS_SIZE 4 /* data size for hub_status */
#define PS_SIZE 4 /* data size for port_status */
/* HID descriptor, See HID class definition (Ch. 6.2.1) */
#define HID_SIZE 6 /* not including variable part */
#define HID_bLength 0 /* size of this descriptor */
#define HID_bDescriptorType 1 /* HID descriptor type: 21H */
#define HID_bcdHIDLSB 2 /* HID class specification LSB */
#define HID_bcdHIDMSB 3 /* HID class specification MSB */
#define HID_bCountryCode 4 /* hardware target country */
#define HID_bNumDescriptors 5 /* num of HID class descriptors */
#define HID_bReportDescrType 6 /* report descriptor type */
#define HID_wDescriptorLengthLSB 7 /* len of report descriptor LSB */
#define HID_wDescriptorLengthMSB 8 /* len of report descriptor MSB */
/* USB device and endpoint constants */
#define EP0 0 /* endpoint 0 */
#define EP1 1 /* endpoint 1 */
#define ROOTHUB 1 /* root hub */
#define DEV0 0 /* default device */
/* configuration descriptor size */
#define MAX_CD_SIZE 1024
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -