Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Sensei Ten support (1038:1832) #94

Merged
merged 3 commits into from
May 4, 2020
Merged

Conversation

beardstorm
Copy link
Contributor

I bought this mouse earlier this evening, and had of course not considered that sitting down with something like this was necessary. Thanks for providing such a great piece of software!

I duplicated the configurations used for the recently released Sensei 310 and updated the sensitivity settings to match the Sensei Ten.

Thoughts:

  • The device actually comes with five CPI presets. Is this what is referred to as "sensitivity presets"? Setting these values to anything within the range have no apparent effect.
  • The Wheel color can as of now not be configured separately. Calling the --wheel-color command ultimately does nothing. The color of both leds are updated by the --logo-color command.
  • It seems the led_id property is ignored by the software. Changing it, or even removing it completely does not prevent the software from updating the mouse color. Updating the LED indexes to [0,1] in the rgbuniversal_format object did not matter.

Questions:

  • I kept uninstalling and reinstalling the rivalcfg python package to make sure that my configuration changes were updated. Is there a quicker way to do this?

Device specifications:
https://steelseries.com/gaming-mice/sensei-ten#specs

@flozz
Copy link
Owner

flozz commented Feb 24, 2020

Hello,

thank you for your interest in this project. I will first try to answer your question in this comment and then, in an other comment, I will try to guide you to reverse engineer the mouse to have a proper support of it 😁️

The device actually comes with five CPI presets. Is this what is referred to as "sensitivity presets"? Setting these values to anything within the range have no apparent effect.

Yes, "sensitivity" preset is the CPI preset.

It seems you are right, I see five CPI presets in the default configuration of the mouse (extracted from the Windows SSE3 database):

{
  // ...
  "raw_cpi": {"level1": 400, "level2": 800, "level3": 1200, "level4": 2400, "level5": 3200},
  // ...
}

I suppose you can switch CPI preset using the button under the wheel, but you have no way to know which preset you are currenlty using. To test this feature, set all five preset to the lowest sensitivity, then move your mouse to "feel" the speed of the pointer. Then you can try to set all five preset to the higher value and move the mouse to see if something changed.

The Wheel color can as of now not be configured separately. Calling the --wheel-color command ultimately does nothing. The color of both leds are updated by the --logo-color command.

That's strange, I find two led configuration in the default config:

{
  // ...
  "logo_lighting": {
    // ...
  },
  // ...
  "wheel_lighting": {
    // ...
  },
  // ...
}

It seems the led_id property is ignored by the software. Changing it, or even removing it completely does not prevent the software from updating the mouse color. Updating the LED indexes to [0,1] in the rgbuniversal_format object did not matter.

The format of the packet sent to the Sensei Ten to configure RGB LEDs is probably different from the one of the Sensei 310 (the color packets on recent SteelSeries mice are similar but not exactly identical).

I kept uninstalling and reinstalling the rivalcfg python package to make sure that my configuration changes were updated. Is there a quicker way to do this?

You are not obligated to reinstall the software after each change, you should be able to run your dev version using the following command (from the root dir of the project):

python -m rivalcfg [args]

@flozz
Copy link
Owner

flozz commented Feb 24, 2020

Reverse engineering a mouse (if you want to try, no obligation)

The best way to add support of the mouse is to play with the SteelSeries Engine 3 (SSE3) on Windows while capturing the packet between the mouse and the computer. We can then analyze the packets to understand how to configure the mouse. Don't be afraid, it is easier than it seems. 😉️

For the "packet capturing" part, I wrote an article. It is in French, but Google translate can help: https://blog.flozz.fr/2016/03/27/steelseries-rival-100-reverse-engineering-dun-peripherique-usb/

Do not hesitate if you have question or if you need help with the capture of the packets.

Then, change one setting a time in the SSE3 to see what is sent to the mouse. You can post here the captured packet along with the setting you changed (and the value you set). You can take this post as an example: #82 (comment)

The best thing to do is to start with a simple value like the CPI:

  • Change the first CPI preset to the lower value and save the packet.
  • Change the first CPI ppreset to the higher value and save the packet.
  • Change the second CPI preset to any value and save the packet.
  • Change the third CPI preset to any value and save the packet.

this should be sufficient to understand how to configure all CPI preset :)

