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