From 5a0767786b96cc3eb8178171d605edd23a4a41d6 Mon Sep 17 00:00:00 2001 From: Maxim Prokhorov Date: Mon, 18 Mar 2024 02:54:12 +0300 Subject: [PATCH] ws: module clean-up --- code/espurna/alexa.cpp | 2 +- code/espurna/api_common.cpp | 6 ++++-- code/espurna/button.cpp | 10 ++++++++-- code/espurna/curtain_kingart.cpp | 6 ++++-- code/espurna/debug.cpp | 4 +++- code/espurna/domoticz.cpp | 4 ++-- code/espurna/garland.cpp | 2 +- code/espurna/homeassistant.cpp | 2 +- code/espurna/influxdb.cpp | 6 ++++-- code/espurna/led.cpp | 7 +++++-- code/espurna/light.cpp | 12 ++++++++---- code/espurna/lightfox.cpp | 2 +- code/espurna/mqtt.cpp | 9 ++++++--- code/espurna/nofuss.cpp | 6 ++++-- code/espurna/ntp.cpp | 6 ++++-- code/espurna/ota_web.cpp | 4 +++- code/espurna/relay.cpp | 9 ++++++--- code/espurna/rfbridge.cpp | 17 ++++++++++------- code/espurna/rfm69.cpp | 6 ++++-- code/espurna/rpnrules.cpp | 7 +++++-- code/espurna/scheduler.cpp | 8 +++++--- code/espurna/sensor.cpp | 20 ++++++++++---------- code/espurna/sensor.h | 2 +- code/espurna/telnet.cpp | 9 +++++---- code/espurna/terminal.cpp | 4 +++- code/espurna/thermostat.cpp | 2 +- code/espurna/thingspeak.cpp | 2 +- code/espurna/ws.cpp | 12 ++++++------ code/espurna/ws.h | 2 +- 29 files changed, 117 insertions(+), 71 deletions(-) diff --git a/code/espurna/alexa.cpp b/code/espurna/alexa.cpp index b2ab148e..6d8ea19f 100644 --- a/code/espurna/alexa.cpp +++ b/code/espurna/alexa.cpp @@ -112,7 +112,7 @@ void migrate(int version) { #if WEB_SUPPORT namespace web { -PROGMEM_STRING(Prefix, "alexa"); +STRING_VIEW_INLINE(Prefix, "alexa"); void onVisible(JsonObject& root) { wsPayloadModule(root, Prefix); diff --git a/code/espurna/api_common.cpp b/code/espurna/api_common.cpp index 092c1dd6..2188ed77 100644 --- a/code/espurna/api_common.cpp +++ b/code/espurna/api_common.cpp @@ -65,12 +65,14 @@ String key() { namespace web { #if WEB_SUPPORT +STRING_VIEW_INLINE(Prefix, "api"); + bool onKeyCheck(espurna::StringView key, const JsonVariant&) { - return espurna::settings::query::samePrefix(key, STRING_VIEW("api")); + return espurna::settings::query::samePrefix(key, Prefix); } void onVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("api")); + wsPayloadModule(root, Prefix); } void onConnected(JsonObject& root) { diff --git a/code/espurna/button.cpp b/code/espurna/button.cpp index 87fdc986..57a8027c 100644 --- a/code/espurna/button.cpp +++ b/code/espurna/button.cpp @@ -625,6 +625,12 @@ constexpr ButtonProvider provider(size_t index) { } // namespace build namespace settings { +namespace { + +STRING_VIEW_INLINE(Prefix, "btn"); + +} // namespace + namespace internal { namespace { @@ -824,7 +830,7 @@ static constexpr espurna::settings::query::IndexedSetting IndexedSettings[] PROG }; bool checkSamePrefix(StringView key) { - return espurna::settings::query::samePrefix(key, STRING_VIEW("btn")); + return espurna::settings::query::samePrefix(key, espurna::button::settings::Prefix); } String findValueFrom(StringView key) { @@ -1052,7 +1058,7 @@ void _buttonRelayAction(size_t id, ButtonAction action) { namespace { void _buttonWebSocketOnVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("btn")); + wsPayloadModule(root, espurna::button::settings::Prefix); } void _buttonWebSocketOnConnected(JsonObject& root) { diff --git a/code/espurna/curtain_kingart.cpp b/code/espurna/curtain_kingart.cpp index 705b0db6..66a58e9f 100644 --- a/code/espurna/curtain_kingart.cpp +++ b/code/espurna/curtain_kingart.cpp @@ -378,6 +378,8 @@ void _curtainMQTTCallback(unsigned int type, espurna::StringView topic, espurna: #if WEB_SUPPORT +STRING_VIEW_INLINE(CurtainPrefix, "curtain"); + //------------------------------------------------------------------------------ void _curtainWebSocketOnConnected(JsonObject& root) { root["curtainType"] = getSetting("curtainType", "0"); @@ -386,7 +388,7 @@ void _curtainWebSocketOnConnected(JsonObject& root) { //------------------------------------------------------------------------------ bool _curtainWebSocketOnKeyCheck(espurna::StringView key, const JsonVariant& value) { - return espurna::settings::query::samePrefix(key, STRING_VIEW("curtain")); + return espurna::settings::query::samePrefix(key, CurtainPrefix); } //------------------------------------------------------------------------------ @@ -422,7 +424,7 @@ void _curtainWebSocketOnAction(uint32_t client_id, const char * action, JsonObje } void _curtainWebSocketOnVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("curtain")); + wsPayloadModule(root, CurtainPrefix); } #endif //WEB_SUPPORT diff --git a/code/espurna/debug.cpp b/code/espurna/debug.cpp index 3f7a5c03..4e88ff33 100644 --- a/code/espurna/debug.cpp +++ b/code/espurna/debug.cpp @@ -591,8 +591,10 @@ void send(const char* message, size_t len, Timestamp timestamp) { #if DEBUG_WEB_SUPPORT namespace web { +STRING_VIEW_INLINE(Prefix, "dbg"); + void onVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("dbg")); + wsPayloadModule(root, Prefix); } } // namespace web diff --git a/code/espurna/domoticz.cpp b/code/espurna/domoticz.cpp index 40bcf9f9..4c02cac7 100644 --- a/code/espurna/domoticz.cpp +++ b/code/espurna/domoticz.cpp @@ -434,7 +434,7 @@ void send(unsigned char index, const espurna::sensor::Value& value) { namespace web { namespace { -PROGMEM_STRING(Prefix, "dcz"); +STRING_VIEW_INLINE(Prefix, "dcz"); bool onKeyCheck(espurna::StringView key, const JsonVariant&) { return espurna::settings::query::samePrefix(key, Prefix); @@ -472,7 +472,7 @@ void onConnected(JsonObject& root) { #endif #if SENSOR_SUPPORT - sensorWebSocketMagnitudes(root, PSTR("dcz"), [](JsonArray& out, size_t index) { + sensorWebSocketMagnitudes(root, Prefix, [](JsonArray& out, size_t index) { out.add(settings::magnitudeIdx(index).value()); }); #endif diff --git a/code/espurna/garland.cpp b/code/espurna/garland.cpp index 186e6485..558d9d5d 100644 --- a/code/espurna/garland.cpp +++ b/code/espurna/garland.cpp @@ -217,7 +217,7 @@ void setDefault() { #if WEB_SUPPORT //------------------------------------------------------------------------------ void _garlandWebSocketOnVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("garland")); + wsPayloadModule(root, STRING_VIEW("garland")); } void _garlandWebSocketOnConnected(JsonObject& root) { diff --git a/code/espurna/homeassistant.cpp b/code/espurna/homeassistant.cpp index 4a6f03e3..82c462fc 100644 --- a/code/espurna/homeassistant.cpp +++ b/code/espurna/homeassistant.cpp @@ -119,7 +119,7 @@ static constexpr espurna::settings::query::Setting Settings[] PROGMEM { {keys::BirthPayload, settings::birthPayload}, }; -PROGMEM_STRING(Prefix, "ha"); +STRING_VIEW_INLINE(Prefix, "ha"); bool checkSamePrefix(espurna::StringView key) { return espurna::settings::query::samePrefix(key, Prefix); diff --git a/code/espurna/influxdb.cpp b/code/espurna/influxdb.cpp index 963c1ea1..9f52245a 100644 --- a/code/espurna/influxdb.cpp +++ b/code/espurna/influxdb.cpp @@ -132,12 +132,14 @@ void _idbInitClient() { // ----------------------------------------------------------------------------- +STRING_VIEW_INLINE(IdbPrefix, "idb"); + bool _idbWebSocketOnKeyCheck(espurna::StringView key, const JsonVariant& value) { - return espurna::settings::query::samePrefix(key, STRING_VIEW("idb")); + return espurna::settings::query::samePrefix(key, IdbPrefix); } void _idbWebSocketOnVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("idb")); + wsPayloadModule(root, IdbPrefix); } void _idbWebSocketOnConnected(JsonObject& root) { diff --git a/code/espurna/led.cpp b/code/espurna/led.cpp index d95cc524..098edfc1 100644 --- a/code/espurna/led.cpp +++ b/code/espurna/led.cpp @@ -597,6 +597,9 @@ bool update { false }; } // namespace internal namespace settings { + +STRING_VIEW_INLINE(Prefix, "led"); + namespace query { namespace internal { @@ -628,7 +631,7 @@ static constexpr espurna::settings::query::IndexedSetting IndexedSettings[] PROG }; bool checkSamePrefix(StringView key) { - return espurna::settings::query::samePrefix(key, STRING_VIEW("led")); + return espurna::settings::query::samePrefix(key, Prefix); } String findValueFrom(StringView key) { @@ -991,7 +994,7 @@ bool onKeyCheck(StringView key, const JsonVariant&) { } void onVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("led")); + wsPayloadModule(root, settings::Prefix); } void onConnected(JsonObject& root) { diff --git a/code/espurna/light.cpp b/code/espurna/light.cpp index b5fd1066..727b0b44 100644 --- a/code/espurna/light.cpp +++ b/code/espurna/light.cpp @@ -2571,10 +2571,14 @@ void _lightApiSetup() { namespace { +STRING_VIEW_INLINE(PrefixLightLong, "light"); +STRING_VIEW_INLINE(PrefixLightShort, "lt"); +STRING_VIEW_INLINE(PrefixLightUse, "use"); + bool _lightWebSocketOnKeyCheck(espurna::StringView key, const JsonVariant&) { - return key.startsWith(STRING_VIEW("light")) - || key.startsWith(STRING_VIEW("use")) - || key.startsWith(STRING_VIEW("lt")); + return key.startsWith(PrefixLightLong) + || key.startsWith(PrefixLightShort) + || key.startsWith(PrefixLightUse); } void _lightWebSocketStatus(JsonObject& root) { @@ -2605,7 +2609,7 @@ void _lightWebSocketStatus(JsonObject& root) { } void _lightWebSocketOnVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("light")); + wsPayloadModule(root, PrefixLightLong); JsonObject& light = root.createNestedObject("light"); #if RELAY_SUPPORT diff --git a/code/espurna/lightfox.cpp b/code/espurna/lightfox.cpp index 4c81cc47..b50434f8 100644 --- a/code/espurna/lightfox.cpp +++ b/code/espurna/lightfox.cpp @@ -142,7 +142,7 @@ RelayProviderBasePtr make_relay(size_t index) { #if WEB_SUPPORT namespace web { -PROGMEM_STRING(Module, "lightfox"); +STRING_VIEW_INLINE(Module, "lightfox"); void onVisible(JsonObject& root) { wsPayloadModule(root, Module); diff --git a/code/espurna/mqtt.cpp b/code/espurna/mqtt.cpp index 356c7220..e6e93b5a 100644 --- a/code/espurna/mqtt.cpp +++ b/code/espurna/mqtt.cpp @@ -205,6 +205,9 @@ constexpr uint16_t mfln() { } // namespace build namespace settings { + +STRING_VIEW_INLINE(Prefix, "mqtt"); + namespace keys { namespace { @@ -404,7 +407,7 @@ static constexpr espurna::settings::query::Setting Settings[] PROGMEM { }; bool checkSamePrefix(espurna::StringView key) { - return espurna::settings::query::samePrefix(key, STRING_VIEW("mqtt")); + return espurna::settings::query::samePrefix(key, settings::Prefix); } String findValueFrom(espurna::StringView key) { @@ -931,9 +934,9 @@ bool _mqttWebSocketOnKeyCheck(espurna::StringView key, const JsonVariant&) { } void _mqttWebSocketOnVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("mqtt")); + wsPayloadModule(root, mqtt::settings::Prefix); #if SECURE_CLIENT != SECURE_CLIENT_NONE - wsPayloadModule(root, PSTR("mqttssl")); + wsPayloadModule(root, STRING_VIEW("mqttssl")); #endif } diff --git a/code/espurna/nofuss.cpp b/code/espurna/nofuss.cpp index 476a2abc..3879b4c8 100644 --- a/code/espurna/nofuss.cpp +++ b/code/espurna/nofuss.cpp @@ -28,12 +28,14 @@ bool _nofussEnabled = false; #if WEB_SUPPORT +STRING_VIEW_INLINE(NofussPrefix, "nofuss"); + bool _nofussWebSocketOnKeyCheck(espurna::StringView key, const JsonVariant& value) { - return espurna::settings::query::samePrefix(key, STRING_VIEW("nofuss")); + return espurna::settings::query::samePrefix(key, NofussPrefix); } void _nofussWebSocketOnVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("nofuss")); + wsPayloadModule(root, NofussPrefix); } void _nofussWebSocketOnConnected(JsonObject& root) { diff --git a/code/espurna/ntp.cpp b/code/espurna/ntp.cpp index bdf16748..41e9f48b 100644 --- a/code/espurna/ntp.cpp +++ b/code/espurna/ntp.cpp @@ -85,6 +85,8 @@ constexpr bool dhcp() { namespace settings { +STRING_VIEW_INLINE(Prefix, "ntp"); + espurna::duration::Seconds startDelay() { return std::clamp( getSetting("ntpStartDelay", build::StartDelay), @@ -380,11 +382,11 @@ time_t now() { namespace web { bool onKeyCheck(StringView key, const JsonVariant&) { - return espurna::settings::query::samePrefix(key, STRING_VIEW("ntp")); + return espurna::settings::query::samePrefix(key, settings::Prefix); } void onVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("ntp")); + wsPayloadModule(root, settings::Prefix); } void onData(JsonObject& root) { diff --git a/code/espurna/ota_web.cpp b/code/espurna/ota_web.cpp index 57f39ade..a480df49 100644 --- a/code/espurna/ota_web.cpp +++ b/code/espurna/ota_web.cpp @@ -19,8 +19,10 @@ namespace ota { namespace web { namespace { +STRING_VIEW_INLINE(Prefix, "ota"); + void onVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("ota")); + wsPayloadModule(root, Prefix); } void sendResponse(AsyncWebServerRequest *request, int code, const String& payload = "") { diff --git a/code/espurna/relay.cpp b/code/espurna/relay.cpp index d515a3e0..4aef0a60 100644 --- a/code/espurna/relay.cpp +++ b/code/espurna/relay.cpp @@ -2294,8 +2294,11 @@ void _relayConfigure() { namespace { +STRING_VIEW_INLINE(RelayPrefix, "relay"); +STRING_VIEW_INLINE(MultiRelay, "multirelay"); + bool _relayWebSocketOnKeyCheck(espurna::StringView key, const JsonVariant&) { - return espurna::settings::query::samePrefix(key, STRING_VIEW("relay")); + return espurna::settings::query::samePrefix(key, RelayPrefix); } void _relayWebSocketUpdate(JsonObject& root) { @@ -2332,14 +2335,14 @@ void _relayWebSocketOnVisible(JsonObject& root) { } if (relays > 1) { - wsPayloadModule(root, PSTR("multirelay")); + wsPayloadModule(root, MultiRelay); root[FPSTR(espurna::relay::settings::keys::Sync)] = espurna::settings::internal::serialize(espurna::relay::settings::syncMode()); root[FPSTR(espurna::relay::settings::keys::Interlock)] = espurna::relay::settings::interlockDelay().count(); } - wsPayloadModule(root, PSTR("relay")); + wsPayloadModule(root, RelayPrefix); } void _relayWebSocketOnConnected(JsonObject& root) { diff --git a/code/espurna/rfbridge.cpp b/code/espurna/rfbridge.cpp index 40ddd7f7..d95b579d 100644 --- a/code/espurna/rfbridge.cpp +++ b/code/espurna/rfbridge.cpp @@ -336,19 +336,22 @@ void _rfbSendImpl(const RfbMessage& message); namespace rfbridge { namespace settings { + +STRING_VIEW_INLINE(Prefix, "rfb"); + namespace keys { -PROGMEM_STRING(On, "rfbON"); -PROGMEM_STRING(Off, "rfbOFF"); +STRING_VIEW_INLINE(On, "rfbON"); +STRING_VIEW_INLINE(Off, "rfbOFF"); } // namespace keys String off(size_t id) { - return getSetting({FPSTR(keys::Off), id}); + return getSetting({keys::Off, id}); } String on(size_t id) { - return getSetting({FPSTR(keys::On), id}); + return getSetting({keys::On, id}); } void store(espurna::StringView prefix, size_t id, const String& value) { @@ -393,9 +396,9 @@ String _rfbRetrieve(size_t id, bool status) { #if WEB_SUPPORT void _rfbWebSocketOnVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("rfb")); + wsPayloadModule(root, rfbridge::settings::Prefix); #if RFB_PROVIDER == RFB_PROVIDER_RCSWITCH - wsPayloadModule(root, PSTR("rfbdirect")); + wsPayloadModule(root, STRING_VIEW("rfbdirect")); #endif } @@ -459,7 +462,7 @@ void _rfbWebSocketOnAction(uint32_t client_id, const char* action, JsonObject& d } bool _rfbWebSocketOnKeyCheck(espurna::StringView key, const JsonVariant& value) { - return espurna::settings::query::samePrefix(key, STRING_VIEW("rfb")); + return espurna::settings::query::samePrefix(key, rfbridge::settings::Prefix); } #endif // WEB_SUPPORT diff --git a/code/espurna/rfm69.cpp b/code/espurna/rfm69.cpp index 9db2c1be..f59e4bf6 100644 --- a/code/espurna/rfm69.cpp +++ b/code/espurna/rfm69.cpp @@ -215,8 +215,10 @@ void _rfm69Clear() { #if WEB_SUPPORT +STRING_VIEW_INLINE(Rfm69Prefix, "rfm69"); + void _rfm69WebSocketOnVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("rfm69")); + wsPayloadModule(root, Rfm69Prefix); } void _rfm69WebSocketOnConnected(JsonObject& root) { @@ -242,7 +244,7 @@ void _rfm69WebSocketOnConnected(JsonObject& root) { } bool _rfm69WebSocketOnKeyCheck(espurna::StringView key, const JsonVariant& value) { - return espurna::settings::query::samePrefix(key, STRING_VIEW("rfm69")); + return espurna::settings::query::samePrefix(key, Rfm69Prefix); } void _rfm69WebSocketOnAction(uint32_t client_id, const char* action, JsonObject& data) { diff --git a/code/espurna/rpnrules.cpp b/code/espurna/rpnrules.cpp index fc8c342c..f81ddfcb 100644 --- a/code/espurna/rpnrules.cpp +++ b/code/espurna/rpnrules.cpp @@ -109,6 +109,9 @@ constexpr unsigned long delay() { } // namespace build namespace settings { + +STRING_VIEW_INLINE(Prefix, "rpn"); + namespace keys { PROGMEM_STRING(Sticky, "rpnSticky"); @@ -391,11 +394,11 @@ size_t countMqttNames() { #endif bool onKeyCheck(espurna::StringView key, const JsonVariant& value) { - return espurna::settings::query::samePrefix(key, STRING_VIEW("rpn")); + return espurna::settings::query::samePrefix(key, settings::Prefix); } void onVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("rpn")); + wsPayloadModule(root, settings::Prefix); } void onConnected(JsonObject& root) { diff --git a/code/espurna/scheduler.cpp b/code/espurna/scheduler.cpp index 416ba355..4ad6a0c3 100644 --- a/code/espurna/scheduler.cpp +++ b/code/espurna/scheduler.cpp @@ -259,6 +259,9 @@ void show(const Schedules& schedules) { } // namespace debug namespace settings { + +PROGMEM_STRING(Prefix, "sch"); + namespace keys { namespace { @@ -414,7 +417,6 @@ void migrate(int version) { namespace query { bool checkSamePrefix(StringView key) { - PROGMEM_STRING(Prefix, "sch"); return espurna::settings::query::samePrefix(key, Prefix); } @@ -574,12 +576,12 @@ void setup() { namespace web { bool onKey(StringView key, const JsonVariant&) { - return espurna::settings::query::samePrefix(key, STRING_VIEW("sch")); + return espurna::settings::query::samePrefix(key, settings::Prefix); } void onVisible(JsonObject& root) { if (schedulable()) { - wsPayloadModule(root, PSTR("sch")); + wsPayloadModule(root, settings::Prefix); } } diff --git a/code/espurna/sensor.cpp b/code/espurna/sensor.cpp index 4c66677a..c42d950f 100644 --- a/code/espurna/sensor.cpp +++ b/code/espurna/sensor.cpp @@ -3563,47 +3563,47 @@ void onAction(uint32_t client_id, const char* action, JsonObject& data) { } void onVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("sns")); + wsPayloadModule(root, STRING_VIEW("sns")); for (auto sensor : internal::sensors) { if (isEmon(sensor)) { - wsPayloadModule(root, PSTR("emon")); + wsPayloadModule(root, STRING_VIEW("emon")); } if (isAnalog(sensor)) { - wsPayloadModule(root, PSTR("analog")); + wsPayloadModule(root, STRING_VIEW("analog")); } switch (sensor->id()) { #if HLW8012_SUPPORT case SENSOR_HLW8012_ID: - wsPayloadModule(root, PSTR("hlw")); + wsPayloadModule(root, STRING_VIEW("hlw")); break; #endif #if CSE7766_SUPPORT case SENSOR_CSE7766_ID: - wsPayloadModule(root, PSTR("cse")); + wsPayloadModule(root, STRING_VIEW("cse")); break; #endif #if PZEM004T_SUPPORT || PZEM004TV30_SUPPORT case SENSOR_PZEM004T_ID: case SENSOR_PZEM004TV30_ID: - wsPayloadModule(root, PSTR("pzem")); + wsPayloadModule(root, STRING_VIEW("pzem")); break; #endif #if PULSEMETER_SUPPORT case SENSOR_PULSEMETER_ID: - wsPayloadModule(root, PSTR("pm")); + wsPayloadModule(root, STRING_VIEW("pm")); break; #endif } } } -void module(JsonObject& root, const char* prefix, SensorWebSocketMagnitudesCallback callback) { +void module(JsonObject& root, StringView prefix, SensorWebSocketMagnitudesCallback callback) { espurna::web::ws::EnumerablePayload payload{root, STRING_VIEW("magnitudes-module")}; auto& container = payload.root(); - container[F("prefix")] = FPSTR(prefix); + container[STRING_VIEW("prefix")] = prefix; payload(STRING_VIEW("values"), magnitude::count(), {{STRING_VIEW("type"), [](JsonArray& out, size_t index) { @@ -4351,7 +4351,7 @@ void setup() { #if WEB_SUPPORT // Used by modules to generate magnitude_id<->module_id mapping for the WebUI // Prefix controls the UI templates, supplied callback should retrieve module-specific value Id -void sensorWebSocketMagnitudes(JsonObject& root, const char* prefix, SensorWebSocketMagnitudesCallback callback) { +void sensorWebSocketMagnitudes(JsonObject& root, espurna::StringView prefix, SensorWebSocketMagnitudesCallback callback) { espurna::sensor::web::module(root, prefix, callback); } #endif // WEB_SUPPORT diff --git a/code/espurna/sensor.h b/code/espurna/sensor.h index 0d5f3f56..5ab5d1c7 100644 --- a/code/espurna/sensor.h +++ b/code/espurna/sensor.h @@ -287,7 +287,7 @@ espurna::sensor::Value magnitudeReadValue(unsigned char index); espurna::sensor::Value magnitudeReportValue(unsigned char index); using SensorWebSocketMagnitudesCallback = void(*)(JsonArray&, size_t); -void sensorWebSocketMagnitudes(JsonObject& root, const char* prefix, SensorWebSocketMagnitudesCallback); +void sensorWebSocketMagnitudes(JsonObject& root, espurna::StringView prefix, SensorWebSocketMagnitudesCallback); espurna::StringView sensorList(); void sensorSetup(); diff --git a/code/espurna/telnet.cpp b/code/espurna/telnet.cpp index e9860fa2..57de6af2 100644 --- a/code/espurna/telnet.cpp +++ b/code/espurna/telnet.cpp @@ -77,9 +77,10 @@ constexpr bool authentication() { } // namespace build namespace settings { -namespace keys { -PROGMEM_STRING(Prefix, "telnet"); +STRING_VIEW_INLINE(Prefix, "telnet"); + +namespace keys { PROGMEM_STRING(Station, "telnetSTA"); PROGMEM_STRING(Authentication, "telnetAuth"); @@ -126,7 +127,7 @@ static constexpr std::array Settings PROGM }}; bool checkExactPrefix(StringView key) { - return espurna::settings::query::samePrefix(key, keys::Prefix); + return espurna::settings::query::samePrefix(key, settings::Prefix); } String findValueFrom(StringView key) { @@ -1045,7 +1046,7 @@ bool onKeyCheck(espurna::StringView key, const JsonVariant&) { } void onVisible(JsonObject& root) { - wsPayloadModule(root, settings::keys::Prefix); + wsPayloadModule(root, settings::Prefix); } void onConnected(JsonObject& root) { diff --git a/code/espurna/terminal.cpp b/code/espurna/terminal.cpp index 839be487..eb034148 100644 --- a/code/espurna/terminal.cpp +++ b/code/espurna/terminal.cpp @@ -659,8 +659,10 @@ private: constexpr espurna::duration::Seconds Output::Timeout; constexpr espurna::duration::Milliseconds Output::Wait; +STRING_VIEW_INLINE(Prefix, "cmd"); + void onVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("cmd")); + wsPayloadModule(root, Prefix); } void onAction(uint32_t client_id, const char* action, JsonObject& data) { diff --git a/code/espurna/thermostat.cpp b/code/espurna/thermostat.cpp index 1e5ce0d6..171da756 100644 --- a/code/espurna/thermostat.cpp +++ b/code/espurna/thermostat.cpp @@ -773,7 +773,7 @@ void displayLoop() { #if WEB_SUPPORT //------------------------------------------------------------------------------ void _thermostatWebSocketOnVisible(JsonObject& root) { - wsPayloadModule(root, PSTR("thermostat")); + wsPayloadModule(root, STRING_VIEW("thermostat")); } void _thermostatWebSocketOnConnected(JsonObject& root) { diff --git a/code/espurna/thingspeak.cpp b/code/espurna/thingspeak.cpp index 82de1ba1..b49b68cf 100644 --- a/code/espurna/thingspeak.cpp +++ b/code/espurna/thingspeak.cpp @@ -679,7 +679,7 @@ void loop() { namespace web { namespace { -PROGMEM_STRING(Prefix, "tspk"); +STRING_VIEW_INLINE(Prefix, "tspk"); bool onKeyCheck(StringView key, const JsonVariant&) { return espurna::settings::query::samePrefix(key, Prefix); diff --git a/code/espurna/ws.cpp b/code/espurna/ws.cpp index 9135975a..52720717 100644 --- a/code/espurna/ws.cpp +++ b/code/espurna/ws.cpp @@ -828,12 +828,12 @@ bool wsConnected(uint32_t client_id) { return _ws.hasClient(client_id); } -void wsPayloadModule(JsonObject& root, const char* name) { - PROGMEM_STRING(Key, "modulesVisible"); - JsonArray& modules = root.containsKey(FPSTR(Key)) - ? root[FPSTR(Key)] - : root.createNestedArray(FPSTR(Key)); - modules.add(FPSTR(name)); +void wsPayloadModule(JsonObject& root, espurna::StringView name) { + STRING_VIEW_INLINE(Key, "modulesVisible"); + JsonArray& modules = root.containsKey(Key) + ? root[Key] + : root.createNestedArray(Key); + modules.add(name); } ws_callbacks_t& wsRegister() { diff --git a/code/espurna/ws.h b/code/espurna/ws.h index 6405c8f3..3846def5 100644 --- a/code/espurna/ws.h +++ b/code/espurna/ws.h @@ -117,7 +117,7 @@ bool wsConnected(uint32_t client_id); // Append module's name that webui can make it's widgets visible // (for the payload in `on_send` callback(s)) -void wsPayloadModule(JsonObject& root, const char* name); +void wsPayloadModule(JsonObject&, espurna::StringView); // Access to our module-specific lifetime callbacks. // Expected usage is through the on() methods