From 4517f741acd3226859d12ded361cdde8c7fd8b88 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Thu, 13 Jun 2019 16:55:19 +0200 Subject: [PATCH] mesh: add internal index to network keys --- test/mesh/mesh.c | 3 +++ test/mesh/mesh_keys.c | 14 ++++++++++++++ test/mesh/mesh_keys.h | 10 ++++++++++ 3 files changed, 27 insertions(+) diff --git a/test/mesh/mesh.c b/test/mesh/mesh.c index c68075ae0..16c68f05b 100644 --- a/test/mesh/mesh.c +++ b/test/mesh/mesh.c @@ -246,6 +246,9 @@ static void mesh_network_key_add_from_provisioning_data(const mesh_provisioning_ // get key mesh_network_key_t * network_key = btstack_memory_mesh_network_key_get(); + // internal index 0 for primary network key + network_key->internal_index = 0; + // get single instance memset(network_key, 0, sizeof(mesh_network_key_t)); diff --git a/test/mesh/mesh_keys.c b/test/mesh/mesh_keys.c index b57fa5b6a..f79910de8 100644 --- a/test/mesh/mesh_keys.c +++ b/test/mesh/mesh_keys.c @@ -51,16 +51,30 @@ static void mesh_print_hex(const char * name, const uint8_t * data, uint16_t len // network key list static btstack_linked_list_t network_keys; +static uint8_t mesh_network_key_used[MAX_NR_MESH_NETWORK_KEYS]; void mesh_network_key_init(void){ network_keys = NULL; } +uint16_t mesh_network_key_get_free_index(void){ + // find empty slot, skip slot #0 reserved for primary network key + uint16_t i; + for (i=1;i < MAX_NR_MESH_NETWORK_KEYS ; i++){ + if (mesh_network_key_used[i] == 0){ + return i; + } + } + return 0; +} + void mesh_network_key_add(mesh_network_key_t * network_key){ + mesh_network_key_used[network_key->internal_index] = 1; btstack_linked_list_add_tail(&network_keys, (btstack_linked_item_t *) network_key); } int mesh_network_key_remove(mesh_network_key_t * network_key){ + mesh_network_key_used[network_key->internal_index] = 1; return btstack_linked_list_remove(&network_keys, (btstack_linked_item_t *) network_key); } diff --git a/test/mesh/mesh_keys.h b/test/mesh/mesh_keys.h index edef76dc3..86c444f08 100644 --- a/test/mesh/mesh_keys.h +++ b/test/mesh/mesh_keys.h @@ -60,6 +60,9 @@ typedef enum { typedef struct { btstack_linked_item_t item; + // internal index [0..MAX_NR_MESH_NETWORK_KEYS-1] + uint16_t internal_index; + // index into shared global key list uint16_t netkey_index; @@ -136,6 +139,13 @@ typedef struct { */ void mesh_network_key_init(void); +/** + * @brief Get internal index of free network key storage entry + * @note index 0 is reserved for primary network key + * @returns index or 0u if none found + */ +uint16_t mesh_network_key_get_free_index(void); + /** * @brief Add network key to list * @param network_key