mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-25 09:02:30 +00:00
mesh: set retry count for segmented messages in mesh_lower_transport_send_dpu
This commit is contained in:
parent
79eb95b0a5
commit
b4977f3541
@ -62,9 +62,12 @@ static void mesh_lower_transport_segment_transmission_timeout(btstack_timer_sour
|
|||||||
|
|
||||||
// lower transport outgoing state
|
// lower transport outgoing state
|
||||||
|
|
||||||
// queue mesh_segmented_pdu_t or mesh_network_pdu_t
|
// queued mesh_segmented_pdu_t or mesh_network_pdu_t
|
||||||
static btstack_linked_list_t lower_transport_outgoing_ready;
|
static btstack_linked_list_t lower_transport_outgoing_ready;
|
||||||
|
|
||||||
|
// mesh_segmented_pdu_t to unicast address, segment transmission timer is active
|
||||||
|
static btstack_linked_list_t lower_transport_outgoing_waiting;
|
||||||
|
|
||||||
// active outgoing segmented message
|
// active outgoing segmented message
|
||||||
static mesh_segmented_pdu_t * lower_transport_outgoing_message;
|
static mesh_segmented_pdu_t * lower_transport_outgoing_message;
|
||||||
static uint16_t lower_transport_outgoing_seg_o;
|
static uint16_t lower_transport_outgoing_seg_o;
|
||||||
@ -735,23 +738,31 @@ static void mesh_lower_transport_send_next_segment(void){
|
|||||||
lower_transport_outgoing_seg_o = 0;
|
lower_transport_outgoing_seg_o = 0;
|
||||||
|
|
||||||
// done for unicast, ack timer already set, too
|
// done for unicast, ack timer already set, too
|
||||||
if (mesh_network_address_unicast(lower_transport_outgoing_message->dst)) return;
|
if (mesh_network_address_unicast(lower_transport_outgoing_message->dst)) {
|
||||||
|
// btstack_linked_list_add(&lower_transport_outgoing_waiting, (btstack_linked_item_t *) lower_transport_outgoing_message);
|
||||||
|
// lower_transport_outgoing_message = NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// done, more?
|
// done for group/virtual, no more retries?
|
||||||
if (lower_transport_outgoing_message->retry_count == 0){
|
if (lower_transport_outgoing_message->retry_count == 0){
|
||||||
#ifdef LOG_LOWER_TRANSPORT
|
#ifdef LOG_LOWER_TRANSPORT
|
||||||
printf("[+] Lower Transport, message unacknowledged -> free\n");
|
printf("[+] Lower Transport, message unacknowledged -> free\n");
|
||||||
#endif
|
#endif
|
||||||
// notify upper transport
|
// notify upper transport, sets lower_transport_outgoing_message = NULL
|
||||||
mesh_lower_transport_outgoing_complete();
|
mesh_lower_transport_outgoing_complete();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// start retry
|
// re-queue mssage;
|
||||||
#ifdef LOG_LOWER_TRANSPORT
|
#ifdef LOG_LOWER_TRANSPORT
|
||||||
printf("[+] Lower Transport, message unacknowledged retry count %u\n", lower_transport_outgoing_message->retry_count);
|
printf("[+] Lower Transport, message unacknowledged retry count %u\n", lower_transport_outgoing_message->retry_count);
|
||||||
#endif
|
#endif
|
||||||
lower_transport_outgoing_message->retry_count--;
|
lower_transport_outgoing_message->retry_count--;
|
||||||
|
// btstack_linked_list_add(&lower_transport_outgoing_ready, (btstack_linked_item_t *) lower_transport_outgoing_message);
|
||||||
|
// lower_transport_outgoing_message = NULL;
|
||||||
|
// mesh_lower_transport_run();
|
||||||
|
// return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// restart segment transmission timer for unicast dst
|
// restart segment transmission timer for unicast dst
|
||||||
@ -860,6 +871,7 @@ static void mesh_lower_transport_setup_block_ack(mesh_segmented_pdu_t *message_p
|
|||||||
|
|
||||||
void mesh_lower_transport_send_pdu(mesh_pdu_t *pdu){
|
void mesh_lower_transport_send_pdu(mesh_pdu_t *pdu){
|
||||||
mesh_network_pdu_t * network_pdu;
|
mesh_network_pdu_t * network_pdu;
|
||||||
|
mesh_segmented_pdu_t * segmented_pdu;
|
||||||
switch (pdu->pdu_type){
|
switch (pdu->pdu_type){
|
||||||
case MESH_PDU_TYPE_UPPER_UNSEGMENTED_ACCESS:
|
case MESH_PDU_TYPE_UPPER_UNSEGMENTED_ACCESS:
|
||||||
case MESH_PDU_TYPE_UPPER_UNSEGMENTED_CONTROL:
|
case MESH_PDU_TYPE_UPPER_UNSEGMENTED_CONTROL:
|
||||||
@ -867,6 +879,8 @@ void mesh_lower_transport_send_pdu(mesh_pdu_t *pdu){
|
|||||||
btstack_assert(network_pdu->len >= 9);
|
btstack_assert(network_pdu->len >= 9);
|
||||||
break;
|
break;
|
||||||
case MESH_PDU_TYPE_SEGMENTED:
|
case MESH_PDU_TYPE_SEGMENTED:
|
||||||
|
segmented_pdu = (mesh_segmented_pdu_t *) pdu;
|
||||||
|
segmented_pdu->retry_count = 3;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
btstack_assert(false);
|
btstack_assert(false);
|
||||||
@ -916,7 +930,6 @@ static void mesh_lower_transport_run(void){
|
|||||||
message_pdu->seq);
|
message_pdu->seq);
|
||||||
// start sending segmented pdu
|
// start sending segmented pdu
|
||||||
lower_transport_outgoing_message = message_pdu;
|
lower_transport_outgoing_message = message_pdu;
|
||||||
lower_transport_outgoing_message->retry_count = 3;
|
|
||||||
lower_transport_outgoing_transmission_timeout = false;
|
lower_transport_outgoing_transmission_timeout = false;
|
||||||
lower_transport_outgoing_transmission_complete = false;
|
lower_transport_outgoing_transmission_complete = false;
|
||||||
mesh_lower_transport_setup_block_ack(message_pdu);
|
mesh_lower_transport_setup_block_ack(message_pdu);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user