upower report wrong battery percentage for Logitech Unify devices

Bug #1903995 reported by Pablo Catalina
16
This bug affects 3 people
Affects Status Importance Assigned to Milestone
upower (Ubuntu)
Triaged
High
Unassigned

Bug Description

The battery percentage reported by upower for Logitech devices connected using Unify receiver are wrong. Below are the results for two devices: Mouse and Keyboard:

* Battery percentages reported by Unify receiver using Solaar:

$ solaar show | grep -iP "^(( \d: )|(.*batt.*))"
  1: Wireless Keyboard K270(unifying)
         4: BATTERY STATUS {1000}
     Battery: 70%, discharging.
  2: Wireless Mouse MX Master
         7: BATTERY STATUS {1000}
     Battery: 20%, discharging.

* Battery percentages reported by upower:

$ upower -i /org/freedesktop/UPower/devices/keyboard_hidpp_battery_0
  native-path: hidpp_battery_0
  model: Wireless Keyboard K270
  serial: 4003-1a-39-5f-c1
  power supply: no
  updated: Thu 12 Nov 2020 13:59:18 CET (119 seconds ago)
  has history: yes
  has statistics: yes
  keyboard
    present: yes
    rechargeable: yes
    state: discharging
    warning-level: none
    battery-level: normal
    percentage: 55% (should be ignored)
    icon-name: 'battery-low-symbolic'

$ upower -i /org/freedesktop/UPower/devices/mouse_hidpp_battery_1
  native-path: hidpp_battery_1
  model: Wireless Mouse MX Master
  serial: 4071-f8-eb-bf-d1
  power supply: no
  updated: Thu 12 Nov 2020 14:03:14 CET (27 seconds ago)
  has history: yes
  has statistics: yes
  mouse
    present: yes
    rechargeable: yes
    state: discharging
    warning-level: low
    battery-level: low
    percentage: 10% (should be ignored)
    icon-name: 'battery-caution-symbolic'

Basically the difference is big so I'm getting a lot of notifications related to low battery even if the battery is OK:

* Mouse, upower: 10% real (Solaar): 20%
* Keyboard: upower: 70% real (Solaar): 55%

ProblemType: Bug
DistroRelease: Ubuntu 20.04
Package: upower 0.99.11-1build2
ProcVersionSignature: Ubuntu 5.4.0-53.59-generic 5.4.65
Uname: Linux 5.4.0-53-generic x86_64
NonfreeKernelModules: nvidia_modeset nvidia
ApportVersion: 2.20.11-0ubuntu27.11
Architecture: amd64
CasperMD5CheckResult: skip
CurrentDesktop: ubuntu:GNOME
Date: Thu Nov 12 13:58:35 2020
InstallationDate: Installed on 2020-04-19 (206 days ago)
InstallationMedia: Ubuntu 20.04 LTS "Focal Fossa" - Beta amd64 (20200417)
SourcePackage: upower
UpgradeStatus: No upgrade log present (probably fresh install)
mtime.conffile..etc.apport.crashdb.conf: 2020-06-17T11:02:56.934699

Revision history for this message
Pablo Catalina (xkill) wrote :
description: updated
Revision history for this message
Sebastien Bacher (seb128) wrote :

Thank you for your bug report, there are similar reports upstream
https://gitlab.freedesktop.org/upower/upower/-/issues/119

not that upower does label them 'should be ignored' which hint it's a known limitation or problematic value

Changed in upower (Ubuntu):
importance: Undecided → High
status: New → Triaged
Revision history for this message
Sebastien Bacher (seb128) wrote :

The notification issue is also discussed on https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/issues/108

Revision history for this message
Hans de Goede (j-w-r-degoede) wrote :

So this seems to be a kernel issue. The hid-logitech-hidpp kernel driver supports 2 battery reporting modes:

1. Status reporting, here the device basically reports 3 levels low / normal / high

