mesh: implement mesh_upper_transport_request_to_send

This commit is contained in:
Matthias Ringwald 2020-04-06 15:01:23 +02:00
parent 643aa44b85
commit 132f11c078
2 changed files with 26 additions and 2 deletions

View File

@ -124,6 +124,9 @@ static btstack_linked_list_t upper_transport_outgoing;
// outgoing upper transport messages that have been sent to lower transport and wait for sent event
static btstack_linked_list_t upper_transport_outgoing_active;
// outgoing send requests
static btstack_linked_list_t upper_transport_send_requests;
// message builder buffers
static mesh_upper_transport_pdu_t * message_builder_reserved_upper_pdu;
static uint8_t message_builder_num_network_pdus_reserved;
@ -387,7 +390,10 @@ static void mesh_upper_transport_deliver_access_message(void) {
}
static bool mesh_upper_transport_send_requests_pending(void){
return incoming_access_pdu_ready;
if (incoming_access_pdu_ready) {
return true;
}
return btstack_linked_list_empty(&upper_transport_send_requests) == false;
}
static void mesh_upper_transport_schedule_send_requests(void){
@ -408,14 +414,26 @@ static void mesh_upper_transport_schedule_send_requests(void){
}
// process send requests
// incoming access pdu
if (incoming_access_pdu_ready){
// message builder ready = one outgoing pdu is guaranteed, deliver access pdu
mesh_upper_transport_deliver_access_message();
return;
continue;
}
// regular send request
btstack_context_callback_registration_t * send_request = (btstack_context_callback_registration_t *) btstack_linked_list_pop(&upper_transport_send_requests);
btstack_assert(send_request != NULL);
(*send_request->callback)(send_request->context);
}
}
void mesh_upper_transport_request_to_send(btstack_context_callback_registration_t * request){
btstack_linked_list_add_tail(&upper_transport_send_requests, (btstack_linked_item_t *) request);
mesh_upper_transport_schedule_send_requests();
}
static void mesh_upper_transport_validate_access_message_ccm(void * arg){
UNUSED(arg);

View File

@ -129,6 +129,12 @@ void mesh_upper_transport_register_access_message_handler(void (*callback)(mesh_
*/
void mesh_upper_transport_message_processed_by_higher_layer(mesh_pdu_t * pdu);
/**
* @brief Request to send upper transport PDU
* @param request
*/
void mesh_upper_transport_request_to_send(btstack_context_callback_registration_t * request);
/**
* @brief Free any PDU type
* @param pdu