From f5e24e5d3382cdee4ecdc9fb0b02666c6a522211 Mon Sep 17 00:00:00 2001 From: Davide Perini Date: Sun, 3 Apr 2022 15:08:33 +0200 Subject: [PATCH] Improv (#24) Added a param `IMPROV_ENABLED` that can be used to specify the numbers of milliseconds where Improv WiFi is active, after that period web server is started. --- library.json | 2 +- library.properties | 2 +- src/BootstrapManager.cpp | 8 ++++---- src/Configuration.h | 3 ++- src/WifiManager.cpp | 23 +++++++++++------------ 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/library.json b/library.json index 5af7577..7eff924 100644 --- a/library.json +++ b/library.json @@ -6,7 +6,7 @@ "type": "git", "url": "https://github.com/sblantipodi/arduino_bootstrapper.git" }, - "version": "1.12.9", + "version": "1.12.10", "examples": "examples/*.cpp", "exclude": "tests", "frameworks": "arduino", diff --git a/library.properties b/library.properties index 501f365..606149f 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Bootstrapper -version=1.12.9 +version=1.12.10 author=Davide Perini maintainer=Davide Perini sentence=A client library for MQTT messaging. diff --git a/src/BootstrapManager.cpp b/src/BootstrapManager.cpp index 04f63e9..6aa0256 100644 --- a/src/BootstrapManager.cpp +++ b/src/BootstrapManager.cpp @@ -53,7 +53,7 @@ void BootstrapManager::bootstrapSetup(void (*manageDisconnections)(), void (*man bool rcpResponseSent = false; void BootstrapManager::bootstrapLoop(void (*manageDisconnections)(), void (*manageQueueSubscription)(), void (*manageHardwareButton)()) { -#if (IMPROV_ENABLED) +#if (IMPROV_ENABLED > 0) if (!rcpResponseSent && wifiManager.isConnected()) { rcpResponseSent = true; wifiManager.sendImprovRPCResponse(0x01, true); @@ -569,13 +569,13 @@ bool BootstrapManager::isWifiConfigured() { // if no ssid available, launch web server to get config params via browser void BootstrapManager::launchWebServerForOTAConfig() { -#if (IMPROV_ENABLED) +#if (IMPROV_ENABLED > 0) unsigned long timeNowStatus = 0; bool switchToWebServer = false; // If WiFi is not configured, handle improv packet for 15 seconds, then switch to settinigs managed by web server WiFi.disconnect(); - while ((WiFi.status() != WL_CONNECTED && !switchToWebServer) || improvePacketReceived) { - if(millis() > timeNowStatus + 15000) { + while (((WiFi.localIP()[0] == 0 && WiFi.status() != WL_CONNECTED) && !switchToWebServer) || improvePacketReceived) { + if(millis() > timeNowStatus + IMPROV_ENABLED) { timeNowStatus = millis(); switchToWebServer = true; } diff --git a/src/Configuration.h b/src/Configuration.h index 8836721..ca194ed 100644 --- a/src/Configuration.h +++ b/src/Configuration.h @@ -59,8 +59,9 @@ extern Adafruit_SSD1306 display; #endif +// Values greater then 0 enables Improv for that milliseconds period #ifndef IMPROV_ENABLED -#define IMPROV_ENABLED false +#define IMPROV_ENABLED 0 #endif // SENSORNAME will be used as device network name diff --git a/src/WifiManager.cpp b/src/WifiManager.cpp index 6b6689a..a722d7d 100644 --- a/src/WifiManager.cpp +++ b/src/WifiManager.cpp @@ -635,11 +635,11 @@ void WifiManager::sendImprovInfoResponse() { //out[8] = 2; //Length (set below) out[9] = ImprovRPCType::Request_Info; //out[10] = 0; //Data len (set below) - out[11] = 4; //Firmware len ("GLOW") - out[12] = 'G'; - out[13] = 'W'; - out[14] = ' '; - out[15] = ' '; + out[11] = 4; //Firmware len ("FIRM") + out[12] = 'F'; + out[13] = 'I'; + out[14] = 'R'; + out[15] = 'M'; uint8_t lengthSum = 17; uint8_t vlen = sprintf_P(out + lengthSum, firmwareVersion.c_str()); out[16] = vlen; @@ -653,8 +653,8 @@ void WifiManager::sendImprovInfoResponse() { #endif out[lengthSum] = hlen; lengthSum += hlen + 1; - //Use serverDescription if it has been changed from the default "GLOW", else mDNS name - bool useMdnsName = (strcmp(serverDescription, "GLOW") == 0 && strlen(cmDNS) > 0); + //Use serverDescription if it has been changed from the default "FIRM", else mDNS name + bool useMdnsName = (strcmp(serverDescription, "FIRM") == 0 && strlen(cmDNS) > 0); strcpy(out + lengthSum + 1, useMdnsName ? cmDNS : serverDescription); uint8_t nlen = strlen(useMdnsName ? cmDNS : serverDescription); out[lengthSum] = nlen; @@ -689,8 +689,8 @@ void WifiManager::parseWiFiCommand(char *rpcData) { sendImprovStateResponse(0x03, false); //provisioning improvActive = 2; DynamicJsonDocument doc(1024); - String devName = String(random(0, 100000)); - doc["deviceName"] = "GLOW_WORM_" + devName; + String devName = String(random(0, 90000)); + doc["deviceName"] = String(DEVICE_NAME) + "_" + devName; doc["microcontrollerIP"] = "DHCP"; doc["qsid"] = clientSSID; doc["qpass"] = clientPass; @@ -726,9 +726,8 @@ void WifiManager::parseWiFiCommand(char *rpcData) { } delay(DELAY_200); #endif - delay(DELAY_2000); sendImprovRPCResponse(ImprovRPCType::Request_State); - delay(DELAY_2000); + delay(DELAY_200); sendImprovStateResponse(0x04, false); delay(DELAY_200); ESP.restart(); @@ -740,10 +739,10 @@ void WifiManager::handleImprovPacket() { uint8_t header[6] = {'I', 'M', 'P', 'R', 'O', 'V'}; bool timeout = false; - uint8_t waitTime = 25; uint16_t packetByte = 0; uint8_t packetLen = 9; uint8_t checksum = 0; + uint8_t waitTime = 25; uint8_t rpcCommandType = 0; char rpcData[128]; rpcData[0] = 0;