From e18ba70aa943df194cb28e2b7ed593b3eed6f8c2 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Wed, 10 Jul 2019 17:39:58 +0200 Subject: [PATCH] mesh: load provisioning data in mesh_node_startup_from_tlv --- test/mesh/mesh.c | 25 ++---------- test/mesh/mesh_configuration_server.c | 57 +++++++++++++++++++-------- test/mesh/mesh_configuration_server.h | 2 +- 3 files changed, 44 insertions(+), 40 deletions(-) diff --git a/test/mesh/mesh.c b/test/mesh/mesh.c index f49d87cd0..a9092215a 100644 --- a/test/mesh/mesh.c +++ b/test/mesh/mesh.c @@ -190,8 +190,6 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack UNUSED(size); bd_addr_t addr; int i; - int prov_len; - mesh_provisioning_data_t provisioning_data; switch (packet_type) { case HCI_EVENT_PACKET: @@ -205,35 +203,18 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack printf("%02x", addr[i]); } printf("\n"); - // get tlv - btstack_tlv_get_instance(&btstack_tlv_singleton_impl, &btstack_tlv_singleton_context); - // load provisioning data - 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); - if (prov_len){ - provisioned = 1; - mesh_access_setup_from_provisioning_data(&provisioning_data); - - mesh_node_startup_from_tlv(); + // startup from provisioning data stored in TLV + provisioned = mesh_node_startup_from_tlv(); + if (provisioned){ // dump PTS MeshOptions.ini mesh_pts_dump_mesh_options(); - } else { - provisioned = 0; - mesh_access_setup_without_provisiong_data(test_device_uuid); } #if defined(ENABLE_MESH_ADV_BEARER) || defined(ENABLE_MESH_PB_ADV) - - // start sending Secure Network Beacon - mesh_subnet_t * subnet = mesh_subnet_get_by_netkey_index(0); - if (subnet){ - beacon_secure_network_start(subnet); - } - // setup scanning gap_set_scan_parameters(0, 0x300, 0x300); gap_start_scan(); diff --git a/test/mesh/mesh_configuration_server.c b/test/mesh/mesh_configuration_server.c index a440c8321..3fadf236f 100644 --- a/test/mesh/mesh_configuration_server.c +++ b/test/mesh/mesh_configuration_server.c @@ -55,6 +55,7 @@ #include "mesh_proxy.h" #include "mesh/gatt_bearer.h" #include "mesh_iv_index_seq_number.h" +#include "mesh/beacon.h" #define MESH_HEARTBEAT_FEATURES_SUPPORTED_MASK 0x000f @@ -2283,22 +2284,44 @@ void mesh_node_reset(void){ mesh_delete_publications(); } -void mesh_node_startup_from_tlv(void){ - // load iv index - mesh_restore_iv_index_and_sequence_number(); - // load network keys - mesh_load_network_keys(); - // load app keys - mesh_load_app_keys(); - // load model to appkey bindings - mesh_load_appkey_lists(); - // load virtual addresses - mesh_load_virtual_addresses(); - // load model subscriptions - mesh_load_subscriptions(); - // load model publications - mesh_load_publications(); - // load foundation state - mesh_foundation_state_load(); +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); + if (prov_len){ + + mesh_access_setup_from_provisioning_data(&provisioning_data); + + // load iv index + mesh_restore_iv_index_and_sequence_number(); + // load network keys + mesh_load_network_keys(); + // load app keys + mesh_load_app_keys(); + // load model to appkey bindings + mesh_load_appkey_lists(); + // load virtual addresses + mesh_load_virtual_addresses(); + // load model subscriptions + mesh_load_subscriptions(); + // load model publications + mesh_load_publications(); + // load foundation state + mesh_foundation_state_load(); + +#if defined(ENABLE_MESH_ADV_BEARER) || defined(ENABLE_MESH_PB_ADV) + // start sending Secure Network Beacon + mesh_subnet_t * subnet = mesh_subnet_get_by_netkey_index(0); + if (subnet){ + beacon_secure_network_start(subnet); + } +#endif + return 1; + } else { + return 0; + } } diff --git a/test/mesh/mesh_configuration_server.h b/test/mesh/mesh_configuration_server.h index 0ea746a76..ea0519f6f 100644 --- a/test/mesh/mesh_configuration_server.h +++ b/test/mesh/mesh_configuration_server.h @@ -97,7 +97,7 @@ void mesh_delete_publications(void); // void mesh_node_reset(void); -void mesh_node_startup_from_tlv(void); +int mesh_node_startup_from_tlv(void); // PTS Testing void config_nekey_list_set_max(uint16_t max);