BT Watchdog Timer (#1590)
Implement a BLE scan watchdog to bypass the problem related to the BLE scan hang scan_evt timout
This commit is contained in:
1 parent
8ee3da4073
commit
6e8b463213
2 files changed
+18
-2
No files matched your search
+17
-2
@@ -101,6 +101,23 @@ void BTConfig_init() {
|
|||||||
BTConfig.presenceAwayTimer = PresenceAwayTimer;
|
BTConfig.presenceAwayTimer = PresenceAwayTimer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Watchdog, if there was no change of btQueueLengthSum for 5 minutes, restart ESP
|
||||||
|
void btScanWDG() {
|
||||||
|
static unsigned long previousbtQueueLengthSum = 0;
|
||||||
|
static unsigned long lastBtMsgTime = 0;
|
||||||
|
unsigned long now = millis();
|
||||||
|
if (!ProcessLock &&
|
||||||
|
previousbtQueueLengthSum == btQueueLengthSum &&
|
||||||
|
btQueueLengthSum != 0 &&
|
||||||
|
(now - lastBtMsgTime > BTConfig.BLEinterval)) {
|
||||||
|
Log.error(F("BLE Scan watchdog triggered at : %ds" CR), lastBtMsgTime / 1000);
|
||||||
|
ESPRestart();
|
||||||
|
} else {
|
||||||
|
previousbtQueueLengthSum = btQueueLengthSum;
|
||||||
|
lastBtMsgTime = now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
unsigned long timeBetweenConnect = 0;
|
unsigned long timeBetweenConnect = 0;
|
||||||
unsigned long timeBetweenActive = 0;
|
unsigned long timeBetweenActive = 0;
|
||||||
|
|
||||||
@@ -714,7 +731,6 @@ void BLEscan() {
|
|||||||
while (uxQueueMessagesWaiting(BLEQueue)) {
|
while (uxQueueMessagesWaiting(BLEQueue)) {
|
||||||
yield();
|
yield();
|
||||||
}
|
}
|
||||||
disableCore0WDT();
|
|
||||||
Log.notice(F("Scan begin" CR));
|
Log.notice(F("Scan begin" CR));
|
||||||
BLEScan* pBLEScan = BLEDevice::getScan();
|
BLEScan* pBLEScan = BLEDevice::getScan();
|
||||||
MyAdvertisedDeviceCallbacks myCallbacks;
|
MyAdvertisedDeviceCallbacks myCallbacks;
|
||||||
@@ -730,7 +746,6 @@ void BLEscan() {
|
|||||||
BLEScanResults foundDevices = pBLEScan->start(BTConfig.scanDuration / 1000, false);
|
BLEScanResults foundDevices = pBLEScan->start(BTConfig.scanDuration / 1000, false);
|
||||||
scanCount++;
|
scanCount++;
|
||||||
Log.notice(F("Found %d devices, scan number %d end" CR), foundDevices.getCount(), scanCount);
|
Log.notice(F("Found %d devices, scan number %d end" CR), foundDevices.getCount(), scanCount);
|
||||||
enableCore0WDT();
|
|
||||||
Log.trace(F("Process BLE stack free: %u" CR), uxTaskGetStackHighWaterMark(xProcBLETaskHandle));
|
Log.trace(F("Process BLE stack free: %u" CR), uxTaskGetStackHighWaterMark(xProcBLETaskHandle));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1614,6 +1614,7 @@ void loop() {
|
|||||||
stateMeasures();
|
stateMeasures();
|
||||||
# ifdef ZgatewayBT
|
# ifdef ZgatewayBT
|
||||||
stateBTMeasures(false);
|
stateBTMeasures(false);
|
||||||
|
btScanWDG();
|
||||||
# endif
|
# endif
|
||||||
# ifdef ZactuatorONOFF
|
# ifdef ZactuatorONOFF
|
||||||
stateONOFFMeasures();
|
stateONOFFMeasures();
|
||||||
|
|||||||
Reference in new issue
Block a user