From 734bae6528bd0e2937fe475efb68727245f25700 Mon Sep 17 00:00:00 2001 From: Matthias Ringwald Date: Fri, 3 Apr 2020 11:31:22 +0200 Subject: [PATCH] mesh: replace mesh_upper_transport_setup_access_pdu with message builder --- src/mesh/mesh_upper_transport.c | 32 -------------------------------- src/mesh/mesh_upper_transport.h | 4 ---- test/mesh/mesh_message_test.cpp | 26 +++++++++++++++----------- test/mesh/mesh_pts.c | 33 +++++++++++++++++++++------------ 4 files changed, 36 insertions(+), 59 deletions(-) diff --git a/src/mesh/mesh_upper_transport.c b/src/mesh/mesh_upper_transport.c index 10d3167ef..325924a0b 100644 --- a/src/mesh/mesh_upper_transport.c +++ b/src/mesh/mesh_upper_transport.c @@ -1146,23 +1146,6 @@ static uint8_t mesh_upper_transport_setup_upper_access_pdu_header(mesh_upper_tra return 0; } -static uint8_t mesh_upper_transport_setup_upper_access_pdu(mesh_upper_transport_pdu_t * upper_pdu, uint16_t netkey_index, uint16_t appkey_index, uint8_t ttl, uint16_t src, uint16_t dest, - uint8_t szmic, const uint8_t * access_pdu_data, uint8_t access_pdu_len){ - int status = mesh_upper_transport_setup_upper_access_pdu_header(upper_pdu, netkey_index, appkey_index, ttl, src, - dest, szmic); - if (status) return status; - - // allocate segments - btstack_linked_list_t free_segments = NULL; - bool ok = mesh_segmented_allocate_segments( &free_segments, access_pdu_len); - if (!ok) return 1; - // store control pdu - mesh_segmented_store_payload(access_pdu_data, access_pdu_len, &free_segments, &upper_pdu->segments); - upper_pdu->len = access_pdu_len; - return 0; -} - - uint8_t mesh_upper_transport_setup_access_pdu_header(mesh_pdu_t * pdu, uint16_t netkey_index, uint16_t appkey_index, uint8_t ttl, uint16_t src, uint16_t dest, uint8_t szmic){ switch (pdu->pdu_type){ @@ -1176,21 +1159,6 @@ uint8_t mesh_upper_transport_setup_access_pdu_header(mesh_pdu_t * pdu, uint16_t } } -uint8_t mesh_upper_transport_setup_access_pdu(mesh_pdu_t * pdu, uint16_t netkey_index, uint16_t appkey_index, - uint8_t ttl, uint16_t src, uint16_t dest, uint8_t szmic, - const uint8_t * access_pdu_data, uint8_t access_pdu_len){ - switch (pdu->pdu_type){ - case MESH_PDU_TYPE_UPPER_SEGMENTED_ACCESS: - case MESH_PDU_TYPE_UPPER_UNSEGMENTED_ACCESS: - return mesh_upper_transport_setup_upper_access_pdu((mesh_upper_transport_pdu_t *) pdu, netkey_index, - appkey_index, ttl, src, dest, szmic, access_pdu_data, - access_pdu_len); - default: - btstack_assert(false); - return 1; - } -} - void mesh_upper_transport_register_access_message_handler(void (*callback)(mesh_transport_callback_type_t callback_type, mesh_transport_status_t status, mesh_pdu_t * pdu)) { mesh_access_message_handler = callback; } diff --git a/src/mesh/mesh_upper_transport.h b/src/mesh/mesh_upper_transport.h index 986a18856..c11441a38 100644 --- a/src/mesh/mesh_upper_transport.h +++ b/src/mesh/mesh_upper_transport.h @@ -84,10 +84,6 @@ void mesh_upper_transport_register_access_message_handler(void (*callback)(mesh_ uint8_t mesh_upper_transport_setup_access_pdu_header(mesh_pdu_t * pdu, uint16_t netkey_index, uint16_t appkey_index, uint8_t ttl, uint16_t src, uint16_t dest, uint8_t szmic); -uint8_t mesh_upper_transport_setup_access_pdu(mesh_pdu_t * pdu, uint16_t netkey_index, uint16_t appkey_index, - uint8_t ttl, uint16_t src, uint16_t dest, uint8_t szmic, - const uint8_t * access_pdu_data, uint8_t access_pdu_len); - void mesh_upper_transport_send_access_pdu(mesh_pdu_t * pdu); void mesh_upper_transport_pdu_free(mesh_pdu_t * pdu); diff --git a/test/mesh/mesh_message_test.cpp b/test/mesh/mesh_message_test.cpp index bfe06e8c4..9eb4b666b 100644 --- a/test/mesh/mesh_message_test.cpp +++ b/test/mesh/mesh_message_test.cpp @@ -444,22 +444,31 @@ static void expect_adv_network_pdu(const uint8_t * data, uint16_t len){ static mesh_upper_transport_pdu_t upper_pdu = { 0 }; void test_send_access_message(uint16_t netkey_index, uint16_t appkey_index, uint8_t ttl, uint16_t src, uint16_t dest, uint8_t szmic, char * control_pdu, int count, char ** lower_transport_pdus, char ** network_pdus){ - upper_pdu.lower_pdu = NULL; - transport_pdu_len = strlen(control_pdu) / 2; btstack_parse_hex(control_pdu, transport_pdu_len, transport_pdu_data); - upper_pdu.flags = 0; + mesh_pdu_type_t pdu_type; if (count == 1 ){ // send as unsegmented access pdu - upper_pdu.pdu_header.pdu_type = MESH_PDU_TYPE_UPPER_UNSEGMENTED_ACCESS; + pdu_type = MESH_PDU_TYPE_UPPER_UNSEGMENTED_ACCESS; } else { // send as segmented access pdu - upper_pdu.pdu_header.pdu_type = MESH_PDU_TYPE_UPPER_SEGMENTED_ACCESS; + pdu_type = MESH_PDU_TYPE_UPPER_SEGMENTED_ACCESS; } - +#if 0 + // + upper_pdu.lower_pdu = NULL; + upper_pdu.flags = 0; + upper_pdu.pdu_type = pdu_type; mesh_pdu_t * pdu = (mesh_pdu_t *) &upper_pdu; mesh_upper_transport_setup_access_pdu(pdu, netkey_index, appkey_index, ttl, src, dest, szmic, transport_pdu_data, transport_pdu_len); +#else + mesh_upper_transport_builder_t builder; + mesh_upper_transport_message_init(&builder, pdu_type); + mesh_upper_transport_message_add_data(&builder, transport_pdu_data, transport_pdu_len); + mesh_pdu_t * pdu = (mesh_pdu_t *) mesh_upper_transport_message_finalize(&builder); + mesh_upper_transport_setup_access_pdu_header(pdu, netkey_index, appkey_index, ttl, src, dest, szmic); +#endif mesh_upper_transport_send_access_pdu(pdu); // check for all network pdus @@ -477,11 +486,6 @@ void test_send_access_message(uint16_t netkey_index, uint16_t appkey_index, uin expect_adv_network_pdu(test_network_pdu_data, test_network_pdu_len); #endif } - // free segments - while (btstack_linked_list_empty(&upper_pdu.segments) == false){ - mesh_network_pdu_t * network_pdu = (mesh_network_pdu_t *) btstack_linked_list_pop(&upper_pdu.segments); - mesh_network_pdu_free(network_pdu); - } } void test_send_control_message(uint16_t netkey_index, uint8_t ttl, uint16_t src, uint16_t dest, char * control_pdu, int count, char ** lower_transport_pdus, char ** network_pdus){ diff --git a/test/mesh/mesh_pts.c b/test/mesh/mesh_pts.c index a8597d759..610d273eb 100644 --- a/test/mesh/mesh_pts.c +++ b/test/mesh/mesh_pts.c @@ -397,8 +397,11 @@ static void send_pts_unsegmented_access_messsage(void){ uint16_t appkey_index = 0; // MESH_DEVICE_KEY_INDEX; // send as unsegmented access pdu - mesh_pdu_t * pdu = (mesh_pdu_t*) mesh_network_pdu_get(); - int status = mesh_upper_transport_setup_access_pdu(pdu, netkey_index, appkey_index, ttl, src, dest, 0, access_pdu_data, access_pdu_len); + mesh_upper_transport_builder_t builder; + mesh_upper_transport_message_init(&builder, MESH_PDU_TYPE_UPPER_UNSEGMENTED_ACCESS); + mesh_upper_transport_message_add_data(&builder, access_pdu_data, access_pdu_len); + mesh_pdu_t * pdu = (mesh_pdu_t *) mesh_upper_transport_message_finalize(&builder); + int status = mesh_upper_transport_setup_access_pdu_header(pdu, netkey_index, appkey_index, ttl, src, dest, 0); if (status) return; mesh_access_send_unacknowledged_pdu(pdu); } @@ -417,9 +420,12 @@ static void send_pts_segmented_access_messsage_unicast(void){ uint16_t netkey_index = 0; uint16_t appkey_index = 0; // MESH_DEVICE_KEY_INDEX; - // send as segmented access pdu - mesh_pdu_t * pdu = (mesh_pdu_t *) btstack_memory_mesh_upper_transport_pdu_get(); - int status = mesh_upper_transport_setup_access_pdu(pdu, netkey_index, appkey_index, ttl, src, dest, 0, access_pdu_data, access_pdu_len); + // send as unsegmented access pdu + mesh_upper_transport_builder_t builder; + mesh_upper_transport_message_init(&builder, MESH_PDU_TYPE_UPPER_UNSEGMENTED_ACCESS); + mesh_upper_transport_message_add_data(&builder, access_pdu_data, access_pdu_len); + mesh_pdu_t * pdu = (mesh_pdu_t *) mesh_upper_transport_message_finalize(&builder); + int status = mesh_upper_transport_setup_access_pdu_header(pdu, netkey_index, appkey_index, ttl, src, dest, 0); if (status) return; mesh_access_send_unacknowledged_pdu(pdu); } @@ -439,9 +445,11 @@ static void send_pts_segmented_access_messsage_group(void){ uint16_t appkey_index = 0; // send as segmented access pdu - mesh_pdu_t * pdu = (mesh_pdu_t *) btstack_memory_mesh_upper_transport_pdu_get(); - int status = mesh_upper_transport_setup_access_pdu(pdu, netkey_index, appkey_index, ttl, src, dest, 0, access_pdu_data, access_pdu_len); - if (status) return; + mesh_upper_transport_builder_t builder; + mesh_upper_transport_message_init(&builder, MESH_PDU_TYPE_UPPER_SEGMENTED_ACCESS); + mesh_upper_transport_message_add_data(&builder, access_pdu_data, access_pdu_len); + mesh_pdu_t * pdu = (mesh_pdu_t *) mesh_upper_transport_message_finalize(&builder); + int status = mesh_upper_transport_setup_access_pdu_header(pdu, netkey_index, appkey_index, ttl, src, dest, 0); mesh_access_send_unacknowledged_pdu(pdu); } @@ -460,10 +468,11 @@ static void send_pts_segmented_access_messsage_virtual(void){ uint16_t appkey_index = 0; // send as segmented access pdu - static mesh_access_pdu_t segemented_access_pdu; - mesh_pdu_t * pdu = (mesh_pdu_t *) &segemented_access_pdu; - int status = mesh_upper_transport_setup_access_pdu(pdu, netkey_index, appkey_index, ttl, src, dest, 0, access_pdu_data, access_pdu_len); - if (status) return; + mesh_upper_transport_builder_t builder; + mesh_upper_transport_message_init(&builder, MESH_PDU_TYPE_UPPER_SEGMENTED_ACCESS); + mesh_upper_transport_message_add_data(&builder, access_pdu_data, access_pdu_len); + mesh_pdu_t * pdu = (mesh_pdu_t *) mesh_upper_transport_message_finalize(&builder); + int status = mesh_upper_transport_setup_access_pdu_header(pdu, netkey_index, appkey_index, ttl, src, dest, 0); mesh_access_send_unacknowledged_pdu(pdu); }