@@ -558,6 +558,8 @@ static void McpsConfirm (McpsConfirm_t *McpsConfirm) {
558
558
}
559
559
560
560
static void McpsIndication (McpsIndication_t * mcpsIndication ) {
561
+ bool bDoEcho = true;
562
+
561
563
if (mcpsIndication -> Status != LORAMAC_EVENT_INFO_STATUS_OK ) {
562
564
return ;
563
565
}
@@ -590,8 +592,22 @@ static void McpsIndication (McpsIndication_t *mcpsIndication) {
590
592
lora_obj .snr = mcpsIndication -> Snr ;
591
593
lora_obj .sfrx = mcpsIndication -> RxDatarate ;
592
594
593
- if (lora_obj .ComplianceTest .Running == true) {
594
- lora_obj .ComplianceTest .DownLinkCounter ++ ;
595
+ if ((mcpsIndication -> Port == 224 ) && (lora_obj .ComplianceTest .Enabled == true)
596
+ && (lora_obj .ComplianceTest .Running == true)) {
597
+ MibRequestConfirm_t mibReq ;
598
+ mibReq .Type = MIB_CHANNELS_DATARATE ;
599
+ LoRaMacMibGetRequestConfirm ( & mibReq );
600
+ if (mcpsIndication -> Buffer [0 ] == 4 ) { // echo service
601
+ if (ValidatePayloadLength (mcpsIndication -> BufferSize , mibReq .Param .ChannelsDatarate , 0 )) {
602
+ lora_obj .ComplianceTest .DownLinkCounter ++ ;
603
+ } else {
604
+ // do not increment the downlink counter and don't send the echo either
605
+ bDoEcho = false;
606
+ }
607
+ } else {
608
+ // increament the downlink counter anyhow
609
+ lora_obj .ComplianceTest .DownLinkCounter ++ ;
610
+ }
595
611
}
596
612
597
613
// printf("MCPS indication!=%d :%d\n", mcpsIndication->BufferSize, mcpsIndication->Port);
@@ -674,10 +690,15 @@ static void McpsIndication (McpsIndication_t *mcpsIndication) {
674
690
break ;
675
691
case 4 : // (vii)
676
692
// return the payload
677
- if (mcpsIndication -> BufferSize <= LORA_PAYLOAD_SIZE_MAX ) {
678
- memcpy ((void * )rx_data_isr .data , mcpsIndication -> Buffer , mcpsIndication -> BufferSize );
679
- rx_data_isr .len = mcpsIndication -> BufferSize ;
680
- xQueueSend (xRxQueue , (void * )& rx_data_isr , 0 );
693
+ if (bDoEcho ) {
694
+ if (mcpsIndication -> BufferSize <= LORA_PAYLOAD_SIZE_MAX ) {
695
+ memcpy ((void * )rx_data_isr .data , mcpsIndication -> Buffer , mcpsIndication -> BufferSize );
696
+ rx_data_isr .len = mcpsIndication -> BufferSize ;
697
+ xQueueSend (xRxQueue , (void * )& rx_data_isr , 0 );
698
+ }
699
+ } else {
700
+ // set the state back to 1
701
+ lora_obj .ComplianceTest .State = 1 ;
681
702
}
682
703
// printf("Crypto message received\n");
683
704
break ;
0 commit comments