From 8eab9b2ba9944a1409669d3649d3ea1e944c95e6 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Wed, 10 Jul 2019 17:53:55 +0200 Subject: [PATCH] mesh: extract mesh_node_store_provisioning_data from test app --- test/mesh/mesh.c | 20 ++++++++++---------- test/mesh/mesh_configuration_server.c | 12 ++++++++++++ test/mesh/mesh_configuration_server.h | 2 ++ 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/test/mesh/mesh.c b/test/mesh/mesh.c index a9092215a..e60d51e01 100644 --- a/test/mesh/mesh.c +++ b/test/mesh/mesh.c @@ -65,7 +65,6 @@ #include "btstack.h" #include "btstack_tlv.h" -#define BEACON_TYPE_SECURE_NETWORK 1 #define PTS_DEFAULT_TTL 10 static void show_usage(void); @@ -83,9 +82,6 @@ static int ui_chars_for_pin; static uint8_t ui_pin[17]; static int ui_pin_offset; -static const btstack_tlv_t * btstack_tlv_singleton_impl; -static void * btstack_tlv_singleton_context; - static uint16_t primary_element_address; static int provisioned; @@ -287,7 +283,7 @@ static void mesh_provisioning_message_handler (uint8_t packet_type, uint16_t cha provisioning_data.flags = provisioning_device_data_get_flags(); provisioning_data.unicast_address = provisioning_device_data_get_unicast_address(); - // get iv_index + // set iv_index mesh_set_iv_index(provisioning_device_data_get_iv_index()); // get primary netkey @@ -300,21 +296,25 @@ static void mesh_provisioning_message_handler (uint8_t packet_type, uint16_t cha // setup primary network mesh_subnet_setup_for_netkey_index(primary_network_key->netkey_index); + // setup after provisioned + mesh_access_setup_from_provisioning_data(&provisioning_data); + + // store provisioning data and primary network key in TLV - btstack_tlv_singleton_impl->store_tag(btstack_tlv_singleton_context, 'PROV', (uint8_t *) &provisioning_data, sizeof(mesh_provisioning_data_t)); - mesh_store_network_key(primary_network_key); + mesh_node_store_provisioning_data(); // store IV Index and sequence number mesh_store_iv_index_and_sequence_number(); - // setup after provisioned - mesh_access_setup_from_provisioning_data(&provisioning_data); + // store primary network key + mesh_store_network_key(primary_network_key); - provisioned = 1; // dump data mesh_provisioning_dump(&provisioning_data); + provisioned = 1; + // start advertising with node id after provisioning mesh_proxy_set_advertising_with_node_id(primary_network_key->netkey_index, MESH_NODE_IDENTITY_STATE_ADVERTISING_RUNNING); diff --git a/test/mesh/mesh_configuration_server.c b/test/mesh/mesh_configuration_server.c index 3fadf236f..a1c2080a1 100644 --- a/test/mesh/mesh_configuration_server.c +++ b/test/mesh/mesh_configuration_server.c @@ -2284,10 +2284,22 @@ void mesh_node_reset(void){ mesh_delete_publications(); } +void mesh_node_store_provisioning_data(void){ + // fill prov data + mesh_provisioning_data_t provisioning_data; + provisioning_data.unicast_address = mesh_access_get_primary_element_address(); + memcpy(provisioning_data.device_key, mesh_transport_key_get(MESH_DEVICE_KEY_INDEX), 16); + + // store in tlv + btstack_tlv_get_instance(&btstack_tlv_singleton_impl, &btstack_tlv_singleton_context); + btstack_tlv_singleton_impl->store_tag(btstack_tlv_singleton_context, 'PROV', (uint8_t *) &provisioning_data, sizeof(mesh_provisioning_data_t)); +} + int mesh_node_startup_from_tlv(void){ mesh_provisioning_data_t provisioning_data; btstack_tlv_get_instance(&btstack_tlv_singleton_impl, &btstack_tlv_singleton_context); + // load provisioning data uint32_t prov_len = btstack_tlv_singleton_impl->get_tag(btstack_tlv_singleton_context, 'PROV', (uint8_t *) &provisioning_data, sizeof(mesh_provisioning_data_t)); printf("Provisioning data available: %u\n", prov_len ? 1 : 0); diff --git a/test/mesh/mesh_configuration_server.h b/test/mesh/mesh_configuration_server.h index ea0519f6f..dc875bf1e 100644 --- a/test/mesh/mesh_configuration_server.h +++ b/test/mesh/mesh_configuration_server.h @@ -99,6 +99,8 @@ void mesh_node_reset(void); int mesh_node_startup_from_tlv(void); +void mesh_node_store_provisioning_data(void); + // PTS Testing void config_nekey_list_set_max(uint16_t max);