Remove USE_NONSTANDARD_DESCRIPTOR_NAMES compile time token, split out standard descri...
[pub/USBasp.git] / LUFA / Drivers / USB / HighLevel / StdDescriptors.h
index 0e0d1e9..0b56ab6 100644 (file)
  *  Standard USB device descriptor defines and retrieval routines, for USB devices. This module contains\r
  *  structures and macros for the easy creation of standard USB descriptors in USB device projects.\r
  *\r
- *  All standard descriptors have their elements named in an identical manner to the official USB specification,\r
- *  however slightly more verbose alternate (non-standard) names are also supplied if the macro\r
- *  USE_NONSTANDARD_DESCRIPTOR_NAMES is defined in the user project makefile and passed to the compiler at\r
- *  compilation time using the -D option.\r
- *\r
- *  The non-standard names are documented here - if USE_NONSTANDARD_DESCRIPTOR_NAMES is not defined, then all\r
- *  descriptors will contain elements named identically to the official USB specification. The alternately\r
- *  named descriptor elements are placed in the same order inside the descriptor structures as their officially\r
- *  named counterparts, thus they can be correlated easily with the official USB specification.\r
- *\r
  *  @{\r
  */\r
  \r
                        };\r
 \r
                /* Type Defines: */\r
-                       /** Type define for all descriptor's header, indicating the descriptor's length and type.\r
+                       /** Type define for all descriptors standard header, indicating the descriptor's length and type. This structure\r
+                        *  uses LUFA-specific element names to make each element's purpose clearer.\r
                         *\r
-                        *  \note The non-standard structure element names are documented here. If the\r
-                        *        USE_NONSTANDARD_DESCRIPTOR_NAMES token is not set, this structure contains elements \r
-                        *        with names identical to those listed in the USB standard.\r
+                        *  \see \ref USB_StdDescriptor_Header_t for the version of this define with standard element names\r
                         */\r
                        typedef struct\r
                        {\r
-                               #if defined(USE_NONSTANDARD_DESCRIPTOR_NAMES) || defined(__DOXYGEN__)\r
-                               uint8_t Size; /**< Size of the descriptor, in bytes. */\r
-                               uint8_t Type; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value\r
-                                              *   given by the specific class.\r
-                                              */\r
-                               #else\r
-                               uint8_t bLength;\r
-                               uint8_t bDescriptorType;\r
-                               #endif\r
+                               uint8_t     Size; /**< Size of the descriptor, in bytes. */\r
+                               uint8_t     Type; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value\r
+                                                  *   given by the specific class.\r
+                                                  */\r
                        } USB_Descriptor_Header_t;\r
                        \r
