mesh: add timer to transition

This commit is contained in:
Matthias Ringwald 2019-11-14 17:41:24 +01:00
parent e85a5146ec
commit 649d4025aa
2 changed files with 14 additions and 10 deletions

View File

@ -128,6 +128,7 @@ typedef enum {
typedef struct mesh_transition { typedef struct mesh_transition {
btstack_linked_item_t item; btstack_linked_item_t item;
btstack_timer_source_t timer;
mesh_transition_state_t state; mesh_transition_state_t state;

View File

@ -159,11 +159,8 @@ static void mesh_server_transition_setup_transition_or_instantaneous_update(mesh
mesh_generic_on_off_state_t * generic_on_off_server_state = (mesh_generic_on_off_state_t *)mesh_model->model_data; mesh_generic_on_off_state_t * generic_on_off_server_state = (mesh_generic_on_off_state_t *)mesh_model->model_data;
mesh_transition_t * transition = &generic_on_off_server_state->transition_data.base_transition; mesh_transition_t * transition = &generic_on_off_server_state->transition_data.base_transition;
if (transition_time_gdtt != 0 || delay_time_gdtt != 0) { // instanteneous update
mesh_access_transitions_setup(transition, (mesh_model_t *) mesh_model, if ((transition_time_gdtt == 0) && (delay_time_gdtt == 0)){
transition_time_gdtt, delay_time_gdtt, &mesh_server_transition_step_bool);
mesh_access_transitions_add(transition);
} else {
generic_on_off_server_state->transition_data.current_value = generic_on_off_server_state->transition_data.target_value; generic_on_off_server_state->transition_data.current_value = generic_on_off_server_state->transition_data.target_value;
transition->phase_start_ms = 0; transition->phase_start_ms = 0;
transition->remaining_delay_time_ms = 0; transition->remaining_delay_time_ms = 0;
@ -176,7 +173,13 @@ static void mesh_server_transition_setup_transition_or_instantaneous_update(mesh
MODEL_STATE_ID_GENERIC_ON_OFF, MODEL_STATE_ID_GENERIC_ON_OFF,
reason, reason,
generic_on_off_server_state->transition_data.current_value); generic_on_off_server_state->transition_data.current_value);
return;
} }
// transaction
mesh_access_transitions_setup(transition, (mesh_model_t *) mesh_model,
transition_time_gdtt, delay_time_gdtt, &mesh_server_transition_step_bool);
mesh_access_transitions_add(transition);
} }