+/*----------------------------------------------------------------------------\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