Support for Rival 3 Gen 2 Wired 1038:1870
Device identification:
Bus 003 Device 003: ID 1038:1870 SteelSeries ApS SteelSeries Rival 3 Gen 2
Product URL:
https://steelseries.com/gaming-mice/rival-3-gen-2
SSE3 Screenshots:
Running on Ubuntu at the moment. I will try to get these from another machine and update this post.
I'm willing to help out doing the reverse engineering for this model as needed!
Hello,
I collected some info about this mouse and wrote the specs but I didn't have time to create the issue for this new device at that time and then I forgot... ^^'
So here are the specs. I don't know when I will have time to work on it but I will need someone to test :)
Rival 3 Gen 2 (Wired) (1038:1870)
SteelSeries released a new mouse:
- Name: Rival 3 Gen 2
- Vendor ID:
0x1038 - Product ID:
0x1870 - Endpoint: ? (probably 0 or 3?)
Protocol
Here are some info I was able to find and that should be checked/tested.
sensitivity
Similar protocol than our multidpi_range handler but with separated X/Y DPI.
Packets format:
0x34 <CPI_count [1-5]> <CPI_selected [0-4]> <CPI_1_X> <CPI_1_Y> [... <CPI_5_X> <CPI_5_Y>]
-
0x00: 0 -
0x04: 200 -
0x06: 300 -
0x08: 400 -
0x0B: 500 -
0x0D: 600 -
0x0F: 700 -
0x12: 800 -
0x14: 900 -
0x16: 1000 -
0x19: 1100 -
0x1B: 1200 -
0x1D: 1300 -
0x20: 1400 -
0x22: 1500 -
0x24: 1600 -
0x27: 1700 -
0x29: 1800 -
0x2B: 1900 -
0x2E: 2000 -
0x30: 2100 -
0x32: 2200 -
0x34: 2300 -
0x37: 2400 -
0x39: 2500 -
0x3B: 2600 -
0x3E: 2700 -
0x40: 2800 -
0x42: 2900 -
0x45: 3000 -
0x47: 3100 -
0x49: 3200 -
0x4C: 3300 -
0x4E: 3400 -
0x50: 3500 -
0x53: 3600 -
0x55: 3700 -
0x57: 3800 -
0x5A: 3900 -
0x5C: 4000 -
0x5E: 4100 -
0x61: 4200 -
0x63: 4300 -
0x65: 4400 -
0x68: 4500 -
0x6A: 4600 -
0x6C: 4700 -
0x6F: 4800 -
0x71: 4900 -
0x73: 5000 -
0x76: 5100 -
0x78: 5200 -
0x7A: 5300 -
0x7D: 5400 -
0x7F: 5500 -
0x81: 5600 -
0x84: 5700 -
0x86: 5800 -
0x88: 5900 -
0x8B: 6000 -
0x8D: 6100 -
0x8F: 6200 -
0x92: 6300 -
0x94: 6400 -
0x96: 6500 -
0x99: 6600 -
0x9B: 6700 -
0x9D: 6800 -
0xA0: 6900 -
0xA2: 7000 -
0xA4: 7100 -
0xA7: 7200 -
0xA9: 7300 -
0xAB: 7400 -
0xAD: 7500 -
0xB0: 7600 -
0xB2: 7700 -
0xB4: 7800 -
0xB7: 7900 -
0xB9: 8000 -
0xBC: 8100 -
0xBE: 8200 -
0xC0: 8300 -
0xC3: 8400 -
0xC5: 8500
polling_rate
handler: choice
Packet format:
0x2B <rate>
<rate>:
-
0x04= 125 Hz -
0x03= 250 Hz -
0x02= 500 Hz -
0x01= 1000 Hz
color
handler: rgbcolor
Zone 1:
0x21 0x01 <R1> <G1> <B1>
Zone 2:
0x21 0x02 0x00 0x00 0x00 <R2> <G2> <B2>
Zone 3:
0x21 0x03 0x00 0x00 0x00 0x00 0x00 0x00 <R3> <G3> <B3>
reactive_color
handler: reactive_rgbcolor
Packet:
0x26 <R> <G> <B>
led_brightness
handler: range
Packet:
0x22 <brightness>
<brightness>:
- [0-100, 1] % → [0x00-0x64, 1]
rainbow_effect
handler: choice
Packet:
0x22 <effect>
<effect>:
- all:
0b111 - bottom:
0b100 - middle:
0b010 - top:
0b001 - bottom-middle:
0b110 - middle-top:
0b011 - bottom-top:
0b101
default_lighting
handler: choice
Packet:
0x27 <2B:value>
<value>:
- off: 0x00 0x00
- reactive: 0x00 0x01
- rainbow: 0x01 0x00
- reactive-rainbow: 0x01 0x01
buttons_mapping
handler: buttons
packet:
0x2A <5B:Button1> ... <5B:Button6(cpi)> <5B:ScrollUp> <5B:ScrollDown>
- disable: 0x00
- button 1-6: 0x01 - 0x06
- CPI: 0x30
- ScrollUp: 0x31
- ScrollDown: 0x32
- Keyboard Key: 0x51
- Multemedia Key: 0x61
save
packet:
0x11 0x00
With my very limited ability, I was able to make a profile for just the color and default_lighting. Endpoint is 3. Color for zone 1 and zone 2 works as expected, but setting a value for zone 3 just turns off the LEDs for zones 1 and 2. Setting default_lighting to off turns off the LEDs for just zone 3. So I can at least get all the LEDs off, which is what I wanted.
The default rainbow setting is awful for a dark or work environment. I thought I could just turn it off with the Engine software on my Mac laptop and reconnect it to my Linux desktop. Turns out that Engine doesn't save the settings to the hardware, so I'd be stuck with rainbow on Linux. Thanks so much for this, you've made my workspace a little less visually polluted 🙂
I'd also be happy to test out profiles for this model!
My rival 3 gen 2 isn't recognized, can I do something about it ?
@ShinobuFormula It is normal : currently we only have the specs, now we have to do the code :)
I'm willing to test, I followed what paytoncarter14 did on my mouse and got the annoying rainbow effect off. My script saved to the mouse internal memory successfully.
I attached the python script I used (Ai helped me write this) and I attached the PCap file from opening GG Engine starting at frame 7.
First of all, thanks a lot for this project! I just purchased this model of mouse (rival 3 gen 2 wired), love the mouse but hate the ridiculous GG / engine crapware that you are supposed to use to set it up (for some reason it prevents the computer from entering sleep mode / screen saver, and it doesn't save the settings you choose if GG is not running).
In case it helps anyone, I was able to use the RivalRGBoff.py script that @T3Kgamer shared above to permanently turn off the led lights. You just have to add to the python script a call to hid.enumerate(0x1038, 0x1870), which returns a list of HID devices in the form of a dictionary. From that list, you need to select the dictionary with interface_number = 3 and replace
device_path in the script by the value of the 'path' key, for me for example it was device_path = b'DevSrvsID:4295862085'
With this, the script successfully turns off the light, however a light still shows up whenever you click. To turn that off, following the information in the initial post for this issue, you can add the following command to the commands being sent to the mouse:
CMD_REACTIVE_COLOR_OFF = bytearray([0x00, 0x26, 0x00, 0x00, 0x00] + [0x00] * 59)
Also, to set the DPI values, one can use the following command (this sets both x and y DPI values to 7000):
CMD_SET_DPI = bytearray([0x00, 0x34, 0x01, 0x00, 0xA2, 0xA2] + [0x00] * 58)
The implementation in the pull request is complete for firmware version 1.1.5. Report inconsistencies or broken features mentioning your firmware version.
I'm willing to test, I followed what paytoncarter14 did on my mouse and got the annoying rainbow effect off. My script saved to the mouse internal memory successfully.
I attached the python script I used (Ai helped me write this) and I attached the PCap file from opening GG Engine starting at frame 7.
Thank you very much for the RivalRGBoff.py script. I also successfully saved RGB/ReaktiveOff in the mouse's internal memory using GTPchat. Now the mouse is perfect, I am very happy!
@T3Kgamer @simoncouture Thank you so much! I've turned off the lights.
Couple of notes for those unfamiliar with Python (like me):
- Download script
RivalRGBoff.py.txttorivalcfg.envdirectory and run it from there with
./bin/python3 RivalRGBoff.py.txt
- Add line
print(hid.enumerate(0x1038, 0x1870))on line 6 to list devices to finddevice_path(interface_number = 3). - Add line
device_path = b'DevSrvsID:4298590934'on line 10 with your correctdevice_pathfromhid.enumerate.