Add missing function attributes to the pipe/endpoint functions for all architectures.
Perform endianness correction in the HID report parser for big-endian platforms.
This commit is contained in:
parent
852b5e612d
commit
995195a2b0
14 changed files with 40 additions and 24 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue