Solaar: Device support: Logitech MX Anywhere 2

Created on 22 Aug 2016  Â·  37Comments  Â·  Source: pwr-Solaar/Solaar

This is not included on the device page, so I thought I'd submit some data:
(see below for a power issue)

The mouse is rechargable as opposed to the model "MX Anywhere"

~]$ solaar show
Unifying Receiver
  Device path  : /dev/hidraw0
  USB id       : 046d:c52b
  Serial       : A7F5923B
    Firmware   : 24.01.B0023
    Bootloader : 01.08
    Other      : AA.AD
  Has 1 paired device(s) out of a maximum of 6.
  Notifications: wireless, software present (0x000900)
  Device activity counters: 1=11

  1: Wireless Mouse MX Anywhere 2
     Codename     : MX Anywhere 2
     Kind         : mouse
     Wireless PID : 404A
     Protocol     : HID++ 4.5
     Polling rate : 8 ms (125Hz)
     Serial number: F3B81C5B
        Bootloader: BOT 23.00.B0007
          Firmware: MPM 02.00.B0007
          Firmware: MPM 02.00.B0007
             Other: 
     The power switch is located on the base.
     Supports 26 HID++ 2.0 features:
         0: ROOT                   {0000}   
         1: FEATURE SET            {0001}   
         2: DEVICE FW VERSION      {0003}   
         3: DEVICE NAME            {0005}   
         4: WIRELESS DEVICE STATUS {1D4B}   
         5: RESET                  {0020}   
         6: BATTERY STATUS         {1000}   
         7: CHANGE HOST            {1814}   
         8: REPROG CONTROLS V4     {1B04}   
         9: ADJUSTABLE DPI         {2201}   
        10: VERTICAL SCROLLING     {2100}   
        11: HIRES WHEEL            {2121}   
        12: DFUCONTROL 2           {00C1}   
        13: unknown:1813           {1813}   internal, hidden
        14: unknown:1830           {1830}   internal, hidden
        15: unknown:1890           {1890}   internal, hidden
        16: unknown:1891           {1891}   internal, hidden
        17: unknown:18A1           {18A1}   internal, hidden
        18: unknown:18C0           {18C0}   internal, hidden
        19: unknown:1DF3           {1DF3}   internal, hidden
        20: unknown:1E00           {1E00}   hidden
        21: unknown:1EB0           {1EB0}   internal, hidden
        22: unknown:1803           {1803}   internal, hidden
        23: unknown:1861           {1861}   internal, hidden
        24: unknown:9000           {9000}   internal, hidden
        25: unknown:1805           {1805}   internal, hidden
     Battery: 0%, recharging.

I wonder if this is an issue or normal behaviour:
It seems that solaar only reports 90%, 50% or 20%. Even when the data above was collected, solaar shows 20% and a warning sign in the gui, not the 0% and charging state. As I'm writing this, the mouse has been charging for a while, but there is no change in the gui or cli. I don't think the 0% is correct either.
EDIT:
I just checked the charge again. With power unplugged 'solaar show' reports 50%, plugging in power results in it reporting 0%, recharging again. No change in gui; still 20% with a warning.

Most helpful comment

That is weird, it seems unlikely that the firmware and software implementors would choose to deviate from the spec. Do you have a USB packet capture?

If you take a look at the text, on page 5, it says that the "periods" field can range up to 15. So, clearly, it is using 4 bits for it (e. g. bits 0 to 3). So, the next bit is bit 4.

