diff --git a/test/mesh/mesh_access.c b/test/mesh/mesh_access.c index fee1bbdd2..8d51e389c 100644 --- a/test/mesh/mesh_access.c +++ b/test/mesh/mesh_access.c @@ -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){ } diff --git a/test/mesh/mesh_access.h b/test/mesh/mesh_access.h index c4f27ed24..f5be057ef 100644 --- a/test/mesh/mesh_access.h +++ b/test/mesh/mesh_access.h @@ -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 diff --git a/test/mesh/mesh_iv_index_seq_number.c b/test/mesh/mesh_iv_index_seq_number.c index 265ad67a5..be62d0a7b 100644 --- a/test/mesh/mesh_iv_index_seq_number.c +++ b/test/mesh/mesh_iv_index_seq_number.c @@ -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){ diff --git a/test/mesh/mesh_iv_index_seq_number.h b/test/mesh/mesh_iv_index_seq_number.h index e75b8435d..f346c5e10 100644 --- a/test/mesh/mesh_iv_index_seq_number.h +++ b/test/mesh/mesh_iv_index_seq_number.h @@ -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 */