Skip to content

Commit eee3933

Browse files
committed
Shink compliance a little
1 parent b57531e commit eee3933

File tree

1 file changed

+46
-15
lines changed

1 file changed

+46
-15
lines changed

examples/compliance-otaa-halconfig/compliance-otaa-halconfig.ino

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ public:
9393
uint32_t datum;
9494
ostime_t time;
9595
ostime_t txend;
96+
ostime_t globalDutyAvail;
9697
u4_t freq;
9798
u2_t opmode;
9899
u2_t fcntDn;
@@ -122,8 +123,10 @@ public:
122123
}
123124
if (i != m_head) {
124125
auto const pn = &m_queue[m_tail];
126+
pn->job = LMIC.osjob;
125127
pn->time = os_getTime();
126128
pn->txend = LMIC.txend;
129+
pn->globalDutyAvail = LMIC.globalDutyAvail;
127130
pn->event = event;
128131
pn->pMessage = pMessage;
129132
pn->datum = datum;
@@ -173,17 +176,23 @@ hal_failure_handler_t log_assertion;
173176
void log_assertion(const char *pMessage, uint16_t line) {
174177
eventQueue.putEvent(ev_t(-3), pMessage, line);
175178
eventPrintAll();
176-
Serial.println("***HALTED BY ASSERT***");
179+
Serial.println(F("***HALTED BY ASSERT***"));
177180
while (true)
178181
yield();
179182
}
180183

181-
uint8_t lastTxChannel;
182-
bool lastTxStart;
184+
bool lastWasTxStart;
185+
uint32_t lastTxStartTime;
183186

184187
void myEventCb(void *pUserData, ev_t ev) {
185188
eventQueue.putEvent(ev);
186189

190+
if (ev == EV_TXSTART) {
191+
lastWasTxStart = true;
192+
lastTxStartTime = millis();
193+
} else if (ev == EV_RXSTART) {
194+
lastWasTxStart = false;
195+
}
187196
if (ev == EV_JOINING) {
188197
setupForNetwork(true);
189198
} else if (ev == EV_JOINED) {
@@ -193,7 +202,7 @@ void myEventCb(void *pUserData, ev_t ev) {
193202

194203
void eventPrint(cEventQueue::eventnode_t &e);
195204
void printFcnts(cEventQueue::eventnode_t &e);
196-
205+
void printTxend(cEventQueue::eventnode_t &e);
197206

198207
void eventPrintAll(void) {
199208
while (eventPrintOne())
@@ -245,19 +254,23 @@ void printHex4(unsigned v) {
245254
printHex2(v);
246255
}
247256

257+
void printSpace(void) {
258+
Serial.print(' ');
259+
}
260+
248261
void printFreq(u4_t freq) {
249262
Serial.print(F(": freq="));
250263
Serial.print(freq / 1000000);
251-
Serial.print(F("."));
264+
Serial.print('.');
252265
Serial.print((freq % 1000000) / 100000);
253266
}
254267

255268
void printRps(rps_t rps) {
256269
Serial.print(F(" rps=0x")); printHex2(rps);
257270
Serial.print(F(" (")); Serial.print(getSfName(rps));
258-
Serial.print(F(" ")); Serial.print(getBwName(rps));
259-
Serial.print(F(" ")); Serial.print(getCrName(rps));
260-
Serial.print(F(" ")); Serial.print(getCrcName(rps));
271+
printSpace(); Serial.print(getBwName(rps));
272+
printSpace(); Serial.print(getCrName(rps));
273+
printSpace(); Serial.print(getCrcName(rps));
261274
Serial.print(F(" IH=")); Serial.print(unsigned(getIh(rps)));
262275
Serial.print(')');
263276
}
@@ -268,8 +281,9 @@ void printOpmode(uint16_t opmode, char sep = ',') {
268281
Serial.print(F(" opmode=")); Serial.print(opmode, HEX);
269282
}
270283

271-
void printTxend(ostime_t txend) {
272-
Serial.print(F(", txend=")); Serial.print(txend);
284+
void printTxend(cEventQueue::eventnode_t &e) {
285+
Serial.print(F(", txend=")); Serial.print(e.txend);
286+
Serial.print(F(", avail=")); Serial.print(e.globalDutyAvail);
273287
}
274288

275289
void printTxChnl(u1_t txChnl) {
@@ -299,6 +313,7 @@ void printFcnts(cEventQueue::eventnode_t &e) {
299313
printHex4(e.fcntDn);
300314
}
301315

316+
#if LMIC_ENABLE_event_logging
302317
// dump all the registers. Must have printf setup.
303318
void printAllRegisters(void) {
304319
uint8_t regbuf[0x80];
@@ -324,6 +339,7 @@ void printAllRegisters(void) {
324339
const uint8_t opmode = 0x88; // LoRa and sleep.
325340
hal_spi_write(0x81, &opmode, 1);
326341
}
342+
#endif
327343

328344
void printNl(void) {
329345
Serial.println();
@@ -347,13 +363,15 @@ void eventPrint(cEventQueue::eventnode_t &e) {
347363
Serial.print(e.pMessage);
348364
Serial.print(F(", line ")); Serial.print(e.datum);
349365
printFreq(e.freq);
350-
printTxend(e.txend);
366+
printTxend(e);
351367
printTxChnl(e.txChnl);
352368
printRps(e.rps);
353369
printOpmode(e.opmode);
354370
printTxrxflags(e.txrxFlags);
355371
printSaveIrqFlags(e.saveIrqFlags);
372+
#if LMIC_ENABLE_event_logging
356373
printAllRegisters();
374+
#endif
357375
} else {
358376
if (ev < sizeof(evNames) / sizeof(evNames[0])) {
359377
Serial.print(evNames[ev]);
@@ -415,8 +433,9 @@ void eventPrint(cEventQueue::eventnode_t &e) {
415433
printRps(e.rps);
416434
printOpmode(e.opmode);
417435
printf(" irqLevel %u", hal_getIrqLevel());
418-
436+
#if LMIC_ENABLE_event_logging
419437
printAllRegisters();
438+
#endif
420439
break;
421440

422441
case EV_REJOIN_FAILED:
@@ -429,6 +448,7 @@ void eventPrint(cEventQueue::eventnode_t &e) {
429448
printRps(e.rps);
430449
printTxrxflags(e.txrxFlags);
431450
printFcnts(e);
451+
printTxend(e);
432452
break;
433453
case EV_LOST_TSYNC:
434454
break;
@@ -455,15 +475,15 @@ void eventPrint(cEventQueue::eventnode_t &e) {
455475
printRps(e.rps);
456476
printDatarate(e.datarate);
457477
printOpmode(e.opmode);
458-
printTxend(e.txend);
478+
printTxend(e);
459479
break;
460480

461481
case EV_RXSTART:
462482
printFreq(e.freq);
463483
printRps(e.rps);
464484
printDatarate(e.datarate);
465485
printOpmode(e.opmode);
466-
printTxend(e.txend);
486+
printTxend(e);
467487
Serial.print(F(", delta ms ")); Serial.print(osticks2ms(e.time - e.txend));
468488
break;
469489

@@ -701,9 +721,20 @@ void setupForNetwork(bool preJoin) {
701721

702722
void loop() {
703723
os_runloop_once();
724+
725+
if (lastWasTxStart && millis() - lastTxStartTime > 10000) {
726+
/* ugh. TX timed out */
727+
Serial.println(F("Tx timed out"));
728+
#if LMIC_ENABLE_event_logging
729+
printAllRegisters();
730+
#endif
731+
LMIC_clrTxData();
732+
lastWasTxStart = false;
733+
}
734+
704735
if ((LMIC.opmode & OP_TXRXPEND) == 0 &&
705736
!os_queryTimeCriticalJobs(ms2osticks(1000))) {
706-
eventPrintOne();
737+
eventPrintAll();
707738
}
708739
}
709740

0 commit comments

Comments
 (0)