Skip to content

Add SteelSeries Rival 5 support#268

Open
nonoo wants to merge 7 commits intoflozz:masterfrom
nonoo:master
Open

Add SteelSeries Rival 5 support#268
nonoo wants to merge 7 commits intoflozz:masterfrom
nonoo:master

Conversation

@nonoo
Copy link

@nonoo nonoo commented Feb 7, 2026

No description provided.

@flozz
Copy link
Owner

flozz commented Feb 9, 2026

Hello,

Thank you for you PR. Il will try to review it after the release of the next Rivalcfg version (I do not want to delay it) :).

Just a few remark/question:

  • is it possible to set each LED color one by one? (it would be better to use the "standard" rgbcolor handler to have a more standard CLI and it will also be easier to implement a GUI)

  • For the CPI range, i removed the possibility to use decimal numbers as it was inaccurate (the sensor have strange gaps between values so I now use a fixed conversion table). The Rival 5 seems to use the TrueMove Air sensor so it should be like the Aerox 5: https://github.com/flozz/rivalcfg/blob/master/rivalcfg/devices/aerox5.py#L14-L27

  • Also do not update the device list in the readme, i regenerate it at release time :)

@nonoo
Copy link
Author

nonoo commented Feb 9, 2026

The Rival 5 has a LED strip which needs setting all of its LED values in one go and it's not possible to read out previous LED strip values, so sadly it's not possible to set each LED color separately.

I've removed the section from the README and added use of the TrueMove Air sensor conversion table.

@flozz
Copy link
Owner

flozz commented Feb 9, 2026

Ok, thank you for your response!

Do not forget to remove changes in range.py :)

@nonoo
Copy link
Author

nonoo commented Feb 9, 2026

Ok, range.py changes are now reverted

@flozz
Copy link
Owner

flozz commented Feb 16, 2026

I am still thinking it is possible to set LEDs colors one by one. the FF 03 looks like flags (little endian?) to me. It may be possible for example to set LED2 color with something like this:

21 02 00 00 00 00 RR GG BB ... 
\/ \___/ \______/ \______/
|  FLAGS  padding   LED2
\_ CMD

I am trying to get more info about this and I will tell you :)

@nonoo
Copy link
Author

nonoo commented Feb 16, 2026

You are right, the 2 bytes after the 0x21 command is a LED bit mask and the device will only change those colors which are selected by the bits. I've added commands to change LED colors individually.

@flozz
Copy link
Owner

flozz commented Feb 19, 2026

Hello,

Sorry for the time it took me, I here is the review! :)

handler

As it is possible to set individually each LED color, I think it is better to remove the onestr_rgbcolor handler and use the existing rgbcolor one instead:

  • it will be less code to maintain fo me
  • it will be simpler to build the GUI later
  • The CLI will be a bit longer but more consistent with what already exists

To achieve this, can you tell me if one of the following work (the test is both to confirm it could work and to check if the flags are Little Endian or Big Endian):

"color_test1": {
    "label": "",
    "description": "",
    "cli": ["--color-test1"],
    "command": [
        0x21, 0x02, 0x00,  # "Command" (cmd + flags LE)
        0x00, 0x00, 0x00,  # "Padding for LED1
    ],
    "value_type": "rgbcolor",
    "default": "#FF1800"
},
"color_test2": {
    "label": "",
    "description": "",
    "cli": ["--color-test2"],
    "command": [
        0x21, 0x00, 0x02,  # "Command" (cmd + flags BE)
        0x00, 0x00, 0x00,  # "Padding for LED1
    ],
    "value_type": "rgbcolor",
    "default": "#FF1800"
},

test it with commands like:

rivalcfg --color-test1 aqua
rivalcfg --color-test2 lime

One of the command should change the color of the LED2 (see schema bellow) to the requested color (the other one may turn it black).

CLI options naming

For the naming of the CLI options we must keep the coherence with other devices so we will use the naming schema of the Rival600 ( https://flozz.github.io/rivalcfg/devices/rival600.html )

-C  --wheel-color                        --z0
-c  --logo-color                         --z1
    --left-strip-top-color               --z2
    --right-strip-top-color              --z3
    --left-strip-middle-top-color        --z4
    --right-strip-middle-top-color       --z5
    --left-strip-middle-bottom-color     --z6
    --right-strip-middle-bottom-color    --z7
    --left-strip-bottom-color            --z8
    --right-strip-bottom-color           --z9

For logo and wheel we keep consistency from Rival 600 for the --zN option, for others we use the LED number from this schema:

image

I hope i made no mistake, do not hesitate to tell me if something is wrong! :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants