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
-     Copyright (C) Dean Camera, 2011.
+     Copyright (C) Dean Camera, 2012.
 
   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
@@ -42,7 +42,7 @@
  *
  *  @{
  */
+
 /** \defgroup Group_GlobalInt Global Interrupt Macros
  *  \brief Convenience macros for the management of interrupts globally within the device.
  *
 
        /* Macros: */
                #define __INCLUDE_FROM_COMMON_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 "Architectures.h"
                #include "Attributes.h"
-               #include "BoardTypes.h"
-               
+
        /* Enable C linkage for C++ Compilers: */
                #if defined(__cplusplus)
                        extern "C" {
                        #include <avr/pgmspace.h>
                        #include <avr/eeprom.h>
                        #include <avr/boot.h>
+                       #include <math.h>
                        #include <util/delay.h>
-                       
+
                        typedef uint8_t uint_reg_t;
-                       
+
                        #define ARCH_HAS_EEPROM_ADDRESS_SPACE
                        #define ARCH_HAS_FLASH_ADDRESS_SPACE
                        #define ARCH_HAS_MULTI_ADDRESS_SPACE
                        // =================================================
 
                        typedef uint32_t uint_reg_t;
-                       
+
                        #define ARCH_BIG_ENDIAN
 
                        #include "Endianness.h"
                        #include <avr/interrupt.h>
                        #include <avr/pgmspace.h>
                        #include <avr/eeprom.h>
+                       #include <math.h>
                        #include <util/delay.h>
-                       
+
                        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
 
-                       #include "Endianness.h"         
+                       #include "Endianness.h"
                #else
                        #error Unknown device architecture specified.
                #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.
                                 *
                                 *  \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: */
                         *  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)
                         *
                         *  \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))
                                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))
                                {
                                        while (Milliseconds--)
                                          _delay_ms(1);
-                               }                               
+                               }
                                #endif
                        }
 
                                else
                                  __builtin_csrf(AVR32_SR_GM_OFFSET);
                                #elif (ARCH == ARCH_XMEGA)
-                               SREG = GlobalIntState;                          
+                               SREG = GlobalIntState;
                                #endif
-                               
+
                                GCC_MEMORY_BARRIER();
                        }
-               
+
                        /** Enables global interrupt handling for the device, allowing interrupts to be handled.
                         *
                         *  \ingroup Group_GlobalInt
                                #endif
 
                                GCC_MEMORY_BARRIER();
-                       }               
+                       }
 
                        /** Disabled global interrupt handling for the device, preventing interrupts from being handled.
                         *