mesh: add hook to track seq number updates

This commit is contained in:
Matthias Ringwald 2019-07-10 14:28:16 +02:00
parent 5639acaf77
commit 84b8c4a9e4
4 changed files with 25 additions and 3 deletions

View File

@ -55,6 +55,7 @@ static void mesh_access_message_process_handler(mesh_pdu_t * pdu);
static void mesh_access_secure_network_beacon_handler(uint8_t packet_type, uint16_t channel, uint8_t * packet, uint16_t size);
static void mesh_access_upper_transport_handler(mesh_transport_callback_type_t callback_type, mesh_transport_status_t status, mesh_pdu_t * pdu);
static const mesh_operation_t * mesh_model_lookup_operation_by_opcode(mesh_model_t * model, uint32_t opcode);
static void mesh_persist_iv_index_and_sequence_number(void);
static uint16_t primary_element_address;
@ -93,6 +94,9 @@ void mesh_access_init(void){
// register for secure network beacons
beacon_register_for_secure_network_beacons(&mesh_access_secure_network_beacon_handler);
// register for seq number updates
mesh_sequence_number_set_update_callback(&mesh_persist_iv_index_and_sequence_number);
}
void mesh_access_emit_state_update_bool(btstack_packet_handler_t * event_handler, uint8_t element_index, uint32_t model_identifier,
@ -1412,7 +1416,7 @@ void mesh_restore_iv_index_and_sequence_number(void){
}
// higher layer
void mesh_persist_iv_index_and_sequence_number(void){
static void mesh_persist_iv_index_and_sequence_number(void){
}

View File

@ -445,7 +445,6 @@ int mesh_model_contains_appkey(mesh_model_t * mesh_model, uint16_t appkey_index)
// Mesh IV Index and sequence number
void mesh_store_iv_index_and_sequence_number(void);
void mesh_persist_iv_index_and_sequence_number(void);
void mesh_restore_iv_index_and_sequence_number(void);
// Mesh Access Parser

View File

@ -97,12 +97,26 @@ void mesh_iv_index_recovered(uint8_t iv_update_active, uint32_t iv_index){
global_iv_update_active = iv_update_active;
}
//
static void (*seq_num_callback)(void);
void mesh_sequence_number_set_update_callback(void (*callback)(void)){
seq_num_callback = callback;
}
void mesh_sequence_number_set(uint32_t seq){
sequence_number_current = seq;
}
uint32_t mesh_sequence_number_next(void){
return sequence_number_current++;
uint32_t seq_number = sequence_number_current++;
if (seq_num_callback){
(*seq_num_callback)();
}
return seq_number;
}
uint32_t mesh_sequence_number_peek(void){

View File

@ -78,6 +78,11 @@ void mesh_iv_update_completed(void);
*/
void mesh_iv_index_recovered(uint8_t iv_update_active, uint32_t iv_index);
/**
* @brief Set callback for sequence number update
*/
void mesh_sequence_number_set_update_callback(void (*callback)(void));
/**
* Sequence Number
*/