mirror of
https://github.com/arduino/Arduino.git
synced 2024-11-30 11:24:12 +01:00
169 lines
9.3 KiB
C
169 lines
9.3 KiB
C
/* Copyright 2009-2011 Oleg Mazurov, Circuits At Home, http://www.circuitsathome.com */
|
|
/* USB chapter 9 structures */
|
|
#ifndef _ch9_h_
|
|
#define _ch9_h_
|
|
|
|
/* Misc.USB constants */
|
|
#define DEV_DESCR_LEN 18 //device descriptor length
|
|
#define CONF_DESCR_LEN 9 //configuration descriptor length
|
|
#define INTR_DESCR_LEN 9 //interface descriptor length
|
|
#define EP_DESCR_LEN 7 //endpoint descriptor length
|
|
|
|
/* Standard Device Requests */
|
|
|
|
#define USB_REQUEST_GET_STATUS 0 // Standard Device Request - GET STATUS
|
|
#define USB_REQUEST_CLEAR_FEATURE 1 // Standard Device Request - CLEAR FEATURE
|
|
#define USB_REQUEST_SET_FEATURE 3 // Standard Device Request - SET FEATURE
|
|
#define USB_REQUEST_SET_ADDRESS 5 // Standard Device Request - SET ADDRESS
|
|
#define USB_REQUEST_GET_DESCRIPTOR 6 // Standard Device Request - GET DESCRIPTOR
|
|
#define USB_REQUEST_SET_DESCRIPTOR 7 // Standard Device Request - SET DESCRIPTOR
|
|
#define USB_REQUEST_GET_CONFIGURATION 8 // Standard Device Request - GET CONFIGURATION
|
|
#define USB_REQUEST_SET_CONFIGURATION 9 // Standard Device Request - SET CONFIGURATION
|
|
#define USB_REQUEST_GET_INTERFACE 10 // Standard Device Request - GET INTERFACE
|
|
#define USB_REQUEST_SET_INTERFACE 11 // Standard Device Request - SET INTERFACE
|
|
#define USB_REQUEST_SYNCH_FRAME 12 // Standard Device Request - SYNCH FRAME
|
|
|
|
#define USB_FEATURE_ENDPOINT_HALT 0 // CLEAR/SET FEATURE - Endpoint Halt
|
|
#define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // CLEAR/SET FEATURE - Device remote wake-up
|
|
#define USB_FEATURE_TEST_MODE 2 // CLEAR/SET FEATURE - Test mode
|
|
|
|
/* Setup Data Constants */
|
|
|
|
#define USB_SETUP_HOST_TO_DEVICE 0x00 // Device Request bmRequestType transfer direction - host to device transfer
|
|
#define USB_SETUP_DEVICE_TO_HOST 0x80 // Device Request bmRequestType transfer direction - device to host transfer
|
|
#define USB_SETUP_TYPE_STANDARD 0x00 // Device Request bmRequestType type - standard
|
|
#define USB_SETUP_TYPE_CLASS 0x20 // Device Request bmRequestType type - class
|
|
#define USB_SETUP_TYPE_VENDOR 0x40 // Device Request bmRequestType type - vendor
|
|
#define USB_SETUP_RECIPIENT_DEVICE 0x00 // Device Request bmRequestType recipient - device
|
|
#define USB_SETUP_RECIPIENT_INTERFACE 0x01 // Device Request bmRequestType recipient - interface
|
|
#define USB_SETUP_RECIPIENT_ENDPOINT 0x02 // Device Request bmRequestType recipient - endpoint
|
|
#define USB_SETUP_RECIPIENT_OTHER 0x03 // Device Request bmRequestType recipient - other
|
|
|
|
/* USB descriptors */
|
|
|
|
#define USB_DESCRIPTOR_DEVICE 0x01 // bDescriptorType for a Device Descriptor.
|
|
#define USB_DESCRIPTOR_CONFIGURATION 0x02 // bDescriptorType for a Configuration Descriptor.
|
|
#define USB_DESCRIPTOR_STRING 0x03 // bDescriptorType for a String Descriptor.
|
|
#define USB_DESCRIPTOR_INTERFACE 0x04 // bDescriptorType for an Interface Descriptor.
|
|
#define USB_DESCRIPTOR_ENDPOINT 0x05 // bDescriptorType for an Endpoint Descriptor.
|
|
#define USB_DESCRIPTOR_DEVICE_QUALIFIER 0x06 // bDescriptorType for a Device Qualifier.
|
|
#define USB_DESCRIPTOR_OTHER_SPEED 0x07 // bDescriptorType for a Other Speed Configuration.
|
|
#define USB_DESCRIPTOR_INTERFACE_POWER 0x08 // bDescriptorType for Interface Power.
|
|
#define USB_DESCRIPTOR_OTG 0x09 // bDescriptorType for an OTG Descriptor.
|
|
|
|
/* OTG SET FEATURE Constants */
|
|
#define OTG_FEATURE_B_HNP_ENABLE 3 // SET FEATURE OTG - Enable B device to perform HNP
|
|
#define OTG_FEATURE_A_HNP_SUPPORT 4 // SET FEATURE OTG - A device supports HNP
|
|
#define OTG_FEATURE_A_ALT_HNP_SUPPORT 5 // SET FEATURE OTG - Another port on the A device supports HNP
|
|
|
|
/* USB Endpoint Transfer Types */
|
|
#define USB_TRANSFER_TYPE_CONTROL 0x00 // Endpoint is a control endpoint.
|
|
#define USB_TRANSFER_TYPE_ISOCHRONOUS 0x01 // Endpoint is an isochronous endpoint.
|
|
#define USB_TRANSFER_TYPE_BULK 0x02 // Endpoint is a bulk endpoint.
|
|
#define USB_TRANSFER_TYPE_INTERRUPT 0x03 // Endpoint is an interrupt endpoint.
|
|
#define bmUSB_TRANSFER_TYPE 0x03 // bit mask to separate transfer type from ISO attributes
|
|
|
|
|
|
/* Standard Feature Selectors for CLEAR_FEATURE Requests */
|
|
#define USB_FEATURE_ENDPOINT_STALL 0 // Endpoint recipient
|
|
#define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // Device recipient
|
|
#define USB_FEATURE_TEST_MODE 2 // Device recipient
|
|
|
|
/* HID constants. Not part of chapter 9 */
|
|
/* Class-Specific Requests */
|
|
#define HID_REQUEST_GET_REPORT 0x01
|
|
#define HID_REQUEST_GET_IDLE 0x02
|
|
#define HID_REQUEST_GET_PROTOCOL 0x03
|
|
#define HID_REQUEST_SET_REPORT 0x09
|
|
#define HID_REQUEST_SET_IDLE 0x0A
|
|
#define HID_REQUEST_SET_PROTOCOL 0x0B
|
|
|
|
/* Class Descriptor Types */
|
|
#define HID_DESCRIPTOR_HID 0x21
|
|
#define HID_DESCRIPTOR_REPORT 0x22
|
|
#define HID_DESRIPTOR_PHY 0x23
|
|
|
|
/* Protocol Selection */
|
|
#define BOOT_PROTOCOL 0x00
|
|
#define RPT_PROTOCOL 0x01
|
|
/* HID Interface Class Code */
|
|
#define HID_INTF 0x03
|
|
/* HID Interface Class SubClass Codes */
|
|
#define BOOT_INTF_SUBCLASS 0x01
|
|
/* HID Interface Class Protocol Codes */
|
|
#define HID_PROTOCOL_NONE 0x00
|
|
#define HID_PROTOCOL_KEYBOARD 0x01
|
|
#define HID_PROTOCOL_MOUSE 0x02
|
|
|
|
|
|
/* descriptor data structures */
|
|
|
|
/* Device descriptor structure */
|
|
typedef struct {
|
|
byte bLength; // Length of this descriptor.
|
|
byte bDescriptorType; // DEVICE descriptor type (USB_DESCRIPTOR_DEVICE).
|
|
unsigned int bcdUSB; // USB Spec Release Number (BCD).
|
|
byte bDeviceClass; // Class code (assigned by the USB-IF). 0xFF-Vendor specific.
|
|
byte bDeviceSubClass; // Subclass code (assigned by the USB-IF).
|
|
byte bDeviceProtocol; // Protocol code (assigned by the USB-IF). 0xFF-Vendor specific.
|
|
byte bMaxPacketSize0; // Maximum packet size for endpoint 0.
|
|
unsigned int idVendor; // Vendor ID (assigned by the USB-IF).
|
|
unsigned int idProduct; // Product ID (assigned by the manufacturer).
|
|
unsigned int bcdDevice; // Device release number (BCD).
|
|
byte iManufacturer; // Index of String Descriptor describing the manufacturer.
|
|
byte iProduct; // Index of String Descriptor describing the product.
|
|
byte iSerialNumber; // Index of String Descriptor with the device's serial number.
|
|
byte bNumConfigurations; // Number of possible configurations.
|
|
} USB_DEVICE_DESCRIPTOR;
|
|
|
|
/* Configuration descriptor structure */
|
|
typedef struct
|
|
{
|
|
byte bLength; // Length of this descriptor.
|
|
byte bDescriptorType; // CONFIGURATION descriptor type (USB_DESCRIPTOR_CONFIGURATION).
|
|
unsigned int wTotalLength; // Total length of all descriptors for this configuration.
|
|
byte bNumInterfaces; // Number of interfaces in this configuration.
|
|
byte bConfigurationValue; // Value of this configuration (1 based).
|
|
byte iConfiguration; // Index of String Descriptor describing the configuration.
|
|
byte bmAttributes; // Configuration characteristics.
|
|
byte bMaxPower; // Maximum power consumed by this configuration.
|
|
} USB_CONFIGURATION_DESCRIPTOR;
|
|
|
|
/* Interface descriptor structure */
|
|
typedef struct
|
|
{
|
|
byte bLength; // Length of this descriptor.
|
|
byte bDescriptorType; // INTERFACE descriptor type (USB_DESCRIPTOR_INTERFACE).
|
|
byte bInterfaceNumber; // Number of this interface (0 based).
|
|
byte bAlternateSetting; // Value of this alternate interface setting.
|
|
byte bNumEndpoints; // Number of endpoints in this interface.
|
|
byte bInterfaceClass; // Class code (assigned by the USB-IF). 0xFF-Vendor specific.
|
|
byte bInterfaceSubClass; // Subclass code (assigned by the USB-IF).
|
|
byte bInterfaceProtocol; // Protocol code (assigned by the USB-IF). 0xFF-Vendor specific.
|
|
byte iInterface; // Index of String Descriptor describing the interface.
|
|
} USB_INTERFACE_DESCRIPTOR;
|
|
|
|
/* Endpoint descriptor structure */
|
|
typedef struct
|
|
{
|
|
byte bLength; // Length of this descriptor.
|
|
byte bDescriptorType; // ENDPOINT descriptor type (USB_DESCRIPTOR_ENDPOINT).
|
|
byte bEndpointAddress; // Endpoint address. Bit 7 indicates direction (0=OUT, 1=IN).
|
|
byte bmAttributes; // Endpoint transfer type.
|
|
unsigned int wMaxPacketSize; // Maximum packet size.
|
|
byte bInterval; // Polling interval in frames.
|
|
} USB_ENDPOINT_DESCRIPTOR;
|
|
|
|
/* HID descriptor */
|
|
typedef struct {
|
|
byte bLength;
|
|
byte bDescriptorType;
|
|
unsigned int bcdHID;
|
|
byte bCountryCode;
|
|
byte bNumDescriptors;
|
|
byte bDescrType;
|
|
unsigned int wDescriptorLength;
|
|
} USB_HID_DESCRIPTOR;
|
|
|
|
#endif // _ch9_h_
|