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){
btstack_assert(lower_transport_outgoing_message != NULL);
if (lower_transport_outgoing_message->segmented == false){
// 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
// of segmented message
#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
lower_transport_outgoing_segment_queued = 0;
if (lower_transport_outgoing_trasnmission_complete){
// handle complete
lower_transport_outgoing_trasnmission_complete = 0;
lower_transport_outgoing_transmission_timeout = 0;
mesh_lower_transport_outgoing_complete();
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();
lower_transport_outgoing_segment_queued = 0;
if (lower_transport_outgoing_trasnmission_complete){
// handle complete
lower_transport_outgoing_trasnmission_complete = 0;
lower_transport_outgoing_transmission_timeout = 0;
mesh_lower_transport_outgoing_complete();
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();
return;
}
@ -963,24 +953,16 @@ static void mesh_lower_transport_run(void){
break;
case MESH_PDU_TYPE_MESSAGE:
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));
// start sending segmented pdu
lower_transport_retry_count = 3;
lower_transport_outgoing_message = message_pdu;
lower_transport_outgoing_transmission_timeout = 0;
lower_transport_outgoing_trasnmission_complete = 0;
mesh_lower_transport_setup_block_ack(message_pdu);
mesh_lower_transport_setup_sending_segmented_pdus();
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);
}
//
printf("[+] Lower transport, segmented pdu %p, seq %06x: run start sending now\n", message_pdu, mesh_message_seq(message_pdu));
// start sending segmented pdu
lower_transport_retry_count = 3;
lower_transport_outgoing_message = message_pdu;
lower_transport_outgoing_transmission_timeout = 0;
lower_transport_outgoing_trasnmission_complete = 0;
mesh_lower_transport_setup_block_ack(message_pdu);
mesh_lower_transport_setup_sending_segmented_pdus();
mesh_lower_transport_send_next_segment();
break;
default:
btstack_assert(false);

View File

@ -139,8 +139,6 @@ typedef struct {
uint32_t retransmit_timeout_ms;
uint32_t ack_opcode;
bool segmented;
// rx/tx: acknowledgement timer / segment transmission timer
btstack_timer_source_t acknowledgement_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){
higher_layer_handler(callback_type, status, (mesh_pdu_t*) network_pdu);
} else {
mesh_transport_pdu_free(transport_pdu);
mesh_network_pdu_free(network_pdu);
}
break;
default:
@ -666,7 +666,6 @@ static void mesh_upper_transport_send_segmented_pdu(mesh_transport_pdu_t * trans
outgoing_segmented_pdu = transport_pdu;
mesh_message_pdu_t * message_pdu = &outgoing_segmented_message_singleton;
message_pdu->pdu_header.pdu_type = MESH_PDU_TYPE_MESSAGE;
message_pdu->segmented = true;
// convert mesh_transport_pdu_t into mesh_message_pdu_t
uint16_t message_offset = 0;