SteelSeries / gamesense-sdk

472 stars 146 forks source link

Sending events breaks profile-switching on the mouse (Rival 710) #122

Open Player701 opened 2 years ago

Player701 commented 2 years ago

Hello.

I'm using a small self-made app that sends various system information (e.g. CPU/GPU temps, RAM usage etc.) to the OLED display on my Apex Pro keyboard. I also have a Rival 710 mouse, and I've recently found that while my app is running, I cannot switch profiles on the mouse unless I unplug it and plug it back in. The profile selector is not greyed out, but the mouse simply doesn't react to the change (sometimes the LEDs blink as if it acknowledges the new setup for an instant but then reverts to its previous state). If I close my app, I can change profiles again after a while (about half a minute).

I've only recently started using multiple profiles on my Rival 710, and this looks like a serious issue to me. This is most certainly a bug, since custom apps should not affect user settings (especially key bindings), and I can change configs on my keyboard just fine while the app is running.

I've found a very easy way to reproduce this: simply sending data to the game_heartbeat endpoint breaks profile switching on my mouse for a short while:

curl -H "Content-Type: application/json" -d "{\"game\": \"HEARTBEAT_TEST\"}" http://127.0.0.1:54097/game_heartbeat

(NB: port may be different depending on the contents of c:\ProgramData\SteelSeries\SteelSeries Engine 3\core_props.json)

I have no idea if this issue can be reproduced with other SteelSeries devices, I only know for sure that the Apex Pro keyboard is not affected (switching profiles always works fine), and the Rival 710 mouse is affected. I do not own any other SteelSeries keyboards, mice, or other peripherals, so I'm physically unable to investigate further.

I kindly ask the SDK developers to look into this issue.

UPD: SteelSeries GG 14.0.0 (GSDK version 2.4.14.0) - issue still present.

UPD: SteelSeries GG 17.1.0 (GSDK version 2.4.17.0) - issue still present.

Player701 commented 2 years ago

UPD: SteelSeries GG 19.1.0, 20.0.0 (GSDK version 2.4.20.0) - issue still present.

Player701 commented 1 year ago

Just tested on a fresh intall of Windows 11 Pro (version 22H2, build 22621.1265) with SteelSeries GG version 32.1.0, SDK version 2.4.20.0, and the issue is still present.

Player701 commented 1 year ago

I've just found out that this issue affects the built-in apps, too - but the effect is slightly different. I will now attempt to explain what the difference is.

I use only two configs on my mouse, let's call them Config A and Config B. Most of the times, it's Config A. They can be visually distinguished by the color of the LEDs on the mouse.

If I send a heartbeat event via curl (see above) and attempt to switch to Config B, then wait for the timer (approx. 20 seconds) to expire, it will still show Config B in the program, but the LEDs on the mouse won't reflect that, and the bindings will still correspond to Config A. To switch properly, I need to choose Config A (or some other config) in the menu, and then choose Config B again.

Now, if I activate a built-in app (let's say System Monitor, as its functionality is similar to what my own app does), I still cannot properly switch to Config B while it is active. However, if I attempt to switch, and then deactivate the built-in app, then the switch will happen - the LEDs will change, and the bindings will reflect that Config B is active.

So whatever this is, using built-in apps is not a workaround, even if the built-in app provides similar functionality.

I've found a somewhat similar issue mentioned on Reddit where the suggested workaround is to bind the switch action to a mouse button. Unfortunately, it doesn't work for me, the only way to solve this is to unplug and mouse and plug it back in - only then switching between configs will work properly every time, and rebooting causes the issue to come back. This may even be a hardware/firmware issue because even restarting SteelSeries GG does not fix it.

All in all, it effectively makes it rather problematic to run an app which uses GameSense SDK continuously if one wishes to switch between mouse configs at will.