Enable sorting of the member functions in the Doxygen output, so that functions in...
[pub/USBasp.git] / LUFA / Common / Common.h
index a948504..d2d657a 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2011.
+     Copyright (C) Dean Camera, 2012.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
   this software.
 */
 
   this software.
 */
 
+/** \dir
+ *  \brief Common library header files.
+ *
+ *  This folder contains header files which are common to all parts of the LUFA library. They may be used freely in
+ *  user applications.
+ */
+
 /** \file
  *  \brief Common library convenience headers, macros and functions.
  *
 /** \file
  *  \brief Common library convenience headers, macros and functions.
  *
@@ -42,7 +49,7 @@
  *
  *  @{
  */
  *
  *  @{
  */
+
 /** \defgroup Group_GlobalInt Global Interrupt Macros
  *  \brief Convenience macros for the management of interrupts globally within the device.
  *
 /** \defgroup Group_GlobalInt Global Interrupt Macros
  *  \brief Convenience macros for the management of interrupts globally within the device.
  *
 
        /* Macros: */
                #define __INCLUDE_FROM_COMMON_H
 
        /* Macros: */
                #define __INCLUDE_FROM_COMMON_H
-               
+
        /* Includes: */
                #include <stdint.h>
                #include <stdbool.h>
                #include <string.h>
                #include <stddef.h>
        /* Includes: */
                #include <stdint.h>
                #include <stdbool.h>
                #include <string.h>
                #include <stddef.h>
-               
-               #if defined(USE_LUFA_CONFIG_HEADER)
-                       #include "LUFAConfig.h"
-               #endif
 
 
+               #include "Architectures.h"
+               #include "BoardTypes.h"
                #include "ArchitectureSpecific.h"
                #include "CompilerSpecific.h"
                #include "ArchitectureSpecific.h"
                #include "CompilerSpecific.h"
-               #include "Architectures.h"
                #include "Attributes.h"
                #include "Attributes.h"
-               #include "BoardTypes.h"
-               
+
+               #if defined(USE_LUFA_CONFIG_HEADER)
+                       #include "LUFAConfig.h"
+               #endif
+
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                        extern "C" {
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                        extern "C" {
                        #include <avr/pgmspace.h>
                        #include <avr/eeprom.h>
                        #include <avr/boot.h>
                        #include <avr/pgmspace.h>
                        #include <avr/eeprom.h>
                        #include <avr/boot.h>
+                       #include <math.h>
                        #include <util/delay.h>
                        #include <util/delay.h>
-                       
+
                        typedef uint8_t uint_reg_t;
                        typedef uint8_t uint_reg_t;
-                       
+
                        #define ARCH_HAS_EEPROM_ADDRESS_SPACE
                        #define ARCH_HAS_FLASH_ADDRESS_SPACE
                        #define ARCH_HAS_MULTI_ADDRESS_SPACE
                        #define ARCH_HAS_EEPROM_ADDRESS_SPACE
                        #define ARCH_HAS_FLASH_ADDRESS_SPACE
                        #define ARCH_HAS_MULTI_ADDRESS_SPACE
                        #include "Endianness.h"
                #elif (ARCH == ARCH_UC3)
                        #include <avr32/io.h>
                        #include "Endianness.h"
                #elif (ARCH == ARCH_UC3)
                        #include <avr32/io.h>
+                       #include <math.h>
 
                        // === TODO: Find abstracted way to handle these ===
 
                        // === TODO: Find abstracted way to handle these ===
-                       #define PROGMEM                  const
+                       #define PROGMEM                  
                        #define pgm_read_byte(x)         *x
                        #define memcmp_P(...)            memcmp(__VA_ARGS__)
                        #define memcpy_P(...)            memcpy(__VA_ARGS__)
                        // =================================================
 
                        typedef uint32_t uint_reg_t;
                        #define pgm_read_byte(x)         *x
                        #define memcmp_P(...)            memcmp(__VA_ARGS__)
                        #define memcpy_P(...)            memcpy(__VA_ARGS__)
                        // =================================================
 
                        typedef uint32_t uint_reg_t;
-                       
+
                        #define ARCH_BIG_ENDIAN
 
                        #include "Endianness.h"
                        #define ARCH_BIG_ENDIAN
 
                        #include "Endianness.h"
                        #include <avr/interrupt.h>
                        #include <avr/pgmspace.h>
                        #include <avr/eeprom.h>
                        #include <avr/interrupt.h>
                        #include <avr/pgmspace.h>
                        #include <avr/eeprom.h>
+                       #include <math.h>
                        #include <util/delay.h>
                        #include <util/delay.h>
-                       
+
                        typedef uint8_t uint_reg_t;
                        typedef uint8_t uint_reg_t;
-                       
+
                        #define ARCH_HAS_EEPROM_ADDRESS_SPACE
                        #define ARCH_HAS_FLASH_ADDRESS_SPACE
                        #define ARCH_HAS_MULTI_ADDRESS_SPACE
                        #define ARCH_LITTLE_ENDIAN
 
                        #define ARCH_HAS_EEPROM_ADDRESS_SPACE
                        #define ARCH_HAS_FLASH_ADDRESS_SPACE
                        #define ARCH_HAS_MULTI_ADDRESS_SPACE
                        #define ARCH_LITTLE_ENDIAN
 
-                       #include "Endianness.h"         
+                       #include "Endianness.h"
                #else
                        #error Unknown device architecture specified.
                #endif
                #else
                        #error Unknown device architecture specified.
                #endif
 
                        /** Convenience macro to determine the larger of two values.
                         *
 
                        /** Convenience macro to determine the larger of two values.
                         *
-                        *  \note This macro should only be used with operands that do not have side effects from being evaluated
-                        *        multiple times.
+                        *  \attention This macro should only be used with operands that do not have side effects from being evaluated
+                        *             multiple times.
                         *
                         *  \param[in] x  First value to compare
                         *  \param[in] y  First value to compare
                         *
                         *  \param[in] x  First value to compare
                         *  \param[in] y  First value to compare
 
                        /** Convenience macro to determine the smaller of two values.
                         *
 
                        /** Convenience macro to determine the smaller of two values.
                         *
-                        *  \note This macro should only be used with operands that do not have side effects from being evaluated
-                        *        multiple times.
+                        *  \attention This macro should only be used with operands that do not have side effects from being evaluated
+                        *             multiple times.
                         *
                         *  \param[in] x  First value to compare
                         *  \param[in] y  First value to compare
                         *
                         *  \param[in] x  First value to compare
                         *  \param[in] y  First value to compare
                        #if !defined(MIN) || defined(__DOXYGEN__)
                                #define MIN(x, y)               (((x) < (y)) ? (x) : (y))
                        #endif
                        #if !defined(MIN) || defined(__DOXYGEN__)
                                #define MIN(x, y)               (((x) < (y)) ? (x) : (y))
                        #endif
-                       
+
                        #if !defined(STRINGIFY) || defined(__DOXYGEN__)
                                /** Converts the given input into a string, via the C Preprocessor. This macro puts literal quotation
                                 *  marks around the input, converting the source into a string literal.
                        #if !defined(STRINGIFY) || defined(__DOXYGEN__)
                                /** Converts the given input into a string, via the C Preprocessor. This macro puts literal quotation
                                 *  marks around the input, converting the source into a string literal.
                                 *
                                 *  \ingroup Group_GlobalInt
                                 *
                                 *
                                 *  \ingroup Group_GlobalInt
                                 *
-                                *  \param Name  Unique name of the interrupt service routine.
+                                *  \param[in] Name  Unique name of the interrupt service routine.
                                 */
                                 */
-                               #define ISR(Name, ...)                  void Name (void) __attribute__((__interrupt__)) __VA_ARGS__; void Name (void)
+                               #define ISR(Name, ...)          void Name (void) __attribute__((__interrupt__)) __VA_ARGS__; void Name (void)
                        #endif
 
                /* Inline Functions: */
                        #endif
 
                /* Inline Functions: */
                                while (Milliseconds--)
                                {
                                        __builtin_mtsr(AVR32_COUNT, 0);
                                while (Milliseconds--)
                                {
                                        __builtin_mtsr(AVR32_COUNT, 0);
-                                       while (__builtin_mfsr(AVR32_COUNT) < (F_CPU / 1000));                           
+                                       while ((uint32_t)__builtin_mfsr(AVR32_COUNT) < (F_CPU / 1000));
                                }
                                #elif (ARCH == ARCH_XMEGA)
                                if (GCC_IS_COMPILE_CONST(Milliseconds))
                                }
                                #elif (ARCH == ARCH_XMEGA)
                                if (GCC_IS_COMPILE_CONST(Milliseconds))
                                {
                                        while (Milliseconds--)
                                          _delay_ms(1);
                                {
                                        while (Milliseconds--)
                                          _delay_ms(1);
-                               }                               
+                               }
                                #endif
                        }
 
                                #endif
                        }
 
                                #elif (ARCH == ARCH_XMEGA)
                                return SREG;
                                #endif
                                #elif (ARCH == ARCH_XMEGA)
                                return SREG;
                                #endif
-
-                               GCC_MEMORY_BARRIER();
                        }
 
                        /** Sets the global interrupt enable state of the microcontroller to the mask passed into the function.
                        }
 
                        /** Sets the global interrupt enable state of the microcontroller to the mask passed into the function.
                                else
                                  __builtin_csrf(AVR32_SR_GM_OFFSET);
                                #elif (ARCH == ARCH_XMEGA)
                                else
                                  __builtin_csrf(AVR32_SR_GM_OFFSET);
                                #elif (ARCH == ARCH_XMEGA)
-                               SREG = GlobalIntState;                          
+                               SREG = GlobalIntState;
                                #endif
                                #endif
-                               
+
                                GCC_MEMORY_BARRIER();
                        }
                                GCC_MEMORY_BARRIER();
                        }
-               
+
                        /** Enables global interrupt handling for the device, allowing interrupts to be handled.
                         *
                         *  \ingroup Group_GlobalInt
                        /** Enables global interrupt handling for the device, allowing interrupts to be handled.
                         *
                         *  \ingroup Group_GlobalInt
                                #endif
 
                                GCC_MEMORY_BARRIER();
                                #endif
 
                                GCC_MEMORY_BARRIER();
-                       }               
+                       }
 
                        /** Disabled global interrupt handling for the device, preventing interrupts from being handled.
                         *
 
                        /** Disabled global interrupt handling for the device, preventing interrupts from being handled.
                         *