mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-09 21:45:54 +00:00
mesh: add mesh_upper_transport_schedule_send_requests and mesh_upper_transport_send_requests_pending
This commit is contained in:
parent
5efae9f328
commit
643aa44b85
@ -381,28 +381,41 @@ static void mesh_upper_transport_process_control_message_done(mesh_control_pdu_t
|
|||||||
mesh_upper_transport_run();
|
mesh_upper_transport_run();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mesh_upper_transport_deliver_access_message(void){
|
static void mesh_upper_transport_deliver_access_message(void) {
|
||||||
if (incoming_access_pdu_ready == false){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool message_builder_ready = mesh_upper_transport_message_reserve();
|
|
||||||
|
|
||||||
if (message_builder_ready == false){
|
|
||||||
// waiting for free upper pdu
|
|
||||||
if (message_builder_reserved_upper_pdu == false){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// register for free network pdus if missing
|
|
||||||
mesh_network_notify_on_freed_pdu(&mesh_upper_transport_deliver_access_message);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// message builder ready = one outgoing pdu is guaranteed, deliver access pdu
|
|
||||||
incoming_access_pdu_ready = false;
|
incoming_access_pdu_ready = false;
|
||||||
mesh_access_message_handler(MESH_TRANSPORT_PDU_RECEIVED, MESH_TRANSPORT_STATUS_SUCCESS, (mesh_pdu_t *) incoming_access_decrypted);
|
mesh_access_message_handler(MESH_TRANSPORT_PDU_RECEIVED, MESH_TRANSPORT_STATUS_SUCCESS, (mesh_pdu_t *) incoming_access_decrypted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool mesh_upper_transport_send_requests_pending(void){
|
||||||
|
return incoming_access_pdu_ready;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mesh_upper_transport_schedule_send_requests(void){
|
||||||
|
|
||||||
|
while (mesh_upper_transport_send_requests_pending()){
|
||||||
|
|
||||||
|
// get ready
|
||||||
|
bool message_builder_ready = mesh_upper_transport_message_reserve();
|
||||||
|
|
||||||
|
if (message_builder_ready == false){
|
||||||
|
// waiting for free upper pdu, we will get called again on pdu free
|
||||||
|
if (message_builder_reserved_upper_pdu == false){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// request callback on network pdu free
|
||||||
|
mesh_network_notify_on_freed_pdu(&mesh_upper_transport_schedule_send_requests);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// process send requests
|
||||||
|
if (incoming_access_pdu_ready){
|
||||||
|
// message builder ready = one outgoing pdu is guaranteed, deliver access pdu
|
||||||
|
mesh_upper_transport_deliver_access_message();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void mesh_upper_transport_validate_access_message_ccm(void * arg){
|
static void mesh_upper_transport_validate_access_message_ccm(void * arg){
|
||||||
UNUSED(arg);
|
UNUSED(arg);
|
||||||
|
|
||||||
@ -430,7 +443,7 @@ static void mesh_upper_transport_validate_access_message_ccm(void * arg){
|
|||||||
|
|
||||||
// pass to upper layer
|
// pass to upper layer
|
||||||
incoming_access_pdu_ready = true;
|
incoming_access_pdu_ready = true;
|
||||||
mesh_upper_transport_deliver_access_message();
|
mesh_upper_transport_schedule_send_requests();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
uint8_t akf = incoming_access_decrypted->akf_aid_control & 0x40;
|
uint8_t akf = incoming_access_decrypted->akf_aid_control & 0x40;
|
||||||
@ -1034,8 +1047,8 @@ void mesh_upper_transport_pdu_free(mesh_pdu_t * pdu){
|
|||||||
mesh_network_pdu_free(segment);
|
mesh_network_pdu_free(segment);
|
||||||
}
|
}
|
||||||
btstack_memory_mesh_upper_transport_pdu_free(upper_pdu);
|
btstack_memory_mesh_upper_transport_pdu_free(upper_pdu);
|
||||||
// check if incoming access pdu ready
|
// check if send request can be handled now
|
||||||
mesh_upper_transport_deliver_access_message();
|
mesh_upper_transport_schedule_send_requests();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
btstack_assert(false);
|
btstack_assert(false);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user