Skip to content

feat: Add PRO X 2 Superstrike mouse support with HITS tuning settings#3132

Open
caioquirino wants to merge 6 commits intopwr-Solaar:masterfrom
caioquirino:feat/pro-x-2-superstrike
Open

feat: Add PRO X 2 Superstrike mouse support with HITS tuning settings#3132
caioquirino wants to merge 6 commits intopwr-Solaar:masterfrom
caioquirino:feat/pro-x-2-superstrike

Conversation

@caioquirino
Copy link
Copy Markdown

Summary

Add support for the Logitech PRO X 2 Superstrike gaming mouse, including HITS (Hall-Effect Inductive Trigger Switch) tuning settings for actuation point, rapid trigger sensitivity, and click haptics.

Changes

  • Added device descriptor for PRO X 2 Superstrike (WPID: 40BD)
  • Added SUPERSTRIKE_TUNING (0x1B0C) feature constant
  • Implemented settings for HITS tuning via the 0x1B0C feature:
    • Actuation Point (1-10): Controls click depth (1=shallow, 10=deep)
    • Rapid Trigger Level (1-5): Controls rapid trigger sensitivity (1=fast, 5=slow)
    • Click Haptics (0-5): Controls haptic feedback intensity (0=off, 5=strongest)

All settings are available per-button (left and right) and grouped by feature type in the UI.

Technical Details

The HITS tuning feature (0x1B0C) protocol:

  • Function 0x00: Get capabilities [flags, button_count, max_actuation, max_rt, max_haptics, ...]
  • Function 0x20: Read button settings [button_index] -> [index, actuation, rapid_trigger, haptics, ...]
  • Function 0x10: Write button settings [button_index, actuation, rapid_trigger, haptics]

Device value ranges and quantization:

  • Actuation: 4-40 (quantized to multiples of 4)
  • Rapid Trigger: 1-20 (cannot be set to 0)
  • Haptics: 0-20 (quantized to multiples of 4: 0, 4, 8, 12, 16, 20)

Testing

Tested on PRO X 2 Superstrike mouse:

  • All settings read correctly from device
  • All settings write correctly and persist
  • Settings appear in CLI (solaar config)
  • Settings appear in GUI
  • Physical behavior changes match setting values (actuation depth, haptic feedback intensity)

Notes

  • The device also exposes a SUPERSTRIKE_HAPTICS feature (0x80E0), but testing revealed it's a non-functional stub that only echoes parameters. Haptics is actually controlled via byte 3 of the TUNING feature.
  • Rapid trigger cannot be fully disabled (setting to 0 returns an error), so the minimum level is 1.

@caioquirino
Copy link
Copy Markdown
Author

Logitech PRO X 2 Superstrike - Solaar CLI Reference

This document describes all available settings for the Logitech PRO X 2 Superstrike mouse via the Solaar CLI.

Device Identification

Property Value
Name PRO X 2 Superstrike
WPID 40BD
Protocol HID++ 4.2
Kind mouse

General CLI Syntax

# List all settings for device
solaar config <device>

# Read a specific setting
solaar config <device> <setting-name>

# Write a specific setting
solaar config <device> <setting-name> <value>

The <device> can be:

  • Device number (e.g., 1)
  • Device name (e.g., "PRO X 2 Superstrike")
  • Serial number (e.g., A1C55DB2)

Available Settings

1. Onboard Profiles

Controls whether the device uses its onboard profile or host-controlled settings.

Property Value
Setting Name onboard_profiles
Type Choice
Possible Values Disabled, Profile 1

Commands:

# Read current value
solaar config 1 onboard_profiles

# Set to disabled (allows host control of DPI, report rate, etc.)
solaar config 1 onboard_profiles Disabled

# Set to Profile 1 (use onboard profile)
solaar config 1 onboard_profiles "Profile 1"

Note: Many settings require onboard_profiles to be set to Disabled to be effective.


2. Report Rate

Controls the frequency of device movement reports.

Property Value
Setting Name report_rate_extended
Type Choice
Possible Values 8ms, 4ms, 2ms, 1ms, 500us, 250us, 125us

Commands:

# Read current value
solaar config 1 report_rate_extended

