Update UC3 platform driver support to use the bitmasks defined in the header files...
[pub/USBasp.git] / LUFA / Drivers / USB / Core / ConfigDescriptor.h
index 2f0ac8e..85cee46 100644 (file)
 */
 
 /** \file
- *  \brief Configuration descriptor parser API.
- *
- *  This section of the library gives a friendly API which can be used in host applications to easily
- *  parse an attached device's configuration descriptor so that endpoint, interface and other descriptor
- *  data can be extracted and used as needed.
+ *  \brief USB Configuration Descriptor definitions.
+ *  \copydetails Group_ConfigDescriptorParser
  *
  *  \note This file should not be included directly. It is automatically included as needed by the USB driver
  *        dispatch header located in LUFA/Drivers/USB/USB.h.
 
 /** \ingroup Group_Descriptors
  *  \defgroup Group_ConfigDescriptorParser Configuration Descriptor Parser
+ *  \brief USB Configuration Descriptor definitions.
  *
- *  Functions, macros, variables, enums and types related to the parsing of Configuration Descriptors.
+ *  This section of the library gives a friendly API which can be used in host applications to easily
+ *  parse an attached device's configuration descriptor so that endpoint, interface and other descriptor
+ *  data can be extracted and used as needed.
  *
  *  @{
  */
@@ -52,8 +52,8 @@
 
        /* Includes: */
                #include "../../../Common/Common.h"
+               #include "USBMode.h"            
                #include "HostStandardReq.h"
-               #include "USBMode.h"
                #include "StdDescriptors.h"
 
        /* Enable C linkage for C++ Compilers: */
                         *
                         *  \return A value from the \ref USB_Host_GetConfigDescriptor_ErrorCodes_t enum.
                         */
-                       uint8_t USB_Host_GetDeviceConfigDescriptor(uint8_t ConfigNumber, uint16_t* const ConfigSizePtr, void* BufferPtr,
-                                                                  uint16_t BufferSize) ATTR_NON_NULL_PTR_ARG(2) ATTR_NON_NULL_PTR_ARG(3);
+                       uint8_t USB_Host_GetDeviceConfigDescriptor(const uint8_t ConfigNumber,
+                                                                  uint16_t* const ConfigSizePtr,
+                                                                  void* const BufferPtr,
+                                                                  const uint16_t BufferSize) ATTR_NON_NULL_PTR_ARG(2) ATTR_NON_NULL_PTR_ARG(3);
 
                        /** Skips to the next sub-descriptor inside the configuration descriptor of the specified type value.
                         *  The bytes remaining value is automatically decremented.
                                                                 void** CurrConfigLoc)
                        {
                                uint16_t CurrDescriptorSize = DESCRIPTOR_CAST(*CurrConfigLoc, USB_Descriptor_Header_t).Size;
+                               
+                               if (*BytesRem < CurrDescriptorSize)
+                                 CurrDescriptorSize = *BytesRem;
 
-                               *CurrConfigLoc  = ((uint8_t*)*CurrConfigLoc) + CurrDescriptorSize;
+                               *CurrConfigLoc  = (void*)((uintptr_t)*CurrConfigLoc + CurrDescriptorSize);
                                *BytesRem      -= CurrDescriptorSize;
                        }