123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- #ifndef __USB_H__
- #define __USB_H__
- #define USB_DIR_OUT 0x00
- #define USB_DIR_IN 0x80
- #define USB_TYPE_MASK (0x03 << 5)
- #define USB_TYPE_STANDARD (0x00 << 5)
- #define USB_TYPE_CLASS (0x01 << 5)
- #define USB_TYPE_VENDOR (0x02 << 5)
- #define USB_TYPE_RESERVED (0x03 << 5)
- #define USB_RECIP_MASK 0x1f
- #define USB_RECIP_DEVICE 0x00
- #define USB_RECIP_INTERFACE 0x01
- #define USB_RECIP_ENDPOINT 0x02
- #define USB_RECIP_OTHER 0x03
- #define USB_RECIP_PORT 0x04
- #define USB_RECIP_RPIPE 0x05
- #define USB_REQ_GET_STATUS 0x00
- #define USB_REQ_CLEAR_FEATURE 0x01
- #define USB_REQ_SET_FEATURE 0x03
- #define USB_REQ_SET_ADDRESS 0x05
- #define USB_REQ_GET_DESCRIPTOR 0x06
- #define USB_REQ_SET_DESCRIPTOR 0x07
- #define USB_REQ_GET_CONFIGURATION 0x08
- #define USB_REQ_SET_CONFIGURATION 0x09
- #define USB_REQ_GET_INTERFACE 0x0A
- #define USB_REQ_SET_INTERFACE 0x0B
- #define USB_REQ_SYNCH_FRAME 0x0C
- #define USB_REQ_SET_SEL 0x30
- #define USB_REQ_SET_ISOCH_DELAY 0x31
- #define USB_REQ_SET_ENCRYPTION 0x0D
- #define USB_REQ_GET_ENCRYPTION 0x0E
- #define USB_REQ_RPIPE_ABORT 0x0E
- #define USB_REQ_SET_HANDSHAKE 0x0F
- #define USB_REQ_RPIPE_RESET 0x0F
- #define USB_REQ_GET_HANDSHAKE 0x10
- #define USB_REQ_SET_CONNECTION 0x11
- #define USB_REQ_SET_SECURITY_DATA 0x12
- #define USB_REQ_GET_SECURITY_DATA 0x13
- #define USB_REQ_SET_WUSB_DATA 0x14
- #define USB_REQ_LOOPBACK_DATA_WRITE 0x15
- #define USB_REQ_LOOPBACK_DATA_READ 0x16
- #define USB_REQ_SET_INTERFACE_DS 0x17
- #define USB_DEVICE_SELF_POWERED 0
- #define USB_DEVICE_REMOTE_WAKEUP 1
- #define USB_DEVICE_TEST_MODE 2
- #define USB_DEVICE_BATTERY 2
- #define USB_DEVICE_B_HNP_ENABLE 3
- #define USB_DEVICE_WUSB_DEVICE 3
- #define USB_DEVICE_A_HNP_SUPPORT 4
- #define USB_DEVICE_A_ALT_HNP_SUPPORT 5
- #define USB_DEVICE_DEBUG_MODE 6
- #define USB_ENDPOINT_HALT 0
- #define TEST_J 1
- #define TEST_K 2
- #define TEST_SE0_NAK 3
- #define TEST_PACKET 4
- #define TEST_FORCE_EN 5
- struct usb_setup_packet {
- uint8_t bmRequestType;
- uint8_t bRequest;
- uint16_t wValue;
- uint16_t wIndex;
- uint16_t wLength;
- } __packed;
- #define USB_REQ_DIR_IN(bmRequestType) (bmRequestType & USB_DIR_IN)
- #define USB_EP_NUM_MASK 0x07
- #define USB_EP_DIR_MASK 0x80
- #define USB_CONTROL_OUT_EP0 0
- #define USB_CONTROL_IN_EP0 0x80
- #define USB_EP_DIR_IN USB_DIR_IN
- #define USB_EP_DIR_OUT USB_DIR_OUT
- #define USB_EP_ADDR2IDX(ep) ((ep) & USB_EP_NUM_MASK)
- #define USB_EP_ADDR2DIR(ep) ((ep) & USB_EP_DIR_MASK)
- #define USB_EP_IDX2ADDR(idx, dir) ((idx) | ((dir) & USB_EP_DIR_MASK))
- #define USB_EP_DIR_IS_OUT(ep) (USB_EP_ADDR2DIR(ep) == USB_EP_DIR_OUT)
- #define USB_EP_DIR_IS_IN(ep) (USB_EP_ADDR2DIR(ep) == USB_EP_DIR_IN)
- static inline uint8_t usb_endpoint_num(const uint8_t ep)
- {
- return ep & USB_EP_NUM_MASK;
- }
- static inline bool usb_ep_dir_in(const uint8_t ep)
- {
- return ((ep & USB_EP_DIR_MASK) == USB_EP_DIR_IN);
- }
- static inline bool usb_ep_dir_out(const uint8_t ep)
- {
- return ((ep & USB_EP_DIR_MASK) == USB_EP_DIR_OUT);
- }
- #define USB_EP_TYPE_MASK 0x03
- enum usb_ep_type {
- USB_EP_CONTROL = 0,
- USB_EP_ISOCHRONOUS,
- USB_EP_BULK,
- USB_EP_INTERRUPT
- };
- #define USB_EP_INTRTYPE 0x30
- #define USB_EP_INTR_PERIODIC (0 << 4)
- #define USB_EP_INTR_NOTIFICATION (1 << 4)
- #define USB_EP_SYNCTYPE 0x0c
- #define USB_EP_SYNC_NONE (0 << 2)
- #define USB_EP_SYNC_ASYNC (1 << 2)
- #define USB_EP_SYNC_ADAPTIVE (2 << 2)
- #define USB_EP_SYNC_SYNC (3 << 2)
- #define USB_EP_USAGE_MASK 0x30
- #define USB_EP_USAGE_DATA 0x00
- #define USB_EP_USAGE_FEEDBACK 0x10
- #define USB_EP_USAGE_IMPLICIT_FB 0x20
- static inline enum usb_ep_type usb_endpoint_type(uint8_t bmAttributes)
- {
- return bmAttributes & USB_EP_TYPE_MASK;
- }
- static inline int usb_endpoint_xfer_bulk(uint8_t bmAttributes)
- {
- return ((bmAttributes & USB_EP_TYPE_MASK) == USB_EP_BULK);
- }
- static inline int usb_endpoint_xfer_control(uint8_t bmAttributes)
- {
- return ((bmAttributes & USB_EP_TYPE_MASK) == USB_EP_CONTROL);
- }
- static inline int usb_endpoint_xfer_int(uint8_t bmAttributes)
- {
- return ((bmAttributes & USB_EP_TYPE_MASK) == USB_EP_INTERRUPT);
- }
- static inline int usb_endpoint_xfer_isoc(uint8_t bmAttributes)
- {
- return ((bmAttributes & USB_EP_TYPE_MASK) == USB_EP_ISOCHRONOUS);
- }
- #define USB_MAX_FS_BULK_MPS 64
- #define USB_MAX_FS_INTR_MPS 64
- #define USB_MAX_FS_ISOC_MPS 1023
- #define USB_MAX_HS_BULK_MPS 512
- #define USB_MAX_HS_INTR_MPS 1024
- #define USB_MAX_HS_ISOC_MPS 1024
- #define MAX_PACKET_SIZE0 64
- #define USB_MAX_CTRL_MPS MAX_PACKET_SIZE0
- enum usb_device_state {
-
- USB_STATE_NOTATTACHED = 0,
-
- USB_STATE_ATTACHED,
- USB_STATE_POWERED,
- USB_STATE_RECONNECTING,
- USB_STATE_UNAUTHENTICATED,
- USB_STATE_DEFAULT,
- USB_STATE_ADDRESS,
- USB_STATE_CONFIGURED,
- USB_STATE_SUSPENDED
-
- };
- enum usb_device_speed {
- USB_SPEED_UNKNOWN = 0,
- USB_SPEED_LOW, USB_SPEED_FULL,
- USB_SPEED_HIGH,
- USB_SPEED_WIRELESS,
- USB_SPEED_SUPER,
- };
- #endif
|