diff --git a/tools/esp8266/app.cpp b/tools/esp8266/app.cpp index 7f4f2e4d..b1688fdd 100644 --- a/tools/esp8266/app.cpp +++ b/tools/esp8266/app.cpp @@ -157,6 +157,8 @@ void app::loop(void) { //app_loops++; Main::loop(); + mSys->Radio.loop(); + if(checkTicker(&mRxTicker, 5)) { //DPRINTLN(F("app_loops =") + String(app_loops)); //app_loops=0; @@ -195,6 +197,7 @@ void app::loop(void) { } mSys->BufCtrl.popBack(); + yield(); } @@ -319,6 +322,7 @@ bool app::buildPayload(uint8_t id) { else crc = crc16(mPayload[id].data[i], mPayload[id].len[i], crc); } + yield(); } if(crc == crcRcv) return true; @@ -353,7 +357,7 @@ void app::processPayload(bool retransmit) { else mSys->Radio.sendTimePacket(iv->radioId.u64, mPayload[iv->id].ts); } - mSys->Radio.switchRxCh(100); + mSys->Radio.switchRxCh(300); } } else { @@ -364,6 +368,7 @@ void app::processPayload(bool retransmit) { for(uint8_t i = 0; i < (mPayload[iv->id].maxPackId); i ++) { memcpy(&payload[offs], mPayload[iv->id].data[i], (mPayload[iv->id].len[i])); offs += (mPayload[iv->id].len[i]); + yield(); } offs-=2; if(mSerialDebug) { @@ -379,6 +384,7 @@ void app::processPayload(bool retransmit) { } } } + yield(); } } @@ -650,6 +656,7 @@ void app::showLiveData(void) { } } modHtml += ""; + yield(); } modHtml += F("
Last received data requested at: ") + getDateTimeStr(iv->ts) + F("
"); modHtml += F(""); diff --git a/tools/esp8266/config.h b/tools/esp8266/config.h index c0851160..c803bb9c 100644 --- a/tools/esp8266/config.h +++ b/tools/esp8266/config.h @@ -21,7 +21,7 @@ // time during the ESP will act as access point on connection failure (to // station) in seconds -#define WIFI_AP_ACTIVE_TIME 3*60 +#define WIFI_AP_ACTIVE_TIME 60 // default device name #define DEF_DEVICE_NAME "AHOY-DTU" diff --git a/tools/esp8266/defines.h b/tools/esp8266/defines.h index 147e8829..d7f36c39 100644 --- a/tools/esp8266/defines.h +++ b/tools/esp8266/defines.h @@ -16,7 +16,7 @@ //------------------------------------- #define VERSION_MAJOR 0 #define VERSION_MINOR 4 -#define VERSION_PATCH 13 +#define VERSION_PATCH 14 //------------------------------------- diff --git a/tools/esp8266/hmRadio.h b/tools/esp8266/hmRadio.h index 05f05270..dae10b31 100644 --- a/tools/esp8266/hmRadio.h +++ b/tools/esp8266/hmRadio.h @@ -14,7 +14,8 @@ #define DUMMY_RADIO_ID ((uint64_t)0xDEADBEEF01ULL) #define RX_CHANNELS 5 -#define RX_LOOP_CNT 400 +#define RX_LOOP_CNT 600 + const char* const rf24AmpPower[] = {"MIN", "LOW", "HIGH", "MAX"}; @@ -70,6 +71,7 @@ class HmRadio { mSendCnt = 0; mSerialDebug = false; + mIrqRcvd = false; } ~HmRadio() {} @@ -107,32 +109,40 @@ class HmRadio { } } - void handleIntr(void) { - DPRINTLN(F("hmRadio.h:handleIntr")); - uint8_t pipe, len; - packet_t *p; - + void loop(void) { DISABLE_IRQ; - while(mNrf24.available(&pipe)) { - if(!mBufCtrl->full()) { - p = mBufCtrl->getFront(); - memset(p->packet, 0xcc, MAX_RF_PAYLOAD_SIZE); - p->rxCh = mRxChLst[mRxChIdx]; - len = mNrf24.getPayloadSize(); - if(len > MAX_RF_PAYLOAD_SIZE) - len = MAX_RF_PAYLOAD_SIZE; - - mNrf24.read(p->packet, len); - mBufCtrl->pushFront(p); - } - else { - bool tx_ok, tx_fail, rx_ready; - mNrf24.whatHappened(tx_ok, tx_fail, rx_ready); // reset interrupt status - mNrf24.flush_rx(); // drop the packet - break; + if(mIrqRcvd) { + mIrqRcvd = false; + bool tx_ok, tx_fail, rx_ready; + mNrf24.whatHappened(tx_ok, tx_fail, rx_ready); // resets the IRQ pin to HIGH + RESTORE_IRQ; + uint8_t pipe, len; + packet_t *p; + while(mNrf24.available(&pipe)) { + if(!mBufCtrl->full()) { + p = mBufCtrl->getFront(); + p->rxCh = mRxChLst[mRxChIdx]; + len = mNrf24.getPayloadSize(); + if(len > MAX_RF_PAYLOAD_SIZE) + len = MAX_RF_PAYLOAD_SIZE; + + mNrf24.read(p->packet, len); + mBufCtrl->pushFront(p); + } + else { + mNrf24.flush_rx(); // drop the packet + break; + } + yield(); } } - RESTORE_IRQ; + else + RESTORE_IRQ; + } + + void handleIntr(void) { + DPRINTLN(F("hmRadio.h:handleIntr")); + mIrqRcvd = true; } uint8_t getDefaultChannel(void) { @@ -196,6 +206,7 @@ class HmRadio { bool switchRxCh(uint8_t addLoop = 0) { //DPRINTLN(F("hmRadio.h:switchRxCh")); //DPRINT(F("R")); + mRxLoopCnt += addLoop; if(mRxLoopCnt != 0) { mRxLoopCnt--; @@ -278,6 +289,7 @@ class HmRadio { } uint8_t getRxNxtChannel(void) { + if(++mRxChIdx >= RX_CHANNELS) mRxChIdx = 0; return mRxChLst[mRxChIdx]; @@ -288,12 +300,15 @@ class HmRadio { //uint8_t mTxChIdx; uint8_t mRxChLst[RX_CHANNELS]; + uint8_t mRxChIdx; uint16_t mRxLoopCnt; RF24 mNrf24; BUFFER *mBufCtrl; uint8_t mTxBuf[MAX_RF_PAYLOAD_SIZE]; + + volatile bool mIrqRcvd; }; #endif /*__RADIO_H__*/ diff --git a/tools/esp8266/hmSystem.h b/tools/esp8266/hmSystem.h index 0d289852..0306dbac 100644 --- a/tools/esp8266/hmSystem.h +++ b/tools/esp8266/hmSystem.h @@ -38,8 +38,8 @@ class HmSystem { p->id = mNumInv; p->serial.u64 = serial; memcpy(p->chMaxPwr, chMaxPwr, (4*2)); - DPRINT("SERIAL: " + String(p->serial.b[5], HEX)); - DPRINTLN(" " + String(p->serial.b[4], HEX)); + //DPRINT("SERIAL: " + String(p->serial.b[5], HEX)); + //DPRINTLN(" " + String(p->serial.b[4], HEX)); if(p->serial.b[5] == 0x11) { switch(p->serial.b[4]) { case 0x21: p->type = INV_TYPE_1CH; break; diff --git a/tools/esp8266/main.cpp b/tools/esp8266/main.cpp index 4227c574..aa63cf9e 100644 --- a/tools/esp8266/main.cpp +++ b/tools/esp8266/main.cpp @@ -108,10 +108,10 @@ void Main::loop(void) { } } - if(++mHeapStatCnt >= 10) { + /*if(++mHeapStatCnt >= 10) { mHeapStatCnt = 0; stats(); - } + }*/ } } diff --git a/tools/esp8266/mqtt.h b/tools/esp8266/mqtt.h index a00680ae..fbdfa8d3 100644 --- a/tools/esp8266/mqtt.h +++ b/tools/esp8266/mqtt.h @@ -38,7 +38,8 @@ class mqtt { if(!mClient->connected()) reconnect(); - mClient->publish(top, msg); + if(mClient->connected()) + mClient->publish(top, msg); } }