Repository: pwr-Solaar/Solaar

Issue:
solaar: assertion failed: /usr/lib/python3.10/site-packages/logitech_receiver/settings.py line 1041 with MX Ergo Multi-Device Trackball
**Information**
<!-- Make sure that your issue is not one of the known issues in the Solaar documentation at https://pwr-solaar.github.io/Solaar/ -->
<!-- Do not bother opening an issue for a version older than 1.1.0.  Update to the latest version and see if your issue persists. -->
- Solaar version (`solaar --version` or `git describe --tags` if cloned from this repository): `1.1.2`
- Distribution: `Fedora 35`
- Kernel version (ex. `uname -srmo`): `5.16.7-200.fc35.x86_64`
- Output of `solaar show`:

<details>

```
$ solaar show
Solaar version 1.1.2

Unifying Receiver
  Device path  : /dev/hidraw4
  USB id       : 046d:C52B
  Serial       : <OMITTED>
    Firmware   : 24.11.B0036
    Bootloader : 02.09
    Other      : AA.AC
  Has 1 paired device(s) out of a maximum of 6.
  Notifications: wireless (0x000100)
  Device activity counters: 1=148

  1: MX Ergo Multi-Device Trackball 
     Device path  : /dev/hidraw8
     WPID         : 406F
     Codename     : MX Ergo
     Kind         : trackball
     Protocol     : HID++ 4.5
     Polling rate : 8 ms (125Hz)
     Serial number: <OMITTED>
     Model ID:      B01D406F0000
     Unit ID:       <OMITTED>
        Bootloader: BOT 49.00.B0001
          Firmware: MPM 06.03.B0022
             Other: 
     The power switch is located on the base.
     Supports 36 HID++ 2.0 features:
         0: ROOT                   {0000}   
         1: FEATURE SET            {0001}   
         2: DEVICE FW VERSION      {0003}   
            Firmware: Bootloader BOT 49.00.B0001 0000CDE885F3
            Firmware: Firmware MPM 06.03.B0022 406FCDE885F3
            Firmware: Other   
            Unit ID: <OMITTED>  Model ID: B01D406F0000  Transport IDs: {'btleid': 'B01D', 'wpid': '406F'}
         3: DEVICE NAME            {0005}   
            Name: MX Ergo Multi-Device Trackball 
            Kind: trackball
         4: WIRELESS DEVICE STATUS {1D4B}   
         5: DEVICE FRIENDLY NAME   {0007}   
            Friendly Name: MX Ergo
         6: RESET                  {0020}   
         7: CRYPTO ID              {0021}   
         8: BATTERY STATUS         {1000}   
            Battery: 50%, discharging, next level 20%.
         9: LED CONTROL            {1300}   
        10: REPROG CONTROLS V4     {1B04}   
            Key/Button Actions (saved): {DPI Change:DPI Change, Left Button:Left Click, Right Button:Right Click, Middle Button:Mouse Middle Button, Back Button:Mouse Back Button, Forward Button:Mouse Forward Button, Left Tilt:Mouse Scroll Left Button , Right Tilt:Mouse Scroll Right Button}
            Key/Button Actions        : {DPI Change:DPI Change, Left Button:Left Click, Right Button:Right Click, Middle Button:Mouse Middle Button, Back Button:Mouse Back Button, Forward Button:Mouse Forward Button, Left Tilt:Mouse Scroll Left Button , Right Tilt:Mouse Scroll Right Button}
            Key/Button Diversion (saved): {DPI Change:Regular, Middle Button:Regular, Back Button:Regular, Forward Button:Regular, Left Tilt:Regular, Right Tilt:Regular}
            Key/Button Diversion        : {DPI Change:Regular, Middle Button:Regular, Back Button:Regular, Forward Button:Regular, Left Tilt:Regular, Right Tilt:Regular}
        11: PERSISTENT REMAPPABLE ACTION {1C00}   
solaar: assertion failed: /usr/lib/python3.10/site-packages/logitech_receiver/settings.py line 1041
```
</details>

