From 9fce1f717ee8d87d160efefd9380999dfd97a9fb Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Mon, 30 Sep 2024 13:57:03 +0200 Subject: [PATCH] btstack_util: add read/write single bytes to little_endian/big_endian functions for symmetry reasons --- src/btstack_util.c | 17 +++++++++++++++++ src/btstack_util.h | 13 +++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/btstack_util.c b/src/btstack_util.c index c7f17316a..7cd2bc913 100644 --- a/src/btstack_util.c +++ b/src/btstack_util.c @@ -74,6 +74,9 @@ void bd_addr_copy(bd_addr_t dest, const bd_addr_t src){ (void)memcpy(dest, src, BD_ADDR_LEN); } +uint8_t little_endian_read_08(const uint8_t* buffer, int position) { + return (uint8_t)buffer[position]; +} uint16_t little_endian_read_16(const uint8_t * buffer, int position){ return (uint16_t)(((uint16_t) buffer[position]) | (((uint16_t)buffer[position+1]) << 8)); } @@ -84,6 +87,11 @@ uint32_t little_endian_read_32(const uint8_t * buffer, int position){ return ((uint32_t) buffer[position]) | (((uint32_t)buffer[position+1]) << 8) | (((uint32_t)buffer[position+2]) << 16) | (((uint32_t) buffer[position+3]) << 24); } +void little_endian_store_08(uint8_t* buffer, uint16_t position, uint8_t value) { + uint16_t pos = position; + buffer[pos] = value; +} + void little_endian_store_16(uint8_t * buffer, uint16_t position, uint16_t value){ uint16_t pos = position; buffer[pos++] = (uint8_t)value; @@ -105,6 +113,10 @@ void little_endian_store_32(uint8_t * buffer, uint16_t position, uint32_t value) buffer[pos++] = (uint8_t)(value >> 24); } +uint32_t big_endian_read_08(const uint8_t* buffer, int position) { + return buffer[position]; +} + uint32_t big_endian_read_16(const uint8_t * buffer, int position) { return (uint16_t)(((uint16_t) buffer[position+1]) | (((uint16_t)buffer[position]) << 8)); } @@ -117,6 +129,11 @@ uint32_t big_endian_read_32(const uint8_t * buffer, int position) { return ((uint32_t) buffer[position+3]) | (((uint32_t)buffer[position+2]) << 8) | (((uint32_t)buffer[position+1]) << 16) | (((uint32_t) buffer[position]) << 24); } +void big_endian_store_08(uint8_t* buffer, uint16_t position, uint8_t value) { + uint16_t pos = position; + buffer[pos++] = (uint8_t)(value); +} + void big_endian_store_16(uint8_t * buffer, uint16_t position, uint16_t value){ uint16_t pos = position; buffer[pos++] = (uint8_t)(value >> 8); diff --git a/src/btstack_util.h b/src/btstack_util.h index f6d154f62..caeeb29ff 100644 --- a/src/btstack_util.h +++ b/src/btstack_util.h @@ -105,41 +105,46 @@ int32_t btstack_time_delta(uint32_t time_a, uint32_t time_b); int16_t btstack_time16_delta(uint16_t time_a, uint16_t time_b); /** - * @brief Read 16/24/32 bit little endian value from buffer + * @brief Read 08/16/24/32 bit little endian value from buffer * @param buffer * @param position in buffer * @return value */ +uint8_t little_endian_read_08(const uint8_t * buffer, int position); uint16_t little_endian_read_16(const uint8_t * buffer, int position); uint32_t little_endian_read_24(const uint8_t * buffer, int position); uint32_t little_endian_read_32(const uint8_t * buffer, int position); + /** - * @brief Write 16/32 bit little endian value into buffer + * @brief Write 08/16/32 bit little endian value into buffer * @param buffer * @param position in buffer * @param value */ +void little_endian_store_08(uint8_t * buffer, uint16_t position, uint8_t value); void little_endian_store_16(uint8_t * buffer, uint16_t position, uint16_t value); void little_endian_store_24(uint8_t * buffer, uint16_t position, uint32_t value); void little_endian_store_32(uint8_t * buffer, uint16_t position, uint32_t value); /** - * @brief Read 16/24/32 bit big endian value from buffer + * @brief Read 08/16/24/32 bit big endian value from buffer * @param buffer * @param position in buffer * @return value */ +uint32_t big_endian_read_08(const uint8_t* buffer, int position); uint32_t big_endian_read_16(const uint8_t * buffer, int position); uint32_t big_endian_read_24(const uint8_t * buffer, int position); uint32_t big_endian_read_32(const uint8_t * buffer, int position); /** - * @brief Write 16/32 bit big endian value into buffer + * @brief Write 08/16/32 bit big endian value into buffer * @param buffer * @param position in buffer * @param value */ +void big_endian_store_08(uint8_t * buffer, uint16_t position, uint8_t value); void big_endian_store_16(uint8_t * buffer, uint16_t position, uint16_t value); void big_endian_store_24(uint8_t * buffer, uint16_t position, uint32_t value); void big_endian_store_32(uint8_t * buffer, uint16_t position, uint32_t value);