Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Can force set angle snapping value with ratbagctl even when it's not actually supported #1568

Open
xXDeathAbyssXx opened this issue Dec 16, 2023 · 4 comments
Labels

Comments

@xXDeathAbyssXx
Copy link

Information

  • ratbagd version (ratbagd --version): 0.17
  • Piper version: 0.7
  • Distribution: Garuda Linux
  • Device: Logitech M280/320/275
  • Kernel version: 6.6.4-zen1-1-zen

Describe the bug
When attempting to adjust the angle snapping using ratbagctl, the changes do not seem to take effect on my Logitech M280/320/275 mouse.

To Reproduce
Ensure that your bug is reproducible with the CLI client, ratbagctl. If not, consider opening a bug report in libratbag instead.

Steps to reproduce the behavior:

  1. Run ratbagctl 'Logitech M280/320/275' angle_snapping set 0.
  2. Check the status with ratbagctl 'Logitech M280/320/275' angle_snapping get.
  3. Run ratbagctl 'Logitech M280/320/275' angle_snapping set 1.
  4. Check the status again with ratbagctl 'Logitech M280/320/275' angle_snapping get.

Logs
Please start the daemon with verbosity and reproduce the issue.

First, make sure it isn't running already.

$ ratbagd --verbose=raw
Starting ratbagd version 0.17 (API version 2)
Initializing libratbag
ratbag debug: New device: ASRock LED Controller
ratbag debug: Using data directory '/usr/local/share/libratbag'
ratbag debug: No data file found for 26ce:01a2
ratbag debug: New device: Logitech USB Receiver
ratbag debug: Using data directory '/usr/local/share/libratbag'
ratbag debug: 046d:c52f is a Logitech receiver, not a device. Ignoring...
ratbag debug: New device: Logitech M280/320/275
ratbag debug: Using data directory '/usr/local/share/libratbag'
ratbag debug: device assigned driver hidpp20
ratbag debug: hidraw info: bus 0x03 vendor 0x46d product 0xffffc52f
ratbag debug: hidraw info: bus 0x03 vendor 0x46d product 0x4057
ratbag debug: Logitech M280/320/275 is device '/dev/hidraw4'.
ratbag debug: Parsing HID report descriptor
ratbag debug: Parsing HID report descriptor
ratbag debug: - HID report ID 02
ratbag debug: - HID report ID 03
ratbag debug: - HID report ID 10
ratbag debug: - HID report ID 11
ratbag debug: - HID report ID 20
ratbag debug: - HID report ID 21
ratbag debug: hidpp: device supports short reports
ratbag debug: hidpp: device supports long reports
ratbag raw: hidpp write:  10 ff 00 18 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:  10 ff 00 08 00 01 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:  10 ff 01 08 00 00 00
ratbag raw: hidpp read:   11 01 01 08 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 01 18 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:  10 ff 01 18 01 00 00
ratbag raw: hidpp read:   02 00 00 01 00 ff ff 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:  10 ff 01 18 02 00 00
ratbag raw: hidpp read:   02 00 00 05 00 fe ff 00 00
ratbag raw: hidpp read:   11 01 01 18 00 03 00 01 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 01 18 03 00 00
ratbag raw: hidpp read:   02 00 00 04 00 fe ff 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:  10 ff 01 18 04 00 00
ratbag raw: hidpp read:   02 00 00 01 00 ff ff 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:  10 ff 01 18 05 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:  10 ff 01 18 06 00 00
ratbag raw: hidpp read:   11 01 01 18 18 10 60 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 01 18 07 00 00
ratbag raw: hidpp read:   02 00 00 00 00 ff ff 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:  10 ff 01 18 08 00 00
ratbag raw: hidpp read:   11 01 01 18 18 02 60 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 01 18 09 00 00
ratbag raw: hidpp read:   11 01 01 18 18 62 60 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 01 18 0a 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:  10 ff 01 18 0b 00 00
ratbag raw: hidpp read:   11 01 01 18 18 a0 60 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 01 18 0c 00 00
ratbag raw: hidpp read:   11 01 01 18 18 b1 60 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 01 18 0d 00 00
ratbag raw: hidpp read:   11 01 01 18 1b 04 00 04 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 01 18 0e 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:  10 ff 01 18 0f 00 00
ratbag raw: hidpp read:   11 01 01 18 1d f0 40 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 01 18 10 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:  10 ff 01 18 11 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:  10 ff 01 18 12 00 00
ratbag raw: hidpp read:   11 01 01 18 1e 22 60 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 01 18 13 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:  10 ff 01 18 14 00 00
ratbag raw: hidpp read:   11 01 01 18 21 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 01 18 15 00 00
ratbag raw: hidpp read:   11 01 01 18 22 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag debug: 'Logitech M280/320/275' is using protocol v4.5
ratbag raw: 'Logitech M280/320/275' has 22 features
ratbag raw: Init feature HIDPP_PAGE_ROOT (0x0000) 
ratbag raw: hidpp write:  10 ff 00 08 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:  10 ff 00 08 00 01 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:  10 ff 00 08 00 03 00
ratbag raw: hidpp read:   11 01 00 08 02 00 01 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 HIDPP_PAGE_DEVICE_NAME (0x0005) 
ratbag raw: hidpp write:  10 ff 00 08 00 05 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 HIDPP_PAGE_RESET (0x0020) 
ratbag raw: hidpp write:  10 ff 00 08 00 20 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 0x0020 is at 0x04
ratbag raw: unknown feature 0x0020
ratbag raw: Init feature HIDPP_PAGE_BATTERY_LEVEL_STATUS (0x1000) 
ratbag raw: hidpp write:  10 ff 00 08 10 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 0x1000 is at 0x05
ratbag raw: hidpp write:  10 ff 05 08 00 00 00
ratbag raw: hidpp read:   11 01 05 08 46 05 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag debug: device battery level is 70% (next 5%), status 0 
ratbag raw: Init feature 0x1810 (0x1810) 
ratbag raw: hidpp write:  10 ff 00 08 18 10 00
ratbag raw: hidpp read:   11 01 00 08 06 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: feature 0x1810 is at 0x06
ratbag raw: Init feature 0x1830 (0x1830) 
ratbag raw: hidpp write:  10 ff 00 08 18 30 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 0x1830 is at 0x07
ratbag raw: Init feature 0x1802 (0x1802) 
ratbag raw: hidpp write:  10 ff 00 08 18 02 00
ratbag raw: hidpp read:   11 01 00 08 08 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: feature 0x1802 is at 0x08
ratbag raw: Init feature 0x1862 (0x1862) 
ratbag raw: hidpp write:  10 ff 00 08 18 62 00
ratbag raw: hidpp read:   11 01 00 08 09 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: feature 0x1862 is at 0x09
ratbag raw: Init feature 0x1890 (0x1890) 
ratbag raw: hidpp write:  10 ff 00 08 18 90 00
ratbag raw: hidpp read:   11 01 00 08 0a 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: feature 0x1890 is at 0x0a
ratbag raw: Init feature 0x18a0 (0x18a0) 
ratbag raw: hidpp write:  10 ff 00 08 18 a0 00
ratbag raw: hidpp read:   11 01 00 08 0b 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: feature 0x18a0 is at 0x0b
ratbag raw: Init feature 0x18b1 (0x18b1) 
ratbag raw: hidpp write:  10 ff 00 08 18 b1 00
ratbag raw: hidpp read:   11 01 00 08 0c 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: feature 0x18b1 is at 0x0c
ratbag raw: Init feature HIDPP_PAGE_SPECIAL_KEYS_BUTTONS (0x1b04) 
ratbag raw: hidpp write:  10 ff 00 08 1b 04 00
ratbag raw: hidpp read:   11 01 00 08 0d 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: feature 0x1b04 is at 0x0d
ratbag debug: device has programmable keys/buttons
ratbag raw: hidpp write:  10 ff 0d 08 00 00 00
ratbag raw: hidpp read:   11 01 0d 08 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag debug: device has 3 buttons
ratbag raw: hidpp write:  10 ff 0d 18 00 00 00
ratbag raw: hidpp read:   11 01 0d 18 00 50 00 38 21 00 01 01 04 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 0d 28 00 50 00
ratbag raw: hidpp read:   11 01 0d 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: 0x21 pos: 0 group: 1 gmask: 0x01 raw_XY: no
      reporting: raw_xy: no persist: no divert: no remapped: 'None' (0)
