mesh: explicitly call mesh_access_message_processed after message processed

This commit is contained in:
Matthias Ringwald 2019-04-22 23:21:44 +02:00
parent bbc7a0af3e
commit 0c1ab6c301

View File

@ -1068,6 +1068,10 @@ typedef struct {
static mesh_heartbeat_publication_t mesh_heartbeat_publication; static mesh_heartbeat_publication_t mesh_heartbeat_publication;
static mesh_model_t mesh_configuration_server_model = { &mesh_heartbeat_publication }; static mesh_model_t mesh_configuration_server_model = { &mesh_heartbeat_publication };
static void mesh_access_message_processed(mesh_pdu_t * pdu){
mesh_upper_transport_message_processed_by_higher_layer(pdu);
}
static void config_server_send_message(mesh_model_t *mesh_model, uint16_t netkey_index, uint16_t dest, static void config_server_send_message(mesh_model_t *mesh_model, uint16_t netkey_index, uint16_t dest,
mesh_pdu_t *pdu){ mesh_pdu_t *pdu){
UNUSED(mesh_model); UNUSED(mesh_model);
@ -1079,6 +1083,7 @@ static void config_server_send_message(mesh_model_t *mesh_model, uint16_t netkey
mesh_upper_transport_send_access_pdu(pdu); mesh_upper_transport_send_access_pdu(pdu);
} }
static void config_composition_data_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest){ static void config_composition_data_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest){
printf("Received Config Composition Data Get -> send Config Composition Data Status\n"); printf("Received Config Composition Data Get -> send Config Composition Data Status\n");
@ -1118,6 +1123,8 @@ static void config_composition_data_status(mesh_model_t * mesh_model, uint16_t n
static void config_composition_data_get_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){ static void config_composition_data_get_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){
config_composition_data_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_composition_data_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
static void config_model_beacon_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest){ static void config_model_beacon_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest){
@ -1132,6 +1139,8 @@ static void config_model_beacon_status(mesh_model_t * mesh_model, uint16_t netke
static void config_beacon_get_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){ static void config_beacon_get_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){
config_model_beacon_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_model_beacon_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
static void config_beacon_set_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){ static void config_beacon_set_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){
@ -1147,6 +1156,8 @@ static void config_beacon_set_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu
mesh_foundation_beacon_set(beacon_enabled); mesh_foundation_beacon_set(beacon_enabled);
// //
config_model_beacon_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_model_beacon_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
static void config_model_default_ttl_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest){ static void config_model_default_ttl_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest){
@ -1161,6 +1172,8 @@ static void config_model_default_ttl_status(mesh_model_t * mesh_model, uint16_t
static void config_default_ttl_get_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){ static void config_default_ttl_get_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){
config_model_default_ttl_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_model_default_ttl_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
static void config_default_ttl_set_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){ static void config_default_ttl_set_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){
@ -1175,6 +1188,8 @@ static void config_default_ttl_set_handler(mesh_model_t *mesh_model, mesh_pdu_t
mesh_foundation_default_ttl_set(new_ttl); mesh_foundation_default_ttl_set(new_ttl);
// //
config_model_default_ttl_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_model_default_ttl_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
static void config_friend_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest){ static void config_friend_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest){
@ -1189,6 +1204,8 @@ static void config_friend_status(mesh_model_t * mesh_model, uint16_t netkey_inde
static void config_friend_get_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){ static void config_friend_get_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){
config_friend_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_friend_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
static void config_friend_set_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){ static void config_friend_set_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){
@ -1207,6 +1224,8 @@ static void config_friend_set_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu
// //
config_friend_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_friend_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
static void config_model_gatt_proxy_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest){ static void config_model_gatt_proxy_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest){
@ -1221,6 +1240,8 @@ static void config_model_gatt_proxy_status(mesh_model_t * mesh_model, uint16_t n
static void config_gatt_proxy_get_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){ static void config_gatt_proxy_get_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){
config_model_gatt_proxy_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_model_gatt_proxy_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
static void config_gatt_proxy_set_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){ static void config_gatt_proxy_set_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){
@ -1235,6 +1256,8 @@ static void config_gatt_proxy_set_handler(mesh_model_t *mesh_model, mesh_pdu_t *
mesh_foundation_gatt_proxy_set(enabled); mesh_foundation_gatt_proxy_set(enabled);
// //
config_model_gatt_proxy_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_model_gatt_proxy_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
static void config_model_relay_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest){ static void config_model_relay_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest){
@ -1250,6 +1273,8 @@ static void config_model_relay_status(mesh_model_t * mesh_model, uint16_t netkey
static void config_relay_get_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){ static void config_relay_get_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){
config_model_relay_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_model_relay_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
static void config_relay_set_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){ static void config_relay_set_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu){
@ -1272,6 +1297,8 @@ static void config_relay_set_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu)
// //
config_model_relay_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_model_relay_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
static void config_model_network_transmit_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest){ static void config_model_network_transmit_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest){
@ -1286,6 +1313,8 @@ static void config_model_network_transmit_status(mesh_model_t * mesh_model, uint
static void config_model_network_transmit_get_handler(mesh_model_t * mesh_model, mesh_pdu_t * pdu){ static void config_model_network_transmit_get_handler(mesh_model_t * mesh_model, mesh_pdu_t * pdu){
config_model_network_transmit_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_model_network_transmit_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
static void config_model_network_transmit_set_handler(mesh_model_t * mesh_model, mesh_pdu_t * pdu){ static void config_model_network_transmit_set_handler(mesh_model_t * mesh_model, mesh_pdu_t * pdu){
@ -1298,6 +1327,8 @@ static void config_model_network_transmit_set_handler(mesh_model_t * mesh_model,
mesh_foundation_network_transmit_set(new_ttl); mesh_foundation_network_transmit_set(new_ttl);
// //
config_model_network_transmit_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_model_network_transmit_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
static void config_appkey_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest, uint32_t netkey_and_appkey_index, uint8_t status){ static void config_appkey_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest, uint32_t netkey_and_appkey_index, uint8_t status){
@ -1338,6 +1369,8 @@ static void config_appkey_add_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu
// calculate AID // calculate AID
mesh_k4(&mesh_cmac_request, new_app_key, &new_aid, config_appkey_add_aid, (uintptr_t*) (uintptr_t) mesh_pdu_src(pdu)); mesh_k4(&mesh_cmac_request, new_app_key, &new_aid, config_appkey_add_aid, (uintptr_t*) (uintptr_t) mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
static void config_model_subscription_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest, uint8_t status, uint16_t element_address, uint16_t address, uint32_t model_identifier){ static void config_model_subscription_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest, uint8_t status, uint16_t element_address, uint16_t address, uint32_t model_identifier){
@ -1359,11 +1392,14 @@ static void config_model_subscription_add_handler(mesh_model_t *mesh_model, mesh
uint16_t model_identifier = mesh_access_parser_get_u16(&parser); uint16_t model_identifier = mesh_access_parser_get_u16(&parser);
config_model_subscription_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu), 0, element_address, address, model_identifier); config_model_subscription_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu), 0, element_address, address, model_identifier);
mesh_access_message_processed(pdu);
} }
static void static void
config_model_subscription_virtual_address_add_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu) { config_model_subscription_virtual_address_add_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu) {
// TODO: not implemented yet // TODO: not implemented yet
mesh_access_message_processed(pdu);
} }
static void config_model_app_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest, uint8_t status, uint16_t element_address, uint16_t app_key_index, uint32_t model_identifier){ static void config_model_app_status(mesh_model_t * mesh_model, uint16_t netkey_index, uint16_t dest, uint8_t status, uint16_t element_address, uint16_t app_key_index, uint32_t model_identifier){
@ -1386,6 +1422,8 @@ static void config_model_app_bind_handler(mesh_model_t *mesh_model, mesh_pdu_t *
uint16_t model_identifier = mesh_access_parser_get_u16(&parser); uint16_t model_identifier = mesh_access_parser_get_u16(&parser);
config_model_app_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu), 0, element_address, app_key_index, model_identifier); config_model_app_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu), 0, element_address, app_key_index, model_identifier);
mesh_access_message_processed(pdu);
} }
typedef struct { typedef struct {
@ -1481,6 +1519,7 @@ config_model_publication_set_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu)
config_model_publication_status_vendor(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu), config_model_publication_status_vendor(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu),
status, model_id, &publication_model); status, model_id, &publication_model);
} }
mesh_access_message_processed(pdu);
} }
static void config_model_publication_virtual_address_set_hash(void *arg){ static void config_model_publication_virtual_address_set_hash(void *arg){
mesh_model_t *mesh_model = (mesh_model_t*) arg; mesh_model_t *mesh_model = (mesh_model_t*) arg;
@ -1534,6 +1573,8 @@ config_model_publication_virtual_address_set_handler(mesh_model_t *mesh_model,
model_publication_dest = mesh_pdu_src(pdu); model_publication_dest = mesh_pdu_src(pdu);
mesh_virtual_address(&model_publication_request, model_publication_label_uuid, &publication_model.address, &config_model_publication_virtual_address_set_hash, NULL); mesh_virtual_address(&model_publication_request, model_publication_label_uuid, &publication_model.address, &config_model_publication_virtual_address_set_hash, NULL);
mesh_access_message_processed(pdu);
} }
static void static void
@ -1569,6 +1610,7 @@ config_model_publication_get_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu)
config_model_publication_status_vendor(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu), config_model_publication_status_vendor(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu),
status, model_id, &publication_model); status, model_id, &publication_model);
} }
mesh_access_message_processed(pdu);
} }
@ -1655,6 +1697,8 @@ static void config_heartbeat_publication_set_handler(mesh_model_t *mesh_model, m
config_heartbeat_publication_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_heartbeat_publication_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
// check if we should enable heartbeats // check if we should enable heartbeats
if (mesh_heartbeat_publication.destination == MESH_ADDRESS_UNSASSIGNED) { if (mesh_heartbeat_publication.destination == MESH_ADDRESS_UNSASSIGNED) {
btstack_run_loop_remove_timer(&mesh_heartbeat_publication.timer); btstack_run_loop_remove_timer(&mesh_heartbeat_publication.timer);
@ -1671,6 +1715,7 @@ static void config_heartbeat_publication_set_handler(mesh_model_t *mesh_model, m
static void config_heartbeat_publication_get_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu) { static void config_heartbeat_publication_get_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu) {
config_heartbeat_publication_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_heartbeat_publication_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
static void config_node_reset_status(mesh_model_t *mesh_model, uint16_t netkey_index, uint16_t dest){ static void config_node_reset_status(mesh_model_t *mesh_model, uint16_t netkey_index, uint16_t dest){
@ -1685,6 +1730,7 @@ static void config_node_reset_status(mesh_model_t *mesh_model, uint16_t netkey_i
static void config_node_reset_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu) { static void config_node_reset_handler(mesh_model_t *mesh_model, mesh_pdu_t * pdu) {
mesh_foundation_node_reset(); mesh_foundation_node_reset();
config_node_reset_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu)); config_node_reset_status(mesh_model, mesh_pdu_netkey_index(pdu), mesh_pdu_src(pdu));
mesh_access_message_processed(pdu);
} }
// //
@ -1748,13 +1794,16 @@ static mesh_operation_t mesh_configuration_server_model_operations[] = {
{ 0, 0, NULL} { 0, 0, NULL}
}; };
static void mesh_access_process(mesh_pdu_t * pdu){ static void mesh_access_message_process_handler(mesh_pdu_t * pdu){
// get opcode and size // get opcode and size
uint32_t opcode = 0; uint32_t opcode = 0;
uint16_t opcode_size = 0; uint16_t opcode_size = 0;
int ok = mesh_access_pdu_get_opcode( pdu, &opcode, &opcode_size); int ok = mesh_access_pdu_get_opcode( pdu, &opcode, &opcode_size);
if (!ok) return; if (!ok) {
mesh_access_message_processed(pdu);
return;
}
uint16_t len = mesh_pdu_len(pdu); uint16_t len = mesh_pdu_len(pdu);
printf("MESH Access Message, Opcode = %x: ", opcode); printf("MESH Access Message, Opcode = %x: ", opcode);
@ -1778,12 +1827,10 @@ static void mesh_access_process(mesh_pdu_t * pdu){
operation->handler(model, pdu); operation->handler(model, pdu);
return; return;
} }
printf("Message not handled\n");
}
static void mesh_access_message_process_handler(mesh_pdu_t *pdu){ // operation not found -> done
mesh_access_process(pdu); printf("Message not handled\n");
mesh_upper_transport_message_processed_by_higher_layer(pdu); mesh_access_message_processed(pdu);
} }
static btstack_crypto_aes128_cmac_t salt_request; static btstack_crypto_aes128_cmac_t salt_request;