From 16d133591260a20f81b6360aae64a5433afc0279 Mon Sep 17 00:00:00 2001 From: Milanka Ringwald Date: Tue, 25 Jun 2019 09:29:22 +0200 Subject: [PATCH] mesh: implement get next transaction id, helper function mesh_access_time_gdtt2ms --- test/mesh/mesh_access.c | 27 +++++++++++++++++++++------ test/mesh/mesh_access.h | 4 +++- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/test/mesh/mesh_access.c b/test/mesh/mesh_access.c index 96db4c57c..a6eae17d5 100644 --- a/test/mesh/mesh_access.c +++ b/test/mesh/mesh_access.c @@ -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; } diff --git a/test/mesh/mesh_access.h b/test/mesh/mesh_access.h index fcbd770ca..9a07c81fa 100644 --- a/test/mesh/mesh_access.h +++ b/test/mesh/mesh_access.h @@ -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);