2. mileage reporting, this is where an actual percentage left gets reported. I would expect at least the master mx to support this, but the info shown by upower where there is an "ignore" next to the percentage suggests that that is not the case (when only low/normal/high reporting is supported upower makes up a percentage for apps which rely on that part of the dbus API, which no modern app does).

So I believe that the problem here is that the kernel is using method 1, where as solaar seems to using 2. (mileage style reporting).

Can you provide full "solaar show" output please?

Revision history for this message
Pablo Catalina (xkill) wrote :
Download full text (7.2 KiB)

I recharged the mouse, but:

$ solaar show
Unifying Receiver
  Device path : /dev/hidraw0
  USB id : 046d:c52b
  Serial : 23FF9429
    Firmware : 12.10.B0032
    Bootloader : 02.15
    Other : AA.AA
  Has 3 paired device(s) out of a maximum of 6.
  Notifications: wireless (0x000100)
  Device activity counters: 1=70, 2=105

  1: Wireless Keyboard K270(unifying)
     Codename : K270(unifying)
     Kind : keyboard
     Wireless PID : 4003
     Protocol : HID++ 2.0
     Polling rate : 20 ms (50Hz)
     Serial number: 1A395FC1
          Firmware: RQK 35.00.B0017
     The power switch is located on the top case.
     Supports 12 HID++ 2.0 features:
         0: ROOT {0000}
         1: FEATURE SET {0001}
         2: DEVICE FW VERSION {0003}
         3: DEVICE NAME {0005}
         4: BATTERY STATUS {1000}
         5: unknown:1820 {1820} hidden
         6: REPROG CONTROLS {1B00}
         7: WIRELESS DEVICE STATUS {1D4B}
         8: unknown:1DF0 {1DF0} hidden
         9: unknown:1DF3 {1DF3} hidden
        10: ENCRYPTION {4100}
        11: KEYBOARD LAYOUT {4520}
     Has 8 reprogrammable keys:
         0: Play/Pause => Play/Pause nonstandard
         1: Mute => Mute nonstandard
         2: Volume Down => Volume Down nonstandard
         3: Volume Up => Volume Up nonstandard
         4: MY HOME => HomePage nonstandard, reprogrammable
         5: Mail => Email nonstandard, reprogrammable
         6: SLEEP => Sleep nonstandard, reprogrammable
         7: Calculator => Calculator nonstandard, reprogrammable
     Battery: 70%, discharging.

  2: Wireless Mouse MX Master
     Codename : MX Master
     Kind : mouse
     Wireless PID : 4071
     Protocol : HID++ 4.5
     Polling rate : 8 ms (125Hz)
     Serial number: F8EBBFD1
        Bootloader: BOT 56.10.B0005
          Firmware: MPM 12.10.B0005
          Firmware: MPM 12.10.B0005
             Other:
     The power switch is located on the base.
     Supports 32 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: unknown:0021 {0021}
         7: BATTERY STATUS {1000}
         8: unknown:1806 {1806} internal, hidden
         9: CHANGE HOST {1814}
        10: REPROG CONTROLS V4 {1B04}
        11: ADJUSTABLE DPI {2201}
        12: VERTICAL SCROLLING {2100}
            Roller type: 3G
            Ratchet per turn: 24
            Scroll lines: 0
        13: SMART SHIFT {2110}
    ...

Read more...

Revision history for this message
Hans de Goede (j-w-r-degoede) wrote :

Sorry for being slow in getting back to you about this.

I believe that this should be fixed by this upstream commit, which will be in the 5.12 kernel:

https://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git/commit/?h=for-next&id=e037acf0b1aed31cb5f3b09ccb602b4768c133d5

Revision history for this message
Philipp Keck (philipp-v) wrote :

> I believe that this should be fixed by this upstream commit, which will be in the 5.12 kernel

Has anyone been able to verify that? If it indeed fixes this annoying issue (I get notifications about low mouse battery all the time even though it's almost full), then it might be worth back-porting to older kernels (?).

Revision history for this message
Julian Alarcon (julian-alarcon) wrote :
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.