From c7ebc6864290fc33a592ec2c17ec09867fba6aeb Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Wed, 7 Jan 2026 12:01:36 -0600 Subject: [PATCH] [WIP] UpdateLEDsInternal to prevent signaling RGBController update callback from internal updates/keepalive threads --- .../RGBController_AlienwareAW410K.cpp | 2 +- .../RGBController_AlienwareAW510K.cpp | 2 +- Controllers/ArcticController/RGBController_Arctic.cpp | 2 +- Controllers/DMXController/RGBController_DMX.cpp | 2 +- Controllers/E131Controller/RGBController_E131.cpp | 2 +- .../RGBController_HyperXAlloyElite2.cpp | 2 +- .../RGBController_HyperXAlloyElite.cpp | 2 +- .../RGBController_HyperXAlloyFPS.cpp | 2 +- .../RGBController_HyperXAlloyOrigins60and65.cpp | 2 +- .../RGBController_HyperXAlloyOrigins.cpp | 2 +- .../RGBController_HyperXMicrophone.cpp | 2 +- .../RGBController_HyperXMicrophoneV2.cpp | 2 +- .../RGBController_HyperXPulsefireFPSPro.cpp | 2 +- .../RGBController_HyperXPulsefireHaste.cpp | 2 +- .../RGBController_HyperXPulsefireRaid.cpp | 2 +- .../RGBController_HyperXPulsefireSurge.cpp | 2 +- .../RGBController_HyperXMousemat.cpp | 2 +- .../LGMonitorController/RGBController_LGMonitor.cpp | 2 +- .../RGBController_LogitechG213.cpp | 2 +- .../RGBController_LogitechG810.cpp | 2 +- .../RGBController_LogitechG910.cpp | 2 +- .../RGBController_LogitechGProKeyboard.cpp | 2 +- .../RGBController_PhilipsHueEntertainment.cpp | 2 +- .../RGBController_SinowealthKeyboard10c.cpp | 2 +- NetworkServer.cpp | 11 ++++++++++- RGBController/RGBController.cpp | 5 +++++ RGBController/RGBController.h | 1 + 27 files changed, 40 insertions(+), 25 deletions(-) diff --git a/Controllers/AlienwareKeyboardController/AlienwareAW410KController/RGBController_AlienwareAW410K.cpp b/Controllers/AlienwareKeyboardController/AlienwareAW410KController/RGBController_AlienwareAW410K.cpp index 1b5a62528..397c79aab 100644 --- a/Controllers/AlienwareKeyboardController/AlienwareAW410KController/RGBController_AlienwareAW410K.cpp +++ b/Controllers/AlienwareKeyboardController/AlienwareAW410KController/RGBController_AlienwareAW410K.cpp @@ -381,7 +381,7 @@ void RGBController_AlienwareAW410K::DeviceUpdateMode() { if(active_mode == 0xFFFF) { - UpdateLEDs(); + UpdateLEDsInternal(); return; } diff --git a/Controllers/AlienwareKeyboardController/AlienwareAW510KController/RGBController_AlienwareAW510K.cpp b/Controllers/AlienwareKeyboardController/AlienwareAW510KController/RGBController_AlienwareAW510K.cpp index 51eb9280a..a96679f42 100644 --- a/Controllers/AlienwareKeyboardController/AlienwareAW510KController/RGBController_AlienwareAW510K.cpp +++ b/Controllers/AlienwareKeyboardController/AlienwareAW510KController/RGBController_AlienwareAW510K.cpp @@ -402,7 +402,7 @@ void RGBController_AlienwareAW510K::DeviceUpdateMode() { if(active_mode == 0xFFFF) { - UpdateLEDs(); + UpdateLEDsInternal(); return; } diff --git a/Controllers/ArcticController/RGBController_Arctic.cpp b/Controllers/ArcticController/RGBController_Arctic.cpp index ac14242f5..d959deb58 100644 --- a/Controllers/ArcticController/RGBController_Arctic.cpp +++ b/Controllers/ArcticController/RGBController_Arctic.cpp @@ -116,7 +116,7 @@ void RGBController_Arctic::KeepaliveThreadFunction() sleep_time = ARCTIC_KEEPALIVE_PERIOD - (std::chrono::steady_clock::now() - last_update_time); if(sleep_time <= ARCTIC_SLEEP_THRESHOLD) { - UpdateLEDs(); // Already protected thru a device update thread + UpdateLEDsInternal(); // Already protected thru a device update thread std::this_thread::sleep_for(ARCTIC_KEEPALIVE_PERIOD); } else diff --git a/Controllers/DMXController/RGBController_DMX.cpp b/Controllers/DMXController/RGBController_DMX.cpp index 93849765e..8736b7185 100644 --- a/Controllers/DMXController/RGBController_DMX.cpp +++ b/Controllers/DMXController/RGBController_DMX.cpp @@ -218,7 +218,7 @@ void RGBController_DMX::KeepaliveThreadFunction() { if((std::chrono::steady_clock::now() - last_update_time) > ( keepalive_delay * 0.95f ) ) { - UpdateLEDs(); + UpdateLEDsInternal(); } std::this_thread::sleep_for(keepalive_delay / 2); } diff --git a/Controllers/E131Controller/RGBController_E131.cpp b/Controllers/E131Controller/RGBController_E131.cpp index d1c3f18f5..7e1d00c6c 100644 --- a/Controllers/E131Controller/RGBController_E131.cpp +++ b/Controllers/E131Controller/RGBController_E131.cpp @@ -456,7 +456,7 @@ void RGBController_E131::KeepaliveThreadFunction() { if((std::chrono::steady_clock::now() - last_update_time) > ( keepalive_delay * 0.95f ) ) { - UpdateLEDs(); + UpdateLEDsInternal(); } std::this_thread::sleep_for(keepalive_delay / 2); } diff --git a/Controllers/HyperXKeyboardController/HyperXAlloyElite2Controller/RGBController_HyperXAlloyElite2.cpp b/Controllers/HyperXKeyboardController/HyperXAlloyElite2Controller/RGBController_HyperXAlloyElite2.cpp index 2c379f0c0..4b316a0cb 100644 --- a/Controllers/HyperXKeyboardController/HyperXAlloyElite2Controller/RGBController_HyperXAlloyElite2.cpp +++ b/Controllers/HyperXKeyboardController/HyperXAlloyElite2Controller/RGBController_HyperXAlloyElite2.cpp @@ -331,7 +331,7 @@ void RGBController_HyperXAlloyElite2::KeepaliveThreadFunction() { if((std::chrono::steady_clock::now() - last_update_time) > std::chrono::milliseconds(1000)) { - UpdateLEDs(); + UpdateLEDsInternal(); } } std::this_thread::sleep_for(50ms); diff --git a/Controllers/HyperXKeyboardController/HyperXAlloyEliteController/RGBController_HyperXAlloyElite.cpp b/Controllers/HyperXKeyboardController/HyperXAlloyEliteController/RGBController_HyperXAlloyElite.cpp index ce8a195e3..bab5047d3 100644 --- a/Controllers/HyperXKeyboardController/HyperXAlloyEliteController/RGBController_HyperXAlloyElite.cpp +++ b/Controllers/HyperXKeyboardController/HyperXAlloyEliteController/RGBController_HyperXAlloyElite.cpp @@ -356,7 +356,7 @@ void RGBController_HyperXAlloyElite::KeepaliveThreadFunction() { if((std::chrono::steady_clock::now() - last_update_time) > std::chrono::milliseconds(50)) { - UpdateLEDs(); + UpdateLEDsInternal(); } } std::this_thread::sleep_for(10ms);; diff --git a/Controllers/HyperXKeyboardController/HyperXAlloyFPSController/RGBController_HyperXAlloyFPS.cpp b/Controllers/HyperXKeyboardController/HyperXAlloyFPSController/RGBController_HyperXAlloyFPS.cpp index 224da8e00..eaf12fef4 100644 --- a/Controllers/HyperXKeyboardController/HyperXAlloyFPSController/RGBController_HyperXAlloyFPS.cpp +++ b/Controllers/HyperXKeyboardController/HyperXAlloyFPSController/RGBController_HyperXAlloyFPS.cpp @@ -285,7 +285,7 @@ void RGBController_HyperXAlloyFPS::KeepaliveThreadFunction() { if((std::chrono::steady_clock::now() - last_update_time) > std::chrono::milliseconds(50)) { - UpdateLEDs(); + UpdateLEDsInternal(); } } std::this_thread::sleep_for(10ms);; diff --git a/Controllers/HyperXKeyboardController/HyperXAlloyOrigins60and65Controller/RGBController_HyperXAlloyOrigins60and65.cpp b/Controllers/HyperXKeyboardController/HyperXAlloyOrigins60and65Controller/RGBController_HyperXAlloyOrigins60and65.cpp index c97db2127..d0385fdc8 100644 --- a/Controllers/HyperXKeyboardController/HyperXAlloyOrigins60and65Controller/RGBController_HyperXAlloyOrigins60and65.cpp +++ b/Controllers/HyperXKeyboardController/HyperXAlloyOrigins60and65Controller/RGBController_HyperXAlloyOrigins60and65.cpp @@ -347,7 +347,7 @@ void RGBController_HyperXAlloyOrigins60and65::KeepaliveThread() { if((std::chrono::steady_clock::now() - last_update_time) > std::chrono::milliseconds(50)) { - UpdateLEDs(); + UpdateLEDsInternal(); } } std::this_thread::sleep_for(10ms);; diff --git a/Controllers/HyperXKeyboardController/HyperXAlloyOriginsController/RGBController_HyperXAlloyOrigins.cpp b/Controllers/HyperXKeyboardController/HyperXAlloyOriginsController/RGBController_HyperXAlloyOrigins.cpp index ab9784224..e0a963aa4 100644 --- a/Controllers/HyperXKeyboardController/HyperXAlloyOriginsController/RGBController_HyperXAlloyOrigins.cpp +++ b/Controllers/HyperXKeyboardController/HyperXAlloyOriginsController/RGBController_HyperXAlloyOrigins.cpp @@ -301,7 +301,7 @@ void RGBController_HyperXAlloyOrigins::KeepaliveThread() { if((std::chrono::steady_clock::now() - last_update_time) > std::chrono::milliseconds(50)) { - UpdateLEDs(); + UpdateLEDsInternal(); } } std::this_thread::sleep_for(10ms);; diff --git a/Controllers/HyperXMicrophoneController/RGBController_HyperXMicrophone.cpp b/Controllers/HyperXMicrophoneController/RGBController_HyperXMicrophone.cpp index f478a73ac..9b32d7cf0 100644 --- a/Controllers/HyperXMicrophoneController/RGBController_HyperXMicrophone.cpp +++ b/Controllers/HyperXMicrophoneController/RGBController_HyperXMicrophone.cpp @@ -144,7 +144,7 @@ void RGBController_HyperXMicrophone::KeepaliveThread() { if((std::chrono::steady_clock::now() - last_update_time) > std::chrono::milliseconds(50)) { - UpdateLEDs(); + UpdateLEDsInternal(); } std::this_thread::sleep_for(15ms); } diff --git a/Controllers/HyperXMicrophoneV2Controller/RGBController_HyperXMicrophoneV2.cpp b/Controllers/HyperXMicrophoneV2Controller/RGBController_HyperXMicrophoneV2.cpp index 41c520636..528f5bcee 100644 --- a/Controllers/HyperXMicrophoneV2Controller/RGBController_HyperXMicrophoneV2.cpp +++ b/Controllers/HyperXMicrophoneV2Controller/RGBController_HyperXMicrophoneV2.cpp @@ -133,7 +133,7 @@ void RGBController_HyperXMicrophoneV2::KeepaliveThread() { if(!controller->ShouldPauseUpdates() && (std::chrono::steady_clock::now() - last_update_time) > std::chrono::milliseconds(1000)) { - UpdateLEDs(); + UpdateLEDsInternal(); } std::this_thread::sleep_for(250ms); } diff --git a/Controllers/HyperXMouseController/HyperXPulsefireFPSProController/RGBController_HyperXPulsefireFPSPro.cpp b/Controllers/HyperXMouseController/HyperXPulsefireFPSProController/RGBController_HyperXPulsefireFPSPro.cpp index 26ff3e525..55ecaf275 100644 --- a/Controllers/HyperXMouseController/HyperXPulsefireFPSProController/RGBController_HyperXPulsefireFPSPro.cpp +++ b/Controllers/HyperXMouseController/HyperXPulsefireFPSProController/RGBController_HyperXPulsefireFPSPro.cpp @@ -132,7 +132,7 @@ void RGBController_HyperXPulsefireFPSPro::KeepaliveThread() { if((std::chrono::steady_clock::now() - last_update_time) > std::chrono::milliseconds(50)) { - UpdateLEDs(); + UpdateLEDsInternal(); } } std::this_thread::sleep_for(10ms); diff --git a/Controllers/HyperXMouseController/HyperXPulsefireHasteController/RGBController_HyperXPulsefireHaste.cpp b/Controllers/HyperXMouseController/HyperXPulsefireHasteController/RGBController_HyperXPulsefireHaste.cpp index 3e4005fd3..1f39c155a 100644 --- a/Controllers/HyperXMouseController/HyperXPulsefireHasteController/RGBController_HyperXPulsefireHaste.cpp +++ b/Controllers/HyperXMouseController/HyperXPulsefireHasteController/RGBController_HyperXPulsefireHaste.cpp @@ -132,7 +132,7 @@ void RGBController_HyperXPulsefireHaste::KeepaliveThread() { if((std::chrono::steady_clock::now() - last_update_time) > std::chrono::milliseconds(50)) { - UpdateLEDs(); + UpdateLEDsInternal(); } } std::this_thread::sleep_for(10ms); diff --git a/Controllers/HyperXMouseController/HyperXPulsefireRaidController/RGBController_HyperXPulsefireRaid.cpp b/Controllers/HyperXMouseController/HyperXPulsefireRaidController/RGBController_HyperXPulsefireRaid.cpp index ad8ed8066..f00a6c4b1 100644 --- a/Controllers/HyperXMouseController/HyperXPulsefireRaidController/RGBController_HyperXPulsefireRaid.cpp +++ b/Controllers/HyperXMouseController/HyperXPulsefireRaidController/RGBController_HyperXPulsefireRaid.cpp @@ -121,7 +121,7 @@ void RGBController_HyperXPulsefireRaid::KeepaliveThread() { if((std::chrono::steady_clock::now() - last_update_time) > 1s) { - UpdateLEDs(); + UpdateLEDsInternal(); } } diff --git a/Controllers/HyperXMouseController/HyperXPulsefireSurgeController/RGBController_HyperXPulsefireSurge.cpp b/Controllers/HyperXMouseController/HyperXPulsefireSurgeController/RGBController_HyperXPulsefireSurge.cpp index e966b72f4..2308e84d8 100644 --- a/Controllers/HyperXMouseController/HyperXPulsefireSurgeController/RGBController_HyperXPulsefireSurge.cpp +++ b/Controllers/HyperXMouseController/HyperXPulsefireSurgeController/RGBController_HyperXPulsefireSurge.cpp @@ -141,7 +141,7 @@ void RGBController_HyperXPulsefireSurge::KeepaliveThread() { if((std::chrono::steady_clock::now() - last_update_time) > std::chrono::milliseconds(50)) { - UpdateLEDs(); + UpdateLEDsInternal(); } } std::this_thread::sleep_for(10ms); diff --git a/Controllers/HyperXMousematController/RGBController_HyperXMousemat.cpp b/Controllers/HyperXMousematController/RGBController_HyperXMousemat.cpp index e80ff11aa..66c38429a 100644 --- a/Controllers/HyperXMousematController/RGBController_HyperXMousemat.cpp +++ b/Controllers/HyperXMousematController/RGBController_HyperXMousemat.cpp @@ -143,7 +143,7 @@ void RGBController_HyperXMousemat::KeepaliveThread() { if((std::chrono::steady_clock::now() - last_update_time) > std::chrono::milliseconds(50)) { - UpdateLEDs(); + UpdateLEDsInternal(); } } std::this_thread::sleep_for(10ms); diff --git a/Controllers/LGMonitorController/RGBController_LGMonitor.cpp b/Controllers/LGMonitorController/RGBController_LGMonitor.cpp index 9a90b5fbf..9576eab81 100644 --- a/Controllers/LGMonitorController/RGBController_LGMonitor.cpp +++ b/Controllers/LGMonitorController/RGBController_LGMonitor.cpp @@ -148,7 +148,7 @@ void RGBController_LGMonitor::KeepaliveThread() { if((modes[active_mode].value == LG_MONITOR_DIRECT_MODE_VALUE) && (std::chrono::steady_clock::now() - last_update_time) > std::chrono::milliseconds(500)) { - UpdateLEDs(); + UpdateLEDsInternal(); } std::this_thread::sleep_for(15ms); diff --git a/Controllers/LogitechController/LogitechG213Controller/RGBController_LogitechG213.cpp b/Controllers/LogitechController/LogitechG213Controller/RGBController_LogitechG213.cpp index 926685a7e..c124e0a29 100644 --- a/Controllers/LogitechController/LogitechG213Controller/RGBController_LogitechG213.cpp +++ b/Controllers/LogitechController/LogitechG213Controller/RGBController_LogitechG213.cpp @@ -162,7 +162,7 @@ void RGBController_LogitechG213::DeviceUpdateMode() \*---------------------------------------------------------*/ if(active_mode == 0xFFFF) { - UpdateLEDs(); + UpdateLEDsInternal(); return; } diff --git a/Controllers/LogitechController/LogitechG810Controller/RGBController_LogitechG810.cpp b/Controllers/LogitechController/LogitechG810Controller/RGBController_LogitechG810.cpp index d667595c3..ac9597a20 100644 --- a/Controllers/LogitechController/LogitechG810Controller/RGBController_LogitechG810.cpp +++ b/Controllers/LogitechController/LogitechG810Controller/RGBController_LogitechG810.cpp @@ -376,7 +376,7 @@ void RGBController_LogitechG810::DeviceUpdateMode() \*---------------------------------------------------------*/ if(active_mode == 0xFFFF) { - UpdateLEDs(); + UpdateLEDsInternal(); return; } diff --git a/Controllers/LogitechController/LogitechG910Controller/RGBController_LogitechG910.cpp b/Controllers/LogitechController/LogitechG910Controller/RGBController_LogitechG910.cpp index 1f8120f5c..c3e61f973 100644 --- a/Controllers/LogitechController/LogitechG910Controller/RGBController_LogitechG910.cpp +++ b/Controllers/LogitechController/LogitechG910Controller/RGBController_LogitechG910.cpp @@ -377,7 +377,7 @@ void RGBController_LogitechG910::DeviceUpdateMode() \*---------------------------------------------------------*/ if(active_mode == 0xFFFF) { - UpdateLEDs(); + UpdateLEDsInternal(); return; } diff --git a/Controllers/LogitechController/LogitechGProKeyboardController/RGBController_LogitechGProKeyboard.cpp b/Controllers/LogitechController/LogitechGProKeyboardController/RGBController_LogitechGProKeyboard.cpp index 5143054ac..ce8b8768e 100644 --- a/Controllers/LogitechController/LogitechGProKeyboardController/RGBController_LogitechGProKeyboard.cpp +++ b/Controllers/LogitechController/LogitechGProKeyboardController/RGBController_LogitechGProKeyboard.cpp @@ -353,7 +353,7 @@ void RGBController_LogitechGProKeyboard::DeviceUpdateMode() \*---------------------------------------------------------*/ if(active_mode == 0xFFFF) { - UpdateLEDs(); + UpdateLEDsInternal(); return; } diff --git a/Controllers/PhilipsHueController/RGBController_PhilipsHueEntertainment.cpp b/Controllers/PhilipsHueController/RGBController_PhilipsHueEntertainment.cpp index fa4033a79..5c27be743 100644 --- a/Controllers/PhilipsHueController/RGBController_PhilipsHueEntertainment.cpp +++ b/Controllers/PhilipsHueController/RGBController_PhilipsHueEntertainment.cpp @@ -141,7 +141,7 @@ void RGBController_PhilipsHueEntertainment::KeepaliveThreadFunction() { if((std::chrono::steady_clock::now() - last_update_time) > std::chrono::seconds(5)) { - UpdateLEDs(); + UpdateLEDsInternal(); } } std::this_thread::sleep_for(1s); diff --git a/Controllers/SinowealthController/SinowealthKeyboard10cController/RGBController_SinowealthKeyboard10c.cpp b/Controllers/SinowealthController/SinowealthKeyboard10cController/RGBController_SinowealthKeyboard10c.cpp index ec36bf77c..c6d3fd01e 100644 --- a/Controllers/SinowealthController/SinowealthKeyboard10cController/RGBController_SinowealthKeyboard10c.cpp +++ b/Controllers/SinowealthController/SinowealthKeyboard10cController/RGBController_SinowealthKeyboard10c.cpp @@ -164,7 +164,7 @@ void RGBController_SinowealthKeyboard10c::KeepaliveThreadFunction() { if(active_mode == MODE_DIRECT && (std::chrono::steady_clock::now() - last_update_time) > 1s) { - UpdateLEDs(); + UpdateLEDsInternal(); } std::this_thread::sleep_for(500ms); } diff --git a/NetworkServer.cpp b/NetworkServer.cpp index 910cebb0b..0c33ff2b7 100644 --- a/NetworkServer.cpp +++ b/NetworkServer.cpp @@ -178,11 +178,20 @@ unsigned int NetworkServer::GetClientProtocolVersion(unsigned int client_num) \*---------------------------------------------------------*/ void NetworkServer::DeviceListChanged() { + /*-----------------------------------------------------*\ + | Register the server's RGBController update handler | + | for each RGBController in the controllers list | + \*-----------------------------------------------------*/ + //for(std::size_t controller_idx = 0; controller_idx < controllers.size(); controller_idx++) + //{ + // controllers[controller_idx]->RegisterUpdateCallback(); + //} + /*-----------------------------------------------------*\ | Indicate to the clients that the controller list has | | changed | \*-----------------------------------------------------*/ - for(unsigned int client_idx = 0; client_idx < ServerClients.size(); client_idx++) + for(std::size_t client_idx = 0; client_idx < ServerClients.size(); client_idx++) { SendRequest_DeviceListChanged(ServerClients[client_idx]->client_sock); } diff --git a/RGBController/RGBController.cpp b/RGBController/RGBController.cpp index abe34bd56..6458ecc41 100644 --- a/RGBController/RGBController.cpp +++ b/RGBController/RGBController.cpp @@ -3752,6 +3752,11 @@ void RGBController::SetupColors() } } +void RGBController::UpdateLEDsInternal() +{ + CallFlag_UpdateLEDs = true; +} + /*---------------------------------------------------------*\ | Functions to be implemented in device implementation | \*---------------------------------------------------------*/ diff --git a/RGBController/RGBController.h b/RGBController/RGBController.h index 32477a4c7..a48794ee4 100644 --- a/RGBController/RGBController.h +++ b/RGBController/RGBController.h @@ -727,6 +727,7 @@ protected: \*-----------------------------------------------------*/ unsigned int LEDsInZone(unsigned int zone); void SetupColors(); + void UpdateLEDsInternal(); private: /*-----------------------------------------------------*\