123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353 |
- /*----------------------------------------------------------------------------
- * U S B - K e r n e l
- *----------------------------------------------------------------------------
- * Name: usb.h
- * Purpose: USB Definitions
- * Version: V1.20
- *----------------------------------------------------------------------------
- * This software is supplied "AS IS" without any warranties, express,
- * implied or statutory, including but not limited to the implied
- * warranties of fitness for purpose, satisfactory quality and
- * noninfringement. Keil extends you a royalty-free right to reproduce
- * and distribute executable files created using this software for use
- * on NXP Semiconductors LPC family microcontroller devices only. Nothing
- * else gives you the right to use this software.
- *
- * Copyright (c) 2009 Keil - An ARM Company. All rights reserved.
- *---------------------------------------------------------------------------*/
-
- #ifndef __USB_H__
- #define __USB_H__
- extern "C" {
- #include "lpc_types.h"
- }
- #if defined ( __GNUC__ )
- #define __packed __attribute__((__packed__))
- #endif
-
- #if defined ( __CC_ARM )
- typedef __packed union {
- #elif defined ( __GNUC__ )
- typedef union __packed {
- #elif defined ( __IAR_SYSTEMS_ICC__ )
- #pragma pack(1)
- typedef union {
- #endif
- uint16_t W;
- #if defined ( __CC_ARM )
- __packed struct {
- #elif defined ( __GNUC__ )
- struct __packed {
- #elif defined ( __IAR_SYSTEMS_ICC__ )
- #pragma pack(1)
- struct {
- #endif
- uint8_t L;
- uint8_t H;
- } WB;
- #ifdef __IAR_SYSTEMS_ICC__
- #pragma pack()
- #endif
- } WORD_BYTE;
- #ifdef __IAR_SYSTEMS_ICC__
- #pragma pack()
- #endif
-
-
- /* bmRequestType.Dir */
- #define REQUEST_HOST_TO_DEVICE 0
- #define REQUEST_DEVICE_TO_HOST 1
-
- /* bmRequestType.Type */
- #define REQUEST_STANDARD 0
- #define REQUEST_CLASS 1
- #define REQUEST_VENDOR 2
- #define REQUEST_RESERVED 3
-
- /* bmRequestType.Recipient */
- #define REQUEST_TO_DEVICE 0
- #define REQUEST_TO_INTERFACE 1
- #define REQUEST_TO_ENDPOINT 2
- #define REQUEST_TO_OTHER 3
-
- /* bmRequestType Definition */
- #if defined ( __CC_ARM )
- typedef __packed union _REQUEST_TYPE {
- #elif defined ( __GNUC__ )
- typedef union __packed _REQUEST_TYPE {
- #elif defined ( __IAR_SYSTEMS_ICC__ )
- #pragma pack(1)
- typedef union _REQUEST_TYPE {
- #endif
- #if defined ( __CC_ARM )
- __packed struct _BM {
- #elif defined ( __GNUC__ )
- struct __packed _BM {
- #elif defined ( __IAR_SYSTEMS_ICC__ )
- #pragma pack(1)
- struct _BM {
- #endif
- uint8_t Recipient : 5;
- uint8_t Type : 2;
- uint8_t Dir : 1;
- } BM;
- #ifdef __IAR_SYSTEMS_ICC__
- #pragma pack()
- #endif
- uint8_t B;
- } REQUEST_TYPE;
- #ifdef __IAR_SYSTEMS_ICC__
- #pragma pack()
- #endif
-
- /* USB Standard Request Codes */
- #define USB_REQUEST_GET_STATUS 0
- #define USB_REQUEST_CLEAR_FEATURE 1
- #define USB_REQUEST_SET_FEATURE 3
- #define USB_REQUEST_SET_ADDRESS 5
- #define USB_REQUEST_GET_DESCRIPTOR 6
- #define USB_REQUEST_SET_DESCRIPTOR 7
- #define USB_REQUEST_GET_CONFIGURATION 8
- #define USB_REQUEST_SET_CONFIGURATION 9
- #define USB_REQUEST_GET_INTERFACE 10
- #define USB_REQUEST_SET_INTERFACE 11
- #define USB_REQUEST_SYNC_FRAME 12
-
- /* USB GET_STATUS Bit Values */
- #define USB_GETSTATUS_SELF_POWERED 0x01
- #define USB_GETSTATUS_REMOTE_WAKEUP 0x02
- #define USB_GETSTATUS_ENDPOINT_STALL 0x01
-
- /* USB Standard Feature selectors */
- #define USB_FEATURE_ENDPOINT_STALL 0
- #define USB_FEATURE_REMOTE_WAKEUP 1
-
- /* USB Default Control Pipe Setup Packet */
- #if defined ( __CC_ARM )
- typedef __packed struct _USB_SETUP_PACKET {
- #elif defined ( __GNUC__ )
- typedef struct __packed _USB_SETUP_PACKET {
- #elif defined ( __IAR_SYSTEMS_ICC__ )
- #pragma pack(1)
- typedef struct _USB_SETUP_PACKET {
- #endif
- REQUEST_TYPE bmRequestType;
- uint8_t bRequest;
- WORD_BYTE wValue;
- WORD_BYTE wIndex;
- uint16_t wLength;
- } USB_SETUP_PACKET;
- #ifdef __IAR_SYSTEMS_ICC__
- #pragma pack()
- #endif
-
-
- /* USB Descriptor Types */
- #define USB_DEVICE_DESCRIPTOR_TYPE 1
- #define USB_CONFIGURATION_DESCRIPTOR_TYPE 2
- #define USB_STRING_DESCRIPTOR_TYPE 3
- #define USB_INTERFACE_DESCRIPTOR_TYPE 4
- #define USB_ENDPOINT_DESCRIPTOR_TYPE 5
- #define USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE 6
- #define USB_OTHER_SPEED_CONFIG_DESCRIPTOR_TYPE 7
- #define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 8
- #define USB_OTG_DESCRIPTOR_TYPE 9
- #define USB_DEBUG_DESCRIPTOR_TYPE 10
- #define USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE 11
-
- /* 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_MISCELLANEOUS 0xEF
- #define USB_DEVICE_CLASS_VENDOR_SPECIFIC 0xFF
-
- /* bmAttributes in Configuration Descriptor */
- #define USB_CONFIG_POWERED_MASK 0x40
- #define USB_CONFIG_BUS_POWERED 0x80
- #define USB_CONFIG_SELF_POWERED 0xC0
- #define USB_CONFIG_REMOTE_WAKEUP 0x20
-
- /* bMaxPower in Configuration Descriptor */
- #define USB_CONFIG_POWER_MA(mA) ((mA)/2)
-
- /* bEndpointAddress in Endpoint Descriptor */
- #define USB_ENDPOINT_DIRECTION_MASK 0x80
- #define USB_ENDPOINT_OUT(addr) ((addr) | 0x00)
- #define USB_ENDPOINT_IN(addr) ((addr) | 0x80)
-
- /* bmAttributes in 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
- #define USB_ENDPOINT_SYNC_MASK 0x0C
- #define USB_ENDPOINT_SYNC_NO_SYNCHRONIZATION 0x00
- #define USB_ENDPOINT_SYNC_ASYNCHRONOUS 0x04
- #define USB_ENDPOINT_SYNC_ADAPTIVE 0x08
- #define USB_ENDPOINT_SYNC_SYNCHRONOUS 0x0C
- #define USB_ENDPOINT_USAGE_MASK 0x30
- #define USB_ENDPOINT_USAGE_DATA 0x00
- #define USB_ENDPOINT_USAGE_FEEDBACK 0x10
- #define USB_ENDPOINT_USAGE_IMPLICIT_FEEDBACK 0x20
- #define USB_ENDPOINT_USAGE_RESERVED 0x30
-
- /* USB Standard Device Descriptor */
- #if defined ( __CC_ARM )
- typedef __packed struct _USB_DEVICE_DESCRIPTOR {
- #elif defined ( __GNUC__ )
- typedef struct __packed _USB_DEVICE_DESCRIPTOR {
- #elif defined ( __IAR_SYSTEMS_ICC__ )
- #pragma pack(1)
- typedef struct _USB_DEVICE_DESCRIPTOR {
- #endif
- uint8_t bLength;
- uint8_t bDescriptorType;
- uint16_t bcdUSB;
- uint8_t bDeviceClass;
- uint8_t bDeviceSubClass;
- uint8_t bDeviceProtocol;
- uint8_t bMaxPacketSize0;
- uint16_t idVendor;
- uint16_t idProduct;
- uint16_t bcdDevice;
- uint8_t iManufacturer;
- uint8_t iProduct;
- uint8_t iSerialNumber;
- uint8_t bNumConfigurations;
- } USB_DEVICE_DESCRIPTOR;
- #ifdef __IAR_SYSTEMS_ICC__
- #pragma pack()
- #endif
-
- /* USB 2.0 Device Qualifier Descriptor */
- #if defined ( __CC_ARM )
- typedef __packed struct _USB_DEVICE_QUALIFIER_DESCRIPTOR {
- #elif defined ( __GNUC__ )
- typedef struct __packed _USB_DEVICE_QUALIFIER_DESCRIPTOR {
- #elif defined ( __IAR_SYSTEMS_ICC__ )
- #pragma pack(1)
- typedef struct _USB_DEVICE_QUALIFIER_DESCRIPTOR {
- #endif
- uint8_t bLength;
- uint8_t bDescriptorType;
- uint16_t bcdUSB;
- uint8_t bDeviceClass;
- uint8_t bDeviceSubClass;
- uint8_t bDeviceProtocol;
- uint8_t bMaxPacketSize0;
- uint8_t bNumConfigurations;
- uint8_t bReserved;
- } USB_DEVICE_QUALIFIER_DESCRIPTOR;
- #ifdef __IAR_SYSTEMS_ICC__
- #pragma pack()
- #endif
-
- #if defined ( __CC_ARM )
- typedef __packed struct _USB_CONFIGURATION_DESCRIPTOR {
- #elif defined ( __GNUC__ )
- typedef struct __packed _USB_CONFIGURATION_DESCRIPTOR {
- #elif defined ( __IAR_SYSTEMS_ICC__ )
- #pragma pack(1)
- typedef struct _USB_CONFIGURATION_DESCRIPTOR {
- #endif
- uint8_t bLength;
- uint8_t bDescriptorType;
- uint16_t wTotalLength;
- uint8_t bNumInterfaces;
- uint8_t bConfigurationValue;
- uint8_t iConfiguration;
- uint8_t bmAttributes;
- uint8_t bMaxPower;
- } USB_CONFIGURATION_DESCRIPTOR;
- #ifdef __IAR_SYSTEMS_ICC__
- #pragma pack()
- #endif
-
- /* USB Standard Interface Descriptor */
- #if defined ( __CC_ARM )
- typedef __packed struct _USB_INTERFACE_DESCRIPTOR {
- #elif defined ( __GNUC__ )
- typedef struct __packed _USB_INTERFACE_DESCRIPTOR {
- #elif defined ( __IAR_SYSTEMS_ICC__ )
- #pragma pack(1)
- typedef struct _USB_INTERFACE_DESCRIPTOR {
- #endif
- uint8_t bLength;
- uint8_t bDescriptorType;
- uint8_t bInterfaceNumber;
- uint8_t bAlternateSetting;
- uint8_t bNumEndpoints;
- uint8_t bInterfaceClass;
- uint8_t bInterfaceSubClass;
- uint8_t bInterfaceProtocol;
- uint8_t iInterface;
- } USB_INTERFACE_DESCRIPTOR;
- #ifdef __IAR_SYSTEMS_ICC__
- #pragma pack()
- #endif
-
- /* USB Standard Endpoint Descriptor */
- #if defined ( __CC_ARM )
- typedef __packed struct _USB_ENDPOINT_DESCRIPTOR {
- #elif defined ( __GNUC__ )
- typedef struct __packed _USB_ENDPOINT_DESCRIPTOR {
- #elif defined ( __IAR_SYSTEMS_ICC__ )
- #pragma pack(1)
- typedef struct _USB_ENDPOINT_DESCRIPTOR {
- #endif
- uint8_t bLength;
- uint8_t bDescriptorType;
- uint8_t bEndpointAddress;
- uint8_t bmAttributes;
- uint16_t wMaxPacketSize;
- uint8_t bInterval;
- } USB_ENDPOINT_DESCRIPTOR;
- #ifdef __IAR_SYSTEMS_ICC__
- #pragma pack()
- #endif
-
- /* USB String Descriptor */
- #if defined ( __CC_ARM )
- typedef __packed struct _USB_STRING_DESCRIPTOR {
- #elif defined ( __GNUC__ )
- typedef struct __packed _USB_STRING_DESCRIPTOR {
- #elif defined ( __IAR_SYSTEMS_ICC__ )
- #pragma pack(1)
- typedef struct _USB_STRING_DESCRIPTOR {
- #endif
- uint8_t bLength;
- uint8_t bDescriptorType;
- uint16_t bString/*[]*/;
- } USB_STRING_DESCRIPTOR;
- #ifdef __IAR_SYSTEMS_ICC__
- #pragma pack()
- #endif
-
- /* USB Common Descriptor */
- #if defined ( __CC_ARM )
- typedef __packed struct _USB_COMMON_DESCRIPTOR {
- #elif defined ( __GNUC__ )
- typedef struct __packed _USB_COMMON_DESCRIPTOR {
- #elif defined ( __IAR_SYSTEMS_ICC__ )
- #pragma pack(1)
- typedef struct _USB_COMMON_DESCRIPTOR {
- #endif
- uint8_t bLength;
- uint8_t bDescriptorType;
- } USB_COMMON_DESCRIPTOR;
- #ifdef __IAR_SYSTEMS_ICC__
- #pragma pack()
- #endif
-
-
-
- #endif /* __USB_H__ */
|