Start update of documentation to support possible multiple architectures in the futur...
[pub/lufa.git] / LUFA / Drivers / USB / Core / Device.h
index 8c85451..6fa88d3 100644 (file)
 */\r
 \r
 /** \file\r
- *  \brief Common USB device mode definitions.\r
- *\r
- *  This file contains common structures, function prototypes and macros related to USB device mode for all\r
- *  architectures.\r
+ *  \brief Common USB Device definitions for all architectures.\r
+ *  \copydetails Group_Device\r
  *\r
  *  \note This file should not be included directly. It is automatically included as needed by the USB driver\r
  *        dispatch header located in LUFA/Drivers/USB/USB.h.\r
@@ -40,6 +38,7 @@
 \r
 /** \ingroup Group_USB\r
  *  \defgroup Group_Device Device Management\r
+ *  \brief Common USB Device definitions for all architectures.\r
  *\r
  *  USB Device mode related definitions common to all architectures. This module contains definitions which\r
  *  are used when the USB controller is initialized in device mode.\r
                        #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.\r
                #endif\r
 \r
+       /* Public Interface - May be used in end-application: */\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 \c wValue type indicates\r
+                        *                                  \ref DTYPE_String, otherwise zero for standard descriptors, or as defined in a\r
+                        *                                  class-specific 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
+                        *  \param[out] MemoryAddressSpace  A value from the \ref USB_DescriptorMemorySpaces_t enum to indicate the memory\r
+                        *                                  space in which the descriptor is stored. This parameter does not exist when one\r
+                        *                                  of the \c USE_*_DESCRIPTORS compile time options is used.\r
+                        *\r
+                        *  \note By default, the library expects all descriptors to be located in flash memory via the \c 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 \c USE_RAM_DESCRIPTORS or the\r
+                        *        \c 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
+                       uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,\r
+                                                           const uint8_t wIndex,\r
+                                                           const void** const DescriptorAddress\r
+                       #if !defined(USE_FLASH_DESCRIPTORS) && !defined(USE_EEPROM_DESCRIPTORS) && !defined(USE_RAM_DESCRIPTORS)\r
+                                                           , uint8_t* MemoryAddressSpace\r
+                       #endif\r
+                                                           ) ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);\r
+\r
 #endif\r
 \r
 /** @} */\r