1
0
mirror of https://github.com/MarlinFirmware/Marlin.git synced 2024-12-04 09:42:41 +00:00
MarlinFirmware/Marlin/frameworks/CMSIS/LPC1768/lib/usb/usb.h
Chris Pepper a5cf3a190c bugfix-2.0.x critical fix (#7401)
* Fix mistake in gitignore file and add in missing core files.

The missing leading slash on "lib" meant all folders names lib in the directory tree are ignored, rather than just the top level PlatformIO lib folder

* Add LiquidCrystal Library and associated headers modified to compile.
2017-08-31 18:23:44 -05:00

354 lines
11 KiB
C

/*----------------------------------------------------------------------------
* 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__ */