You can use Wireshark for this (and maybe you have to change permissions as described in https://wiki.wireshark.org/CaptureSetup/USB#Linux). Alternatively, run solaar with the --debug option and link/paste it here?

I actually wrote my own script to use usmon interfaces. I use it when I need to write or debug some media Kernel driver (I'm the maintainer for drivers/media at the Kernel):
https://git.linuxtv.org/v4l-utils.git/tree/contrib/parse_tcpdump_log.pl

This is the log output for the USB receiver for whell scrolls, in high resolution mode:

000025675 ms 000042 ms (241974 us EP=83, Dev=68) >>> 11 03 0b 00 11 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
000025917 ms 000242 ms (215972 us EP=83, Dev=68) >>> 11 03 0b 00 11 ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00
000026133 ms 000216 ms (281975 us EP=83, Dev=68) >>> 11 03 0b 00 11 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00

And this is the log when I disable high resolution:

000030905 ms 000000 ms (017904 us EP=83, Dev=68) >>> 11 03 0b 2d 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000030923 ms 000018 ms (596012 us EP=83, Dev=68) >>> 11 03 0b 00 01 ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00
000031519 ms 000596 ms (512004 us EP=83, Dev=68) >>> 11 03 0b 00 01 ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00
000032031 ms 000512 ms (211972 us EP=83, Dev=68) >>> 11 03 0b 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
000032243 ms 000212 ms (261975 us EP=83, Dev=68) >>> 11 03 0b 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00

All 37 comments

The protocol is limited to reporting four battery levels (and apparently it cannot report a level when charging), there is not much that can be done here I am afraid (wrt the battery reporting).

That is as I suspected.
What about the mismatch between the gui and the command line? It seems that the gui doesn't update the charge level, even when 'solaar show' reports different levels. I tested this over several hours, charging the mouse fully, and then using it quite a while discharging at least one level down. The gui still showed the 20% warning through all that. I don't remember what caused the gui to eventually update, reboot or just time (after all, that was two weeks ago... ;-), but it seems to be out of sync with the real charge.
Mouse or Solaar?

There is supposed to be an event from the device when the battery level changes on which Solaar can react by reading the battery status. if you invoke solaar show, it will read the current state. So either Solaar has a bug, or the device is not reporting the event correctly. You could watch solaar --debug to figure out whether the event ("Notification") occurred,

I ran solaar --debug, but got right back to the command line. It reported that it had connected to dbus; is this normal or do I have to kill the running instance first? I expected the program to run until I stopped it.

There were also some python warnings (unrelated I think). Output below.

[~]$ solaar --debug
00:19:38,599     INFO [MainThread] root: language nb_NO (UTF-8), translations path None
/usr/lib/python2.7/site-packages/solaar/gtk.py:34: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
  __import__(module)
/usr/lib/python2.7/site-packages/solaar/ui/notify.py:33: PyGIWarning: Notify was imported without specifying a version first. Use gi.require_version('Notify', '0.7') before import to ensure that the right version gets loaded.
  from gi.repository import Notify
00:19:38,763     INFO [MainThread] solaar.upower: connected to system dbus, watching for suspend/resume events
[~]$ 

Of course I had to stop the running solaar... enough said..

I divided the output into two parts. This part seems relatively ok

03:12:59,351     INFO [MainThread] root: language nb_NO (UTF-8), translations path None
/usr/lib/python2.7/site-packages/solaar/gtk.py:34: PyGIWarning: Gtk was imported without specifying a version first. Use gi.require_version('Gtk', '3.0') before import to ensure that the right version gets loaded.
  __import__(module)
/usr/lib/python2.7/site-packages/solaar/ui/notify.py:33: PyGIWarning: Notify was imported without specifying a version first. Use gi.require_version('Notify', '0.7') before import to ensure that the right version gets loaded.
  from gi.repository import Notify
03:12:59,509     INFO [MainThread] solaar.upower: connected to system dbus, watching for suspend/resume events
03:12:59,566     INFO [MainThread] solaar.ui.notify: starting desktop notifications
03:12:59,649     INFO [MainThread] solaar.listener: starting receiver listening threads
03:12:59,661     INFO [MainThread] solaar.listener: receiver event add DeviceInfo(path=u'/dev/hidraw0', vendor_id=u'046d', product_id=u'c52b', serial=u'', release='2401', manufacturer='Logitech', product='USB Receiver', interface=2, driver=u'logitech-djreceiver')
03:12:59,669     INFO [ReceiverListener:hidraw0] logitech_receiver.listener: started with <UnifyingReceiver(/dev/hidraw0,14)> (14)
03:12:59,669     INFO [ReceiverListener:hidraw0] solaar.listener: <UnifyingReceiver(/dev/hidraw0,14)>: notifications listener has started (14)
03:12:59,678     INFO [ReceiverListener:hidraw0] logitech_receiver.receiver: <UnifyingReceiver(/dev/hidraw0,14)>: receiver notifications enabled => ('wireless', 'software present')
03:12:59,686     INFO [ReceiverListener:hidraw0] solaar.listener: status_changed <UnifyingReceiver(/dev/hidraw0,14)>: present, No paired devices. (0) 
03:12:59,691     INFO [ReceiverListener:hidraw0] logitech_receiver.receiver: <UnifyingReceiver(/dev/hidraw0,14)>: found new device 1 (404A)
03:12:59,692     INFO [ReceiverListener:hidraw0] solaar.listener: Notification(1,41,04,324A40) triggered new device <PairedDevice(1,404A,MX Anywhere 2)> (mouse)
03:12:59,697     INFO [ReceiverListener:hidraw0] solaar.listener: status_changed <UnifyingReceiver(/dev/hidraw0,14)>: present, 1 paired device. (0) 
03:13:00,857     INFO [ReceiverListener:hidraw0] solaar.listener: status_changed <PairedDevice(1,404A,MX Anywhere 2)>: paired online, {'BATTERY LEVEL': 50, 'BATTERY CHARGING': False, 'BATTERY STATUS': NamedInt(0, 'discharging'), 'LINK ENCRYPTED': True, 'ERROR': None} (1) 
03:13:00,858     INFO [ReceiverListener:hidraw0] solaar.listener: status_changed <PairedDevice(1,404A,MX Anywhere 2)>: paired online, {'BATTERY LEVEL': 50, 'BATTERY CHARGING': False, 'BATTERY STATUS': NamedInt(0, 'discharging'), 'LINK ENCRYPTED': True, 'ERROR': None} (0) 

(solaar:11283): Gdk-CRITICAL **: gdk_window_thaw_toplevel_updates: assertion 'window->update_and_descendants_freeze_count > 0' failed

Then I got 8680 lines like this in a couple of minutes (the number is real; I redirected all output into a file)

03:13:01,900  WARNING [ReceiverListener:hidraw0] logitech_receiver.notifications: <PairedDevice(1,404A,MX Anywhere 2)>: unrecognized Notification(1,02,00,0004F0FF00004B00000000) for feature DEVICE FW VERSION (index 02)
03:13:01,901  WARNING [ReceiverListener:hidraw0] logitech_receiver.notifications: <PairedDevice(1,404A,MX Anywhere 2)>: unrecognized Notification(1,02,00,0005E0FF00005A00000000) for feature DEVICE FW VERSION (index 02)
03:13:01,908  WARNING [ReceiverListener:hidraw0] logitech_receiver.notifications: <PairedDevice(1,404A,MX Anywhere 2)>: unrecognized Notification(1,02,00,000ED0FF00006100000000) for feature DEVICE FW VERSION (index 02)
03:13:01,916  WARNING [ReceiverListener:hidraw0] logitech_receiver.notifications: <PairedDevice(1,404A,MX Anywhere 2)>: unrecognized Notification(1,02,00,0014F0FF00003B00000000) for feature DEVICE FW VERSION (index 02)
03:13:01,925  WARNING [ReceiverListener:hidraw0] logitech_receiver.notifications: <PairedDevice(1,404A,MX Anywhere 2)>: unrecognized Notification(1,02,00,0008000000003600000000) for feature DEVICE FW VERSION (index 02)

The only difference apart from the timestamp is that long number in the parantheses
Notification(1,02,00,0008000000003600000000)

@fropeter ,

What version of Solaar did you use? Are you able to see DPI controls and some scrolling controls at Solaar GUI?

I think worth to submit a descriptor entry for this device.

I'm using Fedora 24. The installed Solaar package according to dnf is

$ dnf list solaar
solaar.noarch     0.9.2-4.20150528gitcf27328.fc24.4     @updates
$

There are no dpi or scrolling controls in the gui.

  1. What is the procedure for submitting a descriptor entry?
  2. Is there any relevant info I can dig up?
  3. Is there some connection missing between the gui and the solaar background task? How to test?

@fropeter

Are you able to download and test the latest commit on master branch? No necessary to install, follow this:


$ mkdir Solaar
$ git clone https://github.com/pwr/Solaar.git Solaar
$ cd Solaar
$ bin/solaar show
$ bin/solaar 

The latest will open the GUI, so be sure to close the GUI you already have installed. I think this will not change the current status for your device but, anyway give it a try.

Regarding how to submit a descriptor entry, I will make some changes and ask you to download (git clone as above) and test. Is it ok for you?

Thanks

Dear @fropeter,

I made a branch to test support to Anywhere MX 2, please test it and provide feedback:

$ mkdir Solaar
$ git clone https://github.com/jrbenito/Solaar.git Solaar
$ cd Solaar
$ git checkout anywhere2
$ bin/solaar show
$ bin/solaar 

Notice that second and fourth commands are different from my other post above. Please, provide output of solaar show and if smooth_scroll option appears in the GUI and can be toggled.

Thanks.

First, thank you for doing this!
Here's the output of solaar show:

solaar]$ bin/solaar show
Unifying Receiver
  Device path  : /dev/hidraw0
  USB id       : 046d:c52b
  Serial       : A7F5923B
    Firmware   : 24.01.B0023
    Bootloader : 01.08
    Other      : AA.AD
  Has 1 paired device(s) out of a maximum of 6.
  Notifications: wireless, software present (0x000900)
  Device activity counters: 1=142

  1: Anywhere Mouse MX 2
     Codename     : Anywhere MX 2
     Kind         : mouse
     Wireless PID : 404A
     Protocol     : HID++ 4.5
     Polling rate : 8 ms (125Hz)
     Serial number: F3B81C5B
        Bootloader: BOT 23.00.B0007
          Firmware: MPM 02.00.B0007
          Firmware: MPM 02.00.B0007
             Other: 
     The power switch is located on the base.
     Supports 26 HID++ 2.0 features:
         0: ROOT                   {0000}   
         1: FEATURE SET            {0001}   
         2: DEVICE FW VERSION      {0003}   
         3: DEVICE NAME            {0005}   
         4: WIRELESS DEVICE STATUS {1D4B}   
         5: RESET                  {0020}   
         6: BATTERY STATUS         {1000}   
         7: CHANGE HOST            {1814}   
         8: REPROG CONTROLS V4     {1B04}   
         9: ADJUSTABLE DPI         {2201}   
        10: VERTICAL SCROLLING     {2100}   
        11: HIRES WHEEL            {2121}   
        12: DFUCONTROL 2           {00C1}   
        13: unknown:1813           {1813}   internal, hidden
        14: unknown:1830           {1830}   internal, hidden
        15: unknown:1890           {1890}   internal, hidden
        16: unknown:1891           {1891}   internal, hidden
        17: unknown:18A1           {18A1}   internal, hidden
        18: unknown:18C0           {18C0}   internal, hidden
        19: unknown:1DF3           {1DF3}   internal, hidden
        20: unknown:1E00           {1E00}   hidden
        21: unknown:1EB0           {1EB0}   internal, hidden
        22: unknown:1803           {1803}   internal, hidden
        23: unknown:1861           {1861}   internal, hidden
        24: unknown:9000           {9000}   internal, hidden
        25: unknown:1805           {1805}   internal, hidden
     Battery: 90%, discharging.

solaar]$

