From 20619525bdaee77018af2bd643a1292882b1de42 Mon Sep 17 00:00:00 2001 From: Mateusz Piesta Date: Thu, 26 Aug 2021 14:20:44 +0200 Subject: [PATCH] [BH-791] Add temperature reading to EvtMgr Added temperature handling to the event manager. Added static API. --- image/user/db/settings_v2_002.sql | 3 ++- module-apps/apps-common/Temperature.hpp | 4 +-- .../service-evtmgr/EventManager.cpp | 3 +++ .../service-evtmgr/EventManagerCommon.hpp | 1 + .../BellHybrid/services/evtmgr/CMakeLists.txt | 9 +++++++ .../services/evtmgr/EventManager.cpp | 24 +++++++++++++++++ .../evtmgr/include/evtmgr/EventManager.hpp | 13 +++++++++- .../include/evtmgr/api/TemperatureApi.hpp | 11 ++++++++ .../services/evtmgr/internal/StaticData.cpp | 22 ++++++++++++++++ .../services/evtmgr/internal/StaticData.hpp | 26 +++++++++++++++++++ .../evtmgr/internal/TemperatureApi.cpp | 14 ++++++++++ 11 files changed, 126 insertions(+), 4 deletions(-) create mode 100644 products/BellHybrid/services/evtmgr/include/evtmgr/api/TemperatureApi.hpp create mode 100644 products/BellHybrid/services/evtmgr/internal/StaticData.cpp create mode 100644 products/BellHybrid/services/evtmgr/internal/StaticData.hpp create mode 100644 products/BellHybrid/services/evtmgr/internal/TemperatureApi.cpp diff --git a/image/user/db/settings_v2_002.sql b/image/user/db/settings_v2_002.sql index 1ee13df1f270fdff407dadff1772fc2fd67abdeb..00e05c29d12f952ab55bdc67ac231f42d0fe58ab 100644 --- a/image/user/db/settings_v2_002.sql +++ b/image/user/db/settings_v2_002.sql @@ -38,6 +38,7 @@ INSERT OR IGNORE INTO settings_tab (path, value) VALUES ('keypad_light_state', '0'), ('gs_current_timezone_name', ''), ('gs_current_timezone_rules', ''), - ('\ServiceTime\\gs_automatic_date_and_time_is_on', '1'); + ('\ServiceTime\\gs_automatic_date_and_time_is_on', '1'), + ('temperature_unit', 'C'); diff --git a/module-apps/apps-common/Temperature.hpp b/module-apps/apps-common/Temperature.hpp index c6e661d1ce68816d833d2fa59f59dcfe4846f35e..798b6e72e3ffa35732654196bcfa8fbc236e9b00 100644 --- a/module-apps/apps-common/Temperature.hpp +++ b/module-apps/apps-common/Temperature.hpp @@ -33,10 +33,10 @@ namespace gui::temperature inline std::optional strToUnit(std::string_view str) { - if (str == gui::temperature::celsiusDegreeSymbol) { + if ((str == gui::temperature::celsiusDegreeSymbol) || (str == celsiusSymbol)) { return gui::temperature::Temperature::Unit::Celsius; } - else if (str == gui::temperature::fahrenheitDegreeSymbol) { + else if ((str == gui::temperature::fahrenheitDegreeSymbol) || (str == fahrenheitSymbol)) { return gui::temperature::Temperature::Unit::Fahrenheit; } diff --git a/module-services/service-evtmgr/EventManager.cpp b/module-services/service-evtmgr/EventManager.cpp index eb57c7cd431de588dbff555408de837f9552bda6..28b2a556826bacea3310da0e15934df990830ed1 100644 --- a/module-services/service-evtmgr/EventManager.cpp +++ b/module-services/service-evtmgr/EventManager.cpp @@ -283,6 +283,9 @@ int EventManagerCommon::dumpLogsToFile() void EventManagerCommon::handleMinuteUpdate(time_t timestamp) { + if (onMinuteTick) { + onMinuteTick(timestamp); + } if (!targetApplication.empty()) { auto message = std::make_shared(MessageType::EVMMinuteUpdated); message->timestamp = timestamp; diff --git a/module-services/service-evtmgr/service-evtmgr/EventManagerCommon.hpp b/module-services/service-evtmgr/service-evtmgr/EventManagerCommon.hpp index 31a1f6bdadfa09c7a3ee00cbd5022563ce57ac49..7089fc6167cb9f06702e0838b695fec25aa7fd9c 100644 --- a/module-services/service-evtmgr/service-evtmgr/EventManagerCommon.hpp +++ b/module-services/service-evtmgr/service-evtmgr/EventManagerCommon.hpp @@ -35,6 +35,7 @@ class EventManagerCommon : public sys::Service sys::TimerHandle loggerTimer; protected: + std::function onMinuteTick; virtual void handleKeyEvent(sys::Message *msg); virtual void initProductEvents(); virtual auto createEventWorker() -> std::unique_ptr; diff --git a/products/BellHybrid/services/evtmgr/CMakeLists.txt b/products/BellHybrid/services/evtmgr/CMakeLists.txt index 399c793bc7feed6a2a3a52eef5f0b13d2f8fabfd..823fc11a2c010dfc41389fb09643225414c867c9 100644 --- a/products/BellHybrid/services/evtmgr/CMakeLists.txt +++ b/products/BellHybrid/services/evtmgr/CMakeLists.txt @@ -1,19 +1,28 @@ add_library(evtmgr STATIC) +add_library(bell::evtmgr ALIAS evtmgr) target_sources(evtmgr PRIVATE EventManager.cpp + internal/StaticData.cpp + internal/TemperatureApi.cpp + + internal/StaticData.hpp PUBLIC include/evtmgr/EventManager.hpp + include/evtmgr/api/TemperatureApi.hpp ) target_include_directories(evtmgr + PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR} PUBLIC $ ) target_link_libraries(evtmgr PRIVATE + module-bsp module-utils service-evtmgr ) diff --git a/products/BellHybrid/services/evtmgr/EventManager.cpp b/products/BellHybrid/services/evtmgr/EventManager.cpp index ec59d8b6d2a51c09a52540dbf124f04e0c27c05b..45bde8699f76d1f198f9c78c1ec2a8dfd7fa7474 100644 --- a/products/BellHybrid/services/evtmgr/EventManager.cpp +++ b/products/BellHybrid/services/evtmgr/EventManager.cpp @@ -1,4 +1,28 @@ // Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md +#include "internal/StaticData.hpp" + #include +#include + +namespace +{ + auto updateTemperature = [](hal::temperature::AbstractTemperatureSource &source) { + const auto temp = source.read(); + if (not temp) { + LOG_FATAL("Error during reading from temperature source"); + } + else { + evtmgr::internal::StaticData::get().setCurrentTemperature(*temp); + }; + }; +} + +EventManager::EventManager(const std::string &name) + : EventManagerCommon(name), temperatureSource{hal::temperature::AbstractTemperatureSource::Factory::create()} +{ + updateTemperature(*temperatureSource); + + onMinuteTick = [this](const time_t) { updateTemperature(*temperatureSource); }; +} diff --git a/products/BellHybrid/services/evtmgr/include/evtmgr/EventManager.hpp b/products/BellHybrid/services/evtmgr/include/evtmgr/EventManager.hpp index e6b1f457abde62e459ca59070cbfbe539a7f986e..b4b3b1415a22893c9dd593e003c57b31679d5078 100644 --- a/products/BellHybrid/services/evtmgr/include/evtmgr/EventManager.hpp +++ b/products/BellHybrid/services/evtmgr/include/evtmgr/EventManager.hpp @@ -5,8 +5,19 @@ #include +namespace hal::temperature +{ + class AbstractTemperatureSource; +} + class EventManager : public EventManagerCommon -{}; +{ + public: + explicit EventManager(const std::string &name = service::name::evt_manager); + + private: + std::shared_ptr temperatureSource; +}; namespace sys { diff --git a/products/BellHybrid/services/evtmgr/include/evtmgr/api/TemperatureApi.hpp b/products/BellHybrid/services/evtmgr/include/evtmgr/api/TemperatureApi.hpp new file mode 100644 index 0000000000000000000000000000000000000000..3b8c2cf672fe0f8bb6666d02049e5b838bed0cc7 --- /dev/null +++ b/products/BellHybrid/services/evtmgr/include/evtmgr/api/TemperatureApi.hpp @@ -0,0 +1,11 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#pragma once + +#include + +namespace evtmgr::api +{ + hal::temperature::AbstractTemperatureSource::Temperature getCurrentTemperature(); +} // namespace evtmgr::api diff --git a/products/BellHybrid/services/evtmgr/internal/StaticData.cpp b/products/BellHybrid/services/evtmgr/internal/StaticData.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ccafae1b594c2b4595b67021e97a509508f48df9 --- /dev/null +++ b/products/BellHybrid/services/evtmgr/internal/StaticData.cpp @@ -0,0 +1,22 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#include "StaticData.hpp" + +namespace evtmgr::internal +{ + + void StaticData::setCurrentTemperature(hal::temperature::AbstractTemperatureSource::Temperature temperature) + { + currentTemperature = temperature; + } + hal::temperature::AbstractTemperatureSource::Temperature StaticData::getCurrentTemperature() const + { + return currentTemperature; + } + StaticData &StaticData::get() + { + static auto instance = StaticData{}; + return instance; + } +} // namespace evtmgr::internal diff --git a/products/BellHybrid/services/evtmgr/internal/StaticData.hpp b/products/BellHybrid/services/evtmgr/internal/StaticData.hpp new file mode 100644 index 0000000000000000000000000000000000000000..d66d22b35d448df02a9eaf7994c00cdc28f58abb --- /dev/null +++ b/products/BellHybrid/services/evtmgr/internal/StaticData.hpp @@ -0,0 +1,26 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#pragma once + +#include + +namespace evtmgr::internal +{ + class StaticData + { + public: + StaticData(const StaticData &) = delete; + StaticData &operator=(const StaticData &) = delete; + + static StaticData &get(); + + void setCurrentTemperature(hal::temperature::AbstractTemperatureSource::Temperature temperature); + [[nodiscard]] hal::temperature::AbstractTemperatureSource::Temperature getCurrentTemperature() const; + + private: + StaticData() = default; + + hal::temperature::AbstractTemperatureSource::Temperature currentTemperature; + }; +} // namespace evtmgr::internal diff --git a/products/BellHybrid/services/evtmgr/internal/TemperatureApi.cpp b/products/BellHybrid/services/evtmgr/internal/TemperatureApi.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d576be4d2dc17ad2094387aae34008e9712aab74 --- /dev/null +++ b/products/BellHybrid/services/evtmgr/internal/TemperatureApi.cpp @@ -0,0 +1,14 @@ +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +#include "internal/StaticData.hpp" + +#include + +namespace evtmgr::api +{ + hal::temperature::AbstractTemperatureSource::Temperature getCurrentTemperature() + { + return internal::StaticData::get().getCurrentTemperature(); + } +} // namespace evtmgr::api