-                       /** Type define for a standard device descriptor.\r
+                       /** Type define for all descriptors standard header, indicating the descriptor's length and type. This structure\r
+                        *  uses the relevant standard's given element names to ensure compatibility with the standard.\r
+                        *\r
+                        *  \see \ref USB_Descriptor_Header_t for the version of this define with non-standard LUFA specific element names\r
+                        */\r
+                       typedef struct\r
+                       {\r
+                               uint8_t     bLength; /**< Size of the descriptor, in bytes. */\r
+                               uint8_t     bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value\r
+                                                             *   given by the specific class.\r
+                                                             */\r
+                       } USB_StdDescriptor_Header_t;\r
+                       \r
+                       /** Type define for a standard Device Descriptor. This structure uses LUFA-specific element names to make each\r
+                        *  element's purpose clearer.\r
                         *\r
-                        *  \note The non-standard structure element names are documented here. If the\r
-                        *        USE_NONSTANDARD_DESCRIPTOR_NAMES token is not set, this structure contains elements \r
-                        *        with names identical to those listed in the USB standard.\r
+                        *  \see \ref USB_StdDescriptor_Device_t for the version of this define with standard element names\r
                         */\r
                        typedef struct\r
                        {\r
-                               #if defined(USE_NONSTANDARD_DESCRIPTOR_NAMES) || defined(__DOXYGEN__)\r
                                USB_Descriptor_Header_t Header; /**< Descriptor header, including type and size. */\r
 \r
-                               uint16_t                USBSpecification; /**< BCD of the supported USB specification. */\r
-                               uint8_t                 Class; /**< USB device class. */\r
-                               uint8_t                 SubClass; /**< USB device subclass. */\r
-                               uint8_t                 Protocol; /**< USB device protocol. */\r
+                               uint16_t    USBSpecification; /**< BCD of the supported USB specification. */\r
+                               uint8_t     Class; /**< USB device class. */\r
+                               uint8_t     SubClass; /**< USB device subclass. */\r
+                               uint8_t     Protocol; /**< USB device protocol. */\r
                                \r
-                               uint8_t                 Endpoint0Size; /**< Size of the control (address 0) endpoint's bank in bytes. */\r
+                               uint8_t     Endpoint0Size; /**< Size of the control (address 0) endpoint's bank in bytes. */\r
                                \r
-                               uint16_t                VendorID; /**< Vendor ID for the USB product. */\r
-                               uint16_t                ProductID; /**< Unique product ID for the USB product. */\r
-                               uint16_t                ReleaseNumber; /**< Product release (version) number. */\r
+                               uint16_t    VendorID; /**< Vendor ID for the USB product. */\r
+                               uint16_t    ProductID; /**< Unique product ID for the USB product. */\r
+                               uint16_t    ReleaseNumber; /**< Product release (version) number. */\r
                                \r
-                               uint8_t                 ManufacturerStrIndex; /**< String index for the manufacturer's name. The\r
-                                                               *   host will request this string via a separate\r
-                                                                          *   control request for the string descriptor.\r
-                                                                              *\r
-                                                                              *   \note If no string supplied, use \ref NO_DESCRIPTOR.\r
-                                                                              */\r
-                               uint8_t                 ProductStrIndex; /**< String index for the product name/details.\r
-                                                                         *\r
-                                                                         *  \see ManufacturerStrIndex structure entry.\r
-                                                                         */\r
-                               uint8_t                 SerialNumStrIndex; /**< String index for the product's globally unique hexadecimal\r
-                                                                           *   serial number, in uppercase Unicode ASCII.\r
-                                                                           *\r
-                                                                           *  \note On some AVR models, there is an embedded serial number\r
-                                                                           *        in the chip which can be used for the device serial number.\r
-                                                                           *        To use this serial number, set this to USE_INTERNAL_SERIAL.\r
-                                                                           *        On unsupported devices, this will evaluate to 0 and will cause\r
-                                                                           *        the host to generate a pseudo-unique value for the device upon\r
-                                                                           *        insertion.\r
-                                                                           *\r
-                                                                           *  \see ManufacturerStrIndex structure entry.\r
-                                                                           */\r
-\r
-                               uint8_t                 NumberOfConfigurations; /**< Total number of configurations supported by\r
-                                                                                *   the device.\r
-                                                                                */\r
-                               #else\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
-                               #endif\r
+                               uint8_t     ManufacturerStrIndex; /**< String index for the manufacturer's name. The\r
+                                                                  *   host will request this string via a separate\r
+                                                                  *   control request for the string descriptor.\r
+                                                                  *\r
+                                                                  *   \note If no string supplied, use \ref NO_DESCRIPTOR.\r
+                                                                  */\r
+                               uint8_t     ProductStrIndex; /**< String index for the product name/details.\r
+                                                             *\r
+                                                             *  \see ManufacturerStrIndex structure entry.\r
+                                                             */\r
+                               uint8_t     SerialNumStrIndex; /**< String index for the product's globally unique hexadecimal\r
+                                                               *   serial number, in uppercase Unicode ASCII.\r
+                                                               *\r
+                                                               *  \note On some AVR models, there is an embedded serial number\r
+                                                               *        in the chip which can be used for the device serial number.\r
+                                                               *        To use this serial number, set this to USE_INTERNAL_SERIAL.\r
+                                                               *        On unsupported devices, this will evaluate to 0 and will cause\r
+                                                               *        the host to generate a pseudo-unique value for the device upon\r
+                                                               *        insertion.\r
+                                                               *\r
+                                                               *  \see ManufacturerStrIndex structure entry.\r
+                                                               */\r
+                               uint8_t     NumberOfConfigurations; /**< Total number of configurations supported by\r
+                                                                    *   the device.\r
+                                                                    */\r
                        } USB_Descriptor_Device_t;\r
 \r