# Set to 1ms (1000Hz)
solaar config 1 report_rate_extended 1ms

# Set to 500us (2000Hz)
solaar config 1 report_rate_extended 500us

# Set to 125us (8000Hz)
solaar config 1 report_rate_extended 125us

Polling Rate Reference:

Value Polling Rate
8ms 125 Hz
4ms 250 Hz
2ms 500 Hz
1ms 1000 Hz
500us 2000 Hz
250us 4000 Hz
125us 8000 Hz

3. Sensitivity (DPI)

Controls mouse movement sensitivity.

Property Value
Setting Name dpi_extended
Type Complex (X, Y, LOD)
DPI Range 100 - 32000
LOD Values LOW, HIGH

Commands:

# Read current value
solaar config 1 dpi_extended

# Set DPI (format: {X:<value>, Y:<value>, LOD:<value>})
solaar config 1 dpi_extended "{X:800, Y:800, LOD:HIGH}"

# Set to 1600 DPI
solaar config 1 dpi_extended "{X:1600, Y:1600, LOD:HIGH}"

# Set different X and Y sensitivity
solaar config 1 dpi_extended "{X:800, Y:1600, LOD:LOW}"

HITS Tuning Settings (Hall-Effect Inductive Trigger Switch)

These settings control the advanced click behavior of the PRO X 2 Superstrike's hall-effect switches.

4. Actuation Point

Controls how deep the button must be pressed to register a click.

Property Value
Setting Name (Left) superstrike-tuning_actuation-0
Setting Name (Right) superstrike-tuning_actuation-1
Type Range
Range 1 - 10
Default 5

Value Interpretation:

  • 1 = Shallowest (hair trigger, minimal press)
  • 10 = Deepest (full press required)

Commands:

# Read left button actuation
solaar config 1 superstrike-tuning_actuation-0

# Read right button actuation
solaar config 1 superstrike-tuning_actuation-1

# Set left button to shallow actuation (hair trigger)
solaar config 1 superstrike-tuning_actuation-0 1

# Set left button to deep actuation
solaar config 1 superstrike-tuning_actuation-0 10

# Set right button to medium actuation
solaar config 1 superstrike-tuning_actuation-1 5

5. Rapid Trigger Level

Controls the rapid trigger sensitivity, which allows the button to re-actuate quickly after partial release.

Property Value
Setting Name (Left) superstrike-tuning_rapid-trigger-level-0
Setting Name (Right) superstrike-tuning_rapid-trigger-level-1
Type Range
Range 1 - 5
Default 3

Value Interpretation:

  • 1 = Fastest (most sensitive, smallest movement to re-trigger)
  • 5 = Slowest (least sensitive, larger movement needed)

Note: Rapid trigger cannot be disabled on this device. The minimum level is 1.

Commands:

# Read left button rapid trigger level
solaar config 1 superstrike-tuning_rapid-trigger-level-0

# Read right button rapid trigger level
solaar config 1 superstrike-tuning_rapid-trigger-level-1

# Set left button to fastest rapid trigger
solaar config 1 superstrike-tuning_rapid-trigger-level-0 1

# Set left button to slowest rapid trigger
solaar config 1 superstrike-tuning_rapid-trigger-level-0 5

# Set right button to medium rapid trigger
solaar config 1 superstrike-tuning_rapid-trigger-level-1 3

6. Click Haptics

Controls the intensity of the haptic feedback when clicking.

Property Value
Setting Name (Left) superstrike-tuning_haptics-0
Setting Name (Right) superstrike-tuning_haptics-1
Type Range
Range 0 - 5
Default 3

Value Interpretation:

  • 0 = Off (no haptic feedback)
  • 1 = Minimal
  • 2 = Light
  • 3 = Medium
  • 4 = Strong
  • 5 = Strongest (maximum haptic feedback)

Commands:

# Read left button haptics level
solaar config 1 superstrike-tuning_haptics-0

# Read right button haptics level
solaar config 1 superstrike-tuning_haptics-1

# Disable haptics on left button
solaar config 1 superstrike-tuning_haptics-0 0

# Set left button to maximum haptics
solaar config 1 superstrike-tuning_haptics-0 5

# Set right button to medium haptics
solaar config 1 superstrike-tuning_haptics-1 3

