Senet-ized LMIC for MOTE_L152RC
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;
}