-                       /** Type define for a standard configuration descriptor.\r
+                       /** Type define for a standard Device Descriptor. This structure uses the relevant standard's given element names\r
+                        *  to ensure compatibility with the standard.\r
                         *\r
-                        *  \note The non-standard structure element names are documented here. If the\r
-                        *        USE_NONSTANDARD_DESCRIPTOR_NAMES token is not set, this structure contains elements \r
-                        *        with names identical to those listed in the USB standard.\r
+                        *  \see \ref USB_Descriptor_Device_t for the version of this define with non-standard LUFA specific element names\r
+                        */\r
+                       typedef struct\r
+                       {\r
+                               uint8_t     bLength; /**< Size of the descriptor, in bytes. */\r
+                               uint8_t     bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value\r
+                                                             *   given by the specific class.\r
+                                                             */\r
+                               uint16_t    bcdUSB; /**< BCD of the supported USB specification. */\r
+                               uint8_t     bDeviceClass; /**< USB device class. */\r
+                               uint8_t     bDeviceSubClass; /**< USB device subclass. */\r
+                               uint8_t     bDeviceProtocol; /**< USB device protocol. */\r
+                               uint8_t     bMaxPacketSize0; /**< Size of the control (address 0) endpoint's bank in bytes. */\r
+                               uint16_t    idVendor; /**< Vendor ID for the USB product. */\r
+                               uint16_t    idProduct; /**< Unique product ID for the USB product. */\r
+                               uint16_t    bcdDevice; /**< Product release (version) number. */\r
+                               uint8_t     iManufacturer; /**< String index for the manufacturer's name. The\r
+                                                           *   host will request this string via a separate\r
+                                                           *   control request for the string descriptor.\r
+                                                           *\r
+                                                           *   \note If no string supplied, use \ref NO_DESCRIPTOR.\r
+                                                           */\r
+                               uint8_t     iProduct; /**< String index for the product name/details.\r
+                                                      *\r
+                                                      *  \see ManufacturerStrIndex structure entry.\r
+                                                      */\r
+                               uint8_t     iSerialNumber; /**< String index for the product's globally unique hexadecimal\r
+                                                           *   serial number, in uppercase Unicode ASCII.\r
+                                                           *\r
+                                                           *  \note On some AVR models, there is an embedded serial number\r
+                                                           *        in the chip which can be used for the device serial number.\r
+                                                           *        To use this serial number, set this to USE_INTERNAL_SERIAL.\r
+                                                           *        On unsupported devices, this will evaluate to 0 and will cause\r
+                                                           *        the host to generate a pseudo-unique value for the device upon\r
+                                                           *        insertion.\r
+                                                           *\r
+                                                           *  \see ManufacturerStrIndex structure entry.\r
+                                                            */\r
+                               uint8_t     bNumConfigurations; /**< Total number of configurations supported by\r
+                                                                *   the device.\r
+                                                                */\r
+                       } USB_StdDescriptor_Device_t;\r
+\r
+                       /** Type define for a standard Configuration Descriptor header. This structure uses LUFA-specific element names\r
+                        *  to make each element's purpose clearer.\r
+                        *\r
+                        *  \see \ref USB_StdDescriptor_Configuration_Header_t for the version of this define with standard element names\r
                         */\r
                        typedef struct\r
                        {\r
-                               #if defined(USE_NONSTANDARD_DESCRIPTOR_NAMES) || defined(__DOXYGEN__)\r
                                USB_Descriptor_Header_t Header; /**< Descriptor header, including type and size. */\r
                        \r
-                               uint16_t                TotalConfigurationSize; /**< Size of the configuration descriptor header,\r
-                                                                                *   and all sub descriptors inside the configuration.\r
-                                                                                */\r
-                               uint8_t                 TotalInterfaces; /**< Total number of interfaces in the configuration. */\r
+                               uint16_t    TotalConfigurationSize; /**< Size of the configuration descriptor header,\r
+                                                                    *   and all sub descriptors inside the configuration.\r
+                                                                    */\r
+                               uint8_t     TotalInterfaces; /**< Total number of interfaces in the configuration. */\r
 \r
-                               uint8_t                 ConfigurationNumber; /**< Configuration index of the current configuration. */\r
-                               uint8_t                 ConfigurationStrIndex; /**< Index of a string descriptor describing the configuration. */\r
+                               uint8_t     ConfigurationNumber; /**< Configuration index of the current configuration. */\r
+                               uint8_t     ConfigurationStrIndex; /**< Index of a string descriptor describing the configuration. */\r
                                \r
-                               uint8_t                 ConfigAttributes; /**< Configuration attributes, comprised of a mask of zero or\r
-                                                                          *   more USB_CONFIG_ATTR_* masks.\r
-                                                                          */\r
+                               uint8_t     ConfigAttributes; /**< Configuration attributes, comprised of a mask of zero or\r
+                                                              *   more USB_CONFIG_ATTR_* masks.\r
+                                                              */\r
                                \r
-                               uint8_t                 MaxPowerConsumption; /**< Maximum power consumption of the device while in the\r
-                                                                             *   current configuration, calculated by the \ref USB_CONFIG_POWER_MA()\r
-                                                                             *   macro.\r
-                                                                             */\r
-                               #else\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
-                               #endif\r
+                               uint8_t     MaxPowerConsumption; /**< Maximum power consumption of the device while in the\r
+                                                                 *   current configuration, calculated by the \ref USB_CONFIG_POWER_MA()\r
+                                                                 *   macro.\r
+                                                                 */\r
                        } USB_Descriptor_Configuration_Header_t;\r