ratbag raw: hidpp write:  10 ff 0d 18 01 00 00
ratbag raw: hidpp read:   11 01 0d 18 00 51 00 39 21 00 01 01 04 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 0d 28 00 51 00
ratbag raw: hidpp read:   11 01 0d 28 00 51 00 00 00 00 01 00 00 00 00 00 00 00 00 00
ratbag raw: control 1: cid: 'Right' (81) tid: 'Right Click' (57) flags: 0x21 pos: 0 group: 1 gmask: 0x01 raw_XY: no
      reporting: raw_xy: no persist: no divert: no remapped: 'None' (0)
ratbag raw: hidpp write:  10 ff 0d 18 02 00 00
ratbag raw: hidpp read:   11 01 0d 18 00 52 00 3a 31 00 02 03 05 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 0d 28 00 52 00
ratbag raw: hidpp read:   11 01 0d 28 00 52 00 00 00 00 02 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: 2 gmask: 0x03 raw_XY: yes
      reporting: raw_xy: no persist: no divert: no remapped: 'None' (0)
ratbag raw: num_control 3
ratbag raw: Init feature HIDPP_PAGE_WIRELESS_DEVICE_STATUS (0x1d4b) 
ratbag raw: hidpp write:  10 ff 00 08 1d 4b 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 0x1d4b is at 0x0e
ratbag raw: unknown feature 0x1d4b
ratbag raw: Init feature 0x1df0 (0x1df0) 
ratbag raw: hidpp write:  10 ff 00 08 1d f0 00
ratbag raw: hidpp read:   11 01 00 08 0f 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: feature 0x1df0 is at 0x0f
ratbag raw: Init feature 0x1df3 (0x1df3) 
ratbag raw: hidpp write:  10 ff 00 08 1d f3 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 0x1df3 is at 0x10
ratbag raw: Init feature 0x1e00 (0x1e00) 
ratbag raw: hidpp write:  10 ff 00 08 1e 00 00
ratbag raw: hidpp read:   11 01 00 08 11 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: feature 0x1e00 is at 0x11
ratbag raw: Init feature 0x1e22 (0x1e22) 
ratbag raw: hidpp write:  10 ff 00 08 1e 22 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 0x1e22 is at 0x12
ratbag raw: Init feature 0x1eb0 (0x1eb0) 
ratbag raw: hidpp write:  10 ff 00 08 1e b0 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 0x1eb0 is at 0x13
ratbag raw: Init feature 0x2130 (0x2130) 
ratbag raw: hidpp write:  10 ff 00 08 21 30 00
ratbag raw: hidpp read:   11 01 00 08 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: feature 0x2130 is at 0x14
ratbag raw: unknown feature 0x2130
ratbag raw: Init feature 0x2205 (0x2205) 
ratbag raw: hidpp write:  10 ff 00 08 22 05 00
ratbag raw: hidpp read:   11 01 00 08 15 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag raw: feature 0x2205 is at 0x15
ratbag raw: unknown feature 0x2205
ratbag raw: hidpp write:  10 ff 0d 08 00 00 00
ratbag raw: hidpp read:   11 01 0d 08 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ratbag debug: device has 3 buttons
ratbag raw: hidpp write:  10 ff 0d 18 00 00 00
ratbag raw: hidpp read:   11 01 0d 18 00 50 00 38 21 00 01 01 04 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 0d 28 00 50 00
ratbag raw: hidpp read:   11 01 0d 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: 0x21 pos: 0 group: 1 gmask: 0x01 raw_XY: no
      reporting: raw_xy: no persist: no divert: no remapped: 'None' (0)
