Closed imLinguin closed 2 years ago
lsusb output: Bus 001 Device 006: ID 1038:1836 SteelSeries ApS SteelSeries Aerox 3
There is also a wireless version ID 1038:1838 SteelSeries ApS SteelSeries Aerox 3 Wireless
Would be very interested in support for this and happy to provide testing! (will take a look at adding it myself when I have some spare time but that may not be for a while)
@flozz https://flozz.github.io/rivalcfg/contributing.html mentions reverse-engineering protocols - and I'd like to give it a go. What methods / tools do you use?
@fluffynuts Hello,
Basically, I use Wireshark and a Windows VM with the SteelSeries Engine 3 installed on it.
I do not had time to write a documentation in English, but I wrote two articles (in French) on my blog:
Maybe Google Translate could help you :)
@flozz thanks, I'll see what I can figure out (:
@flozz after a quick look through a translated one - nice articles! I think that I'll be able to figure it out. I have a windows machine here so I can skip the VM part, but otherwise, excellent. Thanks!
@flozz ok, I've had a look, and so far I can see:
setting colors by zone, data packets: zone 1: 21 01 00 RR GG BB zone 2: 21 01 01 RR GG BB zone 3: 21 01 02 RR GG BB
Setting any of the fancy effects results in a lot of chatter that looks like this, so it looks like breath and rainbow and so forth may set up by the software? But when one receives the mouse or when it reverts to "default", I see the overall rainbow effect, no breathing, so I'm not sure how that's accomplished in the light of watching other effects applied.
For my immediate use, I just want solid colors - I want to do an orange-to-red gradient from the front of the mouse back, to match my rig, so I figure this is as good a time as any to start on a profile.
This is where the wheels fall off a bit - I have this so far:
from .. import usbhid
profile = {
"name": "SteelSeries Aerox 3",
"models": [
{
"name": "SteelSeries Aerox 3 Wireless - USB Wired",
"vendor_id": 0x1038,
"product_id": 0x183A,
"endpoint": 0 # ? not sure what to set here
}
],
"settings": {
"z1_color": {
"label": "Strip top LED color",
"description": "Set the color of the top LED of the strip",
"cli": ["--strip-top-color", "--z1"],
"report_type": usbhid.HID_REPORT_TYPE_OUTPUT,
"command": [0x21, 0x01, 0x00],
"command_suffix": [0x64], # not sure what to put here: the observed frames are 00 all the way after the location indicator and color
"value_type": "rgbcolor",
"default": "red"
},
"z2_color": {
"label": "Strip middle LED color",
"description": "Set the color of the middle LED of the strip",
"cli": ["--strip-middle-color", "--z2"],
"report_type": usbhid.HID_REPORT_TYPE_OUTPUT,
"command": [0x21, 0x02, 0x00],
"command_suffix": [0x64], # not sure what to put here: the observed frames are 00 all the way after the location indicator and color
"value_type": "rgbcolor",
"default": "red"
},
"z1_color": {
"label": "Strip bottom LED color",
"description": "Set the color of the bottom LED of the strip",
"cli": ["--strip-top-color", "--z3"],
"report_type": usbhid.HID_REPORT_TYPE_OUTPUT,
"command": [0x21, 0x03, 0x00],
"command_suffix": [0x64], # not sure what to put here: the observed frames are 00 all the way after the location indicator and color
"value_type": "rgbcolor",
"default": "red"
},
}
This is for the aerox 3 as plugged in directly on usb; the device id changes to 1838 for the wireless dongle, so I guess I'd add a "model" for that?
What I'm missing:
I also see .csv files, so it looks like device python files might be generated? Assuming I'm even remotely on the right track with the data I think I've captured, where do I go from here? Sorry if this is a stupid question - if there's a doc that I should be looking at, please point me there (I don't see answers to my questions at https://flozz.github.io/rivalcfg/contributing.html or in the readme, but that might just me being stupid)
In wired version I noticed that Engine is constantly sending packets to mice. Is this also a thing on wireless version? I'm just curious
I'm just assuming so - I connected my aerox in wireless state and it didn't seem to make much difference in the chatter
@imLinguin that's why I don't think this mouse can do the effects "natively" - I saw constant updates being sent (color-wise) when I had an effect enabled in the engine. As far as solid colors go, it looks like that's remembered until the mouse changes connection or powers off. BUT I see that other mice have a "save" packet, and I haven't seen that when testing against this (yet) - though I could just be missing it. When I click "save" in Engine, I haven't seen any different packets going to the mouse, so either I'm missing it or "save" means "save to Engine storage and keep applying as required".
If the latter is the case, I'd probably recommend to not use effects if you want the most out of your Aerox 3 - that chatter is quite noisy & can't come for free, surely. Not that I'm trying to bash this mouse - I'm really enjoying gaming with it, and the color-setting to match my rig would just be nice-to-have.
additional data from @imLinguin :)
EDIT: I add the link here to keep a track, not everyone is on Discord :)
I started to implement the support of the
on the aerox3
branch and I need you to test on both devices.
Here is the implemented commands:
SteelSeries Aerox 3 Options:
-s SENSITIVITY, --sensitivity SENSITIVITY
Set sensitivity preset (DPI) (up to 5 settings, from 200 dpi to 8500
dpi, default: '800, 1600')
-p POLLING_RATE, --polling-rate POLLING_RATE
Set polling rate (Hz) (values: 125, 250, 500, 1000, default: 1000)
--top-color Z1_COLOR, --z1 Z1_COLOR
Set the color of the top LED (e.g. red, #ff0000, ff0000, #f00, f00,
default: red)
--middle-color Z2_COLOR, --z2 Z2_COLOR
Set the color of the middle LED (e.g. red, #ff0000, ff0000, #f00,
f00, default: lime)
--bottom-color Z3_COLOR, --z3 Z3_COLOR
Set the color of the bottom LED (e.g. red, #ff0000, ff0000, #f00,
f00, default: blue)
-l LED_BRIGHTNESS, --led-brightness LED_BRIGHTNESS
Set the brightness of the LEDs (from 0 to 100, default: 100)
To test, first get / setup the project:
sudo apt install python3-venv
git clone https://github.com/flozz/rivalcfg.git rivalcfg-aerox3
cd rivalcfg-aerox3
git checkout aerox3
python3 -m venv __env__
source __env__/bin/activate
pip install -e .
then you can test with command like:
python -m rivalcfg ...
example:
python -m rivalcfg --z1 red --z2 lime --z3 blue
Please test all commands on both devices, it will help
NOTE: I used the information from the Aerox Wireless (wired) for the colors, but it seems slightly different from the non Wireless one, so please test the three zones and repports me any errors / incoherence :)
Also can you provide screenshot of your SS Engine for each mice to help me to understand available settings? :)
Finally, once we will be done with de basic configuration,
we will work to see if there is a save
command and if it work for both devices,
we will see if there is some "effects" available in the mouse like the Rival 3
:)
Here are the screenshots from SSE. Aerox 3 non-wireless version
On linux, the mouse (wireless) doesn't appear to fully "see" the mouse:
if I run, eg python -m rivalcfg --help
, there's no device-specific help, and python -m rivalcfg -z1 red
errors
however, python -m rivalcfg --print-debug
prints out:
RIVALCFG
========
Version: 4.3.0
udev rules installed: True
udev rules up to date: True
Installation path: /home/daf/code/opensource/rivalcfg/rivalcfg
OPERATING SYSTEM
================
OS: Linux
Platform: Linux-5.10.52-gentoo-x86_64-x86_64-11th_Gen_Intel-R-_Core-TM-_i9-11900KF_@_3.50GHz-with-glibc2.33
Version: #4 SMP Sat Aug 14 20:35:58 SAST 2021
Distribution issue: This is \n.\O (\s \m \r) \t
PYTHON
======
Python version: 3.9.6
HIDAPI version: 0.10.1
PLUGGED STEELSERIES DEVICES ENDPOINTS
=====================================
1038:1838 | 00 | SteelSeries Aerox 3 Wireless (firmware v0)
1038:1838 | 01 | SteelSeries Aerox 3 Wireless (firmware v0)
1038:1838 | 02 | SteelSeries Aerox 3 Wireless (firmware v0)
1038:1838 | 03 | SteelSeries Aerox 3 Wireless (firmware v0)
1038:1838 | 04 | SteelSeries Aerox 3 Wireless (firmware v0)
I also don't get -z1
to work when running the mouse wired, though the output from --print-debug
differs slightly as the mouse presents as a different device:
RIVALCFG
========
Version: 4.3.0
udev rules installed: True
udev rules up to date: True
Installation path: /home/daf/code/opensource/rivalcfg/rivalcfg
OPERATING SYSTEM
================
OS: Linux
Platform: Linux-5.10.52-gentoo-x86_64-x86_64-11th_Gen_Intel-R-_Core-TM-_i9-11900KF_@_3.50GHz-with-glibc2.33
Version: #4 SMP Sat Aug 14 20:35:58 SAST 2021
Distribution issue: This is \n.\O (\s \m \r) \t
PYTHON
======
Python version: 3.9.6
HIDAPI version: 0.10.1
PLUGGED STEELSERIES DEVICES ENDPOINTS
=====================================
1038:183a | 00 | SteelSeries Aerox 3 Wireless (firmware v0)
1038:183a | 01 | SteelSeries Aerox 3 Wireless (firmware v0)
1038:183a | 02 | SteelSeries Aerox 3 Wireless (firmware v0)
1038:183a | 03 | SteelSeries Aerox 3 Wireless (firmware v0)
1038:183a | 04 | SteelSeries Aerox 3 Wireless (firmware v0)
it's not impossible that I'm just Doing Something Wrong. I followed the steps from above tho:
I've also tried python3 -m rivalcfg --update-udev
just in case - no change
@fluffynuts try changing endpoint value here: https://github.com/flozz/rivalcfg/blob/aerox3/rivalcfg/devices/aerox3.py#L17 Changing it to 3 worked for my non-wireless Aerox3. Try finding which works for you.
a friend on windows is achieving the same non-result so either we're both doing the same Wrong Thing, or there's something more interesting at play here...
ah, will give it a go @imLinguin
eh, tried endpoints 0-4, no luck ):
one thing I noticed is that when I run with --print-debug
, the report includes device id 1038:1838
which isn't in the models list (tho adding doesn't seem to have helped much, tbh)
I wonder if this is related to the firmware update I received when I first connected to a windows box? what's the firmware status with other people on this thread? ie, who has updated, who hasn't?
You might also need to reboot if you just updated udev rules. You should use the mouse in wired mode for now, which is currently implemented.
I'm assuming you are in wireless mode, because of productId mismatch @fluffynuts
I only implemented the wired mode yet, not the wireless mode with the dongle :)
I separated profiles for the Aerox 3 and the Aerox 3 Wireless.
@fluffynuts, let's continue in #167 for your device :)
@imLinguin everything should now work out of the box for the Aerox 3
I also added a, option on enable the rainbow effect:
-e LIGHT_EFFECT, --light-effect LIGHT_EFFECT
Set the light effect (values: rainbow-shift, default: rainbow-shift)
you can try it with:
python3 -m rivalcfg -e rainbow-shift
Also can you try to change value from 0xFF to something else (like 0x00 and other random values) to see if there is other effects available?
Firmware version command:
90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Mouse response:
00 69 ba ae ea 94 ff ff 43 01 84 04 01 00 2d 00
c7 48 1e 61 00 00 00 00 b2 1d 0f 00 00 00 00 00
40 00 00 00 40 00 00 00 00 00 00 00 00 00 00 00
01 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00
90 31 2e 30 2e 31 31 20 2b 66 62 35 33 36 37 62
64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
version starts after 0x90
Been following this thread and very excited to see it just worked for me for the first time with the latest changes, though the -e/--light-effect
flag doesn't appear to work nor does its description show up in the --help menu, is there I might be missing to get that working? Really appreciate what you're doing with this, looking forward to having control of my mouse even on linux!
Logs below:
❯ sudo python3 -m rivalcfg -e rainbow-shift
usage: rivalcfg [-h] [--list] [--version] [--no-save] [--update-udev] [--print-udev]
[--print-debug] [-s SENSITIVITY] [-p POLLING_RATE] [--top-color Z1_COLOR]
[--middle-color Z2_COLOR] [--bottom-color Z3_COLOR] [-l LED_BRIGHTNESS]
[-r]
rivalcfg: error: unrecognized arguments: -e rainbow-shift
❯ sudo python3 -m rivalcfg --help
usage: rivalcfg [-h] [--list] [--version] [--no-save] [--update-udev] [--print-udev]
[--print-debug] [-s SENSITIVITY] [-p POLLING_RATE] [--top-color Z1_COLOR]
[--middle-color Z2_COLOR] [--bottom-color Z3_COLOR] [-l LED_BRIGHTNESS]
[-r]
optional arguments:
-h, --help show this help message and exit
--list List supported devices and exit
--version show program's version number and exit
--no-save Do not persist settings in the internal device memory
--update-udev Updates udev rules (Linux only, requires to be run as root)
--print-udev Prints udev rules and exit
--print-debug Prints debug informations and exit
SteelSeries Aerox 3 Wireless (wired mode) Options:
-s SENSITIVITY, --sensitivity SENSITIVITY
Set sensitivity preset (DPI) (up to 5 settings, from 200 dpi to
8500 dpi, default: '800, 1600')
-p POLLING_RATE, --polling-rate POLLING_RATE
Set polling rate (Hz) (values: 125, 250, 500, 1000, default:
1000)
--top-color Z1_COLOR, --z1 Z1_COLOR
Set the color of the top LED (e.g. red, #ff0000, ff0000, #f00,
f00, default: red)
--middle-color Z2_COLOR, --z2 Z2_COLOR
Set the color of the middle LED (e.g. red, #ff0000, ff0000, #f00,
f00, default: lime)
--bottom-color Z3_COLOR, --z3 Z3_COLOR
Set the color of the bottom LED (e.g. red, #ff0000, ff0000, #f00,
f00, default: blue)
-l LED_BRIGHTNESS, --led-brightness LED_BRIGHTNESS
Set the brightness of the LEDs (from 0 to 16, default: 16)
-r, --reset Reset all settings to their factory default
Please report any bug on Github: https://github.com/flozz/rivalcfg/issues
Thank you for your feedback @mewtlu
We are talking about two different devices in this thread:
The -e
option is only for the Aerox 3 and you seems to have the Aerox 3 Wireless, that's why you do not have it.
To avoid confusion (as the devices are different and use a slightly different protocol), there is an other issue dedicated to the wireless version of the Aerox 3 → #167
I updated the Aerox 3 (not the wireless one) with the following options:
-e RAINBOW_EFFECT, --rainbow-effect RAINBOW_EFFECT
Set the rainbow effect (can be cleared by setting a color) (values:
all, bottom, middle, top, bottom-middle, middle-top, bottom-top,
default: all)
-b BUTTONS_MAPPING, --buttons BUTTONS_MAPPING
Set the mapping of the buttons (default: buttons(button1=button1;
button2=button2; button3=button3; button4=button4; button5=button5;
button6=dpi; scrollup=scrollup; scrolldown=scrolldown;
layout=qwerty))
I still have to implement the firmware reading code, then the support of this device should be complete. :)
(and once this one finished, i will continue working on the Aerox 3 Wireless, there is a lot to do on it :) )
There is also Reactive tab in SSE which I documented in my repo as Reactive Effect. It's wave looking, one color effect from top to bottom, being triggered when you press any mouse button. It can be either set to some color or disabled.
Update: I added the reactive color option:
-a REACTIVE_COLOR, --reactive-color REACTIVE_COLOR
Set the color of the LEDs in reaction to a button click (e.g. off,
disable, red, #ff0000, ff0000, #f00, f00, default: off)
can you check it works? :)
Works perfectly
I am back on the project :)
The Aerox 3 Support seems ok, just need to write some test before merging it to master.
The Aerox 3 support is now on master
:)
Whould it be possible to add Aerox 3 mouse support? I will try to reverse engineer it in a few days. Will add lsusb output later.