From c55a1aff41821d2770876b0d67d2d54886d1a15a Mon Sep 17 00:00:00 2001 From: Maciej Janicki Date: Fri, 10 Sep 2021 21:11:25 +0200 Subject: [PATCH] [BH-511] Add encoder UI events handling Add encoder rotation event handling. --- .../bellpx/bsp/rotary_encoder/rotary_encoder.cpp | 4 ++++ .../BellHybrid/services/evtmgr/WorkerEvent.cpp | 16 +++++++++++++++- .../BellHybrid/services/evtmgr/WorkerEvent.hpp | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/module-bsp/board/rt1051/bellpx/bsp/rotary_encoder/rotary_encoder.cpp b/module-bsp/board/rt1051/bellpx/bsp/rotary_encoder/rotary_encoder.cpp index 16bdc7f7c645bfeaf6883e9c2a0707a66f3e265d..5bc7d99f3e03a816e4ba32fac7e3943faa769fb3 100644 --- a/module-bsp/board/rt1051/bellpx/bsp/rotary_encoder/rotary_encoder.cpp +++ b/module-bsp/board/rt1051/bellpx/bsp/rotary_encoder/rotary_encoder.cpp @@ -44,6 +44,9 @@ namespace bsp::rotary_encoder } }); } + if (xTimerStart(gTimerHandle, 0) != pdPASS) { + LOG_ERROR("Couldn't start encoder timer"); + } LOG_DEBUG("Init rotary encoder driver"); const auto ret = (gTimerHandle && gHandleIrq) ? (kStatus_Success) : (kStatus_Fail); LOG_DEBUG("Init rotary encoder driver status %i", ret); @@ -86,6 +89,7 @@ namespace bsp::rotary_encoder ret = type::forward; } encCounter = tmp; + return ret; } diff --git a/products/BellHybrid/services/evtmgr/WorkerEvent.cpp b/products/BellHybrid/services/evtmgr/WorkerEvent.cpp index b6a1213dfc15c7840b9dbd220166587388640faf..d32423d8ff1a0f0ebb86fabb01b3492bc1809b62 100644 --- a/products/BellHybrid/services/evtmgr/WorkerEvent.cpp +++ b/products/BellHybrid/services/evtmgr/WorkerEvent.cpp @@ -45,10 +45,24 @@ namespace bell bsp::rotary_encoder::deinit(); } + void WorkerEvent::processRotaryAsShortRelease(bsp::KeyCodes code) + { + processKeyEvent(bsp::KeyEvents::Pressed, code); + processKeyEvent(bsp::KeyEvents::Released, code); + } + void WorkerEvent::handleRotaryEncoderEvent() { if (const auto &key = bsp::rotary_encoder::WorkerEventHandler(); key.has_value()) { - LOG_DEBUG("Rotary encoder handler %i", int(key.value())); + if (key.value() == bsp::rotary_encoder::type::forward) { + processRotaryAsShortRelease(bsp::KeyCodes::JoystickUp); + } + else if (key.value() == bsp::rotary_encoder::type::backward) { + processRotaryAsShortRelease(bsp::KeyCodes::JoystickDown); + } + else { + LOG_ERROR("Unknown rotary event"); + } } } } // namespace bell diff --git a/products/BellHybrid/services/evtmgr/WorkerEvent.hpp b/products/BellHybrid/services/evtmgr/WorkerEvent.hpp index 635a001e7adf22a95155f59b839e61136fc8dd1d..8db390644a596d4e6fbc04a9eafec3132bffc61d 100644 --- a/products/BellHybrid/services/evtmgr/WorkerEvent.hpp +++ b/products/BellHybrid/services/evtmgr/WorkerEvent.hpp @@ -17,6 +17,7 @@ namespace bell void initProductHardware() final; void deinitProductHardware() final; bool handleMessage(std::uint32_t queueID) override; + void processRotaryAsShortRelease(bsp::KeyCodes code); void handleRotaryEncoderEvent(); enum class EventQueues {