void onEvent (ev_t ev) { debug_event(ev); switch(ev) { // network joined, session established case EV_JOINED: debug_val("\r\nnetid = ", LMIC.netid); // immediately prepare next transmission debug_str("\r\nSending"); LMIC.frame[0] = LMIC.snr; LMIC_setTxData2(1, LMIC.frame, 1, 0); // schedule transmission (port 1, datalen 1, no ack requested) break; // scheduled data sent (optionally data received) case EV_TXCOMPLETE: if(LMIC.dataLen) { // data received in rx slot after tx debug_str("\r\nReceived:"); debug_buf(LMIC.frame+LMIC.dataBeg, LMIC.dataLen); } // immediately prepare next transmission LMIC.frame[0] = LMIC.snr; debug_val("\r\nSending:", LMIC.frame[0]); // schedule transmission (port 1, datalen 1, no ack requested) LMIC_setTxData2(1, LMIC.frame, 1, 0); break; } }
void onEvent (ev_t ev) { debug_event(ev); switch(ev) { // network joined, session established case EV_JOINED: debug_val("netid = ", LMIC.netid); goto tx; // scheduled data sent (optionally data received) case EV_TXCOMPLETE: if(LMIC.dataLen) { // data received in rx slot after tx debug_buf(LMIC.frame+LMIC.dataBeg, LMIC.dataLen); } tx: // immediately prepare next transmission LMIC.frame[0] = LMIC.snr; // schedule transmission (port 1, datalen 1, no ack requested) LMIC_setTxData2(1, LMIC.frame, 1, 0); // (will be sent as soon as duty cycle permits) break; default: break; } }
// initial job static void initfunc (osjob_t* j) { LMIC_reset(); // reset MAC state LMIC_setSession(0x12345678, 0xB710566C, nwkKey, artKey); //LMIC_startJoining(); // start joining // init done - onEvent() callback will be invoked... /*void LMIC_setSession (u4_t netid, devaddr_t(u4_t) devaddr, xref2u1_t nwkKey, xref2u1_t artKey) { LMIC.netid = netid; LMIC.devaddr = devaddr; if( nwkKey != (xref2u1_t)0 ) os_copyMem(LMIC.nwkKey, nwkKey, 16); if( artKey != (xref2u1_t)0 ) os_copyMem(LMIC.artKey, artKey, 16);*/ debug_str("\r\nSending"); // immediately prepare next transmission LMIC.frame[0] = LMIC.snr; // schedule transmission (port 1, datalen 1, no ack requested) LMIC_setTxData2(1, LMIC.frame, 1, 0); // (will be sent as soon as duty cycle permits) LMIC_sendAlive(); }
void do_send(osjob_t* j){ // Serial.print("Time: "); // Serial.println(millis() / 1000); printf("Time: %lu\n", (unsigned int) (millis() / 1000)); // Show TX channel (channel numbers are local to LMIC) // Serial.print("Send, txCnhl: "); // Serial.println(LMIC.txChnl); // Serial.print("Opmode check: "); printf("Send, txCnhl: %u Opmode check: ", LMIC.txChnl); // Check if there is not a current TX/RX job running if (LMIC.opmode & (1 << 7)) { //Serial.println("OP_TXRXPEND, not sending"); printf("OP_TXRXPEND, not sending\n"); } else { //Serial.println("ok"); printf("ok\n"); // Prepare upstream data transmission at the next possible time. // LMIC_setTxData2(1, mydata, sizeof(mydata)-1, 0); char buf[128]; sprintf(buf, "NYC TTN test packet %u\n", xmit_count++); LMIC_setTxData2(1, (unsigned char *) buf, strlen(buf)-1, 0); printf("sending %s\n", buf); } // Schedule a timed job to run at the given timestamp (absolute system time) os_setTimedCallback(j, os_getTime()+sec2osticks(TRANSMIT_INTERVAL), do_send); }
// report sensor value when change was detected static void sensorfunc (osjob_t* j) { // read sensor u2_t val = readsensor(); debug_val("val = ", val); // prepare and schedule data for transmission LMIC.frame[0] = val << 8; LMIC.frame[1] = val; LMIC_setTxData2(1, LMIC.frame, 2, 0); // (port 1, 2 bytes, unconfirmed) }