transmit example for LMIC_MOTE_L152RC
Dependencies: lmic_MOTE_L152RC mbed-src
transmit_main.cpp@1:1ff358d55507, 2015-06-02 (annotated)
- Committer:
- dudmuck
- Date:
- Tue Jun 02 19:12:38 2015 +0000
- Revision:
- 1:1ff358d55507
- Parent:
- 0:cf8cd2f1ab24
use changed library name for LMIC
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dudmuck | 0:cf8cd2f1ab24 | 1 | //#if 0 |
dudmuck | 0:cf8cd2f1ab24 | 2 | /******************************************************************************* |
dudmuck | 0:cf8cd2f1ab24 | 3 | * Copyright (c) 2014-2015 IBM Corporation. |
dudmuck | 0:cf8cd2f1ab24 | 4 | * All rights reserved. This program and the accompanying materials |
dudmuck | 0:cf8cd2f1ab24 | 5 | * are made available under the terms of the Eclipse Public License v1.0 |
dudmuck | 0:cf8cd2f1ab24 | 6 | * which accompanies this distribution, and is available at |
dudmuck | 0:cf8cd2f1ab24 | 7 | * http://www.eclipse.org/legal/epl-v10.html |
dudmuck | 0:cf8cd2f1ab24 | 8 | * |
dudmuck | 0:cf8cd2f1ab24 | 9 | * Contributors: |
dudmuck | 0:cf8cd2f1ab24 | 10 | * IBM Zurich Research Lab - initial API, implementation and documentation |
dudmuck | 0:cf8cd2f1ab24 | 11 | *******************************************************************************/ |
dudmuck | 0:cf8cd2f1ab24 | 12 | |
dudmuck | 0:cf8cd2f1ab24 | 13 | #include "lmic.h" |
dudmuck | 0:cf8cd2f1ab24 | 14 | #include "debug.h" |
dudmuck | 0:cf8cd2f1ab24 | 15 | |
dudmuck | 0:cf8cd2f1ab24 | 16 | ////////////////////////////////////////////////// |
dudmuck | 0:cf8cd2f1ab24 | 17 | // CONFIGURATION (FOR APPLICATION CALLBACKS BELOW) |
dudmuck | 0:cf8cd2f1ab24 | 18 | ////////////////////////////////////////////////// |
dudmuck | 0:cf8cd2f1ab24 | 19 | |
dudmuck | 0:cf8cd2f1ab24 | 20 | // application router ID (LSBF) |
dudmuck | 0:cf8cd2f1ab24 | 21 | static const u1_t APPEUI[8] = { 0x01, 0x00, 0x01, 0x00, 0x00, 0x0c, 0x25, 0x00 }; |
dudmuck | 0:cf8cd2f1ab24 | 22 | |
dudmuck | 0:cf8cd2f1ab24 | 23 | // unique device ID (LSBF) |
dudmuck | 0:cf8cd2f1ab24 | 24 | static const u1_t DEVEUI[8] = { 0x0f, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x25, 0x00 }; |
dudmuck | 0:cf8cd2f1ab24 | 25 | |
dudmuck | 0:cf8cd2f1ab24 | 26 | // device-specific AES key (derived from device EUI) |
dudmuck | 0:cf8cd2f1ab24 | 27 | static const u1_t DEVKEY[16] = { 0xe4, 0x72, 0x71, 0xc5, 0xf5, 0x30, 0xa9, 0x9f, 0xcf, 0xc4, 0x0e, 0xab, 0xea, 0xd7, 0x19, 0x42, }; |
dudmuck | 0:cf8cd2f1ab24 | 28 | // E4 -72 -71 -C5 -F5 -30 -A9 -9F -CF -C4 -0E -AB -EA -D7 -19 -42 |
dudmuck | 0:cf8cd2f1ab24 | 29 | |
dudmuck | 0:cf8cd2f1ab24 | 30 | ////////////////////////////////////////////////// |
dudmuck | 0:cf8cd2f1ab24 | 31 | // APPLICATION CALLBACKS |
dudmuck | 0:cf8cd2f1ab24 | 32 | ////////////////////////////////////////////////// |
dudmuck | 0:cf8cd2f1ab24 | 33 | |
dudmuck | 0:cf8cd2f1ab24 | 34 | // provide application router ID (8 bytes, LSBF) |
dudmuck | 0:cf8cd2f1ab24 | 35 | void os_getArtEui (u1_t* buf) { |
dudmuck | 0:cf8cd2f1ab24 | 36 | memcpy(buf, APPEUI, 8); |
dudmuck | 0:cf8cd2f1ab24 | 37 | } |
dudmuck | 0:cf8cd2f1ab24 | 38 | |
dudmuck | 0:cf8cd2f1ab24 | 39 | // provide device ID (8 bytes, LSBF) |
dudmuck | 0:cf8cd2f1ab24 | 40 | void os_getDevEui (u1_t* buf) { |
dudmuck | 0:cf8cd2f1ab24 | 41 | memcpy(buf, DEVEUI, 8); |
dudmuck | 0:cf8cd2f1ab24 | 42 | } |
dudmuck | 0:cf8cd2f1ab24 | 43 | |
dudmuck | 0:cf8cd2f1ab24 | 44 | // provide device key (16 bytes) |
dudmuck | 0:cf8cd2f1ab24 | 45 | void os_getDevKey (u1_t* buf) { |
dudmuck | 0:cf8cd2f1ab24 | 46 | memcpy(buf, DEVKEY, 16); |
dudmuck | 0:cf8cd2f1ab24 | 47 | } |
dudmuck | 0:cf8cd2f1ab24 | 48 | |
dudmuck | 0:cf8cd2f1ab24 | 49 | |
dudmuck | 0:cf8cd2f1ab24 | 50 | ////////////////////////////////////////////////// |
dudmuck | 0:cf8cd2f1ab24 | 51 | // MAIN - INITIALIZATION AND STARTUP |
dudmuck | 0:cf8cd2f1ab24 | 52 | ////////////////////////////////////////////////// |
dudmuck | 0:cf8cd2f1ab24 | 53 | |
dudmuck | 0:cf8cd2f1ab24 | 54 | // initial job |
dudmuck | 0:cf8cd2f1ab24 | 55 | static void initfunc (osjob_t* j) { |
dudmuck | 0:cf8cd2f1ab24 | 56 | // reset MAC state |
dudmuck | 0:cf8cd2f1ab24 | 57 | LMIC_reset(); |
dudmuck | 0:cf8cd2f1ab24 | 58 | // start joining |
dudmuck | 0:cf8cd2f1ab24 | 59 | LMIC_startJoining(); |
dudmuck | 0:cf8cd2f1ab24 | 60 | // init done - onEvent() callback will be invoked... |
dudmuck | 0:cf8cd2f1ab24 | 61 | } |
dudmuck | 0:cf8cd2f1ab24 | 62 | |
dudmuck | 0:cf8cd2f1ab24 | 63 | |
dudmuck | 0:cf8cd2f1ab24 | 64 | // application entry point |
dudmuck | 0:cf8cd2f1ab24 | 65 | int main () { |
dudmuck | 0:cf8cd2f1ab24 | 66 | osjob_t initjob; |
dudmuck | 0:cf8cd2f1ab24 | 67 | |
dudmuck | 0:cf8cd2f1ab24 | 68 | // initialize runtime env |
dudmuck | 0:cf8cd2f1ab24 | 69 | os_init(); |
dudmuck | 0:cf8cd2f1ab24 | 70 | // initialize debug library |
dudmuck | 0:cf8cd2f1ab24 | 71 | debug_init(); |
dudmuck | 0:cf8cd2f1ab24 | 72 | // setup initial job |
dudmuck | 0:cf8cd2f1ab24 | 73 | os_setCallback(&initjob, initfunc); |
dudmuck | 0:cf8cd2f1ab24 | 74 | // execute scheduled jobs and events |
dudmuck | 0:cf8cd2f1ab24 | 75 | os_runloop(); |
dudmuck | 0:cf8cd2f1ab24 | 76 | // (not reached) |
dudmuck | 0:cf8cd2f1ab24 | 77 | return 0; |
dudmuck | 0:cf8cd2f1ab24 | 78 | } |
dudmuck | 0:cf8cd2f1ab24 | 79 | |
dudmuck | 0:cf8cd2f1ab24 | 80 | |
dudmuck | 0:cf8cd2f1ab24 | 81 | ////////////////////////////////////////////////// |
dudmuck | 0:cf8cd2f1ab24 | 82 | // LMIC EVENT CALLBACK |
dudmuck | 0:cf8cd2f1ab24 | 83 | ////////////////////////////////////////////////// |
dudmuck | 0:cf8cd2f1ab24 | 84 | |
dudmuck | 0:cf8cd2f1ab24 | 85 | void onEvent (ev_t ev) { |
dudmuck | 0:cf8cd2f1ab24 | 86 | debug_event(ev); |
dudmuck | 0:cf8cd2f1ab24 | 87 | |
dudmuck | 0:cf8cd2f1ab24 | 88 | switch(ev) { |
dudmuck | 0:cf8cd2f1ab24 | 89 | |
dudmuck | 0:cf8cd2f1ab24 | 90 | // network joined, session established |
dudmuck | 0:cf8cd2f1ab24 | 91 | case EV_JOINED: |
dudmuck | 0:cf8cd2f1ab24 | 92 | debug_val("netid = ", LMIC.netid); |
dudmuck | 0:cf8cd2f1ab24 | 93 | goto tx; |
dudmuck | 0:cf8cd2f1ab24 | 94 | |
dudmuck | 0:cf8cd2f1ab24 | 95 | // scheduled data sent (optionally data received) |
dudmuck | 0:cf8cd2f1ab24 | 96 | case EV_TXCOMPLETE: |
dudmuck | 0:cf8cd2f1ab24 | 97 | if(LMIC.dataLen) { // data received in rx slot after tx |
dudmuck | 0:cf8cd2f1ab24 | 98 | debug_buf(LMIC.frame+LMIC.dataBeg, LMIC.dataLen); |
dudmuck | 0:cf8cd2f1ab24 | 99 | } |
dudmuck | 0:cf8cd2f1ab24 | 100 | tx: |
dudmuck | 0:cf8cd2f1ab24 | 101 | // immediately prepare next transmission |
dudmuck | 0:cf8cd2f1ab24 | 102 | LMIC.frame[0] = LMIC.snr; |
dudmuck | 0:cf8cd2f1ab24 | 103 | // schedule transmission (port 1, datalen 1, no ack requested) |
dudmuck | 0:cf8cd2f1ab24 | 104 | LMIC_setTxData2(1, LMIC.frame, 1, 0); |
dudmuck | 0:cf8cd2f1ab24 | 105 | // (will be sent as soon as duty cycle permits) |
dudmuck | 0:cf8cd2f1ab24 | 106 | break; |
dudmuck | 0:cf8cd2f1ab24 | 107 | } |
dudmuck | 0:cf8cd2f1ab24 | 108 | } |
dudmuck | 0:cf8cd2f1ab24 | 109 | //#endif /* #if 0 */ |