mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-29 22:20:37 +00:00
mesh: use initial value for generic_level_handle_set_delta_message
This commit is contained in:
parent
f649fbc8b3
commit
159711f8b0
@ -76,7 +76,11 @@ static mesh_transition_t * generic_level_server_get_base_transition(mesh_model_t
|
||||
static void mesh_server_transition_state_update_stepwise_value(mesh_transition_int16_t * transition){
|
||||
mesh_model_t * generic_level_server_model = transition->base_transition.mesh_model;
|
||||
|
||||
transition->current_value = add_and_clip_int16(transition->current_value, transition->stepwise_value_increment);
|
||||
if (transition->stepwise_value_increment){
|
||||
transition->current_value = add_and_clip_int16(transition->current_value, transition->stepwise_value_increment);
|
||||
} else if (transition->delta_from_initial_value){
|
||||
transition->current_value = add_and_clip_int16(transition->initial_value, transition->delta_from_initial_value);
|
||||
}
|
||||
// emit event
|
||||
mesh_access_emit_state_update_int16(generic_level_server_model->transition_events_packet_handler,
|
||||
mesh_access_get_element_index(generic_level_server_model),
|
||||
@ -162,12 +166,13 @@ static void mesh_server_transition_setup_transition_or_instantaneous_update_int1
|
||||
mesh_access_transitions_setup(&transition, mesh_model, transition_time_gdtt, delay_time_gdtt, &mesh_server_transition_step);
|
||||
mesh_access_transitions_add(&transition);
|
||||
} else {
|
||||
// instantaneous update
|
||||
generic_level_server_state->transition_data.current_value = generic_level_server_state->transition_data.target_value;
|
||||
transition.phase_start_ms = 0;
|
||||
transition.remaining_delay_time_ms = 0;
|
||||
transition.remaining_transition_time_ms = 0;
|
||||
transition.state = MESH_TRANSITION_STATE_IDLE;
|
||||
|
||||
generic_level_server_state->transition_data.stepwise_value_increment = 0;
|
||||
generic_level_server_state->transition_data.delta_from_initial_value = 0;
|
||||
generic_level_server_state->transition_data.transition_speed = 0;
|
||||
mesh_access_transitions_setup(&transition, mesh_model, 0, 0, NULL);
|
||||
|
||||
mesh_access_emit_state_update_int16(mesh_model->transition_events_packet_handler,
|
||||
mesh_access_get_element_index(mesh_model),
|
||||
mesh_model->model_identifier,
|
||||
@ -210,7 +215,6 @@ static void mesh_generic_level_status_message(mesh_model_t *generic_level_server
|
||||
// setup message
|
||||
mesh_transport_pdu_t * transport_pdu = NULL;
|
||||
|
||||
|
||||
if (state->transition_data.base_transition.remaining_transition_time_ms != 0) {
|
||||
transport_pdu = mesh_access_setup_segmented_message(&mesh_generic_level_status_transition, state->transition_data.current_value,
|
||||
state->transition_data.target_value, state->transition_data.base_transition.remaining_transition_time_ms);
|
||||
@ -252,9 +256,11 @@ static void generic_level_handle_set_target_level_message(mesh_model_t *mesh_mod
|
||||
default:
|
||||
mesh_access_transitions_setup_transaction(base_transition, tid, mesh_pdu_src(pdu), mesh_pdu_dst(pdu));
|
||||
|
||||
generic_level_server_state->transition_data.initial_value = generic_level_server_state->transition_data.current_value;
|
||||
generic_level_server_state->transition_data.target_value = level_value;
|
||||
generic_level_server_state->transition_data.stepwise_value_increment = 0;
|
||||
|
||||
generic_level_server_state->transition_data.delta_from_initial_value = 0;
|
||||
|
||||
if (mesh_access_parser_available(&parser) == 2){
|
||||
// Generic Default Transition Time format - num_steps (higher 6 bits), step_resolution (lower 2 bits)
|
||||
transition_time_gdtt = mesh_access_parser_get_u8(&parser);
|
||||
@ -300,9 +306,11 @@ static void generic_level_handle_set_move_message(mesh_model_t *mesh_model, mesh
|
||||
default:
|
||||
mesh_access_transitions_setup_transaction(base_transition, tid, mesh_pdu_src(pdu), mesh_pdu_dst(pdu));
|
||||
|
||||
generic_level_server_state->transition_data.initial_value = generic_level_server_state->transition_data.current_value;
|
||||
generic_level_server_state->transition_data.target_value = add_and_clip_int16(generic_level_server_state->transition_data.current_value, increment_value);
|
||||
generic_level_server_state->transition_data.stepwise_value_increment = increment_value;
|
||||
|
||||
generic_level_server_state->transition_data.delta_from_initial_value = 0;
|
||||
|
||||
if (mesh_access_parser_available(&parser) == 2){
|
||||
// Generic Default Transition Time format - num_steps (higher 6 bits), step_resolution (lower 2 bits)
|
||||
transition_time_gdtt = mesh_access_parser_get_u8(&parser);
|
||||
@ -345,6 +353,8 @@ static void generic_level_handle_set_delta_message(mesh_model_t *mesh_model, mes
|
||||
case MESH_TRANSACTION_STATUS_DIFFERENT_DST_OR_SRC:
|
||||
// abort transaction
|
||||
mesh_access_transitions_abort_transaction(base_transition);
|
||||
transition->current_value = transition->initial_value;
|
||||
mesh_server_transition_setup_transition_or_instantaneous_update_int16(mesh_model, 0, 0, MODEL_STATE_UPDATE_REASON_TRANSITION_ABORT);
|
||||
break;
|
||||
case MESH_TRANSACTION_STATUS_RETRANSMISSION:
|
||||
// ignore
|
||||
@ -352,8 +362,10 @@ static void generic_level_handle_set_delta_message(mesh_model_t *mesh_model, mes
|
||||
case MESH_TRANSACTION_STATUS_NEW:
|
||||
mesh_access_transitions_setup_transaction(base_transition, tid, mesh_pdu_src(pdu), mesh_pdu_dst(pdu));
|
||||
|
||||
generic_level_server_state->transition_data.initial_value = generic_level_server_state->transition_data.current_value;
|
||||
generic_level_server_state->transition_data.target_value = add_and_clip_int16(generic_level_server_state->transition_data.current_value, delta_value);
|
||||
generic_level_server_state->transition_data.stepwise_value_increment = delta_value;
|
||||
generic_level_server_state->transition_data.delta_from_initial_value = delta_value;
|
||||
generic_level_server_state->transition_data.stepwise_value_increment = 0;
|
||||
|
||||
if (mesh_access_parser_available(&parser) == 2){
|
||||
// Generic Default Transition Time format - num_steps (higher 6 bits), step_resolution (lower 2 bits)
|
||||
|
@ -59,8 +59,8 @@ extern "C"
|
||||
typedef struct {
|
||||
mesh_transition_t base_transition;
|
||||
|
||||
int16_t initial_value;
|
||||
int16_t current_value;
|
||||
int16_t initial_value;
|
||||
int16_t target_value;
|
||||
int16_t stepwise_value_increment;
|
||||
int16_t delta_from_initial_value;
|
||||
|
@ -139,12 +139,12 @@ static void mesh_server_transition_step_bool(mesh_transition_t * base_transition
|
||||
}
|
||||
}
|
||||
|
||||
static void mesh_server_transition_setup_transition_or_instantaneous_update(mesh_model_t *generic_on_off_server_model, uint8_t transition_time_gdtt, uint8_t delay_time_gdtt, model_state_update_reason_t reason){
|
||||
mesh_generic_on_off_state_t * generic_on_off_server_state = (mesh_generic_on_off_state_t *)generic_on_off_server_model->model_data;
|
||||
static void mesh_server_transition_setup_transition_or_instantaneous_update(mesh_model_t *mesh_state, uint8_t transition_time_gdtt, uint8_t delay_time_gdtt, model_state_update_reason_t reason){
|
||||
mesh_generic_on_off_state_t * generic_on_off_server_state = (mesh_generic_on_off_state_t *)mesh_state->model_data;
|
||||
mesh_transition_t transition = generic_on_off_server_state->transition_data.base_transition;
|
||||
|
||||
if (transition_time_gdtt != 0 || delay_time_gdtt != 0) {
|
||||
mesh_access_transitions_setup(&transition, (mesh_model_t *) generic_on_off_server_model,
|
||||
mesh_access_transitions_setup(&transition, (mesh_model_t *) mesh_state,
|
||||
transition_time_gdtt, delay_time_gdtt, &mesh_server_transition_step_bool);
|
||||
mesh_access_transitions_add(&transition);
|
||||
} else {
|
||||
@ -154,9 +154,9 @@ static void mesh_server_transition_setup_transition_or_instantaneous_update(mesh
|
||||
transition.remaining_transition_time_ms = 0;
|
||||
transition.state = MESH_TRANSITION_STATE_IDLE;
|
||||
|
||||
mesh_access_emit_state_update_bool(generic_on_off_server_model->transition_events_packet_handler,
|
||||
mesh_access_get_element_index(generic_on_off_server_model),
|
||||
generic_on_off_server_model->model_identifier,
|
||||
mesh_access_emit_state_update_bool(mesh_state->transition_events_packet_handler,
|
||||
mesh_access_get_element_index(mesh_state),
|
||||
mesh_state->model_identifier,
|
||||
MODEL_STATE_ID_GENERIC_ON_OFF,
|
||||
reason,
|
||||
generic_on_off_server_state->transition_data.current_value);
|
||||
|
Loading…
x
Reference in New Issue
Block a user