ble_mesh: Add 48 bit variants [Zephyr]
This adds sys_*_*48 functions that operation on a 48 bits values.
This commit is contained in:
parent
4e1d3974fb
commit
23c8bbcbf5
1 changed files with 105 additions and 0 deletions
|
@ -85,6 +85,15 @@ extern "C" {
|
||||||
(((x) & 0xff) << 24)))
|
(((x) & 0xff) << 24)))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __bswap_48
|
||||||
|
#define __bswap_48(x) ((u64_t) ((((x) >> 40) & 0xff) | \
|
||||||
|
(((x) >> 24) & 0xff00) | \
|
||||||
|
(((x) >> 8) & 0xff0000) | \
|
||||||
|
(((x) & 0xff0000) << 8) | \
|
||||||
|
(((x) & 0xff00) << 24) | \
|
||||||
|
(((x) & 0xff) << 40)))
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef __bswap_64
|
#ifndef __bswap_64
|
||||||
#define __bswap_64(x) ((u64_t) ((((x) >> 56) & 0xff) | \
|
#define __bswap_64(x) ((u64_t) ((((x) >> 56) & 0xff) | \
|
||||||
(((x) >> 40) & 0xff00) | \
|
(((x) >> 40) & 0xff00) | \
|
||||||
|
@ -144,6 +153,22 @@ extern "C" {
|
||||||
* @return 32-bit integer in little-endian format.
|
* @return 32-bit integer in little-endian format.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/** @def sys_le48_to_cpu
|
||||||
|
* @brief Convert 48-bit integer from little-endian to host endianness.
|
||||||
|
*
|
||||||
|
* @param val 48-bit integer in little-endian format.
|
||||||
|
*
|
||||||
|
* @return 48-bit integer in host endianness.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @def sys_cpu_to_le48
|
||||||
|
* @brief Convert 48-bit integer from host endianness to little-endian.
|
||||||
|
*
|
||||||
|
* @param val 48-bit integer in host endianness.
|
||||||
|
*
|
||||||
|
* @return 48-bit integer in little-endian format.
|
||||||
|
*/
|
||||||
|
|
||||||
/** @def sys_be16_to_cpu
|
/** @def sys_be16_to_cpu
|
||||||
* @brief Convert 16-bit integer from big-endian to host endianness.
|
* @brief Convert 16-bit integer from big-endian to host endianness.
|
||||||
*
|
*
|
||||||
|
@ -192,12 +217,30 @@ extern "C" {
|
||||||
* @return 32-bit integer in big-endian format.
|
* @return 32-bit integer in big-endian format.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/** @def sys_be48_to_cpu
|
||||||
|
* @brief Convert 48-bit integer from big-endian to host endianness.
|
||||||
|
*
|
||||||
|
* @param val 48-bit integer in big-endian format.
|
||||||
|
*
|
||||||
|
* @return 48-bit integer in host endianness.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @def sys_cpu_to_be48
|
||||||
|
* @brief Convert 48-bit integer from host endianness to big-endian.
|
||||||
|
*
|
||||||
|
* @param val 48-bit integer in host endianness.
|
||||||
|
*
|
||||||
|
* @return 48-bit integer in big-endian format.
|
||||||
|
*/
|
||||||
|
|
||||||
#define sys_le16_to_cpu(val) (val)
|
#define sys_le16_to_cpu(val) (val)
|
||||||
#define sys_cpu_to_le16(val) (val)
|
#define sys_cpu_to_le16(val) (val)
|
||||||
#define sys_le24_to_cpu(val) (val)
|
#define sys_le24_to_cpu(val) (val)
|
||||||
#define sys_cpu_to_le24(val) (val)
|
#define sys_cpu_to_le24(val) (val)
|
||||||
#define sys_le32_to_cpu(val) (val)
|
#define sys_le32_to_cpu(val) (val)
|
||||||
#define sys_cpu_to_le32(val) (val)
|
#define sys_cpu_to_le32(val) (val)
|
||||||
|
#define sys_le48_to_cpu(val) (val)
|
||||||
|
#define sys_cpu_to_le48(val) (val)
|
||||||
#define sys_le64_to_cpu(val) (val)
|
#define sys_le64_to_cpu(val) (val)
|
||||||
#define sys_cpu_to_le64(val) (val)
|
#define sys_cpu_to_le64(val) (val)
|
||||||
#define sys_be16_to_cpu(val) __bswap_16(val)
|
#define sys_be16_to_cpu(val) __bswap_16(val)
|
||||||
|
@ -206,6 +249,8 @@ extern "C" {
|
||||||
#define sys_cpu_to_be24(val) __bswap_24(val)
|
#define sys_cpu_to_be24(val) __bswap_24(val)
|
||||||
#define sys_be32_to_cpu(val) __bswap_32(val)
|
#define sys_be32_to_cpu(val) __bswap_32(val)
|
||||||
#define sys_cpu_to_be32(val) __bswap_32(val)
|
#define sys_cpu_to_be32(val) __bswap_32(val)
|
||||||
|
#define sys_be48_to_cpu(val) __bswap_48(val)
|
||||||
|
#define sys_cpu_to_be48(val) __bswap_48(val)
|
||||||
#define sys_be64_to_cpu(val) __bswap_64(val)
|
#define sys_be64_to_cpu(val) __bswap_64(val)
|
||||||
#define sys_cpu_to_be64(val) __bswap_64(val)
|
#define sys_cpu_to_be64(val) __bswap_64(val)
|
||||||
|
|
||||||
|
@ -371,6 +416,21 @@ static inline void sys_put_be32(u32_t val, u8_t dst[4])
|
||||||
sys_put_be16(val, &dst[2]);
|
sys_put_be16(val, &dst[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Put a 48-bit integer as big-endian to arbitrary location.
|
||||||
|
*
|
||||||
|
* Put a 48-bit integer, originally in host endianness, to a
|
||||||
|
* potentially unaligned memory location in big-endian format.
|
||||||
|
*
|
||||||
|
* @param val 48-bit integer in host endianness.
|
||||||
|
* @param dst Destination memory address to store the result.
|
||||||
|
*/
|
||||||
|
static inline void sys_put_be48(u64_t val, u8_t dst[6])
|
||||||
|
{
|
||||||
|
sys_put_be16(val >> 32, dst);
|
||||||
|
sys_put_be32(val, &dst[2]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Put a 16-bit integer as little-endian to arbitrary location.
|
* @brief Put a 16-bit integer as little-endian to arbitrary location.
|
||||||
*
|
*
|
||||||
|
@ -416,6 +476,21 @@ static inline void sys_put_le32(u32_t val, u8_t dst[4])
|
||||||
sys_put_le16(val >> 16, &dst[2]);
|
sys_put_le16(val >> 16, &dst[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Put a 48-bit integer as little-endian to arbitrary location.
|
||||||
|
*
|
||||||
|
* Put a 48-bit integer, originally in host endianness, to a
|
||||||
|
* potentially unaligned memory location in little-endian format.
|
||||||
|
*
|
||||||
|
* @param val 48-bit integer in host endianness.
|
||||||
|
* @param dst Destination memory address to store the result.
|
||||||
|
*/
|
||||||
|
static inline void sys_put_le48(u64_t val, u8_t dst[6])
|
||||||
|
{
|
||||||
|
sys_put_le32(val, dst);
|
||||||
|
sys_put_le16(val >> 32, &dst[4]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Put a 64-bit integer as little-endian to arbitrary location.
|
* @brief Put a 64-bit integer as little-endian to arbitrary location.
|
||||||
*
|
*
|
||||||
|
@ -476,6 +551,21 @@ static inline u32_t sys_get_be32(const u8_t src[4])
|
||||||
return ((u32_t)sys_get_be16(&src[0]) << 16) | sys_get_be16(&src[2]);
|
return ((u32_t)sys_get_be16(&src[0]) << 16) | sys_get_be16(&src[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get a 48-bit integer stored in big-endian format.
|
||||||
|
*
|
||||||
|
* Get a 48-bit integer, stored in big-endian format in a potentially
|
||||||
|
* unaligned memory location, and convert it to the host endianness.
|
||||||
|
*
|
||||||
|
* @param src Location of the big-endian 48-bit integer to get.
|
||||||
|
*
|
||||||
|
* @return 48-bit integer in host endianness.
|
||||||
|
*/
|
||||||
|
static inline u64_t sys_get_be48(const u8_t src[6])
|
||||||
|
{
|
||||||
|
return ((u64_t)sys_get_be32(&src[0]) << 32) | sys_get_be16(&src[4]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get a 16-bit integer stored in little-endian format.
|
* @brief Get a 16-bit integer stored in little-endian format.
|
||||||
*
|
*
|
||||||
|
@ -521,6 +611,21 @@ static inline u32_t sys_get_le32(const u8_t src[4])
|
||||||
return ((u32_t)sys_get_le16(&src[2]) << 16) | sys_get_le16(&src[0]);
|
return ((u32_t)sys_get_le16(&src[2]) << 16) | sys_get_le16(&src[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get a 48-bit integer stored in little-endian format.
|
||||||
|
*
|
||||||
|
* Get a 48-bit integer, stored in little-endian format in a potentially
|
||||||
|
* unaligned memory location, and convert it to the host endianness.
|
||||||
|
*
|
||||||
|
* @param src Location of the little-endian 48-bit integer to get.
|
||||||
|
*
|
||||||
|
* @return 48-bit integer in host endianness.
|
||||||
|
*/
|
||||||
|
static inline u64_t sys_get_le48(const u8_t src[6])
|
||||||
|
{
|
||||||
|
return ((u64_t)sys_get_le32(&src[2]) << 32) | sys_get_le16(&src[0]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get a 64-bit integer stored in little-endian format.
|
* @brief Get a 64-bit integer stored in little-endian format.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue