#define VERSION_BCD(x) ((((VERSION_TENS(x) << 4) | VERSION_ONES(x)) << 8) | \\r
((VERSION_TENTHS(x) << 4) | VERSION_HUNDREDTHS(x)))\r
\r
#define VERSION_BCD(x) ((((VERSION_TENS(x) << 4) | VERSION_ONES(x)) << 8) | \\r
((VERSION_TENTHS(x) << 4) | VERSION_HUNDREDTHS(x)))\r
\r
* to indicate that the English language is supported by the device in its string descriptors.\r
*/\r
#define LANGUAGE_ID_ENG 0x0409\r
\r
* to indicate that the English language is supported by the device in its string descriptors.\r
*/\r
#define LANGUAGE_ID_ENG 0x0409\r
\r
* EndpointAddress value to indicate to the host that the endpoint is of the IN direction (i.e, from\r
* device to host).\r
*/\r
#define ENDPOINT_DESCRIPTOR_DIR_IN 0x80\r
\r
* EndpointAddress value to indicate to the host that the endpoint is of the IN direction (i.e, from\r
* device to host).\r
*/\r
#define ENDPOINT_DESCRIPTOR_DIR_IN 0x80\r
\r
* EndpointAddress value to indicate to the host that the endpoint is of the OUT direction (i.e, from\r
* host to device).\r
*/\r
#define ENDPOINT_DESCRIPTOR_DIR_OUT 0x00 \r
\r
* EndpointAddress value to indicate to the host that the endpoint is of the OUT direction (i.e, from\r
* host to device).\r
*/\r
#define ENDPOINT_DESCRIPTOR_DIR_OUT 0x00 \r
\r
* descriptor's ConfigAttributes value to indicate that the specified configuration can draw its power\r
* from the host's VBUS line.\r
*/\r
#define USB_CONFIG_ATTR_BUSPOWERED 0x80\r
\r
* descriptor's ConfigAttributes value to indicate that the specified configuration can draw its power\r
* from the host's VBUS line.\r
*/\r
#define USB_CONFIG_ATTR_BUSPOWERED 0x80\r
\r
* descriptor's ConfigAttributes value to indicate that the specified configuration can draw its power\r
* from the device's own power source.\r
*/\r
#define USB_CONFIG_ATTR_SELFPOWERED 0xC0\r
\r
* descriptor's ConfigAttributes value to indicate that the specified configuration can draw its power\r
* from the device's own power source.\r
*/\r
#define USB_CONFIG_ATTR_SELFPOWERED 0xC0\r
\r
* descriptor's ConfigAttributes value to indicate that the specified configuration supports the\r
* remote wakeup feature of the USB standard, allowing a suspended USB device to wake up the host upon\r
* request.\r
*/\r
#define USB_CONFIG_ATTR_REMOTEWAKEUP 0xA0\r
\r
* descriptor's ConfigAttributes value to indicate that the specified configuration supports the\r
* remote wakeup feature of the USB standard, allowing a suspended USB device to wake up the host upon\r
* request.\r
*/\r
#define USB_CONFIG_ATTR_REMOTEWAKEUP 0xA0\r
\r
* Attributes value to indicate that the specified endpoint is not synchronized.\r
*\r
* \see The USB specification for more details on the possible Endpoint attributes.\r
*/\r
#define ENDPOINT_ATTR_NO_SYNC (0 << 2)\r
\r
* Attributes value to indicate that the specified endpoint is not synchronized.\r
*\r
* \see The USB specification for more details on the possible Endpoint attributes.\r
*/\r
#define ENDPOINT_ATTR_NO_SYNC (0 << 2)\r
\r
* Attributes value to indicate that the specified endpoint is asynchronous.\r
*\r
* \see The USB specification for more details on the possible Endpoint attributes.\r
*/\r
#define ENDPOINT_ATTR_ASYNC (1 << 2)\r
\r
* Attributes value to indicate that the specified endpoint is asynchronous.\r
*\r
* \see The USB specification for more details on the possible Endpoint attributes.\r
*/\r
#define ENDPOINT_ATTR_ASYNC (1 << 2)\r
\r
* Attributes value to indicate that the specified endpoint is adaptive.\r
*\r
* \see The USB specification for more details on the possible Endpoint attributes.\r
*/\r
#define ENDPOINT_ATTR_ADAPTIVE (2 << 2)\r
\r
* Attributes value to indicate that the specified endpoint is adaptive.\r
*\r
* \see The USB specification for more details on the possible Endpoint attributes.\r
*/\r
#define ENDPOINT_ATTR_ADAPTIVE (2 << 2)\r
\r
* Attributes value to indicate that the specified endpoint is synchronized.\r
*\r
* \see The USB specification for more details on the possible Endpoint attributes.\r
*/\r
#define ENDPOINT_ATTR_SYNC (3 << 2)\r
\r
* Attributes value to indicate that the specified endpoint is synchronized.\r
*\r
* \see The USB specification for more details on the possible Endpoint attributes.\r
*/\r
#define ENDPOINT_ATTR_SYNC (3 << 2)\r
\r
* Attributes value to indicate that the specified endpoint is used for data transfers.\r
*\r
* \see The USB specification for more details on the possible Endpoint usage attributes.\r
*/\r
#define ENDPOINT_USAGE_DATA (0 << 4)\r
\r
* Attributes value to indicate that the specified endpoint is used for data transfers.\r
*\r
* \see The USB specification for more details on the possible Endpoint usage attributes.\r
*/\r
#define ENDPOINT_USAGE_DATA (0 << 4)\r
\r
* Attributes value to indicate that the specified endpoint is used for feedback.\r
*\r
* \see The USB specification for more details on the possible Endpoint usage attributes.\r
*/\r
#define ENDPOINT_USAGE_FEEDBACK (1 << 4)\r
\r
* Attributes value to indicate that the specified endpoint is used for feedback.\r
*\r
* \see The USB specification for more details on the possible Endpoint usage attributes.\r
*/\r
#define ENDPOINT_USAGE_FEEDBACK (1 << 4)\r
\r
* Attributes value to indicate that the specified endpoint is used for implicit feedback.\r
*\r
* \see The USB specification for more details on the possible Endpoint usage attributes.\r
* Attributes value to indicate that the specified endpoint is used for implicit feedback.\r
*\r
* \see The USB specification for more details on the possible Endpoint usage attributes.\r
* routine is not hooked in the user application to properly return descriptors to the library.\r
*\r
* \see Events.h for more information on this event.\r
* routine is not hooked in the user application to properly return descriptors to the library.\r
*\r
* \see Events.h for more information on this event.\r
{\r
#if defined(USE_NONSTANDARD_DESCRIPTOR_NAMES) || defined(__DOXYGEN__)\r
uint8_t Size; /**< Size of the descriptor, in bytes. */\r
{\r
#if defined(USE_NONSTANDARD_DESCRIPTOR_NAMES) || defined(__DOXYGEN__)\r
uint8_t Size; /**< Size of the descriptor, in bytes. */\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
*\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
} USB_Descriptor_Endpoint_t;\r
\r
/** Type define for a standard string descriptor. Unlike other standard descriptors, the length\r
} USB_Descriptor_Endpoint_t;\r
\r
/** Type define for a standard string descriptor. Unlike other standard descriptors, the length\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
* 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
/* Function Prototypes: */\r
/** Function to retrieve a given descriptor's size and memory location from the given descriptor type value,\r
* index and language ID. This function MUST be overridden in the user application (added with full, identical \r
/* Function Prototypes: */\r
/** Function to retrieve a given descriptor's size and memory location from the given descriptor type value,\r
* index and language ID. This function MUST be overridden in the user application (added with full, identical \r
* otherwise zero for standard descriptors, or as defined in a class-specific\r
* standards.\r
* \param DescriptorAddress Pointer to the descriptor in memory. This should be set by the routine to\r
* otherwise zero for standard descriptors, or as defined in a class-specific\r
* standards.\r
* \param DescriptorAddress Pointer to the descriptor in memory. This should be set by the routine to\r
*\r
* \note By default, the library expects all descriptors to be located in flash memory via the PROGMEM attribute.\r
* If descriptors should be located in RAM or EEPROM instead (to speed up access in the case of RAM, or to\r
*\r
* \note By default, the library expects all descriptors to be located in flash memory via the PROGMEM attribute.\r
* If descriptors should be located in RAM or EEPROM instead (to speed up access in the case of RAM, or to\r
*/\r
uint16_t USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
ATTR_WARN_UNUSED_RESULT ATTR_WEAK ATTR_NON_NULL_PTR_ARG(3);\r
*/\r
uint16_t USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
ATTR_WARN_UNUSED_RESULT ATTR_WEAK ATTR_NON_NULL_PTR_ARG(3);\r