diff --git a/src/btstack_memory.c b/src/btstack_memory.c index 2d978d4e9..60466ac3a 100644 --- a/src/btstack_memory.c +++ b/src/btstack_memory.c @@ -1084,6 +1084,52 @@ void btstack_memory_mesh_transport_key_free(mesh_transport_key_t *mesh_transport #endif +// MARK: mesh_virtual_address_t +#if !defined(HAVE_MALLOC) && !defined(MAX_NR_MESH_VIRTUAL_ADDRESSS) + #if defined(MAX_NO_MESH_VIRTUAL_ADDRESSS) + #error "Deprecated MAX_NO_MESH_VIRTUAL_ADDRESSS defined instead of MAX_NR_MESH_VIRTUAL_ADDRESSS. Please update your btstack_config.h to use MAX_NR_MESH_VIRTUAL_ADDRESSS." + #else + #define MAX_NR_MESH_VIRTUAL_ADDRESSS 0 + #endif +#endif + +#ifdef MAX_NR_MESH_VIRTUAL_ADDRESSS +#if MAX_NR_MESH_VIRTUAL_ADDRESSS > 0 +static mesh_virtual_address_t mesh_virtual_address_storage[MAX_NR_MESH_VIRTUAL_ADDRESSS]; +static btstack_memory_pool_t mesh_virtual_address_pool; +mesh_virtual_address_t * btstack_memory_mesh_virtual_address_get(void){ + void * buffer = btstack_memory_pool_get(&mesh_virtual_address_pool); + if (buffer){ + memset(buffer, 0, sizeof(mesh_virtual_address_t)); + } + return (mesh_virtual_address_t *) buffer; +} +void btstack_memory_mesh_virtual_address_free(mesh_virtual_address_t *mesh_virtual_address){ + btstack_memory_pool_free(&mesh_virtual_address_pool, mesh_virtual_address); +} +#else +mesh_virtual_address_t * btstack_memory_mesh_virtual_address_get(void){ + return NULL; +} +void btstack_memory_mesh_virtual_address_free(mesh_virtual_address_t *mesh_virtual_address){ + // silence compiler warning about unused parameter in a portable way + (void) mesh_virtual_address; +}; +#endif +#elif defined(HAVE_MALLOC) +mesh_virtual_address_t * btstack_memory_mesh_virtual_address_get(void){ + void * buffer = malloc(sizeof(mesh_virtual_address_t)); + if (buffer){ + memset(buffer, 0, sizeof(mesh_virtual_address_t)); + } + return (mesh_virtual_address_t *) buffer; +} +void btstack_memory_mesh_virtual_address_free(mesh_virtual_address_t *mesh_virtual_address){ + free(mesh_virtual_address); +} +#endif + + #endif // init void btstack_memory_init(void){ @@ -1158,5 +1204,8 @@ void btstack_memory_init(void){ #if MAX_NR_MESH_TRANSPORT_KEYS > 0 btstack_memory_pool_create(&mesh_transport_key_pool, mesh_transport_key_storage, MAX_NR_MESH_TRANSPORT_KEYS, sizeof(mesh_transport_key_t)); #endif +#if MAX_NR_MESH_VIRTUAL_ADDRESSS > 0 + btstack_memory_pool_create(&mesh_virtual_address_pool, mesh_virtual_address_storage, MAX_NR_MESH_VIRTUAL_ADDRESSS, sizeof(mesh_virtual_address_t)); +#endif #endif } diff --git a/src/btstack_memory.h b/src/btstack_memory.h index 9e3f847c6..a052f2509 100644 --- a/src/btstack_memory.h +++ b/src/btstack_memory.h @@ -77,6 +77,7 @@ extern "C" { #ifdef ENABLE_MESH #include "ble/mesh/mesh_network.h" #include "mesh_keys.h" +#include "mesh_virtual_addresses.h" #endif /* API_START */ @@ -152,7 +153,7 @@ sm_lookup_entry_t * btstack_memory_sm_lookup_entry_get(void); void btstack_memory_sm_lookup_entry_free(sm_lookup_entry_t *sm_lookup_entry); #endif #ifdef ENABLE_MESH -// mesh_network_pdu, mesh_transport_pdu, mesh_network_key, mesh_transport_key +// mesh_network_pdu, mesh_transport_pdu, mesh_network_key, mesh_transport_key, mesh_virtual_address mesh_network_pdu_t * btstack_memory_mesh_network_pdu_get(void); void btstack_memory_mesh_network_pdu_free(mesh_network_pdu_t *mesh_network_pdu); mesh_transport_pdu_t * btstack_memory_mesh_transport_pdu_get(void); @@ -161,6 +162,8 @@ mesh_network_key_t * btstack_memory_mesh_network_key_get(void); void btstack_memory_mesh_network_key_free(mesh_network_key_t *mesh_network_key); mesh_transport_key_t * btstack_memory_mesh_transport_key_get(void); void btstack_memory_mesh_transport_key_free(mesh_transport_key_t *mesh_transport_key); +mesh_virtual_address_t * btstack_memory_mesh_virtual_address_get(void); +void btstack_memory_mesh_virtual_address_free(mesh_virtual_address_t *mesh_virtual_address); #endif #if defined __cplusplus diff --git a/test/mesh/btstack_config.h b/test/mesh/btstack_config.h index b1157b7c0..7d68d1ef1 100644 --- a/test/mesh/btstack_config.h +++ b/test/mesh/btstack_config.h @@ -30,6 +30,7 @@ #define MAX_NR_LE_DEVICE_DB_ENTRIES 4 #define MAX_NR_MESH_TRANSPORT_KEYS 16 +#define MAX_NR_MESH_VIRTUAL_ADDRESSES 16 #define NVM_NUM_LINK_KEYS 2 diff --git a/tool/btstack_memory_generator.py b/tool/btstack_memory_generator.py index 5e0f462e5..cc9f83925 100755 --- a/tool/btstack_memory_generator.py +++ b/tool/btstack_memory_generator.py @@ -85,6 +85,7 @@ extern "C" { #ifdef ENABLE_MESH #include "ble/mesh/mesh_network.h" #include "mesh_keys.h" +#include "mesh_virtual_addresses.h" #endif /* API_START */ @@ -209,7 +210,7 @@ list_of_le_structs = [ ["gatt_client", "whitelist_entry", "sm_lookup_entry"], ] list_of_mesh_structs = [ - ['mesh_network_pdu', 'mesh_transport_pdu', 'mesh_network_key', 'mesh_transport_key'] + ['mesh_network_pdu', 'mesh_transport_pdu', 'mesh_network_key', 'mesh_transport_key', 'mesh_virtual_address'] ] btstack_root = os.path.abspath(os.path.dirname(sys.argv[0]) + '/..')