mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-18 14:42:33 +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){
|
if (prov_len){
|
||||||
mesh_setup_from_provisioning_data(&provisioning_data);
|
mesh_setup_from_provisioning_data(&provisioning_data);
|
||||||
// load iv index
|
// load iv index
|
||||||
mesh_load_iv_index_and_sequence_number();
|
mesh_restore_iv_index_and_sequence_number();
|
||||||
// load network keys
|
// load network keys
|
||||||
mesh_load_network_keys();
|
mesh_load_network_keys();
|
||||||
// load app keys
|
// load app keys
|
||||||
|
@ -1374,6 +1374,11 @@ typedef struct {
|
|||||||
uint32_t seq_number;
|
uint32_t seq_number;
|
||||||
} iv_index_and_sequence_number_t;
|
} 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){
|
void mesh_store_iv_index_and_sequence_number(void){
|
||||||
iv_index_and_sequence_number_t data;
|
iv_index_and_sequence_number_t data;
|
||||||
mesh_access_setup_tlv();
|
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.iv_index = mesh_get_iv_index();
|
||||||
data.seq_number = mesh_sequence_number_peek();
|
data.seq_number = mesh_sequence_number_peek();
|
||||||
btstack_tlv_singleton_impl->get_tag(btstack_tlv_singleton_context, tag, (uint8_t *) &data, sizeof(data));
|
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;
|
iv_index_and_sequence_number_t data;
|
||||||
mesh_access_setup_tlv();
|
mesh_access_setup_tlv();
|
||||||
uint32_t tag = mesh_tag_for_iv_index_and_seq_number();
|
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);
|
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
|
// Mesh Model Publication
|
||||||
static btstack_timer_source_t mesh_access_publication_timer;
|
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
|
// Mesh IV Index and sequence number
|
||||||
void mesh_store_iv_index_and_sequence_number(void);
|
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
|
// Mesh Access Parser
|
||||||
int mesh_access_pdu_get_opcode(mesh_pdu_t * pdu, uint32_t * opcode, uint16_t * opcode_size);
|
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_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, ...);
|
mesh_transport_pdu_t * mesh_access_setup_segmented_message(const mesh_access_message_t *template, ...);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
} /* end of extern "C" */
|
} /* end of extern "C" */
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user