mesh: implement get next transaction id, helper function mesh_access_time_gdtt2ms

This commit is contained in:
Milanka Ringwald 2019-06-25 09:29:22 +02:00 committed by Matthias Ringwald
parent 1a17f28bfd
commit 16d1335912
2 changed files with 24 additions and 7 deletions

View File

@ -63,9 +63,11 @@ static uint16_t mid_counter;
static const btstack_tlv_t * btstack_tlv_singleton_impl;
static void * btstack_tlv_singleton_context;
// Transitions
static btstack_linked_list_t transitions;
static btstack_timer_source_t transitions_timer;
static int transition_step_min_ms;
static uint8_t mesh_transaction_id_counter = 0;
static void mesh_access_setup_tlv(void){
if (btstack_tlv_singleton_impl) return;
@ -138,12 +140,12 @@ mesh_transaction_status_t mesh_access_transitions_transaction_status(mesh_transi
return MESH_TRANSACTION_STATUS_NEW;
}
uint8_t mesh_access_transitions_num_steps_from_gdtt(uint8_t transition_time_gdtt){
return transition_time_gdtt >> 2;
uint8_t mesh_access_transitions_num_steps_from_gdtt(uint8_t time_gdtt){
return time_gdtt >> 2;
}
static uint32_t mesh_access_transitions_step_ms_from_gdtt(uint8_t transition_time_gdtt){
mesh_default_transition_step_resolution_t step_resolution = (mesh_default_transition_step_resolution_t) (transition_time_gdtt & 0x03u);
static uint32_t mesh_access_transitions_step_ms_from_gdtt(uint8_t time_gdtt){
mesh_default_transition_step_resolution_t step_resolution = (mesh_default_transition_step_resolution_t) (time_gdtt & 0x03u);
switch (step_resolution){
case MESH_DEFAULT_TRANSITION_STEP_RESOLUTION_100ms:
return 100;
@ -155,10 +157,16 @@ static uint32_t mesh_access_transitions_step_ms_from_gdtt(uint8_t transition_tim
return 600000;
default:
return 0;
}
}
uint32_t mesh_access_time_gdtt2ms(uint8_t time_gdtt){
uint8_t num_steps = mesh_access_transitions_num_steps_from_gdtt(time_gdtt);
if (num_steps > 0x3E) return 0;
return mesh_access_transitions_step_ms_from_gdtt(time_gdtt) * num_steps;
}
static void mesh_access_transitions_timeout_handler(btstack_timer_source_t * timer){
btstack_linked_list_iterator_t it;
btstack_linked_list_iterator_init(&it, &transitions);
@ -237,8 +245,15 @@ void mesh_access_transitions_remove(mesh_transition_t * transition){
}
}
// Mesh Node Element functions
uint8_t mesh_access_transactions_get_next_transaction_id(void){
mesh_transaction_id_counter++;
if (mesh_transaction_id_counter == 0){
mesh_transaction_id_counter = 1;
}
return mesh_transaction_id_counter;
}
// Mesh Node Element functions
mesh_element_t * mesh_primary_element(void){
return &primary_element;
}

View File

@ -261,7 +261,8 @@ mesh_model_t * mesh_model_get_configuration_server(void);
mesh_model_t * mesh_access_model_for_address_and_model_identifier(uint16_t element_address, uint32_t model_identifier, uint8_t * status);
uint8_t mesh_access_transitions_num_steps_from_gdtt(uint8_t transition_time_gdtt);
uint8_t mesh_access_transitions_num_steps_from_gdtt(uint8_t time_gdtt);
uint32_t mesh_access_time_gdtt2ms(uint8_t time_gdtt);
void mesh_access_emit_state_update_bool(btstack_packet_handler_t * event_handler, uint8_t element_index, uint32_t model_identifier,
model_state_id_t state_identifier, model_state_update_reason_t reason, uint8_t value);
@ -279,6 +280,7 @@ void mesh_access_transitions_setup(mesh_transition_t * transition, mesh_model_t
void mesh_access_transitions_add(mesh_transition_t * transition);
void mesh_access_transitions_remove(mesh_transition_t * transition);
uint8_t mesh_access_transactions_get_next_transaction_id(void);
// Mesh PDU Getter
uint16_t mesh_pdu_src(mesh_pdu_t * pdu);