From 5fb105d0b1173bb48609f0730be382e5ac5e4009 Mon Sep 17 00:00:00 2001 From: Bartosz Cichocki Date: Tue, 6 Apr 2021 11:47:30 +0200 Subject: [PATCH] [EGD-6214] Add slider position reading after disabling tethering To be able to set proper phone mode changed by the slider during tethering, the forced readout of slider position has been added --- .../board/linux/magnetometer/magnetometer.cpp | 4 ++- .../rt1051/bsp/magnetometer/magnetometer.cpp | 6 +++- module-bsp/bsp/magnetometer/magnetometer.hpp | 1 + .../service-evtmgr/EventManager.cpp | 14 ++++++--- .../service-evtmgr/WorkerEvent.cpp | 30 ++++++++++++++++--- .../service-evtmgr/EVMessages.hpp | 3 ++ .../service-evtmgr/WorkerEvent.hpp | 6 ++-- module-sys/SystemManager/SystemManager.cpp | 6 ++++ 8 files changed, 58 insertions(+), 12 deletions(-) diff --git a/module-bsp/board/linux/magnetometer/magnetometer.cpp b/module-bsp/board/linux/magnetometer/magnetometer.cpp index 7c409f6dc712b606583d1ac88323b8eb2a43f5e7..9097f468c55a9e0f141a3ceaa163ce0ec5c5a885 100644 --- a/module-bsp/board/linux/magnetometer/magnetometer.cpp +++ b/module-bsp/board/linux/magnetometer/magnetometer.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/magnetometer/magnetometer.hpp" @@ -35,5 +35,7 @@ namespace bsp void enableIRQ() {} + void resetCurrentParsedValue() + {} } // namespace magnetometer } // namespace bsp diff --git a/module-bsp/board/rt1051/bsp/magnetometer/magnetometer.cpp b/module-bsp/board/rt1051/bsp/magnetometer/magnetometer.cpp index 69a81d9c8a70dee5e900cff41ef0ef0cf2a9d354..8ace71dafaf383439e34382528078a12dbc04569 100644 --- a/module-bsp/board/rt1051/bsp/magnetometer/magnetometer.cpp +++ b/module-bsp/board/rt1051/bsp/magnetometer/magnetometer.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/magnetometer/magnetometer.hpp" @@ -297,6 +297,10 @@ namespace bsp } return bsp::KeyCodes::Undefined; } + void resetCurrentParsedValue() + { + current_parsed = bsp::KeyCodes::Undefined; + } std::optional WorkerEventHandler() { diff --git a/module-bsp/bsp/magnetometer/magnetometer.hpp b/module-bsp/bsp/magnetometer/magnetometer.hpp index 7766a3a48d9986b1c7ad1630be24d2289f4286cd..e26177e8f75bf6f1a6265e69191473a28313a78f 100644 --- a/module-bsp/bsp/magnetometer/magnetometer.hpp +++ b/module-bsp/bsp/magnetometer/magnetometer.hpp @@ -39,6 +39,7 @@ namespace bsp bsp::KeyCodes parse(const Measurements &measurements); std::optional WorkerEventHandler(); + void resetCurrentParsedValue(); BaseType_t IRQHandler(); void enableIRQ(); diff --git a/module-services/service-evtmgr/EventManager.cpp b/module-services/service-evtmgr/EventManager.cpp index 7bac7ba702a9d26ce83e4f1b07db30680f9937ca..94eb37fd8473a73dcfe212414f77fe93a554c94c 100644 --- a/module-services/service-evtmgr/EventManager.cpp +++ b/module-services/service-evtmgr/EventManager.cpp @@ -286,14 +286,19 @@ sys::ReturnCodes EventManager::InitHandler() return std::make_shared(); }); - connect(sevm::ToggleTorchOnOffMessage(), [&](sys::Message *) { + connect(sevm::ToggleTorchOnOffMessage(), [&]([[maybe_unused]] sys::Message *msg) { toggleTorchOnOff(); - return std::make_shared(); + return sys::MessageNone{}; }); - connect(sevm::ToggleTorchColorMessage(), [&](sys::Message *) { + connect(sevm::ToggleTorchColorMessage(), [&]([[maybe_unused]] sys::Message *msg) { toggleTorchColor(); - return std::make_shared(); + return sys::MessageNone{}; + }); + + connect(sevm::RequestPhoneModeForceUpdate(), [&]([[maybe_unused]] sys::Message *msg) { + EventWorker->requestSliderPositionRead(); + return sys::MessageNone{}; }); // initialize keyboard worker @@ -307,6 +312,7 @@ sys::ReturnCodes EventManager::InitHandler() list.emplace_back("qRTC"s, sizeof(uint8_t), 20); list.emplace_back("qSIM"s, sizeof(uint8_t), 5); list.emplace_back("qMagnetometer"s, sizeof(uint8_t), 5); + list.emplace_back(WorkerEvent::MagnetometerNotifyQueue, sizeof(uint8_t), 1); list.emplace_back("qTorch"s, sizeof(uint8_t), 5); list.emplace_back("qLightSensor"s, sizeof(uint8_t), 5); list.emplace_back("qChargerDetect"s, sizeof(uint8_t), 5); diff --git a/module-services/service-evtmgr/WorkerEvent.cpp b/module-services/service-evtmgr/WorkerEvent.cpp index 39fe42ba653048e6cccda8745f41281f8e9c57ce..7b578b05c71501cfb681c98d41293a0f83211ded 100644 --- a/module-services/service-evtmgr/WorkerEvent.cpp +++ b/module-services/service-evtmgr/WorkerEvent.cpp @@ -178,16 +178,24 @@ bool WorkerEvent::handleMessage(uint32_t queueID) } } - if (queueID == static_cast(WorkerEventQueues::queueMagnetometerIRQ)) { + if (queueID == static_cast(WorkerEventQueues::queueMagnetometerNotify)) { uint8_t notification; if (!queue->Dequeue(¬ification, 0)) { return false; } - if (std::optional key = bsp::magnetometer::WorkerEventHandler()) { - LOG_DEBUG("magneto IRQ handler: %s", c_str(*key)); - processKeyEvent(bsp::KeyEvents::Pressed, *key); + bsp::magnetometer::resetCurrentParsedValue(); + LOG_WARN("Received notify, current value reset!"); + handleMagnetometerEvent(); + } + + if (queueID == static_cast(WorkerEventQueues::queueMagnetometerIRQ)) { + uint8_t notification; + if (!queue->Dequeue(¬ification, 0)) { + return false; } + + handleMagnetometerEvent(); } if (queueID == static_cast(WorkerEventQueues::queueLightSensor)) { @@ -306,6 +314,20 @@ void WorkerEvent::processKeyEvent(bsp::KeyEvents event, bsp::KeyCodes code) } service->bus.sendUnicast(message, service::name::evt_manager); } +void WorkerEvent::requestSliderPositionRead() +{ + uint8_t request = 1; + if (auto queue = getQueueByName(WorkerEvent::MagnetometerNotifyQueue); !queue->Overwrite(&request)) { + LOG_ERROR("Unable to overwrite the request."); + } +} +void WorkerEvent::handleMagnetometerEvent() +{ + if (const auto &key = bsp::magnetometer::WorkerEventHandler(); key.has_value()) { + LOG_DEBUG("magneto IRQ handler: %s", c_str(*key)); + processKeyEvent(bsp::KeyEvents::Pressed, *key); + } +} bsp::KeyCodes WorkerEvent::headsetKeyToKeyboardKey(uint8_t headsetKeyCode) { diff --git a/module-services/service-evtmgr/service-evtmgr/EVMessages.hpp b/module-services/service-evtmgr/service-evtmgr/EVMessages.hpp index 4720f4b89eef3420e0bfe26e0f610ec1d82944a5..99049bd54796b47b611e2339576dd581ae1cdb1b 100644 --- a/module-services/service-evtmgr/service-evtmgr/EVMessages.hpp +++ b/module-services/service-evtmgr/service-evtmgr/EVMessages.hpp @@ -122,6 +122,9 @@ namespace sevm class ToggleTorchColorMessage : public sys::DataMessage {}; + class RequestPhoneModeForceUpdate : public sys::DataMessage + {}; + class KeypadBacklightMessage : public sys::DataMessage { public: diff --git a/module-services/service-evtmgr/service-evtmgr/WorkerEvent.hpp b/module-services/service-evtmgr/service-evtmgr/WorkerEvent.hpp index df71039c390b47eb9ed9265a163067d6e291e63d..6d9b23cff35a5e5358fae42bd47792a30ac9c0d8 100644 --- a/module-services/service-evtmgr/service-evtmgr/WorkerEvent.hpp +++ b/module-services/service-evtmgr/service-evtmgr/WorkerEvent.hpp @@ -38,6 +38,7 @@ enum class WorkerEventQueues queueRTC, queueCellular, queueMagnetometerIRQ, + queueMagnetometerNotify, queueTorch, queueLightSensor, queueChargerDetect @@ -83,11 +84,12 @@ class WorkerEvent : public sys::Worker virtual bool deinit() override; void init(std::list queuesList, std::shared_ptr settings); - + static constexpr auto MagnetometerNotifyQueue = "qMagnetometerNotify"; /** * This method is called from thread when new message arrives in queue. * @param queueID Index of the queue in the queues vector. */ bool handleMessage(uint32_t queueID) override final; - + void requestSliderPositionRead(); + void handleMagnetometerEvent(); }; diff --git a/module-sys/SystemManager/SystemManager.cpp b/module-sys/SystemManager/SystemManager.cpp index ee9ae57152bfa4e6adba0fe6fb0693626e2941d7..07f56968a166e1f69a2a1026607f9cb4ed816b27 100644 --- a/module-sys/SystemManager/SystemManager.cpp +++ b/module-sys/SystemManager/SystemManager.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -784,6 +785,11 @@ namespace sys bus.sendUnicast(std::make_shared(), app::manager::ApplicationManager::ServiceName); } + else { + // Turned on, disabling... + LOG_INFO("Disabling tethering"); + bus.sendUnicast(std::make_shared(), service::name::evt_manager); + } } return MessageNone{}; }