@@ -547,23 +547,34 @@ bool TheThingsNetwork::join(int8_t retries, uint32_t retryDelay)
547
547
return false ;
548
548
}
549
549
550
- bool TheThingsNetwork::setClass (lorawan_class p_lw_class)
550
+ bool TheThingsNetwork::setClass (lorawan_class_t p_lw_class)
551
551
{
552
- if (p_lw_class == CLASS_C) {
553
- bool result = sendMacSet (MAC_CLASS, " c" );
554
- // Only remember Class C if set was successful.
555
- // Older firmware does not support class c, so keep on using Class A logic.
556
- if (result) lw_class = p_lw_class;
557
- return result;
558
- } else if (p_lw_class == CLASS_A) {
559
- lw_class = p_lw_class;
560
- return sendMacSet (MAC_CLASS, " a" );
561
- } else {
552
+ switch (p_lw_class)
553
+ {
554
+
555
+ case CLASS_A:
556
+ {
557
+ lw_class = p_lw_class;
558
+ return sendMacSet (MAC_CLASS, " a" );
559
+ }
560
+
561
+ // case CLASS_B: // Not yet supported. Use default case.
562
+
563
+ case CLASS_C:
564
+ {
565
+ bool result = sendMacSet (MAC_CLASS, " c" );
566
+ // Older firmware does not support Class C. If setting change fails, keep on using Class A.
567
+ if (result) lw_class = p_lw_class;
568
+ return result;
569
+ }
570
+
571
+ default :
562
572
return false ;
573
+
563
574
}
564
575
}
565
576
566
- bool TheThingsNetwork::join (const char *appEui, const char *appKey, int8_t retries, uint32_t retryDelay, lorawan_class p_lw_class)
577
+ bool TheThingsNetwork::join (const char *appEui, const char *appKey, int8_t retries, uint32_t retryDelay, lorawan_class_t p_lw_class)
567
578
{
568
579
return provision (appEui, appKey) && join (retries, retryDelay) && setClass (p_lw_class);
569
580
}
@@ -621,42 +632,50 @@ ttn_response_t TheThingsNetwork::sendBytes(const uint8_t *payload, size_t length
621
632
622
633
ttn_response_t TheThingsNetwork::poll (port_t port, bool confirm)
623
634
{
624
- if (lw_class == CLASS_C) {
625
- // If class c, check rx buffer for any recevied data
635
+ switch (lw_class)
636
+ {
626
637
627
- memset (buffer, 0 , sizeof (buffer));
638
+ case CLASS_A:
639
+ {
640
+ // Class A: send uplink and wait for rx windows
641
+ uint8_t payload[] = {0x00 };
642
+ return sendBytes (payload, 1 , port, confirm);
643
+ }
628
644
629
- long timeout = this ->modemStream ->getTimeout ();
630
- this ->modemStream ->setTimeout (100 );
631
- this ->modemStream ->readBytesUntil (' \n ' , buffer, sizeof (buffer));
632
- this ->modemStream ->setTimeout (timeout);
645
+ // case CLASS_B: // Not yet supported. Use default case.
633
646
634
- if ( pgmstrcmp (buffer, CMP_MAC_RX) == 0 )
647
+ case CLASS_C:
635
648
{
636
- port_t downlinkPort = receivedPort (buffer + 7 );
637
- char *data = buffer + 7 + digits (downlinkPort) + 1 ;
638
- size_t downlinkLength = strlen (data) / 2 ;
639
- if (downlinkLength > 0 )
649
+ // Class C: check rx buffer for any recevied data
650
+ memset (buffer, 0 , sizeof (buffer));
651
+
652
+ long timeout = this ->modemStream ->getTimeout ();
653
+ this ->modemStream ->setTimeout (100 );
654
+ this ->modemStream ->readBytesUntil (' \n ' , buffer, sizeof (buffer));
655
+ this ->modemStream ->setTimeout (timeout);
656
+
657
+ if (pgmstrcmp (buffer, CMP_MAC_RX) == 0 )
640
658
{
641
- uint8_t downlink[downlinkLength];
642
- for (size_t i = 0 , d = 0 ; i < downlinkLength; i++, d += 2 )
659
+ port_t downlinkPort = receivedPort (buffer + 7 );
660
+ char *data = buffer + 7 + digits (downlinkPort) + 1 ;
661
+ size_t downlinkLength = strlen (data) / 2 ;
662
+ if (downlinkLength > 0 )
643
663
{
644
- downlink[i] = TTN_HEX_PAIR_TO_BYTE (data[d], data[d + 1 ]);
645
- }
646
- if (messageCallback)
647
- {
648
- messageCallback (downlink, downlinkLength, downlinkPort);
664
+ uint8_t downlink[downlinkLength];
665
+ for (size_t i = 0 , d = 0 ; i < downlinkLength; i++, d += 2 )
666
+ {
667
+ downlink[i] = TTN_HEX_PAIR_TO_BYTE (data[d], data[d + 1 ]);
668
+ }
669
+ if (messageCallback)
670
+ {
671
+ messageCallback (downlink, downlinkLength, downlinkPort);
672
+ }
649
673
}
674
+ return TTN_SUCCESSFUL_RECEIVE;
650
675
}
651
- return TTN_SUCCESSFUL_RECEIVE;
652
676
}
653
- }
654
- else if (lw_class == CLASS_A) {
655
- // If class a send uplink and wait for rx windows
656
- uint8_t payload[] = {0x00 };
657
- return sendBytes (payload, 1 , port, confirm);
658
- }
659
- else {
677
+
678
+ default :
660
679
return TTN_UNSUCESSFUL_RECEIVE;
661
680
}
662
681
}
0 commit comments