mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-28 08:37:22 +00:00
mesh: mesh_restore_iv_index_and_sequence_number() loads and bumps sequence number
This commit is contained in:
parent
6f14746dca
commit
5639acaf77
@ -297,7 +297,7 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
|
||||
if (prov_len){
|
||||
mesh_setup_from_provisioning_data(&provisioning_data);
|
||||
// load iv index
|
||||
mesh_load_iv_index_and_sequence_number();
|
||||
mesh_restore_iv_index_and_sequence_number();
|
||||
// load network keys
|
||||
mesh_load_network_keys();
|
||||
// load app keys
|
||||
|
@ -1374,6 +1374,11 @@ typedef struct {
|
||||
uint32_t seq_number;
|
||||
} iv_index_and_sequence_number_t;
|
||||
|
||||
static uint32_t sequence_number_last_stored;
|
||||
static uint32_t sequence_number_storage_trigger;
|
||||
|
||||
#define MESH_SEQUENCE_NUMBER_STORAGE_INTERVAL 1000
|
||||
|
||||
void mesh_store_iv_index_and_sequence_number(void){
|
||||
iv_index_and_sequence_number_t data;
|
||||
mesh_access_setup_tlv();
|
||||
@ -1381,8 +1386,12 @@ void mesh_store_iv_index_and_sequence_number(void){
|
||||
data.iv_index = mesh_get_iv_index();
|
||||
data.seq_number = mesh_sequence_number_peek();
|
||||
btstack_tlv_singleton_impl->get_tag(btstack_tlv_singleton_context, tag, (uint8_t *) &data, sizeof(data));
|
||||
|
||||
sequence_number_last_stored = data.seq_number;
|
||||
sequence_number_storage_trigger = sequence_number_last_stored + MESH_SEQUENCE_NUMBER_STORAGE_INTERVAL;
|
||||
}
|
||||
void mesh_load_iv_index_and_sequence_number(void){
|
||||
|
||||
static void mesh_load_iv_index_and_sequence_number(void){
|
||||
iv_index_and_sequence_number_t data;
|
||||
mesh_access_setup_tlv();
|
||||
uint32_t tag = mesh_tag_for_iv_index_and_seq_number();
|
||||
@ -1391,6 +1400,21 @@ void mesh_load_iv_index_and_sequence_number(void){
|
||||
mesh_sequence_number_set(data.seq_number);
|
||||
}
|
||||
|
||||
void mesh_restore_iv_index_and_sequence_number(void){
|
||||
mesh_load_iv_index_and_sequence_number();
|
||||
|
||||
// bump sequence number to account for only interval storage
|
||||
uint32_t seq_number = mesh_sequence_number_peek();
|
||||
seq_number += MESH_SEQUENCE_NUMBER_STORAGE_INTERVAL;
|
||||
mesh_sequence_number_set(seq_number);
|
||||
|
||||
mesh_store_iv_index_and_sequence_number();
|
||||
}
|
||||
|
||||
// higher layer
|
||||
void mesh_persist_iv_index_and_sequence_number(void){
|
||||
}
|
||||
|
||||
|
||||
// Mesh Model Publication
|
||||
static btstack_timer_source_t mesh_access_publication_timer;
|
||||
|
@ -445,7 +445,8 @@ 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_load_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
|
||||
int mesh_access_pdu_get_opcode(mesh_pdu_t * pdu, uint32_t * opcode, uint16_t * opcode_size);
|
||||
@ -485,6 +486,7 @@ void mesh_access_network_add_model_identifier(mesh_network_pdu_t * pdu, uint32_t
|
||||
mesh_network_pdu_t * mesh_access_setup_unsegmented_message(const mesh_access_message_t *template, ...);
|
||||
mesh_transport_pdu_t * mesh_access_setup_segmented_message(const mesh_access_message_t *template, ...);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* end of extern "C" */
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user