From d9a9e6f31cbc649edbf3861fe789b981a47cb29e Mon Sep 17 00:00:00 2001 From: Gregg Date: Sat, 5 Mar 2022 12:50:20 -0600 Subject: [PATCH] Changed webLog in HomeSpan from pointer to instantiated variable Added isEnabled to SpanWebLog to indicate whether Web Log has been enabled. This allows the use of homeSpan.webLog.addLog() without ever enabling (in which case the log entries are ignored). --- src/HAP.cpp | 24 ++++++++++++------------ src/HomeSpan.cpp | 9 +++++---- src/HomeSpan.h | 7 ++++--- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/HAP.cpp b/src/HAP.cpp index a72df6a..b18eecc 100644 --- a/src/HAP.cpp +++ b/src/HAP.cpp @@ -342,7 +342,7 @@ void HAPClient::processRequest(){ return; } - if(homeSpan.webLog && !strncmp(body,homeSpan.webLog->statusURL.c_str(),homeSpan.webLog->statusURL.length())){ // GET STATUS - AN OPTIONAL, NON-HAP-R2 FEATURE + if(homeSpan.webLog.isEnabled && !strncmp(body,homeSpan.webLog.statusURL.c_str(),homeSpan.webLog.statusURL.length())){ // GET STATUS - AN OPTIONAL, NON-HAP-R2 FEATURE getStatusURL(); return; } @@ -1258,7 +1258,7 @@ int HAPClient::getStatusURL(){ char clocktime[33]; - if(homeSpan.webLog->timeInit){ + if(homeSpan.webLog.timeInit){ struct tm timeinfo; getLocalTime(&timeinfo,10); strftime(clocktime,sizeof(clocktime),"%c",&timeinfo); @@ -1286,37 +1286,37 @@ int HAPClient::getStatusURL(){ response+="\n"; response+="\n"; response+="\n"; - response+="\n"; + response+="\n"; response+="\n"; response+="\n"; response+="\n"; response+="\n"; response+="\n"; - response+="\n"; + response+="\n"; response+="
Up Time:" + String(uptime) + "
Current Time:" + String(clocktime) + "
Boot Time:" + String(homeSpan.webLog->bootTime) + "
Boot Time:" + String(homeSpan.webLog.bootTime) + "
ESP32 Board:" + String(ARDUINO_BOARD) + "
Arduino-ESP Version:" + String(ARDUINO_ESP_VERSION) + "
ESP-IDF Version:" + String(ESP_IDF_VERSION_MAJOR) + "." + String(ESP_IDF_VERSION_MINOR) + "." + String(ESP_IDF_VERSION_PATCH) + "
HomeSpan Version:" + String(HOMESPAN_VERSION) + "
Sketch Version:" + String(homeSpan.getSketchVersion()) + "
Max Log Entries:" + String(homeSpan.webLog->maxEntries) + "
Max Log Entries:" + String(homeSpan.webLog.maxEntries) + "
\n"; response+="

"; - if(homeSpan.webLog->maxEntries>0){ + if(homeSpan.webLog.maxEntries>0){ response+="\n"; - int lastIndex=homeSpan.webLog->nEntries-homeSpan.webLog->maxEntries; + int lastIndex=homeSpan.webLog.nEntries-homeSpan.webLog.maxEntries; if(lastIndex<0) lastIndex=0; - for(int i=homeSpan.webLog->nEntries-1;i>=lastIndex;i--){ - int index=i%homeSpan.webLog->maxEntries; - seconds=homeSpan.webLog->log[index].upTime/1e6; + for(int i=homeSpan.webLog.nEntries-1;i>=lastIndex;i--){ + int index=i%homeSpan.webLog.maxEntries; + seconds=homeSpan.webLog.log[index].upTime/1e6; secs=seconds%60; mins=(seconds/=60)%60; hours=(seconds/=60)%24; days=(seconds/=24); sprintf(uptime,"%d:%02d:%02d:%02d",days,hours,mins,secs); - if(homeSpan.webLog->log[index].clockTime.tm_year>0) - strftime(clocktime,sizeof(clocktime),"%c",&homeSpan.webLog->log[index].clockTime); + if(homeSpan.webLog.log[index].clockTime.tm_year>0) + strftime(clocktime,sizeof(clocktime),"%c",&homeSpan.webLog.log[index].clockTime); else sprintf(clocktime,"Unknown"); - response+=""; + response+=""; } response+="
EntryUp TimeLog TimeMessage
" + String(i+1) + "" + String(uptime) + "" + String(clocktime) + "" + String(homeSpan.webLog->log[index].message) + "
" + String(i+1) + "" + String(uptime) + "" + String(clocktime) + "" + String(homeSpan.webLog.log[index].message) + "
\n"; } diff --git a/src/HomeSpan.cpp b/src/HomeSpan.cpp index 0d7a4cb..0acb692 100644 --- a/src/HomeSpan.cpp +++ b/src/HomeSpan.cpp @@ -560,9 +560,9 @@ void Span::checkConnect(){ } } - if(webLog){ - Serial.printf("Web Logging enabled at http://%s.local:%d%swith max number of entries=%d\n\n",hostName,tcpPortNum,webLog->statusURL.c_str()+4,webLog->maxEntries); - webLog->initTime(); + if(webLog.isEnabled){ + Serial.printf("Web Logging enabled at http://%s.local:%d%swith max number of entries=%d\n\n",hostName,tcpPortNum,webLog.statusURL.c_str()+4,webLog.maxEntries); + webLog.initTime(); } Serial.printf("Starting HAP Server on port %d supporting %d simultaneous HomeKit Controller Connections...\n",tcpPortNum,maxConnections); @@ -1930,7 +1930,8 @@ SpanUserCommand::SpanUserCommand(char c, const char *s, void (*f)(const char *, // SpanWebLog // /////////////////////////////// -SpanWebLog::SpanWebLog(uint16_t maxEntries, const char *serv, const char *tz, const char *url){ +void SpanWebLog::init(uint16_t maxEntries, const char *serv, const char *tz, const char *url){ + isEnabled=true; this->maxEntries=maxEntries; timeServer=serv; timeZone=tz; diff --git a/src/HomeSpan.h b/src/HomeSpan.h index 748fd72..4f61d86 100644 --- a/src/HomeSpan.h +++ b/src/HomeSpan.h @@ -96,6 +96,7 @@ struct SpanBuf{ // temporary storage buffer for us /////////////////////////////// struct SpanWebLog{ // optional web status/log data + boolean isEnabled=false; // flag to inidicate WebLog has been enabled uint16_t maxEntries; // max number of log entries; int nEntries=0; // total cumulative number of log entries const char *timeServer; // optional time server to use for acquiring clock time @@ -110,7 +111,7 @@ struct SpanWebLog{ // optional web status/log data const char *message; // pointers to log entries of arbitrary size } *log=NULL; // array of log entries - SpanWebLog(uint16_t maxEntries, const char *serv, const char *tz, const char *url); + void init(uint16_t maxEntries, const char *serv, const char *tz, const char *url); void initTime(); void addLog(const char *m); }; @@ -163,7 +164,7 @@ struct Span{ Blinker statusLED; // indicates HomeSpan status PushButton controlButton; // controls HomeSpan configuration and resets Network network; // configures WiFi and Setup Code via either serial monitor or temporary Access Point - SpanWebLog *webLog=NULL; // optional web status/log + SpanWebLog webLog; // optional web status/log SpanConfig hapConfig; // track configuration changes to the HAP Accessory database; used to increment the configuration number (c#) when changes found vector Accessories; // vector of pointers to all Accessories @@ -225,7 +226,7 @@ struct Span{ void enableOTA(boolean auth=true){otaEnabled=true;otaAuth=auth;reserveSocketConnections(1);} // enables Over-the-Air updates, with (auth=true) or without (auth=false) authorization password void enableWebLog(uint16_t maxEntries=0, const char *serv=NULL, const char *tz="UTC", const char *url=DEFAULT_WEBLOG_URL){ // enable Web Logging - webLog=new SpanWebLog(maxEntries, serv, tz, url); + webLog.init(maxEntries, serv, tz, url); } [[deprecated("Please use reserveSocketConnections(n) method instead.")]]