In the GUI, the smooth scrolling option shows, but non-operational; there is a warning sign that shows "Read/write operation failed" when hovering over it.
The DPI setting is there now, and it works.

When starting the GUI, I get this in the terminal:

solaar]$ bin/solaar

(solaar:4944): Gdk-CRITICAL **: gdk_window_thaw_toplevel_updates: assertion 'window->update_and_descendants_freeze_count > 0' failed

I haven't had time to assess battery charge accuracy yet, so I'll have to come back with that later.

Thanks again!

@fropeter ,

thanks for sharing results. I submitted PR #322 for integrating this support. Now we need to debug smooth scrolling issue.

could you please run and post output for bin/solaar -dd config 1? (-dd for debug and 1 is the MX Anyhere 2 as per your log above)

Once again, thanks!

Here's the output:

solaar]$ bin/solaar -dd config 1
17:15:05,685    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 83B5 030000]
17:15:05,689    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 FF 83B5 03A7F5923B0106070000000000000000]
17:15:05,690    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 80B2 000000]
17:15:05,692    DEBUG [MainThread] logitech_receiver.base: (3) => r[10 FF 8F80 B20300]
17:15:05,692    DEBUG [MainThread] logitech_receiver.base: (3) device 0xFF error on request {80B2}: 3 = invalid value
17:15:05,693    DEBUG [MainThread] solaar.cli: [/dev/hidraw0] => <UnifyingReceiver(/dev/hidraw0,3)>
17:15:05,808    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 83B5 200000]
17:15:05,810    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 FF 83B5 200708404A0402020700000000000000]
17:15:05,811     INFO [MainThread] logitech_receiver.receiver: <UnifyingReceiver(/dev/hidraw0,3)>: found new device 1 (404A)
17:15:05,811    DEBUG [MainThread] logitech_receiver.base: (3) pinging device 1
17:15:05,811    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 001E 0000B8]
17:15:06,594    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 001E 0405B800000000000000000000000000]
17:15:06,595    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000F 000100]
17:15:06,614    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000F 01000100000000000000000000000000]
17:15:06,614    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 0108 000000]
17:15:06,634    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 0108 19000000000000000000000000000000]
17:15:06,634    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000C 212000]
17:15:06,654    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000C 00000000000000000000000000000000]
17:15:06,654    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000A 40A000]
17:15:06,674    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000A 00000000000000000000000000000000]
17:15:06,674    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000B 40A200]
17:15:06,694    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000B 00000000000000000000000000000000]
17:15:06,694    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000C 220100]
17:15:06,714    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000C 09000100000000000000000000000000]
17:15:06,714    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 091B 000000]
17:15:06,734    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 091B 000190E0C80640000000000000000000]
17:15:06,735    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 0009 211000]
17:15:06,756    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 0009 00000000000000000000000000000000]
17:15:06,756    DEBUG [MainThread] solaar.configuration: load => {u'404A:F3B81C5B': {u'dpi': u'1000', u'_name': u'Anywhere Mouse MX 2'}, u'_version': u'0.9.2'}
17:15:06,757    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 83B5 300000]
17:15:06,761    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 FF 83B5 30F3B81C5B1E00000001000000000000]
17:15:06,762    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000D 212000]
17:15:06,804    DEBUG [MainThread] logitech_receiver.base: (3) => r[20 01 0200 0004F0FF00004B00000000]
17:15:06,811    DEBUG [MainThread] logitech_receiver.base: (3) => r[20 01 0200 0002000000003C00000000]
17:15:06,820    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000D 00000000000000000000000000000000]
17:15:06,820    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 0009 40A000]
17:15:06,828    DEBUG [MainThread] logitech_receiver.base: (3) => r[20 01 0200 0002F0FF00004D00000000]
17:15:06,835    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 0009 00000000000000000000000000000000]
17:15:06,836    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 0009 40A200]
17:15:06,852    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 0009 00000000000000000000000000000000]
17:15:06,852    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000F 211000]
17:15:06,872    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000F 00000000000000000000000000000000]
Anywhere Mouse MX 2 (Anywhere MX 2) [404A:F3B81C5B]
17:15:06,872    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 0008 212000]
17:15:06,892    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 0008 00000000000000000000000000000000]
17:15:06,892    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000D 40A000]
17:15:06,911    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000D 00000000000000000000000000000000]
17:15:06,912    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000B 40A200]
17:15:06,932    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000B 00000000000000000000000000000000]
17:15:06,932    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000E 211000]
17:15:06,952    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000E 00000000000000000000000000000000]

