From a361f206ffbfef6bd31e34e256c109faf00bb82b Mon Sep 17 00:00:00 2001 From: pixl Date: Fri, 12 May 2023 17:23:04 -0400 Subject: [PATCH] Only call wakeup test once Ensures that wakeup check does not occur multiple times and possibly create new event handlers on every HID packet. --- src/logid/Device.cpp | 3 ++- src/logid/backend/hidpp10/ReceiverMonitor.cpp | 8 +++++++- src/logid/features/RemapButton.cpp | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/logid/Device.cpp b/src/logid/Device.cpp index 73ecfee..20b679d 100644 --- a/src/logid/Device.cpp +++ b/src/logid/Device.cpp @@ -184,7 +184,6 @@ void Device::sleep() { void Device::wakeup() { std::lock_guard lock(_state_lock); - logPrintf(INFO, "%s:%d woke up.", _path.c_str(), _index); reconfigure(); @@ -192,6 +191,8 @@ void Device::wakeup() { _awake = true; _ipc_interface->notifyStatus(); } + + logPrintf(INFO, "%s:%d woke up.", _path.c_str(), _index); } void Device::reconfigure() { diff --git a/src/logid/backend/hidpp10/ReceiverMonitor.cpp b/src/logid/backend/hidpp10/ReceiverMonitor.cpp index 9faef84..fe75a44 100644 --- a/src/logid/backend/hidpp10/ReceiverMonitor.cpp +++ b/src/logid/backend/hidpp10/ReceiverMonitor.cpp @@ -159,19 +159,25 @@ void ReceiverMonitor::enumerate() { void ReceiverMonitor::waitForDevice(hidpp::DeviceIndex index) { auto handler_id = std::make_shared>(); + auto executed = std::make_shared(false); *handler_id = _receiver->rawDevice()->addEventHandler( {[index](const std::vector& report) -> bool { return report[Offset::DeviceIndex] == index; }, - [self_weak = _self, index, handler_id]( + [self_weak = _self, index, handler_id, executed]( [[maybe_unused]] const std::vector& report) { + if (*executed) + return; + hidpp::DeviceConnectionEvent event{}; event.withPayload = false; event.linkEstablished = true; event.index = index; event.fromTimeoutCheck = true; + *executed = true; + run_task([self_weak, event, handler_id]() { *handler_id = {}; if (auto self = self_weak.lock()) { diff --git a/src/logid/features/RemapButton.cpp b/src/logid/features/RemapButton.cpp index d1f885e..0d6dd9a 100644 --- a/src/logid/features/RemapButton.cpp +++ b/src/logid/features/RemapButton.cpp @@ -63,7 +63,7 @@ RemapButton::RemapButton(Device* dev) : DeviceFeature(dev), if ((action->reprogFlags() & hidpp20::ReprogControls::RawXYDiverted) && (!_reprog_controls->supportsRawXY() || !(info.additionalFlags & hidpp20::ReprogControls::RawXY))) - logPrintf(WARN, "%s: Cannot divert raw XY movements for CID 0x%02x", + logPrintf(WARN, "%s: 'Cannot divert raw XY movements for CID 0x%02x", _device->name().c_str(), info.controlID); report.flags |= action->reprogFlags();