From 225f4f24d4f2fe5f5134ca8d452290c226f66bff Mon Sep 17 00:00:00 2001 From: Jeff Lehman Date: Thu, 25 Jul 2024 14:46:10 -0500 Subject: [PATCH] Initial commit for node UpdateFDRS branch --- src/fdrs_datatypes.h | 5 +++ src/fdrs_gateway.h | 2 +- src/fdrs_node.h | 56 ++++++++++++++++++++++++++ src/{fdrs_gateway_ota.h => fdrs_ota.h} | 0 4 files changed, 62 insertions(+), 1 deletion(-) rename src/{fdrs_gateway_ota.h => fdrs_ota.h} (100%) diff --git a/src/fdrs_datatypes.h b/src/fdrs_datatypes.h index de759b4c..aa86a677 100644 --- a/src/fdrs_datatypes.h +++ b/src/fdrs_datatypes.h @@ -26,6 +26,11 @@ enum crcResult { CRC_BAD, } returnCRC; +enum FDRSMode { + MODE_NORMAL, + MODE_UPDATE, +}; + enum cmd_t { cmd_clear, cmd_ping, diff --git a/src/fdrs_gateway.h b/src/fdrs_gateway.h index 96df64bf..bf64fc43 100644 --- a/src/fdrs_gateway.h +++ b/src/fdrs_gateway.h @@ -88,8 +88,8 @@ void printFDRS(DataReading*, int); #ifdef USE_WIFI #include "fdrs_gateway_wifi.h" #include "fdrs_gateway_mqtt.h" -#include "fdrs_gateway_ota.h" #endif +#include "fdrs_ota.h" #ifdef DEBUG_CONFIG #include "fdrs_checkConfig.h" diff --git a/src/fdrs_node.h b/src/fdrs_node.h index 7bcc212b..a1dec7d8 100644 --- a/src/fdrs_node.h +++ b/src/fdrs_node.h @@ -20,6 +20,7 @@ uint8_t incMAC[6]; DataReading fdrsData[espnow_size]; DataReading incData[espnow_size]; TimeSource timeSource; +FDRSMode fdrsMode = MODE_NORMAL; uint8_t data_count = 0; @@ -429,6 +430,61 @@ bool reqTimeFDRS() { #endif } +// goes into Update Mode where new software can be uploaded +bool updateFDRS() { + bool backToSta = false; + + fdrsMode = MODE_UPDATE; + DBG("Update Mode."); + + // Finish any async operations +#ifdef USE_LORA + unsigned long timeout = millis() + 1000; + while(millis() < timeout && !isLoRaAsyncComplete()) { + handleLoRa(); + handleTime(); + yield(); + } +#endif // USE_LORA + + if(WiFi.getMode() == WIFI_MODE_STA) { + WiFi.mode(WIFI_MODE_APSTA); + backToSta = true; + } + else { + WiFi.mode(WIFI_MODE_AP); + } + + WiFi.softAP("fdrs", "fdrs1234"); + // print IP address + DBG("IP: " + WiFi.softAPIP().toString()); + // WiFi.softAPConfig(); + // start OTA listening for x minutes + begin_OTA(); + unsigned long timeout = (1000 * 60 * 5); // 5 minutes + DBG("Mode time out in " + String(timeout/1000) + " seconds."); // x seconds remaining + timeout += millis(); + // timeout after x minutes + while(millis() < timeout) { + handleOTA(); + handleTime(); + yield(); + if((timeout - millis()) % (60 * 1000) == 0) { + DBG("Mode time out in " + String((timeout - millis())/1000) + " seconds."); // x seconds remaining + } + + } + if(backToSta) { + WiFi.mode(WIFI_MODE_STA); + } + else { + WiFi.mode(WIFI_MODE_NULL); + } + fdrsMode = MODE_NORMAL; + DBG("Leaving Update Mode."); + return false; +} + // Skeleton Functions related to function calls to files that are not included #ifndef USE_LORA void sendTimeLoRa() {} diff --git a/src/fdrs_gateway_ota.h b/src/fdrs_ota.h similarity index 100% rename from src/fdrs_gateway_ota.h rename to src/fdrs_ota.h