* 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