Comments (16)
Here is a branch with the proposed changes: https://github.com/cvuchener/libratbag/tree/hidpp20-divert-fix
I will wait for feedback before submitting a PR since I cannot test it myself.
from libratbag.
so I found a solution here "masterOptions"
it uses the libhidpp
it only supports MX master right now(No 2S), but you can change DEVICE_NAME in devicefinder.h and make it work
Will add support for 2S soon
from libratbag.
Could you use the --verbose=raw
option instead of strace? strace's output is too hard to read and ratbag-command verbose can give more information than reads and writes.
from libratbag.
Of course. The output from ratbag-command --verbose=raw info /dev/input/event0
before and after ratbag-command button 5 action set button 1
is below.
As an aside, I submitted a PR to rename the "UNKNOWN" default action for the wheel-ratchet-mode but that's not related to the thumb button brokenness; all my debug output is from git master.
Before:
ratbag debug: Logitech MX Master is device '/dev/hidraw1'. ratbag debug: report ID 01 ratbag debug: report ID 0e ratbag debug: report ID 02 ratbag debug: report ID 03 ratbag debug: report ID 04 ratbag debug: report ID 10 ratbag debug: report ID 11 ratbag debug: report ID 20 ratbag debug: report ID 21 ratbag raw: hidpp write: 11 ff 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 18 04 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 00 08 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x0001 is at 0x01 ratbag raw: hidpp write: 11 ff 01 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 08 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 00 03 00 02 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 1d 4b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 06 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 14 00 01 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 1b 04 00 03 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 22 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 0b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 0c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 21 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 0d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 21 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 0e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 65 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 00 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 13 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 30 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 90 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 91 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 a1 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 c0 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 1d f3 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 1e 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 1e b0 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 03 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 1a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 61 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 1b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 90 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 92 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 1d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 92 40 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag debug: 'Logitech MX Master' is using protocol v4.5 ratbag raw: 'Logitech MX Master' has 30 features ratbag raw: Init feature HIDPP_PAGE_ROOT (0x0000) ratbag raw: hidpp write: 11 ff 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x0000 is at 0x00 ratbag raw: Init feature HIDPP_PAGE_FEATURE_SET (0x0001) ratbag raw: hidpp write: 11 ff 00 08 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x0001 is at 0x01 ratbag raw: Init feature HIDPP_PAGE_DEVICE_INFO (0x0003) ratbag raw: hidpp write: 11 ff 00 08 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 02 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x0003 is at 0x02 ratbag raw: unknown feature 0x0003 ratbag raw: Init feature 0x5 (0x0005) ratbag raw: hidpp write: 11 ff 00 08 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x0005 is at 0x03 ratbag raw: unknown feature 0x0005 ratbag raw: Init feature 0x1d4b (0x1d4b) ratbag raw: hidpp write: 11 ff 00 08 1d 4b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1d4b is at 0x04 ratbag raw: unknown feature 0x1d4b ratbag raw: Init feature 0x20 (0x0020) ratbag raw: hidpp write: 11 ff 00 08 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x0020 is at 0x05 ratbag raw: unknown feature 0x0020 ratbag raw: Init feature HIDPP_PAGE_BATTERY_LEVEL_STATUS (0x1000) ratbag raw: hidpp write: 11 ff 00 08 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1000 is at 0x06 ratbag raw: hidpp write: 11 ff 06 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 06 08 32 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag debug: device battery level is 50% (next 20%), status 0 ratbag raw: Init feature 0x1806 (0x1806) ratbag raw: hidpp write: 11 ff 00 08 18 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 07 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1806 is at 0x07 ratbag raw: unknown feature 0x1806 ratbag raw: Init feature 0x1814 (0x1814) ratbag raw: hidpp write: 11 ff 00 08 18 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 08 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1814 is at 0x08 ratbag raw: unknown feature 0x1814 ratbag raw: Init feature HIDPP_PAGE_SPECIAL_KEYS_BUTTONS (0x1b04) ratbag raw: hidpp write: 11 ff 00 08 1b 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 09 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1b04 is at 0x09 ratbag debug: device has programmable keys/buttons ratbag raw: hidpp write: 11 ff 09 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 50 00 38 01 00 01 01 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 0: cid: 'Left' (80) tid: 'Left Click' (56) flags: 0x01 pos: 0 group: 1 gmask: 0x01 raw_XY: no reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 51 00 39 01 00 01 01 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 0d 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 1: cid: 'Right' (81) tid: 'Right Click' (57) flags: 0x01 pos: 0 group: 1 gmask: 0x01 raw_XY: no reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 52 00 3a 31 00 03 07 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 2: cid: 'Middle' (82) tid: 'Middle Click' (58) flags: 0x31 pos: 0 group: 3 gmask: 0x07 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 53 00 3c 31 00 02 03 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 3: cid: 'Back' (83) tid: 'Back Click' (60) flags: 0x31 pos: 0 group: 2 gmask: 0x03 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 56 00 3e 31 00 02 03 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 4: cid: 'Forward' (86) tid: 'Forward Click' (62) flags: 0x31 pos: 0 group: 2 gmask: 0x03 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 c3 00 a9 31 00 03 07 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 5: cid: 'AppSwitchGesture' (195) tid: 'UNKNOWN' (169) flags: 0x31 pos: 0 group: 3 gmask: 0x07 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 c4 00 9d 31 00 03 07 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 c4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 c4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 6: cid: 'SmartShift' (196) tid: 'SmartShift' (157) flags: 0x31 pos: 0 group: 3 gmask: 0x07 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 d7 00 b4 a0 00 04 00 03 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 d7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 d7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 7: cid: 'UNKNOWN' (215) tid: 'UNKNOWN' (180) flags: 0xa0 pos: 0 group: 4 gmask: 0x00 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: Init feature HIDPP_PAGE_ADJUSTABLE_DPI (0x2201) ratbag raw: hidpp write: 11 ff 00 08 22 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 0a 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x2201 is at 0x0a ratbag debug: device has adjustable dpi ratbag raw: hidpp write: 11 ff 0a 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 0a 08 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 0a 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 0a 18 00 01 90 e0 c8 06 40 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 0a 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 0a 28 00 03 e8 03 e8 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: sensor 0: current dpi: 1000 (default: 1000) min: 400 max: 1600 steps: 200 ratbag debug: device is at 1000 dpi (variable between 400 and 1600). ratbag raw: Init feature 0x2100 (0x2100) ratbag raw: hidpp write: 11 ff 00 08 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 0b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x2100 is at 0x0b ratbag raw: unknown feature 0x2100 ratbag raw: Init feature 0x2110 (0x2110) ratbag raw: hidpp write: 11 ff 00 08 21 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 0c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x2110 is at 0x0c ratbag raw: unknown feature 0x2110 ratbag raw: Init feature 0x2121 (0x2121) ratbag raw: hidpp write: 11 ff 00 08 21 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 0d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x2121 is at 0x0d ratbag raw: unknown feature 0x2121 ratbag raw: Init feature 0x6501 (0x6501) ratbag raw: hidpp write: 11 ff 00 08 65 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 0e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x6501 is at 0x0e ratbag raw: unknown feature 0x6501 ratbag raw: Init feature 0xc1 (0x00c1) ratbag raw: hidpp write: 11 ff 00 08 00 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x00c1 is at 0x0f ratbag raw: unknown feature 0x00c1 ratbag raw: Init feature 0x1813 (0x1813) ratbag raw: hidpp write: 11 ff 00 08 18 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 10 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1813 is at 0x10 ratbag raw: unknown feature 0x1813 ratbag raw: Init feature 0x1830 (0x1830) ratbag raw: hidpp write: 11 ff 00 08 18 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 11 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1830 is at 0x11 ratbag raw: unknown feature 0x1830 ratbag raw: Init feature 0x1890 (0x1890) ratbag raw: hidpp write: 11 ff 00 08 18 90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 12 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1890 is at 0x12 ratbag raw: unknown feature 0x1890 ratbag raw: Init feature 0x1891 (0x1891) ratbag raw: hidpp write: 11 ff 00 08 18 91 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 00 08 13 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1891 is at 0x13 ratbag raw: unknown feature 0x1891 ratbag raw: Init feature 0x18a1 (0x18a1) ratbag raw: hidpp write: 11 ff 00 08 18 a1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 00 08 14 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x18a1 is at 0x14 ratbag raw: unknown feature 0x18a1 ratbag raw: Init feature 0x18c0 (0x18c0) ratbag raw: hidpp write: 11 ff 00 08 18 c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 00 08 15 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x18c0 is at 0x15 ratbag raw: unknown feature 0x18c0 ratbag raw: Init feature 0x1df3 (0x1df3) ratbag raw: hidpp write: 11 ff 00 08 1d f3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 00 08 16 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1df3 is at 0x16 ratbag raw: unknown feature 0x1df3 ratbag raw: Init feature 0x1e00 (0x1e00) ratbag raw: hidpp write: 11 ff 00 08 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 00 08 17 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1e00 is at 0x17 ratbag raw: unknown feature 0x1e00 ratbag raw: Init feature 0x1eb0 (0x1eb0) ratbag raw: hidpp write: 11 ff 00 08 1e b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 02 00 ratbag raw: hidpp read: 11 01 00 08 18 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1eb0 is at 0x18 ratbag raw: unknown feature 0x1eb0 ratbag raw: Init feature 0x1803 (0x1803) ratbag raw: hidpp write: 11 ff 00 08 18 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 00 08 19 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1803 is at 0x19 ratbag raw: unknown feature 0x1803 ratbag raw: Init feature 0x1861 (0x1861) ratbag raw: hidpp write: 11 ff 00 08 18 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 02 00 ratbag raw: hidpp read: 11 01 00 08 1a 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1861 is at 0x1a ratbag raw: unknown feature 0x1861 ratbag raw: Init feature 0x9000 (0x9000) ratbag raw: hidpp write: 11 ff 00 08 90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 00 08 1b 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x9000 is at 0x1b ratbag raw: unknown feature 0x9000 ratbag raw: Init feature 0x9200 (0x9200) ratbag raw: hidpp write: 11 ff 00 08 92 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 02 00 ratbag raw: hidpp read: 11 01 00 08 1c 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x9200 is at 0x1c ratbag raw: unknown feature 0x9200 ratbag raw: Init feature 0x9240 (0x9240) ratbag raw: hidpp write: 11 ff 00 08 92 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 00 08 1d 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x9240 is at 0x1d ratbag raw: unknown feature 0x9240 ratbag raw: hidpp write: 11 ff 0a 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 0a 08 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 0a 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 02 00 ratbag raw: hidpp read: 11 01 0a 18 00 01 90 e0 c8 06 40 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 0a 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 0a 28 00 03 e8 03 e8 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: sensor 0: current dpi: 1000 (default: 1000) min: 400 max: 1600 steps: 200 ratbag debug: device is at 1000 dpi (variable between 400 and 1600). ratbag raw: hidpp write: 11 ff 09 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 02 00 ratbag raw: hidpp read: 11 01 09 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 09 18 00 50 00 38 01 00 01 01 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 09 28 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 0: cid: 'Left' (80) tid: 'Left Click' (56) flags: 0x01 pos: 0 group: 1 gmask: 0x01 raw_XY: no reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 02 00 ratbag raw: hidpp read: 11 01 09 18 00 51 00 39 01 00 01 01 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 09 28 00 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 1: cid: 'Right' (81) tid: 'Right Click' (57) flags: 0x01 pos: 0 group: 1 gmask: 0x01 raw_XY: no reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 09 18 00 52 00 3a 31 00 03 07 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 02 00 ratbag raw: hidpp read: 11 01 09 28 00 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 2: cid: 'Middle' (82) tid: 'Middle Click' (58) flags: 0x31 pos: 0 group: 3 gmask: 0x07 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 09 18 00 53 00 3c 31 00 02 03 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 09 28 00 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 3: cid: 'Back' (83) tid: 'Back Click' (60) flags: 0x31 pos: 0 group: 2 gmask: 0x03 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 09 18 00 56 00 3e 31 00 02 03 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 02 00 ratbag raw: hidpp read: 11 01 09 28 00 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 4: cid: 'Forward' (86) tid: 'Forward Click' (62) flags: 0x31 pos: 0 group: 2 gmask: 0x03 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 09 18 00 c3 00 a9 31 00 03 07 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 09 28 00 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 5: cid: 'AppSwitchGesture' (195) tid: 'UNKNOWN' (169) flags: 0x31 pos: 0 group: 3 gmask: 0x07 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 09 18 00 c4 00 9d 31 00 03 07 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 c4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 02 00 ratbag raw: hidpp read: 11 01 09 28 00 c4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 6: cid: 'SmartShift' (196) tid: 'SmartShift' (157) flags: 0x31 pos: 0 group: 3 gmask: 0x07 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 09 18 00 d7 00 b4 a0 00 04 00 03 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 d7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 00 00 01 00 ratbag raw: hidpp read: 11 01 09 28 00 d7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 7: cid: 'UNKNOWN' (215) tid: 'UNKNOWN' (180) flags: 0xa0 pos: 0 group: 4 gmask: 0x00 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: - button0: Left (50) driver-hidpp20.c:92 ratbag raw: - button1: Right (51) driver-hidpp20.c:92 ratbag raw: - button2: Middle (52) driver-hidpp20.c:92 ratbag raw: - button3: Back (53) driver-hidpp20.c:92 ratbag raw: - button4: Forward (56) driver-hidpp20.c:92 ratbag raw: - button5: AppSwitchGesture (c3) driver-hidpp20.c:92 ratbag raw: - button6: SmartShift (c4) driver-hidpp20.c:92 ratbag raw: - button7: UNKNOWN (d7) driver-hidpp20.c:92 ratbag debug: driver match found: Logitech HID++2.0 Device 'Logitech MX Master' Capabilities: res btn-key Number of buttons: 8 Profiles supported: 1 Profile 0 (enabled) (active) Resolutions: 0: 1000dpi @ 0Hz (active) Button: 0 type left is mapped to 'button 1' Button: 1 type right is mapped to 'button 2' Button: 2 type middle is mapped to 'button 3' Button: 3 type side (backward) is mapped to 'button 4' Button: 4 type extra (forward) is mapped to 'button 5' Button: 5 type unknown is mapped to 'none' Button: 6 type wheel ratchet mode switch is mapped to 'UNKNOWN' Button: 7 type unknown is mapped to 'none'
After:
ratbag debug: Logitech MX Master is device '/dev/hidraw1'. ratbag debug: report ID 01 ratbag debug: report ID 0e ratbag debug: report ID 02 ratbag debug: report ID 03 ratbag debug: report ID 04 ratbag debug: report ID 10 ratbag debug: report ID 11 ratbag debug: report ID 20 ratbag debug: report ID 21 ratbag raw: hidpp write: 11 ff 00 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 18 04 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 00 08 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x0001 is at 0x01 ratbag raw: hidpp write: 11 ff 01 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 08 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 00 03 00 02 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 1d 4b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 06 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 14 00 01 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 09 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 1b 04 00 03 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 0a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 22 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 0b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 0c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 21 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 0d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 21 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 0e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 65 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 00 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 13 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 30 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 90 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 91 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 a1 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 c0 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 1d f3 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 1e 00 40 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 1e b0 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 19 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 03 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 1a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 18 61 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 1b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 90 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 1c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 92 00 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 01 18 1d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 01 18 92 40 60 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag debug: 'Logitech MX Master' is using protocol v4.5 ratbag raw: 'Logitech MX Master' has 30 features ratbag raw: Init feature HIDPP_PAGE_ROOT (0x0000) ratbag raw: hidpp write: 11 ff 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x0000 is at 0x00 ratbag raw: Init feature HIDPP_PAGE_FEATURE_SET (0x0001) ratbag raw: hidpp write: 11 ff 00 08 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x0001 is at 0x01 ratbag raw: Init feature HIDPP_PAGE_DEVICE_INFO (0x0003) ratbag raw: hidpp write: 11 ff 00 08 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 02 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x0003 is at 0x02 ratbag raw: unknown feature 0x0003 ratbag raw: Init feature 0x5 (0x0005) ratbag raw: hidpp write: 11 ff 00 08 00 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x0005 is at 0x03 ratbag raw: unknown feature 0x0005 ratbag raw: Init feature 0x1d4b (0x1d4b) ratbag raw: hidpp write: 11 ff 00 08 1d 4b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1d4b is at 0x04 ratbag raw: unknown feature 0x1d4b ratbag raw: Init feature 0x20 (0x0020) ratbag raw: hidpp write: 11 ff 00 08 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x0020 is at 0x05 ratbag raw: unknown feature 0x0020 ratbag raw: Init feature HIDPP_PAGE_BATTERY_LEVEL_STATUS (0x1000) ratbag raw: hidpp write: 11 ff 00 08 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1000 is at 0x06 ratbag raw: hidpp write: 11 ff 06 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 fd 7f ff 00 00 ratbag raw: hidpp read: 11 01 06 08 32 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag debug: device battery level is 50% (next 20%), status 0 ratbag raw: Init feature 0x1806 (0x1806) ratbag raw: hidpp write: 11 ff 00 08 18 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 fc 7f ff 00 00 ratbag raw: hidpp read: 11 01 00 08 07 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1806 is at 0x07 ratbag raw: unknown feature 0x1806 ratbag raw: Init feature 0x1814 (0x1814) ratbag raw: hidpp write: 11 ff 00 08 18 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 ef bf fd 00 00 ratbag raw: hidpp read: 11 01 00 08 08 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1814 is at 0x08 ratbag raw: unknown feature 0x1814 ratbag raw: Init feature HIDPP_PAGE_SPECIAL_KEYS_BUTTONS (0x1b04) ratbag raw: hidpp write: 11 ff 00 08 1b 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 ed 1f fe 00 00 ratbag raw: hidpp read: 11 01 00 08 09 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1b04 is at 0x09 ratbag debug: device has programmable keys/buttons ratbag raw: hidpp write: 11 ff 09 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 f1 9f fe 00 00 ratbag raw: hidpp read: 11 01 09 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 ee df fe 00 00 ratbag raw: hidpp read: 11 01 09 18 00 50 00 38 01 00 01 01 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 f1 3f ff 00 00 ratbag raw: hidpp read: 11 01 09 28 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 0: cid: 'Left' (80) tid: 'Left Click' (56) flags: 0x01 pos: 0 group: 1 gmask: 0x01 raw_XY: no reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 f9 df ff 00 00 ratbag raw: hidpp read: 11 01 09 18 00 51 00 39 01 00 01 01 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 1: cid: 'Right' (81) tid: 'Right Click' (57) flags: 0x01 pos: 0 group: 1 gmask: 0x01 raw_XY: no reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 52 00 3a 31 00 03 07 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 2: cid: 'Middle' (82) tid: 'Middle Click' (58) flags: 0x31 pos: 0 group: 3 gmask: 0x07 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 53 00 3c 31 00 02 03 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 3: cid: 'Back' (83) tid: 'Back Click' (60) flags: 0x31 pos: 0 group: 2 gmask: 0x03 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 10 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 56 00 3e 31 00 02 03 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 01 10 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 4: cid: 'Forward' (86) tid: 'Forward Click' (62) flags: 0x31 pos: 0 group: 2 gmask: 0x03 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 20 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 c3 00 a9 31 00 03 07 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 c3 01 00 50 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 5: cid: 'AppSwitchGesture' (195) tid: 'UNKNOWN' (169) flags: 0x31 pos: 0 group: 3 gmask: 0x07 raw_XY: yes reporting: raw_xy: no persist: no divert: yes remapped: 'Left' (80) ratbag raw: hidpp write: 11 ff 09 18 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 c4 00 9d 31 00 03 07 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 c4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 c4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 6: cid: 'SmartShift' (196) tid: 'SmartShift' (157) flags: 0x31 pos: 0 group: 3 gmask: 0x07 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 01 00 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 d7 00 b4 a0 00 04 00 03 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 d7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 d7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 7: cid: 'UNKNOWN' (215) tid: 'UNKNOWN' (180) flags: 0xa0 pos: 0 group: 4 gmask: 0x00 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: Init feature HIDPP_PAGE_ADJUSTABLE_DPI (0x2201) ratbag raw: hidpp write: 11 ff 00 08 22 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 0a 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x2201 is at 0x0a ratbag debug: device has adjustable dpi ratbag raw: hidpp write: 11 ff 0a 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 0a 08 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 0a 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 0a 18 00 01 90 e0 c8 06 40 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 0a 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 0a 28 00 03 e8 03 e8 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: sensor 0: current dpi: 1000 (default: 1000) min: 400 max: 1600 steps: 200 ratbag debug: device is at 1000 dpi (variable between 400 and 1600). ratbag raw: Init feature 0x2100 (0x2100) ratbag raw: hidpp write: 11 ff 00 08 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 00 08 0b 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x2100 is at 0x0b ratbag raw: unknown feature 0x2100 ratbag raw: Init feature 0x2110 (0x2110) ratbag raw: hidpp write: 11 ff 00 08 21 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 10 00 00 00 ratbag raw: hidpp read: 11 01 00 08 0c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x2110 is at 0x0c ratbag raw: unknown feature 0x2110 ratbag raw: Init feature 0x2121 (0x2121) ratbag raw: hidpp write: 11 ff 00 08 21 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 10 00 00 00 ratbag raw: hidpp read: 11 01 00 08 0d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x2121 is at 0x0d ratbag raw: unknown feature 0x2121 ratbag raw: Init feature 0x6501 (0x6501) ratbag raw: hidpp write: 11 ff 00 08 65 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 04 60 00 00 00 ratbag raw: hidpp read: 11 01 00 08 0e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x6501 is at 0x0e ratbag raw: unknown feature 0x6501 ratbag raw: Init feature 0xc1 (0x00c1) ratbag raw: hidpp write: 11 ff 00 08 00 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 05 80 00 00 00 ratbag raw: hidpp read: 11 01 00 08 0f 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x00c1 is at 0x0f ratbag raw: unknown feature 0x00c1 ratbag raw: Init feature 0x1813 (0x1813) ratbag raw: hidpp write: 11 ff 00 08 18 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 06 a0 00 00 00 ratbag raw: hidpp read: 11 01 00 08 10 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1813 is at 0x10 ratbag raw: unknown feature 0x1813 ratbag raw: Init feature 0x1830 (0x1830) ratbag raw: hidpp write: 11 ff 00 08 18 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 07 c0 00 00 00 ratbag raw: hidpp read: 11 01 00 08 11 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1830 is at 0x11 ratbag raw: unknown feature 0x1830 ratbag raw: Init feature 0x1890 (0x1890) ratbag raw: hidpp write: 11 ff 00 08 18 90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 09 a0 00 00 00 ratbag raw: hidpp read: 11 01 00 08 12 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1890 is at 0x12 ratbag raw: unknown feature 0x1890 ratbag raw: Init feature 0x1891 (0x1891) ratbag raw: hidpp write: 11 ff 00 08 18 91 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 07 b0 00 00 00 ratbag raw: hidpp read: 11 01 00 08 13 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1891 is at 0x13 ratbag raw: unknown feature 0x1891 ratbag raw: Init feature 0x18a1 (0x18a1) ratbag raw: hidpp write: 11 ff 00 08 18 a1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 08 b0 00 00 00 ratbag raw: hidpp read: 11 01 00 08 14 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x18a1 is at 0x14 ratbag raw: unknown feature 0x18a1 ratbag raw: Init feature 0x18c0 (0x18c0) ratbag raw: hidpp write: 11 ff 00 08 18 c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 09 00 01 00 00 ratbag raw: hidpp read: 11 01 00 08 15 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x18c0 is at 0x15 ratbag raw: unknown feature 0x18c0 ratbag raw: Init feature 0x1df3 (0x1df3) ratbag raw: hidpp write: 11 ff 00 08 1d f3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 0a 50 01 00 00 ratbag raw: hidpp read: 11 01 00 08 16 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1df3 is at 0x16 ratbag raw: unknown feature 0x1df3 ratbag raw: Init feature 0x1e00 (0x1e00) ratbag raw: hidpp write: 11 ff 00 08 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 0b 90 01 00 00 ratbag raw: hidpp read: 11 01 00 08 17 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1e00 is at 0x17 ratbag raw: unknown feature 0x1e00 ratbag raw: Init feature 0x1eb0 (0x1eb0) ratbag raw: hidpp write: 11 ff 00 08 1e b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 0e f0 01 00 00 ratbag raw: hidpp read: 11 01 00 08 18 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1eb0 is at 0x18 ratbag raw: unknown feature 0x1eb0 ratbag raw: Init feature 0x1803 (0x1803) ratbag raw: hidpp write: 11 ff 00 08 18 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 0d e0 01 00 00 ratbag raw: hidpp read: 11 01 00 08 19 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1803 is at 0x19 ratbag raw: unknown feature 0x1803 ratbag raw: Init feature 0x1861 (0x1861) ratbag raw: hidpp write: 11 ff 00 08 18 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 07 90 01 00 00 ratbag raw: hidpp read: 11 01 00 08 1a 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x1861 is at 0x1a ratbag raw: unknown feature 0x1861 ratbag raw: Init feature 0x9000 (0x9000) ratbag raw: hidpp write: 11 ff 00 08 90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 03 60 01 00 00 ratbag raw: hidpp read: 11 01 00 08 1b 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x9000 is at 0x1b ratbag raw: unknown feature 0x9000 ratbag raw: Init feature 0x9200 (0x9200) ratbag raw: hidpp write: 11 ff 00 08 92 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 02 40 01 00 00 ratbag raw: hidpp read: 11 01 00 08 1c 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x9200 is at 0x1c ratbag raw: unknown feature 0x9200 ratbag raw: Init feature 0x9240 (0x9240) ratbag raw: hidpp write: 11 ff 00 08 92 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 f0 00 00 00 ratbag raw: hidpp read: 11 01 00 08 1d 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: feature 0x9240 is at 0x1d ratbag raw: unknown feature 0x9240 ratbag raw: hidpp write: 11 ff 0a 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 fd bf 00 00 00 ratbag raw: hidpp read: 11 01 0a 08 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 0a 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 fd 6f 00 00 00 ratbag raw: hidpp read: 11 01 0a 18 00 01 90 e0 c8 06 40 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 0a 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 fe 3f 00 00 00 ratbag raw: hidpp read: 11 01 0a 28 00 03 e8 03 e8 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: sensor 0: current dpi: 1000 (default: 1000) min: 400 max: 1600 steps: 200 ratbag debug: device is at 1000 dpi (variable between 400 and 1600). ratbag raw: hidpp write: 11 ff 09 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 ff 1f 00 00 00 ratbag raw: hidpp read: 11 01 09 08 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 ff 1f 00 00 00 ratbag raw: hidpp read: 02 00 00 00 10 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 50 00 38 01 00 01 01 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 ff 0f 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 0: cid: 'Left' (80) tid: 'Left Click' (56) flags: 0x01 pos: 0 group: 1 gmask: 0x01 raw_XY: no reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 30 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 51 00 39 01 00 01 01 00 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 fe 4f 00 00 00 ratbag raw: hidpp read: 02 00 00 ff 7f 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 1: cid: 'Right' (81) tid: 'Right Click' (57) flags: 0x01 pos: 0 group: 1 gmask: 0x01 raw_XY: no reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 ff 3f 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 52 00 3a 31 00 03 07 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 ff 7f 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 2: cid: 'Middle' (82) tid: 'Middle Click' (58) flags: 0x31 pos: 0 group: 3 gmask: 0x07 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 fe 4f 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 53 00 3c 31 00 02 03 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 ff 2f 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 3: cid: 'Back' (83) tid: 'Back Click' (60) flags: 0x31 pos: 0 group: 2 gmask: 0x03 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 ff 1f 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 56 00 3e 31 00 02 03 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 4: cid: 'Forward' (86) tid: 'Forward Click' (62) flags: 0x31 pos: 0 group: 2 gmask: 0x03 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 c3 00 a9 31 00 03 07 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 c3 01 00 50 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 5: cid: 'AppSwitchGesture' (195) tid: 'UNKNOWN' (169) flags: 0x31 pos: 0 group: 3 gmask: 0x07 raw_XY: yes reporting: raw_xy: no persist: no divert: yes remapped: 'Left' (80) ratbag raw: hidpp write: 11 ff 09 18 06 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 00 10 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 c4 00 9d 31 00 03 07 01 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 c4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 ff 1f 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 c4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 6: cid: 'SmartShift' (196) tid: 'SmartShift' (157) flags: 0x31 pos: 0 group: 3 gmask: 0x07 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: hidpp write: 11 ff 09 18 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 ff 3f 00 00 00 ratbag raw: hidpp read: 11 01 09 18 00 d7 00 b4 a0 00 04 00 03 00 00 00 00 00 00 00 ratbag raw: hidpp write: 11 ff 09 28 00 d7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: hidpp read: 02 00 00 fe 3f 00 00 00 ratbag raw: hidpp read: 11 01 09 28 00 d7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ratbag raw: control 7: cid: 'UNKNOWN' (215) tid: 'UNKNOWN' (180) flags: 0xa0 pos: 0 group: 4 gmask: 0x00 raw_XY: yes reporting: raw_xy: no persist: no divert: no remapped: 'None' (0) ratbag raw: - button0: Left (50) driver-hidpp20.c:92 ratbag raw: - button1: Right (51) driver-hidpp20.c:92 ratbag raw: - button2: Middle (52) driver-hidpp20.c:92 ratbag raw: - button3: Back (53) driver-hidpp20.c:92 ratbag raw: - button4: Forward (56) driver-hidpp20.c:92 ratbag raw: - button5: Left (50) (redirected) driver-hidpp20.c:92 ratbag raw: - button6: SmartShift (c4) driver-hidpp20.c:92 ratbag raw: - button7: UNKNOWN (d7) driver-hidpp20.c:92 ratbag debug: driver match found: Logitech HID++2.0 Device 'Logitech MX Master' Capabilities: res btn-key Number of buttons: 8 Profiles supported: 1 Profile 0 (enabled) (active) Resolutions: 0: 1000dpi @ 0Hz (active) Button: 0 type left is mapped to 'button 1' Button: 1 type right is mapped to 'button 2' Button: 2 type middle is mapped to 'button 3' Button: 3 type side (backward) is mapped to 'button 4' Button: 4 type extra (forward) is mapped to 'button 5' Button: 5 type unknown is mapped to 'button 1' Button: 6 type wheel ratchet mode switch is mapped to 'UNKNOWN' Button: 7 type unknown is mapped to 'none'
from libratbag.
Sorry for the delay.
I am currently focusing on the kernel side of HID++, and we don't have much time to work on libratbag.
Afterward, the thumb button doesn't do anything at all (neither interferes with mouse movement reporting like previously, nor emits any events as shown by libinput-debug-events upon press or release). I can't find any configuration that results in the thumb button actually performing user-assigned actions.
Same here. I guess we are missing some settings to tell to report the buttons over HID++ too. IIRC, the feature the mouse is using is not very convenient as it doesn't store the settings on the mouse itself (only in RAM) and when buttons are redirected they are not sending regular HID event anymore.
I also seem unable to get the output back to what it was originally; is there any way to clear button actions or assign "none"?
Simply power off the mouse and power it on again :)
Thanks for the PR for the ratchet mode button BTW.
Now to handle this issue: this has to be solved in the kernel, not in libratbag. We need to set the setting at each connect, which means we have to listen for events in libratbag, which we don't.
In the kernel, we would be able to implement proper redirection when needed. But that's not on my top priority list, sorry :(
from libratbag.
I have learned a little about 0x1b04 since last I posted here (mainly from https://lekensteyn.nl/files/logitech/x1b04_specialkeysmsebuttons.html), so I am giving another look at it. I see that libratbag sets the divert flag when remapping but "divert" is meant for software handling of the button and has priority over hardware remapping.
Can you try replacing the line linked above by control->reporting.divert = 0;
and see if it solves your issue?
Also the code in hidpp20_special_key_mouse_set_control can only set "divert": for resetting "divert" it should use 0x02 instead of 0x03 (same thing for the other flags). In its current form control->reporting.divert
being zero only mean "no change". And raw_XY seems to be inverted (0x30 for setting, 0x20 for resetting).
Note that I don't have hardware that can be remapped, only diverted, so I am not really sure how remapping exactly works: is it reset with the mouse as bentiss says or is it only for temporary diversion?
from libratbag.
@cvuchener it works (better)! Thank you!
Specifically, ratbag-command button 5 action set button 1 /dev/input/event0
turns button 5 into a left-click. There still doesn't seem to be a way to get it to return to the gesture action afterward.
from libratbag.
Maybe a "Default" action with value 0 could be added in hidpp20_1b04_logical_mapping
. But it would require changes with hidpp20_1b04_get_logical_control_id
because it uses 0 as an error value. Also, I am not sure how it would fits with ratbag actions (an action that would be only written, since when reading it is replaced by the actual action).
from libratbag.
Actually, I think there a much bigger UI problem than adding a easy way to reset a button to its default. Feature 1b04 only allows remapping to a very limited set of actions and this set varies with the button (this reminds me of @Hjdskes's question about "static" buttons that cannot be remapped).
As I understand libratbag (but I am not an expert on anything outside of the driver), capabilities are very general ("can remap to mouse buttons", "can remap to keys", ...) and are the same for every buttons on a given device. Is that correct? If it is that means there is no way for the user (through ratbag-command or piper) to know what are the legal remappings (and even worse, I think the current driver will fail silently in those cases).
If I look at the info for mxmgh's device, I get:
control | cid | tid | flags | pos | group | gmask |
---|---|---|---|---|---|---|
0 | 'Left' (80) | 'Left Click' (56) | 0x01 | 0 | 1 | 0x01 |
1 | 'Right' (81) | 'Right Click' (57) | 0x01 | 0 | 1 | 0x01 |
2 | 'Middle' (82) | 'Middle Click' (58) | 0x31 | 0 | 3 | 0x07 |
3 | 'Back' (83) | 'Back Click' (60) | 0x31 | 0 | 2 | 0x03 |
4 | 'Forward' (86) | 'Forward Click' (62) | 0x31 | 0 | 2 | 0x03 |
5 | 'AppSwitchGesture' (195) | 'UNKNOWN' (169) | 0x31 | 0 | 3 | 0x07 |
6 | 'SmartShift' (196) | 'SmartShift' (157) | 0x31 | 0 | 3 | 0x07 |
7 | 'UNKNOWN' (215) | 'UNKNOWN' (180) | 0xa0 | 0 | 4 | 0x00 |
Flags 0x01 means it is a mouse button, but not remappable, 0x31 is a remappable and divertable mouse button, 0xa0 (button7) means it is a virtual and divertable (?!) control (not a mouse button).
Remappable buttons can only be remapped to cid from a group in their group mask: Buttons 3 and 4 can only be remapped to cid from group 1 and 2 ("Left", "Right", "Back", "Forward"), whereas Buttons 2, 5, 6 can remapped to the first three groups (the previous + "Middle", "AppSwitchGesture", "SmartShift"). I am not sure about the use of the virtual control, it cannot be used as a target for remapping.
You can find another example in the doc.
I think that for this kind of device, a GUI should propose a list of valid actions to the user and maybe a hint about the default action.
What do you think can be done about that?
I am not sure about the gestures, but I suspect they are configured in a similar fashion.
from libratbag.
There is an error in previous post. the "reprog" flag is just a hint for the software to know if it should let the user change the behaviour of the button. It is actually the gmask that tell if the button can be remapped from the hardware (gmask = 0 means no group to remap to).
That means that on the MX Master, the first two buttons can be remapped (to group 1: "Left", "Right"), but it shouldn't shown to the user. I guess it is for inverting the buttons for left-handed people (although I thought there was a special feature for that), but letting the user freely remap those could lead to a mouse with two "right" buttons that can be unusable.
from libratbag.
Long story short, yes, capabilities are per device, not per button. We could have per buttons capabilities, but I think this should be more in the way "do you support remapping to X?" for each button (@whot?).
Then in the driver, we could do whatever we feel comfortable to allow or not remapping of buttons.
from libratbag.
adding button capabilities is fine, we have those already for resolution and it would fit into the design. iirc we just left it out originally because there was no need for it or we didn't want to deal with it. The tricky bit is going to be how to design the capabilities though, there's likely to be some device- or driver-specific caps and we don't want to blow out the capabilities too much.
from libratbag.
There is ratbag_button_enable_action_type
, so there are already per-button capabilities. What is missing is an accurate list of available actions. Other devices cannot tell what special actions they support either.
We could add a function in the drivers that for a given button gives a list of additional actions. By "additional", I mean actions that are not already included in action_caps
but not necessarily special actions. A 1b04 device would have no action_caps, only additional actions from the list. A 8100 device would have button/key/macro action_caps, and an additional list of special actions. Since I don't think any device supports every special action defined in libratbag, no device should add the special type in their action_caps and use additional actions instead.
In the D-Bus interface, it would requires adding a "AdditionalActions" property (type a(sv)
) in org.freedesktop.ratbag1.Button
. The user could either:
- take an action type from ActionTypes, and use whatever he wants in the parameter.
- take an action from AdditionalActions, and use the type (string part) to choose the method and use the content of the variant as the parameter.
from libratbag.
Two things: rather than additional actions, we should just group the action type, similar to the capabilities. I don't think having a separate field would help much.
And for
Other devices cannot tell what special actions they support either.
Maybe we should do this with a hwdb entry again? seems like a cop-out, but it's a one-time change for anything we can't get at runtime.
from libratbag.
I just bought the device,
and while trying to RE the mouse for custom drivers like my last device (g300s) I realised that the software runs a daemon which does the gesture stuff for the mouse, Unlike all the gaming mice this mouse doesn't store gestures on the device.
though I can't find any data when I run usbmon on Linux and use the unifying receiver.
from libratbag.
See if my HID++ dissector can pick up something.
https://github.com/libratbag/ratbag-toolbox/tree/master/dissectors
Beware that is still very beta. If it works for you great! Otherwise, you'll have to wait until I can fix it.
from libratbag.
Related Issues (20)
- ratbag error: Can't talk to the mouse: 'Broken pipe' (-32) HOT 2
- Logitech G502 X Lightspeed only shows up when wired HOT 21
- Trust Verto Ergonomic Wireless mouse support (145f:0263); no official configuratin utility available HOT 3
- ratbagd doesn't see my Steelseries Sensei 310 HOT 1
- Can you please add support for White Shark Marcus 2 GM-5005 Gaming mouse and A4Tech X7 Oscar Gaming Mouse (X-710BK)? HOT 1
- (Logitech G102) ratbagctl list shows No devices available. HOT 1
- UtechSmart Gaming Mouse support HOT 1
- Cannot set multiple keys macro
- Ratbagd: Permissioned denied. "sudo systemctl reload dbus.service" fixes it until reboot.
- Incorporate mouse buttons into macros HOT 1
- Add support for Rampage SMX R85 HOT 1
- `action set key/macro` doesn't work on Logitech G102 HOT 1
- 0.17 Not detecting Sensei 310 HOT 1
- Logitech G203 LIGHTSYNC support HOT 2
- Support for the Glorious Model I HOT 1
- 650 rival not being detected Manjaro linux HOT 1
- Marvo M726W support (1ea7:0066) HOT 1
- Media macros support HOT 1
- Ratbagd do not start Asus_key_mapping failed HOT 2
- `resolution active get` does not report updated value after I cycle resolutions by clicking mouse buttons HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from libratbag.