Skip to content

fix: add support for Lift DPI Button Detection + Drag / support for MacOS 27 - #1938

Open
nikuscs wants to merge 5 commits into
noah-nuebling:masterfrom
nikuscs:test/logitech-hidpp-pr-1848
Open

fix: add support for Lift DPI Button Detection + Drag / support for MacOS 27#1938
nikuscs wants to merge 5 commits into
noah-nuebling:masterfrom
nikuscs:test/logitech-hidpp-pr-1848

Conversation

@nikuscs

@nikuscs nikuscs commented Jul 19, 2026

Copy link
Copy Markdown

Like the title says adds support for Logictech DPI Button support detected as Button 6, and also support for MacOS 27 mission control + drag events & smooth transition velocity.

Tested with:

  • Bold Receiver + Bluetooth
  • MacOS 27 Beta 3

The PR was done with help of AI, reviewed and checked, let me know if its helpful.

miguelAngelo1999 and others added 5 commits July 19, 2026 11:54
…a buttons

Fixes noah-nuebling#1791, noah-nuebling#1790, noah-nuebling#1800, noah-nuebling#1740, noah-nuebling#1744

Logitech mice with extra buttons (thumb, tilt wheel, precision, side buttons)
use HID++ 2.0 ReprogControlsV4 (feature 0x1B04). These buttons are silently
consumed by the mouse firmware until the host sends a SetCidReporting command
to divert them. Once diverted, they arrive as 0x11 long reports.

This implementation calls Buttons.handleInput() directly — no CGEvent
round-trip needed, no extra event tap overhead.

Protocol:
- GetFeature(0x1B04) -> feature index
- GetCount -> number of controls on this device
- GetCidInfo for each control -> CID, TID, capability flags
- Skip controls whose TID maps to a native HID button (L/R/M/Back/Fwd)
- SetCidReporting with flags=0x03 (divert=1, divert_valid=1) for the rest

The flags byte follows the 'valid bit' pattern documented in Solaar
(pwr-Solaar/Solaar hidpp20.py): each flag bit has a corresponding valid bit
= flag << 1, telling firmware the field is being intentionally set.

TID-based filtering correctly excludes natively-reported buttons across all
Logitech models without any per-device hardcoding.

Tested on: Logitech M720 Triathlon (Bluetooth), macOS 15 Sequoia, macOS 26
- Left tilt  (CID=0x005B) -> button 6 in MMF ✅
- Right tilt (CID=0x005D) -> button 7 in MMF ✅
- Thumb      (CID=0x00D0) -> button 8 in MMF ✅
- Back/forward continue working natively (not diverted) ✅

References:
- https://github.com/pwr-Solaar/Solaar (hidpp20.py)
- https://github.com/libratbag/libratbag (hidpp20.c)
- https://lekensteyn.nl/files/logitech/x1b04_specialkeysmsebuttons.html
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