-\r
-                       /** Type define for a standard interface descriptor.\r
+                       \r
+                       /** Type define for a standard Configuration Descriptor header. This structure uses the relevant standard's given element names\r
+                        *  to ensure compatibility with the standard.\r
                         *\r
-                        *  \note The non-standard structure element names are documented here. If the\r
-                        *        USE_NONSTANDARD_DESCRIPTOR_NAMES token is not set, this structure contains elements \r
-                        *        with names identical to those listed in the USB standard.\r
+                        *  \see \ref USB_Descriptor_Device_t for the version of this define with non-standard LUFA specific element names\r
+                        */\r
+                       typedef struct\r
+                       {\r
+                               uint8_t     bLength; /**< Size of the descriptor, in bytes. */\r
+                               uint8_t     bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value\r
+                                                             *   given by the specific class.\r
+                                                             */\r
+                               uint16_t    wTotalLength; /**< Size of the configuration descriptor header,\r
+                                                          *   and all sub descriptors inside the configuration.\r
+                                                          */\r
+                               uint8_t     bNumInterfaces; /**< Total number of interfaces in the configuration. */\r
+                               uint8_t     bConfigurationValue; /**< Configuration index of the current configuration. */\r
+                               uint8_t     iConfiguration; /**< Index of a string descriptor describing the configuration. */\r
+                               uint8_t     bmAttributes; /**< Configuration attributes, comprised of a mask of zero or\r
+                                                          *   more USB_CONFIG_ATTR_* masks.\r
+                                                          */\r
+                               uint8_t     bMaxPower; /**< Maximum power consumption of the device while in the\r
+                                                       *   current configuration, calculated by the \ref USB_CONFIG_POWER_MA()\r
+                                                       *   macro.\r
+                                                       */\r
+                       } USB_StdDescriptor_Configuration_Header_t;\r
+\r
+                       /** Type define for a standard Interface Descriptor. This structure uses LUFA-specific element names\r
+                        *  to make each element's purpose clearer.\r
+                        *\r
+                        *  \see \ref USB_StdDescriptor_Interface_t for the version of this define with standard element names\r
                         */\r
                        typedef struct\r
                        {\r
-                               #if defined(USE_NONSTANDARD_DESCRIPTOR_NAMES) || defined(__DOXYGEN__)\r
                                USB_Descriptor_Header_t Header; /**< Descriptor header, including type and size. */\r
 \r
-                               uint8_t                 InterfaceNumber; /**< Index of the interface in the current configuration. */\r
-                               uint8_t                 AlternateSetting; /**< Alternate setting for the interface number. The same\r
-                                                                          *   interface number can have multiple alternate settings\r
-                                                                          *   with different endpoint configurations, which can be\r
-                                                                          *   selected by the host.\r
-                                                                          */\r
-                               uint8_t                 TotalEndpoints; /**< Total number of endpoints in the interface. */\r
+                               uint8_t     InterfaceNumber; /**< Index of the interface in the current configuration. */\r
+                               uint8_t     AlternateSetting; /**< Alternate setting for the interface number. The same\r
+                                                              *   interface number can have multiple alternate settings\r
+                                                              *   with different endpoint configurations, which can be\r
+                                                              *   selected by the host.\r
+                                                              */\r
+                               uint8_t     TotalEndpoints; /**< Total number of endpoints in the interface. */\r
                                \r
-                               uint8_t                 Class; /**< Interface class ID. */\r
-                               uint8_t                 SubClass; /**< Interface subclass ID. */\r
-                               uint8_t                 Protocol; /**< Interface protocol ID. */\r
-\r
-                               uint8_t                 InterfaceStrIndex; /**< Index of the string descriptor describing the\r
-                                                                           *   interface.\r
-                                                                           */\r
-                               #else\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
-                               #endif\r
-                       } USB_Descriptor_Interface_t;\r
+                               uint8_t     Class; /**< Interface class ID. */\r
+                               uint8_t     SubClass; /**< Interface subclass ID. */\r
+                               uint8_t     Protocol; /**< Interface protocol ID. */\r
 \r
