From e69576aa609062726aa5a06c5aa5dea655fded94 Mon Sep 17 00:00:00 2001 From: Wojtek Rzepecki Date: Tue, 16 Mar 2021 10:38:51 +0100 Subject: [PATCH] [EGD-6192] Add torch hw control v2 Change behavior of torch control according to newest design. --- module-apps/Application.cpp | 30 +++------- module-apps/Application.hpp | 6 +- module-apps/windows/AppWindow.cpp | 4 +- module-bsp/board/linux/torch/torch.cpp | 6 +- module-bsp/board/rt1051/bsp/torch/torch.cpp | 6 +- module-bsp/bsp/torch/torch.hpp | 58 ++++++++----------- .../service-evtmgr/EventManager.cpp | 48 ++++++++------- .../service-evtmgr/messages/Message.cpp | 4 +- .../service-evtmgr/EVMessages.hpp | 24 ++------ .../service-evtmgr/EventManager.hpp | 2 + .../service-evtmgr/service-evtmgr/Message.hpp | 3 +- module-sys/Service/Message.cpp | 7 ++- module-sys/Service/Message.hpp | 1 + source/MessageType.hpp | 2 - 14 files changed, 92 insertions(+), 109 deletions(-) diff --git a/module-apps/Application.cpp b/module-apps/Application.cpp index 84451dbd6235de08c6c897890e6d43039e51ebd8..d843e09ca563c1fe4a5b73338e389ddf00382ef4 100644 --- a/module-apps/Application.cpp +++ b/module-apps/Application.cpp @@ -588,30 +588,16 @@ namespace app return AudioServiceAPI::GetSetting(this, audio::Setting::Volume, volume); } - void Application::toggleTorch(bsp::torch::ColourTemperature temperature) + void Application::toggleTorchOnOff() { - using namespace bsp; - - auto message = std::make_shared(torch::Action::getState); - auto retGetState = bus.sendUnicast(std::move(message), service::name::evt_manager, pdMS_TO_TICKS(1500)); - if (retGetState.first == sys::ReturnCodes::Success) { - auto msgGetState = dynamic_cast(retGetState.second.get()); - if (msgGetState == nullptr) { - return; - } - auto msgSetState = std::make_shared(torch::Action::setState); + auto msg = std::make_shared(); + bus.sendUnicast(std::move(msg), service::name::evt_manager); + } - switch (msgGetState->state) { - case torch::State::off: - msgSetState->state = torch::State::on; - msgSetState->colourTemp = temperature; - break; - case torch::State::on: - msgSetState->state = torch::State::off; - break; - } - bus.sendUnicast(msgSetState, service::name::evt_manager); - } + void Application::toggleTorchColor() + { + auto msg = std::make_shared(); + bus.sendUnicast(std::move(msg), service::name::evt_manager); } void Application::requestAction(sys::Service *sender, diff --git a/module-apps/Application.hpp b/module-apps/Application.hpp index 34a10a317ff10165409ee01e2be9da7bdf403762..606b782a8219bc86d661be0f5ea270fc1446d92f 100644 --- a/module-apps/Application.hpp +++ b/module-apps/Application.hpp @@ -20,7 +20,6 @@ #include // for list #include // for allocator, map #include // for make_shared -#include // for State, State... #include // for uint32_t #include // for string #include // for move, pair @@ -150,6 +149,7 @@ namespace app /// perform all necessary cleanup and request System Manager to close it. DEACTIVATING }; + /// c_str() function for Application::State static const char *stateStr(State st); @@ -290,7 +290,9 @@ namespace app } audio::RetCode getCurrentVolume(audio::Volume &volume); - void toggleTorch(bsp::torch::ColourTemperature temperature); + void toggleTorchOnOff(); + + void toggleTorchColor(); void cancelCallbacks(AsyncCallbackReceiver::Ptr receiver) override; diff --git a/module-apps/windows/AppWindow.cpp b/module-apps/windows/AppWindow.cpp index d41325969490b731e724e6264dc7f40982087e90..3c07c6447ce05208c60e593b3087a6652f90c7f9 100644 --- a/module-apps/windows/AppWindow.cpp +++ b/module-apps/windows/AppWindow.cpp @@ -162,11 +162,11 @@ namespace gui if (inputEvent.keyCode == KeyCode::KEY_TORCH) { if (inputEvent.isLongPress()) { - application->toggleTorch(bsp::torch::ColourTemperature::warmest); + application->toggleTorchOnOff(); return true; } else if (inputEvent.isShortPress()) { - application->toggleTorch(bsp::torch::ColourTemperature::coldest); + application->toggleTorchColor(); return true; } } diff --git a/module-bsp/board/linux/torch/torch.cpp b/module-bsp/board/linux/torch/torch.cpp index f5fff8d7bc064cd7421eef97e04c7f84abaa4c55..2121e85799119f6ee29c7f75655b8d56acc1c82d 100644 --- a/module-bsp/board/linux/torch/torch.cpp +++ b/module-bsp/board/linux/torch/torch.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "bsp/torch/torch.hpp" @@ -15,7 +15,7 @@ namespace bsp namespace torch { State state_simulated = State::off; - ColourTemperature currentColourTemp = warmest; + ColourTemperature currentColourTemp = ColourTemperature::warmest; int32_t init(xQueueHandle qHandle) { @@ -38,7 +38,7 @@ namespace bsp bool turn(State state, ColourTemperature colourTemp) { state_simulated = state; - if (colourTemp != no_change) { + if (colourTemp != ColourTemperature::noChange) { currentColourTemp = colourTemp; } diff --git a/module-bsp/board/rt1051/bsp/torch/torch.cpp b/module-bsp/board/rt1051/bsp/torch/torch.cpp index 27c071d02f1d14e4847e8a50be10a5331af09b6c..2d295e47305d228789d4f095bc303d555c083851 100644 --- a/module-bsp/board/rt1051/bsp/torch/torch.cpp +++ b/module-bsp/board/rt1051/bsp/torch/torch.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "bsp/torch/torch.hpp" @@ -24,7 +24,7 @@ namespace bsp std::shared_ptr gpio; const unsigned short max_current_mA = 150; - ColourTemperature currentColourTemp = warmest; + ColourTemperature currentColourTemp = ColourTemperature::warmest; int32_t init(xQueueHandle qHandle) { @@ -95,7 +95,7 @@ namespace bsp }; bool turn(State state, ColourTemperature colourTemp) { - if (colourTemp != no_change) { + if (colourTemp != ColourTemperature::noChange) { currentColourTemp = colourTemp; } diff --git a/module-bsp/bsp/torch/torch.hpp b/module-bsp/bsp/torch/torch.hpp index cbdd8dd0b48a67b94c110026cdb8cf862992a94a..c28a08d2e800e42104955671b571a1b43b8504dd 100644 --- a/module-bsp/bsp/torch/torch.hpp +++ b/module-bsp/bsp/torch/torch.hpp @@ -12,39 +12,29 @@ extern "C" #include "bsp/common.hpp" #include -namespace bsp +namespace bsp::torch { - namespace torch + enum class State { - enum class Action - { - getState, - setState, - toggle, - }; - - enum class State - { - on, - off, - }; - - enum ColourTemperature // Kelvin - { - no_change = 0, - warmest = 1800, - coldest = 6500, - }; - - int32_t init(xQueueHandle qHandle); - void deinit(); - - bool isPresent(void); - - bool turn(State state, ColourTemperature = no_change); - std::pair getState(); - ColourTemperature getColorTemp(); // rather only for cert - bool toggle(); - bool setCurrent(const unsigned short mA); - } // namespace torch -} // namespace bsp + on, + off, + }; + + enum class ColourTemperature // Kelvin + { + noChange = 0, + warmest = 1800, + coldest = 6500, + }; + + int32_t init(xQueueHandle qHandle); + void deinit(); + + bool isPresent(void); + + bool turn(State state, ColourTemperature = ColourTemperature::noChange); + std::pair getState(); + ColourTemperature getColorTemp(); + bool toggle(); + bool setCurrent(const unsigned short mA); +} // namespace bsp::torch diff --git a/module-services/service-evtmgr/EventManager.cpp b/module-services/service-evtmgr/EventManager.cpp index 151cc2e800bc8b19fe95dd201487c47963515ebd..4e89597537d627a280f4aa5422f0231eb542ae1c 100644 --- a/module-services/service-evtmgr/EventManager.cpp +++ b/module-services/service-evtmgr/EventManager.cpp @@ -171,26 +171,6 @@ sys::MessagePointer EventManager::DataReceivedHandler(sys::DataMessage *msgl, sy } handled = true; } - else if (msgl->messageType == MessageType::EVMTorchStateMessage) { - auto msg = dynamic_cast(msgl); - if (msg != nullptr) { - auto message = std::make_shared(msg->action); - - switch (msg->action) { - case bsp::torch::Action::getState: - std::tie(message->success, message->state) = bsp::torch::getState(); - message->colourTemp = bsp::torch::getColorTemp(); - break; - case bsp::torch::Action::setState: - message->success = bsp::torch::turn(msg->state, msg->colourTemp); - break; - case bsp::torch::Action::toggle: - message->success = bsp::torch::toggle(); - break; - } - return message; - } - } else if (msgl->messageType == MessageType::CellularTimeUpdated) { auto msg = dynamic_cast(msgl); if (msg != nullptr) { @@ -308,6 +288,16 @@ sys::ReturnCodes EventManager::InitHandler() return std::make_shared(); }); + connect(sevm::ToggleTorchOnOffMessage(), [&](sys::Message *) { + toggleTorchOnOff(); + return std::make_shared(); + }); + + connect(sevm::ToggleTorchColorMessage(), [&](sys::Message *) { + toggleTorchColor(); + return std::make_shared(); + }); + // initialize keyboard worker EventWorker = std::make_unique(this); @@ -419,3 +409,21 @@ bool EventManager::processVibraRequest(bsp::vibrator::Action act, sys::ms Repeti } return true; } + +void EventManager::toggleTorchOnOff() +{ + auto state = bsp::torch::getState(); + auto newState = (state.second == bsp::torch::State::off) ? bsp::torch::State::on : bsp::torch::State::off; + bsp::torch::turn(newState, bsp::torch::ColourTemperature::coldest); +} + +void EventManager::toggleTorchColor() +{ + auto state = bsp::torch::getState(); + if (state.second == bsp::torch::State::on) { + auto color = bsp::torch::getColorTemp(); + auto newColor = (color == bsp::torch::ColourTemperature::coldest) ? bsp::torch::ColourTemperature::warmest + : bsp::torch::ColourTemperature::coldest; + bsp::torch::turn(bsp::torch::State::on, newColor); + } +} diff --git a/module-services/service-evtmgr/messages/Message.cpp b/module-services/service-evtmgr/messages/Message.cpp index cde75dc79c1a67978eb6477c20b7d058e75ad80b..18a4b94012fa33f3b13f569d29f49a0170394f46 100644 --- a/module-services/service-evtmgr/messages/Message.cpp +++ b/module-services/service-evtmgr/messages/Message.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include @@ -10,4 +10,6 @@ namespace sevm { Message::Message(MessageType messageType) : DataMessage(messageType) {} + + Message::Message() = default; } // namespace sevm diff --git a/module-services/service-evtmgr/service-evtmgr/EVMessages.hpp b/module-services/service-evtmgr/service-evtmgr/EVMessages.hpp index 14cdead70cf5832713063c30bd264f831d9b0742..c57f685a5d15ef5180db90d0746d80c802576c78 100644 --- a/module-services/service-evtmgr/service-evtmgr/EVMessages.hpp +++ b/module-services/service-evtmgr/service-evtmgr/EVMessages.hpp @@ -123,25 +123,13 @@ namespace sevm bsp::cellular::status::value state = bsp::cellular::status::value::INACTIVE; }; - class TorchStateMessage : public Message - { - public: - TorchStateMessage(bsp::torch::Action direction) : Message(MessageType::EVMTorchStateMessage), action(direction) - {} - bsp::torch::Action action; - bsp::torch::State state = bsp::torch::State::off; - bsp::torch::ColourTemperature colourTemp = bsp::torch::ColourTemperature::no_change; - }; + class ToggleTorchOnOffMessage : public Message + {}; - class TorchStateResultMessage : public TorchStateMessage - { - public: - TorchStateResultMessage(bsp::torch::Action direction) : TorchStateMessage(direction) - {} - bool success = false; - }; + class ToggleTorchColorMessage : public Message + {}; - class KeypadBacklightMessage : public sys::Message + class KeypadBacklightMessage : public Message { public: explicit KeypadBacklightMessage(bsp::keypad_backlight::Action action) : action(action) @@ -150,7 +138,7 @@ namespace sevm bsp::keypad_backlight::Action action; }; - class KeypadBacklightResponseMessage : public sys::Message + class KeypadBacklightResponseMessage : public Message { public: KeypadBacklightResponseMessage() diff --git a/module-services/service-evtmgr/service-evtmgr/EventManager.hpp b/module-services/service-evtmgr/service-evtmgr/EventManager.hpp index 66aab3269afbb977aaa900e853a5bf123ac51650..ad8e67aeda24e14433b30d252ed52f33c2f4440c 100644 --- a/module-services/service-evtmgr/service-evtmgr/EventManager.hpp +++ b/module-services/service-evtmgr/service-evtmgr/EventManager.hpp @@ -32,6 +32,8 @@ class EventManager : public sys::Service void handleMinuteUpdate(time_t timestamp); bool processKeypadBacklightRequest(bsp::keypad_backlight::Action act); bool processVibraRequest(bsp::vibrator::Action act, sys::ms RepetitionTime = static_cast(1000)); + void toggleTorchOnOff(); + void toggleTorchColor(); std::shared_ptr settings; std::unique_ptr loggerTimer; diff --git a/module-services/service-evtmgr/service-evtmgr/Message.hpp b/module-services/service-evtmgr/service-evtmgr/Message.hpp index 36305f3f18203d9c950a7f4c0bbfeaac7eb0fa25..3d247bd80003f908fbca47d2b376a185a4c252bb 100644 --- a/module-services/service-evtmgr/service-evtmgr/Message.hpp +++ b/module-services/service-evtmgr/service-evtmgr/Message.hpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #pragma once @@ -11,5 +11,6 @@ namespace sevm struct Message : public sys::DataMessage { Message(MessageType messageType); + Message(); }; }; // namespace sevm diff --git a/module-sys/Service/Message.cpp b/module-sys/Service/Message.cpp index 4fde7d961f6ffacb92a84dab4e6e19f954baaf6f..c9c8bf537be76fd0f30c82857cca2b214486ae71 100644 --- a/module-sys/Service/Message.cpp +++ b/module-sys/Service/Message.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "Message.hpp" @@ -54,6 +54,11 @@ namespace sys type = Type::Data; } + DataMessage::DataMessage() : Message() + { + type = Type::Data; + } + ResponseMessage::ResponseMessage(ReturnCodes retCode, MessageType responseTo) : retCode(retCode), responseTo(responseTo) { diff --git a/module-sys/Service/Message.hpp b/module-sys/Service/Message.hpp index e1875cb7312eec340a6162f0fc6a0ad0bfc0de6b..9591bd09775e3efa513feef5f2a0e96f8745feba 100644 --- a/module-sys/Service/Message.hpp +++ b/module-sys/Service/Message.hpp @@ -92,6 +92,7 @@ namespace sys public: explicit DataMessage(MessageType messageType); explicit DataMessage(BusChannel channel); + DataMessage(); // This field must by provided by the class that inherits DataMessage MessageType messageType = MessageType::MessageTypeUninitialized; diff --git a/source/MessageType.hpp b/source/MessageType.hpp index dcafc086fc24624b3535be223fdd1341300fb5cc..494d9891a73859816b5c6ea98ba8c2e519ee92cf 100644 --- a/source/MessageType.hpp +++ b/source/MessageType.hpp @@ -181,8 +181,6 @@ enum class MessageType // rtc messages EVMMinuteUpdated, ///< This message is send to current focused application on every minute time change. EVMTimeUpdated, ///< This message is send on every time update. - // Torch messages - EVMTorchStateMessage, // cellular messages EVMGetBoard,