From d5db3d6428621c91c900d11b09485ea93305cd18 Mon Sep 17 00:00:00 2001 From: Daniel Lamphere Date: Sun, 4 Jan 2026 18:06:17 +0000 Subject: [PATCH] Fix G703 Hero RGB control (wired and wireless) --- .../LogitechControllerDetect.cpp | 2 +- .../LogitechProtocolCommon.cpp | 21 +++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Controllers/LogitechController/LogitechControllerDetect.cpp b/Controllers/LogitechController/LogitechControllerDetect.cpp index 86386ec9b..000bed028 100644 --- a/Controllers/LogitechController/LogitechControllerDetect.cpp +++ b/Controllers/LogitechController/LogitechControllerDetect.cpp @@ -919,7 +919,7 @@ REGISTER_HID_DETECTOR_IPU("Logitech G502 HERO Gaming Mouse", REGISTER_HID_DETECTOR_IPU("Logitech G403 Prodigy Gaming Mouse", DetectLogitechWired, LOGITECH_VID, LOGITECH_G403_PID, 1, 0xFF00, 2); REGISTER_HID_DETECTOR_IPU("Logitech G403 Wireless Gaming Mouse (wired)", DetectLogitechWired, LOGITECH_VID, LOGITECH_G403_LIGHTSPEED_PID, 1, 0xFF00, 2); REGISTER_HID_DETECTOR_IPU("Logitech G703 Wireless Gaming Mouse (wired)", DetectLogitechWired, LOGITECH_VID, LOGITECH_G703_LIGHTSPEED_PID, 1, 0xFF00, 2); -REGISTER_HID_DETECTOR_IPU("Logitech G703 HERO Wireless Gaming Mouse (wired)", DetectLogitechWired, LOGITECH_VID, LOGITECH_G703_HERO_LIGHTSPEED_PID, 1, 0xFF00, 2); +REGISTER_HID_DETECTOR_PU("Logitech G703 HERO Wireless Gaming Mouse (wired)", DetectLogitechWired, LOGITECH_VID, LOGITECH_G703_HERO_LIGHTSPEED_PID, 0xFF00, 2); REGISTER_HID_DETECTOR_IPU("Logitech G900 Wireless Gaming Mouse (wired)", DetectLogitechWired, LOGITECH_VID, LOGITECH_G900_LIGHTSPEED_PID, 1, 0xFF00, 2); REGISTER_HID_DETECTOR_IPU("Logitech G903 Wireless Gaming Mouse (wired)", DetectLogitechWired, LOGITECH_VID, LOGITECH_G903_LIGHTSPEED_PID, 1, 0xFF00, 2); REGISTER_HID_DETECTOR_IPU("Logitech G903 HERO Wireless Gaming Mouse (wired)", DetectLogitechWired, LOGITECH_VID, LOGITECH_G903_LIGHTSPEED_HERO_PID, 2, 0xFF00, 2); diff --git a/Controllers/LogitechController/LogitechProtocolCommon.cpp b/Controllers/LogitechController/LogitechProtocolCommon.cpp index 971bb9f50..1fc21b5ea 100644 --- a/Controllers/LogitechController/LogitechProtocolCommon.cpp +++ b/Controllers/LogitechController/LogitechProtocolCommon.cpp @@ -835,11 +835,11 @@ uint8_t logitech_device::set8071Effects(uint8_t control) response.init(); /*-----------------------------------------------------------------*\ - | Turn the direct mode on or off via the RGB_feature_index | + | Use longFAPrequest (20 bytes) for FP8071 CONTROL command | + | Short messages (7 bytes) are not supported by some devices | \*-----------------------------------------------------------------*/ - shortFAPrequest set_effects; - set_effects.init(device_index, RGB_feature_index); - set_effects.feature_command = LOGITECH_FP8071_CONTROL; + longFAPrequest set_effects; + set_effects.init(device_index, RGB_feature_index, LOGITECH_FP8071_CONTROL); set_effects.data[0] = 1; set_effects.data[1] = 3; //Disables all FW control for PWR (0x02) and RGB (0x01) set_effects.data[2] = control; @@ -855,14 +855,23 @@ uint8_t logitech_device::set8071Effects(uint8_t control) { std::lock_guard guard(*mutex); - result = hid_write(dev_use2, set_effects.buffer, set_effects.size()); + hid_write(dev_use2, set_effects.buffer, set_effects.size()); result = hid_read_timeout(dev_use2, response.buffer, response.size(), LOGITECH_PROTOCOL_TIMEOUT); } else { - result = hid_write(dev_use2, set_effects.buffer, set_effects.size()); + hid_write(dev_use2, set_effects.buffer, set_effects.size()); result = hid_read_timeout(dev_use2, response.buffer, response.size(), LOGITECH_PROTOCOL_TIMEOUT); } + + /*-----------------------------------------------------*\ + | Check for HID++ error response (0x8F in feature_index)| + \*-----------------------------------------------------*/ + if(response.feature_index == 0x8F) + { + LOG_WARNING("[%s] set8071Effects: HID++ ERROR! ErrCode=%02X", + device_name.c_str(), response.data[2]); + } } return result; }