ble_mesh: Add support for 48 bit data type [Zephyr]
This enables pulling and pushing values in 48 bit format.
This commit is contained in:
parent
be57df5e19
commit
b41d50908b
2 changed files with 138 additions and 0 deletions
|
@ -289,6 +289,30 @@ void net_buf_simple_add_le32(struct net_buf_simple *buf, u32_t val);
|
||||||
*/
|
*/
|
||||||
void net_buf_simple_add_be32(struct net_buf_simple *buf, u32_t val);
|
void net_buf_simple_add_be32(struct net_buf_simple *buf, u32_t val);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Add 48-bit value at the end of the buffer
|
||||||
|
*
|
||||||
|
* Adds 48-bit value in little endian format at the end of buffer.
|
||||||
|
* Increments the data length of a buffer to account for more data
|
||||||
|
* at the end.
|
||||||
|
*
|
||||||
|
* @param buf Buffer to update.
|
||||||
|
* @param val 48-bit value to be added.
|
||||||
|
*/
|
||||||
|
void net_buf_simple_add_le48(struct net_buf_simple *buf, u64_t val);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Add 48-bit value at the end of the buffer
|
||||||
|
*
|
||||||
|
* Adds 48-bit value in big endian format at the end of buffer.
|
||||||
|
* Increments the data length of a buffer to account for more data
|
||||||
|
* at the end.
|
||||||
|
*
|
||||||
|
* @param buf Buffer to update.
|
||||||
|
* @param val 48-bit value to be added.
|
||||||
|
*/
|
||||||
|
void net_buf_simple_add_be48(struct net_buf_simple *buf, u64_t val);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Push data to the beginning of the buffer.
|
* @brief Push data to the beginning of the buffer.
|
||||||
*
|
*
|
||||||
|
@ -444,6 +468,30 @@ u32_t net_buf_simple_pull_le32(struct net_buf_simple *buf);
|
||||||
*/
|
*/
|
||||||
u32_t net_buf_simple_pull_be32(struct net_buf_simple *buf);
|
u32_t net_buf_simple_pull_be32(struct net_buf_simple *buf);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Remove and convert 48 bits from the beginning of the buffer.
|
||||||
|
*
|
||||||
|
* Same idea as with net_buf_simple_pull(), but a helper for operating
|
||||||
|
* on 48-bit little endian data.
|
||||||
|
*
|
||||||
|
* @param buf A valid pointer on a buffer.
|
||||||
|
*
|
||||||
|
* @return 48-bit value converted from little endian to host endian.
|
||||||
|
*/
|
||||||
|
u64_t net_buf_simple_pull_le48(struct net_buf_simple *buf);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Remove and convert 48 bits from the beginning of the buffer.
|
||||||
|
*
|
||||||
|
* Same idea as with net_buf_simple_pull(), but a helper for operating
|
||||||
|
* on 48-bit big endian data.
|
||||||
|
*
|
||||||
|
* @param buf A valid pointer on a buffer.
|
||||||
|
*
|
||||||
|
* @return 48-bit value converted from big endian to host endian.
|
||||||
|
*/
|
||||||
|
u64_t net_buf_simple_pull_be48(struct net_buf_simple *buf);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get the tail pointer for a buffer.
|
* @brief Get the tail pointer for a buffer.
|
||||||
*
|
*
|
||||||
|
@ -982,6 +1030,32 @@ static inline void *net_buf_user_data(struct net_buf *buf)
|
||||||
*/
|
*/
|
||||||
#define net_buf_add_be32(buf, val) net_buf_simple_add_be32(&(buf)->b, val)
|
#define net_buf_add_be32(buf, val) net_buf_simple_add_be32(&(buf)->b, val)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def net_buf_add_le48
|
||||||
|
* @brief Add 48-bit value at the end of the buffer
|
||||||
|
*
|
||||||
|
* Adds 48-bit value in little endian format at the end of buffer.
|
||||||
|
* Increments the data length of a buffer to account for more data
|
||||||
|
* at the end.
|
||||||
|
*
|
||||||
|
* @param buf Buffer to update.
|
||||||
|
* @param val 48-bit value to be added.
|
||||||
|
*/
|
||||||
|
#define net_buf_add_le48(buf, val) net_buf_simple_add_le48(&(buf)->b, val)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def net_buf_add_be48
|
||||||
|
* @brief Add 48-bit value at the end of the buffer
|
||||||
|
*
|
||||||
|
* Adds 48-bit value in big endian format at the end of buffer.
|
||||||
|
* Increments the data length of a buffer to account for more data
|
||||||
|
* at the end.
|
||||||
|
*
|
||||||
|
* @param buf Buffer to update.
|
||||||
|
* @param val 48-bit value to be added.
|
||||||
|
*/
|
||||||
|
#define net_buf_add_be48(buf, val) net_buf_simple_add_be48(&(buf)->b, val)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @def net_buf_push
|
* @def net_buf_push
|
||||||
* @brief Push data to the beginning of the buffer.
|
* @brief Push data to the beginning of the buffer.
|
||||||
|
@ -1150,6 +1224,32 @@ static inline void *net_buf_user_data(struct net_buf *buf)
|
||||||
*/
|
*/
|
||||||
#define net_buf_pull_be32(buf) net_buf_simple_pull_be32(&(buf)->b)
|
#define net_buf_pull_be32(buf) net_buf_simple_pull_be32(&(buf)->b)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def net_buf_pull_le48
|
||||||
|
* @brief Remove and convert 48 bits from the beginning of the buffer.
|
||||||
|
*
|
||||||
|
* Same idea as with net_buf_pull(), but a helper for operating on
|
||||||
|
* 48-bit little endian data.
|
||||||
|
*
|
||||||
|
* @param buf A valid pointer on a buffer.
|
||||||
|
*
|
||||||
|
* @return 48-bit value converted from little endian to host endian.
|
||||||
|
*/
|
||||||
|
#define net_buf_pull_le48(buf) net_buf_simple_pull_le48(&(buf)->b)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @def net_buf_pull_be48
|
||||||
|
* @brief Remove and convert 48 bits from the beginning of the buffer.
|
||||||
|
*
|
||||||
|
* Same idea as with net_buf_pull(), but a helper for operating on
|
||||||
|
* 48-bit big endian data.
|
||||||
|
*
|
||||||
|
* @param buf A valid pointer on a buffer
|
||||||
|
*
|
||||||
|
* @return 48-bit value converted from big endian to host endian.
|
||||||
|
*/
|
||||||
|
#define net_buf_pull_be48(buf) net_buf_simple_pull_be48(&(buf)->b)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @def net_buf_tailroom
|
* @def net_buf_tailroom
|
||||||
* @brief Check buffer tailroom.
|
* @brief Check buffer tailroom.
|
||||||
|
|
|
@ -114,6 +114,20 @@ void net_buf_simple_add_be32(struct net_buf_simple *buf, u32_t val)
|
||||||
memcpy(net_buf_simple_add(buf, sizeof(val)), &val, sizeof(val));
|
memcpy(net_buf_simple_add(buf, sizeof(val)), &val, sizeof(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void net_buf_simple_add_le48(struct net_buf_simple *buf, u64_t val)
|
||||||
|
{
|
||||||
|
NET_BUF_SIMPLE_DBG("buf %p val %" PRIu64, buf, val);
|
||||||
|
|
||||||
|
sys_put_le48(val, net_buf_simple_add(buf, 6));
|
||||||
|
}
|
||||||
|
|
||||||
|
void net_buf_simple_add_be48(struct net_buf_simple *buf, u64_t val)
|
||||||
|
{
|
||||||
|
NET_BUF_SIMPLE_DBG("buf %p val %" PRIu64, buf, val);
|
||||||
|
|
||||||
|
sys_put_be48(val, net_buf_simple_add(buf, 6));
|
||||||
|
}
|
||||||
|
|
||||||
void *net_buf_simple_push(struct net_buf_simple *buf, size_t len)
|
void *net_buf_simple_push(struct net_buf_simple *buf, size_t len)
|
||||||
{
|
{
|
||||||
NET_BUF_SIMPLE_DBG("buf %p len %u", buf, len);
|
NET_BUF_SIMPLE_DBG("buf %p len %u", buf, len);
|
||||||
|
@ -246,6 +260,30 @@ u32_t net_buf_simple_pull_be32(struct net_buf_simple *buf)
|
||||||
return sys_be32_to_cpu(val);
|
return sys_be32_to_cpu(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u64_t net_buf_simple_pull_le48(struct net_buf_simple *buf)
|
||||||
|
{
|
||||||
|
struct uint48 {
|
||||||
|
u64_t u48:48;
|
||||||
|
} __packed val;
|
||||||
|
|
||||||
|
val = UNALIGNED_GET((struct uint48 *)buf->data);
|
||||||
|
net_buf_simple_pull(buf, sizeof(val));
|
||||||
|
|
||||||
|
return sys_le48_to_cpu(val.u48);
|
||||||
|
}
|
||||||
|
|
||||||
|
u64_t net_buf_simple_pull_be48(struct net_buf_simple *buf)
|
||||||
|
{
|
||||||
|
struct uint48 {
|
||||||
|
u64_t u48:48;
|
||||||
|
} __packed val;
|
||||||
|
|
||||||
|
val = UNALIGNED_GET((struct uint48 *)buf->data);
|
||||||
|
net_buf_simple_pull(buf, sizeof(val));
|
||||||
|
|
||||||
|
return sys_be48_to_cpu(val.u48);
|
||||||
|
}
|
||||||
|
|
||||||
size_t net_buf_simple_headroom(struct net_buf_simple *buf)
|
size_t net_buf_simple_headroom(struct net_buf_simple *buf)
|
||||||
{
|
{
|
||||||
return buf->data - buf->__buf;
|
return buf->data - buf->__buf;
|
||||||
|
|
Loading…
Reference in a new issue