-                       /** Type define for a standard Interface Association descriptor.\r
+                               uint8_t     InterfaceStrIndex; /**< Index of the string descriptor describing the\r
+                                                               *   interface.\r
+                                                               */\r
+                       } USB_Descriptor_Interface_t;\r
+                       \r
+                       /** Type define for a standard Interface Descriptor. This structure uses the relevant standard's given element names\r
+                        *  to ensure compatibility with the standard.\r
+                        *\r
+                        *  \see \ref USB_Descriptor_Interface_t for the version of this define with non-standard LUFA specific element names\r
+                        */\r
+                       typedef struct\r
+                       {\r
+                               uint8_t     bLength; /**< Size of the descriptor, in bytes. */\r
+                               uint8_t     bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value\r
+                                                             *   given by the specific class.\r
+                                                             */\r
+                               uint8_t     bInterfaceNumber; /**< Index of the interface in the current configuration. */\r
+                               uint8_t     bAlternateSetting; /**< Alternate setting for the interface number. The same\r
+                                                               *   interface number can have multiple alternate settings\r
+                                                               *   with different endpoint configurations, which can be\r
+                                                               *   selected by the host.\r
+                                                               */\r
+                               uint8_t     bNumEndpoints; /**< Total number of endpoints in the interface. */\r
+                               uint8_t     bInterfaceClass; /**< Interface class ID. */\r
+                               uint8_t     bInterfaceSubClass; /**< Interface subclass ID. */\r
+                               uint8_t     bInterfaceProtocol; /**< Interface protocol ID. */\r
+                               uint8_t     iInterface; /**< Index of the string descriptor describing the\r
+                                                        *   interface.\r
+                                                        */\r
+                       } USB_StdDescriptor_Interface_t;\r
+\r
+                       /** Type define for a standard Interface Association Descriptor. This structure uses LUFA-specific element names\r
+                        *  to make each element's purpose clearer.\r
                         *\r
                         *  This descriptor has been added as a supplement to the USB2.0 standard, in the ECN located at\r
                         *  <a>http://www.usb.org/developers/docs/InterfaceAssociationDescriptor_ecn.pdf</a>. It allows compound\r
                         *  together at the point of enumeration, loading one generic driver for all the interfaces in the single\r
                         *  function. Read the ECN for more information.\r
                         *\r
-                        *  \note The non-standard structure element names are documented here. If the\r
-                        *        USE_NONSTANDARD_DESCRIPTOR_NAMES token is not set, this structure contains elements \r
-                        *        with names identical to those listed in the USB standard.\r
+                        *  \see \ref USB_StdDescriptor_Interface_Association_t for the version of this define with standard element names\r
                         */\r
                        typedef struct\r
                        {\r
-                               #if defined(USE_NONSTANDARD_DESCRIPTOR_NAMES) || defined(__DOXYGEN__)\r
                                USB_Descriptor_Header_t Header; /**< Descriptor header, including type and size. */\r
                                \r
-                               uint8_t                 FirstInterfaceIndex; /**< Index of the first associated interface. */\r
-                               uint8_t                 TotalInterfaces; /** Total number of associated interfaces. */\r
-\r
-                               uint8_t                 Class; /**< Interface class ID. */\r
-                               uint8_t                 SubClass; /**< Interface subclass ID. */\r
-                               uint8_t                 Protocol; /**< Interface protocol ID. */\r
-\r
-                               uint8_t                 IADStrIndex; /**< Index of the string descriptor describing the\r
-                                                                     *   interface association.\r
-                                                                     */\r
-                               #else\r
-                               uint8_t                 bLength;\r
-                               uint8_t                 bDescriptorType;\r
-                               uint8_t                 bFirstInterface;\r
-                               uint8_t                 bInterfaceCount;\r
-                               uint8_t                 bFunctionClass;\r
-                               uint8_t                 bFunctionSubClass;\r
-                               uint8_t                 bFunctionProtocol;\r
-                               uint8_t                 iFunction;\r
-                               #endif\r
-                       } USB_Descriptor_Interface_Association_t;\r
+                               uint8_t     FirstInterfaceIndex; /**< Index of the first associated interface. */\r
+                               uint8_t     TotalInterfaces; /** Total number of associated interfaces. */\r
 \r
