You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
2.6 KiB
C
109 lines
2.6 KiB
C
#include <lmic.h>
|
|
#include <hal/hal.h>
|
|
#define LMIC_DEBUG_LEVEL 0
|
|
|
|
void os_getArtEui (u1_t* buf) {
|
|
memcpy_P(buf, APPEUI, 8);
|
|
}
|
|
|
|
void os_getDevEui (u1_t* buf) {
|
|
Serial.println("writing devid");
|
|
memcpy_P(buf, DEVEUI, 8);
|
|
}
|
|
|
|
void os_getDevKey (u1_t* buf) {
|
|
memcpy_P(buf, APPKEY, 16);
|
|
}
|
|
|
|
static osjob_t sendjob;
|
|
void do_send(osjob_t* j); // predeclaration, implementation in main script
|
|
|
|
|
|
// Pin mapping for Dragino LoRa Shield V1.3
|
|
const lmic_pinmap lmic_pins = {
|
|
.nss = 10,
|
|
.rxtx = LMIC_UNUSED_PIN,
|
|
.rst = LMIC_UNUSED_PIN,
|
|
.dio = {2, 6, 7}
|
|
};
|
|
|
|
void reboot () {
|
|
Serial.println("Restarting System.");
|
|
delay(5000);
|
|
asm volatile (" jmp 0");
|
|
}
|
|
|
|
void onEvent (ev_t ev) {
|
|
Serial.print(os_getTime());
|
|
Serial.print(": ");
|
|
switch (ev) {
|
|
case EV_SCAN_TIMEOUT:
|
|
Serial.println(F("EV_SCAN_TIMEOUT"));
|
|
break;
|
|
case EV_BEACON_FOUND:
|
|
Serial.println(F("EV_BEACON_FOUND"));
|
|
break;
|
|
case EV_BEACON_MISSED:
|
|
Serial.println(F("EV_BEACON_MISSED"));
|
|
break;
|
|
case EV_BEACON_TRACKED:
|
|
Serial.println(F("EV_BEACON_TRACKED"));
|
|
break;
|
|
case EV_JOINING:
|
|
Serial.println(F("EV_JOINING"));
|
|
break;
|
|
case EV_JOINED:
|
|
Serial.println(F("EV_JOINED"));
|
|
|
|
// Disable link check validation (automatically enabled
|
|
// during join, but not supported by TTN at this time).
|
|
LMIC_setLinkCheckMode(0);
|
|
break;
|
|
case EV_RFU1:
|
|
Serial.println(F("EV_RFU1"));
|
|
break;
|
|
case EV_JOIN_FAILED:
|
|
Serial.println(F("EV_JOIN_FAILED"));
|
|
reboot();
|
|
break;
|
|
case EV_REJOIN_FAILED:
|
|
Serial.println(F("EV_REJOIN_FAILED"));
|
|
reboot();
|
|
break;
|
|
break;
|
|
case EV_TXCOMPLETE:
|
|
Serial.println(F("EV_TXCOMPLETE (includes waiting for RX windows)"));
|
|
if (LMIC.txrxFlags & TXRX_ACK)
|
|
Serial.println(F("Received ack"));
|
|
if (LMIC.dataLen) {
|
|
Serial.println(F("Received "));
|
|
Serial.println(LMIC.dataLen);
|
|
Serial.println(F(" bytes of payload"));
|
|
}
|
|
// Schedule next transmission
|
|
os_setTimedCallback(&sendjob, os_getTime() + sec2osticks(TX_INTERVAL), do_send);
|
|
break;
|
|
case EV_LOST_TSYNC:
|
|
Serial.println(F("EV_LOST_TSYNC"));
|
|
reboot();
|
|
break;
|
|
case EV_RESET:
|
|
Serial.println(F("EV_RESET"));
|
|
reboot();
|
|
break;
|
|
case EV_RXCOMPLETE:
|
|
// data received in ping slot
|
|
Serial.println(F("EV_RXCOMPLETE"));
|
|
break;
|
|
case EV_LINK_DEAD:
|
|
Serial.println(F("EV_LINK_DEAD"));
|
|
break;
|
|
case EV_LINK_ALIVE:
|
|
Serial.println(F("EV_LINK_ALIVE"));
|
|
break;
|
|
default:
|
|
Serial.println(F("Unknown event"));
|
|
break;
|
|
}
|
|
}
|