From 2b25ccf928e1383ac25dc821d6e95a835531eabd Mon Sep 17 00:00:00 2001 From: Milanka Ringwald Date: Tue, 18 Jun 2019 10:41:50 +0200 Subject: [PATCH] mesh: move event_handler from generich on off server to model --- test/mesh/mesh.c | 2 +- test/mesh/mesh_access.c | 6 +++--- test/mesh/mesh_access.h | 5 ++++- test/mesh/mesh_generic_server.c | 21 ++++++++++++++------- test/mesh/mesh_generic_server.h | 5 +++-- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/test/mesh/mesh.c b/test/mesh/mesh.c index 71d7fdf11..2e031a6eb 100644 --- a/test/mesh/mesh.c +++ b/test/mesh/mesh.c @@ -1094,7 +1094,7 @@ int btstack_main(void) mesh_generic_on_off_server_model.operations = mesh_generic_on_off_server_get_operations(); mesh_element_add_model(mesh_primary_element(), &mesh_generic_on_off_server_model); mesh_generic_on_off_server_model.model_data = (void *) &mesh_generic_on_off_state; - mesh_generic_on_off_server_register_packet_handler(&mesh_state_update_message_handler); + mesh_generic_on_off_server_register_packet_handler(&mesh_generic_on_off_server_model, &mesh_state_update_message_handler); mesh_vendor_model.model_identifier = mesh_model_get_model_identifier(BLUETOOTH_COMPANY_ID_BLUEKITCHEN_GMBH, MESH_BLUEKITCHEN_MODEL_ID_TEST_SERVER); mesh_model_reset_appkeys(&mesh_vendor_model); diff --git a/test/mesh/mesh_access.c b/test/mesh/mesh_access.c index f0716e4ae..eb901689b 100644 --- a/test/mesh/mesh_access.c +++ b/test/mesh/mesh_access.c @@ -74,9 +74,9 @@ void mesh_access_init(void){ mesh_upper_transport_register_access_message_handler(&mesh_access_message_process_handler); } -void mesh_access_emit_state_update_bool(btstack_packet_handler_t handler, uint8_t element_index, uint32_t model_identifier, +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){ - if (!handler) return; + if (event_handler == NULL) return; uint8_t event[14] = {HCI_EVENT_MESH_META, 13, MESH_SUBEVENT_STATE_UPDATE_BOOL}; int pos = 3; event[pos++] = element_index; @@ -86,7 +86,7 @@ void mesh_access_emit_state_update_bool(btstack_packet_handler_t handler, uint8_ pos += 4; event[pos++] = (uint8_t)reason; event[pos++] = value; - handler(HCI_EVENT_PACKET, 0, event, sizeof(event)); + (*event_handler)(HCI_EVENT_PACKET, 0, event, sizeof(event)); } mesh_element_t * mesh_primary_element(void){ diff --git a/test/mesh/mesh_access.h b/test/mesh/mesh_access.h index 85541fa72..814e02e65 100644 --- a/test/mesh/mesh_access.h +++ b/test/mesh/mesh_access.h @@ -114,6 +114,9 @@ typedef struct mesh_model { // subscription list uint16_t subscriptions[MAX_NR_MESH_SUBSCRIPTION_PER_MODEL]; + + // packet handler for transition events + btstack_packet_handler_t * transition_events_packet_handler; } mesh_model_t; typedef struct { @@ -211,7 +214,7 @@ 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); -void mesh_access_emit_state_update_bool(btstack_packet_handler_t handler, uint8_t element_index, uint32_t model_identifier, +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); // Mesh PDU Getter diff --git a/test/mesh/mesh_generic_server.c b/test/mesh/mesh_generic_server.c index 348cbf677..357cd5540 100644 --- a/test/mesh/mesh_generic_server.c +++ b/test/mesh/mesh_generic_server.c @@ -50,9 +50,6 @@ #include "btstack_memory.h" #include "btstack_debug.h" -// TODO handler in model? -static btstack_packet_handler_t mesh_packet_handler; - static void generic_server_send_message(uint16_t src, uint16_t dest, uint16_t netkey_index, uint16_t appkey_index, mesh_pdu_t *pdu){ uint8_t ttl = mesh_foundation_default_ttl_get(); mesh_upper_transport_setup_access_pdu_header(pdu, netkey_index, appkey_index, ttl, src, dest, 0); @@ -61,8 +58,16 @@ static void generic_server_send_message(uint16_t src, uint16_t dest, uint16_t ne // Generic On Off State -void mesh_generic_on_off_server_register_packet_handler(btstack_packet_handler_t packet_handler){ - mesh_packet_handler = packet_handler; +void mesh_generic_on_off_server_register_packet_handler(mesh_model_t *generic_on_off_server_model, btstack_packet_handler_t transition_events_packet_handler){ + if (transition_events_packet_handler == NULL){ + log_error("mesh_generic_on_off_server_register_packet_handler called with NULL callback"); + return; + } + if (generic_on_off_server_model == NULL){ + log_error("mesh_generic_on_off_server_register_packet_handler called with NULL generic_on_off_server_model"); + return; + } + generic_on_off_server_model->transition_events_packet_handler = &transition_events_packet_handler; } const mesh_access_message_t mesh_generic_on_off_status_transition = { @@ -179,7 +184,7 @@ static void generic_on_off_set_handler(mesh_model_t *generic_on_off_server_model 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_access_message_processed(pdu); - mesh_access_emit_state_update_bool(mesh_packet_handler, + 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, MODEL_STATE_ID_GENERIC_ON_OFF, @@ -213,7 +218,7 @@ void mesh_generic_on_off_server_set_value(mesh_model_t *generic_on_off_server_mo // TODO implement publication generic_on_off_server_state->transition_data.current_value = on_off_value; - mesh_access_emit_state_update_bool(mesh_packet_handler, + 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, MODEL_STATE_ID_GENERIC_ON_OFF, @@ -312,3 +317,5 @@ static void mesh_server_transition_step_bool(mesh_model_t * mesh_model, mesh_tra break; } } + + diff --git a/test/mesh/mesh_generic_server.h b/test/mesh/mesh_generic_server.h index c9c40f818..9c0376501 100644 --- a/test/mesh/mesh_generic_server.h +++ b/test/mesh/mesh_generic_server.h @@ -83,9 +83,10 @@ typedef struct { const mesh_operation_t * mesh_generic_on_off_server_get_operations(void); /** * @brief Register packet handler - * @param packet_handler + * @param generic_on_off_server_model + * @param transition_events_packet_handler */ -void mesh_generic_on_off_server_register_packet_handler(btstack_packet_handler_t packet_handler); +void mesh_generic_on_off_server_register_packet_handler(mesh_model_t *generic_on_off_server_model, btstack_packet_handler_t transition_events_packet_handler); /** * @brief Set ON/OFF value