Change over Doxygen \note documentation to \pre where applicable.
[pub/USBasp.git] / LUFA / Drivers / USB / HighLevel / ConfigDescriptor.h
index 0995533..91ed492 100644 (file)
                         *
                         *  \see \ref USB_GetNextDescriptorComp function for more details
                         */
-                       typedef uint8_t (* const ConfigComparatorPtr_t)(void*);
-
-               /* Function Prototypes: */
-                       /** Searches for the next descriptor in the given configuration descriptor using a premade comparator
-                        *  function. The routine updates the position and remaining configuration descriptor bytes values
-                        *  automatically. If a comparator routine fails a search, the descriptor pointer is retreated back
-                        *  so that the next descriptor search invocation will start from the descriptor which first caused the
-                        *  original search to fail. This behaviour allows for one comparator to be used immediately after another
-                        *  has failed, starting the second search from the descriptor which failed the first.
-                        *
-                        *  Comparator functions should be standard functions which accept a pointer to the header of the current
-                        *  descriptor inside the configuration descriptor which is being compared, and should return a value from
-                        *  the \ref DSearch_Return_ErrorCodes_t enum as a uint8_t value.
-                        *
-                        *  \note This function is available in USB Host mode only.
-                        *
-                        *  \param[in,out] BytesRem  Pointer to an int storing the remaining bytes in the configuration descriptor
-                        *  \param[in,out] CurrConfigLoc  Pointer to the current position in the configuration descriptor
-                        *  \param[in] ComparatorRoutine  Name of the comparator search function to use on the configuration descriptor
-                        *
-                        *  \return Value of one of the members of the \ref DSearch_Comp_Return_ErrorCodes_t enum
-                        *
-                        *  Usage Example:
-                        *  \code
-                        *  uint8_t EndpointSearcher(void* CurrentDescriptor); // Comparator Prototype
-                        *
-                        *  uint8_t EndpointSearcher(void* CurrentDescriptor)
-                        *  {
-                        *     if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
-                        *         return DESCRIPTOR_SEARCH_Found;
-                        *     else
-                        *         return DESCRIPTOR_SEARCH_NotFound;
-                        *  }
-                        *
-                        *  //...
-                        *  // After retrieving configuration descriptor:
-                        *  if (USB_Host_GetNextDescriptorComp(&BytesRemaining, &CurrentConfigLoc, EndpointSearcher) ==
-                        *      Descriptor_Search_Comp_Found)
-                        *  {
-                        *      // Do something with the endpoint descriptor
-                        *  }
-                        *  \endcode
-                        */
-                       uint8_t USB_GetNextDescriptorComp(uint16_t* BytesRem, void** CurrConfigLoc, ConfigComparatorPtr_t ComparatorRoutine);
+                       typedef uint8_t (* ConfigComparatorPtr_t)(void*);
                        
                /* Enums: */
                        /** Enum for the possible return codes of the \ref USB_Host_GetDeviceConfigDescriptor() function. */
                        /** Retrieves the configuration descriptor data from an attached device via a standard request into a buffer,
                         *  including validity and size checking to prevent a buffer overflow.
                         *
-                        *  \param[in] ConfigNumber  Device configuration descriptor number to fetch from the device (usually set to 1 for
-                        *                           single configuration devices)
+                        *  \param[in]     ConfigNumber   Device configuration descriptor number to fetch from the device (usually set to 1 for
+                        *                                single configuration devices)
                         *  \param[in,out] ConfigSizePtr  Pointer to a uint16_t for storing the retrieved configuration descriptor size
-                        *  \param[out] BufferPtr  Pointer to the buffer for storing the configuration descriptor data.
-                        *  \param[out] BufferSize  Size of the allocated buffer where the configuration descriptor is to be stored
+                        *  \param[out]    BufferPtr      Pointer to the buffer for storing the configuration descriptor data.
+                        *  \param[out]    BufferSize     Size of the allocated buffer where the configuration descriptor is to be stored
                         *
                         *  \return A value from the \ref USB_Host_GetConfigDescriptor_ErrorCodes_t enum
                         */
                        /** Skips to the next sub-descriptor inside the configuration descriptor of the specified type value.
                         *  The bytes remaining value is automatically decremented.
                         *
-                        * \param[in,out] BytesRem  Pointer to the number of bytes remaining of the configuration descriptor
+                        * \param[in,out] BytesRem       Pointer to the number of bytes remaining of the configuration descriptor
                         * \param[in,out] CurrConfigLoc  Pointer to the current descriptor inside the configuration descriptor
-                        * \param[in] Type  Descriptor type value to search for
+                        * \param[in]     Type           Descriptor type value to search for
                         */
                        void USB_GetNextDescriptorOfType(uint16_t* const BytesRem,
                                                         void** const CurrConfigLoc,
                         *  descriptor is reached first, the number of bytes remaining to process is set to zero and the
                         *  function exits. The bytes remaining value is automatically decremented.
                         *
-                        * \param[in,out] BytesRem  Pointer to the number of bytes remaining of the configuration descriptor
+                        * \param[in,out] BytesRem       Pointer to the number of bytes remaining of the configuration descriptor
                         * \param[in,out] CurrConfigLoc  Pointer to the current descriptor inside the configuration descriptor
-                        * \param[in] Type  Descriptor type value to search for
-                        * \param[in] BeforeType  Descriptor type value which must not be reached before the given Type descriptor
+                        * \param[in]     Type           Descriptor type value to search for
+                        * \param[in]     BeforeType     Descriptor type value which must not be reached before the given Type descriptor
                         */
                        void USB_GetNextDescriptorOfTypeBefore(uint16_t* const BytesRem,
                                                               void** const CurrConfigLoc,
                         *  which must come after a descriptor of the second given type value. The bytes remaining value is
                         *  automatically decremented.
                         *
-                        * \param[in,out] BytesRem  Pointer to the number of bytes remaining of the configuration descriptor
+                        * \param[in,out] BytesRem       Pointer to the number of bytes remaining of the configuration descriptor
                         * \param[in,out] CurrConfigLoc  Pointer to the current descriptor inside the configuration descriptor
-                        * \param[in] Type  Descriptor type value to search for
-                        * \param[in] AfterType  Descriptor type value which must be reached before the given Type descriptor
+                        * \param[in]     Type           Descriptor type value to search for
+                        * \param[in]     AfterType      Descriptor type value which must be reached before the given Type descriptor
                         */
                        void USB_GetNextDescriptorOfTypeAfter(uint16_t* const BytesRem,
                                                              void** const CurrConfigLoc,
                                                              const uint8_t AfterType)
                                                              ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);
 
+                       /** Searches for the next descriptor in the given configuration descriptor using a premade comparator
+                        *  function. The routine updates the position and remaining configuration descriptor bytes values
+                        *  automatically. If a comparator routine fails a search, the descriptor pointer is retreated back
+                        *  so that the next descriptor search invocation will start from the descriptor which first caused the
+                        *  original search to fail. This behaviour allows for one comparator to be used immediately after another
+                        *  has failed, starting the second search from the descriptor which failed the first.
+                        *
+                        *  Comparator functions should be standard functions which accept a pointer to the header of the current
+                        *  descriptor inside the configuration descriptor which is being compared, and should return a value from
+                        *  the \ref DSearch_Return_ErrorCodes_t enum as a uint8_t value.
+                        *
+                        *  \note This function is available in USB Host mode only.
+                        *
+                        *  \param[in,out] BytesRem           Pointer to an int storing the remaining bytes in the configuration descriptor
+                        *  \param[in,out] CurrConfigLoc      Pointer to the current position in the configuration descriptor
+                        *  \param[in]     ComparatorRoutine  Name of the comparator search function to use on the configuration descriptor
+                        *
+                        *  \return Value of one of the members of the \ref DSearch_Comp_Return_ErrorCodes_t enum
+                        *
+                        *  Usage Example:
+                        *  \code
+                        *  uint8_t EndpointSearcher(void* CurrentDescriptor); // Comparator Prototype
+                        *
+                        *  uint8_t EndpointSearcher(void* CurrentDescriptor)
+                        *  {
+                        *     if (DESCRIPTOR_TYPE(CurrentDescriptor) == DTYPE_Endpoint)
+                        *         return DESCRIPTOR_SEARCH_Found;
+                        *     else
+                        *         return DESCRIPTOR_SEARCH_NotFound;
+                        *  }
+                        *
+                        *  //...
+                        *  // After retrieving configuration descriptor:
+                        *  if (USB_Host_GetNextDescriptorComp(&BytesRemaining, &CurrentConfigLoc, EndpointSearcher) ==
+                        *      Descriptor_Search_Comp_Found)
+                        *  {
+                        *      // Do something with the endpoint descriptor
+                        *  }
+                        *  \endcode
+                        */
+                       uint8_t USB_GetNextDescriptorComp(uint16_t* BytesRem, void** const CurrConfigLoc, ConfigComparatorPtr_t const ComparatorRoutine);
+
                /* Inline Functions: */
                        /** Skips over the current sub-descriptor inside the configuration descriptor, so that the pointer then
                            points to the next sub-descriptor. The bytes remaining value is automatically decremented.
                         *
-                        * \param[in,out] BytesRem  Pointer to the number of bytes remaining of the configuration descriptor
+                        * \param[in,out] BytesRem       Pointer to the number of bytes remaining of the configuration descriptor
                         * \param[in,out] CurrConfigLoc  Pointer to the current descriptor inside the configuration descriptor
                         */
-                       static inline void USB_GetNextDescriptor(uint16_t* const BytesRem,
-                                                                void** const CurrConfigLoc) 
+                       static inline void USB_GetNextDescriptor(uint16_t* const BytesRem, void** CurrConfigLoc) 
                                                                 ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);                                                                       
-                       static inline void USB_GetNextDescriptor(uint16_t* const BytesRem,
-                                                                void** const CurrConfigLoc)
+                       static inline void USB_GetNextDescriptor(uint16_t* const BytesRem, void** CurrConfigLoc)
                        {
                                uint16_t CurrDescriptorSize = DESCRIPTOR_CAST(*CurrConfigLoc, USB_Descriptor_Header_t).Size;
-
-                               *CurrConfigLoc += CurrDescriptorSize;
+                               
+                               *CurrConfigLoc  = ((uint8_t*)*CurrConfigLoc) + CurrDescriptorSize;
                                *BytesRem      -= CurrDescriptorSize;
                        }
-                       
+               
        /* Disable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                        }