From 7513629c0cc84cc4fd8b127bdef37ac46c873e60 Mon Sep 17 00:00:00 2001 From: Wojtek Rzepecki Date: Thu, 11 Feb 2021 15:17:31 +0100 Subject: [PATCH] [EGD-5028] Add batt critical level db Battery critical level sotred in database. --- image/user/db/settings_v2_002.sql | 3 ++- .../agents/settings/SystemSettings.hpp | 5 ++++ .../service-evtmgr/EventManager.cpp | 5 ++-- .../service-evtmgr/WorkerEvent.cpp | 10 ++++++-- .../battery-level-check/BatteryLevelCheck.cpp | 24 +++++++++++++++---- .../battery-level-check/BatteryLevelCheck.hpp | 5 +++- .../ScreenLightControl.cpp | 4 ++-- .../ScreenLightControl.hpp | 4 ++-- .../service-evtmgr/EventManager.hpp | 2 ++ .../service-evtmgr/WorkerEvent.hpp | 2 ++ 10 files changed, 49 insertions(+), 15 deletions(-) diff --git a/image/user/db/settings_v2_002.sql b/image/user/db/settings_v2_002.sql index 9ba2daf2e567e419f79d7381db56b24efc5ef051..be416647ba2667d6b818b11b7792283d44477943 100644 --- a/image/user/db/settings_v2_002.sql +++ b/image/user/db/settings_v2_002.sql @@ -21,5 +21,6 @@ INSERT OR IGNORE INTO settings_tab (path, value) VALUES ('bt_state', '0'), ('bt_device_visibility', '0'), ('bt_device_name', 'PurePhone'), - ('bt_bonded_devices', ''); + ('bt_bonded_devices', ''), + ('battery_critical_level', '10'); diff --git a/module-services/service-db/agents/settings/SystemSettings.hpp b/module-services/service-db/agents/settings/SystemSettings.hpp index b36e91813835b61904a32283ba40ad0736808bb7..2ab317fece8ea721fc8f678b3ce0555a7115e2f8 100644 --- a/module-services/service-db/agents/settings/SystemSettings.hpp +++ b/module-services/service-db/agents/settings/SystemSettings.hpp @@ -40,4 +40,9 @@ namespace settings constexpr inline auto apn_list = "cl_apn_list"; } // namespace Cellular + namespace Battery + { + constexpr inline auto batteryCriticalLevel = "battery_critical_level"; + } // namespace Battery + }; // namespace settings diff --git a/module-services/service-evtmgr/EventManager.cpp b/module-services/service-evtmgr/EventManager.cpp index 201e2bae0e19667380789dec8fa481a816046070..741947edf3e579cde64338c55191912c19a5fcec 100644 --- a/module-services/service-evtmgr/EventManager.cpp +++ b/module-services/service-evtmgr/EventManager.cpp @@ -43,7 +43,8 @@ #include EventManager::EventManager(const std::string &name) - : sys::Service(name), screenLightControl(std::make_unique(this)) + : sys::Service(name), settings(std::make_shared(this)), + screenLightControl(std::make_unique(settings, this)) { LOG_INFO("[%s] Initializing", name.c_str()); alarmTimestamp = 0; @@ -322,7 +323,7 @@ sys::ReturnCodes EventManager::InitHandler() list.push_back(qLightSensor); list.push_back(qChargerDetect); - EventWorker->init(list); + EventWorker->init(list, settings); EventWorker->run(); return sys::ReturnCodes::Success; diff --git a/module-services/service-evtmgr/WorkerEvent.cpp b/module-services/service-evtmgr/WorkerEvent.cpp index b36db2f4ec24c7e22f8c2956ad70d3b9bc34144d..53e61a8029a1477bb1aab3abbaca2a0080416fb6 100644 --- a/module-services/service-evtmgr/WorkerEvent.cpp +++ b/module-services/service-evtmgr/WorkerEvent.cpp @@ -225,11 +225,15 @@ bool WorkerEvent::init(std::list queuesList) bsp::rtc_GetCurrentTimestamp(×tamp); bsp::rtc_SetMinuteAlarm(timestamp); - battery_level_check::init(service); - return true; } +void WorkerEvent::init(std::list queuesList, std::shared_ptr settings) +{ + init(queuesList); + battery_level_check::init(service, settings); +} + bool WorkerEvent::deinit(void) { Worker::deinit(); @@ -241,6 +245,8 @@ bool WorkerEvent::deinit(void) bsp::eink_frontlight::deinit(); bsp::light_sensor::deinit(); + battery_level_check::deinit(); + return true; } diff --git a/module-services/service-evtmgr/battery-level-check/BatteryLevelCheck.cpp b/module-services/service-evtmgr/battery-level-check/BatteryLevelCheck.cpp index 5df86cd3d2e66012bed452be68d5324a0daa240e..7a60b3972fbeb0b853439dcf342bf1cc4bb6cd2c 100644 --- a/module-services/service-evtmgr/battery-level-check/BatteryLevelCheck.cpp +++ b/module-services/service-evtmgr/battery-level-check/BatteryLevelCheck.cpp @@ -4,8 +4,9 @@ #include "BatteryLevelCheck.hpp" #include "service-evtmgr/BatteryMessages.hpp" #include "SystemManager/Constants.hpp" - +#include #include +#include namespace battery_level_check { @@ -20,12 +21,12 @@ namespace battery_level_check CheckState state = CheckState::InitialCheck; - constexpr inline auto DEFAULT_LEVEL = 10; - - unsigned int batteryLevelCritical = DEFAULT_LEVEL; + unsigned int batteryLevelCritical = 0; sys::Service *parentService = nullptr; + std::shared_ptr settings = nullptr; + bool isBatteryLevelCritical(unsigned int level) { return level < batteryLevelCritical; @@ -44,9 +45,20 @@ namespace battery_level_check } } // namespace - void init(sys::Service *service) + void init(sys::Service *service, std::shared_ptr &setts) { parentService = service; + settings = setts; + settings->registerValueChange( + settings::Battery::batteryCriticalLevel, + [&](const std::string &value) { batteryLevelCritical = utils::getNumericValue(value); }, + settings::SettingsScope::Global); + } + + void deinit() + { + settings->unregisterValueChange(settings::Battery::batteryCriticalLevel, settings::SettingsScope::Global); + settings.reset(); } void checkBatteryLevelCritical() @@ -86,6 +98,8 @@ namespace battery_level_check void setBatteryCriticalLevel(unsigned int level) { batteryLevelCritical = level; + settings->setValue( + settings::Battery::batteryCriticalLevel, utils::to_string(level), settings::SettingsScope::Global); checkBatteryLevelCritical(); } diff --git a/module-services/service-evtmgr/battery-level-check/BatteryLevelCheck.hpp b/module-services/service-evtmgr/battery-level-check/BatteryLevelCheck.hpp index 050035d046405f7ad535678893c17f568208eb73..5607ed3162e41a063886e0c59a7181b7c2702033 100644 --- a/module-services/service-evtmgr/battery-level-check/BatteryLevelCheck.hpp +++ b/module-services/service-evtmgr/battery-level-check/BatteryLevelCheck.hpp @@ -4,6 +4,7 @@ #pragma once #include +#include namespace sys { @@ -12,7 +13,9 @@ namespace sys namespace battery_level_check { - void init(sys::Service *service); + void init(sys::Service *service, std::shared_ptr &setts); + + void deinit(); void checkBatteryLevelCritical(); diff --git a/module-services/service-evtmgr/screen-light-control/ScreenLightControl.cpp b/module-services/service-evtmgr/screen-light-control/ScreenLightControl.cpp index 848158547808b9039c1adccd2168c617959ee611..c149e4434db019a222abe48040640f3ad9e62deb 100644 --- a/module-services/service-evtmgr/screen-light-control/ScreenLightControl.cpp +++ b/module-services/service-evtmgr/screen-light-control/ScreenLightControl.cpp @@ -33,8 +33,8 @@ namespace screen_light_control } } // namespace - ScreenLightControl::ScreenLightControl(sys::Service *parent) - : settings(std::make_unique(parent)) + ScreenLightControl::ScreenLightControl(std::shared_ptr settings, sys::Service *parent) + : settings(settings) { controlTimer = std::make_unique("LightControlTimer", parent, CONTROL_TIMER_MS); readoutTimer = std::make_unique("LightSensorReadoutTimer", parent, READOUT_TIMER_MS); diff --git a/module-services/service-evtmgr/screen-light-control/ScreenLightControl.hpp b/module-services/service-evtmgr/screen-light-control/ScreenLightControl.hpp index 7eb2a1263645c0e3ae4da6d1e650fbaf1d96ef13..a8dd2e8950d43a507861fc0b81e3869751637f84 100644 --- a/module-services/service-evtmgr/screen-light-control/ScreenLightControl.hpp +++ b/module-services/service-evtmgr/screen-light-control/ScreenLightControl.hpp @@ -56,7 +56,7 @@ namespace screen_light_control class ScreenLightControl { public: - explicit ScreenLightControl(sys::Service *parent); + explicit ScreenLightControl(std::shared_ptr settings, sys::Service *parent); ~ScreenLightControl(); void processRequest(Action action, const Parameters ¶ms); @@ -98,7 +98,7 @@ namespace screen_light_control screen_light_control::ScreenLightMode automaticMode = ScreenLightMode::Manual; bsp::eink_frontlight::BrightnessPercentage brightnessValue = 0.0; - std::unique_ptr settings; + std::shared_ptr settings; }; } // namespace screen_light_control diff --git a/module-services/service-evtmgr/service-evtmgr/EventManager.hpp b/module-services/service-evtmgr/service-evtmgr/EventManager.hpp index 22b7b33d635e1d247b5f3a1824fb96c603532b0b..5d3cc7e3a5a36ee18e1f90796cbbe4f384f0daed 100644 --- a/module-services/service-evtmgr/service-evtmgr/EventManager.hpp +++ b/module-services/service-evtmgr/service-evtmgr/EventManager.hpp @@ -31,6 +31,8 @@ class EventManager : public sys::Service void GetNextAlarmTimestamp(time_t timestamp); bool processKeypadBacklightRequest(bsp::keypad_backlight::Action act); + std::shared_ptr settings; + protected: std::unique_ptr EventWorker; // application where key events are sent. This is also only application that is allowed to change keyboard long diff --git a/module-services/service-evtmgr/service-evtmgr/WorkerEvent.hpp b/module-services/service-evtmgr/service-evtmgr/WorkerEvent.hpp index cc357f6cbc2e0cc63ee95e54b35cd828bcbb1af5..39290f6a29975764b2428f644726b370cc30dca6 100644 --- a/module-services/service-evtmgr/service-evtmgr/WorkerEvent.hpp +++ b/module-services/service-evtmgr/service-evtmgr/WorkerEvent.hpp @@ -70,6 +70,8 @@ class WorkerEvent : public sys::Worker virtual bool init(std::list queuesList) override; virtual bool deinit() override; + void init(std::list queuesList, std::shared_ptr settings); + /** * This method is called from thread when new message arrives in queue. * @param queueID Index of the queue in the queues vector.