mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-01 04:20:33 +00:00
mesh: move event_handler from generich on off server to model
This commit is contained in:
parent
b9ccacabde
commit
2b25ccf928
@ -1094,7 +1094,7 @@ int btstack_main(void)
|
|||||||
mesh_generic_on_off_server_model.operations = mesh_generic_on_off_server_get_operations();
|
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_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_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_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);
|
mesh_model_reset_appkeys(&mesh_vendor_model);
|
||||||
|
@ -74,9 +74,9 @@ void mesh_access_init(void){
|
|||||||
mesh_upper_transport_register_access_message_handler(&mesh_access_message_process_handler);
|
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){
|
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};
|
uint8_t event[14] = {HCI_EVENT_MESH_META, 13, MESH_SUBEVENT_STATE_UPDATE_BOOL};
|
||||||
int pos = 3;
|
int pos = 3;
|
||||||
event[pos++] = element_index;
|
event[pos++] = element_index;
|
||||||
@ -86,7 +86,7 @@ void mesh_access_emit_state_update_bool(btstack_packet_handler_t handler, uint8_
|
|||||||
pos += 4;
|
pos += 4;
|
||||||
event[pos++] = (uint8_t)reason;
|
event[pos++] = (uint8_t)reason;
|
||||||
event[pos++] = value;
|
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){
|
mesh_element_t * mesh_primary_element(void){
|
||||||
|
@ -114,6 +114,9 @@ typedef struct mesh_model {
|
|||||||
|
|
||||||
// subscription list
|
// subscription list
|
||||||
uint16_t subscriptions[MAX_NR_MESH_SUBSCRIPTION_PER_MODEL];
|
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;
|
} mesh_model_t;
|
||||||
|
|
||||||
typedef struct {
|
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);
|
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);
|
model_state_id_t state_identifier, model_state_update_reason_t reason, uint8_t value);
|
||||||
|
|
||||||
// Mesh PDU Getter
|
// Mesh PDU Getter
|
||||||
|
@ -50,9 +50,6 @@
|
|||||||
#include "btstack_memory.h"
|
#include "btstack_memory.h"
|
||||||
#include "btstack_debug.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){
|
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();
|
uint8_t ttl = mesh_foundation_default_ttl_get();
|
||||||
mesh_upper_transport_setup_access_pdu_header(pdu, netkey_index, appkey_index, ttl, src, dest, 0);
|
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
|
// Generic On Off State
|
||||||
|
|
||||||
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){
|
||||||
mesh_packet_handler = 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 = {
|
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_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_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),
|
mesh_access_get_element_index(generic_on_off_server_model),
|
||||||
generic_on_off_server_model->model_identifier,
|
generic_on_off_server_model->model_identifier,
|
||||||
MODEL_STATE_ID_GENERIC_ON_OFF,
|
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
|
// TODO implement publication
|
||||||
generic_on_off_server_state->transition_data.current_value = on_off_value;
|
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),
|
mesh_access_get_element_index(generic_on_off_server_model),
|
||||||
generic_on_off_server_model->model_identifier,
|
generic_on_off_server_model->model_identifier,
|
||||||
MODEL_STATE_ID_GENERIC_ON_OFF,
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,9 +83,10 @@ typedef struct {
|
|||||||
const mesh_operation_t * mesh_generic_on_off_server_get_operations(void);
|
const mesh_operation_t * mesh_generic_on_off_server_get_operations(void);
|
||||||
/**
|
/**
|
||||||
* @brief Register packet handler
|
* @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
|
* @brief Set ON/OFF value
|
||||||
|
Loading…
x
Reference in New Issue
Block a user