# Smooth Scrolling
# High-sensitivity mode for vertical scroll with the wheel.
#   possible values: on/true/t/yes/y/1 or off/false/f/no/n/0
17:15:06,952    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000D 212000]
17:15:06,972    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000D 00000000000000000000000000000000]
17:15:06,973     INFO [MainThread] solaar.configuration: saved {u'404A:F3B81C5B': {u'dpi': u'1000', u'_name': u'Anywhere Mouse MX 2'}, u'_version': u'0.9.2'} to /home/frode/.config/solaar/config.json
smooth-scroll = ? (failed to read from device)

# dpi
#   possible values: one of [ 400, 600, 800, 1000, 1200, 1400, 1600 ], or higher/lower/highest/max/lowest/min
17:15:06,974    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 092B 000000]
17:15:06,994    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 092B 0003E803E80000000000000000000000]
dpi = NamedInt(1000, '1000')
solaar]$

Can the problem be that the new version of solaar reads the old config from ~/.config/solaar/config.json? Is this hardcoded?

Can the problem be that the new version of solaar reads the old config from ~/.config/solaar/config.json? Is this hardcoded?

Dear @fropeter ,

There is a small bug in solaar where the old configuration have precedence over read values from device. I don´t know if this is the case here, but I always delete old config.json before run any tests just to be sure. Could you try and compare?

