Documentation improvements - put driver example code into its own section, fix incorr...
[pub/USBasp.git] / LUFA / Drivers / USB / HighLevel / ConfigDescriptor.h
index 90e36a4..a406498 100644 (file)
@@ -1,21 +1,21 @@
 /*
              LUFA Library
      Copyright (C) Dean Camera, 2010.
-              
+
   dean [at] fourwalledcubicle [dot] com
-      www.fourwalledcubicle.com
+           www.lufa-lib.org
 */
 
 /*
   Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
-  Permission to use, copy, modify, distribute, and sell this 
+  Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
+  without fee, provided that the above copyright notice appear in
   all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
   software without specific, written prior permission.
 
   The author disclaim all warranties with regard to this
 #define __CONFIGDESCRIPTOR_H__
 
        /* Includes: */
-               #include <avr/io.h>
-               
+               #include <stdint.h>
+
                #include "../../../Common/Common.h"
-               #include "../HighLevel/USBMode.h"
-               #include "../LowLevel/HostChapter9.h"
-               #include "../HighLevel/StdDescriptors.h"
-               
+               #include "HostStandardReq.h"
+               #include "USBMode.h"
+               #include "StdDescriptors.h"
+
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                        extern "C" {
@@ -67,8 +67,8 @@
                #if !defined(__INCLUDE_FROM_USB_DRIVER)
                        #error Do not include this file directly. Include LUFA/Drivers/USB/USB.h instead.
                #endif
-               
-       /* Public Interface - May be used in end-application: */        
+
+       /* Public Interface - May be used in end-application: */
                /* Macros: */
                        /** Mask for determining the type of an endpoint from an endpoint descriptor. This should then be compared
                         *  with the EP_TYPE_* masks to determine the exact type of the endpoint.
                         *  This value's meaning depends on the descriptor's placement in the descriptor, but standard type
                         *  values can be accessed in the \ref USB_DescriptorTypes_t enum.
                         */
-                       #define DESCRIPTOR_TYPE(DescriptorPtr)    DESCRIPTOR_CAST(DescriptorPtr, USB_Descriptor_Header_t).Type
-                       
+                       #define DESCRIPTOR_TYPE(DescriptorPtr)    DESCRIPTOR_PCAST(DescriptorPtr, USB_Descriptor_Header_t)->Type
+
                        /** Returns the descriptor's size, expressed as the 8-bit value indicating the number of bytes. */
-                       #define DESCRIPTOR_SIZE(DescriptorPtr)    DESCRIPTOR_CAST(DescriptorPtr, USB_Descriptor_Header_t).Size
+                       #define DESCRIPTOR_SIZE(DescriptorPtr)    DESCRIPTOR_PCAST(DescriptorPtr, USB_Descriptor_Header_t)->Size
 
                /* Type Defines: */
                        /** Type define for a Configuration Descriptor comparator function (function taking a pointer to an array
                         *  of type void, returning a uint8_t value).
                         *
-                        *  \see \ref USB_GetNextDescriptorComp function for more details
+                        *  \see \ref USB_GetNextDescriptorComp function for more details.
                         */
                        typedef uint8_t (* ConfigComparatorPtr_t)(void*);
-                       
+
                /* Enums: */
                        /** Enum for the possible return codes of the \ref USB_Host_GetDeviceConfigDescriptor() function. */
                        enum USB_Host_GetConfigDescriptor_ErrorCodes_t
                        {
-                               HOST_GETCONFIG_Successful       = 0, /**< No error occurred while retrieving the configuration descriptor */
+                               HOST_GETCONFIG_Successful       = 0, /**< No error occurred while retrieving the configuration descriptor. */
                                HOST_GETCONFIG_DeviceDisconnect = 1, /**< The attached device was disconnected while retrieving the configuration
-                                                                       * descriptor
+                                                                       * descriptor.
                                                                        */
-                               HOST_GETCONFIG_PipeError        = 2, /**< An error occurred in the pipe while sending the request */
+                               HOST_GETCONFIG_PipeError        = 2, /**< An error occurred in the pipe while sending the request. */
                                HOST_GETCONFIG_SetupStalled     = 3, /**< The attached device stalled the request to retrieve the configuration
-                                                                       * descriptor
+                                                                       * descriptor.
                                                                        */
-                               HOST_GETCONFIG_SoftwareTimeOut  = 4, /**< The request or data transfer timed out */
+                               HOST_GETCONFIG_SoftwareTimeOut  = 4, /**< The request or data transfer timed out. */
                                HOST_GETCONFIG_BuffOverflow     = 5, /**< The device's configuration descriptor is too large to fit into the allocated
-                                                                       * buffer
+                                                                       * buffer.
                                                                        */
-                               HOST_GETCONFIG_InvalidData      = 6, /**< The device returned invalid configuration descriptor data */
+                               HOST_GETCONFIG_InvalidData      = 6, /**< The device returned invalid configuration descriptor data. */
                        };
-               
+
                        /** Enum for return values of a descriptor comparator function. */
                        enum DSearch_Return_ErrorCodes_t
                        {
                                DESCRIPTOR_SEARCH_COMP_Fail            = 1, /**< Comparator function returned Descriptor_Search_Fail. */
                                DESCRIPTOR_SEARCH_COMP_EndOfDescriptor = 2, /**< End of configuration descriptor reached before match found. */
                        };
-       
+
                /* Function Prototypes: */
                        /** 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,out] ConfigSizePtr  Pointer to a uint16_t for storing the retrieved configuration descriptor size
+                        *                                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]    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
+                        *  \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);
                        /** 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] CurrConfigLoc  Pointer to the current descriptor inside the configuration descriptor
-                        * \param[in]     Type           Descriptor type value to search for
+                        * \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.
                         */
                        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] 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,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.
                         */
                        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] 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,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.
                         */
                        void USB_GetNextDescriptorOfTypeAfter(uint16_t* const BytesRem,
                                                              void** const CurrConfigLoc,
                         *  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 behavior allows for one comparator to be used immediately after another
+                        *  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
                         *
                         *  \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
+                        *  \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
+                        *  \return Value of one of the members of the \ref DSearch_Comp_Return_ErrorCodes_t enum.
                         *
                         *  Usage Example:
                         *  \code
                         *  }
                         *  \endcode
                         */
-                       uint8_t USB_GetNextDescriptorComp(uint16_t* BytesRem, void** const CurrConfigLoc, ConfigComparatorPtr_t const ComparatorRoutine);
+                       uint8_t USB_GetNextDescriptorComp(uint16_t* const 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] CurrConfigLoc  Pointer to the current descriptor inside 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** CurrConfigLoc) 
-                                                                ATTR_NON_NULL_PTR_ARG(1) ATTR_NON_NULL_PTR_ARG(2);                                                                       
-                       static inline void USB_GetNextDescriptor(uint16_t* const BytesRem, void** 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** CurrConfigLoc)
                        {
                                uint16_t CurrDescriptorSize = DESCRIPTOR_CAST(*CurrConfigLoc, USB_Descriptor_Header_t).Size;
-                               
+
                                *CurrConfigLoc  = ((uint8_t*)*CurrConfigLoc) + CurrDescriptorSize;
                                *BytesRem      -= CurrDescriptorSize;
                        }
-               
+
        /* Disable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                        }
 #endif
 
 /** @} */
+