1
0
mirror of https://github.com/s00500/ESPUI.git synced 2025-07-05 07:50:19 +00:00
This commit is contained in:
Nikola Kirov
2023-12-13 09:27:21 +02:00
parent ab46429b3c
commit fe75655ecc
11 changed files with 295 additions and 447 deletions

View File

@ -5,7 +5,11 @@
#include <ESPAsyncWebServer.h>
#include "dataControlsJS.h"
#ifndef ESPU_DISABLE_GRAPH
#include "dataGraphJS.h"
#endif
#include "dataIndexHTML.h"
#include "dataNormalizeCSS.h"
#include "dataSliderJS.h"
@ -17,6 +21,14 @@
#include <umm_malloc/umm_heap_select.h>
#endif
#if defined(DEBUG) && defined(ESPU_DEBUG)
#define ESPU_DBG(arg) Serial.print(arg)
#define ESPU_DBGL(arg) Serial.println(arg)
#else
#define ESPU_DBG(arg)
#define ESPU_DBGL(arg)
#endif
static String heapInfo(const __FlashStringHelper* mode)
{
String result;
@ -72,7 +84,7 @@ void listDir(const char* dirname, uint8_t levels)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.printf_P(PSTR("Listing directory: %s\n"), dirname);
ESPU_DBGf_P(PSTR("Listing directory: %s\n"), dirname);
}
#endif
@ -91,7 +103,7 @@ void listDir(const char* dirname, uint8_t levels)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.println(F("Failed to open directory"));
ESPU_DBGL(F("Failed to open directory"));
}
#endif
@ -103,7 +115,7 @@ void listDir(const char* dirname, uint8_t levels)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.println(F("Not a directory"));
ESPU_DBGL(F("Not a directory"));
}
#endif
@ -119,8 +131,8 @@ void listDir(const char* dirname, uint8_t levels)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.print(F(" DIR : "));
Serial.println(file.name());
ESPU_DBG(F(" DIR : "));
ESPU_DBGL(file.name());
}
#endif
@ -138,10 +150,10 @@ void listDir(const char* dirname, uint8_t levels)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.print(F(" FILE: "));
Serial.print(file.name());
Serial.print(F(" SIZE: "));
Serial.println(file.size());
ESPU_DBG(F(" FILE: "));
ESPU_DBG(file.name());
ESPU_DBG(F(" SIZE: "));
ESPU_DBGL(file.size());
}
#endif
}
@ -156,7 +168,7 @@ void listDir(const char* dirname, uint8_t levels)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.printf_P(PSTR("Listing directory: %s\n"), dirname);
ESPU_DBGf_P(PSTR("Listing directory: %s\n"), dirname);
}
#endif
@ -169,8 +181,8 @@ void listDir(const char* dirname, uint8_t levels)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.print(F(" DIR : "));
Serial.println(dir.fileName());
ESPU_DBG(F(" DIR : "));
ESPU_DBGL(dir.fileName());
}
#endif
if (levels)
@ -185,10 +197,10 @@ void listDir(const char* dirname, uint8_t levels)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.print(F(" FILE: "));
Serial.print(dir.fileName());
Serial.print(F(" SIZE: "));
Serial.println(dir.fileSize());
ESPU_DBG(F(" FILE: "));
ESPU_DBG(dir.fileName());
ESPU_DBG(F(" SIZE: "));
ESPU_DBGL(dir.fileSize());
}
#endif
}
@ -206,13 +218,13 @@ void ESPUIClass::list()
if (!LITTLEFS.begin())
#endif
{
Serial.println(F("LITTLEFS Mount Failed"));
ESPU_DBGL(F("LITTLEFS Mount Failed"));
return;
}
#else
if (!LittleFS.begin())
{
Serial.println(F("LittleFS Mount Failed"));
ESPU_DBG(F("LittleFS Mount Failed"));
return;
}
#endif
@ -220,27 +232,27 @@ void ESPUIClass::list()
listDir("/", 1);
#if defined(ESP32)
Serial.print(F("Total KB: "));
ESPU_DBG(F("Total KB: "));
#if (ESP_IDF_VERSION_MAJOR == 4 && ESP_IDF_VERSION_MINOR >= 4) || ESP_IDF_VERSION_MAJOR > 4
Serial.println(LittleFS.totalBytes() / 1024);
ESPU_DBGL(LittleFS.totalBytes() / 1024);
#else
Serial.println(LITTLEFS.totalBytes() / 1024);
ESPU_DBGL(LITTLEFS.totalBytes() / 1024);
#endif
Serial.print(F("Used KB: "));
ESPU_DBG(F("Used KB: "));
#if (ESP_IDF_VERSION_MAJOR == 4 && ESP_IDF_VERSION_MINOR >= 4) || ESP_IDF_VERSION_MAJOR > 4
Serial.println(LittleFS.usedBytes() / 1024);
ESPU_DBGL(LittleFS.usedBytes() / 1024);
#else
Serial.println(LITTLEFS.usedBytes() / 1024);
ESPU_DBGL(LITTLEFS.usedBytes() / 1024);
#endif
#else
FSInfo fs_info;
LittleFS.info(fs_info);
Serial.print(F("Total KB: "));
Serial.println(fs_info.totalBytes / 1024);
Serial.print(F("Used KB: "));
Serial.println(fs_info.usedBytes / 1024);
ESPU_DBG(F("Total KB: "));
ESPU_DBGL(fs_info.totalBytes / 1024);
ESPU_DBG(F("Used KB: "));
ESPU_DBGL(fs_info.usedBytes / 1024);
#endif
}
@ -261,7 +273,7 @@ void deleteFile(const char* path)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.printf_P(PSTR("File: %s does not exist, not deleting\n"), path);
ESPU_DBGf_P(PSTR("File: %s does not exist, not deleting\n"), path);
}
#endif
@ -271,7 +283,7 @@ void deleteFile(const char* path)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.printf_P(PSTR("Deleting file: %s\n"), path);
ESPU_DBGf_P(PSTR("Deleting file: %s\n"), path);
}
#endif
@ -289,7 +301,7 @@ void deleteFile(const char* path)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.println(F("File deleted"));
ESPU_DBGL(F("File deleted"));
}
#endif
}
@ -298,7 +310,7 @@ void deleteFile(const char* path)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.println(F("Delete failed"));
ESPU_DBGL(F("Delete failed"));
}
#endif
}
@ -309,7 +321,7 @@ void writeFile(const char* path, const char* data)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.printf_P(PSTR("Writing file: %s\n"), path);
ESPU_DBGf_P(PSTR("Writing file: %s\n"), path);
}
#endif
@ -327,7 +339,7 @@ void writeFile(const char* path, const char* data)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.println(F("Failed to open file for writing"));
ESPU_DBGL(F("Failed to open file for writing"));
}
#endif
@ -341,7 +353,7 @@ void writeFile(const char* path, const char* data)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.println(F("File written"));
ESPU_DBGL(F("File written"));
}
#endif
}
@ -350,7 +362,7 @@ void writeFile(const char* path, const char* data)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.println(F("Write failed"));
ESPU_DBGL(F("Write failed"));
}
#endif
}
@ -362,7 +374,7 @@ void writeFile(const char* path, const char* data)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.println(F("File written"));
ESPU_DBGL(F("File written"));
}
#endif
}
@ -371,7 +383,7 @@ void writeFile(const char* path, const char* data)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.println(F("Write failed"));
ESPU_DBGL(F("Write failed"));
}
#endif
}
@ -389,7 +401,7 @@ void ESPUIClass::prepareFileSystem(bool format)
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.println(F("About to prepare filesystem..."));
ESPU_DBGL(F("About to prepare filesystem..."));
}
#endif
@ -409,7 +421,7 @@ void ESPUIClass::prepareFileSystem(bool format)
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.println(F("LittleFS Format Failed"));
ESPU_DBGL(F("LittleFS Format Failed"));
}
#endif
return;
@ -425,7 +437,7 @@ void ESPUIClass::prepareFileSystem(bool format)
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.println(F("LittleFS Formatted"));
ESPU_DBGL(F("LittleFS Formatted"));
}
#endif
}
@ -434,7 +446,7 @@ void ESPUIClass::prepareFileSystem(bool format)
if (verbosity)
{
listDir("/", 1);
Serial.println(F("LittleFS Mount ESP32 Done"));
ESPU_DBGL(F("LittleFS Mount ESP32 Done"));
}
#endif
@ -447,7 +459,7 @@ void ESPUIClass::prepareFileSystem(bool format)
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.println(F("LittleFS Formatted"));
ESPU_DBGL(F("LittleFS Formatted"));
}
#endif
}
@ -456,7 +468,7 @@ void ESPUIClass::prepareFileSystem(bool format)
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.println(F("LittleFS Mount Failed"));
ESPU_DBGL(F("LittleFS Mount Failed"));
}
#endif
return;
@ -468,7 +480,7 @@ void ESPUIClass::prepareFileSystem(bool format)
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.println(F("LittleFS Formatted"));
ESPU_DBGL(F("LittleFS Formatted"));
}
#endif
}
@ -477,7 +489,7 @@ void ESPUIClass::prepareFileSystem(bool format)
if (verbosity)
{
listDir("/", 1);
Serial.println(F("LittleFS Mount ESP8266 Done"));
ESPU_DBGL(F("LittleFS Mount ESP8266 Done"));
}
#endif
@ -491,13 +503,15 @@ void ESPUIClass::prepareFileSystem(bool format)
deleteFile("/js/zepto.min.js");
deleteFile("/js/controls.js");
deleteFile("/js/slider.js");
#ifndef ESPU_DISABLE_GRAPH
deleteFile("/js/graph.js");
#endif
deleteFile("/js/tabbedcontent.js");
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.println(F("Cleanup done"));
ESPU_DBGL(F("Cleanup done"));
}
#endif
@ -512,8 +526,9 @@ void ESPUIClass::prepareFileSystem(bool format)
writeFile("/js/zepto.min.js", JS_ZEPTO);
writeFile("/js/controls.js", JS_CONTROLS);
writeFile("/js/slider.js", JS_SLIDER);
#ifndef ESPU_DISABLE_GRAPH
writeFile("/js/graph.js", JS_GRAPH);
#endif
writeFile("/js/tabbedcontent.js", JS_TABBEDCONTENT);
#else
writeFile("/index.htm", HTML_INDEX);
@ -524,8 +539,9 @@ void ESPUIClass::prepareFileSystem(bool format)
writeFile("/js/zepto.min.js", JS_ZEPTO);
writeFile("/js/controls.js", JS_CONTROLS);
writeFile("/js/slider.js", JS_SLIDER);
#ifndef ESPU_DISABLE_GRAPH
writeFile("/js/graph.js", JS_GRAPH);
#endif
writeFile("/js/tabbedcontent.js", JS_TABBEDCONTENT);
#endif
#else
@ -537,15 +553,16 @@ void ESPUIClass::prepareFileSystem(bool format)
writeFile("/js/zepto.min.js", JS_ZEPTO);
writeFile("/js/controls.js", JS_CONTROLS);
writeFile("/js/slider.js", JS_SLIDER);
writeFile("/js/graph.js", JS_GRAPH);
#ifndef ESPU_DISABLE_GRAPH
writeFile("/js/graph.js", JS_GRAPH);
#endif
writeFile("/js/tabbedcontent.js", JS_TABBEDCONTENT);
#endif
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.println(F("Done Initializing filesystem :-)"));
ESPU_DBGL(F("Done Initializing filesystem :-)"));
}
#endif
@ -575,7 +592,7 @@ void ESPUIClass::prepareFileSystem(bool format)
void ESPUIClass::onWsEvent(
AsyncWebSocket* server, AsyncWebSocketClient* client, AwsEventType type, void* arg, uint8_t* data, size_t len)
{
// Serial.println(String("ESPUIClass::OnWsEvent: type: ") + String(type));
// ESPU_DBGL(String("ESPUIClass::OnWsEvent: type: ") + String(type));
RemoveToBeDeletedControls();
if (WS_EVT_DISCONNECT == type)
@ -583,13 +600,13 @@ void ESPUIClass::onWsEvent(
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.println(F("WS_EVT_DISCONNECT"));
ESPU_DBGL(F("WS_EVT_DISCONNECT"));
}
#endif
if (MapOfClients.end() != MapOfClients.find(client->id()))
{
// Serial.println("Delete client.");
// ESPU_DBGL("Delete client.");
delete MapOfClients[client->id()];
MapOfClients.erase(client->id());
}
@ -598,13 +615,13 @@ void ESPUIClass::onWsEvent(
{
if (MapOfClients.end() == MapOfClients.find(client->id()))
{
// Serial.println("ESPUIClass::OnWsEvent:Create new client.");
// ESPU_DBGL("ESPUIClass::OnWsEvent:Create new client.");
MapOfClients[client->id()] = new ESPUIclient(client);
}
if(MapOfClients[client->id()]->onWsEvent(type, arg, data, len))
{
// Serial.println("ESPUIClass::OnWsEvent:notify the clients that they need to be updated.");
// ESPU_DBGL("ESPUIClass::OnWsEvent:notify the clients that they need to be updated.");
NotifyClients(ESPUIclient::UpdateNeeded);
}
}
@ -702,7 +719,7 @@ bool ESPUIClass::removeControl(uint16_t id, bool force_rebuild_ui)
#ifdef DEBUG_ESPUI
else
{
// Serial.println(String("Could not Remove Control ") + String(id));
// ESPU_DBGL(String("Could not Remove Control ") + String(id));
}
#endif // def DEBUG_ESPUI
@ -919,7 +936,7 @@ void ESPUIClass::setEnabled(uint16_t id, bool enabled, int clientId)
Control* control = getControl(id);
if (control)
{
// Serial.println(String("CreateAllowed: id: ") + String(clientId) + " State: " + String(enabled));
// ESPU_DBGL(String("CreateAllowed: id: ") + String(clientId) + " State: " + String(enabled));
control->enabled = enabled;
updateControl(control, clientId);
}
@ -943,7 +960,7 @@ void ESPUIClass::updateControl(uint16_t id, int clientId)
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.printf_P(PSTR("Error: Update Control: There is no control with ID %d\n"), id);
ESPU_DBGf_P(PSTR("Error: Update Control: There is no control with ID %d\n"), id);
}
#endif
return;
@ -972,7 +989,7 @@ void ESPUIClass::updateControlValue(uint16_t id, const String& value, int client
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.printf_P(PSTR("Error: updateControlValue Control: There is no control with ID %d\n"), id);
ESPU_DBGf_P(PSTR("Error: updateControlValue Control: There is no control with ID %d\n"), id);
}
#endif
return;
@ -993,7 +1010,7 @@ void ESPUIClass::updateControlLabel(Control* control, const char* value, int cli
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.printf_P(PSTR("Error: updateControlLabel Control: There is no control with the requested ID \n"));
ESPU_DBGf_P(PSTR("Error: updateControlLabel Control: There is no control with the requested ID \n"));
}
#endif
return;
@ -1146,7 +1163,7 @@ void ESPUIClass::jsonReload()
{
for (auto& CurrentClient : MapOfClients)
{
// Serial.println("Requesting Reload");
// ESPU_DBGL("Requesting Reload");
CurrentClient.second->NotifyClient(ClientUpdateType_t::ReloadNeeded);
}
}
@ -1189,7 +1206,7 @@ void ESPUIClass::beginLITTLEFS(const char* _title, const char* username, const c
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.println(F("LITTLEFS Mount Failed, PLEASE CHECK THE README ON HOW TO "
ESPU_DBGL(F("LITTLEFS Mount Failed, PLEASE CHECK THE README ON HOW TO "
"PREPARE YOUR ESP!!!!!!!"));
}
#endif
@ -1218,7 +1235,7 @@ void ESPUIClass::beginLITTLEFS(const char* _title, const char* username, const c
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.println(F("Please read the README!!!!!!!, Make sure to "
ESPU_DBGL(F("Please read the README!!!!!!!, Make sure to "
"prepareFileSystem() once in an empty sketch"));
}
#endif
@ -1285,7 +1302,7 @@ void ESPUIClass::beginLITTLEFS(const char* _title, const char* username, const c
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.println(F("UI Initialized"));
ESPU_DBGL(F("UI Initialized"));
}
#endif
}
@ -1365,17 +1382,18 @@ void ESPUIClass::begin(const char* _title, const char* username, const char* pas
request->send(response);
});
#ifndef ESPU_DISABLE_GRAPH
server->on("/js/graph.js", HTTP_GET, [](AsyncWebServerRequest* request) {
if (ESPUI.basicAuth && !request->authenticate(ESPUI.basicAuthUsername, ESPUI.basicAuthPassword))
{
return request->requestAuthentication();
}
AsyncWebServerResponse* response
= request->beginResponse_P(200, "application/javascript", JS_GRAPH_GZIP, sizeof(JS_GRAPH_GZIP));
response->addHeader("Content-Encoding", "gzip");
request->send(response);
});
#endif
server->on("/js/tabbedcontent.js", HTTP_GET, [](AsyncWebServerRequest* request) {
if (ESPUI.basicAuth && !request->authenticate(ESPUI.basicAuthUsername, ESPUI.basicAuthPassword))
@ -1445,7 +1463,7 @@ void ESPUIClass::begin(const char* _title, const char* username, const char* pas
#if defined(DEBUG_ESPUI)
if (verbosity)
{
Serial.println(F("UI Initialized"));
ESPU_DBGL(F("UI Initialized"));
}
#endif
}

View File

@ -2,6 +2,15 @@
#include "ESPUIclient.h"
#include "ESPUIcontrol.h"
#if defined(DEBUG) && defined(ESPU_DEBUG)
#define ESPU_DBG(arg) Serial.print(arg)
#define ESPU_DBGL(arg) Serial.println(arg)
#else
#define ESPU_DBG(arg)
#define ESPU_DBGL(arg)
#endif
// JSONSlave:
// helper to process exact JSON serialization size
// it takes ~2ms on esp8266 and avoid large String reallocation which is really worth the cost
@ -100,7 +109,7 @@ bool ESPUIclient::SendClientNotification(ClientUpdateType_t value)
{
if(!CanSend())
{
// Serial.println(F("ESPUIclient::SendClientNotification:CannotSend"));
// ESPU_DBGL(F("ESPUIclient::SendClientNotification:CannotSend"));
break;
}
@ -108,13 +117,13 @@ bool ESPUIclient::SendClientNotification(ClientUpdateType_t value)
FillInHeader(document);
if(ClientUpdateType_t::ReloadNeeded == value)
{
// Serial.println(F("ESPUIclient::SendClientNotification:set type to reload"));
// ESPU_DBGL(F("ESPUIclient::SendClientNotification:set type to reload"));
document["type"] = int(UI_RELOAD);
}
// dont send any controls
Response = SendJsonDocToWebSocket(document);
// Serial.println(String("ESPUIclient::SendClientNotification:NotificationSent:Response: ") + String(Response));
// ESPU_DBGL(String("ESPUIclient::SendClientNotification:NotificationSent:Response: ") + String(Response));
} while (false);
return Response;
@ -130,7 +139,7 @@ void ESPUIclient::NotifyClient(ClientUpdateType_t newState)
bool ESPUIclient::onWsEvent(AwsEventType type, void* arg, uint8_t* data, size_t len)
{
bool Response = false;
// Serial.println(String("ESPUIclient::OnWsEvent: type: ") + String(type));
// ESPU_DBGL(String("ESPUIclient::OnWsEvent: type: ") + String(type));
switch (type)
{
@ -139,7 +148,7 @@ bool ESPUIclient::onWsEvent(AwsEventType type, void* arg, uint8_t* data, size_t
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.println(F("ESPUIclient::OnWsEvent:WS_EVT_PONG"));
ESPU_DBGL(F("ESPUIclient::OnWsEvent:WS_EVT_PONG"));
}
#endif
break;
@ -150,7 +159,7 @@ bool ESPUIclient::onWsEvent(AwsEventType type, void* arg, uint8_t* data, size_t
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.println(F("ESPUIclient::OnWsEvent:WS_EVT_ERROR"));
ESPU_DBGL(F("ESPUIclient::OnWsEvent:WS_EVT_ERROR"));
}
#endif
break;
@ -161,19 +170,19 @@ bool ESPUIclient::onWsEvent(AwsEventType type, void* arg, uint8_t* data, size_t
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.println(F("ESPUIclient::OnWsEvent:WS_EVT_CONNECT"));
Serial.println(client->id());
ESPU_DBGL(F("ESPUIclient::OnWsEvent:WS_EVT_CONNECT"));
ESPU_DBGL(client->id());
}
#endif
// Serial.println("ESPUIclient:onWsEvent:WS_EVT_CONNECT: Call NotifyClient: RebuildNeeded");
// ESPU_DBGL("ESPUIclient:onWsEvent:WS_EVT_CONNECT: Call NotifyClient: RebuildNeeded");
NotifyClient(ClientUpdateType_t::RebuildNeeded);
break;
}
case WS_EVT_DATA:
{
// Serial.println(F("ESPUIclient::OnWsEvent:WS_EVT_DATA"));
// ESPU_DBGL(F("ESPUIclient::OnWsEvent:WS_EVT_DATA"));
String msg = "";
msg.reserve(len + 1);
@ -189,50 +198,50 @@ bool ESPUIclient::onWsEvent(AwsEventType type, void* arg, uint8_t* data, size_t
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity >= Verbosity::VerboseJSON)
{
Serial.println(String(F(" WS msg: ")) + msg);
Serial.println(String(F(" WS cmd: ")) + cmd);
Serial.println(String(F(" WS id: ")) + String(id));
Serial.println(String(F("WS value: ")) + String(value));
ESPU_DBGL(String(F(" WS msg: ")) + msg);
ESPU_DBGL(String(F(" WS cmd: ")) + cmd);
ESPU_DBGL(String(F(" WS id: ")) + String(id));
ESPU_DBGL(String(F("WS value: ")) + String(value));
}
#endif
if (cmd.equals(F("uiok")))
{
// Serial.println(String(F("ESPUIclient::OnWsEvent:WS_EVT_DATA:uiok:ProcessAck:")) + pCurrentFsmState->GetStateName());
// ESPU_DBGL(String(F("ESPUIclient::OnWsEvent:WS_EVT_DATA:uiok:ProcessAck:")) + pCurrentFsmState->GetStateName());
pCurrentFsmState->ProcessAck(id, emptyString);
break;
}
if (cmd.equals(F("uifragmentok")))
{
// Serial.println(String(F("ESPUIclient::OnWsEvent:WS_EVT_DATA:uiok:uifragmentok:")) + pCurrentFsmState->GetStateName() + ":ProcessAck");
// ESPU_DBGL(String(F("ESPUIclient::OnWsEvent:WS_EVT_DATA:uiok:uifragmentok:")) + pCurrentFsmState->GetStateName() + ":ProcessAck");
if(!emptyString.equals(value))
{
// Serial.println(String(F("ESPUIclient::OnWsEvent:WS_EVT_DATA:uiok:uifragmentok:")) + pCurrentFsmState->GetStateName() + ":ProcessAck:value:'" + value + "'");
// ESPU_DBGL(String(F("ESPUIclient::OnWsEvent:WS_EVT_DATA:uiok:uifragmentok:")) + pCurrentFsmState->GetStateName() + ":ProcessAck:value:'" + value + "'");
pCurrentFsmState->ProcessAck(uint16_t(-1), value);
}
else
{
Serial.println(F("ERROR:ESPUIclient::OnWsEvent:WS_EVT_DATA:uifragmentok:ProcessAck:Fragment Header is missing"));
ESPU_DBGL(F("ERROR:ESPUIclient::OnWsEvent:WS_EVT_DATA:uifragmentok:ProcessAck:Fragment Header is missing"));
}
break;
}
if (cmd.equals(F("uiuok")))
{
// Serial.println(F("WS_EVT_DATA: uiuok. Unlock new async notifications"));
// ESPU_DBGL(F("WS_EVT_DATA: uiuok. Unlock new async notifications"));
break;
}
// Serial.println(F("WS_EVT_DATA:Process Control"));
// ESPU_DBGL(F("WS_EVT_DATA:Process Control"));
Control* control = ESPUI.getControl(id);
if (nullptr == control)
{
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity)
{
Serial.println(String(F("No control found for ID ")) + String(id));
ESPU_DBGL(String(F("No control found for ID ")) + String(id));
}
#endif
break;
@ -245,7 +254,7 @@ bool ESPUIclient::onWsEvent(AwsEventType type, void* arg, uint8_t* data, size_t
default:
{
// Serial.println(F("ESPUIclient::OnWsEvent:default"));
// ESPU_DBGL(F("ESPUIclient::OnWsEvent:default"));
break;
}
} // end switch
@ -267,7 +276,7 @@ uint32_t ESPUIclient::prepareJSONChunk(uint16_t startindex,
xSemaphoreTake(ESPUI.ControlsSemaphore, portMAX_DELAY);
#endif // def ESP32
// Serial.println(String("prepareJSONChunk: Start. InUpdateMode: ") + String(InUpdateMode));
// ESPU_DBGL(String("prepareJSONChunk: Start. InUpdateMode: ") + String(InUpdateMode));
int elementcount = 0;
do // once
@ -281,10 +290,10 @@ uint32_t ESPUIclient::prepareJSONChunk(uint16_t startindex,
if(!emptyString.equals(FragmentRequestString))
{
// Serial.println(F("prepareJSONChunk:Fragmentation:Got Header (1)"));
// Serial.println(String("prepareJSONChunk:startindex: ") + String(startindex));
// Serial.println(String("prepareJSONChunk:currentIndex: ") + String(currentIndex));
// Serial.println(String("prepareJSONChunk:FragmentRequestString: '") + FragmentRequestString + "'");
// ESPU_DBGL(F("prepareJSONChunk:Fragmentation:Got Header (1)"));
// ESPU_DBGL(String("prepareJSONChunk:startindex: ") + String(startindex));
// ESPU_DBGL(String("prepareJSONChunk:currentIndex: ") + String(currentIndex));
// ESPU_DBGL(String("prepareJSONChunk:FragmentRequestString: '") + FragmentRequestString + "'");
// this is actually a fragment or directed update request
// parse the string we got from the UI and try to update that specific
@ -292,38 +301,38 @@ uint32_t ESPUIclient::prepareJSONChunk(uint16_t startindex,
DynamicJsonDocument FragmentRequest(FragmentRequestString.length() * 3);
if(0 >= FragmentRequest.capacity())
{
Serial.println(F("ERROR:prepareJSONChunk:Fragmentation:Could not allocate memory for a fragmentation request. Skipping Response"));
ESPU_DBGL(F("ERROR:prepareJSONChunk:Fragmentation:Could not allocate memory for a fragmentation request. Skipping Response"));
break;
}
size_t FragmentRequestStartOffset = FragmentRequestString.indexOf("{");
DeserializationError error = deserializeJson(FragmentRequest, FragmentRequestString.substring(FragmentRequestStartOffset));
if(DeserializationError::Ok != error)
{
Serial.println(F("ERROR:prepareJSONChunk:Fragmentation:Could not extract json from the fragment request"));
ESPU_DBGL(F("ERROR:prepareJSONChunk:Fragmentation:Could not extract json from the fragment request"));
break;
}
if(!FragmentRequest.containsKey(F("id")))
{
Serial.println(F("ERROR:prepareJSONChunk:Fragmentation:Request does not contain a control ID"));
ESPU_DBGL(F("ERROR:prepareJSONChunk:Fragmentation:Request does not contain a control ID"));
break;
}
uint16_t ControlId = uint16_t(FragmentRequest[F("id")]);
if(!FragmentRequest.containsKey(F("offset")))
{
Serial.println(F("ERROR:prepareJSONChunk:Fragmentation:Request does not contain a starting offset"));
ESPU_DBGL(F("ERROR:prepareJSONChunk:Fragmentation:Request does not contain a starting offset"));
break;
}
DataOffset = uint16_t(FragmentRequest[F("offset")]);
control = ESPUI.getControlNoLock(ControlId);
if(nullptr == control)
{
Serial.println(String(F("ERROR:prepareJSONChunk:Fragmentation:Requested control: ")) + String(ControlId) + F(" does not exist"));
ESPU_DBGL(String(F("ERROR:prepareJSONChunk:Fragmentation:Requested control: ")) + String(ControlId) + F(" does not exist"));
break;
}
// Serial.println(F("prepareJSONChunk:Fragmentation:disable the control search operation"));
// ESPU_DBGL(F("prepareJSONChunk:Fragmentation:disable the control search operation"));
currentIndex = 1;
startindex = 0;
SingleControl = true;
@ -355,7 +364,7 @@ uint32_t ESPUIclient::prepareJSONChunk(uint16_t startindex,
// any controls left to be processed?
if(nullptr == control)
{
// Serial.println("prepareJSONChunk: No controls to process");
// ESPU_DBGL("prepareJSONChunk: No controls to process");
break;
}
@ -367,7 +376,7 @@ uint32_t ESPUIclient::prepareJSONChunk(uint16_t startindex,
// skip deleted controls or controls that have not been updated
if (control->ToBeDeleted() && !SingleControl)
{
// Serial.println(String("prepareJSONChunk: Ignoring Deleted control: ") + String(control->id));
// ESPU_DBGL(String("prepareJSONChunk: Ignoring Deleted control: ") + String(control->id));
control = control->next;
continue;
}
@ -395,8 +404,8 @@ uint32_t ESPUIclient::prepareJSONChunk(uint16_t startindex,
// String("prepareJSONChunk: too much data in the message. Remove the last entry");
if (1 == elementcount)
{
Serial.println(String(F("ERROR: prepareJSONChunk: Control ")) + String(control->id) + F(" is too large to be sent to the browser."));
// Serial.println(String(F("ERROR: prepareJSONChunk: value: ")) + control->value);
ESPU_DBGL(String(F("ERROR: prepareJSONChunk: Control ")) + String(control->id) + F(" is too large to be sent to the browser."));
// ESPU_DBGL(String(F("ERROR: prepareJSONChunk: value: ")) + control->value);
rootDoc.clear();
item = items.createNestedObject();
control->MarshalErrorMessage(item);
@ -404,8 +413,8 @@ uint32_t ESPUIclient::prepareJSONChunk(uint16_t startindex,
}
else
{
// Serial.println(String("prepareJSONChunk: Defering control: ") + String(control->id));
// Serial.println(String("prepareJSONChunk: elementcount: ") + String(elementcount));
// ESPU_DBGL(String("prepareJSONChunk: Defering control: ") + String(control->id));
// ESPU_DBGL(String("prepareJSONChunk: elementcount: ") + String(elementcount));
items.remove(elementcount);
--elementcount;
@ -415,7 +424,7 @@ uint32_t ESPUIclient::prepareJSONChunk(uint16_t startindex,
}
else if (SingleControl)
{
// Serial.println("prepareJSONChunk: exit loop");
// ESPU_DBGL("prepareJSONChunk: exit loop");
control = nullptr;
}
else
@ -430,7 +439,7 @@ uint32_t ESPUIclient::prepareJSONChunk(uint16_t startindex,
xSemaphoreGive(ESPUI.ControlsSemaphore);
#endif // def ESP32
// Serial.println(String("prepareJSONChunk: elementcount: ") + String(elementcount));
// ESPU_DBGL(String("prepareJSONChunk: elementcount: ") + String(elementcount));
return elementcount;
}
@ -457,18 +466,18 @@ etc.
bool ESPUIclient::SendControlsToClient(uint16_t startidx, ClientUpdateType_t TransferMode, String FragmentRequest)
{
bool Response = false;
// Serial.println(String("ESPUIclient:SendControlsToClient:startidx: ") + String(startidx));
// ESPU_DBGL(String("ESPUIclient:SendControlsToClient:startidx: ") + String(startidx));
do // once
{
if(!CanSend())
{
// Serial.println("ESPUIclient:SendControlsToClient: Cannot Send to clients.");
// ESPU_DBGL("ESPUIclient:SendControlsToClient: Cannot Send to clients.");
break;
}
else if ((startidx >= ESPUI.controlCount) && (emptyString.equals(FragmentRequest)))
{
// Serial.println(F("ERROR:ESPUIclient:SendControlsToClient: No more controls to send."));
// ESPU_DBGL(F("ERROR:ESPUIclient:SendControlsToClient: No more controls to send."));
Response = true;
break;
}
@ -480,44 +489,44 @@ bool ESPUIclient::SendControlsToClient(uint16_t startidx, ClientUpdateType_t Tra
if(0 == startidx)
{
// Serial.println("ESPUIclient:SendControlsToClient: Tell client we are starting a transfer of controls.");
// ESPU_DBGL("ESPUIclient:SendControlsToClient: Tell client we are starting a transfer of controls.");
document["type"] = (ClientUpdateType_t::RebuildNeeded == TransferMode) ? UI_INITIAL_GUI : UI_EXTEND_GUI;
CurrentSyncID = NextSyncID;
NextSyncID = ESPUI.GetNextControlChangeId();
}
// Serial.println(String("ESPUIclient:SendControlsToClient:type: ") + String((uint32_t)document["type"]));
// ESPU_DBGL(String("ESPUIclient:SendControlsToClient:type: ") + String((uint32_t)document["type"]));
// Serial.println("ESPUIclient:SendControlsToClient: Build Controls.");
// ESPU_DBGL("ESPUIclient:SendControlsToClient: Build Controls.");
if(prepareJSONChunk(startidx, document, ClientUpdateType_t::UpdateNeeded == TransferMode, FragmentRequest))
{
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity >= Verbosity::VerboseJSON)
{
Serial.println(F("ESPUIclient:SendControlsToClient: Sending elements --------->"));
ESPU_DBGL(F("ESPUIclient:SendControlsToClient: Sending elements --------->"));
serializeJson(document, Serial);
Serial.println();
ESPU_DBGL();
}
#endif
// Serial.println("ESPUIclient:SendControlsToClient: Send message.");
// ESPU_DBGL("ESPUIclient:SendControlsToClient: Send message.");
if(true == SendJsonDocToWebSocket(document))
{
// Serial.println("ESPUIclient:SendControlsToClient: Sent.");
// ESPU_DBGL("ESPUIclient:SendControlsToClient: Sent.");
}
else
{
// Serial.println("ESPUIclient:SendControlsToClient: Send failed.");
// ESPU_DBGL("ESPUIclient:SendControlsToClient: Send failed.");
}
}
else
{
// Serial.println("ESPUIclient:SendControlsToClient: No elements to send.");
// ESPU_DBGL("ESPUIclient:SendControlsToClient: No elements to send.");
Response = true;
}
} while(false);
// Serial.println(String("ESPUIclient:SendControlsToClient:Response: ") + String(Response));
// ESPU_DBGL(String("ESPUIclient:SendControlsToClient:Response: ") + String(Response));
return Response;
}
@ -532,10 +541,10 @@ bool ESPUIclient::SendJsonDocToWebSocket(DynamicJsonDocument& document)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity >= Verbosity::VerboseJSON)
{
Serial.println(F("ESPUIclient::SendJsonDocToWebSocket: Cannot Send to client. Not sending websocket message"));
ESPU_DBGL(F("ESPUIclient::SendJsonDocToWebSocket: Cannot Send to client. Not sending websocket message"));
}
#endif
// Serial.println("ESPUIclient::SendJsonDocToWebSocket: Cannot Send to client. Not sending websocket message");
// ESPU_DBGL("ESPUIclient::SendJsonDocToWebSocket: Cannot Send to client. Not sending websocket message");
Response = false;
break;
}
@ -545,17 +554,17 @@ bool ESPUIclient::SendJsonDocToWebSocket(DynamicJsonDocument& document)
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity >= Verbosity::VerboseJSON)
{
Serial.println(String(F("ESPUIclient::SendJsonDocToWebSocket: json: '")) + json + "'");
ESPU_DBGL(String(F("ESPUIclient::SendJsonDocToWebSocket: json: '")) + json + "'");
}
#endif
#if defined(DEBUG_ESPUI)
if (ESPUI.verbosity >= Verbosity::VerboseJSON)
{
Serial.println(F("ESPUIclient::SendJsonDocToWebSocket: client.text"));
ESPU_DBGL(F("ESPUIclient::SendJsonDocToWebSocket: client.text"));
}
#endif
// Serial.println(F("ESPUIclient::SendJsonDocToWebSocket: client.text"));
// ESPU_DBGL(F("ESPUIclient::SendJsonDocToWebSocket: client.text"));
client->text(json);
} while (false);