Skip to content

Commit 4932859

Browse files
committed
Cleaning and don't print MAC commands as downlink
1 parent 720e53f commit 4932859

File tree

1 file changed

+85
-82
lines changed

1 file changed

+85
-82
lines changed

src/TheThingsNetwork.cpp

Lines changed: 85 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,11 @@ const char band[] PROGMEM = "Band: ";
4646
const char data_rate[] PROGMEM = "Data Rate: ";
4747
const char rx_delay_1[] PROGMEM = "RX Delay 1: ";
4848
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: ";
5152

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};
5354

5455
#define SHOW_EUI 0
5556
#define SHOW_BATTERY 1
@@ -61,6 +62,7 @@ const char *const show_table[] PROGMEM = {eui, battery, appEui, devEui, band, da
6162
#define SHOW_RX_DELAY_2 7
6263
#define SHOW_VERSION 8
6364
#define SHOW_MODEL 9
65+
#define SHOW_DEVADDR 10
6466

6567
const char invalid_sf[] PROGMEM = "Invalid SF";
6668
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
170172
#define MAC_SET 8
171173
#define MAC_GET 9
172174

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
212214

213215
const char mac_join_mode_otaa[] PROGMEM = "otaa";
214216
const char mac_join_mode_abp[] PROGMEM = "abp";
@@ -372,14 +374,14 @@ void TheThingsNetwork::reset(bool adr)
372374
debugPrintIndex(SHOW_VERSION, buffer + 7);
373375

374376
readResponse(SYS_TABLE, SYS_TABLE, SYS_GET_HWEUI, buffer, sizeof(buffer));
375-
sendMacSet(MAC_SET_DEVEUI, buffer);
377+
sendMacSet(MAC_DEVEUI, buffer);
376378
if (adr)
377379
{
378-
sendMacSet(MAC_SET_ADR, "on");
380+
sendMacSet(MAC_ADR, "on");
379381
}
380382
else
381383
{
382-
sendMacSet(MAC_SET_ADR, "off");
384+
sendMacSet(MAC_ADR, "off");
383385
}
384386
}
385387

@@ -405,9 +407,9 @@ bool TheThingsNetwork::personalize(const char *devAddr, const char *nwkSKey, con
405407
debugPrintMessage(ERR_MESSAGE, ERR_KEY_LENGTH);
406408
return false;
407409
}
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);
411413
return personalize();
412414
}
413415

@@ -436,9 +438,9 @@ bool TheThingsNetwork::provision(const char *appEui, const char *appKey)
436438
return false;
437439
}
438440
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);
442444
saveState();
443445
return true;
444446
}
@@ -464,8 +466,8 @@ bool TheThingsNetwork::join(int8_t retries, uint32_t retryDelay)
464466
}
465467
readResponse(MAC_TABLE, MAC_CH_TABLE, MAC_CHANNEL_STATUS, buffer, sizeof(buffer));
466468
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);
469471
return true;
470472
}
471473
return false;
@@ -479,41 +481,42 @@ bool TheThingsNetwork::join(const char *appEui, const char *appKey, int8_t retri
479481

480482
ttn_response_t TheThingsNetwork::sendBytes(const uint8_t *payload, size_t length, port_t port, bool confirm)
481483
{
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))
492486
{
493487
debugPrintMessage(ERR_MESSAGE, ERR_SEND_COMMAND_FAILED);
494488
return TTN_ERROR_SEND_COMMAND_FAILED;
495489
}
496490

