From 995195a2b06142fb0882cf116a12bdab8e19603f Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Tue, 12 Apr 2011 03:03:56 +0000 Subject: Add missing function attributes to the pipe/endpoint functions for all architectures. Perform endianness correction in the HID report parser for big-endian platforms. --- LUFA/Common/Common.h | 12 +++++++++++- LUFA/Common/Endianness.h | 24 ++++++++++++------------ LUFA/Drivers/USB/Class/Common/HIDParser.c | 4 ++-- LUFA/Drivers/USB/Class/Device/Audio.c | 4 +--- LUFA/Drivers/USB/Core/AVR8/Device_AVR8.h | 3 ++- LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.h | 1 + LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h | 1 + LUFA/Drivers/USB/Core/AVR8/OTG_AVR8.h | 2 +- LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.h | 3 ++- LUFA/Drivers/USB/Core/UC3/Device_UC3.h | 3 ++- LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h | 1 + LUFA/Drivers/USB/Core/UC3/Host_UC3.h | 1 + LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h | 3 ++- LUFA/Drivers/USB/Core/USBTask.h | 2 +- 14 files changed, 40 insertions(+), 24 deletions(-) (limited to 'LUFA') diff --git a/LUFA/Common/Common.h b/LUFA/Common/Common.h index 9d64403bc..6a9356bbb 100644 --- a/LUFA/Common/Common.h +++ b/LUFA/Common/Common.h @@ -232,6 +232,15 @@ * assembly output in an unexpected manner on sections of code that are ordering-specific. */ #define GCC_MEMORY_BARRIER() __asm__ __volatile__("" ::: "memory"); + + /** Evaluates to boolean true if the specified value can be determined at compile time to be a constant value + * when compiling under GCC. + * + * \param[in] x Value to check compile time constantness of. + * + * \return Boolean true if the given value is known to be a compile time constant. + */ + #define GCC_IS_COMPILE_CONST(x) __builtin_constant_p(x) #if !defined(ISR) || defined(__DOXYGEN__) /** Macro for the definition of interrupt service routines, so that the compiler can insert the required @@ -273,10 +282,11 @@ * * \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) { #if (ARCH == ARCH_AVR8) - if (__builtin_constant_p(Milliseconds)) + if (GCC_IS_COMPILE_CONST(Milliseconds)) { _delay_ms(Milliseconds); } diff --git a/LUFA/Common/Endianness.h b/LUFA/Common/Endianness.h index f7bc33677..ef8c1a788 100644 --- a/LUFA/Common/Endianness.h +++ b/LUFA/Common/Endianness.h @@ -74,7 +74,7 @@ * * \ingroup Group_ByteSwapping * - * \param[in] x 16-bit value whose byte ordering is to be swapped. + * \param[in] x 16-bit value whose byte ordering is to be swapped. * * \return Input value with the byte ordering reversed. */ @@ -87,7 +87,7 @@ * * \ingroup Group_ByteSwapping * - * \param[in] x 32-bit value whose byte ordering is to be swapped. + * \param[in] x 32-bit value whose byte ordering is to be swapped. * * \return Input value with the byte ordering reversed. */ @@ -440,24 +440,24 @@ * * \ingroup Group_ByteSwapping * - * \param[in,out] Data Pointer to a number containing an even number of bytes to be reversed. - * \param[in] Bytes Length of the data in bytes. + * \param[in,out] Data Pointer to a number containing an even number of bytes to be reversed. + * \param[in] Length Length of the data in bytes. */ - static inline void SwapEndian_n(void* Data, - uint8_t Bytes) ATTR_NON_NULL_PTR_ARG(1); - static inline void SwapEndian_n(void* Data, - uint8_t Bytes) + static inline void SwapEndian_n(void* const Data, + uint8_t Length) ATTR_NON_NULL_PTR_ARG(1); + static inline void SwapEndian_n(void* const Data, + uint8_t Length) { uint8_t* CurrDataPos = (uint8_t*)Data; - while (Bytes > 1) + while (Length > 1) { uint8_t Temp = *CurrDataPos; - *CurrDataPos = *(CurrDataPos + Bytes - 1); - *(CurrDataPos + Bytes - 1) = Temp; + *CurrDataPos = *(CurrDataPos + Length - 1); + *(CurrDataPos + Length - 1) = Temp; CurrDataPos++; - Bytes -= 2; + Length -= 2; } } diff --git a/LUFA/Drivers/USB/Class/Common/HIDParser.c b/LUFA/Drivers/USB/Class/Common/HIDParser.c index f6c48fdad..20fceab64 100644 --- a/LUFA/Drivers/USB/Class/Common/HIDParser.c +++ b/LUFA/Drivers/USB/Class/Common/HIDParser.c @@ -61,12 +61,12 @@ uint8_t USB_ProcessHIDReport(const uint8_t* ReportData, switch (HIDReportItem & HID_RI_DATA_SIZE_MASK) { case HID_RI_DATA_BITS_32: - ReportItemData = *((uint32_t*)ReportData); + ReportItemData = le32_to_cpu(*((uint32_t*)ReportData)); ReportSize -= 4; ReportData += 4; break; case HID_RI_DATA_BITS_16: - ReportItemData = *((uint16_t*)ReportData); + ReportItemData = le16_to_cpu(*((uint16_t*)ReportData)); ReportSize -= 2; ReportData += 2; break; diff --git a/LUFA/Drivers/USB/Class/Device/Audio.c b/LUFA/Drivers/USB/Class/Device/Audio.c index 986e73f9c..f18db7456 100644 --- a/LUFA/Drivers/USB/Class/Device/Audio.c +++ b/LUFA/Drivers/USB/Class/Device/Audio.c @@ -88,9 +88,7 @@ bool Audio_Device_ConfigureEndpoints(USB_ClassInfo_Audio_Device_t* const AudioIn } if (!(Endpoint_ConfigureEndpoint(EndpointNum, Type, Direction, Size, ENDPOINT_BANK_DOUBLE))) - { - return false; - } + return false; } return true; diff --git a/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.h b/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.h index 47f58b27d..f88c2f1b2 100644 --- a/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.h +++ b/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.h @@ -137,6 +137,7 @@ /** Returns the current USB frame number, when in device mode. Every millisecond the USB bus is active (i.e. enumerated to a host) * the frame number is incremented by one. */ + static inline uint16_t USB_Device_GetFrameNumber(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint16_t USB_Device_GetFrameNumber(void) { return UDFNUM; @@ -191,7 +192,7 @@ UDADDR |= (1 << ADDEN); } - static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE; + static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline bool USB_Device_IsAddressSet(void) { return (UDADDR & (1 << ADDEN)); diff --git a/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.h b/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.h index 166a49c7d..1727da0d8 100644 --- a/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.h +++ b/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.h @@ -394,6 +394,7 @@ * * \return Total number of busy banks in the selected endpoint. */ + static inline uint8_t Endpoint_GetBusyBanks(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint8_t Endpoint_GetBusyBanks(void) { return (UESTA0X & (0x03 << NBUSYBK0)); diff --git a/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h b/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h index 2bf13cd26..836c83b67 100644 --- a/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h +++ b/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h @@ -140,6 +140,7 @@ /** Returns the current USB frame number, when in host mode. Every millisecond the USB bus is active (i.e. not suspended) * the frame number is incremented by one. */ + static inline uint16_t USB_Host_GetFrameNumber(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint16_t USB_Host_GetFrameNumber(void) { return UHFNUM; diff --git a/LUFA/Drivers/USB/Core/AVR8/OTG_AVR8.h b/LUFA/Drivers/USB/Core/AVR8/OTG_AVR8.h index a79033753..fda145c1e 100644 --- a/LUFA/Drivers/USB/Core/AVR8/OTG_AVR8.h +++ b/LUFA/Drivers/USB/Core/AVR8/OTG_AVR8.h @@ -93,7 +93,7 @@ * * \return Boolean \c true if currently sending a HNP to the other connected device, \c false otherwise */ - static inline bool USB_OTG_Device_IsSendingHNP(void) ATTR_ALWAYS_INLINE; + static inline bool USB_OTG_Device_IsSendingHNP(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline bool USB_OTG_Device_IsSendingHNP(void) { return ((OTGCON & (1 << HNPREQ)) ? true : false); diff --git a/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.h b/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.h index 2e89f6de4..8022a812a 100644 --- a/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.h +++ b/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.h @@ -273,7 +273,7 @@ * * \return The current pipe token, as a \c PIPE_TOKEN_* mask. */ - static inline uint8_t Pipe_GetPipeToken(void) ATTR_ALWAYS_INLINE; + static inline uint8_t Pipe_GetPipeToken(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Pipe_GetPipeToken(void) { return (UPCFG0X & (0x03 << PTOKEN0)); @@ -433,6 +433,7 @@ * * \return Total number of busy banks in the selected pipe. */ + static inline uint8_t Pipe_GetBusyBanks(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Pipe_GetBusyBanks(void) { return (UPSTAX & (0x03 << NBUSYBK0)); diff --git a/LUFA/Drivers/USB/Core/UC3/Device_UC3.h b/LUFA/Drivers/USB/Core/UC3/Device_UC3.h index 2a029bf08..ed7409856 100644 --- a/LUFA/Drivers/USB/Core/UC3/Device_UC3.h +++ b/LUFA/Drivers/USB/Core/UC3/Device_UC3.h @@ -127,6 +127,7 @@ /** Returns the current USB frame number, when in device mode. Every millisecond the USB bus is active (i.e. enumerated to a host) * the frame number is incremented by one. */ + static inline uint16_t USB_Device_GetFrameNumber(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint16_t USB_Device_GetFrameNumber(void) { return AVR32_USBB.UDFNUM.fnum; @@ -179,7 +180,7 @@ AVR32_USBB.UDCON.adden = true; } - static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE; + static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline bool USB_Device_IsAddressSet(void) { return AVR32_USBB.UDCON.adden; diff --git a/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h b/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h index 43e432b04..4f31a0d86 100644 --- a/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h +++ b/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h @@ -402,6 +402,7 @@ * * \return Total number of busy banks in the selected endpoint. */ + static inline uint8_t Endpoint_GetBusyBanks(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; static inline uint8_t Endpoint_GetBusyBanks(void) { return (&AVR32_USBB.UESTA0)[USB_SelectedEndpoint].nbusybk; diff --git a/LUFA/Drivers/USB/Core/UC3/Host_UC3.h b/LUFA/Drivers/USB/Core/UC3/Host_UC3.h index 4d08a4c98..6040eb32b 100644 --- a/LUFA/Drivers/USB/Core/UC3/Host_UC3.h +++ b/LUFA/Drivers/USB/Core/UC3/Host_UC3.h @@ -141,6 +141,7 @@ /** Returns the current USB frame number, when in host mode. Every millisecond the USB bus is active (i.e. not suspended) * the frame number is incremented by one. */ + static inline uint16_t USB_Host_GetFrameNumber(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint16_t USB_Host_GetFrameNumber(void) { return AVR32_USBB_UHFNUM; diff --git a/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h b/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h index 7edfb3e1b..bda3e8e2c 100644 --- a/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h +++ b/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h @@ -284,7 +284,7 @@ * * \return The current pipe token, as a \c PIPE_TOKEN_* mask. */ - static inline uint8_t Pipe_GetPipeToken(void) ATTR_ALWAYS_INLINE; + static inline uint8_t Pipe_GetPipeToken(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Pipe_GetPipeToken(void) { return (&AVR32_USBB.UPCFG0)[USB_SelectedPipe].ptoken; @@ -451,6 +451,7 @@ * * \return Total number of busy banks in the selected pipe. */ + static inline uint8_t Pipe_GetBusyBanks(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; static inline uint8_t Pipe_GetBusyBanks(void) { return (&AVR32_USBB.UPSTA0)[USB_SelectedPipe].nbusybk; diff --git a/LUFA/Drivers/USB/Core/USBTask.h b/LUFA/Drivers/USB/Core/USBTask.h index 267c7e08e..30231bf16 100644 --- a/LUFA/Drivers/USB/Core/USBTask.h +++ b/LUFA/Drivers/USB/Core/USBTask.h @@ -191,7 +191,7 @@ /* Macros: */ #define HOST_TASK_NONBLOCK_WAIT(Duration, NextState) MACROS{ USB_HostState = HOST_STATE_WaitForDevice; \ WaitMSRemaining = (Duration); \ - PostWaitState = (NextState); }MACROE + PostWaitState = (NextState); }MACROE #endif /* Disable C linkage for C++ Compilers: */ -- cgit v1.2.3