~aleteoryx/muditaos

5fb105d0b1173bb48609f0730be382e5ac5e4009 — Bartosz Cichocki 4 years ago 42426e3
[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
M module-bsp/board/linux/magnetometer/magnetometer.cpp => module-bsp/board/linux/magnetometer/magnetometer.cpp +3 -1
@@ 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

M module-bsp/board/rt1051/bsp/magnetometer/magnetometer.cpp => module-bsp/board/rt1051/bsp/magnetometer/magnetometer.cpp +5 -1
@@ 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<bsp::KeyCodes> WorkerEventHandler()
        {

M module-bsp/bsp/magnetometer/magnetometer.hpp => module-bsp/bsp/magnetometer/magnetometer.hpp +1 -0
@@ 39,6 39,7 @@ namespace bsp

        bsp::KeyCodes parse(const Measurements &measurements);
        std::optional<bsp::KeyCodes> WorkerEventHandler();
        void resetCurrentParsedValue();

        BaseType_t IRQHandler();
        void enableIRQ();

M module-services/service-evtmgr/EventManager.cpp => module-services/service-evtmgr/EventManager.cpp +10 -4
@@ 286,14 286,19 @@ sys::ReturnCodes EventManager::InitHandler()
        return std::make_shared<sys::ResponseMessage>();
    });

    connect(sevm::ToggleTorchOnOffMessage(), [&](sys::Message *) {
    connect(sevm::ToggleTorchOnOffMessage(), [&]([[maybe_unused]] sys::Message *msg) {
        toggleTorchOnOff();
        return std::make_shared<sys::ResponseMessage>();
        return sys::MessageNone{};
    });

    connect(sevm::ToggleTorchColorMessage(), [&](sys::Message *) {
    connect(sevm::ToggleTorchColorMessage(), [&]([[maybe_unused]] sys::Message *msg) {
        toggleTorchColor();
        return std::make_shared<sys::ResponseMessage>();
        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);

M module-services/service-evtmgr/WorkerEvent.cpp => module-services/service-evtmgr/WorkerEvent.cpp +26 -4
@@ 178,16 178,24 @@ bool WorkerEvent::handleMessage(uint32_t queueID)
        }
    }

    if (queueID == static_cast<uint32_t>(WorkerEventQueues::queueMagnetometerIRQ)) {
    if (queueID == static_cast<uint32_t>(WorkerEventQueues::queueMagnetometerNotify)) {
        uint8_t notification;
        if (!queue->Dequeue(&notification, 0)) {
            return false;
        }

        if (std::optional<bsp::KeyCodes> 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<uint32_t>(WorkerEventQueues::queueMagnetometerIRQ)) {
        uint8_t notification;
        if (!queue->Dequeue(&notification, 0)) {
            return false;
        }

        handleMagnetometerEvent();
    }

    if (queueID == static_cast<uint32_t>(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)
{

M module-services/service-evtmgr/service-evtmgr/EVMessages.hpp => module-services/service-evtmgr/service-evtmgr/EVMessages.hpp +3 -0
@@ 122,6 122,9 @@ namespace sevm
    class ToggleTorchColorMessage : public sys::DataMessage
    {};

    class RequestPhoneModeForceUpdate : public sys::DataMessage
    {};

    class KeypadBacklightMessage : public sys::DataMessage
    {
      public:

M module-services/service-evtmgr/service-evtmgr/WorkerEvent.hpp => module-services/service-evtmgr/service-evtmgr/WorkerEvent.hpp +4 -2
@@ 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<sys::WorkerQueueInfo> queuesList, std::shared_ptr<settings::Settings> 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();
};

M module-sys/SystemManager/SystemManager.cpp => module-sys/SystemManager/SystemManager.cpp +6 -0
@@ 15,6 15,7 @@
#include <service-evtmgr/BatteryMessages.hpp>
#include <service-evtmgr/Constants.hpp>
#include <service-evtmgr/EventManagerServiceAPI.hpp>
#include <service-evtmgr/EVMessages.hpp>
#include <service-appmgr/messages/UserPowerDownRequest.hpp>
#include <service-desktop/service-desktop/Constants.hpp>
#include <service-cellular/CellularServiceAPI.hpp>


@@ 784,6 785,11 @@ namespace sys
                bus.sendUnicast(std::make_shared<TetheringQuestionAbort>(),
                                app::manager::ApplicationManager::ServiceName);
            }
            else {
                // Turned on, disabling...
                LOG_INFO("Disabling tethering");
                bus.sendUnicast(std::make_shared<sevm::RequestPhoneModeForceUpdate>(), service::name::evt_manager);
            }
        }
        return MessageNone{};
    }