File tree Expand file tree Collapse file tree 4 files changed +23
-2
lines changed
test/nanostack/unittest/stub Expand file tree Collapse file tree 4 files changed +23
-2
lines changed Original file line number Diff line number Diff line change @@ -1183,15 +1183,24 @@ static void mac_pd_data_confirm_failure_handle(protocol_interface_rf_mac_setup_s
11831183 mcps_data_confirm_cb (rf_mac_setup , & mcps_data_conf , NULL );
11841184}
11851185
1186+
11861187static void mac_pd_data_ack_handler (mac_pre_parsed_frame_t * buf )
11871188{
11881189 protocol_interface_rf_mac_setup_s * rf_mac_setup = buf -> mac_class_ptr ;
11891190
11901191 if (!rf_mac_setup -> active_pd_data_request ) {
11911192 mcps_sap_pre_parsed_frame_buffer_free (buf );
1193+ tr_debug ("RX ack without active buffer" );
11921194 } else {
11931195 mac_pre_build_frame_t * buffer = rf_mac_setup -> active_pd_data_request ;
11941196
1197+ //Validate here ack is proper to active buffer
1198+ if (!mac_pd_sap_ack_validation (rf_mac_setup , & buf -> fcf_dsn , mac_header_message_start_pointer (buf ))) {
1199+ tr_debug ("Not a valid ACK for active tx process" );
1200+ mcps_sap_pre_parsed_frame_buffer_free (buf );
1201+ return ;
1202+ }
1203+
11951204 if (mac_ack_sap_rx_handler (buf , rf_mac_setup )) {
11961205 //Do not forward ACK payload but Accept ACK
11971206 mcps_sap_pre_parsed_frame_buffer_free (buf );
Original file line number Diff line number Diff line change @@ -655,12 +655,16 @@ static int8_t mac_data_interface_tx_done_by_ack_cb(protocol_interface_rf_mac_set
655655 return 0 ;
656656}
657657
658- static bool mac_pd_sap_ack_validation (protocol_interface_rf_mac_setup_s * rf_ptr , const mac_fcf_sequence_t * fcf_dsn , const uint8_t * data_ptr )
658+ bool mac_pd_sap_ack_validation (protocol_interface_rf_mac_setup_s * rf_ptr , const mac_fcf_sequence_t * fcf_dsn , const uint8_t * data_ptr )
659659{
660- if (!rf_ptr -> active_pd_data_request || !rf_ptr -> active_pd_data_request -> fcf_dsn .ackRequested ) {
660+ if (!rf_ptr -> active_pd_data_request || ( !rf_ptr -> active_pd_data_request -> fcf_dsn .ackRequested && ! rf_ptr -> active_pd_data_request -> ExtendedFrameExchange ) ) {
661661 return false; //No active Data request anymore or no ACK request for current TX
662662 }
663663
664+ if (rf_ptr -> active_pd_data_request -> ExtendedFrameExchange && fcf_dsn -> frametype == FC_DATA_FRAME ) {
665+ return true;//EFDE final message
666+ }
667+
664668 if (fcf_dsn -> frameVersion != rf_ptr -> active_pd_data_request -> fcf_dsn .frameVersion ) {
665669 return false;
666670 }
Original file line number Diff line number Diff line change 2626
2727struct protocol_interface_rf_mac_setup ;
2828struct arm_phy_sap_msg_s ;
29+ struct mac_fcf_sequence_s ;
2930
3031#define ENHANCED_ACK_NEIGHBOUR_POLL_MAX_TIME_US 3500
3132
@@ -61,4 +62,6 @@ void mac_pd_sap_state_machine(struct protocol_interface_rf_mac_setup *rf_mac_set
6162
6263int8_t mac_data_edfe_force_stop (struct protocol_interface_rf_mac_setup * rf_ptr );
6364
65+ bool mac_pd_sap_ack_validation (struct protocol_interface_rf_mac_setup * rf_ptr , const struct mac_fcf_sequence_s * fcf_dsn , const uint8_t * data_ptr );
66+
6467#endif /* MAC_PD_SAP_H_ */
Original file line number Diff line number Diff line change @@ -87,3 +87,8 @@ int8_t mac_data_edfe_force_stop(struct protocol_interface_rf_mac_setup *rf_ptr)
8787{
8888 return 0 ;
8989}
90+
91+ bool mac_pd_sap_ack_validation (struct protocol_interface_rf_mac_setup * rf_ptr , const struct mac_fcf_sequence_s * fcf_dsn , const uint8_t * data_ptr )
92+ {
93+ return true;
94+ }
You can’t perform that action at this time.
0 commit comments