From 9aa5ff1ae8ba34e0a30ffcf4966ced5a2977ea5f Mon Sep 17 00:00:00 2001 From: Milanka Ringwald Date: Tue, 2 Jul 2019 11:17:50 +0200 Subject: [PATCH] mesh: extract publish function from existing status message code --- test/mesh/mesh_generic_level_server.c | 30 +++++++++++++++------------ test/mesh/mesh_generic_server.c | 25 +++++++++++----------- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/test/mesh/mesh_generic_level_server.c b/test/mesh/mesh_generic_level_server.c index 4510b8c78..8e9519f99 100644 --- a/test/mesh/mesh_generic_level_server.c +++ b/test/mesh/mesh_generic_level_server.c @@ -204,7 +204,7 @@ const mesh_access_message_t mesh_generic_level_status_instantaneous = { MESH_GENERIC_LEVEL_STATUS, "2" }; -static void mesh_generic_level_status_message(mesh_model_t *generic_level_server_model, uint16_t netkey_index, uint16_t dest, uint16_t appkey_index){ +static mesh_transport_pdu_t * mesh_generic_level_status_message(mesh_model_t *generic_level_server_model){ if (generic_level_server_model->element == NULL){ log_error("generic_level_server_model->element == NULL"); } @@ -213,22 +213,18 @@ static void mesh_generic_level_status_message(mesh_model_t *generic_level_server if (state == NULL){ log_error("generic_level_status == NULL"); } + // 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); } else { transport_pdu = mesh_access_setup_segmented_message(&mesh_generic_level_status_instantaneous, state->transition_data.current_value); } - if (!transport_pdu) return; - - // send as segmented access pdu - generic_server_send_message(mesh_access_get_element_address(generic_level_server_model), dest, netkey_index, appkey_index, (mesh_pdu_t *) transport_pdu); + return transport_pdu; } - static void generic_level_handle_set_target_level_message(mesh_model_t *mesh_model, mesh_pdu_t * pdu){ if (mesh_model == NULL){ log_error("mesh_model == NULL"); @@ -273,7 +269,7 @@ static void generic_level_handle_set_target_level_message(mesh_model_t *mesh_mod } } mesh_server_transition_setup_transition_or_instantaneous_update_int16(mesh_model, transition_time_gdtt, delay_time_gdtt, MODEL_STATE_UPDATE_REASON_SET); - mesh_access_state_changed(); + mesh_access_state_changed(mesh_model); break; } @@ -375,7 +371,7 @@ static void generic_level_handle_set_delta_message(mesh_model_t *mesh_model, mes delay_time_gdtt = mesh_access_parser_get_u8(&parser); } mesh_server_transition_setup_transition_or_instantaneous_update_int16(mesh_model, transition_time_gdtt, delay_time_gdtt, MODEL_STATE_UPDATE_REASON_SET); - mesh_access_state_changed(); + mesh_access_state_changed(mesh_model); break; default: break; @@ -384,14 +380,18 @@ static void generic_level_handle_set_delta_message(mesh_model_t *mesh_model, mes static void generic_level_get_handler(mesh_model_t *generic_level_server_model, mesh_pdu_t * pdu){ - mesh_generic_level_status_message(generic_level_server_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu), mesh_pdu_appkey_index(pdu)); + mesh_transport_pdu_t * transport_pdu = mesh_generic_level_status_message(generic_level_server_model); + if (!transport_pdu) return; + generic_server_send_message(mesh_access_get_element_address(generic_level_server_model), mesh_pdu_src(pdu), mesh_pdu_netkey_index(pdu), mesh_pdu_appkey_index(pdu), (mesh_pdu_t *) transport_pdu); mesh_access_message_processed(pdu); } static void generic_level_set_handler(mesh_model_t *generic_level_server_model, mesh_pdu_t * pdu){ generic_level_handle_set_target_level_message(generic_level_server_model, pdu); - mesh_generic_level_status_message(generic_level_server_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu), mesh_pdu_appkey_index(pdu)); + mesh_transport_pdu_t * transport_pdu = mesh_generic_level_status_message(generic_level_server_model); + if (!transport_pdu) return; + generic_server_send_message(mesh_access_get_element_address(generic_level_server_model), mesh_pdu_src(pdu), mesh_pdu_netkey_index(pdu), mesh_pdu_appkey_index(pdu), (mesh_pdu_t *) transport_pdu); mesh_access_message_processed(pdu); } @@ -402,7 +402,9 @@ static void generic_level_set_unacknowledged_handler(mesh_model_t *generic_level static void generic_delta_set_handler(mesh_model_t *generic_level_server_model, mesh_pdu_t * pdu){ generic_level_handle_set_delta_message(generic_level_server_model, pdu); - mesh_generic_level_status_message(generic_level_server_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu), mesh_pdu_appkey_index(pdu)); + mesh_transport_pdu_t * transport_pdu = mesh_generic_level_status_message(generic_level_server_model); + if (!transport_pdu) return; + generic_server_send_message(mesh_access_get_element_address(generic_level_server_model), mesh_pdu_src(pdu), mesh_pdu_netkey_index(pdu), mesh_pdu_appkey_index(pdu), (mesh_pdu_t *) transport_pdu); mesh_access_message_processed(pdu); } @@ -413,7 +415,9 @@ static void generic_delta_set_unacknowledged_handler(mesh_model_t *generic_level static void generic_move_get_handler(mesh_model_t *generic_level_server_model, mesh_pdu_t * pdu){ generic_level_handle_set_move_message(generic_level_server_model, pdu); - mesh_generic_level_status_message(generic_level_server_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu), mesh_pdu_appkey_index(pdu)); + mesh_transport_pdu_t * transport_pdu = mesh_generic_level_status_message(generic_level_server_model); + if (!transport_pdu) return; + generic_server_send_message(mesh_access_get_element_address(generic_level_server_model), mesh_pdu_src(pdu), mesh_pdu_netkey_index(pdu), mesh_pdu_appkey_index(pdu), (mesh_pdu_t *) transport_pdu); mesh_access_message_processed(pdu); } diff --git a/test/mesh/mesh_generic_server.c b/test/mesh/mesh_generic_server.c index b390f8760..d630a6db4 100644 --- a/test/mesh/mesh_generic_server.c +++ b/test/mesh/mesh_generic_server.c @@ -187,7 +187,7 @@ const mesh_access_message_t mesh_generic_on_off_status_instantaneous = { MESH_GENERIC_ON_OFF_SET, "1" }; -static void mesh_generic_on_off_status_message(mesh_model_t *generic_on_off_server_model, uint16_t netkey_index, uint16_t dest, uint16_t appkey_index){ +static mesh_transport_pdu_t * mesh_generic_on_off_status_message(mesh_model_t *generic_on_off_server_model){ if (generic_on_off_server_model->element == NULL){ log_error("generic_on_off_server_model->element == NULL"); } @@ -204,14 +204,13 @@ static void mesh_generic_on_off_status_message(mesh_model_t *generic_on_off_serv } else { transport_pdu = mesh_access_setup_segmented_message(&mesh_generic_on_off_status_instantaneous, state->transition_data.current_value); } - if (!transport_pdu) return; - - // send as segmented access pdu - generic_server_send_message(mesh_access_get_element_address(generic_on_off_server_model), dest, netkey_index, appkey_index, (mesh_pdu_t *) transport_pdu); + return transport_pdu; } static void generic_on_off_get_handler(mesh_model_t *generic_on_off_server_model, mesh_pdu_t * pdu){ - mesh_generic_on_off_status_message(generic_on_off_server_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu), mesh_pdu_appkey_index(pdu)); + mesh_transport_pdu_t * transport_pdu = mesh_generic_on_off_status_message(generic_on_off_server_model); + if (!transport_pdu) return; + generic_server_send_message(mesh_access_get_element_address(generic_on_off_server_model), mesh_pdu_src(pdu), mesh_pdu_netkey_index(pdu), mesh_pdu_appkey_index(pdu),(mesh_pdu_t *) transport_pdu); mesh_access_message_processed(pdu); } @@ -250,7 +249,7 @@ static void generic_on_off_handle_set_message(mesh_model_t *mesh_model, mesh_pdu delay_time_gdtt = mesh_access_parser_get_u8(&parser); } mesh_server_transition_setup_transition_or_instantaneous_update(mesh_model, transition_time_gdtt, delay_time_gdtt, MODEL_STATE_UPDATE_REASON_SET); - mesh_access_state_changed(); + mesh_access_state_changed(mesh_model); break; } } @@ -258,7 +257,9 @@ static void generic_on_off_handle_set_message(mesh_model_t *mesh_model, mesh_pdu static void generic_on_off_set_handler(mesh_model_t *generic_on_off_server_model, mesh_pdu_t * pdu){ generic_on_off_handle_set_message(generic_on_off_server_model, pdu); - mesh_generic_on_off_status_message(generic_on_off_server_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu), mesh_pdu_appkey_index(pdu)); + mesh_transport_pdu_t * transport_pdu = mesh_generic_on_off_status_message(generic_on_off_server_model); + if (!transport_pdu) return; + generic_server_send_message(mesh_access_get_element_address(generic_on_off_server_model), mesh_pdu_src(pdu), mesh_pdu_netkey_index(pdu), mesh_pdu_appkey_index(pdu),(mesh_pdu_t *) transport_pdu); mesh_access_message_processed(pdu); } @@ -278,12 +279,12 @@ const mesh_operation_t * mesh_generic_on_off_server_get_operations(void){ return mesh_generic_on_off_model_operations; } -void mesh_generic_on_off_server_set_value(mesh_model_t * generic_on_off_server_model, uint8_t on_off_value, uint8_t transition_time_gdtt, uint8_t delay_time_gdtt){ - mesh_generic_on_off_state_t * generic_on_off_server_state = (mesh_generic_on_off_state_t *)generic_on_off_server_model->model_data; +void mesh_generic_on_off_server_set_value(mesh_model_t * mesh_model, uint8_t on_off_value, uint8_t transition_time_gdtt, uint8_t delay_time_gdtt){ + mesh_generic_on_off_state_t * generic_on_off_server_state = (mesh_generic_on_off_state_t *)mesh_model->model_data; generic_on_off_server_state->transition_data.target_value = on_off_value; - mesh_server_transition_setup_transition_or_instantaneous_update(generic_on_off_server_model, transition_time_gdtt, delay_time_gdtt, MODEL_STATE_UPDATE_REASON_APPLICATION_CHANGE); - mesh_access_state_changed(); + mesh_server_transition_setup_transition_or_instantaneous_update(mesh_model, transition_time_gdtt, delay_time_gdtt, MODEL_STATE_UPDATE_REASON_APPLICATION_CHANGE); + mesh_access_state_changed(mesh_model); // TODO implement publication }