-                       /** Type define for a standard endpoint descriptor.\r
+                               uint8_t     Class; /**< Interface class ID. */\r
+                               uint8_t     SubClass; /**< Interface subclass ID. */\r
+                               uint8_t     Protocol; /**< Interface protocol ID. */\r
+\r
+                               uint8_t     IADStrIndex; /**< Index of the string descriptor describing the\r
+                                                         *   interface association.\r
+                                                         */\r
+                       } USB_Descriptor_Interface_Association_t;\r
+                               \r
+                       /** Type define for a standard Interface Association Descriptor. This structure uses the relevant standard's given\r
+                        *  element names to ensure compatibility with the standard.\r
                         *\r
-                        *  \note The non-standard structure element names are documented here. If the\r
-                        *        USE_NONSTANDARD_DESCRIPTOR_NAMES token is not set, this structure contains elements \r
-                        *        with names identical to those listed in the USB standard.\r
-                       */\r
+                        *  This descriptor has been added as a supplement to the USB2.0 standard, in the ECN located at\r
+                        *  <a>http://www.usb.org/developers/docs/InterfaceAssociationDescriptor_ecn.pdf</a>. It allows compound\r
+                        *  devices with multiple interfaces related to the same function to have the multiple interfaces bound\r
+                        *  together at the point of enumeration, loading one generic driver for all the interfaces in the single\r
+                        *  function. Read the ECN for more information.\r
+                        *\r
+                        *  \see \ref USB_Descriptor_Interface_Association_t for the version of this define with non-standard LUFA specific\r
+                        *       element names\r
+                        */\r
+                       typedef struct\r
+                       {\r
+                               uint8_t     bLength; /**< Size of the descriptor, in bytes. */\r
+                               uint8_t     bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value\r
+                                                             *   given by the specific class.\r
+                                                             */\r
+                               uint8_t     bFirstInterface; /**< Index of the first associated interface. */\r
+                               uint8_t     bInterfaceCount; /** Total number of associated interfaces. */\r
+                               uint8_t     bFunctionClass; /**< Interface class ID. */\r
+                               uint8_t     bFunctionSubClass; /**< Interface subclass ID. */\r
+                               uint8_t     bFunctionProtocol; /**< Interface protocol ID. */\r
+                               uint8_t     iFunction; /**< Index of the string descriptor describing the\r
+                                                       *   interface association.\r
+                                                       */\r
+                       } USB_StdDescriptor_Interface_Association_t;\r
+\r
+                       /** Type define for a standard Endpoint Descriptor. This structure uses LUFA-specific element names\r
+                        *  to make each element's purpose clearer.\r
+                        *\r
+                        *  \see \ref USB_StdDescriptor_Endpoint_t for the version of this define with standard element names\r
+                        */\r
                        typedef struct\r
                        {\r
-                               #if defined(USE_NONSTANDARD_DESCRIPTOR_NAMES) || defined(__DOXYGEN__)\r
                                USB_Descriptor_Header_t Header; /**< Descriptor header, including type and size. */\r
 \r
-                               uint8_t                 EndpointAddress; /**< Logical address of the endpoint within the device\r
-                                                                         *   for the current configuration, including direction\r
-                                                                         *   mask.\r
-                                                                         */\r
-                               uint8_t                 Attributes; /**< Endpoint attributes, comprised of a mask of the\r
-                                                                    *   endpoint type (EP_TYPE_*) and attributes (ENDPOINT_ATTR_*)\r
-                                                                    *   masks.\r
-                                                                    */\r
-                               uint16_t                EndpointSize; /**< Size of the endpoint bank, in bytes. This indicates the\r
-                                                                      *   maximum packet size that the endpoint can receive at a time.\r
-                                                                      */\r
+                               uint8_t     EndpointAddress; /**< Logical address of the endpoint within the device\r
+                                                             *   for the current configuration, including direction\r
+                                                             *   mask.\r
+                                                             */\r
+                               uint8_t     Attributes; /**< Endpoint attributes, comprised of a mask of the\r
+                                                        *   endpoint type (EP_TYPE_*) and attributes (ENDPOINT_ATTR_*)\r
+                                                        *   masks.\r
+                                                        */\r
+                               uint16_t    EndpointSize; /**< Size of the endpoint bank, in bytes. This indicates the\r
+                                                          *   maximum packet size that the endpoint can receive at a time.\r
+                                                          */\r
                                \r
-                               uint8_t                 PollingIntervalMS; /**< Polling interval in milliseconds for the endpoint\r
-                                                                           *   if it is an INTERRUPT or ISOCHRONOUS type.\r
-                                                                           */\r
-                               #else\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
-                               #endif\r
+                               uint8_t     PollingIntervalMS; /**< Polling interval in milliseconds for the endpoint\r
+                                                               *   if it is an INTERRUPT or ISOCHRONOUS type.\r
+                                                               */\r
                        } USB_Descriptor_Endpoint_t;\r
