mesh: extract publish function from existing status message code

This commit is contained in:
Milanka Ringwald 2019-07-02 11:17:50 +02:00 committed by Matthias Ringwald
parent 4d81908018
commit 9aa5ff1ae8
2 changed files with 30 additions and 25 deletions

View File

@ -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);
}

View File

@ -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
}