|
|
@ -82,40 +82,26 @@ void app::loop(void) { |
|
|
|
void app::loopStandard(void) { |
|
|
|
ah::Scheduler::loop(); |
|
|
|
|
|
|
|
mSys->Radio.loop(); |
|
|
|
mPayload.loop(); |
|
|
|
|
|
|
|
yield(); |
|
|
|
|
|
|
|
if (ah::checkTicker(&mRxTicker, 4)) { |
|
|
|
bool rxRdy = mSys->Radio.switchRxCh(); |
|
|
|
|
|
|
|
if (!mSys->BufCtrl.empty()) { |
|
|
|
uint8_t len; |
|
|
|
packet_t *p = mSys->BufCtrl.getBack(); |
|
|
|
if (mSys->Radio.loop()) { |
|
|
|
while (!mSys->Radio.mBufCtrl.empty()) { |
|
|
|
packet_t *p = &mSys->Radio.mBufCtrl.front(); |
|
|
|
|
|
|
|
if (mSys->Radio.checkPaketCrc(p->packet, &len, p->rxCh)) { |
|
|
|
if (mConfig->serial.debug) { |
|
|
|
DPRINT(DBG_INFO, "RX " + String(len) + "B Ch" + String(p->rxCh) + " | "); |
|
|
|
mSys->Radio.dumpBuf(NULL, p->packet, len); |
|
|
|
} |
|
|
|
mStat.frmCnt++; |
|
|
|
|
|
|
|
if (0 != len) |
|
|
|
mPayload.add(p, len); |
|
|
|
if (mConfig->serial.debug) { |
|
|
|
DPRINT(DBG_INFO, "RX " + String(p->len) + "B Ch" + String(p->ch) + " | "); |
|
|
|
mSys->Radio.dumpBuf(p->packet, p->len); |
|
|
|
} |
|
|
|
mSys->BufCtrl.popBack(); |
|
|
|
} |
|
|
|
yield(); |
|
|
|
mStat.frmCnt++; |
|
|
|
|
|
|
|
if (rxRdy) |
|
|
|
mPayload.process(true); |
|
|
|
mPayload.add(p); |
|
|
|
mSys->Radio.mBufCtrl.pop(); |
|
|
|
yield(); |
|
|
|
} |
|
|
|
mPayload.process(true); |
|
|
|
} |
|
|
|
mPayload.loop(); |
|
|
|
|
|
|
|
#if !defined(AP_ONLY) |
|
|
|
if(mMqttEnabled) |
|
|
|
mMqtt.loop(); |
|
|
|
#endif |
|
|
|
} |
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
@ -131,12 +117,14 @@ void app::onWifi(bool gotIp) { |
|
|
|
regularTickers(); // reinstall regular tickers
|
|
|
|
if (gotIp) { |
|
|
|
mInnerLoopCb = std::bind(&app::loopStandard, this); |
|
|
|
mSendTickerId = every(std::bind(&app::tickSend, this), mConfig->nrf.sendInterval, "tSend"); |
|
|
|
every(std::bind(&app::tickSend, this), mConfig->nrf.sendInterval, "tSend"); |
|
|
|
mMqttReconnect = true; |
|
|
|
mSunrise = 0; // needs to be set to 0, to reinstall sunrise and ivComm tickers!
|
|
|
|
once(std::bind(&app::tickNtpUpdate, this), 2, "ntp2"); |
|
|
|
if(WIFI_AP == WiFi.getMode()) |
|
|
|
if(WIFI_AP == WiFi.getMode()) { |
|
|
|
mMqttEnabled = false; |
|
|
|
everySec(std::bind(&ahoywifi::tickWifiLoop, &mWifi), "wifiL"); |
|
|
|
} |
|
|
|
} |
|
|
|
else { |
|
|
|
mInnerLoopCb = std::bind(&app::loopWifi, this); |
|
|
@ -232,6 +220,15 @@ void app::tickComm(void) { |
|
|
|
once(std::bind(&app::tickComm, this), 1, "mqCom"); // MQTT not connected, retry
|
|
|
|
} |
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void app::tickMidnight(void) { |
|
|
|
// only used and enabled by MQTT (see setup())
|
|
|
|
uint32_t nxtTrig = mTimestamp - ((mTimestamp - 1) % 86400) + 86400; // next midnight
|
|
|
|
onceAt(std::bind(&app::tickMidnight, this), nxtTrig, "mid2"); |
|
|
|
|
|
|
|
mMqtt.tickerMidnight(); |
|
|
|
} |
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void app::tickSend(void) { |
|
|
|
if(!mSys->Radio.isChipConnected()) { |
|
|
@ -239,9 +236,9 @@ void app::tickSend(void) { |
|
|
|
return; |
|
|
|
} |
|
|
|
if (mIVCommunicationOn) { |
|
|
|
if (!mSys->BufCtrl.empty()) { |
|
|
|
if (!mSys->Radio.mBufCtrl.empty()) { |
|
|
|
if (mConfig->serial.debug) |
|
|
|
DPRINTLN(DBG_DEBUG, F("recbuf not empty! #") + String(mSys->BufCtrl.getFill())); |
|
|
|
DPRINTLN(DBG_DEBUG, F("recbuf not empty! #") + String(mSys->Radio.mBufCtrl.size())); |
|
|
|
} |
|
|
|
|
|
|
|
int8_t maxLoop = MAX_NUM_INVERTERS; |
|
|
@ -264,21 +261,6 @@ void app::tickSend(void) { |
|
|
|
updateLed(); |
|
|
|
} |
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void app::tickMidnight(void) { |
|
|
|
// only used and enabled by MQTT (see setup())
|
|
|
|
uint32_t nxtTrig = mTimestamp - ((mTimestamp - 1) % 86400) + 86400; // next midnight
|
|
|
|
onceAt(std::bind(&app::tickMidnight, this), nxtTrig, "mid2"); |
|
|
|
|
|
|
|
mMqtt.tickerMidnight(); |
|
|
|
} |
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void app::handleIntr(void) { |
|
|
|
DPRINTLN(DBG_VERBOSE, F("app::handleIntr")); |
|
|
|
mSys->Radio.handleIntr(); |
|
|
|
} |
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void app::resetSystem(void) { |
|
|
|
snprintf(mVersion, 12, "%d.%d.%d", VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH); |
|
|
@ -290,8 +272,7 @@ void app::resetSystem(void) { |
|
|
|
mSunrise = 0; |
|
|
|
mSunset = 0; |
|
|
|
|
|
|
|
mRxTicker = 0; |
|
|
|
mSendTickerId = 0xff; // invalid id
|
|
|
|
mMqttEnabled = false; |
|
|
|
|
|
|
|
mSendLastIvId = 0; |
|
|
|
mShowRebootRequest = false; |
|
|
|