From be63db93789ae19068ce9f1aff68ae976adeb8fa Mon Sep 17 00:00:00 2001 From: Reinder Feenstra Date: Sun, 26 Dec 2021 10:13:45 +0100 Subject: [PATCH] ecos: added mode and duration to switch --- server/src/hardware/protocol/ecos/messages.hpp | 1 + .../hardware/protocol/ecos/object/switch.cpp | 17 +++++++++++++++-- .../hardware/protocol/ecos/object/switch.hpp | 11 +++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/server/src/hardware/protocol/ecos/messages.hpp b/server/src/hardware/protocol/ecos/messages.hpp index 13f523d4..d4b4b183 100644 --- a/server/src/hardware/protocol/ecos/messages.hpp +++ b/server/src/hardware/protocol/ecos/messages.hpp @@ -60,6 +60,7 @@ struct Option { static constexpr std::string_view addr = "addr"; static constexpr std::string_view dir = "dir"; + static constexpr std::string_view duration = "duration"; static constexpr std::string_view go = "go"; static constexpr std::string_view info = "info"; static constexpr std::string_view mode = "mode"; diff --git a/server/src/hardware/protocol/ecos/object/switch.cpp b/server/src/hardware/protocol/ecos/object/switch.cpp index 976668e1..5a44905f 100644 --- a/server/src/hardware/protocol/ecos/object/switch.cpp +++ b/server/src/hardware/protocol/ecos/object/switch.cpp @@ -27,7 +27,7 @@ namespace ECoS { -const std::initializer_list Switch::options = {Option::addr, Option::protocol, Option::state, Option::mode}; +const std::initializer_list Switch::options = {Option::addr, Option::protocol, Option::state, Option::mode, Option::duration}; static bool fromString(std::string_view text, Switch::Protocol& protocol) { @@ -40,6 +40,17 @@ static bool fromString(std::string_view text, Switch::Protocol& protocol) return true; } +static bool fromString(std::string_view text, Switch::Mode& mode) +{ + if(text == "SWITCH") + mode = Switch::Mode::Switch; + else if(text == "PULSE") + mode = Switch::Mode::Pulse; + else + return false; + return true; +} + Switch::Switch(Kernel& kernel, uint16_t id) : Object(kernel, id) { @@ -57,7 +68,9 @@ Switch::Switch(Kernel& kernel, const Line& data) if(auto state = values.find(Option::state); state != values.end()) {} if(auto mode = values.find(Option::mode); mode != values.end()) - {} + fromString(mode->second, m_mode); + if(auto duration = values.find(Option::duration); duration != values.end()) + fromChars(duration->second, m_duration); } bool Switch::receiveReply(const Reply& reply) diff --git a/server/src/hardware/protocol/ecos/object/switch.hpp b/server/src/hardware/protocol/ecos/object/switch.hpp index 11a44ea4..f6434ff8 100644 --- a/server/src/hardware/protocol/ecos/object/switch.hpp +++ b/server/src/hardware/protocol/ecos/object/switch.hpp @@ -41,9 +41,18 @@ class Switch final : public Object MM = 2, }; + enum class Mode + { + Unknown = 0, + Switch = 1, + Pulse = 2, + }; + private: uint16_t m_address = 0; Protocol m_protocol = Protocol::Unknown; + Mode m_mode = Mode::Unknown; + uint16_t m_duration = 0; public: static const std::initializer_list options; @@ -56,6 +65,8 @@ class Switch final : public Object uint16_t address() const { return m_address; } Protocol protocol() const { return m_protocol; } + Mode mode() const { return m_mode; } + uint16_t duration() const { return m_duration; } }; }