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(¬ification, 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(¬ification, 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{};
}