#include "../HighLevel/StdDescriptors.h"\r
#include "Endpoint.h"\r
\r
+ /* Preprocessor Checks: */\r
+ #if (defined(USE_RAM_DESCRIPTORS) && defined(USE_EEPROM_DESCRIPTORS))\r
+ #error USE_RAM_DESCRIPTORS and USE_EEPROM_DESCRIPTORS are mutually exclusive.\r
+ #endif\r
+ \r
/* Public Interface - May be used in end-application: */\r
/* Macros: */\r
- #if defined(USB_FULL_CONTROLLER) || defined(USB_MODIFIED_FULL_CONTROLLER) || defined(__DOXYGEN__)\r
+ #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) || defined(__DOXYGEN__)\r
/** Mask for the Options parameter of the \ref USB_Init() function. This indicates that the\r
* USB interface should be initialized in low speed (1.5Mb/s) mode.\r
*\r
* issued if the host is currently allowing remote wakeup events from the device (i.e.,\r
* the \ref USB_RemoteWakeupEnabled flag is set).\r
*\r
- * \see StdDescriptors.h for more information on the RMWAKEUP feature and device descriptors.\r
+ * \see \ref Group_Descriptors for more information on the RMWAKEUP feature and device descriptors.\r
*/\r
static inline void USB_Device_SendRemoteWakeup(void);\r
\r
* \note This macro should only be used if the device has indicated to the host that it\r
* supports the Remote Wakeup feature in the device descriptors.\r
*\r
- * \see StdDescriptors.h for more information on the RMWAKEUP feature and device descriptors.\r
+ * \see \ref Group_Descriptors for more information on the RMWAKEUP feature and device descriptors.\r
*\r
* \return Boolean true if no Remote Wakeup request is currently being sent, false otherwise\r
*/\r
#define USB_Device_IsUSBSuspended() ((UDINT & (1 << SUSPI)) ? true : false)\r
#endif\r
\r
- /* Enums: */\r
- /** Enum for the ErrorCode parameter of the \ref USB_DeviceError event.\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
+ * prototype and name so that the library can call it to retrieve descriptor data.\r
+ *\r
+ * \param[in] wValue The type of the descriptor to retrieve in the upper byte, and the index in the \r
+ * lower byte (when more than one descriptor of the given type exists, such as the\r
+ * case of string descriptors). The type may be one of the standard types defined\r
+ * in the DescriptorTypes_t enum, or may be a class-specific descriptor type value.\r
+ * \param[in] wIndex The language ID of the string to return if the wValue type indicates DTYPE_String,\r
+ * otherwise zero for standard descriptors, or as defined in a class-specific\r
+ * standards.\r
+ * \param[out] DescriptorAddress Pointer to the descriptor in memory. This should be set by the routine to\r
+ * the address of the descriptor.\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
+ * allow the descriptors to be changed dynamically at runtime) either the USE_RAM_DESCRIPTORS or the \r
+ * USE_EEPROM_DESCRIPTORS tokens may be defined in the project makefile and passed to the compiler by the -D\r
+ * switch.\r
*\r
- * \see Events.h for more information on this event.\r
+ * \return Size in bytes of the descriptor if it exists, zero or \ref NO_DESCRIPTOR otherwise\r
*/\r
- enum USB_Device_ErrorCodes_t\r
- {\r
- DEVICE_ERROR_GetDescriptorNotHooked = 0, /**< Indicates that the \ref USB_GetDescriptor() method\r
- * has not been hooked by the user application.\r
- *\r
- * \see StdDescriptors.h for more information on\r
- * the \ref USB_GetDescriptor() method.\r
- */\r
- };\r
+ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, void** const DescriptorAddress)\r
+ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
\r
/* Private Interface - For use in library only: */\r
#if !defined(__DOXYGEN__)\r