Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: LoRaWAN-test-10secs
Fork of LMiC by
Revision 9:c5820ce68bd6, committed 2016-02-23
- Comitter:
- pnysten
- Date:
- Tue Feb 23 08:41:36 2016 +0000
- Parent:
- 8:34cb24e0b061
- Commit message:
- LR-test3 version sending uplinks every 10 secs
Changed in this revision
diff -r 34cb24e0b061 -r c5820ce68bd6 aes.cpp
--- a/aes.cpp Mon Feb 08 10:39:01 2016 +0000
+++ b/aes.cpp Tue Feb 23 08:41:36 2016 +0000
@@ -337,8 +337,8 @@
if( mode & AES_CTR ) { // xor block (partially)
t0 = (len > 16) ? 16: len;
- debug_str("Payload before XOR:");
- debug_buf(buf,len);
+ /*debug_str("Payload before XOR:");
+ debug_buf(buf,len);*/
for(t1=0; t1<t0; t1++) {
buf[t1] ^= (a0>>24);
a0 <<= 8;
diff -r 34cb24e0b061 -r c5820ce68bd6 lmic.cpp
--- a/lmic.cpp Mon Feb 08 10:39:01 2016 +0000
+++ b/lmic.cpp Tue Feb 23 08:41:36 2016 +0000
@@ -409,6 +409,7 @@
static ostime_t calcRxWindow (u1_t secs, dr_t dr) {
+ //debug_str("calcRxWindow\r\n");
ostime_t rxoff, err;
if( secs==0 ) {
// aka 128 secs (next becaon)
@@ -429,6 +430,7 @@
// Setup beacon RX parameters assuming we have an error of ms (aka +/-(ms/2))
static void calcBcnRxWindowFromMillis (u1_t ms, bit_t ini) {
+ //debug_str("calcBcnRxWindowFromMillis\r\n");
if( ini ) {
LMIC.drift = 0;
LMIC.maxDriftDiff = 0;
@@ -443,6 +445,7 @@
// Setup scheduled RX window (ping/multicast slot)
static void rxschedInit (xref2rxsched_t rxsched) {
+ //debug_str("rxschedInit\r\n");
os_clearMem(AESkey,16);
os_clearMem(LMIC.frame+8,8);
os_wlsbf4(LMIC.frame, LMIC.bcninfo.time);
@@ -460,6 +463,7 @@
static bit_t rxschedNext (xref2rxsched_t rxsched, ostime_t cando) {
+ //debug_str("rxschedNext\r\n");
again:
if( rxsched->rxtime - cando >= 0 )
return 1;
@@ -478,6 +482,7 @@
static ostime_t rndDelay (u1_t secSpan) {
+ //debug_str("rndDelay\r\n");
u2_t r = os_getRndU2();
ostime_t delay = r;
if( delay > OSTICKS_PER_SEC )
@@ -489,6 +494,7 @@
static void txDelay (ostime_t reftime, u1_t secSpan) {
+ //debug_str("txDelay\r\n");
reftime += rndDelay(secSpan);
if( LMIC.globalDutyRate == 0 || (reftime - LMIC.globalDutyAvail) > 0 ) {
LMIC.globalDutyAvail = reftime;
@@ -498,6 +504,7 @@
static void setDrJoin (u1_t reason, u1_t dr) {
+ //debug_str("setDrJoin\r\n");
EV(drChange, INFO, (e_.reason = reason,
e_.deveui = MAIN::CDEV->getEui(),
e_.dr = dr|DR_PAGE,
@@ -510,6 +517,7 @@
static void setDrTxpow (u1_t reason, u1_t dr, s1_t pow) {
+ //debug_str("setDrTxpow\r\n");
EV(drChange, INFO, (e_.reason = reason,
e_.deveui = MAIN::CDEV->getEui(),
e_.dr = dr|DR_PAGE,
@@ -528,11 +536,13 @@
void LMIC_stopPingable (void) {
+ //debug_str("LMIC_stopPingable\r\n");
LMIC.opmode &= ~(OP_PINGABLE|OP_PINGINI);
}
void LMIC_setPingable (u1_t intvExp) {
+ //debug_str("LMIC_setPingable\r\n");
// Change setting
LMIC.ping.intvExp = (intvExp & 0x7);
LMIC.opmode |= OP_PINGABLE;
@@ -560,6 +570,7 @@
};
static void initDefaultChannels (bit_t join) {
+ //debug_str("initDefaultChannels\r\n");
os_clearMem(&LMIC.channelFreq, sizeof(LMIC.channelFreq));
os_clearMem(&LMIC.channelDrMap, sizeof(LMIC.channelDrMap));
os_clearMem(&LMIC.bands, sizeof(LMIC.bands));
@@ -585,11 +596,12 @@
LMIC.bands[BAND_DECI ].txpow = 27;
LMIC.bands[BAND_CENTI].lastchnl = os_getRndU1() % MAX_CHANNELS;
LMIC.bands[BAND_MILLI].avail =
- LMIC.bands[BAND_CENTI].avail =
+ LMIC.bands[BAND_CENTI].avail =
LMIC.bands[BAND_DECI ].avail = os_getTime();
}
bit_t LMIC_setupBand (u1_t bandidx, s1_t txpow, u2_t txcap) {
+ //debug_str("LMIC_setupBand\r\n");
if( bandidx > BAND_AUX ) return 0;
band_t* b = &LMIC.bands[bandidx];
b->txpow = txpow;
@@ -600,6 +612,7 @@
}
bit_t LMIC_setupChannel (u1_t chidx, u4_t freq, u2_t drmap, s1_t band) {
+ //debug_str("LMIC_setupChannel\r\n");
if( chidx >= MAX_CHANNELS )
return 0;
if( band == -1 ) {
@@ -621,12 +634,14 @@
}
void LMIC_disableChannel (u1_t channel) {
+ //debug_str("LMIC_disableChannel\r\n");
LMIC.channelFreq[channel] = 0;
LMIC.channelDrMap[channel] = 0;
LMIC.channelMap &= ~(1<<channel);
}
static u4_t convFreq (xref2u1_t ptr) {
+ //debug_str("convFreq\r\n");
u4_t freq = (os_rlsbf4(ptr-1) >> 8) * 100;
if( freq < EU868_FREQ_MIN || freq > EU868_FREQ_MAX )
freq = 0;
@@ -634,6 +649,7 @@
}
static u1_t mapChannels (u1_t chpage, u2_t chmap) {
+ //debug_str("mapChannels\r\n");
// Bad page, disable all channel, enable non-existent
if( chpage != 0 || chmap==0 || (chmap & ~LMIC.channelMap) != 0 )
return 0; // illegal input
@@ -647,6 +663,7 @@
static void updateTx (ostime_t txbeg) {
+ //debug_str("updateTx\r\n");
u4_t freq = LMIC.channelFreq[LMIC.txChnl];
// Update global/band specific duty cycle stats
ostime_t airtime = calcAirTime(LMIC.rps, LMIC.dataLen);
@@ -660,6 +677,7 @@
}
static ostime_t nextTx (ostime_t now) {
+ //debug_str("nextTx\r\n");
u1_t bmap=0xF;
do {
ostime_t mintime = now + /*10h*/36000*OSTICKS_PER_SEC;
@@ -676,12 +694,14 @@
if( (LMIC.channelMap & (1<<chnl)) != 0 && // channel enabled
(LMIC.channelDrMap[chnl] & (1<<(LMIC.datarate&0xF))) != 0 &&
band == (LMIC.channelFreq[chnl] & 0x3) ) { // in selected band
+ //debug_str("channel enabled in selected band\r\n");
LMIC.txChnl = LMIC.bands[band].lastchnl = chnl;
return mintime;
}
}
if( (bmap &= ~(1<<band)) == 0 ) {
// No feasible channel found!
+ //debug_str("No feasible channel found!\r\n");
return mintime;
}
} while(1);
@@ -689,6 +709,7 @@
static void setBcnRxParams (void) {
+ //debug_str("setBcnRxParams\r\n");
LMIC.dataLen = 0;
LMIC.freq = LMIC.channelFreq[LMIC.bcnChnl] & ~(u4_t)3;
LMIC.rps = setIh(setNocrc(dndr2rps((dr_t)DR_BCN),1),LEN_BCN);
@@ -697,6 +718,7 @@
#define setRx1Params() /*LMIC.freq/rps remain unchanged*/
static void initJoinLoop (void) {
+ //debug_str("initJoinLoop\r\n");
LMIC.txChnl = os_getRndU1() % 6;
LMIC.adrTxPow = 14;
setDrJoin(DRCHG_SET, DR_SF7);
@@ -707,6 +729,7 @@
static ostime_t nextJoinState (void) {
+ //debug_str("nextJoinState\r\n");
u1_t failed = 0;
// Try 869.x and then 864.x with same DR
@@ -750,12 +773,14 @@
static void initDefaultChannels (void) {
+ //debug_str("initDefaultChannels\r\n");
for( u1_t i=0; i<4; i++ )
LMIC.channelMap[i] = 0xFFFF;
LMIC.channelMap[4] = 0x00FF;
}
static u4_t convFreq (xref2u1_t ptr) {
+ //debug_str("convFreq\r\n");
u4_t freq = (os_rlsbf4(ptr-1) >> 8) * 100;
if( freq >= US915_FREQ_MIN && freq <= US915_FREQ_MAX )
freq = 0;
@@ -763,6 +788,7 @@
}
bit_t LMIC_setupChannel (u1_t chidx, u4_t freq, u2_t drmap, s1_t band) {
+ //debug_str("LMIC_setupChannel\r\n");
if( chidx < 72 || chidx >= 72+MAX_XCHANNELS )
return 0; // channels 0..71 are hardwired
chidx -= 72;
@@ -773,11 +799,13 @@
}
void LMIC_disableChannel (u1_t channel) {
+ //debug_str("LMIC_disableChannel\r\n");
if( channel < 72+MAX_XCHANNELS )
LMIC.channelMap[channel/4] &= ~(1<<(channel&0xF));
}
static u1_t mapChannels (u1_t chpage, u2_t chmap) {
+ //debug_str("mapChannels\r\n");
if( chpage == MCMD_LADR_CHP_125ON || chpage == MCMD_LADR_CHP_125OFF ) {
u2_t en125 = chpage == MCMD_LADR_CHP_125ON ? 0xFFFF : 0x0000;
for( u1_t u=0; u<4; u++ )
@@ -792,6 +820,7 @@
}
static void updateTx (ostime_t txbeg) {
+ //debug_str("updateTx\r\n");
u1_t chnl = LMIC.txChnl;
if( chnl < 64 ) {
LMIC.freq = US915_125kHz_UPFBASE + chnl*US915_125kHz_UPFSTEP;
@@ -816,6 +845,7 @@
// US does not have duty cycling - return now as earliest TX time
#define nextTx(now) (_nextTx(),(now))
static void _nextTx (void) {
+ //debug_str("_nextTx\r\n");
if( LMIC.chRnd==0 )
LMIC.chRnd = os_getRndU1() & 0x3F;
if( LMIC.datarate >= DR_SF8C ) { // 500kHz
@@ -839,12 +869,14 @@
}
static void setBcnRxParams (void) {
+ //debug_str("setBcnRxParams\r\n");
LMIC.dataLen = 0;
LMIC.freq = US915_500kHz_DNFBASE + LMIC.bcnChnl * US915_500kHz_DNFSTEP;
LMIC.rps = setIh(setNocrc(dndr2rps((dr_t)DR_BCN),1),LEN_BCN);
}
#define setRx1Params() { \
+ //debug_str("setRx1Params\r\n"); \
LMIC.freq = US915_500kHz_DNFBASE + (LMIC.txChnl & 0x7) * US915_500kHz_DNFSTEP; \
if( /* TX datarate */LMIC.dndr < DR_SF8C ) \
LMIC.dndr += DR_SF10CR - DR_SF10; \
@@ -854,6 +886,7 @@
}
static void initJoinLoop (void) {
+ //debug_str("initJoinLoop\r\n");
LMIC.chRnd = 0;
LMIC.txChnl = 0;
LMIC.adrTxPow = 20;
@@ -863,6 +896,7 @@
}
static ostime_t nextJoinState (void) {
+ //debug_str("nextJoinState\r\n");
// Try the following:
// SF7/8/9/10 on a random channel 0..63
// SF8C on a random channel 64..71
@@ -902,11 +936,13 @@
static void runEngineUpdate (xref2osjob_t osjob) {
+ //debug_str("runEngineUpdate\r\n");
engineUpdate();
}
static void reportEvent (ev_t ev) {
+ //debug_str("reportEvent\r\n");
EV(devCond, INFO, (e_.reason = EV::devCond_t::LMIC_EV,
e_.eui = MAIN::CDEV->getEui(),
e_.info = ev));
@@ -916,6 +952,7 @@
static void runReset (xref2osjob_t osjob) {
+ //debug_str("runReset\r\n");
// Disable session
LMIC_reset();
LMIC_startJoining();
@@ -923,6 +960,7 @@
}
static void stateJustJoined (void) {
+ //debug_str("stateJustJoined\r\n");
LMIC.seqnoDn = LMIC.seqnoUp = 0;
LMIC.rejoinCnt = 0;
LMIC.dnConf = LMIC.adrChanged = LMIC.ladrAns = LMIC.devsAns = 0;
@@ -944,6 +982,7 @@
// Decode beacon - do not overwrite bcninfo unless we have a match!
static int decodeBeacon (void) {
+ //debug_str("decodeBeacon\r\n");
ASSERT(LMIC.dataLen == LEN_BCN); // implicit header RX guarantees this
xref2u1_t d = LMIC.frame;
if(
@@ -980,6 +1019,7 @@
static bit_t decodeFrame (void) {
+ //debug_str("decodeFrame\r\n");
//debug_str("decodeFrame: ");
//debug_buf(LMIC.frame, LMIC.dataLen);
xref2u1_t d = LMIC.frame;
@@ -1074,6 +1114,8 @@
if (port != 3) LMIC.dnConf = (ftype == HDR_FTYPE_DCDN ? FCT_ACK : 0);
else LMIC.dnConf = 0;
+
+// if (LMIC.dnConf != 0) debug_str("ACK IS ON!!\r\n");
}
if( LMIC.dnConf || (fct & FCT_MORE) )
@@ -1463,6 +1505,7 @@
static void setupRx2 (void) {
+ //debug_str("setupRx2\r\n");
LMIC.txrxFlags = TXRX_DNW2;
LMIC.rps = dndr2rps(LMIC.dn2Dr);
LMIC.freq = LMIC.dn2Freq;
@@ -1472,12 +1515,14 @@
static void schedRx2 (ostime_t delay, osjobcb_t func) {
+ //debug_str("schedRx2\r\n");
// Add 1.5 symbols we need 5 out of 8. Try to sync 1.5 symbols into the preamble.
LMIC.rxtime = LMIC.txend + delay + (PAMBL_SYMS-MINRX_SYMS)*dr2hsym(LMIC.dn2Dr);
os_setTimedCallback(&LMIC.osjob, LMIC.rxtime - RX_RAMPUP, func);
}
static void setupRx1 (osjobcb_t func) {
+ //debug_str("setupRx1\r\n");
LMIC.txrxFlags = TXRX_DNW1;
// Turn LMIC.rps from TX over to RX
LMIC.rps = setNocrc(LMIC.rps,1);
@@ -1489,6 +1534,7 @@
// Called by HAL once TX complete and delivers exact end of TX time stamp in LMIC.rxtime
static void txDone (ostime_t delay, osjobcb_t func) {
+ //debug_str("txDone\r\n");
if( (LMIC.opmode & (OP_TRACK|OP_PINGABLE|OP_PINGINI)) == (OP_TRACK|OP_PINGABLE) ) {
rxschedInit(&LMIC.ping); // note: reuses LMIC.frame buffer!
LMIC.opmode |= OP_PINGINI;
@@ -1517,6 +1563,7 @@
static void onJoinFailed (xref2osjob_t osjob) {
+ //debug_str("onJoinFailed\r\n");
// Notify app - must call LMIC_reset() to stop joining
// otherwise join procedure continues.
reportEvent(EV_JOIN_FAILED);
@@ -1524,6 +1571,7 @@
static bit_t processJoinAccept (void) {
+ //debug_str("processJoinAccept\r\n");
ASSERT(LMIC.txrxFlags != TXRX_DNW1 || LMIC.dataLen != 0);
ASSERT((LMIC.opmode & OP_TXRXPEND)!=0);
@@ -1622,6 +1670,7 @@
static void processRx2Jacc (xref2osjob_t osjob) {
+ //debug_str("processRx2Jacc\r\n");
if( LMIC.dataLen == 0 )
LMIC.txrxFlags = 0; // nothing in 1st/2nd DN slot
processJoinAccept();
@@ -1629,23 +1678,27 @@
static void setupRx2Jacc (xref2osjob_t osjob) {
+ //debug_str("setupRx2Jacc\r\n");
LMIC.osjob.func = FUNC_ADDR(processRx2Jacc);
setupRx2();
}
static void processRx1Jacc (xref2osjob_t osjob) {
+ //debug_str("processRx1Jacc\r\n");
if( LMIC.dataLen == 0 || !processJoinAccept() )
schedRx2(DELAY_JACC2_osticks, FUNC_ADDR(setupRx2Jacc));
}
static void setupRx1Jacc (xref2osjob_t osjob) {
+ //debug_str("setupRx1Jacc\r\n");
setupRx1(FUNC_ADDR(processRx1Jacc));
}
static void jreqDone (xref2osjob_t osjob) {
+ //debug_str("jreqDone\r\n");
txDone(DELAY_JACC1_osticks, FUNC_ADDR(setupRx1Jacc));
}
@@ -1655,10 +1708,12 @@
static bit_t processDnData(void);
static void processRx2DnDataDelay (xref2osjob_t osjob) {
+ //debug_str("processDnData\r\n");
processDnData();
}
static void processRx2DnData (xref2osjob_t osjob) {
+ //debug_str("processRx2DnData\r\n");
if( LMIC.dataLen == 0 ) {
LMIC.txrxFlags = 0; // nothing in 1st/2nd DN slot
// Delay callback processing to avoid up TX while gateway is txing our missed frame!
@@ -1673,23 +1728,28 @@
static void setupRx2DnData (xref2osjob_t osjob) {
+ //debug_str("setupRx2DnData\r\n");
LMIC.osjob.func = FUNC_ADDR(processRx2DnData);
setupRx2();
}
static void processRx1DnData (xref2osjob_t osjob) {
+ //debug_str("processRx1DnData\r\n");
if( LMIC.dataLen == 0 || !processDnData() )
schedRx2(DELAY_DNW2_osticks, FUNC_ADDR(setupRx2DnData));
}
static void setupRx1DnData (xref2osjob_t osjob) {
+ //debug_str("setupRx1DnData\r\n");
+
setupRx1(FUNC_ADDR(processRx1DnData));
}
static void updataDone (xref2osjob_t osjob) {
+ //debug_str("updataDone\r\n");
txDone(DELAY_DNW1_osticks, FUNC_ADDR(setupRx1DnData));
}
@@ -1700,6 +1760,7 @@
//debug_str("buildDataFrame\r\n");
bit_t txdata = ((LMIC.opmode & (OP_TXDATA|OP_POLL)) != OP_POLL);
u1_t dlen = txdata ? LMIC.pendTxLen : 0;
+ if (LMIC.dnConf != 0) debug_str("ACK IS ON!!\r\n");
// Piggyback MAC options
// Prioritize by importance
@@ -1817,6 +1878,7 @@
// Callback from HAL during scan mode or when job timer expires.
static void onBcnRx (xref2osjob_t job) {
+ //debug_str("onBcnRx\r\n");
// If we arrive via job timer make sure to put radio to rest.
os_radio(RADIO_RST);
os_clearCallback(&LMIC.osjob);
@@ -1849,6 +1911,7 @@
// Implicitely cancels any pending TX/RX transaction.
// Also cancels an onpoing joining procedure.
static void startScan (void) {
+ //debug_str("startScan\r\n");
ASSERT(LMIC.devaddr!=0 && (LMIC.opmode & OP_JOINING)==0);
if( (LMIC.opmode & OP_SHUTDOWN) != 0 )
return;
@@ -1863,6 +1926,7 @@
bit_t LMIC_enableTracking (u1_t tryBcnInfo) {
+ //debug_str("LMIC_enableTracking\r\n");
if( (LMIC.opmode & (OP_SCAN|OP_TRACK|OP_SHUTDOWN)) != 0 )
return 0; // already in progress or failed to enable
// If BCN info requested from NWK then app has to take are
@@ -1874,6 +1938,7 @@
void LMIC_disableTracking (void) {
+ //debug_str("LMIC_disableTracking\r\n");
LMIC.opmode &= ~(OP_SCAN|OP_TRACK);
LMIC.bcninfoTries = 0;
engineUpdate();
@@ -1887,6 +1952,7 @@
// ================================================================================
static void buildJoinRequest (u1_t ftype) {
+ //debug_str("buildJoinRequest\r\n");
// Do not use pendTxData since we might have a pending
// user level frame in there. Use RX holding area instead.
xref2u1_t d = LMIC.frame;
@@ -1910,11 +1976,13 @@
}
static void startJoining (xref2osjob_t osjob) {
+ //debug_str("startJoining\r\n");
reportEvent(EV_JOINING);
}
// Start join procedure if not already joined.
bit_t LMIC_startJoining (void) {
+ //debug_str("LMIC_startJoining\r\n");
if( LMIC.devaddr == 0 ) {
// There should be no TX/RX going on
ASSERT((LMIC.opmode & (OP_POLL|OP_TXRXPEND)) == 0);
@@ -1941,6 +2009,7 @@
// ================================================================================
static void processPingRx (xref2osjob_t osjob) {
+ //debug_str("processPingRx\r\n");
if( LMIC.dataLen != 0 ) {
LMIC.txrxFlags = TXRX_PING;
if( decodeFrame() ) {
@@ -1954,6 +2023,7 @@
static bit_t processDnData (void) {
+ //debug_str("processDnData\r\n");
ASSERT((LMIC.opmode & OP_TXRXPEND)!=0);
if( LMIC.dataLen == 0 ) {
@@ -2022,6 +2092,7 @@
static void processBeacon (xref2osjob_t osjob) {
+ //debug_str("processBeacon\r\n");
ostime_t lasttx = LMIC.bcninfo.txtime; // save here - decodeBeacon might overwrite
u1_t flags = LMIC.bcninfo.flags;
ev_t ev;
@@ -2061,10 +2132,10 @@
LMIC.bcninfo.time += BCN_INTV_sec;
LMIC.missedBcns++;
// Delay any possible TX after surmised beacon - it's there although we missed it
- debug_str("Delayed!! -- 2064");
+ //debug_str("Delayed!! -- 2064");
debug_uint(LMIC.bcninfo.txtime + BCN_RESERVE_osticks);
- debug_char( '\r' );
- debug_char( '\n' );
+ //debug_char( '\r' );
+ //debug_char( '\n' );
txDelay(LMIC.bcninfo.txtime + BCN_RESERVE_osticks, 4);
if( LMIC.missedBcns > MAX_MISSED_BCNS )
LMIC.opmode |= OP_REJOIN; // try if we can roam to another network
@@ -2087,12 +2158,14 @@
static void startRxBcn (xref2osjob_t osjob) {
+ //debug_str("startRxBcn\r\n");
LMIC.osjob.func = FUNC_ADDR(processBeacon);
os_radio(RADIO_RX);
}
static void startRxPing (xref2osjob_t osjob) {
+ //debug_str("startRxPing\r\n");
LMIC.osjob.func = FUNC_ADDR(processPingRx);
os_radio(RADIO_RX);
}
@@ -2101,7 +2174,7 @@
// Decide what to do next for the MAC layer of a device
static void engineUpdate (void) {
-// debug_str("Engine Update\r\n");
+ //debug_str("Engine Update\r\n");
// Check for ongoing state: scan or TX/RX transaction
if( (LMIC.opmode & (OP_SCAN|OP_TXRXPEND|OP_SHUTDOWN)) != 0 )
return;
@@ -2150,7 +2223,7 @@
goto checkrx;
}
// Earliest possible time vs overhead to setup radio
- if( txbeg - (now + TX_RAMPUP) < 0 ) {
+ /*PANYif( txbeg - (now + TX_RAMPUP) < 0 ) {PANY*/
// We could send right now!
debug_str("We could send right now!");
debug_char( '\r' );
@@ -2197,14 +2270,13 @@
updateTx(txbeg);
os_radio(RADIO_TX);
return;
- }
+ /*PANY}PANY*/
// Cannot yet TX
if( (LMIC.opmode & OP_TRACK) == 0 )
{
- debug_str("We don't track the beacon - nothing else to do - so wait for the time to TX!");
+ /*debug_str("We don't track the beacon - nothing else to do - so wait for the time to TX!");
debug_char( '\r' );
- debug_char( '\n' );
- //return;
+ debug_char( '\n' );*/
goto txdelay; // We don't track the beacon - nothing else to do - so wait for the time to TX
}
// Consider RX tasks
@@ -2250,35 +2322,41 @@
return;
txdelay:
- debug_char( '\r' );
- debug_char( '\n' );
- debug_str("TX DELAY: Wait for ");
- debug_uint(txbeg-TX_RAMPUP);
- debug_char( '\r' );
- debug_char( '\n' );
+ //debug_char( '\r' );
+ //debug_char( '\n' );
+ debug_str("TX DELAY: Wait ...");
+ char buffer[10];
+ sprintf(buffer, "%d", (txbeg-TX_RAMPUP));
+
+ debug_str(buffer);
+ //debug_char( '\r' );
+ //debug_char( '\n' );
debug_char( '\r' );
debug_char( '\n' );
EV(devCond, INFO, (e_.reason = EV::devCond_t::TX_DELAY,
e_.eui = MAIN::CDEV->getEui(),
e_.info = osticks2ms(txbeg-now),
e_.info2 = LMIC.seqnoUp-1));
- os_setTimedCallback(&LMIC.osjob, txbeg-TX_RAMPUP, FUNC_ADDR(runEngineUpdate));
- //os_setCallback(&LMIC.osjob, FUNC_ADDR(runEngineUpdate));
+ os_setTimedCallback(&LMIC.osjob, (txbeg-TX_RAMPUP), FUNC_ADDR(runEngineUpdate));
+ //debug_str("TX DELAY: Stop To Wait ...");
}
void LMIC_setAdrMode (bit_t enabled) {
+ //debug_str("LMIC_setAdrMode\r\n");
LMIC.adrEnabled = enabled ? FCT_ADREN : 0;
}
// Should we have/need an ext. API like this?
void LMIC_setDrTxpow (dr_t dr, s1_t txpow) {
+ //debug_str("LMIC_setDrTxpow\r\n");
setDrTxpow(DRCHG_SET, dr, txpow);
}
void LMIC_shutdown (void) {
+ //debug_str("LMIC_shutdown\r\n");
os_clearCallback(&LMIC.osjob);
os_radio(RADIO_RST);
LMIC.opmode |= OP_SHUTDOWN;
@@ -2286,6 +2364,7 @@
void LMIC_reset (void) {
+ //debug_str("LMIC_reset\r\n");
EV(devCond, INFO, (e_.reason = EV::devCond_t::LMIC_EV,
e_.eui = MAIN::CDEV->getEui(),
e_.info = EV_RESET));
@@ -2317,11 +2396,13 @@
void LMIC_init (void) {
+ //debug_str("LMIC_init\r\n");
LMIC.opmode = OP_SHUTDOWN;
}
void LMIC_clrTxData (void) {
+ //debug_str("LMIC_clrTxData\r\n");
LMIC.opmode &= ~(OP_TXDATA|OP_TXRXPEND|OP_POLL);
LMIC.pendTxLen = 0;
if( (LMIC.opmode & (OP_JOINING|OP_SCAN)) != 0 ) // do not interfere with JOINING
@@ -2333,6 +2414,7 @@
void LMIC_setTxData (void) {
+ //debug_str("LMIC_setTxData\r\n");
LMIC.opmode |= OP_TXDATA;
if( (LMIC.opmode & OP_JOINING) == 0 )
{
@@ -2344,6 +2426,7 @@
//
int LMIC_setTxData2 (u1_t port, xref2u1_t data, u1_t dlen, u1_t confirmed) {
+ //debug_str("LMIC_setTxData2\r\n");
/* debug_val("Data Length: ", dlen);
debug_val("Data Length: ", SIZEOFEXPR(LMIC.pendTxData));*/
if( dlen > SIZEOFEXPR(LMIC.pendTxData) )
@@ -2367,6 +2450,7 @@
// Send a payload-less message to signal device is alive
void LMIC_sendAlive (void) {
+ //debug_str("LMIC_sendAlive\r\n");
LMIC.opmode |= OP_POLL;
engineUpdate();
}
@@ -2374,6 +2458,7 @@
// Check if other networks are around.
void LMIC_tryRejoin (void) {
+ //debug_str("LMIC_tryRejoin\r\n");
LMIC.opmode |= OP_REJOIN;
engineUpdate();
}
@@ -2393,6 +2478,7 @@
//! \param artKey the 16 byte application router session key used for message confidentiality.
//! If NULL the caller has copied the key into `LMIC.artKey` before.
void LMIC_setSession (u4_t netid, devaddr_t devaddr, xref2u1_t nwkKey, xref2u1_t artKey) {
+ //debug_str("LMIC_setSession\r\n");
LMIC.netid = netid;
LMIC.devaddr = devaddr;
if( nwkKey != (xref2u1_t)0 )
@@ -2418,6 +2504,7 @@
// nor is the datarate changed.
// This must be called only if a session is established (e.g. after EV_JOINED)
void LMIC_setLinkCheckMode (bit_t enabled) {
+ //debug_str("LMIC_setLinkCheckMode\r\n");
LMIC.adrChanged = 0;
LMIC.adrAckReq = enabled ? LINK_CHECK_INIT : LINK_CHECK_OFF;
}
diff -r 34cb24e0b061 -r c5820ce68bd6 oslmic.cpp
--- a/oslmic.cpp Mon Feb 08 10:39:01 2016 +0000
+++ b/oslmic.cpp Tue Feb 23 08:41:36 2016 +0000
@@ -86,8 +86,10 @@
job->next = NULL;
// insert into schedule
for(pnext=&OS.scheduledjobs; *pnext; pnext=&((*pnext)->next)) {
+ //debug_str(".");
if((*pnext)->deadline - time > 0) { // (cmp diff, not abs!)
// enqueue before next element and stop
+ //debug_str("Stop To Wait...\r\n");
job->next = *pnext;
break;
}
diff -r 34cb24e0b061 -r c5820ce68bd6 oslmic.h --- a/oslmic.h Mon Feb 08 10:39:01 2016 +0000 +++ b/oslmic.h Tue Feb 23 08:41:36 2016 +0000 @@ -89,7 +89,8 @@ #define RX_RAMPUP (us2osticks(2000)) #endif #ifndef TX_RAMPUP -#define TX_RAMPUP (us2osticks(2000)) +//#define TX_RAMPUP (us2osticks(2000)) +#define TX_RAMPUP (sec2osticks(200)) #endif #ifndef OSTICKS_PER_SEC
