From 79e1688149e246fdc4d0d1dfaff868f59e46482e Mon Sep 17 00:00:00 2001 From: Dawid Wojtas Date: Tue, 29 Nov 2022 11:08:30 +0100 Subject: [PATCH] [BH-1574][BH-1614] Fix the bedside lamp and brightness in the alarm Now the bedside lamp has lower priority than the pre-wake up and main alarm. It means that front light will be changed according to alarm settings. Fix front light brightness calculation for pre-wake up and main alarm. --- harmony_changelog.md | 1 + .../ScreenLightControlParameters.hpp | 10 ++- .../ScreenLightControlMessage.hpp | 32 +++----- .../alarms/src/actions/FrontlightAction.cpp | 77 +++++++++++++------ .../models/FrontlightModel.cpp | 12 +-- .../alarm_settings/AlarmSettingsModel.cpp | 4 +- .../services/evtmgr/EventManager.cpp | 10 +-- .../backlight-handler/BacklightHandler.cpp | 19 ++++- .../backlight-handler/BacklightHandler.hpp | 8 +- 9 files changed, 105 insertions(+), 68 deletions(-) diff --git a/harmony_changelog.md b/harmony_changelog.md index 0ef954e607a99997d76889be99b7c076e1700a39..7b08abfb5461a02af2efba340bf5c1e2d04b8a6a 100644 --- a/harmony_changelog.md +++ b/harmony_changelog.md @@ -30,6 +30,7 @@ * Add loop mode ### Fixed +* Brightness calculation for alarms #### Home Screen: * Centering of battery indicator. diff --git a/module-services/service-evtmgr/screen-light-control/ScreenLightControlParameters.hpp b/module-services/service-evtmgr/screen-light-control/ScreenLightControlParameters.hpp index 5f06b48b4a80e820a0b9b5e52b1d03d75b89fb7c..c921b7c039c1a37266d58b7e617a427866f6f63d 100644 --- a/module-services/service-evtmgr/screen-light-control/ScreenLightControlParameters.hpp +++ b/module-services/service-evtmgr/screen-light-control/ScreenLightControlParameters.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -8,6 +8,14 @@ namespace screen_light_control { + // Sender which send light request + enum class Sender + { + Other, + AlarmPrewakeup, + Alarm + }; + /// Modes in which front light can operate enum class ScreenLightMode { diff --git a/module-services/service-evtmgr/service-evtmgr/ScreenLightControlMessage.hpp b/module-services/service-evtmgr/service-evtmgr/ScreenLightControlMessage.hpp index 0ad80170b1e7c70ce5b459cd1b026fdacd93bc3f..6e56faea8a1d7ec8a8e0b7ae0384e8c783d7dc2f 100644 --- a/module-services/service-evtmgr/service-evtmgr/ScreenLightControlMessage.hpp +++ b/module-services/service-evtmgr/service-evtmgr/ScreenLightControlMessage.hpp @@ -11,15 +11,18 @@ namespace sevm { - class ScreenLightSettingsControlMessage : public sys::DataMessage + class ScreenLightControlMessage : public sys::DataMessage { const screen_light_control::Action action; std::optional params; + const screen_light_control::Sender sender; public: - explicit ScreenLightSettingsControlMessage( - screen_light_control::Action act, std::optional params = std::nullopt) - : sys::DataMessage(MessageType::ScreenLightControlAction), action(act), params{std::move(params)} + explicit ScreenLightControlMessage(screen_light_control::Action act, + std::optional params = std::nullopt, + screen_light_control::Sender sender = screen_light_control::Sender::Other) + : sys::DataMessage(MessageType::ScreenLightControlAction), + action(act), params{std::move(params)}, sender{sender} {} [[nodiscard]] auto getAction() const noexcept -> screen_light_control::Action @@ -31,27 +34,10 @@ namespace sevm { return params; } - }; - - class ScreenLightControlMessage : public sys::DataMessage - { - const screen_light_control::Action action; - std::optional params; - public: - explicit ScreenLightControlMessage(screen_light_control::Action act, - std::optional params = std::nullopt) - : sys::DataMessage(MessageType::ScreenLightControlAction), action(act), params{std::move(params)} - {} - - [[nodiscard]] auto getAction() const noexcept -> screen_light_control::Action + [[nodiscard]] auto getSender() const noexcept -> screen_light_control::Sender { - return action; - } - - [[nodiscard]] auto getParams() const noexcept -> const std::optional & - { - return params; + return sender; } }; diff --git a/products/BellHybrid/alarms/src/actions/FrontlightAction.cpp b/products/BellHybrid/alarms/src/actions/FrontlightAction.cpp index b0e96693b3e34e24fe30695e1e8771c16844b599..f53a78ce7b9c05dbd553f875fcc1aeef742a292a 100644 --- a/products/BellHybrid/alarms/src/actions/FrontlightAction.cpp +++ b/products/BellHybrid/alarms/src/actions/FrontlightAction.cpp @@ -15,10 +15,29 @@ namespace alarms { namespace { + screen_light_control::Sender translateDependency(FrontlightAction::SettingsDependency dependency) + { + screen_light_control::Sender sender; + + switch (dependency) { + case FrontlightAction::SettingsDependency::AlarmClock: + sender = screen_light_control::Sender::Alarm; + break; + case FrontlightAction::SettingsDependency::Prewakeup: + sender = screen_light_control::Sender::AlarmPrewakeup; + break; + case FrontlightAction::SettingsDependency::None: + default: + sender = screen_light_control::Sender::Other; + break; + } + return sender; + } + class ManualFrontlightAction : public AbstractAlarmAction { public: - explicit ManualFrontlightAction(sys::Service &service); + explicit ManualFrontlightAction(sys::Service &service, FrontlightAction::SettingsDependency dependency); bool execute() override; bool turnOff() override; @@ -27,12 +46,14 @@ namespace alarms sys::Service &service; settings::Settings settings; + FrontlightAction::SettingsDependency settingsDependency; }; class LinearProgressFrontlightAction : public AbstractAlarmAction { public: - explicit LinearProgressFrontlightAction(sys::Service &service); + explicit LinearProgressFrontlightAction(sys::Service &service, + FrontlightAction::SettingsDependency dependency); bool execute() override; bool turnOff() override; @@ -41,16 +62,17 @@ namespace alarms sys::Service &service; settings::Settings settings; + FrontlightAction::SettingsDependency settingsDependency; }; - std::unique_ptr createFrontlightImplementation(sys::Service &service, - FrontlightAction::Mode mode) + std::unique_ptr createFrontlightImplementation( + sys::Service &service, FrontlightAction::Mode mode, FrontlightAction::SettingsDependency settingsDependency) { switch (mode) { case FrontlightAction::Mode::Manual: - return std::make_unique(service); + return std::make_unique(service, settingsDependency); case FrontlightAction::Mode::LinearProgress: - return std::make_unique(service); + return std::make_unique(service, settingsDependency); } return nullptr; } @@ -58,8 +80,8 @@ namespace alarms FrontlightAction::FrontlightAction(sys::Service &service, Mode mode, SettingsDependency settingsDependency) : service{service}, settingsDependency{settingsDependency}, - pimpl{createFrontlightImplementation(service, mode)}, settings{ - service::ServiceProxy{service.weak_from_this()}} + pimpl{createFrontlightImplementation(service, mode, settingsDependency)}, settings{service::ServiceProxy{ + service.weak_from_this()}} {} bool FrontlightAction::execute() @@ -116,12 +138,14 @@ namespace alarms settings.getValue(bell::settings::Alarm::brightness, settings::SettingsScope::Global); screen_light_control::ManualModeParameters params{}; - params.manualModeBrightness = frontlight_utils::fixedValToPercentage(std::stoi(brightnessString)); + params.manualModeBrightness = utils::toNumeric(brightnessString); return params; } - ManualFrontlightAction::ManualFrontlightAction(sys::Service &service) : service{service} + ManualFrontlightAction::ManualFrontlightAction(sys::Service &service, + FrontlightAction::SettingsDependency dependency) + : service{service}, settingsDependency{dependency} { settings.init(service::ServiceProxy{service.weak_from_this()}); } @@ -129,21 +153,26 @@ namespace alarms bool ManualFrontlightAction::execute() { auto params = prepareParameters(); - service.bus.sendUnicast(std::make_shared( - screen_light_control::Action::turnOn, screen_light_control::Parameters{params}), - service::name::evt_manager); + auto sender = translateDependency(settingsDependency); + service.bus.sendUnicast( + std::make_shared( + screen_light_control::Action::turnOn, screen_light_control::Parameters{params}, sender), + service::name::evt_manager); return true; } bool ManualFrontlightAction::turnOff() { - service.bus.sendUnicast( - std::make_shared(screen_light_control::Action::turnOff), - service::name::evt_manager); + auto sender = translateDependency(settingsDependency); + service.bus.sendUnicast(std::make_shared( + screen_light_control::Action::turnOff, std::nullopt, sender), + service::name::evt_manager); return true; } - LinearProgressFrontlightAction::LinearProgressFrontlightAction(sys::Service &service) : service{service} + LinearProgressFrontlightAction::LinearProgressFrontlightAction(sys::Service &service, + FrontlightAction::SettingsDependency dependency) + : service{service}, settingsDependency{dependency} { settings.init(service::ServiceProxy{service.weak_from_this()}); } @@ -151,9 +180,11 @@ namespace alarms bool LinearProgressFrontlightAction::execute() { const auto params = prepareParameters(); + auto sender = translateDependency(settingsDependency); service.bus.sendUnicast(std::make_shared(params), service::name::evt_manager); - service.bus.sendUnicast(std::make_shared(screen_light_control::Action::turnOn), + service.bus.sendUnicast(std::make_shared( + screen_light_control::Action::turnOn, std::nullopt, sender), service::name::evt_manager); return true; } @@ -175,8 +206,7 @@ namespace alarms startFunction.target = 10.0f; endFunction.duration = secondTargetDuration; - endFunction.target = frontlight_utils::fixedValToPercentage(std::stoi(brightnessString)); - ; + endFunction.target = utils::toNumeric(brightnessString); params.startBrightnessValue = 0.0f; params.brightnessHysteresis = 0.0f; @@ -187,9 +217,10 @@ namespace alarms bool LinearProgressFrontlightAction::turnOff() { - service.bus.sendUnicast( - std::make_shared(screen_light_control::Action::turnOff), - service::name::evt_manager); + auto sender = translateDependency(settingsDependency); + service.bus.sendUnicast(std::make_shared( + screen_light_control::Action::turnOff, std::nullopt, sender), + service::name::evt_manager); return true; } diff --git a/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.cpp b/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.cpp index d7948ab62fc8a6b21eb555d1e7b4742216844635..0a1be2133313de7c331a76a2a42ee9b34b6aea06 100644 --- a/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.cpp +++ b/products/BellHybrid/apps/application-bell-settings/models/FrontlightModel.cpp @@ -35,17 +35,17 @@ namespace app::bell_settings } void FrontlightModel::setStatus(bool onOff) { - app->bus.sendUnicast(std::make_shared( + app->bus.sendUnicast(std::make_shared( onOff ? screen_light_control::Action::turnOn : screen_light_control::Action::turnOff), service::name::evt_manager); } void FrontlightModel::setMode(screen_light_control::ScreenLightMode mode) { - app->bus.sendUnicast(std::make_shared( - mode == screen_light_control::ScreenLightMode::Automatic - ? screen_light_control::Action::enableAutomaticMode - : screen_light_control::Action::disableAutomaticMode), - service::name::evt_manager); + app->bus.sendUnicast( + std::make_shared(mode == screen_light_control::ScreenLightMode::Automatic + ? screen_light_control::Action::enableAutomaticMode + : screen_light_control::Action::disableAutomaticMode), + service::name::evt_manager); } void FrontlightModel::setBrightness(frontlight_utils::Brightness value) { diff --git a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsModel.cpp b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsModel.cpp index 6b437bf4017275572f1338b84bda974579cc07d5..818e07f84791315326b2b6436d642d2f6df57475 100644 --- a/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsModel.cpp +++ b/products/BellHybrid/apps/application-bell-settings/models/alarm_settings/AlarmSettingsModel.cpp @@ -50,13 +50,13 @@ namespace app::bell_settings void AlarmFrontlightModel::setValue(frontlight_utils::Brightness value) { - const auto valStr = std::to_string(value); + const auto valStr = std::to_string(frontlight_utils::fixedValToPercentage(value)); settings.setValue(bell::settings::Alarm::brightness, valStr, settings::SettingsScope::Global); } frontlight_utils::Brightness AlarmFrontlightModel::getValue() const { const auto str = settings.getValue(bell::settings::Alarm::brightness, settings::SettingsScope::Global); - return std::stoi(str); + return frontlight_utils::percentageToFixedVal(std::stoi(str)); } } // namespace app::bell_settings diff --git a/products/BellHybrid/services/evtmgr/EventManager.cpp b/products/BellHybrid/services/evtmgr/EventManager.cpp index 4c152f5fcb4eca4356a49c7f016ea60912a6901d..26355922c891c5bcf0a1ba9e3a0b3be0f4753899 100644 --- a/products/BellHybrid/services/evtmgr/EventManager.cpp +++ b/products/BellHybrid/services/evtmgr/EventManager.cpp @@ -87,17 +87,11 @@ void EventManager::initProductEvents() { backlightHandler.init(); - connect(typeid(sevm::ScreenLightSettingsControlMessage), [&](sys::Message *msgl) { - auto *m = static_cast(msgl); - const auto params = m->getParams(); - backlightHandler.processScreenRequest(m->getAction(), params.value_or(screen_light_control::Parameters())); - return sys::msgHandled(); - }); - connect(typeid(sevm::ScreenLightControlMessage), [&](sys::Message *msgl) { auto *m = static_cast(msgl); const auto params = m->getParams(); - backlightHandler.screenRequest(m->getAction(), params.value_or(screen_light_control::Parameters())); + backlightHandler.processRequest( + m->getAction(), params.value_or(screen_light_control::Parameters()), m->getSender()); return sys::msgHandled(); }); diff --git a/products/BellHybrid/services/evtmgr/backlight-handler/BacklightHandler.cpp b/products/BellHybrid/services/evtmgr/backlight-handler/BacklightHandler.cpp index d0fd8b67626f97551c512dbc5e508ce6b08240d4..e73caab2859badbc21d689cf5cde76eee3456790 100644 --- a/products/BellHybrid/services/evtmgr/backlight-handler/BacklightHandler.cpp +++ b/products/BellHybrid/services/evtmgr/backlight-handler/BacklightHandler.cpp @@ -101,10 +101,25 @@ namespace backlight backlightType = type; } - void Handler::screenRequest(screen_light_control::Action action, const screen_light_control::Parameters ¶ms) + void Handler::processRequest(screen_light_control::Action action, + const screen_light_control::Parameters ¶ms, + screen_light_control::Sender sender) { - if (backlightType == Type::Frontlight) { + switch (sender) { + case screen_light_control::Sender::AlarmPrewakeup: + case screen_light_control::Sender::Alarm: + switch (action) { + case screen_light_control::Action::turnOff: + backlightType = Type::Frontlight; + break; + default: + break; + } processScreenRequest(action, params); + break; + default: + processScreenRequest(action, params); + break; } } diff --git a/products/BellHybrid/services/evtmgr/include/evtmgr/backlight-handler/BacklightHandler.hpp b/products/BellHybrid/services/evtmgr/include/evtmgr/backlight-handler/BacklightHandler.hpp index 2b5bce46d9bf894b7471cca5f90962f5d80a973c..12ef15c566814eb357ad42d3a1698d0077633f61 100644 --- a/products/BellHybrid/services/evtmgr/include/evtmgr/backlight-handler/BacklightHandler.hpp +++ b/products/BellHybrid/services/evtmgr/include/evtmgr/backlight-handler/BacklightHandler.hpp @@ -33,13 +33,15 @@ namespace backlight public: Handler(std::shared_ptr settings, sys::Service *parent); - void init() override; - void handleKeyPressed(int key = 0); void handleScreenLight(Type type); - void screenRequest(screen_light_control::Action action, const screen_light_control::Parameters ¶ms); + void processRequest(screen_light_control::Action action, + const screen_light_control::Parameters ¶ms, + screen_light_control::Sender sender); + + void init() override; void processScreenRequest(screen_light_control::Action action, const screen_light_control::Parameters ¶ms) override;