mesh: extract mesh_node_store_provisioning_data from test app

This commit is contained in:
Matthias Ringwald 2019-07-10 17:53:55 +02:00
parent e18ba70aa9
commit 8eab9b2ba9
3 changed files with 24 additions and 10 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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);