EDIT: I am available on Gitter (→ https://gitter.im/rivalcfg/Lobby) if you want to chat about that. I am also available on Twitter (DM → https://twitter.com/flogisoft)

@flozz
Copy link
Owner

flozz commented Feb 24, 2020

for reference, I put here the default config of the Sensei Ten extracted from the SSE3 database:

{
  "batch_resolution" : {"enable_mask": 31, "active_level": 1, 
    "resolution_1" : 8,
    "resolution_2" : 16,
    "resolution_3" : 24,
    "resolution_4" : 48,
    "resolution_5" : 64},
  "raw_cpi": {"level1": 400, "level2": 800, "level3": 1200, "level4": 2400, "level5": 3200},
  "polling_rate": {"level": 1},
  "exact_accel": {"level": 0},
  "exact_aim": {"level": 0},
  "free_move": {"level": 0},
  "button_mappings": {
    "buttons": [
      {"function": 1, "key_codes": [0, 0, 0, 0]},
      {"function": 2, "key_codes": [0, 0, 0, 0]},
      {"function": 3, "key_codes": [0, 0, 0, 0]},
      {"function": 4, "key_codes": [0, 0, 0, 0]},
      {"function": 5, "key_codes": [0, 0, 0, 0]},
      {"function": 81, "key_codes": [78, 0, 0, 0]},
      {"function": 81, "key_codes": [75, 0, 0, 0]},
      {"function": 48, "key_codes": [0, 0, 0, 0]}
    ],
    "no_live_deploy": 1
  },
  "wheel_mappings": {
    "wheels": [
      {"function": 49, "key_codes": [0, 0, 0, 0]},
      {"function": 50, "key_codes": [0, 0, 0, 0]}
    ],
    "no_live_deploy": 1
  },
  "logo_lighting":{
    "type": 1,
    "has_direction": 0,
    "direction_type": 0,
    "direction_inverted": 0,
    "focal_x": 0,
    "focal_y": 0,
    "speed": 1000,
    "scale": 1,
    "num_colors": 3,
    "colors": [
      { "r":255, "g":0,   "b":0   },
      { "r":0,   "g":255, "b":0   },
      { "r":0,   "g":0,   "b":255 },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   }
    ],
    "positions": [
      { "pos": 0  },
      { "pos": 33 },
      { "pos": 66 },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  }
    ],
    "initial_color": { "r":255, "g":0, "b":0 },
    "react_color": { "r":0, "g":0, "b":0, "time": 0 },
    "trigger_mask": 7,
    "settings_mask": 0
  },
  "wheel_lighting":{
    "type": 1,
    "has_direction": 0,
    "direction_type": 0,
    "direction_inverted": 0,
    "focal_x": 0,
    "focal_y": 0,
    "speed": 1000,
    "scale": 1,
    "num_colors": 3,
    "colors": [
      { "r":255, "g":0,   "b":0   },
      { "r":0,   "g":255, "b":0   },
      { "r":0,   "g":0,   "b":255 },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   },
      { "r":0,   "g":0,   "b":0   }
    ],
    "positions": [
      { "pos": 0  },
      { "pos": 33 },
      { "pos": 66 },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  },
      { "pos": 0  }
    ],
    "initial_color": { "r":255, "g":0, "b":0 },
    "react_color": { "r":0, "g":0, "b":0, "time": 0 },
    "trigger_mask": 7,
    "settings_mask": 0
  },
  "logo_element": {
    "pos": {
      "x": 0,
      "y": 0
    },
    "effect_index": 0
  },
  "wheel_element": {
    "pos": {
      "x": 0,
      "y": 0
    },
    "effect_index": 1
  }
}

@flozz flozz mentioned this pull request Mar 9, 2020
@FFY00
Copy link

FFY00 commented Mar 18, 2020

Hey @flozz, how did you extract that file? Is this the .edevice file?

@flozz
Copy link
Owner

flozz commented Mar 29, 2020

@FFY00 no, I was not able to understand how to use .edevice files yet...

There is a SQLite database that is built when installing SSE3, it contains the list of all devices with their default config. :)

@flozz flozz merged commit e7487ca into flozz:master May 4, 2020
@flozz
Copy link
Owner

flozz commented May 5, 2020

Released in rivalcfg v3.12.0.

Thank you :D

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.

3 participants