+                               \r
+                       /** Type define for a standard Endpoint Descriptor. This structure uses the relevant standard's given\r
+                        *  element names to ensure compatibility with the standard.\r
+                        *\r
+                        *  \see \ref USB_Descriptor_Endpoint_t for the version of this define with non-standard LUFA specific\r
+                        *       element names\r
+                        */\r
+                       typedef struct\r
+                       {\r
+                               uint8_t     bLength; /**< Size of the descriptor, in bytes. */\r
+                               uint8_t     bDescriptorType; /**< Type of the descriptor, either a value in \ref USB_DescriptorTypes_t or a value\r
+                                                             *   given by the specific class.\r
+                                                             */\r
+                               uint8_t     bEndpointAddress; /**< Logical address of the endpoint within the device\r
+                                                              *   for the current configuration, including direction\r
+                                                              *   mask.\r
+                                                              */\r
+                               uint8_t     bmAttributes; /**< Endpoint attributes, comprised of a mask of the\r
+                                                          *   endpoint type (EP_TYPE_*) and attributes (ENDPOINT_ATTR_*)\r
+                                                          *   masks.\r
+                                                          */\r
+                               uint16_t    wMaxPacketSize; /**< Size of the endpoint bank, in bytes. This indicates the\r
+                                                            *   maximum packet size that the endpoint can receive at a time.\r
+                                                            */\r
+                               uint8_t     bInterval; /**< Polling interval in milliseconds for the endpoint\r
+                                                       *   if it is an INTERRUPT or ISOCHRONOUS type.\r
+                                                       */\r
+                       } USB_StdDescriptor_Endpoint_t;\r
 \r
                        /** Type define for a standard string descriptor. Unlike other standard descriptors, the length\r
                         *  of the descriptor for placement in the descriptor header must be determined by the \ref USB_STRING_LEN()\r
                         *  This structure should also be used for string index 0, which contains the supported language IDs for\r
                         *  the device as an array.\r
                         *\r
-                        *  \note The non-standard structure element names are documented here. If the\r
-                        *        USE_NONSTANDARD_DESCRIPTOR_NAMES token is not set, this structure contains elements \r
-                        *        with names identical to those listed in the USB standard.\r
+                        *  This structure uses LUFA-specific element names to make each element's purpose clearer.\r
+                        *\r
+                        *  \see \ref USB_StdDescriptor_String_t for the version of this define with standard element names\r
                         */\r
                        typedef struct\r
                        {\r
-                               #if defined(USE_NONSTANDARD_DESCRIPTOR_NAMES) || defined(__DOXYGEN__)\r
                                USB_Descriptor_Header_t Header; /**< Descriptor header, including type and size. */\r
                                \r
-                               int16_t                 UnicodeString[]; /**< String data, as unicode characters (alternatively,\r
-                                                                         *   string language IDs). If normal ASCII characters are\r
-                                                                         *   to be used, they must be added as an array of characters\r
-                                                                         *   rather than a normal C string so that they are widened to\r
-                                                                         *   Unicode size.\r
-                                                                         *\r
-                                                                         *   Under GCC, strings prefixed with the "L" character (before\r
-                                                                         *   the opening string quotation mark) are considered to be\r
-                                                                         *   Unicode strings, and may be used instead of an explicit\r
-                                                                         *   array of ASCII characters.\r
-                                                                         */\r
-                               #else\r
-                               uint8_t                 bLength;\r
-                               uint8_t                 bDescriptorType;\r
-                               int16_t                 bString[];\r
-                               #endif\r
+                               int16_t     UnicodeString[]; /**< String data, as unicode characters (alternatively,\r
+                                                             *   string language IDs). If normal ASCII characters are\r
+                                                             *   to be used, they must be added as an array of characters\r
+                                                             *   rather than a normal C string so that they are widened to\r
+                                                             *   Unicode size.\r
+                                                             *\r
+                                                             *   Under GCC, strings prefixed with the "L" character (before\r
+                                                             *   the opening string quotation mark) are considered to be\r
+                                                             *   Unicode strings, and may be used instead of an explicit\r
+                                                             *   array of ASCII characters.\r
+                                                             */\r
                        } USB_Descriptor_String_t;\r
 \r
