pwr-Solaar / Solaar

Linux device manager for Logitech devices
https://pwr-solaar.github.io/Solaar
GNU General Public License v2.0
5.38k stars 401 forks source link

Ability to store and read values in rules #2417

Open NXTler opened 6 months ago

NXTler commented 6 months ago

Information

``` solaar version 1.1.11 Bolt Empfänger Device path : /dev/hidraw2 USB id : 046d:C548 Serial : 36374345353645463342354637364134 Has 1 paired device(s) out of a maximum of 6. Notifications: wireless, software present (0x000900) Device activity counters: 1=115 1: MX Master 3S Device path : None WPID : B034 Codename : MX Master 3S Kind : mouse Protocol : HID++ 4.5 Report Rate : 0ms Serial number: 3E8213B8 Model ID: B03400000000 Unit ID: 3E8213B8 Bootloader: BL1 69.00.B0003 Firmware: RBM 22.00.B0003 Other: The power switch is located on the (unknown). Supports 36 HID++ 2.0 features: 0: ROOT {0000} V0 1: FEATURE SET {0001} V0 2: DEVICE FW VERSION {0003} V4 Firmware: Bootloader BL1 69.00.B0003 B03438FCA4E6 Firmware: Firmware RBM 22.00.B0003 B03438FCA4E6 Firmware: Other Unit ID: 3E8213B8 Model ID: B03400000000 Transport IDs: {'btleid': 'B034'} 3: DEVICE NAME {0005} V0 Name: MX Master 3S Kind: mouse 4: WIRELESS DEVICE STATUS {1D4B} V0 5: CONFIG CHANGE {0020} V0 6: CRYPTO ID {0021} V1 7: DEVICE FRIENDLY NAME {0007} V0 Friendly Name: MX Master 3S 8: UNIFIED BATTERY {1004} V3 Battery: 95%, discharging. 9: REPROG CONTROLS V4 {1B04} V5 Tasten-/Maustastenaktionen (saved): {Left Button:Left Click, Right Button:Right Click, Middle Button:Mouse Middle Button, Back Button:Mouse Back Button, Forward Button:Mouse Forward Button, Mouse Gesture Button:Gesture Button Navigation, Smart Shift:Smart Shift} Tasten-/Maustastenaktionen : {Left Button:Left Click, Right Button:Right Click, Middle Button:Mouse Middle Button, Back Button:Mouse Back Button, Forward Button:Mouse Forward Button, Mouse Gesture Button:Gesture Button Navigation, Smart Shift:Smart Shift} Taste/Maustaste umleiten (saved): {Middle Button:Normal, Back Button:Umgeleitet, Forward Button:Umgeleitet, Mouse Gesture Button:Umgeleitet, Smart Shift:Umgeleitet} Taste/Maustaste umleiten : {Middle Button:Normal, Back Button:Umgeleitet, Forward Button:Umgeleitet, Mouse Gesture Button:Umgeleitet, Smart Shift:Umgeleitet} 10: CHANGE HOST {1814} V1 Anderen Empfänger wählen : 1:TMPotratz 11: HOSTS INFO {1815} V2 Host 0 (paired): TMPotratz Host 1 (paired): TMPotratz Host 2 (unpaired): 12: XY STATS {2250} V1 13: ADJUSTABLE DPI {2201} V2 Empfindlichkeit (DPI) (saved): 4500 Empfindlichkeit (DPI) : 4500 14: SMART SHIFT {2110} V0 Mausrad-Rastfunktion (saved): Einrastend Mausrad-Rastfunktion : Einrastend Mausrad-Rastgeschwindigkeit (saved): 8 Mausrad-Rastgeschwindigkeit : 8 15: HIRES WHEEL {2121} V1 Multiplier: 15 Has invert: Normal wheel motion Has ratchet switch: Normal wheel mode Low resolution mode HID notification Mausrad-Scroll-Richtung (saved): False Mausrad-Scroll-Richtung : False Auflösung für Mausrad-Scrollen (saved): False Auflösung für Mausrad-Scrollen : False Mausrad Umleitung (saved): False Mausrad Umleitung : False 16: THUMB WHEEL {2150} V0 Daumenrad-Scroll-Richtung (saved): False Daumenrad-Scroll-Richtung : False Daumenrad Umleitung (saved): True Daumenrad Umleitung : True 17: WHEEL STATS {2251} V0 18: DFUCONTROL {00C3} V0 19: DEVICE RESET {1802} V0 internal, hidden, unknown:000010 20: unknown:1803 {1803} V0 internal, hidden, unknown:000010 21: CONFIG DEVICE PROPS {1806} V8 internal, hidden, unknown:000010 22: unknown:1816 {1816} V0 internal, hidden, unknown:000010 23: OOBSTATE {1805} V0 internal, hidden 24: unknown:1830 {1830} V0 internal, hidden, unknown:000010 25: unknown:1891 {1891} V7 internal, hidden, unknown:000008 26: unknown:18A1 {18A1} V0 internal, hidden, unknown:000010 27: unknown:1E00 {1E00} V0 hidden 28: unknown:1E02 {1E02} V0 internal, hidden 29: unknown:1602 {1602} V0 30: unknown:1EB0 {1EB0} V0 internal, hidden, unknown:000010 31: unknown:1861 {1861} V1 internal, hidden, unknown:000010 32: unknown:9300 {9300} V0 internal, hidden, unknown:000010 33: unknown:9001 {9001} V0 internal, hidden, unknown:000010 34: unknown:1E22 {1E22} V0 internal, hidden, unknown:000010 35: unknown:9205 {9205} V0 internal, hidden, unknown:000010 Has 8 reprogrammable keys: 0: Left Button , default: Left Click => Left Click mse, analytics key events, pos:0, group:1, group mask:g1 reporting: default 1: Right Button , default: Right Click => Right Click mse, analytics key events, pos:0, group:1, group mask:g1 reporting: default 2: Middle Button , default: Mouse Middle Button => Mouse Middle Button mse, reprogrammable, divertable, raw XY, analytics key events, pos:0, group:2, group mask:g1,g2 reporting: default 3: Back Button , default: Mouse Back Button => Mouse Back Button mse, reprogrammable, divertable, raw XY, analytics key events, pos:0, group:2, group mask:g1,g2 reporting: diverted 4: Forward Button , default: Mouse Forward Button => Mouse Forward Button mse, reprogrammable, divertable, raw XY, analytics key events, pos:0, group:2, group mask:g1,g2 reporting: diverted 5: Mouse Gesture Button , default: Gesture Button Navigation => Gesture Button Navigation mse, reprogrammable, divertable, raw XY, analytics key events, pos:0, group:2, group mask:g1,g2 reporting: diverted 6: Smart Shift , default: Smart Shift => Smart Shift mse, reprogrammable, divertable, raw XY, analytics key events, pos:0, group:2, group mask:g1,g2 reporting: diverted 7: Virtual Gesture Button , default: Virtual Gesture Button => Virtual Gesture Button divertable, virtual, raw XY, force raw XY, pos:0, group:3, group mask:empty reporting: default Battery: 95%, discharging. ```

Is your feature request related to a problem? Please describe. I would like to have the ability to store and read some values in rules. This would allow for more complicated setups, like multiple profiles, toggle buttons and layers. Simple integer values would be more than enough to handle most cases.

Describe the solution you'd like Here is an example how a simple toggle would look like with my proposal: when x is pressed and y is 0, output action 1 | when z is pressed and y is 0, change y to 1 | when x is pressed and y is 1, output action 2 | when z is pressed and y is 1, change y to 0 x is some button for your actions y is a variable to store some value z is some button that acts like a toggle button through y

I already do something very similar with my dpi setting, switching through 3 levels with a single button.

Additional context This would also solve #2145, at the cost of making the setup more complicated.

pfps commented 6 months ago

This would be a major expansion to rules.

MattHag commented 5 months ago

I see Profile switches as a possible feature in the future, and let it act similar to a DPI button switch. But the code and UI needs a cleanup to be ready for more complexity.