thanks for helping.

I could't see any difference in the GUI, and solaar --show differs only in Device activity counters.

There are some differences in the debug output, but I don't know the significance.

solaar]$ bin/solaar -dd config 1
19:47:43,047    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 83B5 030000]
19:47:43,052    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 FF 83B5 03A7F5923B0106070000000000000000]
19:47:43,052    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 80B2 000000]
19:47:43,055    DEBUG [MainThread] logitech_receiver.base: (3) => r[10 FF 8F80 B20300]
19:47:43,055    DEBUG [MainThread] logitech_receiver.base: (3) device 0xFF error on request {80B2}: 3 = invalid value
19:47:43,055    DEBUG [MainThread] solaar.cli: [/dev/hidraw0] => <UnifyingReceiver(/dev/hidraw0,3)>
19:47:43,170    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 83B5 200000]
19:47:43,174    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 FF 83B5 200708404A0402020700000000000000]
19:47:43,174     INFO [MainThread] logitech_receiver.receiver: <UnifyingReceiver(/dev/hidraw0,3)>: found new device 1 (404A)
19:47:43,174    DEBUG [MainThread] logitech_receiver.base: (3) pinging device 1
19:47:43,175    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 001F 0000EF]
19:47:43,266    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 001F 0405EF00000000000000000000000000]
19:47:43,266    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000C 000100]
19:47:43,286    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000C 01000100000000000000000000000000]
19:47:43,287    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 010E 000000]
19:47:43,306    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 010E 19000000000000000000000000000000]
19:47:43,306    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 0009 212000]
19:47:43,326    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 0009 00000000000000000000000000000000]
19:47:43,327    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000B 40A000]
19:47:43,346    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000B 00000000000000000000000000000000]
19:47:43,346    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000D 40A200]
19:47:43,366    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000D 00000000000000000000000000000000]
19:47:43,366    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000E 220100]
19:47:43,388    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000E 09000100000000000000000000000000]
19:47:43,388    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 0919 000000]
19:47:43,408    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 0919 000190E0C80640000000000000000000]
19:47:43,409    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000A 211000]
19:47:43,428    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000A 00000000000000000000000000000000]
19:47:43,428    DEBUG [MainThread] solaar.configuration: load => {u'404A:F3B81C5B': {u'dpi': 1000, u'_name': u'Anywhere Mouse MX 2'}, u'_version': u'0.9.2'}
19:47:43,429    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 83B5 300000]
19:47:43,433    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 FF 83B5 30F3B81C5B1E00000001000000000000]
19:47:43,433    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000D 212000]
19:47:43,528    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000D 00000000000000000000000000000000]
19:47:43,529    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000F 40A000]
19:47:43,548    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000F 00000000000000000000000000000000]
19:47:43,549    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000C 40A200]
19:47:43,568    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000C 00000000000000000000000000000000]
19:47:43,568    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 0008 211000]
19:47:43,588    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 0008 00000000000000000000000000000000]
Anywhere Mouse MX 2 (Anywhere MX 2) [404A:F3B81C5B]
19:47:43,588    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000E 212000]
19:47:43,608    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000E 00000000000000000000000000000000]
19:47:43,608    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000F 40A000]
19:47:43,630    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000F 00000000000000000000000000000000]
19:47:43,630    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000F 40A200]
19:47:43,650    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000F 00000000000000000000000000000000]
19:47:43,651    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 0008 211000]
19:47:43,670    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 0008 00000000000000000000000000000000]