+                       /** Type define for a standard string descriptor. Unlike other standard descriptors, the length\r
+                        *  of the descriptor for placement in the descriptor header must be determined by the \ref USB_STRING_LEN()\r
+                        *  macro rather than by the size of the descriptor structure, as the length is not fixed.\r
+                        *\r
+                        *  This structure should also be used for string index 0, which contains the supported language IDs for\r
+                        *  the device as an array.\r
+                        *\r
+                        *  This structure uses the relevant standard's given element names to ensure compatibility with the standard.\r
+                        *\r
+                        *  \see \ref USB_Descriptor_String_t for the version of this define with with non-standard LUFA specific\r
+                        *       element names\r
+                        */\r
+                       typedef struct\r
+                       {\r
+                                       uint8_t                 bLength; /**< Size of the descriptor, in bytes. */\r
+                                       uint8_t                 bDescriptorType; /**< Type of the descriptor, either a value in\r
+                                                                                 *   \ref USB_DescriptorTypes_t or a value\r
+                                                                             *   given by the specific class.\r
+                                                                             */\r
+                                       int16_t                 bString[]; /**< String data, as unicode characters (alternatively,\r
+                                                                       *   string language IDs). If normal ASCII characters are\r
+                                                                       *   to be used, they must be added as an array of characters\r
+                                                                       *   rather than a normal C string so that they are widened to\r
+                                                                       *   Unicode size.\r
+                                                                       *\r
+                                                                       *   Under GCC, strings prefixed with the "L" character (before\r
+                                                                       *   the opening string quotation mark) are considered to be\r
+                                                                       *   Unicode strings, and may be used instead of an explicit\r
+                                                                       *   array of ASCII characters.\r
+                                                                       */\r
+                       } USB_StdDescriptor_String_t;\r
+\r
        /* Private Interface - For use in library only: */\r
        #if !defined(__DOXYGEN__)\r
                /* Macros: */\r