Add build tests to verify correct compilation of as many modules as possible under...
[pub/USBasp.git] / LUFA / Common / Common.h
index 43df9fb..4c9aa49 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
@@ -42,7 +42,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
 
                #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"
-               
+
        /* 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
                        // =================================================
 
                        typedef uint32_t uint_reg_t;
                        // =================================================
 
                        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
                        #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.
                                 *
                                 *  \param Name  Unique name of the interrupt service routine.
                                 */
                                 *
                                 *  \param 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: */
                         *  etc.
                         *
                         *  \param[in] Byte  Byte of data whose bits are to be reversed.
                         *  etc.
                         *
                         *  \param[in] Byte  Byte of data whose bits are to be reversed.
+                        *
+                        *  \return Input data with the individual bits reversed (mirrored).
                         */
                        static inline uint8_t BitReverse(uint8_t Byte) ATTR_WARN_UNUSED_RESULT ATTR_CONST;
                        static inline uint8_t BitReverse(uint8_t Byte)
                         */
                        static inline uint8_t BitReverse(uint8_t Byte) ATTR_WARN_UNUSED_RESULT ATTR_CONST;
                        static inline uint8_t BitReverse(uint8_t Byte)
                         *
                         *  \param[in] Milliseconds  Number of milliseconds to delay
                         */
                         *
                         *  \param[in] Milliseconds  Number of milliseconds to delay
                         */
-                       static inline void Delay_MS(uint8_t Milliseconds) ATTR_ALWAYS_INLINE;
-                       static inline void Delay_MS(uint8_t Milliseconds)
+                       static inline void Delay_MS(uint16_t Milliseconds) ATTR_ALWAYS_INLINE;
+                       static inline void Delay_MS(uint16_t Milliseconds)
                        {
                                #if (ARCH == ARCH_AVR8)
                                if (GCC_IS_COMPILE_CONST(Milliseconds))
                        {
                                #if (ARCH == ARCH_AVR8)
                                if (GCC_IS_COMPILE_CONST(Milliseconds))
                                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
                        }
 
                                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.
                         *