ratbag raw: hidpp write:  10 ff 0d 18 01 00 00
ratbag raw: hidpp read:   11 01 0d 18 00 51 00 39 21 00 01 01 04 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 0d 28 00 51 00
ratbag raw: hidpp read:   11 01 0d 28 00 51 00 00 00 00 01 00 00 00 00 00 00 00 00 00
ratbag raw: control 1: cid: 'Right' (81) tid: 'Right Click' (57) flags: 0x21 pos: 0 group: 1 gmask: 0x01 raw_XY: no
      reporting: raw_xy: no persist: no divert: no remapped: 'None' (0)
ratbag raw: hidpp write:  10 ff 0d 18 02 00 00
ratbag raw: hidpp read:   11 01 0d 18 00 52 00 3a 31 00 02 03 05 00 00 00 00 00 00 00
ratbag raw: hidpp write:  10 ff 0d 28 00 52 00
ratbag raw: hidpp read:   11 01 0d 28 00 52 00 00 00 00 02 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: 2 gmask: 0x03 raw_XY: yes
      reporting: raw_xy: no persist: no divert: no remapped: 'None' (0)
ratbag raw: num_control 3
ratbag raw:  - button0: Left (50) ../src/driver-hidpp20.c:106
ratbag raw:  - button1: Right (51) ../src/driver-hidpp20.c:106
ratbag raw:  - button2: Middle (52) ../src/driver-hidpp20.c:106
ratbag debug: driver match found: Logitech HID++2.0
hidraw4: "Logitech M280/320/275", 1 profiles
ratbag debug: New device: Logitech USB Receiver
ratbag debug: Using data directory '/usr/local/share/libratbag'
ratbag debug: 046d:c52f is a Logitech receiver, not a device. Ignoring...
DBus server ready