# Smooth Scrolling
# High-sensitivity mode for vertical scroll with the wheel.
#   possible values: on/true/t/yes/y/1 or off/false/f/no/n/0
19:47:43,670    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000B 212000]
19:47:43,690    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000B 00000000000000000000000000000000]
19:47:43,691     INFO [MainThread] solaar.configuration: saved {u'404A:F3B81C5B': {u'dpi': 1000, u'_name': u'Anywhere Mouse MX 2'}, u'_version': u'0.9.2'} to /home/frode/.config/solaar/config.json
smooth-scroll = ? (failed to read from device)

# dpi
#   possible values: one of [ 400, 600, 800, 1000, 1200, 1400, 1600 ], or higher/lower/highest/max/lowest/min
19:47:43,691    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 0928 000000]
19:47:43,710    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 0928 0003E803E80000000000000000000000]
dpi = NamedInt(1000, '1000')
solaar]$

After PR https://github.com/pwr/Solaar/pull/322, GUI have disabled toggle and alert: Read/write operation failed

image

$ solaar -dd config 1
21:49:34,691    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 83B5 030000]
21:49:34,694    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 FF 83B5 03E3889EB90506080000000000000000]
21:49:34,694    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 80B2 000000]
21:49:34,696    DEBUG [MainThread] logitech_receiver.base: (3) => r[10 FF 8F80 B20300]
21:49:34,696    DEBUG [MainThread] logitech_receiver.base: (3) device 0xFF error on request {80B2}: 3 = invalid value
21:49:34,696    DEBUG [MainThread] solaar.cli: [/dev/hidraw1] => <UnifyingReceiver(/dev/hidraw1,3)>
21:49:34,715    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 83B5 200000]
21:49:34,718    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 FF 83B5 200808404A0402020700000000000000]
21:49:34,718     INFO [MainThread] logitech_receiver.receiver: <UnifyingReceiver(/dev/hidraw1,3)>: found new device 1 (404A)
21:49:34,718    DEBUG [MainThread] logitech_receiver.base: (3) pinging device 1
21:49:34,718    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 001D 000092]
21:49:34,770    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 001D 04059200000000000000000000000000]
21:49:34,770    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000A 000100]
21:49:34,790    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000A 01000100000000000000000000000000]
21:49:34,790    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 0108 000000]
21:49:34,810    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 0108 19000000000000000000000000000000]
21:49:34,810    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000B 212000]
21:49:34,830    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000B 00000000000000000000000000000000]
21:49:34,830    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 0009 40A000]
21:49:34,850    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 0009 00000000000000000000000000000000]
21:49:34,850    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000B 40A200]
21:49:34,870    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000B 00000000000000000000000000000000]
21:49:34,870    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000A 220100]
21:49:34,890    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000A 09000100000000000000000000000000]
21:49:34,890    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 0919 000000]
21:49:34,910    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 0919 000190E0C80640000000000000000000]
21:49:34,910    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000C 211000]
21:49:34,932    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000C 00000000000000000000000000000000]
21:49:34,932    DEBUG [MainThread] solaar.configuration: load => {u'404A:15EF63EC': {u'dpi': u'1600', u'_name': u'Anywhere Mouse MX 2'}, u'_version': u'0.9.2'}
21:49:34,933    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 FF 83B5 300000]
21:49:34,934    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 FF 83B5 3015EF63EC1E00000001000000000000]
21:49:34,934    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000D 212000]
21:49:34,952    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000D 00000000000000000000000000000000]
21:49:34,952    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000D 40A000]
21:49:34,972    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000D 00000000000000000000000000000000]
21:49:34,972    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000B 40A200]
21:49:34,992    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000B 00000000000000000000000000000000]
21:49:34,992    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000D 211000]
21:49:35,012    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000D 00000000000000000000000000000000]
Anywhere Mouse MX 2 (Anywhere MX 2) [404A:15EF63EC]
21:49:35,012    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000F 212000]
21:49:35,032    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000F 00000000000000000000000000000000]
21:49:35,032    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000E 40A000]
21:49:35,052    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000E 00000000000000000000000000000000]
21:49:35,052    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000A 40A200]
21:49:35,072    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000A 00000000000000000000000000000000]
21:49:35,072    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000F 211000]
21:49:35,092    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000F 00000000000000000000000000000000]

# Smooth Scrolling
# High-sensitivity mode for vertical scroll with the wheel.
#   possible values: on/true/t/yes/y/1 or off/false/f/no/n/0
21:49:35,092    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 000F 212000]
21:49:35,112    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 000F 00000000000000000000000000000000]
21:49:35,113     INFO [MainThread] solaar.configuration: saved {u'404A:15EF63EC': {u'dpi': u'1600', u'_name': u'Anywhere Mouse MX 2'}, u'_version': u'0.9.2'} to /home/oleg/.config/solaar/config.json
smooth-scroll = ? (failed to read from device)

# dpi
#   possible values: one of [ 400, 600, 800, 1000, 1200, 1400, 1600 ], or higher/lower/highest/max/lowest/min
21:49:35,113    DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 01 092E 000000]
21:49:35,134    DEBUG [MainThread] logitech_receiver.base: (3) => r[11 01 092E 00064003E80000000000000000000000]
dpi = NamedInt(1600, '1600')

@OlegKrikun and @fropeter,

Looking a second time it does have a error. HI_RES_SCROLLING feature set as 2120 at hidpp20.py file. But Anywhere MX2 is reporting feature 2121 HIRES_WHEEL not the HI_RES_SCROLLING.

My Bad! This is what happens when we code without sleep enough. I will submit a correction PR however, there is no device using HIRES_WHEEL in solaar so I have no idea if this will work or not. Are you willing to help test?

Happy new year!
Sorry about the delay. Yes, I'll help test. What do you want me to do?

@fropeter and @OlegKrikun ,

Sorry for late reply, life got in the way. let me catch up with this...

I did a quick modification, can you please try? It is on my git, please clone it https://github.com/jrbenito/solaar/tree/anywhere2-correction and run Solaar from this copy and let me know what you see for the Smooth Scrool feature.

Thanks

Sorry, the MX Anywhere2 smooth scroll patch didn't work here. With it, it doesn't detect the mouse anymore, just the keyboard.

With this patch, it no longer warns that the high-res scroll doesn't work at the GUI interface:
https://github.com/mchehab/solaar/commit/eae13564b178895b40d2645e415569715de23652

However, in practice, it doesn't work, as it seems to accept a value different than 0 or 1:

19:30:12,355 DEBUG [MainThread] logitech_receiver.settings: hires-smooth-scroll: write True to 19:30:12,355 INFO [MainThread] solaar.configuration: saved {u'404A:5C672B6C': {u'hires-smooth-scroll': True, u'_name': u'Anywhere Mouse MX 2', u'smooth-scroll': False, u'dpi': u'1000', u'scroll': u'1'}, u'1024:3759F98F': {u'_name': u'Wireless Mouse M310'}, u'2011:5B4525A4': {u'fn-swap': False, u'_name': u'Wireless Keyboard K520'}, u'_version': u'0.9.2', u'2011:31DD82D0': {u'_name': u'Wireless Keyboard K520'}} to /home/mchehab/.config/solaar/config.json
19:30:12,355 DEBUG [MainThread] logitech_receiver.settings: BooleanValidator: prepare_write(True, None) => 1
19:30:12,355 DEBUG [MainThread] logitech_receiver.settings: hires-smooth-scroll: prepare write(True) => 1
19:30:12,355 DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 03 0B18 010000]
19:30:12,374 DEBUG [MainThread] logitech_receiver.base: (3) => r[11 03 0B18 00000000000000000000000000000000]
# High Resolution Smooth Scrolling
19:30:12,375 DEBUG [MainThread] logitech_receiver.base: (3) <= w[10 03 0B0A 000000]
19:30:12,394 DEBUG [MainThread] logitech_receiver.base: (3) => r[11 03 0B0A 080C0000000000000000000000000000]
19:30:12,395 DEBUG [MainThread] logitech_receiver.settings: BooleanValidator: validate read '\x08\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' => 08
19:30:12,395 WARNING [MainThread] logitech_receiver.settings: BooleanValidator: reply 08 mismatched 01/00/FF

With this patch:
https://github.com/mchehab/solaar/commit/12292e4ee50e56893cff42b3905723061e2b4020

It doesn't produce any errors, but I was unable to see any difference on setting it. So, maybe it uses a different protocol than 2.0 to store/read its value.

@Lekensteyn ,

Any chance to get documentation on HIRES_WHEEL feature?

Thanks

@jrbenito will ask about it

@Lekensteyn ,

Thanks!

With that, I can now get the high-resolution settings with the patches I added at:
https://github.com/mchehab/solaar/commits/mx_anywhere2

  3: Anywhere Mouse MX 2
     Codename     : Anywhere MX 2
...
        11: HIRES WHEEL            {2121}   
            Multiplier: 8
            Has invert
              Normal wheel motion
            Has ratchet switch
              Normal wheel mode
            Low resolution mode
            HID notification

@Lekensteyn , @jrbenito ,

Support added on this tree:

https://github.com/mchehab/Solaar/tree/mx_anywhere2-v3

No idea about how to do a pull request on this weird github interface.

Lekensteyn commented 18 hours ago

@jrbenito See https://lekensteyn.nl/files/logitech/x2121_hires_wheel.pdf

There's one error at the document. On table 9 (wheelMovement() report packet), it shows that bit 3 corresponds to resolution. Setting the mouse to high-resolution and looking at the event messages showed that, instead, bit 4 is used for resolution. So, I used bit 4 on my patches.

Setting the mouse to high-resolution and looking at the event messages showed that, instead, bit 4 is used for resolution.

That is weird, it seems unlikely that the firmware and software implementors would choose to deviate from the spec. Do you have a USB packet capture? You can use Wireshark for this (and maybe you have to change permissions as described in https://wiki.wireshark.org/CaptureSetup/USB#Linux). Alternatively, run solaar with the --debug option and link/paste it here?

That is weird, it seems unlikely that the firmware and software implementors would choose to deviate from the spec. Do you have a USB packet capture?

If you take a look at the text, on page 5, it says that the "periods" field can range up to 15. So, clearly, it is using 4 bits for it (e. g. bits 0 to 3). So, the next bit is bit 4.

You can use Wireshark for this (and maybe you have to change permissions as described in https://wiki.wireshark.org/CaptureSetup/USB#Linux). Alternatively, run solaar with the --debug option and link/paste it here?

I actually wrote my own script to use usmon interfaces. I use it when I need to write or debug some media Kernel driver (I'm the maintainer for drivers/media at the Kernel):
https://git.linuxtv.org/v4l-utils.git/tree/contrib/parse_tcpdump_log.pl

This is the log output for the USB receiver for whell scrolls, in high resolution mode:

000025675 ms 000042 ms (241974 us EP=83, Dev=68) >>> 11 03 0b 00 11 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
000025917 ms 000242 ms (215972 us EP=83, Dev=68) >>> 11 03 0b 00 11 ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00
000026133 ms 000216 ms (281975 us EP=83, Dev=68) >>> 11 03 0b 00 11 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00

And this is the log when I disable high resolution:

000030905 ms 000000 ms (017904 us EP=83, Dev=68) >>> 11 03 0b 2d 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
000030923 ms 000018 ms (596012 us EP=83, Dev=68) >>> 11 03 0b 00 01 ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00
000031519 ms 000596 ms (512004 us EP=83, Dev=68) >>> 11 03 0b 00 01 ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00
000032031 ms 000512 ms (211972 us EP=83, Dev=68) >>> 11 03 0b 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
000032243 ms 000212 ms (261975 us EP=83, Dev=68) >>> 11 03 0b 00 01 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00

@mchehab Good find! For event 0, it indeed seems that the bits are off a bit (no pun intended). There is also a typo, I'll forward it and keep you updated.

The specification (https://lekensteyn.nl/files/logitech/x2121_hires_wheel.pdf) is updated, it was a mistake when converting from an old to a new documentation system.

@mchehab can you create a pull request (see https://help.github.com/articles/creating-a-pull-request-from-a-fork/, or alternatively go to https://github.com/mchehab/Solaar and hopefully your branch will appear with a button to create a PR).

@mchehab can you create a pull request (see https://help.github.com/articles/creating-a-pull-request-from-a-fork/, or alternatively go to https://github.com/mchehab/Solaar and hopefully your branch will appear with a button to create a PR).

I did that already. It is at:

Hello, I've just bought MX anywhere 2 (Amazon version), and I was surprised I lost middle click.
For my job, it's problematic because I often copy from terminal and paste to Firefox. I can see that middle click on this mouse change speed (DPI ?). But how can I simulate middle click? Shift-Insert still work terminals (tested with xterm, urxvt and Terminator) but it doesn't work in graphical programs like Firefox/Chromium/Abiword. Thanks.

Hello, I've just bought MX anywhere 2 (Amazon version), and I was surprised I lost middle click.
For my job, it's problematic because I often copy from terminal and paste to Firefox. I can see that middle click on this mouse change speed (DPI ?). But how can I simulate middle click? Shift-Insert still work terminals (tested with xterm, urxvt and Terminator) but it doesn't work in graphical programs like Firefox/Chromium/Abiword. Thanks.

The middle button works fine here (both Amazon and non-Amazon version). Just double checking: are you sure you're pressing the middle button? On MX, the middle button is not at the wheel. It is the small button located below it.

Hello, I've just bought MX anywhere 2 (Amazon version), and I was surprised I lost middle click.
For my job, it's problematic because I often copy from terminal and paste to Firefox. I can see that middle click on this mouse change speed (DPI ?). But how can I simulate middle click? Shift-Insert still work terminals (tested with xterm, urxvt and Terminator) but it doesn't work in graphical programs like Firefox/Chromium/Abiword. Thanks.

The middle button works fine here (both Amazon and non-Amazon version). Just double checking: are you sure you're pressing the middle button? On MX, the middle button is not at the wheel. It is the small button located below it.

Yes, sorry, I've just figured it out with the help of xev program.
I thought that button is like under Windows, to switch mouse speed.

Because yesterday, when I plugged the mouse, it was so slow to move the cursor, I remember it became faster after I press that button. But maybe with solaar installed, DPI are managed from solaar and the button became middle click (button 2).

Thanks for your answer.

Is there any issue left here?

It's fine for me, no issues.

Le ven. 7 févr. 2020 à 17:10, Peter F. Patel-Schneider <
[email protected]> a écrit :

Is there any issue left here?

—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/pwr-Solaar/Solaar/issues/283?email_source=notifications&email_token=AD2FTYLUJJX4I5WLHI4IFKDRBWBYBA5CNFSM4CNGZENKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOELDR2NQ#issuecomment-583474486,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AD2FTYMG7X3VUSAS7CW6JYTRBWBYBANCNFSM4CNGZENA
.

OK, closing.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Tomaszal picture Tomaszal  Â·  17Comments

meson11 picture meson11  Â·  5Comments

witheld9 picture witheld9  Â·  13Comments

positron96 picture positron96  Â·  16Comments

notaduck picture notaduck  Â·  15Comments