bindesc: Add maximum data size and assertion
Add a Kconfig symbol to limit the maximum size of a descriptor's data, enforced by a build assertion. Signed-off-by: Yonatan Schachter <yonatan.schachter@gmail.com>
This commit is contained in:
parent
5da7ba55aa
commit
fd68fc486c
2 changed files with 28 additions and 12 deletions
|
|
@ -171,12 +171,15 @@ extern "C" {
|
||||||
* @param id Unique ID of the descriptor
|
* @param id Unique ID of the descriptor
|
||||||
* @param value A string value for the descriptor
|
* @param value A string value for the descriptor
|
||||||
*/
|
*/
|
||||||
#define BINDESC_STR_DEFINE(name, id, value) \
|
#define BINDESC_STR_DEFINE(name, id, value) \
|
||||||
__BINDESC_ENTRY_DEFINE(name) = { \
|
__BINDESC_ENTRY_DEFINE(name) = { \
|
||||||
.tag = BINDESC_TAG(STR, id), \
|
.tag = BINDESC_TAG(STR, id), \
|
||||||
.len = (uint16_t)sizeof(value), \
|
.len = (uint16_t)sizeof(value), \
|
||||||
.data = value, \
|
.data = value, \
|
||||||
}
|
}; \
|
||||||
|
BUILD_ASSERT(sizeof(value) <= CONFIG_BINDESC_DEFINE_MAX_DATA_SIZE, \
|
||||||
|
"Bindesc " STRINGIFY(name) " exceeded maximum size, consider reducing the" \
|
||||||
|
" size or changing CONFIG_BINDESC_DEFINE_MAX_DATA_SIZE. ")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Define a binary descriptor of type uint.
|
* @brief Define a binary descriptor of type uint.
|
||||||
|
|
@ -217,12 +220,16 @@ extern "C" {
|
||||||
* @param id Unique ID of the descriptor
|
* @param id Unique ID of the descriptor
|
||||||
* @param value A uint8_t array as data for the descriptor
|
* @param value A uint8_t array as data for the descriptor
|
||||||
*/
|
*/
|
||||||
#define BINDESC_BYTES_DEFINE(name, id, value) \
|
#define BINDESC_BYTES_DEFINE(name, id, value) \
|
||||||
__BINDESC_ENTRY_DEFINE(name) = { \
|
__BINDESC_ENTRY_DEFINE(name) = { \
|
||||||
.tag = BINDESC_TAG(BYTES, id), \
|
.tag = BINDESC_TAG(BYTES, id), \
|
||||||
.len = (uint16_t)sizeof((uint8_t [])__DEBRACKET value), \
|
.len = (uint16_t)sizeof((uint8_t [])__DEBRACKET value), \
|
||||||
.data = __DEBRACKET value, \
|
.data = __DEBRACKET value, \
|
||||||
}
|
}; \
|
||||||
|
BUILD_ASSERT(sizeof((uint8_t [])__DEBRACKET value) <= \
|
||||||
|
CONFIG_BINDESC_DEFINE_MAX_DATA_SIZE, \
|
||||||
|
"Bindesc " STRINGIFY(name) " exceeded maximum size, consider reducing the" \
|
||||||
|
" size or changing CONFIG_BINDESC_DEFINE_MAX_DATA_SIZE. ")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Get the value of a string binary descriptor
|
* @brief Get the value of a string binary descriptor
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,15 @@ source "subsys/bindesc/Kconfig.version"
|
||||||
source "subsys/bindesc/Kconfig.build_time"
|
source "subsys/bindesc/Kconfig.build_time"
|
||||||
source "subsys/bindesc/Kconfig.host_info"
|
source "subsys/bindesc/Kconfig.host_info"
|
||||||
|
|
||||||
|
config BINDESC_DEFINE_MAX_DATA_SIZE
|
||||||
|
int "Bindesc max data size"
|
||||||
|
range 4 $(UINT16_MAX)
|
||||||
|
default 128
|
||||||
|
help
|
||||||
|
Determines the maximum size of a binary descriptor's data. The theoretical
|
||||||
|
limit to this value is the maximum value of a uint16_t (65535), in practice
|
||||||
|
it's recommened to keep this value much smaller for easier handling of the data.
|
||||||
|
|
||||||
endif # BINDESC_DEFINE
|
endif # BINDESC_DEFINE
|
||||||
|
|
||||||
endif # BINDESC
|
endif # BINDESC
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue