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();
}
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){
// fill prov data
mesh_provisioning_data_t 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);
mesh_persistent_provisioning_data_t persistent_provisioning_data;
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
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){
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);
// 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);
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);
// load iv index