diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ec5020d..2c30049 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,6 +24,7 @@ jobs: run: | python -m pip install --upgrade pip pip install --upgrade platformio + pio platform update pio run -t clean - name: Set env run: echo "PLATFORMIO_BUILD_FLAGS=-DVERSION='\"${GITHUB_REF#refs/*/}\"'" >> $GITHUB_ENV diff --git a/platformio.ini b/platformio.ini index 1b3c839..51d20c4 100644 --- a/platformio.ini +++ b/platformio.ini @@ -13,7 +13,6 @@ default_envs = esp32 [env:esp32] platform = espressif32 -platform_packages = framework-arduinoespressif32 @ https://github.com/DTTerastar/arduino-esp32.git#follow-redirects-http-update framework = arduino board = esp32dev lib_deps = @@ -31,7 +30,6 @@ build_flags = [env:m5stickc] platform = espressif32 -platform_packages = framework-arduinoespressif32 @ https://github.com/DTTerastar/arduino-esp32.git#follow-redirects-http-update framework = arduino board = m5stick-c lib_deps = @@ -51,7 +49,6 @@ build_flags = [env:m5stickc-plus] platform = espressif32 -platform_packages = framework-arduinoespressif32 @ https://github.com/DTTerastar/arduino-esp32.git#follow-redirects-http-update framework = arduino board = m5stick-c lib_deps = @@ -71,7 +68,6 @@ build_flags = [env:m5atom-matrix] platform = espressif32 -platform_packages = framework-arduinoespressif32 @ https://github.com/DTTerastar/arduino-esp32.git#follow-redirects-http-update framework = arduino board = m5stack-atom lib_deps = @@ -91,7 +87,6 @@ build_flags = [env:verbose] platform = espressif32 -platform_packages = framework-arduinoespressif32 @ https://github.com/DTTerastar/arduino-esp32.git#follow-redirects-http-update framework = arduino board = m5stick-c lib_deps = diff --git a/src/main.cpp b/src/main.cpp index d96b09f..2146753 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,23 +10,6 @@ BleFingerprint *getFingerprintInternal(BLEAdvertisedDevice *advertisedDevice) return *it; } - if (fingerprints.size() >= MAX_MAC_ADDRESSES) - { - long oldestTime = LONG_MAX; - BleFingerprint *oldest; - for (auto it = fingerprints.begin(); it != fingerprints.end(); ++it) - { - long time = (*it)->getLastSeen(); - if (time < oldestTime) - { - oldestTime = time; - oldest = (*it); - } - } - fingerprints.remove(oldest); - delete oldest; - } - auto created = new BleFingerprint(advertisedDevice); auto it2 = std::find_if(fingerprints.begin(), fingerprints.end(), [created](BleFingerprint *f) { return f->getId() == created->getId(); }); if (it2 != fingerprints.end()) @@ -163,11 +146,10 @@ void onMqttDisconnect(AsyncMqttClientDisconnectReason reason) void reconnect(TimerHandle_t xTimer) { - if (updateInProgress) - return; + Serial.println("Reconnecting..."); - if (WiFi.isConnected() && mqttClient.connected()) - return; + if (updateInProgress) return; + if (WiFi.isConnected() && mqttClient.connected()) return; if (reconnectTries++ > 10) { @@ -184,7 +166,7 @@ void reconnect(TimerHandle_t xTimer) void connectToMqtt() { - reconnectTimer = xTimerCreate("reconnectionTimer", pdMS_TO_TICKS(15000), pdTRUE, (void *)0, reconnect); + reconnectTimer = xTimerCreate("reconnectionTimer", pdMS_TO_TICKS(3000), pdTRUE, (void *)0, reconnect); Serial.printf("Connecting to MQTT %s %d\n", mqttHost.c_str(), mqttPort); mqttClient.onConnect(onMqttConnect); mqttClient.onDisconnect(onMqttDisconnect); @@ -276,6 +258,7 @@ void scanForDevices(void *parameter) if (xSemaphoreTake(fingerprintSemaphore, 1000) != pdTRUE) log_e("Couldn't take semaphore!"); + cleanupOldFingerprints(); std::list seen(fingerprints); if (xSemaphoreGive(fingerprintSemaphore) != pdTRUE) log_e("Couldn't give semaphore!"); @@ -290,45 +273,6 @@ void scanForDevices(void *parameter) } } -void spiffsInit() -{ - int ledState = HIGH; - digitalWrite(LED_BUILTIN, ledState); - -#ifdef BUTTON - - pinMode(BUTTON, INPUT); - int flashes = 0; - unsigned long debounceDelay = 250; - - long lastDebounceTime = millis(); - while (digitalRead(BUTTON) == BUTTON_PRESSED) - { - if ((millis() - lastDebounceTime) > debounceDelay) - { - ledState = !ledState; - digitalWrite(LED_BUILTIN, ledState); - lastDebounceTime = millis(); - flashes++; - - if (flashes > 10) - { - Serial.println(F("Resetting back to defaults...")); - digitalWrite(LED_BUILTIN, 1); - SPIFFS.format(); - SPIFFS.begin(true); - digitalWrite(LED_BUILTIN, 0); - - return; - } - } - } - -#endif - - SPIFFS.begin(true); -} - void setup() { pinMode(LED_BUILTIN, OUTPUT); @@ -354,10 +298,6 @@ void setup() void loop() { - TIMERG0.wdt_wprotect = TIMG_WDT_WKEY_VALUE; - TIMERG0.wdt_feed = 1; - TIMERG0.wdt_wprotect = 0; - ArduinoOTA.handle(); firmwareUpdate(); } diff --git a/src/main.h b/src/main.h index 04b5609..3ee1e32 100644 --- a/src/main.h +++ b/src/main.h @@ -1,39 +1,26 @@ -#include #include - -#include -extern "C" -{ -#include "freertos/FreeRTOS.h" -#include "freertos/timers.h" -} -#include "soc/timer_group_struct.h" -#include "soc/timer_group_reg.h" - -#include - -#include #include #include -#include +#include +#include #include -#include - -#include -#include -#include - -#include +#include #include -#include "NimBLEEddystoneURL.h" -#include "NimBLEEddystoneTLM.h" -#include "NimBLEBeacon.h" - -#include - -#include "Settings.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include "BleFingerprint.h" +#include "Settings.h" #ifdef M5STICK #ifdef PLUS @@ -215,3 +202,64 @@ void firmwareUpdate() updateInProgress = false; #endif } + +void spiffsInit() +{ + int ledState = HIGH; + digitalWrite(LED_BUILTIN, ledState); + +#ifdef BUTTON + + pinMode(BUTTON, INPUT); + int flashes = 0; + unsigned long debounceDelay = 250; + + long lastDebounceTime = millis(); + while (digitalRead(BUTTON) == BUTTON_PRESSED) + { + if ((millis() - lastDebounceTime) > debounceDelay) + { + ledState = !ledState; + digitalWrite(LED_BUILTIN, ledState); + lastDebounceTime = millis(); + flashes++; + + if (flashes > 10) + { + Serial.println(F("Resetting back to defaults...")); + digitalWrite(LED_BUILTIN, 1); + SPIFFS.format(); + SPIFFS.begin(true); + digitalWrite(LED_BUILTIN, 0); + + return; + } + } + } + +#endif + + SPIFFS.begin(true); +} + +void cleanupOldFingerprints() +{ + if (fingerprints.size() < MAX_MAC_ADDRESSES) + return; + + long oldestTime = LONG_MAX; + BleFingerprint *oldest = nullptr; + for (auto it = fingerprints.begin(); it != fingerprints.end(); ++it) + { + long time = (*it)->getLastSeen(); + if (time < oldestTime) + { + oldestTime = time; + oldest = (*it); + } + } + if (oldest == nullptr) return; + + fingerprints.remove(oldest); + delete oldest; +}