mesh: remove segmented field from mesh_message_pdu_t

This commit is contained in:
Matthias Ringwald 2020-03-17 23:01:13 +01:00
parent d38a76647a
commit 04050cc707
3 changed files with 29 additions and 50 deletions

View File

@ -847,38 +847,28 @@ static void mesh_lower_transport_network_pdu_sent(mesh_network_pdu_t *network_pd
if (lower_transport_outgoing_segment == network_pdu){ if (lower_transport_outgoing_segment == network_pdu){
btstack_assert(lower_transport_outgoing_message != NULL); btstack_assert(lower_transport_outgoing_message != NULL);
if (lower_transport_outgoing_message->segmented == false){ // of segmented message
// of unsegmented message
mesh_message_pdu_t * message_pdu = lower_transport_outgoing_message;
lower_transport_outgoing_message = NULL;
lower_transport_outgoing_segment = NULL;
higher_layer_handler(MESH_TRANSPORT_PDU_SENT, MESH_TRANSPORT_STATUS_SUCCESS, (mesh_pdu_t *) message_pdu);
return;
} else {
// of segmented message
#ifdef LOG_LOWER_TRANSPORT #ifdef LOG_LOWER_TRANSPORT
printf("[+] Lower transport, segmented pdu %p, seq %06x: network pdu %p sent\n", lower_transport_outgoing_message, mesh_message_seq(lower_transport_outgoing_message), network_pdu); printf("[+] Lower transport, segmented pdu %p, seq %06x: network pdu %p sent\n", lower_transport_outgoing_message, mesh_message_seq(lower_transport_outgoing_message), network_pdu);
#endif #endif
lower_transport_outgoing_segment_queued = 0; lower_transport_outgoing_segment_queued = 0;
if (lower_transport_outgoing_trasnmission_complete){ if (lower_transport_outgoing_trasnmission_complete){
// handle complete // handle complete
lower_transport_outgoing_trasnmission_complete = 0; lower_transport_outgoing_trasnmission_complete = 0;
lower_transport_outgoing_transmission_timeout = 0; lower_transport_outgoing_transmission_timeout = 0;
mesh_lower_transport_outgoing_complete(); mesh_lower_transport_outgoing_complete();
return; return;
}
if (lower_transport_outgoing_transmission_timeout){
// handle timeout
lower_transport_outgoing_transmission_timeout = 0;
mesh_lower_transport_segment_transmission_fired();
return;
}
// send next segment
mesh_lower_transport_send_next_segment();
} }
if (lower_transport_outgoing_transmission_timeout){
// handle timeout
lower_transport_outgoing_transmission_timeout = 0;
mesh_lower_transport_segment_transmission_fired();
return;
}
// send next segment
mesh_lower_transport_send_next_segment();
return; return;
} }
@ -963,24 +953,16 @@ static void mesh_lower_transport_run(void){
break; break;
case MESH_PDU_TYPE_MESSAGE: case MESH_PDU_TYPE_MESSAGE:
message_pdu = (mesh_message_pdu_t *) pdu; message_pdu = (mesh_message_pdu_t *) pdu;
if (message_pdu->segmented){ //
// printf("[+] Lower transport, segmented pdu %p, seq %06x: run start sending now\n", message_pdu, mesh_message_seq(message_pdu));
printf("[+] Lower transport, segmented pdu %p, seq %06x: run start sending now\n", message_pdu, mesh_message_seq(message_pdu)); // start sending segmented pdu
// start sending segmented pdu lower_transport_retry_count = 3;
lower_transport_retry_count = 3; lower_transport_outgoing_message = message_pdu;
lower_transport_outgoing_message = message_pdu; lower_transport_outgoing_transmission_timeout = 0;
lower_transport_outgoing_transmission_timeout = 0; lower_transport_outgoing_trasnmission_complete = 0;
lower_transport_outgoing_trasnmission_complete = 0; mesh_lower_transport_setup_block_ack(message_pdu);
mesh_lower_transport_setup_block_ack(message_pdu); mesh_lower_transport_setup_sending_segmented_pdus();
mesh_lower_transport_setup_sending_segmented_pdus(); mesh_lower_transport_send_next_segment();
mesh_lower_transport_send_next_segment();
} else {
btstack_assert(false);
network_pdu = (mesh_network_pdu_t *) btstack_linked_list_get_first_item(&message_pdu->segments);
lower_transport_outgoing_message = message_pdu;
lower_transport_outgoing_segment = network_pdu;
mesh_network_send_pdu(network_pdu);
}
break; break;
default: default:
btstack_assert(false); btstack_assert(false);

View File

@ -139,8 +139,6 @@ typedef struct {
uint32_t retransmit_timeout_ms; uint32_t retransmit_timeout_ms;
uint32_t ack_opcode; uint32_t ack_opcode;
bool segmented;
// rx/tx: acknowledgement timer / segment transmission timer // rx/tx: acknowledgement timer / segment transmission timer
btstack_timer_source_t acknowledgement_timer; btstack_timer_source_t acknowledgement_timer;
// rx: incomplete timer / tx: resend timer // rx: incomplete timer / tx: resend timer

View File

@ -630,7 +630,7 @@ static void mesh_upper_transport_pdu_handler(mesh_transport_callback_type_t call
if (higher_layer_handler){ if (higher_layer_handler){
higher_layer_handler(callback_type, status, (mesh_pdu_t*) network_pdu); higher_layer_handler(callback_type, status, (mesh_pdu_t*) network_pdu);
} else { } else {
mesh_transport_pdu_free(transport_pdu); mesh_network_pdu_free(network_pdu);
} }
break; break;
default: default:
@ -666,7 +666,6 @@ static void mesh_upper_transport_send_segmented_pdu(mesh_transport_pdu_t * trans
outgoing_segmented_pdu = transport_pdu; outgoing_segmented_pdu = transport_pdu;
mesh_message_pdu_t * message_pdu = &outgoing_segmented_message_singleton; mesh_message_pdu_t * message_pdu = &outgoing_segmented_message_singleton;
message_pdu->pdu_header.pdu_type = MESH_PDU_TYPE_MESSAGE; message_pdu->pdu_header.pdu_type = MESH_PDU_TYPE_MESSAGE;
message_pdu->segmented = true;
// convert mesh_transport_pdu_t into mesh_message_pdu_t // convert mesh_transport_pdu_t into mesh_message_pdu_t
uint16_t message_offset = 0; uint16_t message_offset = 0;