Complete Settings Summary

Setting CLI Name Type Range/Values Button-Specific
Onboard Profiles onboard_profiles Choice Disabled, Profile 1 No
Report Rate report_rate_extended Choice 8ms to 125us No
Sensitivity dpi_extended Complex 100-32000 DPI No
Actuation Point superstrike-tuning_actuation-{0,1} Range 1-10 Yes
Rapid Trigger superstrike-tuning_rapid-trigger-level-{0,1} Range 1-5 Yes
Click Haptics superstrike-tuning_haptics-{0,1} Range 0-5 Yes

Batch Configuration Examples

Gaming Profile (Fast Response)

#!/bin/bash
# Gaming profile: fast actuation, sensitive rapid trigger, medium haptics

solaar config 1 onboard_profiles Disabled
solaar config 1 report_rate_extended 125us
solaar config 1 dpi_extended "{X:800, Y:800, LOD:HIGH}"

# Left button - hair trigger
solaar config 1 superstrike-tuning_actuation-0 1
solaar config 1 superstrike-tuning_rapid-trigger-level-0 1
solaar config 1 superstrike-tuning_haptics-0 3

# Right button - hair trigger
solaar config 1 superstrike-tuning_actuation-1 1
solaar config 1 superstrike-tuning_rapid-trigger-level-1 1
solaar config 1 superstrike-tuning_haptics-1 3

Productivity Profile (Comfortable)

#!/bin/bash
# Productivity profile: deeper actuation, slower rapid trigger, strong haptics

solaar config 1 onboard_profiles Disabled
solaar config 1 report_rate_extended 1ms
solaar config 1 dpi_extended "{X:1600, Y:1600, LOD:HIGH}"

# Left button - comfortable click
solaar config 1 superstrike-tuning_actuation-0 7
solaar config 1 superstrike-tuning_rapid-trigger-level-0 4
solaar config 1 superstrike-tuning_haptics-0 5

# Right button - comfortable click
solaar config 1 superstrike-tuning_actuation-1 7
solaar config 1 superstrike-tuning_rapid-trigger-level-1 4
solaar config 1 superstrike-tuning_haptics-1 5

Silent Profile (No Haptics)

#!/bin/bash
# Silent profile: no haptic feedback

solaar config 1 superstrike-tuning_haptics-0 0
solaar config 1 superstrike-tuning_haptics-1 0

Programmatic Usage

Reading All Settings (JSON-like parsing)

# Get all settings as output
solaar config 1 2>/dev/null | grep "^[a-z]" | while read line; do
    setting=$(echo "$line" | cut -d'=' -f1 | tr -d ' ')
    value=$(echo "$line" | cut -d'=' -f2 | tr -d ' ')
    echo "{\"setting\": \"$setting\", \"value\": \"$value\"}"
done

Reading a Single Setting Value

# Extract just the value
solaar config 1 superstrike-tuning_actuation-0 2>/dev/null | grep "^superstrike" | cut -d'=' -f2 | tr -d ' '

Error Handling

# Check if command succeeded
if solaar config 1 superstrike-tuning_actuation-0 5 2>/dev/null; then
    echo "Setting applied successfully"
else
    echo "Failed to apply setting"
fi

Exit Codes

Code Meaning
0 Success
1 Error (device not found, invalid setting, invalid value)

Notes

  1. Device Discovery: Use solaar show to list all connected devices and their indices.

  2. Persistence: Settings are saved to ~/.config/solaar/config.yaml and automatically reapplied when the device reconnects.

  3. Onboard Profiles: When onboard_profiles is set to Profile 1, some settings (DPI, report rate) are controlled by the device's onboard memory and cannot be changed via Solaar.

  4. HITS Settings: The actuation, rapid trigger, and haptics settings are stored in the device and persist across reconnections, regardless of the onboard profile setting.

  5. Button Index: 0 = Left button, 1 = Right button.

@caioquirino
Copy link
Copy Markdown
Author

The only thing I am not sure yet, is if I should make this similar to what we currently have on G Hub (with the quantized multiples), or if I simply keep it raw, with all the levels. Any thoughts?

@pwntr
Copy link
Copy Markdown

pwntr commented Feb 25, 2026

The only thing I am not sure yet, is if I should make this similar to what we currently have on G Hub (with the quantized multiples), or if I simply keep it raw, with all the levels. Any thoughts?

Is it possible to have an "advanced" flag? E.g. replicate the G Hub value steps 1:1, and offer raw with all levels with an "advance" toggle checked.

I just got this mouse and have never used solaar before, excited for this to get merged and the mouse to be supported, thx a ton :)!

@sgoth
Copy link
Copy Markdown

sgoth commented Feb 25, 2026

Can't speak about the implementation other than that I'm grateful it exists 🙂

Just received the mouse, first time installed solaar from this branch and everything works as described/expected.

Also in the GUI:
image

Thank you!

@caioquirino
Copy link
Copy Markdown
Author

@pwntr / @sgoth Isn't this the absolute most impressive mouse we have ever had?!

I am so glad that this Solaar project exists and that it was so straight forward to implement the new functionality! I am using this build every day and am 100% satisfied of the results too. And the mouse is wonderful!

@sgoth
Copy link
Copy Markdown

sgoth commented Feb 25, 2026

Isn't this the absolute most impressive mouse we have ever had?!

Give me a few more minutes with it 😄
But yeah - first impression is really great.

Here is a PKGBUILD for this PR for the fellow arch users based on the existing aur/solaar-git. Probably not worth to put it in AUR as this should get merged right away! 😄

# Contributor: David Runge <dvzrv@archlinux.org>
# Contributor: Arnaud Taffanel <dev@taffanel.org>
# Contributor: Victor Häggqvist <aur a snilius d com>

pkgname=solaar-prox2-git
pkgver=1.1.19.r12.gb00891bb
pkgrel=2
pkgdesc="Linux device manager for a wide range of Logitech devices - caioquirino's PR for PRO X2 Superstrike"
url="https://pwr-solaar.github.io/Solaar/"
_url="https://github.com/caioquirino/Solaar.git"
license=(GPL-2.0-or-later)
arch=(any)
depends=(
  glib2
  gobject-introspection-runtime
  gtk3
  hicolor-icon-theme
  libnotify
  python
  python-dbus
  python-evdev
  python-gobject
  python-psutil
  python-pyudev
  python-xlib
  python-yaml
)
makedepends=(
  git
  python-build
  python-installer
  python-setuptools
  python-wheel
)
optdepends=('libayatana-appindicator: Display tray icon')

provides=("solaar" "python-hid-parser")
conflicts=("solaar" "python-hid-parser")
replaces=("python-hid-parser")

source=(
  "${pkgname}::git+${_url}#branch=feat/pro-x-2-superstrike"
)
sha512sums=('SKIP')

pkgver() {
  cd $pkgname
  # the repo is missing any tags
  git tag -am "1.1.19" 1.1.19 4bda869
  git describe --long | sed 's/\([^-]*-g\)/r\1/;s/-/./g'
}

prepare() {
  cd $pkgname
  tools/po-compile.sh
}

build() {
  cd $pkgname
  rm -rf dist # clean up old builds so dist/*.whl works in package
  python -m build --wheel --no-isolation
}

