| Line No. | Rev | Author | Line |
|---|---|---|---|
| 1 | 32 | kaklik | /******************************************************************************* |
| 2 | |||
| 3 | USB Chapter 9 Protocol (Header File) |
||
| 4 | |||
| 5 | Summary: |
||
| 6 | This file defines data structures, constants, and macros that are used to |
||
| 7 | to support the USB Device Framework protocol described in Chapter 9 of the |
||
| 8 | USB 2.0 specification. |
||
| 9 | |||
| 10 | Description: |
||
| 11 | This file defines data structures, constants, and macros that are used to |
||
| 12 | to support the USB Device Framework protocol described in Chapter 9 of the |
||
| 13 | USB 2.0 specification. |
||
| 14 | |||
| 15 | This file is located in the "\<Install Directory\>\\Microchip\\Include\\USB" |
||
| 16 | directory. |
||
| 17 | |||
| 18 | When including this file in a new project, this file can either be |
||
| 19 | referenced from the directory in which it was installed or copied |
||
| 20 | directly into the user application folder. If the first method is |
||
| 21 | chosen to keep the file located in the folder in which it is installed |
||
| 22 | then include paths need to be added so that the library and the |
||
| 23 | application both know where to reference each others files. If the |
||
| 24 | application folder is located in the same folder as the Microchip |
||
| 25 | folder (like the current demo folders), then the following include |
||
| 26 | paths need to be added to the application's project: |
||
| 27 | |||
| 28 | . |
||
| 29 | |||
| 30 | ..\\..\\Microchip\\Include |
||
| 31 | |||
| 32 | If a different directory structure is used, modify the paths as |
||
| 33 | required. An example using absolute paths instead of relative paths |
||
| 34 | would be the following: |
||
| 35 | |||
| 36 | C:\\Microchip Solutions\\Microchip\\Include |
||
| 37 | |||
| 38 | C:\\Microchip Solutions\\My Demo Application |
||
| 39 | *******************************************************************************/ |
||
| 40 | //DOM-IGNORE-BEGIN |
||
| 41 | /******************************************************************************* |
||
| 42 | |||
| 43 | * FileName: usb_ch9.h |
||
| 44 | * Dependencies: None |
||
| 45 | * Processor: PIC18/PIC24/PIC32MX microcontrollers with USB module |
||
| 46 | * Compiler: C18 v3.13+/C30 v2.01+/C32 v0.00.18+ |
||
| 47 | * Company: Microchip Technology, Inc. |
||
| 48 | * File Description: |
||
| 49 | * This file contains the definitions and prototypes used for |
||
| 50 | * specification chapter 9 compliance. |
||
| 51 | |||
| 52 | Software License Agreement |
||
| 53 | |||
| 54 | The software supplied herewith by Microchip Technology Incorporated |
||
| 55 | (the Company) for its PICmicro® Microcontroller is intended and |
||
| 56 | supplied to you, the Companys customer, for use solely and |
||
| 57 | exclusively on Microchip PICmicro Microcontroller products. The |
||
| 58 | software is owned by the Company and/or its supplier, and is |
||
| 59 | protected under applicable copyright laws. All rights are reserved. |
||
| 60 | Any use in violation of the foregoing restrictions may subject the |
||
| 61 | user to criminal sanctions under applicable laws, as well as to |
||
| 62 | civil liability for the breach of the terms and conditions of this |
||
| 63 | license. |
||
| 64 | |||
| 65 | THIS SOFTWARE IS PROVIDED IN AN AS IS CONDITION. NO WARRANTIES, |
||
| 66 | WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED |
||
| 67 | TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
||
| 68 | PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT, |
||
| 69 | IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR |
||
| 70 | CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. |
||
| 71 | |||
| 72 | *******************************************************************************/ |
||
| 73 | //DOM-IGNORE-END |
||
| 74 | |||
| 75 | //DOM-IGNORE-BEGIN |
||
| 76 | /******************************************************************** |
||
| 77 | Change History: |
||
| 78 | Rev Description |
||
| 79 | ---- ----------- |
||
| 80 | 2.6 Moved many of the CH9 defintions from the device stack files |
||
| 81 | into this file. |
||
| 82 | 2.6a- No Change |
||
| 83 | 2.7a |
||
| 84 | ********************************************************************/ |
||
| 85 | //DOM-IGNORE-END |
||
| 86 | |||
| 87 | //DOM-IGNORE-BEGIN |
||
| 88 | #ifndef _USB_CH9_H_ |
||
| 89 | #define _USB_CH9_H_ |
||
| 90 | //DOM-IGNORE-END |
||
| 91 | |||
| 92 | |||
| 93 | // ***************************************************************************** |
||
| 94 | // ***************************************************************************** |
||
| 95 | // Section: USB Descriptors |
||
| 96 | // ***************************************************************************** |
||
| 97 | // ***************************************************************************** |
||
| 98 | |||
| 99 | #define USB_DESCRIPTOR_DEVICE 0x01 // bDescriptorType for a Device Descriptor. |
||
| 100 | #define USB_DESCRIPTOR_CONFIGURATION 0x02 // bDescriptorType for a Configuration Descriptor. |
||
| 101 | #define USB_DESCRIPTOR_STRING 0x03 // bDescriptorType for a String Descriptor. |
||
| 102 | #define USB_DESCRIPTOR_INTERFACE 0x04 // bDescriptorType for an Interface Descriptor. |
||
| 103 | #define USB_DESCRIPTOR_ENDPOINT 0x05 // bDescriptorType for an Endpoint Descriptor. |
||
| 104 | #define USB_DESCRIPTOR_DEVICE_QUALIFIER 0x06 // bDescriptorType for a Device Qualifier. |
||
| 105 | #define USB_DESCRIPTOR_OTHER_SPEED 0x07 // bDescriptorType for a Other Speed Configuration. |
||
| 106 | #define USB_DESCRIPTOR_INTERFACE_POWER 0x08 // bDescriptorType for Interface Power. |
||
| 107 | #define USB_DESCRIPTOR_OTG 0x09 // bDescriptorType for an OTG Descriptor. |
||
| 108 | |||
| 109 | // ***************************************************************************** |
||
| 110 | /* USB Device Descriptor Structure |
||
| 111 | |||
| 112 | This struct defines the structure of a USB Device Descriptor. Note that this |
||
| 113 | structure may need to be packed, or even accessed as bytes, to properly access |
||
| 114 | the correct fields when used on some device architectures. |
||
| 115 | */ |
||
| 116 | typedef struct __attribute__ ((packed)) _USB_DEVICE_DESCRIPTOR |
||
| 117 | { |
||
| 118 | BYTE bLength; // Length of this descriptor. |
||
| 119 | BYTE bDescriptorType; // DEVICE descriptor type (USB_DESCRIPTOR_DEVICE). |
||
| 120 | WORD bcdUSB; // USB Spec Release Number (BCD). |
||
| 121 | BYTE bDeviceClass; // Class code (assigned by the USB-IF). 0xFF-Vendor specific. |
||
| 122 | BYTE bDeviceSubClass; // Subclass code (assigned by the USB-IF). |
||
| 123 | BYTE bDeviceProtocol; // Protocol code (assigned by the USB-IF). 0xFF-Vendor specific. |
||
| 124 | BYTE bMaxPacketSize0; // Maximum packet size for endpoint 0. |
||
| 125 | WORD idVendor; // Vendor ID (assigned by the USB-IF). |
||
| 126 | WORD idProduct; // Product ID (assigned by the manufacturer). |
||
| 127 | WORD bcdDevice; // Device release number (BCD). |
||
| 128 | BYTE iManufacturer; // Index of String Descriptor describing the manufacturer. |
||
| 129 | BYTE iProduct; // Index of String Descriptor describing the product. |
||
| 130 | BYTE iSerialNumber; // Index of String Descriptor with the device's serial number. |
||
| 131 | BYTE bNumConfigurations; // Number of possible configurations. |
||
| 132 | } USB_DEVICE_DESCRIPTOR; |
||
| 133 | |||
| 134 | |||
| 135 | // ***************************************************************************** |
||
| 136 | /* USB Configuration Descriptor Structure |
||
| 137 | |||
| 138 | This struct defines the structure of a USB Configuration Descriptor. Note that this |
||
| 139 | structure may need to be packed, or even accessed as bytes, to properly access |
||
| 140 | the correct fields when used on some device architectures. |
||
| 141 | */ |
||
| 142 | typedef struct __attribute__ ((packed)) _USB_CONFIGURATION_DESCRIPTOR |
||
| 143 | { |
||
| 144 | BYTE bLength; // Length of this descriptor. |
||
| 145 | BYTE bDescriptorType; // CONFIGURATION descriptor type (USB_DESCRIPTOR_CONFIGURATION). |
||
| 146 | WORD wTotalLength; // Total length of all descriptors for this configuration. |
||
| 147 | BYTE bNumInterfaces; // Number of interfaces in this configuration. |
||
| 148 | BYTE bConfigurationValue; // Value of this configuration (1 based). |
||
| 149 | BYTE iConfiguration; // Index of String Descriptor describing the configuration. |
||
| 150 | BYTE bmAttributes; // Configuration characteristics. |
||
| 151 | BYTE bMaxPower; // Maximum power consumed by this configuration. |
||
| 152 | } USB_CONFIGURATION_DESCRIPTOR; |
||
| 153 | |||
| 154 | // Attributes bits |
||
| 155 | #define USB_CFG_DSC_REQUIRED 0x80 // Required attribute |
||
| 156 | #define USB_CFG_DSC_SELF_PWR (0x40|USB_CFG_DSC_REQUIRED) // Device is self powered. |
||
| 157 | #define USB_CFG_DSC_REM_WAKE (0x20|USB_CFG_DSC_REQUIRED) // Device can request remote wakup |
||
| 158 | |||
| 159 | |||
| 160 | // ***************************************************************************** |
||
| 161 | /* USB Interface Descriptor Structure |
||
| 162 | |||
| 163 | This struct defines the structure of a USB Interface Descriptor. Note that this |
||
| 164 | structure may need to be packed, or even accessed as bytes, to properly access |
||
| 165 | the correct fields when used on some device architectures. |
||
| 166 | */ |
||
| 167 | typedef struct __attribute__ ((packed)) _USB_INTERFACE_DESCRIPTOR |
||
| 168 | { |
||
| 169 | BYTE bLength; // Length of this descriptor. |
||
| 170 | BYTE bDescriptorType; // INTERFACE descriptor type (USB_DESCRIPTOR_INTERFACE). |
||
| 171 | BYTE bInterfaceNumber; // Number of this interface (0 based). |
||
| 172 | BYTE bAlternateSetting; // Value of this alternate interface setting. |
||
| 173 | BYTE bNumEndpoints; // Number of endpoints in this interface. |
||
| 174 | BYTE bInterfaceClass; // Class code (assigned by the USB-IF). 0xFF-Vendor specific. |
||
| 175 | BYTE bInterfaceSubClass; // Subclass code (assigned by the USB-IF). |
||
| 176 | BYTE bInterfaceProtocol; // Protocol code (assigned by the USB-IF). 0xFF-Vendor specific. |
||
| 177 | BYTE iInterface; // Index of String Descriptor describing the interface. |
||
| 178 | } USB_INTERFACE_DESCRIPTOR; |
||
| 179 | |||
| 180 | |||
| 181 | // ***************************************************************************** |
||
| 182 | /* USB Endpoint Descriptor Structure |
||
| 183 | |||
| 184 | This struct defines the structure of a USB Endpoint Descriptor. Note that this |
||
| 185 | structure may need to be packed, or even accessed as bytes, to properly access |
||
| 186 | the correct fields when used on some device architectures. |
||
| 187 | */ |
||
| 188 | typedef struct __attribute__ ((packed)) _USB_ENDPOINT_DESCRIPTOR |
||
| 189 | { |
||
| 190 | BYTE bLength; // Length of this descriptor. |
||
| 191 | BYTE bDescriptorType; // ENDPOINT descriptor type (USB_DESCRIPTOR_ENDPOINT). |
||
| 192 | BYTE bEndpointAddress; // Endpoint address. Bit 7 indicates direction (0=OUT, 1=IN). |
||
| 193 | BYTE bmAttributes; // Endpoint transfer type. |
||
| 194 | WORD wMaxPacketSize; // Maximum packet size. |
||
| 195 | BYTE bInterval; // Polling interval in frames. |
||
| 196 | } USB_ENDPOINT_DESCRIPTOR; |
||
| 197 | |||
| 198 | |||
| 199 | // Endpoint Direction |
||
| 200 | #define EP_DIR_IN 0x80 // Data flows from device to host |
||
| 201 | #define EP_DIR_OUT 0x00 // Data flows from host to device |
||
| 202 | |||
| 203 | |||
| 204 | // ****************************************************************** |
||
| 205 | // USB Endpoint Attributes |
||
| 206 | // ****************************************************************** |
||
| 207 | |||
| 208 | // Section: Transfer Types |
||
| 209 | #define EP_ATTR_CONTROL (0<<0) // Endoint used for control transfers |
||
| 210 | #define EP_ATTR_ISOCH (1<<0) // Endpoint used for isochronous transfers |
||
| 211 | #define EP_ATTR_BULK (2<<0) // Endpoint used for bulk transfers |
||
| 212 | #define EP_ATTR_INTR (3<<0) // Endpoint used for interrupt transfers |
||
| 213 | |||
| 214 | // Section: Synchronization Types (for isochronous enpoints) |
||
| 215 | #define EP_ATTR_NO_SYNC (0<<2) // No Synchronization |
||
| 216 | #define EP_ATTR_ASYNC (1<<2) // Asynchronous |
||
| 217 | #define EP_ATTR_ADAPT (2<<2) // Adaptive synchronization |
||
| 218 | #define EP_ATTR_SYNC (3<<2) // Synchronous |
||
| 219 | |||
| 220 | // Section: Usage Types (for isochronous endpoints) |
||
| 221 | #define EP_ATTR_DATA (0<<4) // Data Endpoint |
||
| 222 | #define EP_ATTR_FEEDBACK (1<<4) // Feedback endpoint |
||
| 223 | #define EP_ATTR_IMP_FB (2<<4) // Implicit Feedback data EP |
||
| 224 | |||
| 225 | // Section: Max Packet Sizes |
||
| 226 | #define EP_MAX_PKT_INTR_LS 8 // Max low-speed interrupt packet |
||
| 227 | #define EP_MAX_PKT_INTR_FS 64 // Max full-speed interrupt packet |
||
| 228 | #define EP_MAX_PKT_ISOCH_FS 1023 // Max full-speed isochronous packet |
||
| 229 | #define EP_MAX_PKT_BULK_FS 64 // Max full-speed bulk packet |
||
| 230 | #define EP_LG_PKT_BULK_FS 32 // Large full-speed bulk packet |
||
| 231 | #define EP_MED_PKT_BULK_FS 16 // Medium full-speed bulk packet |
||
| 232 | #define EP_SM_PKT_BULK_FS 8 // Small full-speed bulk packet |
||
| 233 | |||
| 234 | /* Descriptor IDs |
||
| 235 | The descriptor ID type defines the information required by the HOST during a |
||
| 236 | GET_DESCRIPTOR request |
||
| 237 | */ |
||
| 238 | typedef struct |
||
| 239 | { |
||
| 240 | BYTE index; |
||
| 241 | BYTE type; |
||
| 242 | UINT16 language_id; |
||
| 243 | |||
| 244 | } DESCRIPTOR_ID; |
||
| 245 | |||
| 246 | // ***************************************************************************** |
||
| 247 | /* USB OTG Descriptor Structure |
||
| 248 | |||
| 249 | This struct defines the structure of a USB OTG Descriptor. Note that this |
||
| 250 | structure may need to be packed, or even accessed as bytes, to properly access |
||
| 251 | the correct fields when used on some device architectures. |
||
| 252 | */ |
||
| 253 | typedef struct __attribute__ ((packed)) _USB_OTG_DESCRIPTOR |
||
| 254 | { |
||
| 255 | BYTE bLength; // Length of this descriptor. |
||
| 256 | BYTE bDescriptorType; // OTG descriptor type (USB_DESCRIPTOR_OTG). |
||
| 257 | BYTE bmAttributes; // OTG attributes. |
||
| 258 | } USB_OTG_DESCRIPTOR; |
||
| 259 | |||
| 260 | |||
| 261 | // ****************************************************************** |
||
| 262 | // Section: USB String Descriptor Structure |
||
| 263 | // ****************************************************************** |
||
| 264 | // This structure describes the USB string descriptor. The string |
||
| 265 | // descriptor provides user-readable information about various aspects of |
||
| 266 | // the device. The first string desriptor (string descriptor zero (0)), |
||
| 267 | // provides a list of the number of languages supported by the set of |
||
| 268 | // string descriptors for this device instead of an actual string. |
||
| 269 | // |
||
| 270 | // Note: The strings are in 2-byte-per-character unicode, not ASCII. |
||
| 271 | // |
||
| 272 | // Note: This structure only describes the "header" of the string |
||
| 273 | // descriptor. The actual data (either the language ID array or the |
||
| 274 | // array of unicode characters making up the string, must be allocated |
||
| 275 | // immediately following this header with no padding between them. |
||
| 276 | |||
| 277 | typedef struct __attribute__ ((packed)) _USB_STRING_DSC |
||
| 278 | { |
||
| 279 | BYTE bLength; // Size of this descriptor |
||
| 280 | BYTE bDescriptorType; // Type, USB_DSC_STRING |
||
| 281 | |||
| 282 | } USB_STRING_DESCRIPTOR; |
||
| 283 | |||
| 284 | |||
| 285 | // ****************************************************************** |
||
| 286 | // Section: USB Device Qualifier Descriptor Structure |
||
| 287 | // ****************************************************************** |
||
| 288 | // This structure describes the device qualifier descriptor. The device |
||
| 289 | // qualifier descriptor provides overall device information if the device |
||
| 290 | // supports "other" speeds. |
||
| 291 | // |
||
| 292 | // Note: A high-speed device may support "other" speeds (ie. full or low). |
||
| 293 | // If so, it may need to implement the the device qualifier and other |
||
| 294 | // speed descriptors. |
||
| 295 | |||
| 296 | typedef struct __attribute__ ((packed)) _USB_DEVICE_QUALIFIER_DESCRIPTOR |
||
| 297 | { |
||
| 298 | BYTE bLength; // Size of this descriptor |
||
| 299 | BYTE bType; // Type, always USB_DESCRIPTOR_DEVICE_QUALIFIER |
||
| 300 | WORD bcdUSB; // USB spec version, in BCD |
||
| 301 | BYTE bDeviceClass; // Device class code |
||
| 302 | BYTE bDeviceSubClass; // Device sub-class code |
||
| 303 | BYTE bDeviceProtocol; // Device protocol |
||
| 304 | BYTE bMaxPacketSize0; // EP0, max packet size |
||
| 305 | BYTE bNumConfigurations; // Number of "other-speed" configurations |
||
| 306 | BYTE bReserved; // Always zero (0) |
||
| 307 | |||
| 308 | } USB_DEVICE_QUALIFIER_DESCRIPTOR; |
||
| 309 | |||
| 310 | // ****************************************************************** |
||
| 311 | // Section: USB Setup Packet Structure |
||
| 312 | // ****************************************************************** |
||
| 313 | // This structure describes the data contained in a USB standard device |
||
| 314 | // request's setup packet. It is the data packet sent from the host to |
||
| 315 | // the device to control and configure the device. |
||
| 316 | // |
||
| 317 | // Note: Refer to the USB 2.0 specification for additional details on the |
||
| 318 | // usage of the setup packet and standard device requests. |
||
| 319 | typedef union __attribute__ ((packed)) |
||
| 320 | { |
||
| 321 | /** Standard Device Requests ***********************************/ |
||
| 322 | struct __attribute__ ((packed)) |
||
| 323 | { |
||
| 324 | BYTE bmRequestType; //from table 9-2 of USB2.0 spec |
||
| 325 | BYTE bRequest; //from table 9-2 of USB2.0 spec |
||
| 326 | WORD wValue; //from table 9-2 of USB2.0 spec |
||
| 327 | WORD wIndex; //from table 9-2 of USB2.0 spec |
||
| 328 | WORD wLength; //from table 9-2 of USB2.0 spec |
||
| 329 | }; |
||
| 330 | struct __attribute__ ((packed)) |
||
| 331 | { |
||
| 332 | unsigned :8; |
||
| 333 | unsigned :8; |
||
| 334 | WORD_VAL W_Value; //from table 9-2 of USB2.0 spec, allows byte/bitwise access |
||
| 335 | WORD_VAL W_Index; //from table 9-2 of USB2.0 spec, allows byte/bitwise access |
||
| 336 | WORD_VAL W_Length; //from table 9-2 of USB2.0 spec, allows byte/bitwise access |
||
| 337 | }; |
||
| 338 | struct __attribute__ ((packed)) |
||
| 339 | { |
||
| 340 | unsigned Recipient:5; //Device,Interface,Endpoint,Other |
||
| 341 | unsigned RequestType:2; //Standard,Class,Vendor,Reserved |
||
| 342 | unsigned DataDir:1; //Host-to-device,Device-to-host |
||
| 343 | unsigned :8; |
||
| 344 | BYTE bFeature; //DEVICE_REMOTE_WAKEUP,ENDPOINT_HALT |
||
| 345 | unsigned :8; |
||
| 346 | unsigned :8; |
||
| 347 | unsigned :8; |
||
| 348 | unsigned :8; |
||
| 349 | unsigned :8; |
||
| 350 | }; |
||
| 351 | struct __attribute__ ((packed)) |
||
| 352 | { |
||
| 353 | union // offset description |
||
| 354 | { // ------ ------------------------ |
||
| 355 | BYTE bmRequestType; // 0 Bit-map of request type |
||
| 356 | struct |
||
| 357 | { |
||
| 358 | BYTE recipient: 5; // Recipient of the request |
||
| 359 | BYTE type: 2; // Type of request |
||
| 360 | BYTE direction: 1; // Direction of data X-fer |
||
| 361 | }; |
||
| 362 | }requestInfo; |
||
| 363 | }; |
||
| 364 | struct __attribute__ ((packed)) |
||
| 365 | { |
||
| 366 | unsigned :8; |
||
| 367 | unsigned :8; |
||
| 368 | BYTE bDscIndex; //For Configuration and String DSC Only |
||
| 369 | BYTE bDescriptorType; //Device,Configuration,String |
||
| 370 | WORD wLangID; //Language ID |
||
| 371 | unsigned :8; |
||
| 372 | unsigned :8; |
||
| 373 | }; |
||
| 374 | struct __attribute__ ((packed)) |
||
| 375 | { |
||
| 376 | unsigned :8; |
||
| 377 | unsigned :8; |
||
| 378 | BYTE_VAL bDevADR; //Device Address 0-127 |
||
| 379 | BYTE bDevADRH; //Must equal zero |
||
| 380 | unsigned :8; |
||
| 381 | unsigned :8; |
||
| 382 | unsigned :8; |
||
| 383 | unsigned :8; |
||
| 384 | }; |
||
| 385 | struct __attribute__ ((packed)) |
||
| 386 | { |
||
| 387 | unsigned :8; |
||
| 388 | unsigned :8; |
||
| 389 | BYTE bConfigurationValue; //Configuration Value 0-255 |
||
| 390 | BYTE bCfgRSD; //Must equal zero (Reserved) |
||
| 391 | unsigned :8; |
||
| 392 | unsigned :8; |
||
| 393 | unsigned :8; |
||
| 394 | unsigned :8; |
||
| 395 | }; |
||
| 396 | struct __attribute__ ((packed)) |
||
| 397 | { |
||
| 398 | unsigned :8; |
||
| 399 | unsigned :8; |
||
| 400 | BYTE bAltID; //Alternate Setting Value 0-255 |
||
| 401 | BYTE bAltID_H; //Must equal zero |
||
| 402 | BYTE bIntfID; //Interface Number Value 0-255 |
||
| 403 | BYTE bIntfID_H; //Must equal zero |
||
| 404 | unsigned :8; |
||
| 405 | unsigned :8; |
||
| 406 | }; |
||
| 407 | struct __attribute__ ((packed)) |
||
| 408 | { |
||
| 409 | unsigned :8; |
||
| 410 | unsigned :8; |
||
| 411 | unsigned :8; |
||
| 412 | unsigned :8; |
||
| 413 | BYTE bEPID; //Endpoint ID (Number & Direction) |
||
| 414 | BYTE bEPID_H; //Must equal zero |
||
| 415 | unsigned :8; |
||
| 416 | unsigned :8; |
||
| 417 | }; |
||
| 418 | struct __attribute__ ((packed)) |
||
| 419 | { |
||
| 420 | unsigned :8; |
||
| 421 | unsigned :8; |
||
| 422 | unsigned :8; |
||
| 423 | unsigned :8; |
||
| 424 | unsigned EPNum:4; //Endpoint Number 0-15 |
||
| 425 | unsigned :3; |
||
| 426 | unsigned EPDir:1; //Endpoint Direction: 0-OUT, 1-IN |
||
| 427 | unsigned :8; |
||
| 428 | unsigned :8; |
||
| 429 | unsigned :8; |
||
| 430 | }; |
||
| 431 | |||
| 432 | /** End: Standard Device Requests ******************************/ |
||
| 433 | |||
| 434 | } CTRL_TRF_SETUP, SETUP_PKT, *PSETUP_PKT; |
||
| 435 | |||
| 436 | |||
| 437 | // ****************************************************************** |
||
| 438 | // ****************************************************************** |
||
| 439 | // Section: USB Specification Constants |
||
| 440 | // ****************************************************************** |
||
| 441 | // ****************************************************************** |
||
| 442 | |||
| 443 | // Section: Valid PID Values |
||
| 444 | //DOM-IGNORE-BEGIN |
||
| 445 | #define PID_OUT 0x1 // PID for an OUT token |
||
| 446 | #define PID_ACK 0x2 // PID for an ACK handshake |
||
| 447 | #define PID_DATA0 0x3 // PID for DATA0 data |
||
| 448 | #define PID_PING 0x4 // Special PID PING |
||
| 449 | #define PID_SOF 0x5 // PID for a SOF token |
||
| 450 | #define PID_NYET 0x6 // PID for a NYET handshake |
||
| 451 | #define PID_DATA2 0x7 // PID for DATA2 data |
||
| 452 | #define PID_SPLIT 0x8 // Special PID SPLIT |
||
| 453 | #define PID_IN 0x9 // PID for a IN token |
||
| 454 | #define PID_NAK 0xA // PID for a NAK handshake |
||
| 455 | #define PID_DATA1 0xB // PID for DATA1 data |
||
| 456 | #define PID_PRE 0xC // Special PID PRE (Same as PID_ERR) |
||
| 457 | #define PID_ERR 0xC // Special PID ERR (Same as PID_PRE) |
||
| 458 | #define PID_SETUP 0xD // PID for a SETUP token |
||
| 459 | #define PID_STALL 0xE // PID for a STALL handshake |
||
| 460 | #define PID_MDATA 0xF // PID for MDATA data |
||
| 461 | |||
| 462 | #define PID_MASK_DATA 0x03 // Data PID mask |
||
| 463 | #define PID_MASK_DATA_SHIFTED (PID_MASK_DATA << 2) // Data PID shift to proper position |
||
| 464 | //DOM-IGNORE-END |
||
| 465 | |||
| 466 | // Section: USB Token Types |
||
| 467 | //DOM-IGNORE-BEGIN |
||
| 468 | #define USB_TOKEN_OUT 0x01 // U1TOK - OUT token |
||
| 469 | #define USB_TOKEN_IN 0x09 // U1TOK - IN token |
||
| 470 | #define USB_TOKEN_SETUP 0x0D // U1TOK - SETUP token |
||
| 471 | //DOM-IGNORE-END |
||
| 472 | |||
| 473 | // Section: OTG Descriptor Constants |
||
| 474 | |||
| 475 | #define OTG_HNP_SUPPORT 0x02 // OTG Descriptor bmAttributes - HNP support flag |
||
| 476 | #define OTG_SRP_SUPPORT 0x01 // OTG Descriptor bmAttributes - SRP support flag |
||
| 477 | |||
| 478 | // Section: Endpoint Directions |
||
| 479 | |||
| 480 | #define USB_IN_EP 0x80 // IN endpoint mask |
||
| 481 | #define USB_OUT_EP 0x00 // OUT endpoint mask |
||
| 482 | |||
| 483 | // Section: Standard Device Requests |
||
| 484 | |||
| 485 | #define USB_REQUEST_GET_STATUS 0 // Standard Device Request - GET STATUS |
||
| 486 | #define USB_REQUEST_CLEAR_FEATURE 1 // Standard Device Request - CLEAR FEATURE |
||
| 487 | #define USB_REQUEST_SET_FEATURE 3 // Standard Device Request - SET FEATURE |
||
| 488 | #define USB_REQUEST_SET_ADDRESS 5 // Standard Device Request - SET ADDRESS |
||
| 489 | #define USB_REQUEST_GET_DESCRIPTOR 6 // Standard Device Request - GET DESCRIPTOR |
||
| 490 | #define USB_REQUEST_SET_DESCRIPTOR 7 // Standard Device Request - SET DESCRIPTOR |
||
| 491 | #define USB_REQUEST_GET_CONFIGURATION 8 // Standard Device Request - GET CONFIGURATION |
||
| 492 | #define USB_REQUEST_SET_CONFIGURATION 9 // Standard Device Request - SET CONFIGURATION |
||
| 493 | #define USB_REQUEST_GET_INTERFACE 10 // Standard Device Request - GET INTERFACE |
||
| 494 | #define USB_REQUEST_SET_INTERFACE 11 // Standard Device Request - SET INTERFACE |
||
| 495 | #define USB_REQUEST_SYNCH_FRAME 12 // Standard Device Request - SYNCH FRAME |
||
| 496 | |||
| 497 | #define USB_FEATURE_ENDPOINT_HALT 0 // CLEAR/SET FEATURE - Endpoint Halt |
||
| 498 | #define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // CLEAR/SET FEATURE - Device remote wake-up |
||
| 499 | #define USB_FEATURE_TEST_MODE 2 // CLEAR/SET FEATURE - Test mode |
||
| 500 | |||
| 501 | // Section: Setup Data Constants |
||
| 502 | |||
| 503 | #define USB_SETUP_HOST_TO_DEVICE 0x00 // Device Request bmRequestType transfer direction - host to device transfer |
||
| 504 | #define USB_SETUP_DEVICE_TO_HOST 0x80 // Device Request bmRequestType transfer direction - device to host transfer |
||
| 505 | #define USB_SETUP_TYPE_STANDARD 0x00 // Device Request bmRequestType type - standard |
||
| 506 | #define USB_SETUP_TYPE_CLASS 0x20 // Device Request bmRequestType type - class |
||
| 507 | #define USB_SETUP_TYPE_VENDOR 0x40 // Device Request bmRequestType type - vendor |
||
| 508 | #define USB_SETUP_RECIPIENT_DEVICE 0x00 // Device Request bmRequestType recipient - device |
||
| 509 | #define USB_SETUP_RECIPIENT_INTERFACE 0x01 // Device Request bmRequestType recipient - interface |
||
| 510 | #define USB_SETUP_RECIPIENT_ENDPOINT 0x02 // Device Request bmRequestType recipient - endpoint |
||
| 511 | #define USB_SETUP_RECIPIENT_OTHER 0x03 // Device Request bmRequestType recipient - other |
||
| 512 | |||
| 513 | #define USB_SETUP_HOST_TO_DEVICE_BITFIELD (USB_SETUP_HOST_TO_DEVICE>>7) // Device Request bmRequestType transfer direction - host to device transfer - bit definition |
||
| 514 | #define USB_SETUP_DEVICE_TO_HOST_BITFIELD (USB_SETUP_DEVICE_TO_HOST>>7) // Device Request bmRequestType transfer direction - device to host transfer - bit definition |
||
| 515 | #define USB_SETUP_TYPE_STANDARD_BITFIELD (USB_SETUP_TYPE_STANDARD>>5) // Device Request bmRequestType type - standard |
||
| 516 | #define USB_SETUP_TYPE_CLASS_BITFIELD (USB_SETUP_TYPE_CLASS>>5) // Device Request bmRequestType type - class |
||
| 517 | #define USB_SETUP_TYPE_VENDOR_BITFIELD (USB_SETUP_TYPE_VENDOR>>5) // Device Request bmRequestType type - vendor |
||
| 518 | #define USB_SETUP_RECIPIENT_DEVICE_BITFIELD (USB_SETUP_RECIPIENT_DEVICE) // Device Request bmRequestType recipient - device |
||
| 519 | #define USB_SETUP_RECIPIENT_INTERFACE_BITFIELD (USB_SETUP_RECIPIENT_INTERFACE) // Device Request bmRequestType recipient - interface |
||
| 520 | #define USB_SETUP_RECIPIENT_ENDPOINT_BITFIELD (USB_SETUP_RECIPIENT_ENDPOINT) // Device Request bmRequestType recipient - endpoint |
||
| 521 | #define USB_SETUP_RECIPIENT_OTHER_BITFIELD (USB_SETUP_RECIPIENT_OTHER) // Device Request bmRequestType recipient - other |
||
| 522 | |||
| 523 | // Section: OTG SET FEATURE Constants |
||
| 524 | |||
| 525 | #define OTG_FEATURE_B_HNP_ENABLE 3 // SET FEATURE OTG - Enable B device to perform HNP |
||
| 526 | #define OTG_FEATURE_A_HNP_SUPPORT 4 // SET FEATURE OTG - A device supports HNP |
||
| 527 | #define OTG_FEATURE_A_ALT_HNP_SUPPORT 5 // SET FEATURE OTG - Another port on the A device supports HNP |
||
| 528 | |||
| 529 | // Section: USB Endpoint Transfer Types |
||
| 530 | |||
| 531 | #define USB_TRANSFER_TYPE_CONTROL 0x00 // Endpoint is a control endpoint. |
||
| 532 | #define USB_TRANSFER_TYPE_ISOCHRONOUS 0x01 // Endpoint is an isochronous endpoint. |
||
| 533 | #define USB_TRANSFER_TYPE_BULK 0x02 // Endpoint is a bulk endpoint. |
||
| 534 | #define USB_TRANSFER_TYPE_INTERRUPT 0x03 // Endpoint is an interrupt endpoint. |
||
| 535 | |||
| 536 | // Section: Standard Feature Selectors for CLEAR_FEATURE Requests |
||
| 537 | #define USB_FEATURE_ENDPOINT_STALL 0 // Endpoint recipient |
||
| 538 | #define USB_FEATURE_DEVICE_REMOTE_WAKEUP 1 // Device recipient |
||
| 539 | #define USB_FEATURE_TEST_MODE 2 // Device recipient |
||
| 540 | |||
| 541 | |||
| 542 | // Section: USB Class Code Definitions |
||
| 543 | #define USB_HUB_CLASSCODE 0x09 // Class code for a hub. |
||
| 544 | |||
| 545 | /******************************************************************** |
||
| 546 | USB Endpoint Definitions |
||
| 547 | USB Standard EP Address Format: DIR:X:X:X:EP3:EP2:EP1:EP0 |
||
| 548 | This is used in the descriptors. |
||
| 549 | ********************************************************************/ |
||
| 550 | #define _EP_IN 0x80 |
||
| 551 | #define _EP_OUT 0x00 |
||
| 552 | #define _EP01_OUT 0x01 |
||
| 553 | #define _EP01_IN 0x81 |
||
| 554 | #define _EP02_OUT 0x02 |
||
| 555 | #define _EP02_IN 0x82 |
||
| 556 | #define _EP03_OUT 0x03 |
||
| 557 | #define _EP03_IN 0x83 |
||
| 558 | #define _EP04_OUT 0x04 |
||
| 559 | #define _EP04_IN 0x84 |
||
| 560 | #define _EP05_OUT 0x05 |
||
| 561 | #define _EP05_IN 0x85 |
||
| 562 | #define _EP06_OUT 0x06 |
||
| 563 | #define _EP06_IN 0x86 |
||
| 564 | #define _EP07_OUT 0x07 |
||
| 565 | #define _EP07_IN 0x87 |
||
| 566 | #define _EP08_OUT 0x08 |
||
| 567 | #define _EP08_IN 0x88 |
||
| 568 | #define _EP09_OUT 0x09 |
||
| 569 | #define _EP09_IN 0x89 |
||
| 570 | #define _EP10_OUT 0x0A |
||
| 571 | #define _EP10_IN 0x8A |
||
| 572 | #define _EP11_OUT 0x0B |
||
| 573 | #define _EP11_IN 0x8B |
||
| 574 | #define _EP12_OUT 0x0C |
||
| 575 | #define _EP12_IN 0x8C |
||
| 576 | #define _EP13_OUT 0x0D |
||
| 577 | #define _EP13_IN 0x8D |
||
| 578 | #define _EP14_OUT 0x0E |
||
| 579 | #define _EP14_IN 0x8E |
||
| 580 | #define _EP15_OUT 0x0F |
||
| 581 | #define _EP15_IN 0x8F |
||
| 582 | |||
| 583 | /* Configuration Attributes */ |
||
| 584 | #define _DEFAULT (0x01<<7) //Default Value (Bit 7 is set) |
||
| 585 | #define _SELF (0x01<<6) //Self-powered (Supports if set) |
||
| 586 | #define _RWU (0x01<<5) //Remote Wakeup (Supports if set) |
||
| 587 | #define _HNP (0x01 << 1) //HNP (Supports if set) |
||
| 588 | #define _SRP (0x01) //SRP (Supports if set) |
||
| 589 | |||
| 590 | /* Endpoint Transfer Type */ |
||
| 591 | #define _CTRL 0x00 //Control Transfer |
||
| 592 | #define _ISO 0x01 //Isochronous Transfer |
||
| 593 | #define _BULK 0x02 //Bulk Transfer |
||
| 594 | |||
| 595 | #define _INTERRUPT 0x03 //Interrupt Transfer |
||
| 596 | #if defined(__18CXX) || defined(__C30__) |
||
| 597 | #define _INT 0x03 //Interrupt Transfer |
||
| 598 | #endif |
||
| 599 | |||
| 600 | /* Isochronous Endpoint Synchronization Type */ |
||
| 601 | #define _NS (0x00<<2) //No Synchronization |
||
| 602 | #define _AS (0x01<<2) //Asynchronous |
||
| 603 | #define _AD (0x02<<2) //Adaptive |
||
| 604 | #define _SY (0x03<<2) //Synchronous |
||
| 605 | |||
| 606 | /* Isochronous Endpoint Usage Type */ |
||
| 607 | #define _DE (0x00<<4) //Data endpoint |
||
| 608 | #define _FE (0x01<<4) //Feedback endpoint |
||
| 609 | #define _IE (0x02<<4) //Implicit feedback Data endpoint |
||
| 610 | |||
| 611 | //These are the directional indicators used for the USBTransferOnePacket() |
||
| 612 | // function. |
||
| 613 | #define OUT_FROM_HOST 0 |
||
| 614 | #define IN_TO_HOST 1 |
||
| 615 | |||
| 616 | #endif // _USB_CH9_H_ |
||
| 617 | /************************************************************************* |
||
| 618 | * EOF |
||
| 619 | */ |
||
| 620 |
Powered by WebSVN v2.8.3