Fix G703 Hero RGB control (wired and wireless)

This commit is contained in:
Daniel Lamphere
2026-01-04 18:06:17 +00:00
committed by Adam Honse
parent b3c3e167f3
commit d5db3d6428
2 changed files with 16 additions and 7 deletions

View File

@@ -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<std::mutex> 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;
}