From edefcf1c830b5ea7cd202a9d27395811a6f5a03b Mon Sep 17 00:00:00 2001 From: lumapu Date: Mon, 6 Feb 2023 00:07:58 +0100 Subject: [PATCH] fix Interrupt fix connect to WiFi with only one AP --- src/app.cpp | 1 + src/app.h | 5 +++++ src/hm/hmRadio.h | 5 ++++- src/main.cpp | 10 ++++++++++ src/wifi/ahoywifi.cpp | 13 ++++++------- 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/app.cpp b/src/app.cpp index f5478f0f..2f1bd58d 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -13,6 +13,7 @@ app::app() : ah::Scheduler() {} //----------------------------------------------------------------------------- void app::setup() { + mSys = NULL; Serial.begin(115200); while (!Serial) yield(); diff --git a/src/app.h b/src/app.h index d3709b89..36a77f9a 100644 --- a/src/app.h +++ b/src/app.h @@ -60,6 +60,11 @@ class app : public IApp, public ah::Scheduler { void onWifi(bool gotIp); void regularTickers(void); + void handleIntr(void) { + if(NULL != mSys) + mSys->Radio.handleIntr(); + } + uint32_t getUptime() { return Scheduler::getUptime(); } diff --git a/src/hm/hmRadio.h b/src/hm/hmRadio.h index ea440b8c..9f671c54 100644 --- a/src/hm/hmRadio.h +++ b/src/hm/hmRadio.h @@ -82,7 +82,6 @@ class HmRadio { void setup(uint8_t ampPwr = RF24_PA_LOW, uint8_t irq = IRQ_PIN, uint8_t ce = CE_PIN, uint8_t cs = CS_PIN) { DPRINTLN(DBG_VERBOSE, F("hmRadio.h:setup")); pinMode(irq, INPUT_PULLUP); - attachInterrupt(digitalPinToInterrupt(irq), []()IRAM_ATTR{ mIrqRcvd = true; }, FALLING); uint32_t dtuSn = 0x87654321; uint32_t chipID = 0; // will be filled with last 3 bytes of MAC @@ -166,6 +165,10 @@ class HmRadio { return true; } + void handleIntr(void) { + mIrqRcvd = true; + } + bool isChipConnected(void) { //DPRINTLN(DBG_VERBOSE, F("hmRadio.h:isChipConnected")); return mNrf24.isChipConnected(); diff --git a/src/main.cpp b/src/main.cpp index 42ed55f4..c585d0f2 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,11 +7,21 @@ #include "app.h" #include "config/config.h" + app myApp; +//----------------------------------------------------------------------------- +IRAM_ATTR void handleIntr(void) { + myApp.handleIntr(); +} + + //----------------------------------------------------------------------------- void setup() { myApp.setup(); + + // TODO: move to HmRadio + attachInterrupt(digitalPinToInterrupt(myApp.getIrqPin()), handleIntr, FALLING); } diff --git a/src/wifi/ahoywifi.cpp b/src/wifi/ahoywifi.cpp index 8384c118..dc8f03b5 100644 --- a/src/wifi/ahoywifi.cpp +++ b/src/wifi/ahoywifi.cpp @@ -88,7 +88,12 @@ void ahoywifi::tickWifiLoop() { } mCnt++; - if(!mScanActive && mBSSIDList.empty()) { // start scanning APs with the given SSID + uint8_t timeout = 10; // seconds + if (mStaConn == CONNECTED) // connected but no ip + timeout = 20; + + + if(!mScanActive && mBSSIDList.empty() && ((mCnt % timeout) == 0)) { // start scanning APs with the given SSID DBGPRINT(F("scanning APs with SSID ")); DBGPRINTLN(String(mConfig->sys.stationSsid)); mScanCnt = 0; @@ -100,12 +105,6 @@ void ahoywifi::tickWifiLoop() { #endif return; } - - uint8_t timeout = 10; // seconds - - if (mStaConn == CONNECTED) // connected but no ip - timeout = 20; - DBGPRINT(F("reconnect in ")); DBGPRINT(String(timeout-mCnt)); DBGPRINTLN(F(" seconds"));