Deleted StdDescriptors.c, renamed USB_GetDescriptor() to CALLBACK_USB_GetDescriptor...
[pub/USBasp.git] / LUFA / Drivers / USB / LowLevel / Device.h
index ea9be4b..cf54345 100644 (file)
                                #define USB_Device_IsUSBSuspended()           ((UDINT &  (1 << SUSPI)) ? true : false)\r
                        #endif\r
 \r
-               /* Enums: */\r
-                       /** Enum for the ErrorCode parameter of the \ref EVENT_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 except for the \ref ATTR_WEAK attribute) so that the library can call it to retrieve descriptor \r
+                        *  data.\r
                         *\r
-                        *  \see Events.h for more information on this event.\r
+                        *  \param 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 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 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
+                        *  \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 \ref Group_Descriptors 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_WEAK ATTR_NON_NULL_PTR_ARG(3);\r
 \r
        /* Private Interface - For use in library only: */\r
        #if !defined(__DOXYGEN__)\r