Skip to content

Commit 2cf2176

Browse files
Merge branch 'master' into fix/provision-reset
2 parents 68bca48 + 8b8a88d commit 2cf2176

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

src/TheThingsNetwork.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,11 +287,17 @@ TheThingsNetwork::TheThingsNetwork(Stream &modemStream, Stream &debugStream, ttn
287287
{
288288
this->debugStream = &debugStream;
289289
this->modemStream = &modemStream;
290+
this->modemStream->setTimeout(10000);
290291
this->fp = fp;
291292
this->sf = sf;
292293
this->fsb = fsb;
293294
}
294295

296+
size_t TheThingsNetwork::getAppEui(char *buffer, size_t size)
297+
{
298+
return readResponse(MAC_TABLE, MAC_GET_SET_TABLE, MAC_APPEUI, buffer, size);
299+
}
300+
295301
size_t TheThingsNetwork::getHardwareEui(char *buffer, size_t size)
296302
{
297303
return readResponse(SYS_TABLE, SYS_TABLE, SYS_GET_HWEUI, buffer, size);
@@ -369,8 +375,37 @@ size_t TheThingsNetwork::readResponse(uint8_t prefixTable, uint8_t indexTable, u
369375
return readLine(buffer, size);
370376
}
371377

378+
void TheThingsNetwork::autoBaud()
379+
{
380+
// Courtesy of @jpmeijers
381+
modemStream->setTimeout(2000);
382+
uint8_t attempts = 10;
383+
size_t length = 0;
384+
while (attempts-- && length == 0)
385+
{
386+
delay(100);
387+
modemStream->write((byte)0x00);
388+
modemStream->write(0x55);
389+
modemStream->write(SEND_MSG);
390+
sendCommand(SYS_TABLE, 0, true, false);
391+
sendCommand(SYS_TABLE, SYS_GET, true, false);
392+
sendCommand(SYS_TABLE, SYS_GET_VER, false, false);
393+
modemStream->write(SEND_MSG);
394+
length = modemStream->readBytesUntil('\n', buffer, sizeof(buffer));
395+
}
396+
delay(100);
397+
clearReadBuffer();
398+
modemStream->setTimeout(10000);
399+
baudDetermined = true;
400+
}
401+
372402
void TheThingsNetwork::reset(bool adr)
373403
{
404+
if (!baudDetermined)
405+
{
406+
autoBaud();
407+
}
408+
374409
size_t length = readResponse(SYS_TABLE, SYS_RESET, buffer, sizeof(buffer));
375410

376411
// buffer contains "RN2xx3 1.x.x ...", splitting model from version

src/TheThingsNetwork.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class TheThingsNetwork
4242
uint8_t sf;
4343
uint8_t fsb;
4444
char buffer[512];
45+
bool baudDetermined = false;
4546
void (*messageCallback)(const uint8_t *payload, size_t size, port_t port);
4647

4748
void clearReadBuffer();
@@ -52,6 +53,7 @@ class TheThingsNetwork
5253
void debugPrintIndex(uint8_t index, const char *value = NULL);
5354
void debugPrintMessage(uint8_t type, uint8_t index, const char *value = NULL);
5455

56+
void autoBaud();
5557
void configureEU868(uint8_t sf);
5658
void configureUS915(uint8_t sf, uint8_t fsb);
5759
void configureChannels(uint8_t sf, uint8_t fsb);
@@ -69,6 +71,7 @@ class TheThingsNetwork
6971
void reset(bool adr = true);
7072
void showStatus();
7173
size_t getHardwareEui(char *buffer, size_t size);
74+
size_t getAppEui(char *buffer, size_t size);
7275
void onMessage(void (*cb)(const uint8_t *payload, size_t size, port_t port));
7376
bool provision(const char *appEui, const char *appKey);
7477
bool join(const char *appEui, const char *appKey, int8_t retries = -1, uint32_t retryDelay = 10000);

0 commit comments

Comments
 (0)