497491
readLine(buffer, sizeof(buffer));
492+
498493
if (pgmstrcmp(buffer, CMP_MAC_TX_OK) == 0)
499494
{
500495
debugPrintMessage(SUCCESS_MESSAGE, SCS_SUCCESSFUL_TRANSMISSION);
501496
return TTN_SUCCESSFUL_TRANSMISSION;
502497
}
498+
503499
if (pgmstrcmp(buffer, CMP_MAC_RX) == 0)
504500
{
505501
port_t downlinkPort = receivedPort(buffer + 7);
506502
char *data = buffer + 7 + digits(downlinkPort) + 1;
507503
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)
510505
{
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+
}
512516
}
513-
debugPrintMessage(SUCCESS_MESSAGE, SCS_SUCCESSFUL_TRANSMISSION_RECEIVED, data);
514-
if (messageCallback)
517+
else
515518
{
516-
messageCallback(downlink, downlinkLength, downlinkPort);
519+
debugPrintMessage(SUCCESS_MESSAGE, SCS_SUCCESSFUL_TRANSMISSION);
517520
}
518521
return TTN_SUCCESSFUL_RECEIVE;
519522
}
@@ -534,15 +537,15 @@ void TheThingsNetwork::showStatus()
534537
debugPrintIndex(SHOW_EUI, buffer);
535538
readResponse(SYS_TABLE, SYS_TABLE, SYS_GET_VDD, buffer, sizeof(buffer));
536539
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));
538541
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));
540543
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));
542545
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));
544547
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));
546549
debugPrintIndex(SHOW_RX_DELAY_2, buffer);
547550
}
548551

@@ -557,7 +560,7 @@ void TheThingsNetwork::configureEU868(uint8_t sf)
557560
char buf[length + 1];
558561
buf[length + 1] = '\0';
559562

560-
sendMacSet(MAC_SET_RX2, "3 869525000");
563+
sendMacSet(MAC_RX2, "3 869525000");
561564
sendChSet(MAC_CHANNEL_DRRANGE, 1, "0 6");
562565
for (ch = 0; ch < 8; ch++)
563566
{
@@ -578,7 +581,7 @@ void TheThingsNetwork::configureEU868(uint8_t sf)
578581
freq = freq + 200000;
579582
}
580583
}
581-
sendMacSet(MAC_SET_PWRIDX, TTN_PWRIDX_868);
584+
sendMacSet(MAC_PWRIDX, TTN_PWRIDX_868);
582585
switch (sf)
583586
{
584587
case 7:
@@ -606,7 +609,7 @@ void TheThingsNetwork::configureEU868(uint8_t sf)
606609
dr[1] = '\0';
607610
if (dr[0] >= '0' && dr[0] <= '5')
608611
{
609-
sendMacSet(MAC_SET_DR, dr);
612+
sendMacSet(MAC_DR, dr);
610613
}
611614
}
612615

@@ -618,7 +621,7 @@ void TheThingsNetwork::configureUS915(uint8_t sf, uint8_t fsb)
618621
uint8_t chHigh = fsb > 0 ? chLow + 7 : 71;
619622
uint8_t ch500 = fsb + 63;
620623

621-
sendMacSet(MAC_SET_PWRIDX, TTN_PWRIDX_915);
624+
sendMacSet(MAC_PWRIDX, TTN_PWRIDX_915);
622625
for (ch = 0; ch < 72; ch++)
623626
{
624627
if (ch == ch500 || (ch <= chHigh && ch >= chLow))
@@ -655,7 +658,7 @@ void TheThingsNetwork::configureUS915(uint8_t sf, uint8_t fsb)
655658
dr[1] = '\0';
656659
if (dr[0] >= '0' && dr[0] < '4')
657660
{
658-
sendMacSet(MAC_SET_DR, dr);
661+
sendMacSet(MAC_DR, dr);
659662
}
660663
}
661664

@@ -673,7 +676,7 @@ void TheThingsNetwork::configureChannels(uint8_t sf, uint8_t fsb)
673676
debugPrintMessage(ERR_MESSAGE, ERR_INVALID_FP);
674677
break;
675678
}
676-
sendMacSet(MAC_SET_RETX, TTN_RETX);
679+
sendMacSet(MAC_RETX, TTN_RETX);
677680
}
678681

679682
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
685688
strcpy_P(command, (char *)pgm_read_word(&(mac_table[index])));
686689
break;
687690
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])));
689692
break;
690693
case MAC_JOIN_TABLE:
691694
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
759762
debugPrint(F(SENDING));
760763
sendCommand(MAC_TABLE, MAC_PREFIX, true);
761764
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);
763766
sendCommand(MAC_CH_TABLE, index, true);
764767
modemStream->write(ch);
765768
modemStream->write(" ");

0 commit comments

Comments
 (0)