Send text with LoRaWAN.

Dependencies:   LMiC SX1276Lib mbed

Fork of LoRaWAN-lmic-app by Semtech

Committer:
tamberg
Date:
Wed Sep 16 00:02:20 2015 +0000
Revision:
8:747796516a2f
Parent:
7:4adfa7248a0b
Child:
9:fdd150f9db9e
Simplified main.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tamberg 6:fbfc95b5c979 1 /* License: Revised BSD License, see LICENSE.TXT, (c)2015 tamberg.org, (c)2015 Semtech */
mluis 0:a2929fa6e4f0 2
mluis 1:60184eda0066 3 #include "mbed.h"
mluis 0:a2929fa6e4f0 4 #include "lmic.h"
mluis 1:60184eda0066 5 #include "debug.h"
mluis 0:a2929fa6e4f0 6
tamberg 6:fbfc95b5c979 7 #define LORAWAN_NET_ID (uint32_t) 0x00000000
tamberg 6:fbfc95b5c979 8 #define LORAWAN_DEV_ADDR (uint32_t) 0x00001056
tamberg 6:fbfc95b5c979 9 #define LORAWAN_ADR_ON 1
tamberg 6:fbfc95b5c979 10 #define LORAWAN_CONFIRMED_MSG_ON 1
tamberg 6:fbfc95b5c979 11 #define LORAWAN_APP_PORT 15
tamberg 8:747796516a2f 12 #define LORAWAN_APP_DATA_SIZE 1 // 32 // max 51
mluis 0:a2929fa6e4f0 13
tamberg 5:1f8829bd11ed 14 static uint8_t NwkSKey[] = {
tamberg 4:f83ad3eee79d 15 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
tamberg 4:f83ad3eee79d 16 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF
mluis 0:a2929fa6e4f0 17 };
mluis 0:a2929fa6e4f0 18
tamberg 5:1f8829bd11ed 19 static uint8_t ArtSKey[] = {
tamberg 4:f83ad3eee79d 20 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
tamberg 4:f83ad3eee79d 21 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF
mluis 0:a2929fa6e4f0 22 };
mluis 0:a2929fa6e4f0 23
mluis 0:a2929fa6e4f0 24 osjob_t sendFrameJob;
mluis 0:a2929fa6e4f0 25
tamberg 7:4adfa7248a0b 26 void os_getArtEui (uint8_t *buf) {} // ignore
tamberg 7:4adfa7248a0b 27 void os_getDevEui (uint8_t *buf) {} // ignore
tamberg 7:4adfa7248a0b 28 void os_getDevKey (uint8_t *buf) {} // ignore
mluis 0:a2929fa6e4f0 29
tamberg 8:747796516a2f 30 u1_t n = 0;
tamberg 8:747796516a2f 31
tamberg 5:1f8829bd11ed 32 static void prepareTxFrame (void) {
tamberg 4:f83ad3eee79d 33 debug_str("prepareTxFrame\r\n");
tamberg 8:747796516a2f 34 //for (int i = 0; i < LORAWAN_APP_DATA_SIZE; i++) {
tamberg 8:747796516a2f 35 // LMIC.frame[i] = n;
tamberg 8:747796516a2f 36 //}
tamberg 8:747796516a2f 37 //n++;
tamberg 8:747796516a2f 38 LMIC.frame[0] = n++;
mluis 0:a2929fa6e4f0 39 }
mluis 0:a2929fa6e4f0 40
tamberg 5:1f8829bd11ed 41 void processRxFrame (void) {
tamberg 4:f83ad3eee79d 42 debug_str("processRxFrame\r\n");
tamberg 6:fbfc95b5c979 43 u1_t rxPort = LMIC.frame[LMIC.dataBeg - 1];
tamberg 7:4adfa7248a0b 44 debug_val("rxPort", rxPort);
tamberg 7:4adfa7248a0b 45 for (int i = 0; i < LMIC.dataLen; i++) {
tamberg 7:4adfa7248a0b 46 debug_hex(LMIC.frame[LMIC.dataBeg + i]);
tamberg 7:4adfa7248a0b 47 debug_char(' ');
mluis 0:a2929fa6e4f0 48 }
mluis 0:a2929fa6e4f0 49 }
mluis 0:a2929fa6e4f0 50
tamberg 5:1f8829bd11ed 51 static void onSendFrame (osjob_t* j) {
tamberg 4:f83ad3eee79d 52 debug_str("onSendFrame\r\n");
tamberg 5:1f8829bd11ed 53 prepareTxFrame();
tamberg 6:fbfc95b5c979 54 int result = LMIC_setTxData2(
tamberg 5:1f8829bd11ed 55 LORAWAN_APP_PORT,
tamberg 5:1f8829bd11ed 56 LMIC.frame,
tamberg 5:1f8829bd11ed 57 LORAWAN_APP_DATA_SIZE,
tamberg 7:4adfa7248a0b 58 LORAWAN_CONFIRMED_MSG_ON); // calls onEvent()
tamberg 7:4adfa7248a0b 59 debug_val("LMIC_setTxData2, result = ", result);
mluis 0:a2929fa6e4f0 60 }
mluis 0:a2929fa6e4f0 61
tamberg 5:1f8829bd11ed 62 static void onInit (osjob_t* j) {
tamberg 4:f83ad3eee79d 63 debug_str("onInit\r\n");
tamberg 5:1f8829bd11ed 64 LMIC_reset(); // reset MAC state
tamberg 5:1f8829bd11ed 65 LMIC_setAdrMode(LORAWAN_ADR_ON);
tamberg 8:747796516a2f 66 LMIC_setDrTxpow(DR_SF12, 16); // 14
tamberg 5:1f8829bd11ed 67 LMIC_setSession(
tamberg 5:1f8829bd11ed 68 LORAWAN_NET_ID,
tamberg 5:1f8829bd11ed 69 LORAWAN_DEV_ADDR,
tamberg 5:1f8829bd11ed 70 NwkSKey,
tamberg 5:1f8829bd11ed 71 ArtSKey);
tamberg 5:1f8829bd11ed 72 onSendFrame(NULL);
mluis 1:60184eda0066 73 }
mluis 1:60184eda0066 74
tamberg 8:747796516a2f 75 void onEvent (ev_t ev) { // called by lmic.cpp, see also oslmic.h
tamberg 8:747796516a2f 76 debug_str("onEvent\r\n");
tamberg 8:747796516a2f 77 debug_event(ev);
tamberg 8:747796516a2f 78 if (ev == EV_TXCOMPLETE) { // scheduled data sent (optionally data received)
tamberg 8:747796516a2f 79 debug_val("Datarate = ", LMIC.datarate);
tamberg 8:747796516a2f 80 if ((LMIC.txrxFlags & (TXRX_DNW1 | TXRX_DNW2)) != 0) { // downlink?
tamberg 8:747796516a2f 81 if (LMIC.dataLen != 0) { // data received in rx slot after tx
tamberg 8:747796516a2f 82 debug_buf(LMIC.frame + LMIC.dataBeg, LMIC.dataLen);
tamberg 8:747796516a2f 83 processRxFrame();
tamberg 8:747796516a2f 84 }
tamberg 8:747796516a2f 85 }
tamberg 8:747796516a2f 86 //os_setTimedCallback(&sendFrameJob, os_getTime() + 5000, onSendFrame);
tamberg 8:747796516a2f 87 os_setCallback(&sendFrameJob, onSendFrame);
tamberg 8:747796516a2f 88 }
tamberg 8:747796516a2f 89 }
tamberg 8:747796516a2f 90
tamberg 6:fbfc95b5c979 91 int main (void) {
tamberg 4:f83ad3eee79d 92 debug_str("main\r\n");
mluis 0:a2929fa6e4f0 93 osjob_t initjob;
tamberg 5:1f8829bd11ed 94 os_init();
tamberg 5:1f8829bd11ed 95 os_setCallback(&initjob, onInit);
tamberg 5:1f8829bd11ed 96 os_runloop(); // blocking
tamberg 8:747796516a2f 97 }