mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-29 22:20:37 +00:00
mesh: replace mesh_upper_transport_setup_access_pdu with message builder
This commit is contained in:
parent
96a83bdb1f
commit
734bae6528
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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){
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user