hello world
Fork of lmic_MOTE_L152RC by
Diff: lmic.cpp
- Revision:
- 9:83ae7f34e88c
- Parent:
- 8:0faa1bb768b5
- Child:
- 10:6c0830baf10f
--- a/lmic.cpp Wed Oct 21 01:03:34 2015 +0000 +++ b/lmic.cpp Mon Nov 16 23:52:45 2015 +0000 @@ -11,7 +11,7 @@ //! \file #include "lmic.h" -#include "debug.h" // tmp wbr +#include "debug.h" #if !defined(MINRX_SYMS) #define MINRX_SYMS 5 @@ -802,6 +802,13 @@ #endif /* JOIN_REQ_DEBUG */ if( chnl < 64 ) { LMIC.freq = US915_125kHz_UPFBASE + chnl*US915_125kHz_UPFSTEP; + + if (LMIC.opmode & OP_JOINING) { + /* use max allowed power for joining */ + if (LMIC.txpow < LMIC.txpow_limit) + LMIC.txpow = LMIC.txpow_limit; + } + #ifdef JOIN_REQ_DEBUG printf("%d (125khz)\r\n", LMIC.freq); #endif /* JOIN_REQ_DEBUG */ @@ -919,9 +926,15 @@ static void initJoinLoop (void) { LMIC.chRnd = 0; +#ifdef CHNL_HYBRID + LMIC.joinBlockChnl = 0; + LMIC.joinBlock = CHNL_HYBRID; + LMIC.txChnl = LMIC.joinBlock << 3; +#else LMIC.txChnl = 0; LMIC.joinBlockChnl = 0; LMIC.joinBlock = 0; +#endif LMIC.datarate = DR_SF10; LMIC.adrTxPow = LMIC.txpow_limit; ASSERT((LMIC.opmode & OP_NEXTCHNL)==0); @@ -1162,8 +1175,9 @@ // We heard from network LMIC.adrChanged = LMIC.rejoinCnt = 0; - if( LMIC.adrAckReq != LINK_CHECK_OFF ) + if( LMIC.adrAckReq != LINK_CHECK_OFF ) { LMIC.adrAckReq = LINK_CHECK_INIT; + } // Process OPTS int m = LMIC.rssi - RSSI_OFF - getSensitivity(LMIC.rps); @@ -1427,7 +1441,7 @@ if( LMIC.dataLen == 0 ) { nojoinframe: - if( (LMIC.opmode & OP_JOINING) == 0 ) { + /* keep retrying re-joining after failed attempt -- if( (LMIC.opmode & OP_JOINING) == 0 ) { ASSERT((LMIC.opmode & OP_REJOIN) != 0); // REJOIN attempt for roaming LMIC.opmode &= ~(OP_REJOIN|OP_TXRXPEND); @@ -1435,7 +1449,7 @@ LMIC.rejoinCnt++; reportEvent(EV_REJOIN_FAILED); return 1; - } + }*/ LMIC.opmode &= ~OP_TXRXPEND; ostime_t delay = nextJoinState(); EV(devCond, DEBUG, (e_.reason = EV::devCond_t::NO_JACC, @@ -1461,7 +1475,6 @@ e_.info = dlen < 4 ? 0 : mic, e_.info2 = hdr + (dlen<<8))); badframe: - printf("pja badframe dlen:%d, hdr:%02x\r\n", dlen, hdr); if( (LMIC.txrxFlags & TXRX_DNW1) != 0 ) return 0; goto nojoinframe; @@ -1689,7 +1702,6 @@ if( LMIC.txCnt == 0 ) { LMIC.seqnoUp += 1; - //printf("seqnoUp inc %d\r\n", LMIC.seqnoUp); DO_DEVDB(LMIC.seqnoUp,seqnoUp); } else { EV(devCond, INFO, (e_.reason = EV::devCond_t::RE_TX, @@ -1891,8 +1903,9 @@ // Nothing received - implies no port LMIC.txrxFlags = TXRX_NOPORT; } - if( LMIC.adrAckReq != LINK_CHECK_OFF ) + if( LMIC.adrAckReq != LINK_CHECK_OFF ) { LMIC.adrAckReq += 1; + } LMIC.dataBeg = LMIC.dataLen = 0; txcomplete: LMIC.opmode &= ~(OP_TXDATA|OP_TXRXPEND); @@ -2011,8 +2024,9 @@ // Decide what to do next for the MAC layer of a device static void engineUpdate (void) { // Check for ongoing state: scan or TX/RX transaction - if( (LMIC.opmode & (OP_SCAN|OP_TXRXPEND|OP_SHUTDOWN)) != 0 ) + if( (LMIC.opmode & (OP_SCAN|OP_TXRXPEND|OP_SHUTDOWN)) != 0 ) { return; + } if( LMIC.devaddr == 0 && (LMIC.opmode & OP_JOINING) == 0 ) { LMIC_startJoining(); @@ -2028,7 +2042,7 @@ ASSERT( now + RX_RAMPUP - LMIC.bcnRxtime <= 0 ); rxtime = LMIC.bcnRxtime - RX_RAMPUP; } - + if( (LMIC.opmode & (OP_JOINING|OP_REJOIN|OP_TXDATA|OP_POLL)) != 0 ) { // Need to TX some data... // Assuming txChnl points to channel which first becomes available again. @@ -2062,7 +2076,8 @@ u1_t ftype; if( (LMIC.opmode & OP_REJOIN) != 0 ) { txdr = lowerDR(txdr, LMIC.rejoinCnt); - ftype = HDR_FTYPE_REJOIN; + //ftype = HDR_FTYPE_REJOIN; + ftype = HDR_FTYPE_JREQ; } else { ftype = HDR_FTYPE_JREQ; }