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