mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-04-01 04:20:33 +00:00
mesh: free chunks correctly, trigger segmented pdu resend
This commit is contained in:
parent
972841451c
commit
6dac9d64fd
@ -425,6 +425,7 @@ uint16_t mesh_pdu_dst(mesh_pdu_t * pdu){
|
|||||||
case MESH_PDU_TYPE_NETWORK:
|
case MESH_PDU_TYPE_NETWORK:
|
||||||
return mesh_network_dst((mesh_network_pdu_t *) pdu);
|
return mesh_network_dst((mesh_network_pdu_t *) pdu);
|
||||||
case MESH_PDU_TYPE_UPPER_UNSEGMENTED_ACCESS:
|
case MESH_PDU_TYPE_UPPER_UNSEGMENTED_ACCESS:
|
||||||
|
case MESH_PDU_TYPE_UPPER_SEGMENTED_ACCESS:
|
||||||
return ((mesh_upper_transport_pdu_t *) pdu)->dst;
|
return ((mesh_upper_transport_pdu_t *) pdu)->dst;
|
||||||
default:
|
default:
|
||||||
btstack_assert(false);
|
btstack_assert(false);
|
||||||
|
@ -114,13 +114,6 @@ void mesh_segmented_pdu_free(mesh_segmented_pdu_t * message_pdu){
|
|||||||
|
|
||||||
// INCOMING //
|
// INCOMING //
|
||||||
|
|
||||||
static void mesh_lower_transport_incoming_report_segments_as_processed(mesh_segmented_pdu_t * message_pdu) {
|
|
||||||
while (message_pdu->segments){
|
|
||||||
mesh_network_pdu_t * segment = (mesh_network_pdu_t *) btstack_linked_list_pop(&message_pdu->segments);
|
|
||||||
mesh_network_message_processed_by_higher_layer(segment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void mesh_lower_transport_incoming_deliver_to_higher_layer(void){
|
static void mesh_lower_transport_incoming_deliver_to_higher_layer(void){
|
||||||
if (mesh_lower_transport_higher_layer_pdu == NULL && !btstack_linked_list_empty(&mesh_lower_transport_queued_for_higher_layer)){
|
if (mesh_lower_transport_higher_layer_pdu == NULL && !btstack_linked_list_empty(&mesh_lower_transport_queued_for_higher_layer)){
|
||||||
mesh_pdu_t * pdu = (mesh_pdu_t *) btstack_linked_list_pop(&mesh_lower_transport_queued_for_higher_layer);
|
mesh_pdu_t * pdu = (mesh_pdu_t *) btstack_linked_list_pop(&mesh_lower_transport_queued_for_higher_layer);
|
||||||
@ -245,10 +238,8 @@ static void mesh_lower_transport_incoming_incomplete_timeout(btstack_timer_sourc
|
|||||||
printf("mesh_lower_transport_incoming_incomplete_timeout for %p - give up\n", segmented_pdu);
|
printf("mesh_lower_transport_incoming_incomplete_timeout for %p - give up\n", segmented_pdu);
|
||||||
#endif
|
#endif
|
||||||
mesh_lower_transport_incoming_segmented_message_complete(segmented_pdu);
|
mesh_lower_transport_incoming_segmented_message_complete(segmented_pdu);
|
||||||
// free segments
|
|
||||||
mesh_lower_transport_incoming_report_segments_as_processed(segmented_pdu);
|
|
||||||
// free message
|
// free message
|
||||||
btstack_memory_mesh_segmented_pdu_free(segmented_pdu);
|
mesh_segmented_pdu_free(segmented_pdu);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mesh_lower_transport_incoming_start_acknowledgment_timer(mesh_segmented_pdu_t * segmented_pdu, uint32_t timeout){
|
static void mesh_lower_transport_incoming_start_acknowledgment_timer(mesh_segmented_pdu_t * segmented_pdu, uint32_t timeout){
|
||||||
@ -458,7 +449,6 @@ void mesh_lower_transport_message_processed_by_higher_layer(mesh_pdu_t * pdu){
|
|||||||
switch (pdu->pdu_type){
|
switch (pdu->pdu_type){
|
||||||
case MESH_PDU_TYPE_SEGMENTED:
|
case MESH_PDU_TYPE_SEGMENTED:
|
||||||
// free segments
|
// free segments
|
||||||
mesh_lower_transport_incoming_report_segments_as_processed((mesh_segmented_pdu_t *) pdu);
|
|
||||||
mesh_segmented_pdu_free((mesh_segmented_pdu_t *) pdu);
|
mesh_segmented_pdu_free((mesh_segmented_pdu_t *) pdu);
|
||||||
break;
|
break;
|
||||||
case MESH_PDU_TYPE_UNSEGMENTED:
|
case MESH_PDU_TYPE_UNSEGMENTED:
|
||||||
@ -748,6 +738,9 @@ static void mesh_lower_transport_outgoing_segment_transmission_fired(mesh_segmen
|
|||||||
// re-queue message for sending remaining segments
|
// re-queue message for sending remaining segments
|
||||||
btstack_linked_list_remove(&lower_transport_outgoing_waiting, (btstack_linked_item_t *) segmented_pdu);
|
btstack_linked_list_remove(&lower_transport_outgoing_waiting, (btstack_linked_item_t *) segmented_pdu);
|
||||||
btstack_linked_list_add_tail(&lower_transport_outgoing_ready, (btstack_linked_item_t *) segmented_pdu);
|
btstack_linked_list_add_tail(&lower_transport_outgoing_ready, (btstack_linked_item_t *) segmented_pdu);
|
||||||
|
|
||||||
|
// continue
|
||||||
|
mesh_lower_transport_run();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mesh_lower_transport_outgoing_segment_transmission_timeout(btstack_timer_source_t * ts){
|
static void mesh_lower_transport_outgoing_segment_transmission_timeout(btstack_timer_source_t * ts){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user