Send text with LoRaWAN.
Dependencies: LMiC SX1276Lib mbed
Fork of LoRaWAN-lmic-app by
Diff: main.cpp
- Revision:
- 8:747796516a2f
- Parent:
- 7:4adfa7248a0b
- Child:
- 9:fdd150f9db9e
--- a/main.cpp Mon Sep 14 14:26:55 2015 +0000 +++ b/main.cpp Wed Sep 16 00:02:20 2015 +0000 @@ -6,12 +6,10 @@ #define LORAWAN_NET_ID (uint32_t) 0x00000000 #define LORAWAN_DEV_ADDR (uint32_t) 0x00001056 -#define APP_TX_DUTYCYCLE 5000 // ms -#define APP_TX_DUTYCYCLE_RND 1000 // ms #define LORAWAN_ADR_ON 1 #define LORAWAN_CONFIRMED_MSG_ON 1 #define LORAWAN_APP_PORT 15 -#define LORAWAN_APP_DATA_SIZE 32 //6 // max 51 +#define LORAWAN_APP_DATA_SIZE 1 // 32 // max 51 static uint8_t NwkSKey[] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, @@ -25,25 +23,19 @@ osjob_t sendFrameJob; -int32_t randr (int32_t min, int32_t max) { - return (int32_t) rand() % (max - min + 1) + min; -} - void os_getArtEui (uint8_t *buf) {} // ignore void os_getDevEui (uint8_t *buf) {} // ignore void os_getDevKey (uint8_t *buf) {} // ignore +u1_t n = 0; + static void prepareTxFrame (void) { debug_str("prepareTxFrame\r\n"); - for (int i = 0; i < LORAWAN_APP_DATA_SIZE; i++) { - LMIC.frame[i] = i; - } -// LMIC.frame[0] = AppLedStateOn; -// LMIC.frame[1] = LMIC.seqnoDn >> 8; -// LMIC.frame[2] = LMIC.seqnoDn; -// LMIC.frame[3] = LMIC.rssi >> 8; -// LMIC.frame[4] = LMIC.rssi; -// LMIC.frame[5] = LMIC.snr; + //for (int i = 0; i < LORAWAN_APP_DATA_SIZE; i++) { + // LMIC.frame[i] = n; + //} + //n++; + LMIC.frame[0] = n++; } void processRxFrame (void) { @@ -71,7 +63,7 @@ debug_str("onInit\r\n"); LMIC_reset(); // reset MAC state LMIC_setAdrMode(LORAWAN_ADR_ON); - LMIC_setDrTxpow(DR_SF12, 14); + LMIC_setDrTxpow(DR_SF12, 16); // 14 LMIC_setSession( LORAWAN_NET_ID, LORAWAN_DEV_ADDR, @@ -80,43 +72,26 @@ onSendFrame(NULL); } +void onEvent (ev_t ev) { // called by lmic.cpp, see also oslmic.h + debug_str("onEvent\r\n"); + debug_event(ev); + if (ev == EV_TXCOMPLETE) { // scheduled data sent (optionally data received) + debug_val("Datarate = ", LMIC.datarate); + if ((LMIC.txrxFlags & (TXRX_DNW1 | TXRX_DNW2)) != 0) { // downlink? + if (LMIC.dataLen != 0) { // data received in rx slot after tx + debug_buf(LMIC.frame + LMIC.dataBeg, LMIC.dataLen); + processRxFrame(); + } + } + //os_setTimedCallback(&sendFrameJob, os_getTime() + 5000, onSendFrame); + os_setCallback(&sendFrameJob, onSendFrame); + } +} + int main (void) { debug_str("main\r\n"); osjob_t initjob; os_init(); os_setCallback(&initjob, onInit); os_runloop(); // blocking -} - -void onEvent (ev_t ev) { // called by lmic.cpp, see also oslmic.h - debug_str("onEvent\r\n"); - bool txOn = false; - debug_event(ev); - switch (ev) { - case EV_JOINED: // network joined, session established - debug_val("Net ID = ", LMIC.netid); - txOn = true; - break; - case EV_TXCOMPLETE: // scheduled data sent (optionally data received) - debug_val("Datarate = ", LMIC.datarate); - // Check if we have a downlink on either Rx1 or Rx2 windows - if ((LMIC.txrxFlags & (TXRX_DNW1 | TXRX_DNW2)) != 0) { - //debug_val("LED2 = ", 1); - //os_setTimedCallback(&rxLedJob, os_getTime() + ms2osticks(25), onRxLed); - if (LMIC.dataLen != 0) { // data received in rx slot after tx - debug_buf(LMIC.frame + LMIC.dataBeg, LMIC.dataLen); - processRxFrame(); - } - } - txOn = true; - break; - default: - break; - } - if (txOn == true) { - os_setTimedCallback( - &sendFrameJob, - os_getTime() + ms2osticks(APP_TX_DUTYCYCLE + randr(-APP_TX_DUTYCYCLE_RND, APP_TX_DUTYCYCLE_RND)), - onSendFrame); - } -} +} \ No newline at end of file