From 11da340c62e6808b1d134d293db320d3eb185266 Mon Sep 17 00:00:00 2001 From: Theo Arends <11044339+arendst@users.noreply.github.com> Date: Sat, 6 Jan 2024 21:35:08 +0100 Subject: [PATCH] Revert "Minor fixes" This reverts commit cee219a55f1b375b56b0c7fbce4cc5fbb711f505. --- .../xdrv_121_gpioviewer.ino | 40 +++++++++---------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/tasmota/tasmota_xdrv_driver/xdrv_121_gpioviewer.ino b/tasmota/tasmota_xdrv_driver/xdrv_121_gpioviewer.ino index f89d7e324..e2295044d 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_121_gpioviewer.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_121_gpioviewer.ino @@ -23,10 +23,12 @@ const char *GVRelease = "1.0.5"; #define GV_BASE_URL "https://thelastoutpostworkshop.github.io/microcontroller_devkit/gpio_viewer/assets/" #ifdef ESP32 +const int GVMaxGPIOPins = 49; // Global variables to capture PMW pins const int GVMaxChannels = 64; #endif // ESP32 #ifdef ESP8266 +const int GVMaxGPIOPins = 18; // Global variables to capture PMW pins const int GVMaxChannels = MAX_PWMS; #endif // ESP8266 @@ -47,7 +49,7 @@ const char HTTP_GV_PAGE[] PROGMEM = "var ip='%s';" // WiFi.localIP().toString().c_str() "var source=new EventSource('http://%s:" STR(GV_PORT) "/events');" // WiFi.localIP().toString().c_str() "var sampling_interval='" STR(GV_SAMPLING_INTERVAL) "';" - "var freeSketchSpace='%s';" // GVFormatBytes(ESP_getFreeSketchSpace()).c_str() + "var freeSketchSpace='%d';" // GV.freeRAM "" "" "" @@ -64,13 +66,6 @@ const char HTTP_GV_PAGE[] PROGMEM = "" ""; -const char HTTP_GV_EVENT[] PROGMEM = - "HTTP/1.1 200 OK\n" - "Content-Type: text/event-stream;\n" - "Connection: keep-alive\n" - "Cache-Control: no-cache\n" - "Access-Control-Allow-Origin: *\n\n"; - enum GVPinTypes { digitalPin = 0, PWMPin = 1, @@ -81,12 +76,12 @@ struct { WiFiClient WebClient; ESP8266WebServer *WebServer; int freeHeap; - uint32_t lastPinStates[MAX_GPIO_PIN]; + uint32_t lastPinStates[GVMaxGPIOPins]; int ledcChannelPin[GVMaxChannels][2]; int ledcChannelPinCount; int ledcChannelResolution[GVMaxChannels][2]; int ledcChannelResolutionCount; - bool sse_ready; + bool first; bool active; } GV; @@ -220,7 +215,7 @@ void GVResetStatePins(void) { uint32_t pintype; AddLog(LOG_LEVEL_INFO, "IOV: GPIOViewer Connected, sampling interval is " STR(GV_SAMPLING_INTERVAL) "ms"); - for (int i = 0; i < MAX_GPIO_PIN; i++) { + for (int i = 0; i < GVMaxGPIOPins; i++) { GV.lastPinStates[i] = GVReadGPIO(i, &originalValue, &pintype); } } @@ -242,7 +237,7 @@ void GVMonitorTask(void) { String jsonMessage = "{"; bool hasChanges = false; - for (int i = 0; i < MAX_GPIO_PIN; i++) { + for (int i = 0; i < GVMaxGPIOPins; i++) { int currentState = GVReadGPIO(i, &originalValue, &pintype); if (originalValue != GV.lastPinStates[i]) { @@ -274,43 +269,44 @@ void GVBegin(void) { GVPrintPWNTraps(); GV.WebServer = new ESP8266WebServer(GV_PORT); + +// GV.WebServer->setContentLength(CONTENT_LENGTH_UNKNOWN); // the payload can go on forever + // Set CORS headers for global responses GV.WebServer->sendHeader("Access-Control-Allow-Origin", "*"); GV.WebServer->sendHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); GV.WebServer->sendHeader("Access-Control-Allow-Headers", "Content-Type"); + GV.WebServer->on("/events", GVHandleEvents); GV.WebServer->on("/", GVHandleRoot); GV.WebServer->on("/release", GVHandleRelease); + GV.WebServer->begin(); } void GVHandleEvents(void) { -// if (!GV.sse_ready) { - + if (!GV.first) { GVResetStatePins(); + GV.first = true; GV.WebClient = GV.WebServer->client(); GV.WebClient.setNoDelay(true); // GV.WebClient.setSync(true); GV.WebServer->setContentLength(CONTENT_LENGTH_UNKNOWN); // The payload can go on forever - GV.WebServer->sendContent_P(HTTP_GV_EVENT); - - GV.sse_ready = true; // Ready to -// } + GV.WebServer->sendContent_P(PSTR("HTTP/1.1 200 OK\nContent-Type: text/event-stream;\nConnection: keep-alive\nCache-Control: no-cache\nAccess-Control-Allow-Origin: *\n\n")); + } } void GVHandleRoot(void) { char* content = ext_snprintf_malloc_P(HTTP_GV_PAGE, WiFi.localIP().toString().c_str(), WiFi.localIP().toString().c_str(), - GVFormatBytes(ESP_getFreeSketchSpace()).c_str()); + GVFormatBytes(ESP.getFreeSketchSpace()).c_str()); if (content == nullptr) { return; } // Avoid crash GV.WebServer->send_P(200, "text/html", content); free(content); - - GV.sse_ready = false; // Allow restart on page load } void GVHandleRelease(void) { @@ -332,7 +328,7 @@ bool Xdrv121(uint32_t function) { if (GV.WebServer) { GV.WebServer->handleClient(); } break; case FUNC_EVERY_100_MSECOND: - if (GV.sse_ready) { GVMonitorTask(); } + if (GV.first) { GVMonitorTask(); } break; case FUNC_ACTIVE: result = true;