**Describe the bug**
solaar crashes with a failed assertion in [lib/logitech_receiver/settings.py:1041](https://github.com/pwr-Solaar/Solaar/blob/master/lib/logitech_receiver/settings.py#L1041). This is a regression since 1.1.1.

**To Reproduce**
Steps to reproduce the behavior:
1. Install solaar-1.1.2 on a system with MX Ergo Multi-Device Trackball
2. Run `solaar show`

**Screenshots**
N/A

**Additional context**
Downstream bug report: https://bugzilla.redhat.com/show_bug.cgi?id=2069546 .



Discussion:
This was reported in Fedora by @simonkrenger . Simon, it might be best if you interact with upstream directly here. I'll pull any fixes down into Fedora package.
I think full `solaar show` output from 1.1.1 might be useful as well:
<details>

```
$ solaar show
Solaar version 1.1.1

Lightspeed Receiver
  Device path  : /dev/hidraw3
  USB id       : 046d:C545
  Serial       : <OMITTED>
    Firmware   : 02.01.B0006
    Bootloader : 00.01
    Other      : 9D.9F
  Has 1 paired device(s) out of a maximum of 2.
  Notifications: wireless, software present (0x000900)
  Device activity counters: 1=114

  1: G915 TKL LIGHTSPEED Wireless RGB Mechanical Gaming Keyboard
     Device path  : None
     WPID         : 408E
     Codename     : G915 TKL
     Kind         : keyboard
     Protocol     : HID++ 4.2
     Polling rate : 8 ms (125Hz)
     Serial number: <OMITTED>
     Model ID:      B35F408EC343
     Unit ID:       <OMITTED>
        Bootloader: BL1 12.00.B0017
             Other: 
          Firmware: MPK 14.01.B0021
             Other: 
             Other: 
     The power switch is located on the top left corner.
     Supports 38 HID++ 2.0 features:
         0: ROOT                   {0000}   
         1: FEATURE SET            {0001}   
         2: DEVICE FW VERSION      {0003}   
            Firmware: Bootloader BL1 12.00.B0017 00008B79E978
            Firmware: Other   
            Firmware: Firmware MPK 14.01.B0021 408E5E599E54
            Firmware: Other   
            Firmware: Other   
            Unit ID: <OMITTED>  Model ID: B35F408EC343  Transport IDs: {'btleid': 'B35F', 'wpid': '408E', 'usbid': 'C343'}
         3: DEVICE NAME            {0005}   
            Name: G915 TKL LIGHTSPEED Wireless RGB Mechanical Gaming Keyboard
            Kind: keyboard
         4: WIRELESS DEVICE STATUS {1D4B}   
         5: RESET                  {0020}   
         6: DEVICE FRIENDLY NAME   {0007}   
            Friendly Name: G915 TKL
         7: BATTERY VOLTAGE        {1001}   
            Battery: 3781mV, discharging, 40.
         8: CHANGE HOST            {1814}   
            Change Host        : 1:wetterhorn
         9: HOSTS INFO             {1815}   
            Host 0 (paired): wetterhorn
            Host 1 (paired): 
        10: RGB EFFECTS            {8071}   
        11: PER KEY LIGHTING V2    {8081}   
        12: REPROG CONTROLS V4     {1B04}   
            Key/Button Diversion (saved): {'209': 0, '210': 0}
            Key/Button Diversion        : {'209': 0, '210': 0}
        13: REPORT HID USAGE       {1BC0}   
        14: ENCRYPTION             {4100}   
        15: KEYBOARD DISABLE BY USAGE {4522}   
        16: KEYBOARD LAYOUT 2      {4540}   
        17: GKEY                   {8010}   
            Divert G Keys (saved): False
            Divert G Keys        : False
        18: MKEYS                  {8020}   
        19: MR                     {8030}   
        20: BRIGHTNESS CONTROL     {8040}   
        21: ONBOARD PROFILES       {8100}   
            Device Mode: On-Board
        22: REPORT RATE            {8060}   
            Polling Rate (ms): 1
        23: DFUCONTROL SIGNED      {00C2}   
        24: DFU                    {00D0}   
        25: DEVICE RESET           {1802}   internal, hidden
        26: unknown:1803           {1803}   internal, hidden
        27: CONFIG DEVICE PROPS    {1806}   internal, hidden
        28: unknown:1813           {1813}   internal, hidden
        29: OOBSTATE               {1805}   internal, hidden
        30: unknown:1830           {1830}   internal, hidden
        31: unknown:1890           {1890}   internal, hidden
        32: unknown:1891           {1891}   internal, hidden
        33: unknown:18A1           {18A1}   internal, hidden
        34: unknown:1E00           {1E00}   hidden
        35: unknown:1EB0           {1EB0}   internal, hidden
        36: unknown:1861           {1861}   internal, hidden
        37: unknown:18B0           {18B0}   internal, hidden
     Has 2 reprogrammable keys:
         0: Host Switch Channel 1     , default: HostSwitch Channel 1        => HostSwitch Channel 1      
             divertable, persistently divertable, pos:1, group:0, group mask:empty
             reporting: default
         1: Host Switch Channel 2     , default: HostSwitch Channel 2        => HostSwitch Channel 2      
             divertable, persistently divertable, pos:2, group:0, group mask:empty
             reporting: default
     Battery: 3781mV, discharging, 40.

Unifying Receiver
  Device path  : /dev/hidraw5
  USB id       : 046d:C52B
  Serial       : <OMITTED>
    Firmware   : 24.11.B0036
    Bootloader : 02.09
    Other      : AA.AC
  Has 1 paired device(s) out of a maximum of 6.
  Notifications: wireless (0x000100)
  Device activity counters: 1=11

  1: MX Ergo Multi-Device Trackball 
     Device path  : /dev/hidraw8
     WPID         : 406F
     Codename     : MX Ergo
     Kind         : trackball
     Protocol     : HID++ 4.5
     Polling rate : 8 ms (125Hz)
     Serial number: CD006718
     Model ID:      B01D406F0000
     Unit ID:       B182D6C5
        Bootloader: BOT 49.00.B0001
          Firmware: MPM 06.03.B0022
             Other: 
     The power switch is located on the base.
     Supports 36 HID++ 2.0 features:
         0: ROOT                   {0000}   
         1: FEATURE SET            {0001}   
         2: DEVICE FW VERSION      {0003}   
            Firmware: Bootloader BOT 49.00.B0001 0000CDE885F3
            Firmware: Firmware MPM 06.03.B0022 406FCDE885F3
            Firmware: Other   
            Unit ID: B182D6C5  Model ID: B01D406F0000  Transport IDs: {'btleid': 'B01D', 'wpid': '406F'}
         3: DEVICE NAME            {0005}   
            Name: MX Ergo Multi-Device Trackball 
            Kind: trackball
         4: WIRELESS DEVICE STATUS {1D4B}   
         5: DEVICE FRIENDLY NAME   {0007}   
            Friendly Name: MX Ergo
         6: RESET                  {0020}   
         7: CRYPTO ID              {0021}   
         8: BATTERY STATUS         {1000}   
            Battery: 90%, discharging, next level 50%.
         9: LED CONTROL            {1300}   
        10: REPROG CONTROLS V4     {1B04}   
            Key/Button Actions (saved): {'237': 237, '80': 80, '81': 81, '82': 82, '83': 83, '86': 86, '91': 91, '93': 93}
            Key/Button Actions        : {'80': 80, '81': 81, '82': 82, '83': 83, '86': 86, '237': 237, '91': 91, '93': 93}
            Key/Button Diversion (saved): {'237': 0, '82': 0, '83': 0, '86': 0, '91': 0, '93': 0}
            Key/Button Diversion        : {'82': 0, '83': 0, '86': 0, '237': 0, '91': 0, '93': 0}
        11: PERSISTENT REMAPPABLE ACTION {1C00}   
        12: POINTER AXIS ORIENTATION {2006}   
        13: POINTER SPEED          {2205}   
            Pointer Speed: 1.99609375
            Sensitivity (Pointer Speed) (saved): 511
            Sensitivity (Pointer Speed)        : 511
        14: VERTICAL SCROLLING     {2100}   
            Roller type: standard
            Ratchet per turn: 18
            Scroll lines: 0
        15: DFUCONTROL SIGNED      {00C2}   
        16: DEVICE RESET           {1802}   internal, hidden
        17: unknown:1803           {1803}   internal, hidden
        18: CONFIG DEVICE PROPS    {1806}   internal, hidden
        19: OOBSTATE               {1805}   internal, hidden
        20: unknown:1813           {1813}   internal, hidden
        21: CHANGE HOST            {1814}   
            Change Host        : 1:wetterhorn
        22: HOSTS INFO             {1815}   
            Host 0 (unpaired): wetterhorn
            Host 1 (unpaired): 
            Host 2 (unpaired): 
        23: unknown:1830           {1830}   internal, hidden
        24: unknown:1861           {1861}   internal, hidden
        25: unknown:1890           {1890}   internal, hidden
        26: unknown:1891           {1891}   internal, hidden
        27: unknown:18A1           {18A1}   internal, hidden
        28: unknown:1DF3           {1DF3}   internal, hidden
        29: unknown:1E00           {1E00}   hidden
        30: unknown:1EB0           {1EB0}   internal, hidden
        31: unknown:18B1           {18B1}   internal, hidden
        32: unknown:1850           {1850}   internal, hidden
        33: unknown:1F03           {1F03}   internal, hidden
        34: unknown:18C0           {18C0}   internal, hidden
        35: LOWRES WHEEL           {2130}   
            Wheel Reports: HID
            Scroll Wheel Diversion (saved): False
            Scroll Wheel Diversion        : False
     Has 9 reprogrammable keys:
         0: Left Button               , default: Left Click                  => Left Click                
             mse, reprogrammable, pos:0, group:1, group mask:g1
             reporting: default
         1: Right Button              , default: Right Click                 => Right Click               
             mse, reprogrammable, pos:0, group:1, group mask:g1
             reporting: default
         2: Middle Button             , default: Mouse Middle Button         => Mouse Middle Button       
             mse, reprogrammable, divertable, persistently divertable, raw XY, pos:0, group:2, group mask:g1,g2
             reporting: default
         3: Back Button               , default: Mouse Back Button           => Mouse Back Button         
             mse, reprogrammable, divertable, persistently divertable, raw XY, pos:0, group:2, group mask:g1,g2
             reporting: default
         4: Forward Button            , default: Mouse Forward Button        => Mouse Forward Button      
             mse, reprogrammable, divertable, persistently divertable, raw XY, pos:0, group:2, group mask:g1,g2
             reporting: default
         5: DPI Change                , default: DPI Change                  => DPI Change                
             mse, reprogrammable, divertable, persistently divertable, raw XY, pos:0, group:2, group mask:g1,g2
             reporting: default
         6: Left Tilt                 , default: Mouse Scroll Left Button    => Mouse Scroll Left Button  
             mse, reprogrammable, divertable, persistently divertable, raw XY, pos:0, group:2, group mask:g1,g2
             reporting: default
         7: Right Tilt                , default: Mouse Scroll Right Button   => Mouse Scroll Right Button 
             mse, reprogrammable, divertable, persistently divertable, raw XY, pos:0, group:2, group mask:g1,g2
             reporting: default
         8: 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: 90%, discharging, next level 50%.
```

</details>

Simon was able to [trigger another crash](https://bugzilla.redhat.com/show_bug.cgi?id=2053391) when disconnecting the USB receiver while `solaar show` was running, but let's see if it's reproducible in 1.1.2 once this issue is fixed.
From the bugzilla report the assertion failure appears to be happening in the Persistent Remappable Action feature.   A recent enhancement to Solaar added a setting for this feature, which likely has a bug.  

This is likely going to require some interaction to see what the trackball device is doing.  To start, though, please provide the contents of ~/.config/solaar/config.json.  Also run `solaar -ddd show MX` (for version 1.1.2) with the trackball active as that will show all the interactions with the trackball.
Sure, here is the output for `solaar -ddd show MX`:

<details>

```$ solaar -ddd show MX
09:11:34,992    DEBUG [MainThread] hidapi.udev: Found device BID 0003 VID 0000046D PID 0000C52B INTERFACE 2 FILTER 2
09:11:34,993     INFO [MainThread] logitech_receiver.base: New lock 3
09:11:34,993    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 83B5 030000]
09:11:34,995    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 FF 83B5 03CC249B710106070000000000000000]
09:11:34,995    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 80B2 000000]
09:11:34,997    DEBUG [MainThread] logitech_receiver.base: (3) => r[20 01 4101 6F401E0000000400000000]
09:11:34,999    DEBUG [MainThread] logitech_receiver.base: (3) => r[20 00 4102 0000000000000000000000]
09:11:35,001    DEBUG [MainThread] logitech_receiver.base: (3) => r[10 FF 8F80 B20300]
09:11:35,001    DEBUG [MainThread] logitech_receiver.base: (3) device 0xFF error on request {80B2}: 3 = invalid value
09:11:35,001    DEBUG [MainThread] solaar.cli: [/dev/hidraw4] => <UnifyingReceiver(/dev/hidraw4,3)>
09:11:35,002    DEBUG [MainThread] hidapi.udev: Found device BID 0003 VID 0000046D PID 0000C545 INTERFACE 0 FILTER 2
09:11:35,002    DEBUG [MainThread] hidapi.udev: Found device BID 0003 VID 0000046D PID 0000C545 INTERFACE 1 FILTER 2
09:11:35,002    DEBUG [MainThread] hidapi.udev: Found device BID 0003 VID 0000046D PID 0000C545 INTERFACE 2 FILTER 2
09:11:35,003     INFO [MainThread] logitech_receiver.base: New lock 4
09:11:35,003    DEBUG [MainThread] logitech_receiver.base: (4) <= w[10 FF 83B5 030000]
09:11:35,004    DEBUG [MainThread] logitech_receiver.base: (4) => r[11 FF 83B5 0302E888B3010207FF00000000000000]
09:11:35,004    DEBUG [MainThread] logitech_receiver.base: (4) <= w[10 FF 80B2 000000]
09:11:35,005    DEBUG [MainThread] logitech_receiver.base: (4) => r[10 FF 8F80 B20300]
09:11:35,005    DEBUG [MainThread] logitech_receiver.base: (4) device 0xFF error on request {80B2}: 3 = invalid value
09:11:35,005    DEBUG [MainThread] solaar.cli: [/dev/hidraw2] => <LightspeedReceiver(/dev/hidraw2,4)>
Solaar version 1.1.2

09:11:35,010    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 83B5 200000]
09:11:35,013    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 FF 83B5 200708406F0403080700000000000000]
09:11:35,017    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 83B5 400000]
09:11:35,019    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 FF 83B5 40074D58204572676F00000000000000]
09:11:35,019     INFO [MainThread] logitech_receiver.receiver: <UnifyingReceiver(/dev/hidraw4,3)>: found new device 1 (406F)
09:11:35,019    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 83B5 300000]
09:11:35,021    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 FF 83B5 30CD0067181E00000001000000000000]
09:11:35,021    DEBUG [MainThread] logitech_receiver.base: (5) pinging device 1
09:11:35,021     INFO [MainThread] logitech_receiver.base: New lock 5
09:11:35,021    DEBUG [MainThread] logitech_receiver.base: (5) <= w[10 01 001B 0000CB]
09:11:35,101    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 001B 0405CB00000000000000000000000000]
09:11:35,102    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 000A 00010000000000000000000000000000]
09:11:35,110    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,121    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 000A 01000100000000000000000000000000]
09:11:35,122    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 010A 00000000000000000000000000000000]
09:11:35,129    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,141    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 010A 23000000000000000000000000000000]
09:11:35,142    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0008 00050000000000000000000000000000]
09:11:35,149    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,161    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0008 03000000000000000000000000000000]
09:11:35,162    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0309 00000000000000000000000000000000]
09:11:35,169    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,181    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0309 1F000000000000000000000000000000]
09:11:35,181    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0319 00000000000000000000000000000000]
09:11:35,189    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,201    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0319 4D58204572676F204D756C74692D4465]
09:11:35,201    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 031E 10000000000000000000000000000000]
09:11:35,209    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,221    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 031E 7669636520547261636B62616C6C2000]
09:11:35,221    DEBUG [MainThread] logitech_receiver.base: (5) pinging device 1
09:11:35,222    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 001C 00005800000000000000000000000000]
09:11:35,229    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,243    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 001C 04055800000000000000000000000000]
  1: MX Ergo Multi-Device Trackball 
     Device path  : /dev/hidraw8
     WPID         : 406F
     Codename     : MX Ergo
     Kind         : trackball
     Protocol     : HID++ 4.5
     Polling rate : 8 ms (125Hz)
     Serial number: CD006718
09:11:35,243    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 000A 00030000000000000000000000000000]
09:11:35,249    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,263    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 000A 02000200000000000000000000000000]
09:11:35,264    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0208 00000000000000000000000000000000]
09:11:35,269    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,283    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0208 03B182D6C50006B01D406F0000000000]
09:11:35,283     INFO [MainThread] logitech_receiver.device: <Device(1,406F,MX Ergo Multi-Device Trackball ,CD006718)>: unitId B182D6C5 does not match serial CD006718
     Model ID:      B01D406F0000
     Unit ID:       B182D6C5
09:11:35,284    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 020D 00000000000000000000000000000000]
09:11:35,291    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,303    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 020D 03B182D6C50006B01D406F0000000000]
09:11:35,304    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 021D 00000000000000000000000000000000]
09:11:35,311    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,323    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 021D 01424F5449000001000000CDE885F300]
09:11:35,324    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 021E 01000000000000000000000000000000]
09:11:35,331    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,343    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 021E 004D504D0603002201406FCDE885F300]
09:11:35,344    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 021F 02000000000000000000000000000000]
09:11:35,351    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,363    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 021F 050000000000005A0000000000000000]
        Bootloader: BOT 49.00.B0001
          Firmware: MPM 06.03.B0022
             Other: 
     The power switch is located on the base.
     Supports 36 HID++ 2.0 features:
09:11:35,364    DEBUG [MainThread] solaar.configuration: load => {'406F:CD006718': {'_absent': ['hi-res-scroll', 'hires-smooth-invert', 'hires-smooth-resolution', 'smart-shift', 'thumb-scroll-mode', 'thumb-scroll-invert', 'onboard_profiles', 'report_rate', 'dpi', 'dpi-sliding', 'mouse-gestures', 'backlight', 'backlight-timed', 'fn-swap', 'disable-keyboard-keys', 'divert-crown', 'crown-smooth', 'divert-gkeys', 'm-key-leds', 'mr-key-led', 'multiplatform', 'gesture2-gestures', 'gesture2-divert', 'gesture2-params'], '_modelId': 'B01D406F0000', '_name': 'MX Ergo Multi-Device Trackball ', '_sensitive': {'pointer_speed': False}, '_serial': 'CD006718', '_unitId': 'B182D6C5', 'divert-keys': {'237': 0, '82': 0, '83': 0, '86': 0, '91': 0, '93': 0}, 'lowres-smooth-scroll': False, 'pointer_speed': 511, 'reprogrammable-keys': {'237': 237, '80': 80, '81': 81, '82': 82, '83': 83, '86': 86, '91': 91, '93': 93}, 'speed-change': 0}, '408E:870FE7AA': {'_modelId': 'B35F408EC343', '_name': 'G915 TKL LIGHTSPEED Wireless RGB Mechanical Gaming Keyboard', '_serial': '870FE7AA', '_unitId': '870FE7AA', 'divert-gkeys': False, 'divert-keys': {'209': 0, '210': 0}, 'report_rate': 1}, '_version': '1.1.2'}
09:11:35,365    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0008 21300000000000000000000000000000]
09:11:35,371    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,383    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0008 23000000000000000000000000000000]
09:11:35,384     INFO [MainThread] logitech_receiver.settings_templates: check_feature lowres-smooth-scroll [LOWRES WHEEL] detected <Setting([feature:toggle] MX Ergo:lowres-smooth-scroll=None)>
09:11:35,384    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 000D 22050000000000000000000000000000]
09:11:35,391    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,403    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 000D 0D000000000000000000000000000000]
09:11:35,404     INFO [MainThread] logitech_receiver.settings_templates: check_feature pointer_speed [POINTER SPEED] detected <Setting([feature:range] MX Ergo:pointer_speed=None)>
09:11:35,404    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 000B 1B010000000000000000000000000000]
09:11:35,411    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,423    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 000B 00000000000000000000000000000000]
09:11:35,424    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 000E 1B040000000000000000000000000000]
09:11:35,431    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,443    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 000E 0A000300000000000000000000000000]
09:11:35,443    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A0E 00000000000000000000000000000000]
09:11:35,451    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,463    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A0E 09000000000000000000000000000000]
09:11:35,464    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A1B 00000000000000000000000000000000]
09:11:35,471    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,483    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A1B 00500038110001010000000000000000]
09:11:35,483    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A1A 01000000000000000000000000000000]
09:11:35,491    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,503    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A1A 00510039110001010000000000000000]
09:11:35,503    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A1F 02000000000000000000000000000000]
09:11:35,511    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,523    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A1F 0052003A710002030100000000000000]
09:11:35,524    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A1A 03000000000000000000000000000000]
09:11:35,531    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,545    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A1A 0053003C710002030100000000000000]
09:11:35,545    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A18 04000000000000000000000000000000]
09:11:35,553    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,565    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A18 0056003E710002030100000000000000]
09:11:35,565    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A1B 05000000000000000000000000000000]
09:11:35,573    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,585    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A1B 00ED00C4710002030100000000000000]
09:11:35,585    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A1F 06000000000000000000000000000000]
09:11:35,593    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,605    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A1F 005B003F710002030100000000000000]
09:11:35,606    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A18 07000000000000000000000000000000]
09:11:35,613    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,625    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A18 005D0040710002030100000000000000]
09:11:35,626    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A1B 08000000000000000000000000000000]
09:11:35,633    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,645    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A1B 00D700B4A00003000300000000000000]
09:11:35,646     INFO [MainThread] logitech_receiver.settings_templates: check_feature speed-change [POINTER SPEED] detected <Setting([feature:choice] MX Ergo:speed-change=None)>
09:11:35,647     INFO [MainThread] logitech_receiver.settings_templates: check_feature reprogrammable-keys [REPROG CONTROLS V4] detected <Setting([feature:map choice] MX Ergo:reprogrammable-keys=None)>
09:11:35,648    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 000C 1C000000000000000000000000000000]
09:11:35,653    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,665    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 000C 0B000000000000000000000000000000]
09:11:35,666    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B1E 00000000000000000000000000000000]
09:11:35,673    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,685    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B1E 08020000000000000000000000000000]
09:11:35,686    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B0F 00000000000000000000000000000000]
09:11:35,693    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,705    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B0F 00230000000000000000000000000000]
09:11:35,706    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B2B 00FF0000000000000000000000000000]
09:11:35,713    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,725    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B2B 00500000000000000000000000000000]
09:11:35,726    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B3A 0050FF00000000000000000000000000]
09:11:35,733    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,745    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B3A 00500002000100000000000000000000]
09:11:35,746    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B2B 01FF0000000000000000000000000000]
09:11:35,753    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,765    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B2B 00510000000000000000000000000000]
09:11:35,765    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B3A 0051FF00000000000000000000000000]
09:11:35,773    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,787    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B3A 00510002000200000000000000000000]
09:11:35,787    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B2C 02FF0000000000000000000000000000]
09:11:35,793    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,807    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B2C 00520000000000000000000000000000]
09:11:35,807    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B3F 0052FF00000000000000000000000000]
09:11:35,813    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,827    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B3F 00520002000400000000000000000000]
09:11:35,827    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B28 03FF0000000000000000000000000000]
09:11:35,833    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,847    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B28 00530000000000000000000000000000]
09:11:35,848    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B39 0053FF00000000000000000000000000]
09:11:35,855    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,867    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B39 00530002000800000000000000000000]
09:11:35,867    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B2A 04FF0000000000000000000000000000]
09:11:35,875    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,887    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B2A 00560000000000000000000000000000]
09:11:35,887    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B39 0056FF00000000000000000000000000]
09:11:35,895    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,907    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B39 00560002001000000000000000000000]
09:11:35,907    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B2C 05FF0000000000000000000000000000]
09:11:35,915    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,927    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B2C 00ED0000000000000000000000000000]
09:11:35,927    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B3D 00EDFF00000000000000000000000000]
09:11:35,935    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,947    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B3D 00ED0002200000000000000000000000]
09:11:35,948    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B2C 06FF0000000000000000000000000000]
09:11:35,955    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,967    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B2C 005B0000000000000000000000000000]
09:11:35,968    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B3B 005BFF00000000000000000000000000]
09:11:35,975    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:35,987    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B3B 005B0006400000000000000000000000]
09:11:35,988    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B2D 07FF0000000000000000000000000000]
09:11:35,995    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,007    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B2D 005D0000000000000000000000000000]
09:11:36,008    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B39 005DFF00000000000000000000000000]
09:11:36,015    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,027    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B39 005D0006800000000000000000000000]
09:11:36,038     INFO [MainThread] logitech_receiver.settings_templates: check_feature persistent-remappable-keys [PERSISTENT REMAPPABLE ACTION] detected <Setting([feature:map choice] MX Ergo:persistent-remappable-keys=None)>
09:11:36,039     INFO [MainThread] logitech_receiver.settings_templates: check_feature divert-keys [REPROG CONTROLS V4] detected <Setting([feature:map choice] MX Ergo:divert-keys=None)>
09:11:36,039    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0008 18140000000000000000000000000000]
09:11:36,129    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0008 15000100000000000000000000000000]
09:11:36,130    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 150E 00000000000000000000000000000000]
09:11:36,135    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,149    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 150E 02000000000000000000000000000000]
09:11:36,150    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 000B 18150000000000000000000000000000]
09:11:36,157    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,169    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 000B 16000100000000000000000000000000]
09:11:36,170    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 160F 00000000000000000000000000000000]
09:11:36,177    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,189    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 160F 13040300000000000000000000000000]
09:11:36,189    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 161D 00000000000000000000000000000000]
09:11:36,197    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,211    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 161D 000000000A1800000000000000000000]
09:11:36,212    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 163A 00000000000000000000000000000000]
09:11:36,217    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,229    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 163A 0000776574746572686F726E00000000]
09:11:36,229    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 161B 01000000000000000000000000000000]
09:11:36,237    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,249    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 161B 01000000001800000000000000000000]
09:11:36,250    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 1619 02000000000000000000000000000000]
09:11:36,257    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,269    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 1619 02000000001800000000000000000000]
09:11:36,280     INFO [MainThread] logitech_receiver.settings_templates: check_feature change-host [CHANGE HOST] detected <Setting([feature:choice] MX Ergo:change-host=None)>
09:11:36,281    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 000C 00000000000000000000000000000000]
09:11:36,370    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 000C 00000100000000000000000000000000]
         0: ROOT                   {0000}   
09:11:36,370    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0008 00010000000000000000000000000000]
09:11:36,377    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,391    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0008 01000100000000000000000000000000]
         1: FEATURE SET            {0001}   
09:11:36,392    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 000D 00030000000000000000000000000000]
09:11:36,397    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,411    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 000D 02000200000000000000000000000000]
         2: DEVICE FW VERSION      {0003}   
09:11:36,412    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 020D 00000000000000000000000000000000]
09:11:36,419    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,431    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 020D 03B182D6C50006B01D406F0000000000]
09:11:36,431    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0218 00000000000000000000000000000000]
09:11:36,439    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,451    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0218 01424F5449000001000000CDE885F300]
09:11:36,452    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 021B 01000000000000000000000000000000]
09:11:36,459    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,471    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 021B 004D504D0603002201406FCDE885F300]
09:11:36,472    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 021A 02000000000000000000000000000000]
09:11:36,479    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,491    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 021A 050000000000005A0000000000000000]
            Firmware: Bootloader BOT 49.00.B0001 0000CDE885F3
            Firmware: Firmware MPM 06.03.B0022 406FCDE885F3
            Firmware: Other   
09:11:36,491    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 020B 00000000000000000000000000000000]
09:11:36,499    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,511    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 020B 03B182D6C50006B01D406F0000000000]
            Unit ID: B182D6C5  Model ID: B01D406F0000  Transport IDs: {'btleid': 'B01D', 'wpid': '406F'}
09:11:36,511    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0008 00050000000000000000000000000000]
09:11:36,519    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,531    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0008 03000000000000000000000000000000]
         3: DEVICE NAME            {0005}   
09:11:36,532    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 030B 00000000000000000000000000000000]
09:11:36,539    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,551    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 030B 1F000000000000000000000000000000]
09:11:36,551    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0318 00000000000000000000000000000000]
09:11:36,559    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,571    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0318 4D58204572676F204D756C74692D4465]
09:11:36,571    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 031A 10000000000000000000000000000000]
09:11:36,579    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,591    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 031A 7669636520547261636B62616C6C2000]
            Name: MX Ergo Multi-Device Trackball 
09:11:36,592    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0329 00000000000000000000000000000000]
09:11:36,599    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,611    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0329 05000000000000000000000000000000]
            Kind: trackball
09:11:36,612    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 011D 04000000000000000000000000000000]
09:11:36,619    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,631    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 011D 1D4B0000000000000000000000000000]
09:11:36,631    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 000C 1D4B0000000000000000000000000000]
09:11:36,639    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,651    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 000C 04000000000000000000000000000000]
         4: WIRELESS DEVICE STATUS {1D4B}   
09:11:36,652    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0118 05000000000000000000000000000000]
09:11:36,659    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,671    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0118 00070000000000000000000000000000]
09:11:36,672    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 000A 00070000000000000000000000000000]
09:11:36,679    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,693    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 000A 05000000000000000000000000000000]
         5: DEVICE FRIENDLY NAME   {0007}   
09:11:36,694    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 050B 00000000000000000000000000000000]
09:11:36,699    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,713    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 050B 07120700000000000000000000000000]
09:11:36,713    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 051B 00000000000000000000000000000000]
09:11:36,719    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,733    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 051B 004D58204572676F0000000000000000]
            Friendly Name: MX Ergo
09:11:36,734    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 011D 06000000000000000000000000000000]
09:11:36,741    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,753    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 011D 00200000000000000000000000000000]
09:11:36,754    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 000A 00200000000000000000000000000000]
09:11:36,761    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,773    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 000A 06000000000000000000000000000000]
         6: RESET                  {0020}   
09:11:36,774    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 011B 07000000000000000000000000000000]
09:11:36,781    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,793    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 011B 00210001000000000000000000000000]
09:11:36,793    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 000E 00210000000000000000000000000000]
09:11:36,801    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,813    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 000E 07000100000000000000000000000000]
         7: CRYPTO ID              {0021}   
09:11:36,814    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0118 08000000000000000000000000000000]
09:11:36,821    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,833    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0118 10000001000000000000000000000000]
09:11:36,833    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 000E 10000000000000000000000000000000]
09:11:36,841    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,853    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 000E 08000100000000000000000000000000]
         8: BATTERY STATUS         {1000}   
09:11:36,853    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 080E 00000000000000000000000000000000]
09:11:36,861    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,873    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 080E 32140000000000000000000000000000]
09:11:36,873    DEBUG [MainThread] logitech_receiver.hidpp20: device 1 battery 50% charged, next 20%, status discharging
            Battery: 50%, discharging, next level 20%.
09:11:36,874    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 011E 09000000000000000000000000000000]
09:11:36,881    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,893    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 011E 13000000000000000000000000000000]
09:11:36,894    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 000E 13000000000000000000000000000000]
09:11:36,901    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,913    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 000E 09000000000000000000000000000000]
         9: LED CONTROL            {1300}   
09:11:36,913    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0008 1B040000000000000000000000000000]
09:11:36,921    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,933    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0008 0A000300000000000000000000000000]
        10: REPROG CONTROLS V4     {1B04}   
            Key/Button Actions (saved): {DPI Change:DPI Change, Left Button:Left Click, Right Button:Right Click, Middle Button:Mouse Middle Button, Back Button:Mouse Back Button, Forward Button:Mouse Forward Button, Left Tilt:Mouse Scroll Left Button , Right Tilt:Mouse Scroll Right Button}
09:11:36,933    DEBUG [MainThread] logitech_receiver.settings: reprogrammable-keys: settings read None from <Device(1,406F,MX Ergo Multi-Device Trackball ,CD006718)>
09:11:36,934    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A2D 00500000000000000000000000000000]
09:11:36,941    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,953    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A2D 00500000500000000000000000000000]
09:11:36,953    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A2A 00510000000000000000000000000000]
09:11:36,961    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,975    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A2A 00510000510000000000000000000000]
09:11:36,975    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A28 00520000000000000000000000000000]
09:11:36,981    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:36,995    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A28 00520000520000000000000000000000]
09:11:36,996    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A2B 00530000000000000000000000000000]
09:11:37,001    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:37,015    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A2B 00530000530000000000000000000000]
09:11:37,016    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A2C 00560000000000000000000000000000]
09:11:37,023    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:37,035    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A2C 00560000560000000000000000000000]
09:11:37,036    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A2F 00ED0000000000000000000000000000]
09:11:37,043    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:37,055    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A2F 00ED0000ED0000000000000000000000]
09:11:37,056    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A28 005B0000000000000000000000000000]
09:11:37,063    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:37,075    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A28 005B00005B0000000000000000000000]
09:11:37,076    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0A2E 005D0000000000000000000000000000]
09:11:37,083    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:37,095    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0A2E 005D00005D0000000000000000000000]
            Key/Button Actions        : {DPI Change:DPI Change, Left Button:Left Click, Right Button:Right Click, Middle Button:Mouse Middle Button, Back Button:Mouse Back Button, Forward Button:Mouse Forward Button, Left Tilt:Mouse Scroll Left Button , Right Tilt:Mouse Scroll Right Button}
            Key/Button Diversion (saved): {DPI Change:Regular, Middle Button:Regular, Back Button:Regular, Forward Button:Regular, Left Tilt:Regular, Right Tilt:Regular}
09:11:37,096    DEBUG [MainThread] logitech_receiver.settings: divert-keys: settings read None from <Device(1,406F,MX Ergo Multi-Device Trackball ,CD006718)>
            Key/Button Diversion        : {DPI Change:Regular, Middle Button:Regular, Back Button:Regular, Forward Button:Regular, Left Tilt:Regular, Right Tilt:Regular}
09:11:37,096    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0009 1C000000000000000000000000000000]
09:11:37,103    DEBUG [MainThread] logitech_receiver.base: (5) => r[10 01 4903 005800]
09:11:37,115    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0009 0B000000000000000000000000000000]
        11: PERSISTENT REMAPPABLE ACTION {1C00}   
09:11:37,115    DEBUG [MainThread] logitech_receiver.settings: persistent-remappable-keys: settings read None from <Device(1,406F,MX Ergo Multi-Device Trackball ,CD006718)>
solaar: assertion failed: /usr/lib/python3.10/site-packages/logitech_receiver/settings.py line 1041
```
</details>

Also, here is the `~/.config/solaar/config.json` content:

<details>

```
$ cat ~/.config/solaar/config.json
{
  "406F:CD006718": {
    "_absent": [
      "hi-res-scroll",
      "hires-smooth-invert",
      "hires-smooth-resolution",
      "smart-shift",
      "thumb-scroll-mode",
      "thumb-scroll-invert",
      "onboard_profiles",
      "report_rate",
      "dpi",
      "dpi-sliding",
      "mouse-gestures",
      "backlight",
      "backlight-timed",
      "fn-swap",
      "disable-keyboard-keys",
      "divert-crown",
      "crown-smooth",
      "divert-gkeys",
      "m-key-leds",
      "mr-key-led",
      "multiplatform",
      "gesture2-gestures",
      "gesture2-divert",
      "gesture2-params"
    ],
    "_modelId": "B01D406F0000",
    "_name": "MX Ergo Multi-Device Trackball ",
    "_sensitive": {
      "pointer_speed": false
    },
    "_serial": "CD006718",
    "_unitId": "B182D6C5",
    "divert-keys": {
      "237": 0,
      "82": 0,
      "83": 0,
      "86": 0,
      "91": 0,
      "93": 0
    },
    "lowres-smooth-scroll": false,
    "pointer_speed": 511,
    "reprogrammable-keys": {
      "237": 237,
      "80": 80,
      "81": 81,
      "82": 82,
      "83": 83,
      "86": 86,
      "91": 91,
      "93": 93
    },
    "speed-change": 0
  },
  "408E:870FE7AA": {
    "_modelId": "B35F408EC343",
    "_name": "G915 TKL LIGHTSPEED Wireless RGB Mechanical Gaming Keyboard",
    "_serial": "870FE7AA",
    "_unitId": "870FE7AA",
    "divert-gkeys": false,
    "divert-keys": {
      "209": 0,
      "210": 0
    },
    "report_rate": 1
  },
  "_version": "1.1.2"
}
```
</details>

Let me know if you need any other output or if I can test anything else.
What is happening is that the mouse is returning some information that violates Solaar's expectations.  This is happening in Persistent Remappable Action, which was added to Solaar recently.

Here are device interactions for two of the persistently remappable keys/buttons on the trackball.

```
09:11:35,867    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B2A 04FF0000000000000000000000000000]	index 4
09:11:35,887    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B2A 00560000000000000000000000000000]	... is key/button 0x0056
09:11:35,887    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B39 0056FF00000000000000000000000000]	
09:11:35,907    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B39 00560002001000000000000000000000]	0x0056, mouse, 0x0010
Key/Button Forward Button (0x0056) is the mouse button (0x02) button 5 - forward button (0x0010)

09:11:35,907    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B2C 05FF0000000000000000000000000000]	index 5
09:11:35,927    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B2C 00ED0000000000000000000000000000]	... is key/button 0x00ED
09:11:35,927    DEBUG [MainThread] logitech_receiver.base: (5) <= w[11 01 0B3D 00EDFF00000000000000000000000000]	
09:11:35,947    DEBUG [MainThread] logitech_receiver.base: (5) => r[11 01 0B3D 00ED0002200000000000000000000000]	0x00ED, mouse, 0x2000
Key/Button DPI change (0x00ED) is the mouse button (0x02) ???? (0x2000)
```

The first is fine but the second returns a value that doesn't correspond to a normal Linux button.  I'll create a patch that accepts all 16 bits in this field that should solve the problem for now.  If I find out more about this value the names of these mouse buttons might change.

PR #1522 should fix this problem.  To test, run `bin/solaar show` from this PR.   There should be no errors and information should show up for persistent remappable actions.  Please post the output from `bin/solaar show`.

To clone and use Solar from its GitHub repository
```
git clone https://github.com/pwr-Solaar/Solaar.git
cd Solaar
```
Run Solaar as bin/solaar from this directory.


To run PR #1522, first clone Solaar if you have not already done so and cd to the clone directory.  The first time you download the pull request, fetch it into a new branch and checkout that branch, as in:
```
git fetch origin pull/1522/head:pull_1522
git checkout pull_1522
```
To download a new version of the pull request, fetch it and then set your pull branch to the new fetch, as in:
```
git checkout pull_1522
git fetch origin pull/1522/head
git reset --hard FETCH_HEAD
```

It is possible that Solaar has recorded that there is a problem with the persistent remappable keys setting on your trackball and will not try to create that setting in the future in the GUI.   If this is the case, then to get Solaar to try out the setting again you need to remove lines like
```
      "persistent-remappable-keys",
```
in `_absent` fields in Solaar's config.json file.   (If there is no comma on the line, i.e., it is the last value in the field, you will have to remove the comma on the previous line.)

Resolving patch:
diff --git a/lib/logitech_receiver/settings_templates.py b/lib/logitech_receiver/settings_templates.py
--- a/lib/logitech_receiver/settings_templates.py
+++ b/lib/logitech_receiver/settings_templates.py
@@ -1040,7 +1040,10 @@ def build(cls, setting_class, device):
 class MKeyLEDs(_BitFieldSetting):
     name = 'm-key-leds'
     label = _('M-Key LEDs')
-    description = (_('Control the M-Key LEDs.') + '\n' + _('May need Onboard Profiles set to Disable to be effective.'))
+    description = (
+        _('Control the M-Key LEDs.') + '\n' + _('May need Onboard Profiles set to Disable to be effective.') + '\n' +
+        _('May need G Keys diverted to be effective.')
+    )
     feature = _F.MKEYS
     choices_universe = _NamedInts()
     for i in range(8):
@@ -1065,7 +1068,10 @@ def build(cls, setting_class, device):
 class MRKeyLED(_Setting):
     name = 'mr-key-led'
     label = _('MR-Key LED')
-    description = _('Control the MR-Key LED.')
+    description = (
+        _('Control the MR-Key LED.') + '\n' + _('May need Onboard Profiles set to Disable to be effective.') + '\n' +
+        _('May need G Keys diverted to be effective.')
+    )
     feature = _F.MR
 
     class rw_class(_FeatureRW):
diff --git a/lib/logitech_receiver/special_keys.py b/lib/logitech_receiver/special_keys.py
--- a/lib/logitech_receiver/special_keys.py
+++ b/lib/logitech_receiver/special_keys.py
@@ -1176,6 +1176,17 @@
     Mouse_Button_Middle=0x0004,
     Mouse_Button_Back=0x0008,
     Mouse_Button_Forward=0x0010,
+    Mouse_Button_6=0x0020,
+    Mouse_Button_Scroll_Left=0x0040,
+    Mouse_Button_Scroll_Right=0x0080,
+    Mouse_Button_9=0x0100,
+    Mouse_Button_10=0x0200,
+    Mouse_Button_11=0x0400,
+    Mouse_Button_12=0x0800,
+    Mouse_Button_13=0x1000,
+    Mouse_Button_DPI=0x2000,
+    Mouse_Button_15=0x4000,
+    Mouse_Button_16=0x8000,
 )
 MOUSE_BUTTONS._fallback = lambda x: 'unknown mouse button:%04X' % x
 


Test patch: