fix Interrupt

fix connect to WiFi with only one AP
This commit is contained in:
lumapu 2023-02-06 00:07:58 +01:00
parent a85ed6c089
commit edefcf1c83
5 changed files with 26 additions and 8 deletions

View file

@ -13,6 +13,7 @@ app::app() : ah::Scheduler() {}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void app::setup() { void app::setup() {
mSys = NULL;
Serial.begin(115200); Serial.begin(115200);
while (!Serial) while (!Serial)
yield(); yield();

View file

@ -60,6 +60,11 @@ class app : public IApp, public ah::Scheduler {
void onWifi(bool gotIp); void onWifi(bool gotIp);
void regularTickers(void); void regularTickers(void);
void handleIntr(void) {
if(NULL != mSys)
mSys->Radio.handleIntr();
}
uint32_t getUptime() { uint32_t getUptime() {
return Scheduler::getUptime(); return Scheduler::getUptime();
} }

View file

@ -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) { 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")); DPRINTLN(DBG_VERBOSE, F("hmRadio.h:setup"));
pinMode(irq, INPUT_PULLUP); pinMode(irq, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(irq), []()IRAM_ATTR{ mIrqRcvd = true; }, FALLING);
uint32_t dtuSn = 0x87654321; uint32_t dtuSn = 0x87654321;
uint32_t chipID = 0; // will be filled with last 3 bytes of MAC uint32_t chipID = 0; // will be filled with last 3 bytes of MAC
@ -166,6 +165,10 @@ class HmRadio {
return true; return true;
} }
void handleIntr(void) {
mIrqRcvd = true;
}
bool isChipConnected(void) { bool isChipConnected(void) {
//DPRINTLN(DBG_VERBOSE, F("hmRadio.h:isChipConnected")); //DPRINTLN(DBG_VERBOSE, F("hmRadio.h:isChipConnected"));
return mNrf24.isChipConnected(); return mNrf24.isChipConnected();

View file

@ -7,11 +7,21 @@
#include "app.h" #include "app.h"
#include "config/config.h" #include "config/config.h"
app myApp; app myApp;
//-----------------------------------------------------------------------------
IRAM_ATTR void handleIntr(void) {
myApp.handleIntr();
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void setup() { void setup() {
myApp.setup(); myApp.setup();
// TODO: move to HmRadio
attachInterrupt(digitalPinToInterrupt(myApp.getIrqPin()), handleIntr, FALLING);
} }

View file

@ -88,7 +88,12 @@ void ahoywifi::tickWifiLoop() {
} }
mCnt++; 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 ")); DBGPRINT(F("scanning APs with SSID "));
DBGPRINTLN(String(mConfig->sys.stationSsid)); DBGPRINTLN(String(mConfig->sys.stationSsid));
mScanCnt = 0; mScanCnt = 0;
@ -100,12 +105,6 @@ void ahoywifi::tickWifiLoop() {
#endif #endif
return; return;
} }
uint8_t timeout = 10; // seconds
if (mStaConn == CONNECTED) // connected but no ip
timeout = 20;
DBGPRINT(F("reconnect in ")); DBGPRINT(F("reconnect in "));
DBGPRINT(String(timeout-mCnt)); DBGPRINT(String(timeout-mCnt));
DBGPRINTLN(F(" seconds")); DBGPRINTLN(F(" seconds"));