diff --git a/src/dev/device.cpp b/src/dev/device.cpp
index cfb21a77..6d1d449b 100644
--- a/src/dev/device.cpp
+++ b/src/dev/device.cpp
@@ -16,4 +16,24 @@ const char* BaseDevice::get_model()
return PIOENV;
#endif
}
-}
\ No newline at end of file
+
+const char* BaseDevice::get_version()
+{
+#ifdef HASP_MODEL
+ return (QUOTE(HASP_VER_MAJ) "." QUOTE(HASP_VER_MIN) "." QUOTE(HASP_VER_REV));
+#else
+ return PIOENV;
+#endif
+}
+
+const char* BaseDevice::get_hostname()
+{
+ return _hostname; //.c_str();
+}
+
+void BaseDevice::set_hostname(const char* hostname)
+{
+ strncpy(_hostname, hostname, STR_LEN_HOSTNAME);
+}
+
+} // namespace dev
\ No newline at end of file
diff --git a/src/dev/device.h b/src/dev/device.h
index 61b8d01c..6e644513 100644
--- a/src/dev/device.h
+++ b/src/dev/device.h
@@ -20,6 +20,8 @@
#include "ArduinoJson.h"
+#define STR_LEN_HOSTNAME 64
+
namespace dev {
class BaseDevice {
@@ -29,13 +31,9 @@ class BaseDevice {
virtual void reboot()
{}
- virtual const char* get_hostname()
- {
- return "";
- }
- virtual void set_hostname(const char*)
- {}
- virtual const char* get_core_version()
+ const char* get_hostname();
+ void set_hostname(const char*);
+ const char* get_core_version()
{
return "";
}
@@ -44,6 +42,7 @@ class BaseDevice {
return "";
}
virtual const char* get_model();
+ virtual const char* get_version();
virtual const char* get_hardware_id()
{
return "";
@@ -100,6 +99,10 @@ class BaseDevice {
snprintf(buffer, sizeof(buffer), "%d", pin);
return buffer;
}
+
+ private:
+ // std::string _hostname;
+ char _hostname[STR_LEN_HOSTNAME];
};
} // namespace dev
diff --git a/src/dev/esp32/esp32.cpp b/src/dev/esp32/esp32.cpp
index d1e0b824..6fcdc0a2 100644
--- a/src/dev/esp32/esp32.cpp
+++ b/src/dev/esp32/esp32.cpp
@@ -97,7 +97,7 @@ static void halGetResetInfo(String& resetReason)
Esp32Device::Esp32Device()
{
- _hostname = MQTT_NODENAME;
+ BaseDevice::set_hostname(MQTT_NODENAME);
_backlight_invert = (TFT_BACKLIGHT_ON == LOW);
_backlight_power = 1;
_backlight_level = 255;
@@ -129,14 +129,6 @@ void Esp32Device::show_info()
if(_sketch_size == 0) _sketch_size = ESP.getSketchSize(); // slow: takes ~1 second
}
-const char* Esp32Device::get_hostname()
-{
- return _hostname.c_str();
-}
-void Esp32Device::set_hostname(const char* hostname)
-{
- _hostname = hostname;
-}
const char* Esp32Device::get_core_version()
{
return esp_get_idf_version(); // == ESP.getSdkVersion();
diff --git a/src/dev/esp32/esp32.h b/src/dev/esp32/esp32.h
index cb217599..38bf9db2 100644
--- a/src/dev/esp32/esp32.h
+++ b/src/dev/esp32/esp32.h
@@ -19,8 +19,6 @@ class Esp32Device : public BaseDevice {
void reboot() override;
void show_info() override;
- const char* get_hostname();
- void set_hostname(const char*);
const char* get_core_version();
const char* get_chip_model();
const char* get_hardware_id();
@@ -40,7 +38,6 @@ class Esp32Device : public BaseDevice {
bool is_system_pin(uint8_t pin) override;
private:
- std::string _hostname;
std::string _hardware_id;
uint32_t _sketch_size; // cached because function is slow
diff --git a/src/hasp/hasp.cpp b/src/hasp/hasp.cpp
index e40acd88..848d9dd6 100644
--- a/src/hasp/hasp.cpp
+++ b/src/hasp/hasp.cpp
@@ -534,10 +534,10 @@ void hasp_background(uint16_t pageid, uint16_t imageid)
///////////////////////////////////////////////////////////////////////////////////////////////////////////
-void haspGetVersion(char* version, size_t len)
-{
- snprintf_P(version, len, PSTR("%u.%u.%u"), HASP_VER_MAJ, HASP_VER_MIN, HASP_VER_REV);
-}
+// void haspGetVersion(char* version, size_t len)
+// {
+// snprintf_P(version, len, PSTR("%u.%u.%u"), HASP_VER_MAJ, HASP_VER_MIN, HASP_VER_REV);
+// }
void haspClearPage(uint16_t pageid)
{
@@ -577,8 +577,7 @@ void hasp_get_info(JsonDocument& doc)
char size_buf[32];
JsonObject info = doc.createNestedObject(F(D_MANUFACTURER));
- haspGetVersion(size_buf, sizeof(size_buf));
- info[F(D_INFO_VERSION)] = size_buf;
+ info[F(D_INFO_VERSION)] = haspDevice.get_version();
buffer = __DATE__;
buffer += (" ");
diff --git a/src/hasp/hasp.h b/src/hasp/hasp.h
index 0db81f9f..632d615f 100644
--- a/src/hasp/hasp.h
+++ b/src/hasp/hasp.h
@@ -50,7 +50,7 @@ void haspEverySecond(void);
void haspReconnect(void);
void haspDisconnect(void);
-void haspGetVersion(char* version, size_t len);
+// void haspGetVersion(char* version, size_t len);
// void haspBackground(uint16_t pageid, uint16_t imageid);
// void haspNewObject(const JsonObject & config, uint8_t & saved_page_id);
diff --git a/src/hasp/hasp_dispatch.cpp b/src/hasp/hasp_dispatch.cpp
index e8f50378..cbb92472 100644
--- a/src/hasp/hasp_dispatch.cpp
+++ b/src/hasp/hasp_dispatch.cpp
@@ -810,6 +810,7 @@ void dispatch_send_discovery(const char*, const char*)
doc[F("mf")] = F(D_MANUFACTURER);
doc[F("hwid")] = haspDevice.get_hardware_id();
doc[F("pages")] = haspPages.count();
+ doc[F("sw")] = haspDevice.get_version();
JsonObject input = doc.createNestedObject(F("input"));
JsonArray relay = doc.createNestedArray(F("power"));
@@ -821,10 +822,8 @@ void dispatch_send_discovery(const char*, const char*)
#endif
char data[1024];
- haspGetVersion(data, sizeof(data));
- doc[F("sw")] = data;
-
size_t len = serializeJson(doc, data);
+
switch(mqtt_send_discovery(data, len)) {
case MQTT_ERR_OK:
LOG_TRACE(TAG_MQTT_PUB, F(MQTT_TOPIC_DISCOVERY " => %s"), data);
@@ -854,9 +853,9 @@ void dispatch_statusupdate(const char*, const char*)
char buffer[128];
hasp_get_sleep_state(topic);
- haspGetVersion(buffer, sizeof(buffer));
snprintf_P(data, sizeof(data), PSTR("{\"node\":\"%s\",\"idle\":\"%s\",\"version\":\"%s\",\"uptime\":%lu,"),
- haspDevice.get_hostname(), topic, buffer, long(millis() / 1000)); // \"status\":\"available\",
+ haspDevice.get_hostname(), topic, haspDevice.get_version(),
+ long(millis() / 1000)); // \"status\":\"available\",
#if HASP_USE_WIFI > 0 || HASP_USE_ETHERNET > 0
network_get_statusupdate(buffer, sizeof(buffer));
diff --git a/src/hasp_debug.cpp b/src/hasp_debug.cpp
index 1fbc44a8..699a02fc 100644
--- a/src/hasp_debug.cpp
+++ b/src/hasp_debug.cpp
@@ -177,9 +177,6 @@ void debugLvglLogEvent(lv_log_level_t level, const char* file, uint32_t line, co
// Send the HASP header and version to the output device specified
void debugPrintHaspHeader(Print* output)
{
- char buffer[16];
- haspGetVersion(buffer, sizeof(buffer));
-
#ifdef ARDUINO
if(debugAnsiCodes) output->print(TERM_COLOR_YELLOW);
output->println();
@@ -190,7 +187,7 @@ void debugPrintHaspHeader(Print* output)
" |__|__|__|__|_____|__|\r\n"
" Home Automation Switch Plate\r\n"
" Open Hardware edition v"));
- output->println(buffer);
+ output->println(haspDevice.get_version());
output->println();
#else
if(debugAnsiCodes) debug_print(output, TERM_COLOR_YELLOW);
@@ -201,7 +198,7 @@ void debugPrintHaspHeader(Print* output)
" |__|__|__|__|_____|__|\r\n"
" Home Automation Switch Plate\r\n"
" Open Hardware edition v"));
- debug_print(output, buffer);
+ debug_print(output, haspDevice.get_version());
debug_newline(output);
debug_newline(output);
#endif
diff --git a/src/mqtt/hasp_mqtt_ha.cpp b/src/mqtt/hasp_mqtt_ha.cpp
index a4adbd41..190105f8 100644
--- a/src/mqtt/hasp_mqtt_ha.cpp
+++ b/src/mqtt/hasp_mqtt_ha.cpp
@@ -75,10 +75,7 @@ void mqtt_ha_add_device_ids(JsonDocument& doc)
ids.add(haspDevice.get_hostname());
ids.add(HASP_MAC_ADDRESS_STR);
- char buffer[32];
- haspGetVersion(buffer, sizeof(buffer));
- device[F("sw")] = buffer;
-
+ device[F("sw")] = haspDevice.get_version();
device[FPSTR(FP_MQTT_HA_NAME)] = haspDevice.get_hostname();
device[FPSTR(FP_MQTT_HA_MODEL)] = F(PIOENV);
device[FPSTR(FP_MQTT_HA_MANUFACTURER)] = F(D_MANUFACTURER);
diff --git a/src/sys/svc/hasp_http.cpp b/src/sys/svc/hasp_http.cpp
index cac82c5f..136d912f 100644
--- a/src/sys/svc/hasp_http.cpp
+++ b/src/sys/svc/hasp_http.cpp
@@ -250,16 +250,13 @@ bool httpIsAuthenticated(const __FlashStringHelper* notused)
void webSendFooter()
{
- char buffer[16];
- haspGetVersion(buffer, sizeof(buffer));
-
#if defined(STM32F4xx)
webServer.sendContent(HTTP_END);
- webServer.sendContent(buffer);
+ webServer.sendContent(haspDevice.get_version());
webServer.sendContent(HTTP_FOOTER);
#else
webServer.sendContent_P(HTTP_END);
- webServer.sendContent(buffer);
+ webServer.sendContent(haspDevice.get_version());
webServer.sendContent_P(HTTP_FOOTER);
#endif
}
@@ -279,10 +276,9 @@ void webSendPage(const char* nodename, uint32_t httpdatalength, bool gohome = fa
{
{
char buffer[64];
- haspGetVersion(buffer, sizeof(buffer));
/* Calculate Content Length upfront */
- uint32_t contentLength = strlen(buffer); // version length
+ uint32_t contentLength = strlen(haspDevice.get_version()); // version length
contentLength += sizeof(HTTP_DOCTYPE) - 1;
contentLength += sizeof(HTTP_HEADER) - 1 - 2 + strlen(nodename); // -2 for %s
contentLength += sizeof(HTTP_SCRIPT) - 1;
@@ -624,11 +620,7 @@ void webHandleInfo()
/* HASP Stats */
httpMessage += F("HASP Version: ");
- {
- char version[32];
- haspGetVersion(version, sizeof(version));
- httpMessage += version;
- }
+ httpMessage += haspDevice.get_version();
httpMessage += F("
Build DateTime: ");
httpMessage += __DATE__;
httpMessage += F(" ");
diff --git a/src/sys/svc/hasp_mdns.cpp b/src/sys/svc/hasp_mdns.cpp
index 464db38d..35761d98 100644
--- a/src/sys/svc/hasp_mdns.cpp
+++ b/src/sys/svc/hasp_mdns.cpp
@@ -60,8 +60,7 @@ void mdnsStart()
MDNS.addService(service, proto, 80);
strcpy_P(key, PSTR("app_version"));
- haspGetVersion(value, sizeof(value));
- MDNS.addServiceTxt(service, proto, key, value);
+ MDNS.addServiceTxt(service, proto, key, haspDevice.get_version());
strcpy_P(key, PSTR("app_name"));
strcpy_P(value, PSTR(D_MANUFACTURER));
diff --git a/src/sys/svc/hasp_slave.cpp b/src/sys/svc/hasp_slave.cpp
index 39abf4df..d3259e1c 100644
--- a/src/sys/svc/hasp_slave.cpp
+++ b/src/sys/svc/hasp_slave.cpp
@@ -70,10 +70,9 @@ void TASMO_TELE_JSON()
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(data, sizeof(data), PSTR("{\"status\":\"available\",\"version\":\"%s\",\"uptime\":%lu,"),
+ haspDevice.get_version(), long(millis() / 1000));
snprintf_P(buffer, sizeof(buffer), PSTR("\"espCanUpdate\":\"false\",\"page\":%u,\"numPages\":%u,"),
haspGetPage(), (HASP_NUM_PAGES));