From 99cdf258104517839c6c2fe75c3f73843f835d71 Mon Sep 17 00:00:00 2001 From: fvanroie Date: Thu, 26 Nov 2020 20:09:58 +0100 Subject: [PATCH] Switch haspGetVersion to char* instead of String --- src/hasp.cpp | 9 ++- src/hasp.h | 2 +- src/hasp_http.cpp | 6 +- src/hasp_mqtt.cpp | 7 +- src/hasp_slave.cpp | 196 +++++++++++++++++++++++---------------------- 5 files changed, 114 insertions(+), 106 deletions(-) diff --git a/src/hasp.cpp b/src/hasp.cpp index e4d5200a..1dd396f6 100644 --- a/src/hasp.cpp +++ b/src/hasp.cpp @@ -395,6 +395,7 @@ void haspSetup() } if(th) { + lv_theme_set_act(th); Log.trace(TAG_HASP, F("Custom theme loaded")); } else { Log.error(TAG_HASP, F("No theme could be loaded")); @@ -495,11 +496,11 @@ void hasp_background(uint16_t pageid, uint16_t imageid) /////////////////////////////////////////////////////////////////////////////////////////////////////////// -String haspGetVersion() +void haspGetVersion(char * version, size_t len) { - char buffer[16]; - snprintf_P(buffer, sizeof(buffer), "%u.%u.%u", HASP_VERSION_MAJOR, HASP_VERSION_MINOR, HASP_VERSION_REVISION); - return buffer; + // char buffer[16]; + snprintf_P(version, len, "%u.%u.%u", HASP_VERSION_MAJOR, HASP_VERSION_MINOR, HASP_VERSION_REVISION); + // return buffer; } void haspClearPage(uint16_t pageid) diff --git a/src/hasp.h b/src/hasp.h index c4d76c56..1d76c917 100644 --- a/src/hasp.h +++ b/src/hasp.h @@ -60,7 +60,7 @@ uint8_t haspGetPage(); void haspClearPage(uint16_t pageid); String haspGetNodename(); -String haspGetVersion(); +void haspGetVersion(char* version,size_t len); void haspBackground(uint16_t pageid, uint16_t imageid); void hasp_set_group_objects(uint8_t groupid, uint8_t eventid, lv_obj_t * src_obj); diff --git a/src/hasp_http.cpp b/src/hasp_http.cpp index 5e34b5d9..d40fa38b 100644 --- a/src/hasp_http.cpp +++ b/src/hasp_http.cpp @@ -400,7 +400,11 @@ void webHandleInfo() /* HASP Stats */ httpMessage += F("HASP Version: "); - httpMessage += String(haspGetVersion()); + { + char version[32]; + haspGetVersion(version, sizeof(version)); + httpMessage += version; + } httpMessage += F("
Build DateTime: "); httpMessage += __DATE__; httpMessage += F(" "); diff --git a/src/hasp_mqtt.cpp b/src/hasp_mqtt.cpp index 46afb985..1dfb0491 100644 --- a/src/hasp_mqtt.cpp +++ b/src/hasp_mqtt.cpp @@ -214,9 +214,10 @@ void mqtt_send_statusupdate() { char buffer[128]; - snprintf_P(data, sizeof(data), PSTR("{\"status\":\"available\",\"version\":\"%s\",\"uptime\":%lu,"), - haspGetVersion().c_str(), long(millis() / 1000)); - strcat(buffer, data); + haspGetVersion(buffer, sizeof(buffer)); + snprintf_P(data, sizeof(data), PSTR("{\"status\":\"available\",\"version\":\"%s\",\"uptime\":%lu,"), buffer, + long(millis() / 1000)); + #if HASP_USE_WIFI > 0 #if defined(STM32F4xx) IPAddress ip; diff --git a/src/hasp_slave.cpp b/src/hasp_slave.cpp index 69ec2d0c..c422cb8b 100644 --- a/src/hasp_slave.cpp +++ b/src/hasp_slave.cpp @@ -1,7 +1,7 @@ /* MIT License - Copyright (c) 2020 Francis Van Roie For full license information read the LICENSE file in the project folder */ -#if HASP_USE_TASMOTA_SLAVE>0 +#if HASP_USE_TASMOTA_SLAVE > 0 #include "hasp_slave.h" #include @@ -21,145 +21,147 @@ TasmotaSlave slave(&Serial2); #define slaveNodeTopic "hasp/" -unsigned long updateLedTimer = 0; // timer in msec for tele mqtt send -unsigned long updatLedPeriod = 1000; // timer in msec for tele mqtt send +unsigned long updateLedTimer = 0; // timer in msec for tele mqtt send +unsigned long updatLedPeriod = 1000; // timer in msec for tele mqtt send bool ledstate = false; - void slave_send_state(const __FlashStringHelper * subtopic, const char * payload) { - // page = 0 - // p[0].b[0].attr = abc - // dim = 100 - // idle = 0/1 - // light = 0/1 - // brightness = 100 + // page = 0 + // p[0].b[0].attr = abc + // dim = 100 + // idle = 0/1 + // light = 0/1 + // brightness = 100 - char cBuffer[strlen(payload) + 64]; - memset(cBuffer, 0 ,sizeof(cBuffer)); - snprintf(cBuffer, sizeof(cBuffer), PSTR("publish %sstate/%s %s"), slaveNodeTopic ,subtopic, payload); - slave.ExecuteCommand((char*)cBuffer); + char cBuffer[strlen(payload) + 64]; + memset(cBuffer, 0, sizeof(cBuffer)); + snprintf(cBuffer, sizeof(cBuffer), PSTR("publish %sstate/%s %s"), slaveNodeTopic, subtopic, payload); + slave.ExecuteCommand((char *)cBuffer); - // Log after char buffers are cleared - Log.notice(TAG_TASM,F("TAS PUB: %sstate/%S = %s"), slaveNodeTopic, subtopic, payload); + // Log after char buffers are cleared + Log.notice(TAG_TASM, F("TAS PUB: %sstate/%S = %s"), slaveNodeTopic, subtopic, payload); } void slave_send_obj_attribute_str(uint8_t pageid, uint8_t btnid, const char * attribute, const char * data) { - char cBuffer[192]; - memset(cBuffer, 0 ,sizeof(cBuffer)); - snprintf_P(cBuffer, sizeof(cBuffer), PSTR("publish %sstate/json {\"p[%u].b[%u].%s\":\"%s\"}"), slaveNodeTopic, pageid, btnid, attribute, data); - slave.ExecuteCommand((char*)cBuffer); - // Log after char buffers are cleared - Log.notice(TAG_TASM,F("TAS PUB: %sstate/json = {\"p[%u].b[%u].%s\":\"%s\"}"), slaveNodeTopic, pageid, btnid, attribute, data); + char cBuffer[192]; + memset(cBuffer, 0, sizeof(cBuffer)); + snprintf_P(cBuffer, sizeof(cBuffer), PSTR("publish %sstate/json {\"p[%u].b[%u].%s\":\"%s\"}"), slaveNodeTopic, + pageid, btnid, attribute, data); + slave.ExecuteCommand((char *)cBuffer); + // Log after char buffers are cleared + Log.notice(TAG_TASM, F("TAS PUB: %sstate/json = {\"p[%u].b[%u].%s\":\"%s\"}"), slaveNodeTopic, pageid, btnid, + attribute, data); } void slave_send_input(uint8_t id, const char * payload) { - // Log.verbose(TAG_TASM,F("MQTT TST: %sstate/input%u = %s"), mqttNodeTopic, id, payload); // to be removed + // Log.verbose(TAG_TASM,F("MQTT TST: %sstate/input%u = %s"), mqttNodeTopic, id, payload); // to be removed - char cBuffer[strlen(payload) + 64]; - memset(cBuffer, 0 ,sizeof(cBuffer)); - snprintf_P(cBuffer, sizeof(cBuffer), PSTR("publish %sstate/input%u %s"), slaveNodeTopic, id, payload); - slave.ExecuteCommand((char*)cBuffer); + char cBuffer[strlen(payload) + 64]; + memset(cBuffer, 0, sizeof(cBuffer)); + snprintf_P(cBuffer, sizeof(cBuffer), PSTR("publish %sstate/input%u %s"), slaveNodeTopic, id, payload); + slave.ExecuteCommand((char *)cBuffer); - // Log after char buffers are cleared - Log.notice(TAG_TASM,F("TAS PUB: %sstate/input%u = %s"), slaveNodeTopic, id, payload); + // Log after char buffers are cleared + Log.notice(TAG_TASM, F("TAS PUB: %sstate/input%u = %s"), slaveNodeTopic, id, payload); } void TASMO_TELE_JSON() { // Periodically publish a JSON string indicating system status - char data[3 * 128]; - { - char buffer[128]; - snprintf_P(data, sizeof(data), PSTR("{\"status\":\"available\",\"version\":\"%s\",\"uptime\":%lu,"), - haspGetVersion().c_str(), long(millis() / 1000)); - strcat(buffer, data); - snprintf_P(buffer, sizeof(buffer), PSTR("\"espCanUpdate\":\"false\",\"page\":%u,\"numPages\":%u,"), - haspGetPage(), (HASP_NUM_PAGES)); - strcat(data, buffer); - snprintf_P(buffer, sizeof(buffer), PSTR("\"tftDriver\":\"%s\",\"tftWidth\":%u,\"tftHeight\":%u}"), - halDisplayDriverName().c_str(), (TFT_WIDTH), (TFT_HEIGHT)); - strcat(data, buffer); - } - slave.sendJSON((char*)data); + char data[3 * 128]; + { + char buffer[128]; + haspGetVersion(buffer, sizeof(buffer)); + + snprintf_P(data, sizeof(data), PSTR("{\"status\":\"available\",\"version\":\"%s\",\"uptime\":%lu,"), buffer, + long(millis() / 1000)); + + snprintf_P(buffer, sizeof(buffer), PSTR("\"espCanUpdate\":\"false\",\"page\":%u,\"numPages\":%u,"), + haspGetPage(), (HASP_NUM_PAGES)); + strcat(data, buffer); + snprintf_P(buffer, sizeof(buffer), PSTR("\"tftDriver\":\"%s\",\"tftWidth\":%u,\"tftHeight\":%u}"), + halDisplayDriverName().c_str(), (TFT_WIDTH), (TFT_HEIGHT)); + strcat(data, buffer); + } + slave.sendJSON((char *)data); // slave_send_state(F("statusupdate"), data); // debugLastMillis = millis(); } -void TASMO_DATA_RECEIVE(char *data) +void TASMO_DATA_RECEIVE(char * data) { - Log.trace(TAG_TASM,F("Slave IN [%s]"), data); + Log.trace(TAG_TASM, F("Slave IN [%s]"), data); - char dataType[3]; - memset(dataType, 0 ,sizeof(dataType)); - snprintf_P(dataType, sizeof(dataType), data); - Log.trace(TAG_TASM,F("dataType [%s]"), dataType); + char dataType[3]; + memset(dataType, 0, sizeof(dataType)); + snprintf_P(dataType, sizeof(dataType), data); + Log.trace(TAG_TASM, F("dataType [%s]"), dataType); - if (!strcmp(dataType, "p[")){ // - dispatchTextLine(data); - } else if (!strcmp(dataType, "[\"")) { - dispatchJson(data); - } else { - char slvCmd[20],slvVal[60]; - memset(slvCmd, 0 ,sizeof(slvCmd)); - memset(slvVal, 0 ,sizeof(slvVal)); - sscanf(data,"%[^=] =%s", slvCmd, slvVal); - - Log.trace(TAG_TASM,F("Cmd[%s] Val[%s]"), slvCmd, slvVal); - - if (!strcmp(slvCmd, "calData")){ - if (strlen(slvVal) != 0) { - char cBuffer[strlen(slvVal) + 24]; - memset(cBuffer, 0 ,sizeof(cBuffer)); - snprintf_P(cBuffer, sizeof(cBuffer), PSTR("{'calibration':[%s]}"), slvVal); - dispatchConfig("gui",cBuffer); - } else { - dispatchConfig("gui",""); - } - } else if (!strcmp(slvCmd, "jsonl")) { - dispatchJsonl(slvVal); - } else if (!strcmp(slvCmd, "clearpage")) { - dispatchClearPage(slvVal); + if(!strcmp(dataType, "p[")) { // + dispatchTextLine(data); + } else if(!strcmp(dataType, "[\"")) { + dispatchJson(data); } else { - dispatchTextLine(data); + char slvCmd[20], slvVal[60]; + memset(slvCmd, 0, sizeof(slvCmd)); + memset(slvVal, 0, sizeof(slvVal)); + sscanf(data, "%[^=] =%s", slvCmd, slvVal); + + Log.trace(TAG_TASM, F("Cmd[%s] Val[%s]"), slvCmd, slvVal); + + if(!strcmp(slvCmd, "calData")) { + if(strlen(slvVal) != 0) { + char cBuffer[strlen(slvVal) + 24]; + memset(cBuffer, 0, sizeof(cBuffer)); + snprintf_P(cBuffer, sizeof(cBuffer), PSTR("{'calibration':[%s]}"), slvVal); + dispatchConfig("gui", cBuffer); + } else { + dispatchConfig("gui", ""); + } + } else if(!strcmp(slvCmd, "jsonl")) { + dispatchJsonl(slvVal); + } else if(!strcmp(slvCmd, "clearpage")) { + dispatchClearPage(slvVal); + } else { + dispatchTextLine(data); + } } - } } void TASMO_EVERY_SECOND(void) { - if (ledstate) { - ledstate = false; - //digitalWrite(HASP_OUTPUT_PIN, 1); - // Log.trace(TAG_TASM,F("LED OFF")); - } else { - ledstate = true; - //digitalWrite(HASP_OUTPUT_PIN, 0); - // Log.trace(TAG_TASM,F("LED ON")); - } + if(ledstate) { + ledstate = false; + // digitalWrite(HASP_OUTPUT_PIN, 1); + // Log.trace(TAG_TASM,F("LED OFF")); + } else { + ledstate = true; + // digitalWrite(HASP_OUTPUT_PIN, 0); + // Log.trace(TAG_TASM,F("LED ON")); + } } void slaveSetup() { - Serial2.begin(HASP_SLAVE_SPEED); - // slave.attach_FUNC_EVERY_SECOND(TASMO_EVERY_SECOND); - slave.attach_FUNC_JSON(TASMO_TELE_JSON); - slave.attach_FUNC_COMMAND_SEND(TASMO_DATA_RECEIVE); + Serial2.begin(HASP_SLAVE_SPEED); + // slave.attach_FUNC_EVERY_SECOND(TASMO_EVERY_SECOND); + slave.attach_FUNC_JSON(TASMO_TELE_JSON); + slave.attach_FUNC_COMMAND_SEND(TASMO_DATA_RECEIVE); - Log.notice(TAG_TASM,F("HASP SLAVE LOADED")); + Log.notice(TAG_TASM, F("HASP SLAVE LOADED")); } void IRAM_ATTR slaveLoop(void) { - slave.loop(); - // demo code to run the led without tasmota - // if ((millis() - updateLedTimer) >= updatLedPeriod) { - // updateLedTimer = millis(); - // TASMO_EVERY_SECOND(); - // } - + slave.loop(); + // demo code to run the led without tasmota + // if ((millis() - updateLedTimer) >= updatLedPeriod) { + // updateLedTimer = millis(); + // TASMO_EVERY_SECOND(); + // } } #endif \ No newline at end of file