Coder Social home page Coder Social logo

Comments (16)

cvuchener avatar cvuchener commented on June 28, 2024 1

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.

iamzubin avatar iamzubin commented on June 28, 2024 1

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.

cvuchener avatar cvuchener commented on June 28, 2024

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.

mxmgh avatar mxmgh commented on June 28, 2024

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.

bentiss avatar bentiss commented on June 28, 2024

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.

cvuchener avatar cvuchener commented on June 28, 2024

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.

mxmgh avatar mxmgh commented on June 28, 2024

@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.

cvuchener avatar cvuchener commented on June 28, 2024

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.

cvuchener avatar cvuchener commented on June 28, 2024

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.

cvuchener avatar cvuchener commented on June 28, 2024

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.

bentiss avatar bentiss commented on June 28, 2024

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.

whot avatar whot commented on June 28, 2024

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.

cvuchener avatar cvuchener commented on June 28, 2024

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.

whot avatar whot commented on June 28, 2024

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.

iamzubin avatar iamzubin commented on June 28, 2024

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.

FFY00 avatar FFY00 commented on June 28, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.