package() {
  cd $pkgname
  python -m installer --destdir="$pkgdir" dist/*.whl

  # udev
  rm -rf "$pkgdir/etc"
  install -vDm 644 rules.d/42-logitech-unify-permissions.rules -t "$pkgdir/usr/lib/udev/rules.d/"
  # docs
  install -vDm 644 {CHANGELOG,README}.md -t "$pkgdir/usr/share/doc/$pkgname/"
}
# vim:set ts=2 sw=2 et:

@pfps
Copy link
Copy Markdown
Collaborator

pfps commented Feb 25, 2026

How did you find the names of the two features?

Please provide the output of solaar show showing the features of the mouse.

@pfps
Copy link
Copy Markdown
Collaborator

pfps commented Feb 25, 2026

Did you find any documentation of the features?

@sgoth
Copy link
Copy Markdown

sgoth commented Feb 25, 2026

$ solaar show
rules cannot access modifier keys in Wayland, accessing process only works on GNOME with Solaar Gnome extension installed
solaar version 1.1.19-12-gb00891bb

Lightspeed Receiver
  Device path  : /dev/hidraw15
  USB id       : 046d:C54D
  Serial       : 7xxxx
  C Pending    : ff
    0          : 07.02.B0011
    1          : 02.11
    3          : A5.58
  Has 1 paired device(s) out of a maximum of 2.
  Notifications: software present, wireless (0x000900)
  Device activity counters: 1=251

  1: PRO X 2 Superstrike
     Device path  : None
     WPID         : 40BD
     Codename     : PRO X 2 Superstrike
     Kind         : mouse
     Protocol     : HID++ 4.2
     Report Rate : 1ms
     Serial number: 6xxxx
     Model ID:      40BDC0A80000
     Unit ID:       6xxxx
                 1: BL2 73.00.B0011
                 0: MPM 42.00.B0011
     The power switch is located on the unknown.
     Supports 36 HID++ 2.0 features:
         0: ROOT                   {0000} V0
         1: FEATURE SET            {0001} V0
         2: DEVICE FW VERSION      {0003} V7
            Firmware: 1 BL2 73.00.B0011 AB3996E33C95
            Firmware: 0 MPM 42.00.B0011 40BD96E33C95
            Unit ID: 6xxxx  Model ID: 40BDC0A80000  Transport IDs: {'wpid': '40BD', 'usbid': 'C0A8'}
         3: DEVICE NAME            {0005} V5
            Name: PRO X2 SUPERSTRIKE
            Kind: mouse
         4: WIRELESS DEVICE STATUS {1D4B} V0
         5: CONFIG CHANGE          {0020} V0
            Configuration: 11000000000000000000000000000000
         6: UNIFIED BATTERY        {1004} V5
            Battery: 97%, BatteryStatus.DISCHARGING.
         7: XY STATS               {2250} V1
         8: WHEEL STATS            {2251} V0
         9: EXTENDED ADJUSTABLE DPI {2202} V0
            Sensitivity (DPI) (saved): {X:800, Y:800, LOD:HIGH}
            Sensitivity (DPI)        : {X:800, Y:800, LOD:HIGH}
        10: MODE STATUS            {8090} V3
        11: unknown:80E0           {E080} V0
        12: SUPERSTRIKE TUNING     {1B0C} V0
        13: EXTENDED ADJUSTABLE REPORT RATE {8061} V0
            Report Rate: 1ms
            Report Rate (saved): 250us
            Report Rate        : 1ms
        14: ONBOARD PROFILES       {8100} V0
            Device Mode: Host
            Onboard Profiles (saved): Disabled
            Onboard Profiles        : Disabled
        15: MOUSE BUTTON SPY       {8110} V0
        16: FORCE PAIRING          {1500} V0
        17: unknown:1801           {0118} V0    internal, hidden, unknown:000010
        18: DEVICE RESET           {1802} V0
        19: unknown:1803           {0318} V0    internal, hidden, unknown:000010
        20: CONFIG DEVICE PROPS    {1806} V8
        21: unknown:1817           {1718} V0    internal, hidden, unknown:000010
        22: OOBSTATE               {1805} V0
        23: unknown:1830           {3018} V0    internal, hidden, unknown:000010
        24: unknown:1877           {7718} V0    internal, hidden, unknown:000010
        25: unknown:9403           {0394} V0    internal, hidden, unknown:000010
        26: unknown:1861           {6118} V0    internal, hidden, unknown:000010
        27: unknown:1890           {9018} V0    internal, hidden, unknown:000008
        28: unknown:18A1           {A118} V0    internal, hidden, unknown:000010
        29: unknown:1E00           {001E} V0    hidden
        30: unknown:1E02           {021E} V0    internal, hidden
        31: unknown:1E22           {221E} V0    internal, hidden, unknown:000010
        32: unknown:1E30           {301E} V0    internal, hidden, unknown:000010
        33: unknown:1602           {0216} V0
        34: unknown:1EB0           {B01E} V0    internal, hidden, unknown:000010
        35: unknown:18B1           {B118} V0    internal, hidden, unknown:000010
     Battery: 97%, BatteryStatus.DISCHARGING.

@pwntr
Copy link
Copy Markdown

pwntr commented Feb 25, 2026

@pwntr / @sgoth Isn't this the absolute most impressive mouse we have ever had?!

I am so glad that this Solaar project exists and that it was so straight forward to implement the new functionality! I am using this build every day and am 100% satisfied of the results too. And the mouse is wonderful!

Couldn't agree more, the 🖱️ 🪨s!

@pfps
Copy link
Copy Markdown
Collaborator

pfps commented Feb 25, 2026

Thanks for the output of solaar show.

@caioquirino
Copy link
Copy Markdown
Author

@pfps I have added some info to the PR:

docs/features.md — Added 6 new entries:

  • FORCE_PAIRING 0x1500 — Unsupported
  • SUPERSTRIKE_TUNING 0x1B0C — Supported (SuperstrikeTuning: actuation point, rapid trigger, click haptics)
  • EXTENDED_ADJUSTABLE_DPI 0x2202 — Supported (ExtendedAdjustableDpi: X/Y DPI + lift-off distance)
  • XY_STATS 0x2250 — Unsupported
  • WHEEL_STATS 0x2251 — Unsupported
  • EXTENDED_ADJUSTABLE_REPORT_RATE 0x8061 — Supported (report_rate_extended: up to 8000 Hz)

docs/devices.md — Added PRO X 2 Superstrike (WPID 40BD, HID++ 4.2) to the Mice (Lightspeed) table.

docs/capabilities.md — Added three new sections before "Onboard Profiles":

  • HITS Tuning — explains the hall-effect switch settings (actuation point, rapid trigger, click haptics) with per-button CLI names
  • Extended DPI — documents independent X/Y axis + LOD config via dpi_extended
  • Extended Report Rate — documents sub-millisecond polling (up to 8000 Hz) via report_rate_extended with a full rate table

@caioquirino
Copy link
Copy Markdown
Author

@pfps

The feature IDs were discovered by running solaar show on the unmodified codebase — at that point the device was partially recognized but unsupported features appeared as unknown:1B0C, unknown:2202, etc. The feature IDs themselves are reported by the device via HID++ feature enumeration.

Most of the feature names (EXTENDED_ADJUSTABLE_DPI, EXTENDED_ADJUSTABLE_REPORT_RATE, etc.) were already defined in hidpp20_constants.py before this PR, added by previous contributors who had documented the feature IDs without implementing them.

SUPERSTRIKE_TUNING (0x1B0C) was new — the name was chosen descriptively based on what the feature controls (the HITS switch tuning: actuation, rapid trigger, haptics).
The feature ID was discovered by probing the device.

@pfps
Copy link
Copy Markdown
Collaborator

pfps commented Feb 25, 2026

@caioquirino Thanks. I'll see if I can find some external documentation. If so, I'll update your documentation. If not, I'll have to take a close look at the code you provided. One potential issue is that your code may only work for the PRO X 2 Superstrike. (Of course, these features might only be implemented in this mouse.)

@pfps
Copy link
Copy Markdown
Collaborator

pfps commented Feb 25, 2026

The two EXTENDED features already have settings. Hopefully what you did doesn't interfere with the existing settings.

@caioquirino
Copy link
Copy Markdown
Author

@pfps I am happy to do any kind of changes necessary to make this PR the way it should be :) Just let me know, and thanks for looking at it :)

@Revono
Copy link
Copy Markdown

Revono commented Mar 3, 2026

Thank you for your work @caioquirino ! I need this. i hope getting merged soon

@pfps pfps mentioned this pull request Mar 3, 2026
@mbwilding
Copy link
Copy Markdown

mbwilding commented Mar 4, 2026

Testing on NixOS now, will edit this comment with feedback on how it went.

So, I had to boot into Windows to set the mouse to on-board profile mode, then I didn't just have a read-only one in Solaar. But otherwise the settings work, except for poll rate and dpi.

@Pitall01
Copy link
Copy Markdown

Pitall01 commented Mar 9, 2026

Testing on Fedora 43 for a week now. Seems stable, I haven't got any problems with the build or the app.

@sgoth
Copy link
Copy Markdown

sgoth commented Mar 9, 2026

Testing on NixOS now, will edit this comment with feedback on how it went.

So, I had to boot into Windows to set the mouse to on-board profile mode, then I didn't just have a read-only one in Solaar. But otherwise the settings work, except for poll rate and dpi.

This can also be done with this solaar branch.

I don't even have Windows and everything works just fine. But setting the profile is the first thing you have to do, as written in the PR.

Copy link
Copy Markdown
Collaborator

@pfps pfps left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great work! A few comments and changes.

Solaar doesn't need device descriptors for most newer devices. Also, some newer devices have different names and short names but the same WPID or USB ID. So the descriptor should be removed from descriptors.py.

The button feature is not unique to the Superstrike. A better name is ANALOG_BUTTONS.

No _ after the setting class.

The trigger switch might not be hall-effect in the future, so maybe use a better name, but only if you can think of one.

Do you have information on the bunny hop feature? I'm pretty sure that its not the hidden feature that you assign it to, but is instead 0x80E0. I may be able to help you to get it to work. As far as I can tell what it does is ignore second scroll movements for a little while after a scroll movement. So to see what it does use command 2 with the first byte a large number, like 250. Then try scrolling, wait a little bit, and then scroll again. But let's get this PR in before doing anything else.

@caioquirino
Copy link
Copy Markdown
Author

Great work! A few comments and changes.

Solaar doesn't need device descriptors for most newer devices. Also, some newer devices have different names and short names but the same WPID or USB ID. So the descriptor should be removed from descriptors.py.

The button feature is not unique to the Superstrike. A better name is ANALOG_BUTTONS.

No _ after the setting class.

The trigger switch might not be hall-effect in the future, so maybe use a better name, but only if you can think of one.

Do you have information on the bunny hop feature? I'm pretty sure that its not the hidden feature that you assign it to, but is instead 0x80E0. I may be able to help you to get it to work. As far as I can tell what it does is ignore second scroll movements for a little while after a scroll movement. So to see what it does use command 2 with the first byte a large number, like 250. Then try scrolling, wait a little bit, and then scroll again. But let's get this PR in before doing anything else.

Thanks for the valuable feedback @pfps ! I will try to work on the points you have mentioned this evening or at the weekend latest.

I have a question regarding the quantization I am doing:

Actuation: 4-40 (quantized to multiples of 4)
Rapid Trigger: 1-20 (cannot be set to 0)
Haptics: 0-20 (quantized to multiples of 4: 0, 4, 8, 12, 16, 20)

I am wondering if I should just remove/drop it or if I should keep it as is (consistency with Windows' G Hub vs fidelity with the hardware and better capability?), should I remove the quantization or keep it?

Thanks!

@pfps
Copy link
Copy Markdown
Collaborator

pfps commented Mar 11, 2026

In general I would go with the hardware capabilities, and not with the Logitech software.

@caioquirino
Copy link
Copy Markdown
Author

Hi @pfps , good evening!
I am sorry for the delay, I couldn't really focus at it til today (and all this people that were waiting for my work to be done!)

I have been testing the mouse without the quantized multipliers and I noticed that eve though the mouse can be used with the raw numbers instead of the quantized ones, there are two situations:

  • When I try to set a number smaller than 4, it simply does not change (the warning sign shows at the left of the setting)
  • When I try to set a number in between the quantized numbers (5,6,7,9,10,11 etc), I cannot feel any difference. For the haptics, any number below 4 is == 0 as well, for example.

I think Logitech simply used the quantized numbers but made the mouse itself capable to recognize only the X steps they wanted. I am not sure if this is a firmware thingy or really baked into its hardware.

So, the question is:

  • Should I keep it without the quantized multiples, and the end-user can deal with that (it would be weird for new users); or
  • Should we try to make it in a way that for this mouse in specific we can specify the quantized multiples, in a way that if another device needs the same button feature, they will be free to do it raw or quantized as well?

# Conflicts:
#	lib/logitech_receiver/hidpp20_constants.py
@caioquirino
Copy link
Copy Markdown
Author

@pfps I just pushed the code review suggestions and removed the quantized multiples in case anyone here wants to try out and tell their thoughts
@pwntr , @Revono , @sgoth , @Pitall01 tests are welcome if you can, please :) Thanks!

@caioquirino caioquirino requested a review from pfps March 25, 2026 21:36
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.

7 participants