@@ -46,10 +46,11 @@ const char band[] PROGMEM = "Band: ";
46
46
const char data_rate[] PROGMEM = " Data Rate: " ;
47
47
const char rx_delay_1[] PROGMEM = " RX Delay 1: " ;
48
48
const char rx_delay_2[] PROGMEM = " RX Delay 2: " ;
49
- const char version[] PROGMEM = " Version is " ;
50
- const char model[] PROGMEM = " Model is " ;
49
+ const char version[] PROGMEM = " Version: " ;
50
+ const char model[] PROGMEM = " Model: " ;
51
+ const char devaddr[] PROGMEM = " DevAddr: " ;
51
52
52
- const char *const show_table[] PROGMEM = {eui, battery, appEui, devEui, band, data_rate, rx_delay_1, rx_delay_2, version, model};
53
+ const char *const show_table[] PROGMEM = {eui, battery, appEui, devEui, band, data_rate, rx_delay_1, rx_delay_2, version, model, devaddr };
53
54
54
55
#define SHOW_EUI 0
55
56
#define SHOW_BATTERY 1
@@ -61,6 +62,7 @@ const char *const show_table[] PROGMEM = {eui, battery, appEui, devEui, band, da
61
62
#define SHOW_RX_DELAY_2 7
62
63
#define SHOW_VERSION 8
63
64
#define SHOW_MODEL 9
65
+ #define SHOW_DEVADDR 10
64
66
65
67
const char invalid_sf[] PROGMEM = " Invalid SF" ;
66
68
const char invalid_fp[] PROGMEM = " Invalid frequency plan" ;
@@ -170,45 +172,45 @@ const char *const mac_table[] PROGMEM = {mac_prefix, mac_reset, mac_tx, mac_join
170
172
#define MAC_SET 8
171
173
#define MAC_GET 9
172
174
173
- const char mac_set_devaddr [] PROGMEM = " devaddr" ;
174
- const char mac_set_deveui [] PROGMEM = " deveui" ;
175
- const char mac_set_appeui [] PROGMEM = " appeui" ;
176
- const char mac_set_nwkskey [] PROGMEM = " nwkskey" ;
177
- const char mac_set_appskey [] PROGMEM = " appskey" ;
178
- const char mac_set_appkey [] PROGMEM = " appkey" ;
179
- const char mac_set_pwridx [] PROGMEM = " pwridx" ;
180
- const char mac_set_dr [] PROGMEM = " dr" ;
181
- const char mac_set_adr [] PROGMEM = " adr" ;
182
- const char mac_set_bat [] PROGMEM = " bat" ;
183
- const char mac_set_retx [] PROGMEM = " retx" ;
184
- const char mac_set_linkchk [] PROGMEM = " linkchk" ;
185
- const char mac_set_rxdelay1 [] PROGMEM = " rxdelay1" ;
186
- const char mac_set_rxdelay2 [] PROGMEM = " rxdelay2" ;
187
- const char mac_set_band [] PROGMEM = " band" ;
188
- const char mac_set_ar [] PROGMEM = " ar" ;
189
- const char mac_set_rx2 [] PROGMEM = " rx2" ;
190
- const char mac_set_ch [] PROGMEM = " ch" ;
191
-
192
- const char *const mac_set_options [] PROGMEM = {mac_set_devaddr, mac_set_deveui, mac_set_appeui, mac_set_nwkskey, mac_set_appskey, mac_set_appkey, mac_set_pwridx, mac_set_dr, mac_set_adr, mac_set_bat, mac_set_retx, mac_set_linkchk, mac_set_rxdelay1, mac_set_rxdelay2, mac_set_band, mac_set_ar, mac_set_rx2, mac_set_ch };
193
-
194
- #define MAC_SET_DEVICEADDRESS 0
195
- #define MAC_SET_DEVEUI 1
196
- #define MAC_SET_APPEUI 2
197
- #define MAC_SET_NWKSKEY 3
198
- #define MAC_SET_APPSKEY 4
199
- #define MAC_SET_APPKEY 5
200
- #define MAC_SET_PWRIDX 6
201
- #define MAC_SET_DR 7
202
- #define MAC_SET_ADR 8
203
- #define MAC_SET_BAT 9
204
- #define MAC_SET_RETX 10
205
- #define MAC_SET_LINKCHK 11
206
- #define MAC_SET_RXDELAY1 12
207
- #define MAC_SET_RXDELAY2 13
208
- #define MAC_SET_BAND 14
209
- #define MAC_SET_AR 15
210
- #define MAC_SET_RX2 16
211
- #define MAC_SET_CH 17
175
+ const char mac_devaddr [] PROGMEM = " devaddr" ;
176
+ const char mac_deveui [] PROGMEM = " deveui" ;
177
+ const char mac_appeui [] PROGMEM = " appeui" ;
178
+ const char mac_nwkskey [] PROGMEM = " nwkskey" ;
179
+ const char mac_appskey [] PROGMEM = " appskey" ;
180
+ const char mac_appkey [] PROGMEM = " appkey" ;
181
+ const char mac_pwridx [] PROGMEM = " pwridx" ;
182
+ const char mac_dr [] PROGMEM = " dr" ;
183
+ const char mac_adr [] PROGMEM = " adr" ;
184
+ const char mac_bat [] PROGMEM = " bat" ;
185
+ const char mac_retx [] PROGMEM = " retx" ;
186
+ const char mac_linkchk [] PROGMEM = " linkchk" ;
187
+ const char mac_rxdelay1 [] PROGMEM = " rxdelay1" ;
188
+ const char mac_rxdelay2 [] PROGMEM = " rxdelay2" ;
189
+ const char mac_band [] PROGMEM = " band" ;
190
+ const char mac_ar [] PROGMEM = " ar" ;
191
+ const char mac_rx2 [] PROGMEM = " rx2" ;
192
+ const char mac_ch [] PROGMEM = " ch" ;
193
+
194
+ const char *const mac_options [] PROGMEM = {mac_devaddr, mac_deveui, mac_appeui, mac_nwkskey, mac_appskey, mac_appkey, mac_pwridx, mac_dr, mac_adr, mac_bat, mac_retx, mac_linkchk, mac_rxdelay1, mac_rxdelay2, mac_band, mac_ar, mac_rx2, mac_ch };
195
+
196
+ #define MAC_DEVADDR 0
197
+ #define MAC_DEVEUI 1
198
+ #define MAC_APPEUI 2
199
+ #define MAC_NWKSKEY 3
200
+ #define MAC_APPSKEY 4
201
+ #define MAC_APPKEY 5
202
+ #define MAC_PWRIDX 6
203
+ #define MAC_DR 7
204
+ #define MAC_ADR 8
205
+ #define MAC_BAT 9
206
+ #define MAC_RETX 10
207
+ #define MAC_LINKCHK 11
208
+ #define MAC_RXDELAY1 12
209
+ #define MAC_RXDELAY2 13
210
+ #define MAC_BAND 14
211
+ #define MAC_AR 15
212
+ #define MAC_RX2 16
213
+ #define MAC_CH 17
212
214
213
215
const char mac_join_mode_otaa[] PROGMEM = " otaa" ;
214
216
const char mac_join_mode_abp[] PROGMEM = " abp" ;
@@ -372,14 +374,14 @@ void TheThingsNetwork::reset(bool adr)
372
374
debugPrintIndex (SHOW_VERSION, buffer + 7 );
373
375
374
376
readResponse (SYS_TABLE, SYS_TABLE, SYS_GET_HWEUI, buffer, sizeof (buffer));
375
- sendMacSet (MAC_SET_DEVEUI , buffer);
377
+ sendMacSet (MAC_DEVEUI , buffer);
376
378
if (adr)
377
379
{
378
- sendMacSet (MAC_SET_ADR , " on" );
380
+ sendMacSet (MAC_ADR , " on" );
379
381
}
380
382
else
381
383
{
382
- sendMacSet (MAC_SET_ADR , " off" );
384
+ sendMacSet (MAC_ADR , " off" );
383
385
}
384
386
}
385
387
@@ -405,9 +407,9 @@ bool TheThingsNetwork::personalize(const char *devAddr, const char *nwkSKey, con
405
407
debugPrintMessage (ERR_MESSAGE, ERR_KEY_LENGTH);
406
408
return false ;
407
409
}
408
- sendMacSet (MAC_SET_DEVICEADDRESS , devAddr);
409
- sendMacSet (MAC_SET_NWKSKEY , nwkSKey);
410
- sendMacSet (MAC_SET_APPSKEY , appSKey);
410
+ sendMacSet (MAC_DEVADDR , devAddr);
411
+ sendMacSet (MAC_NWKSKEY , nwkSKey);
412
+ sendMacSet (MAC_APPSKEY , appSKey);
411
413
return personalize ();
412
414
}
413
415
@@ -436,9 +438,9 @@ bool TheThingsNetwork::provision(const char *appEui, const char *appKey)
436
438
return false ;
437
439
}
438
440
readResponse (SYS_TABLE, SYS_TABLE, SYS_GET_HWEUI, buffer, sizeof (buffer));
439
- sendMacSet (MAC_SET_DEVEUI , buffer);
440
- sendMacSet (MAC_SET_APPEUI , appEui);
441
- sendMacSet (MAC_SET_APPKEY , appKey);
441
+ sendMacSet (MAC_DEVEUI , buffer);
442
+ sendMacSet (MAC_APPEUI , appEui);
443
+ sendMacSet (MAC_APPKEY , appKey);
442
444
saveState ();
443
445
return true ;
444
446
}
@@ -464,8 +466,8 @@ bool TheThingsNetwork::join(int8_t retries, uint32_t retryDelay)
464
466
}
465
467
readResponse (MAC_TABLE, MAC_CH_TABLE, MAC_CHANNEL_STATUS, buffer, sizeof (buffer));
466
468
debugPrintMessage (SUCCESS_MESSAGE, SCS_JOIN_ACCEPTED, buffer);
467
- readResponse (MAC_TABLE, MAC_GET_SET_TABLE, MAC_SET_DEVEUI , buffer, sizeof (buffer));
468
- debugPrintIndex (SHOW_DEVEUI , buffer);
469
+ readResponse (MAC_TABLE, MAC_GET_SET_TABLE, MAC_DEVADDR , buffer, sizeof (buffer));
470
+ debugPrintIndex (SHOW_DEVADDR , buffer);
469
471
return true ;
470
472
}
471
473
return false ;
@@ -479,41 +481,42 @@ bool TheThingsNetwork::join(const char *appEui, const char *appKey, int8_t retri
479
481
480
482
ttn_response_t TheThingsNetwork::sendBytes (const uint8_t *payload, size_t length, port_t port, bool confirm)
481
483
{
482
- bool send;
483
- if (confirm)
484
- {
485
- send = sendPayload (MAC_TX_TYPE_CNF, port, (uint8_t *)payload, length);
486
- }
487
- else
488
- {
489
- send = sendPayload (MAC_TX_TYPE_UCNF, port, (uint8_t *)payload, length);
490
- }
491
- if (!send)
484
+ uint8_t mode = confirm ? MAC_TX_TYPE_CNF : MAC_TX_TYPE_UCNF;
485
+ if (!sendPayload (mode, port, (uint8_t *)payload, length))
492
486
{
493
487
debugPrintMessage (ERR_MESSAGE, ERR_SEND_COMMAND_FAILED);
494
488
return TTN_ERROR_SEND_COMMAND_FAILED;
495
489
}
496
490
497
491
readLine (buffer, sizeof (buffer));
492
+
498
493
if (pgmstrcmp (buffer, CMP_MAC_TX_OK) == 0 )
499
494
{
500
495
debugPrintMessage (SUCCESS_MESSAGE, SCS_SUCCESSFUL_TRANSMISSION);
501
496
return TTN_SUCCESSFUL_TRANSMISSION;
502
497
}
498
+
503
499
if (pgmstrcmp (buffer, CMP_MAC_RX) == 0 )
504
500
{
505
501
port_t downlinkPort = receivedPort (buffer + 7 );
506
502
char *data = buffer + 7 + digits (downlinkPort) + 1 ;
507
503
size_t downlinkLength = strlen (data) / 2 ;
508
- uint8_t downlink[downlinkLength];
509
- for (size_t i = 0 , d = 0 ; i < downlinkLength; i++, d += 2 )
504
+ if (downlinkLength > 0 )
510
505
{
511
- downlink[i] = TTN_HEX_PAIR_TO_BYTE (data[d], data[d + 1 ]);
506
+ uint8_t downlink[downlinkLength];
507
+ for (size_t i = 0 , d = 0 ; i < downlinkLength; i++, d += 2 )
508
+ {
509
+ downlink[i] = TTN_HEX_PAIR_TO_BYTE (data[d], data[d + 1 ]);
510
+ }
511
+ debugPrintMessage (SUCCESS_MESSAGE, SCS_SUCCESSFUL_TRANSMISSION_RECEIVED, data);
512
+ if (messageCallback)
513
+ {
514
+ messageCallback (downlink, downlinkLength, downlinkPort);
515
+ }
512
516
}
513
- debugPrintMessage (SUCCESS_MESSAGE, SCS_SUCCESSFUL_TRANSMISSION_RECEIVED, data);
514
- if (messageCallback)
517
+ else
515
518
{
516
- messageCallback (downlink, downlinkLength, downlinkPort );
519
+ debugPrintMessage (SUCCESS_MESSAGE, SCS_SUCCESSFUL_TRANSMISSION );
517
520
}
518
521
return TTN_SUCCESSFUL_RECEIVE;
519
522
}
@@ -534,15 +537,15 @@ void TheThingsNetwork::showStatus()
534
537
debugPrintIndex (SHOW_EUI, buffer);
535
538
readResponse (SYS_TABLE, SYS_TABLE, SYS_GET_VDD, buffer, sizeof (buffer));
536
539
debugPrintIndex (SHOW_BATTERY, buffer);
537
- readResponse (MAC_TABLE, MAC_GET_SET_TABLE, MAC_SET_APPEUI , buffer, sizeof (buffer));
540
+ readResponse (MAC_TABLE, MAC_GET_SET_TABLE, MAC_APPEUI , buffer, sizeof (buffer));
538
541
debugPrintIndex (SHOW_APPEUI, buffer);
539
- readResponse (MAC_TABLE, MAC_GET_SET_TABLE, MAC_SET_DEVEUI , buffer, sizeof (buffer));
542
+ readResponse (MAC_TABLE, MAC_GET_SET_TABLE, MAC_DEVEUI , buffer, sizeof (buffer));
540
543
debugPrintIndex (SHOW_DEVEUI, buffer);
541
- readResponse (MAC_TABLE, MAC_GET_SET_TABLE, MAC_SET_DR , buffer, sizeof (buffer));
544
+ readResponse (MAC_TABLE, MAC_GET_SET_TABLE, MAC_DR , buffer, sizeof (buffer));
542
545
debugPrintIndex (SHOW_DATA_RATE, buffer);
543
- readResponse (MAC_TABLE, MAC_GET_SET_TABLE, MAC_SET_RXDELAY1 , buffer, sizeof (buffer));
546
+ readResponse (MAC_TABLE, MAC_GET_SET_TABLE, MAC_RXDELAY1 , buffer, sizeof (buffer));
544
547
debugPrintIndex (SHOW_RX_DELAY_1, buffer);
545
- readResponse (MAC_TABLE, MAC_GET_SET_TABLE, MAC_SET_RXDELAY2 , buffer, sizeof (buffer));
548
+ readResponse (MAC_TABLE, MAC_GET_SET_TABLE, MAC_RXDELAY2 , buffer, sizeof (buffer));
546
549
debugPrintIndex (SHOW_RX_DELAY_2, buffer);
547
550
}
548
551
@@ -557,7 +560,7 @@ void TheThingsNetwork::configureEU868(uint8_t sf)
557
560
char buf[length + 1 ];
558
561
buf[length + 1 ] = ' \0 ' ;
559
562
560
- sendMacSet (MAC_SET_RX2 , " 3 869525000" );
563
+ sendMacSet (MAC_RX2 , " 3 869525000" );
561
564
sendChSet (MAC_CHANNEL_DRRANGE, 1 , " 0 6" );
562
565
for (ch = 0 ; ch < 8 ; ch++)
563
566
{
@@ -578,7 +581,7 @@ void TheThingsNetwork::configureEU868(uint8_t sf)
578
581
freq = freq + 200000 ;
579
582
}
580
583
}
581
- sendMacSet (MAC_SET_PWRIDX , TTN_PWRIDX_868);
584
+ sendMacSet (MAC_PWRIDX , TTN_PWRIDX_868);
582
585
switch (sf)
583
586
{
584
587
case 7 :
@@ -606,7 +609,7 @@ void TheThingsNetwork::configureEU868(uint8_t sf)
606
609
dr[1 ] = ' \0 ' ;
607
610
if (dr[0 ] >= ' 0' && dr[0 ] <= ' 5' )
608
611
{
609
- sendMacSet (MAC_SET_DR , dr);
612
+ sendMacSet (MAC_DR , dr);
610
613
}
611
614
}
612
615
@@ -618,7 +621,7 @@ void TheThingsNetwork::configureUS915(uint8_t sf, uint8_t fsb)
618
621
uint8_t chHigh = fsb > 0 ? chLow + 7 : 71 ;
619
622
uint8_t ch500 = fsb + 63 ;
620
623
621
- sendMacSet (MAC_SET_PWRIDX , TTN_PWRIDX_915);
624
+ sendMacSet (MAC_PWRIDX , TTN_PWRIDX_915);
622
625
for (ch = 0 ; ch < 72 ; ch++)
623
626
{
624
627
if (ch == ch500 || (ch <= chHigh && ch >= chLow))
@@ -655,7 +658,7 @@ void TheThingsNetwork::configureUS915(uint8_t sf, uint8_t fsb)
655
658
dr[1 ] = ' \0 ' ;
656
659
if (dr[0 ] >= ' 0' && dr[0 ] < ' 4' )
657
660
{
658
- sendMacSet (MAC_SET_DR , dr);
661
+ sendMacSet (MAC_DR , dr);
659
662
}
660
663
}
661
664
@@ -673,7 +676,7 @@ void TheThingsNetwork::configureChannels(uint8_t sf, uint8_t fsb)
673
676
debugPrintMessage (ERR_MESSAGE, ERR_INVALID_FP);
674
677
break ;
675
678
}
676
- sendMacSet (MAC_SET_RETX , TTN_RETX);
679
+ sendMacSet (MAC_RETX , TTN_RETX);
677
680
}
678
681
679
682
void TheThingsNetwork::sendCommand (uint8_t table, uint8_t index, bool appendSpace, bool print)
@@ -685,7 +688,7 @@ void TheThingsNetwork::sendCommand(uint8_t table, uint8_t index, bool appendSpac
685
688
strcpy_P (command, (char *)pgm_read_word (&(mac_table[index])));
686
689
break ;
687
690
case MAC_GET_SET_TABLE:
688
- strcpy_P (command, (char *)pgm_read_word (&(mac_set_options [index])));
691
+ strcpy_P (command, (char *)pgm_read_word (&(mac_options [index])));
689
692
break ;
690
693
case MAC_JOIN_TABLE:
691
694
strcpy_P (command, (char *)pgm_read_word (&(mac_join_mode[index])));
@@ -759,7 +762,7 @@ bool TheThingsNetwork::sendChSet(uint8_t index, uint8_t channel, const char *val
759
762
debugPrint (F (SENDING));
760
763
sendCommand (MAC_TABLE, MAC_PREFIX, true );
761
764
sendCommand (MAC_TABLE, MAC_SET, true );
762
- sendCommand (MAC_GET_SET_TABLE, MAC_SET_CH , true );
765
+ sendCommand (MAC_GET_SET_TABLE, MAC_CH , true );
763
766
sendCommand (MAC_CH_TABLE, index, true );
764
767
modemStream->write (ch);
765
768
modemStream->write (" " );
0 commit comments