mesh: use mesh_persistent_provisioning_data_t for tlv

This commit is contained in:
Matthias Ringwald 2019-07-11 17:21:51 +02:00
parent fc07d5143c
commit 561e608914

View File

@ -2285,27 +2285,42 @@ void mesh_node_reset(void){
mesh_delete_publications(); mesh_delete_publications();
} }
typedef struct {
uint16_t unicast_address;
uint8_t flags;
uint8_t device_key[16];
} mesh_persistent_provisioning_data_t;
void mesh_node_store_provisioning_data(void){ void mesh_node_store_provisioning_data(void){
// fill prov data // fill prov data
mesh_provisioning_data_t provisioning_data; mesh_persistent_provisioning_data_t persistent_provisioning_data;
provisioning_data.unicast_address = mesh_node_get_primary_element_address();
memcpy(provisioning_data.device_key, mesh_transport_key_get(MESH_DEVICE_KEY_INDEX), 16); persistent_provisioning_data.unicast_address = mesh_node_get_primary_element_address();
memcpy(persistent_provisioning_data.device_key, mesh_transport_key_get(MESH_DEVICE_KEY_INDEX), 16);
// store in tlv // store in tlv
btstack_tlv_get_instance(&btstack_tlv_singleton_impl, &btstack_tlv_singleton_context); 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)); btstack_tlv_singleton_impl->store_tag(btstack_tlv_singleton_context, 'PROV', (uint8_t *) &persistent_provisioning_data, sizeof(mesh_persistent_provisioning_data_t));
} }
int mesh_node_startup_from_tlv(void){ int mesh_node_startup_from_tlv(void){
mesh_provisioning_data_t provisioning_data; mesh_persistent_provisioning_data_t persistent_provisioning_data;
btstack_tlv_get_instance(&btstack_tlv_singleton_impl, &btstack_tlv_singleton_context); btstack_tlv_get_instance(&btstack_tlv_singleton_impl, &btstack_tlv_singleton_context);
// load provisioning data // 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)); uint32_t prov_len = btstack_tlv_singleton_impl->get_tag(btstack_tlv_singleton_context, 'PROV', (uint8_t *) &persistent_provisioning_data, sizeof(mesh_persistent_provisioning_data_t));
printf("Provisioning data available: %u\n", prov_len ? 1 : 0); printf("Provisioning data available: %u\n", prov_len ? 1 : 0);
if (prov_len){ if (prov_len){
// copy into mesh_provisioning_data
mesh_provisioning_data_t provisioning_data;
memcpy(provisioning_data.device_key, persistent_provisioning_data.device_key, 16);
provisioning_data.unicast_address = persistent_provisioning_data.unicast_address;
provisioning_data.flags = persistent_provisioning_data.flags;
mesh_access_setup_from_provisioning_data(&provisioning_data); mesh_access_setup_from_provisioning_data(&provisioning_data);
// load iv index // load iv index