Additional context
I'm using Garuda Linux with a Logitech M280/320/275 mouse. The issue seems specific to the angle snapping feature, and I've tried setting it to both 0 and 1 using ratbagctl with no noticeable effect.

@xXDeathAbyssXx
Copy link
Author

Current Device Configuration

thundering-gerbil - Logitech M280/320/275
Model: usb:046d:4057:0
Device Type: Mouse
Number of Buttons: 3
Number of Leds: 0
Number of Profiles: 1
Profile 0: (active)
Name: n/a
Angle Snapping: True
Button: 0 is mapped to 'button 1'
Button: 1 is mapped to 'button 2'
Button: 2 is mapped to 'button 3'

@staticssleever668
Copy link
Member

Hi! Currently only the ASUS driver support setting angle snapping option. In Piper the toggle for angle snapping is shown greyed out for this exact reason, however, the fact you are able to forcefully change it (which doesn't actually change any setting in mouse memoery) with ratbagctl is a bug.

ratbagd version (ratbagd --version): 0.17

(I know that what 'ratbagd --version' says, but you are actually running libratbag-git, although I really want to make a release for a while now).

@staticssleever668 staticssleever668 transferred this issue from libratbag/piper Dec 16, 2023
@staticssleever668 staticssleever668 changed the title [Logitech M280/320/275] Issue with Angle Snapping Adjustment Can force set angle snapping value with ratbagctl even when it's not actually supported Dec 16, 2023
@xXDeathAbyssXx
Copy link
Author

Thank you very much for your response and for transferring the problem!

I wanted to ask if there is any solution or plan to address this issue on Linux based operating systems. Is there a possibility that support for angle snapping will be implemented in future versions of ratbagd or libratbag? I apologize if this question is off topic and appreciate any guidance or suggestions you can provide.

Thanks again for your time and effort.

@staticssleever668
Copy link
Member

Basically the issue is that we don't have enough developers. To implement this we need someone who knows how HID++, the protocol used in Logitech mice, works.
Nowadays the original creators of libratbag are not around here, I only know my way around the sinowealth driver and just maintain libratbag on high level.

It could be really easy to implement, here is an 'angle_snapping' member in the profile data:

uint8_t angle_snapping;

Which is not used anywhere, but we can see how 'report_rate' in the same struct is used, and looks like all code to handle it is this:
profile->report_rate = 1000 / max(1, pdata->profile.report_rate);

pdata->profile.report_rate = 1000 / profile->report_rate;

But I don't have any Logitech devices to try doing it nor do I know how to help out someone remotely about this, like, "can it be a mouse doesn't actually support adjusting angle snapping?", "what if I write invalid data to mouse memory? Can I recover it?".

So, it's not a 'wontfix', it's just that we lack people and time. PRs welcome! :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants