@@ -457,7 +457,8 @@ bool TheThingsNetwork::personalize(const char *devAddr, const char *nwkSKey, con
457
457
458
458
bool TheThingsNetwork::personalize ()
459
459
{
460
- configureChannels (sf, fsb);
460
+ configureChannels (fsb);
461
+ setSF (sf);
461
462
sendJoinSet (MAC_JOIN_MODE_ABP);
462
463
readLine (buffer, sizeof (buffer));
463
464
if (pgmstrcmp (buffer, CMP_ACCEPTED) != 0 )
@@ -498,7 +499,8 @@ bool TheThingsNetwork::provision(const char *appEui, const char *appKey)
498
499
499
500
bool TheThingsNetwork::join (int8_t retries, uint32_t retryDelay)
500
501
{
501
- configureChannels (sf, fsb);
502
+ configureChannels (fsb);
503
+ setSF (sf);
502
504
while (retries == -1 || retries-- >= 0 )
503
505
{
504
506
if (!sendJoinSet (MAC_JOIN_MODE_OTAA))
@@ -529,8 +531,13 @@ bool TheThingsNetwork::join(const char *appEui, const char *appKey, int8_t retri
529
531
return provision (appEui, appKey) && join (retries, retryDelay);
530
532
}
531
533
532
- ttn_response_t TheThingsNetwork::sendBytes (const uint8_t *payload, size_t length, port_t port, bool confirm)
534
+ ttn_response_t TheThingsNetwork::sendBytes (const uint8_t *payload, size_t length, port_t port, bool confirm, uint8_t sf )
533
535
{
536
+ if (sf != 0 )
537
+ {
538
+ setSF (sf);
539
+ }
540
+
534
541
uint8_t mode = confirm ? MAC_TX_TYPE_CNF : MAC_TX_TYPE_UCNF;
535
542
if (!sendPayload (mode, port, (uint8_t *)payload, length))
536
543
{
@@ -599,7 +606,7 @@ void TheThingsNetwork::showStatus()
599
606
debugPrintIndex (SHOW_RX_DELAY_2, buffer);
600
607
}
601
608
602
- void TheThingsNetwork::configureEU868 (uint8_t sf )
609
+ void TheThingsNetwork::configureEU868 ()
603
610
{
604
611
sendMacSet (MAC_RX2, " 3 869525000" );
605
612
sendChSet (MAC_CHANNEL_DRRANGE, 1 , " 0 6" );
@@ -620,16 +627,9 @@ void TheThingsNetwork::configureEU868(uint8_t sf)
620
627
}
621
628
}
622
629
sendMacSet (MAC_PWRIDX, TTN_PWRIDX_EU868);
623
- if (sf >= 7 && sf <= 12 )
624
- {
625
- char dr[2 ];
626
- dr[0 ] = ' 0' + (12 - sf);
627
- dr[1 ] = ' \0 ' ;
628
- sendMacSet (MAC_DR, dr);
629
- }
630
630
}
631
631
632
- void TheThingsNetwork::configureUS915 (uint8_t sf, uint8_t fsb)
632
+ void TheThingsNetwork::configureUS915 (uint8_t fsb)
633
633
{
634
634
uint8_t ch;
635
635
uint8_t chLow = fsb > 0 ? (fsb - 1 ) * 8 : 0 ;
@@ -651,16 +651,9 @@ void TheThingsNetwork::configureUS915(uint8_t sf, uint8_t fsb)
651
651
}
652
652
}
653
653
sendMacSet (MAC_PWRIDX, TTN_PWRIDX_US915);
654
- if (sf >= 7 && sf <= 10 )
655
- {
656
- char dr[2 ];
657
- dr[0 ] = ' 0' + (10 - sf);
658
- dr[1 ] = ' \0 ' ;
659
- sendMacSet (MAC_DR, dr);
660
- }
661
654
}
662
655
663
- void TheThingsNetwork::configureAS920_923 (uint8_t sf )
656
+ void TheThingsNetwork::configureAS920_923 ()
664
657
{
665
658
sendMacSet (MAC_ADR, " off" ); // TODO: remove when ADR is implemented for this plan
666
659
sendMacSet (MAC_RX2, " 2 923200000" );
@@ -687,27 +680,20 @@ void TheThingsNetwork::configureAS920_923(uint8_t sf)
687
680
// sendChSet(MAC_CHANNEL_STATUS, 8, "on");
688
681
// TODO: Add FSK channel
689
682
sendMacSet (MAC_PWRIDX, TTN_PWRIDX_AS920_923);
690
- if (sf >= 7 && sf <= 12 )
691
- {
692
- char dr[2 ];
693
- dr[0 ] = ' 0' + (12 - sf);
694
- dr[1 ] = ' \0 ' ;
695
- sendMacSet (MAC_DR, dr);
696
- }
697
683
}
698
684
699
- void TheThingsNetwork::configureChannels (uint8_t sf, uint8_t fsb)
685
+ void TheThingsNetwork::configureChannels (uint8_t fsb)
700
686
{
701
687
switch (fp)
702
688
{
703
689
case TTN_FP_EU868:
704
- configureEU868 (sf );
690
+ configureEU868 ();
705
691
break ;
706
692
case TTN_FP_US915:
707
- configureUS915 (sf, fsb);
693
+ configureUS915 (fsb);
708
694
break ;
709
695
case TTN_FP_AS920_923:
710
- configureAS920_923 (sf );
696
+ configureAS920_923 ();
711
697
break ;
712
698
default :
713
699
debugPrintMessage (ERR_MESSAGE, ERR_INVALID_FP);
@@ -716,6 +702,25 @@ void TheThingsNetwork::configureChannels(uint8_t sf, uint8_t fsb)
716
702
sendMacSet (MAC_RETX, TTN_RETX);
717
703
}
718
704
705
+ bool TheThingsNetwork::setSF (uint8_t sf)
706
+ {
707
+ uint8_t dr;
708
+ switch (fp)
709
+ {
710
+ case TTN_FP_EU868:
711
+ case TTN_FP_AS920_923:
712
+ dr = 12 - sf;
713
+ break ;
714
+ case TTN_FP_US915:
715
+ dr = 10 - sf;
716
+ break ;
717
+ }
718
+ char s[2 ];
719
+ s[0 ] = ' 0' + dr;
720
+ s[1 ] = ' \0 ' ;
721
+ return sendMacSet (MAC_DR, s);
722
+ }
723
+
719
724
void TheThingsNetwork::sendCommand (uint8_t table, uint8_t index, bool appendSpace, bool print)
720
725
{
721
726
char command[100 ];
0 commit comments