Send text with LoRaWAN.
Dependencies: LMiC SX1276Lib mbed
Fork of LoRaWAN-lmic-app by
main.cpp@8:747796516a2f, 2015-09-16 (annotated)
- 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?
User | Revision | Line number | New 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 | } |