[upower/f20] fully charged battery reported as 0% charged (#1025980)
Rex Dieter
rdieter at fedoraproject.org
Sun Dec 8 02:59:08 UTC 2013
commit a10a270876e1f2b367f88eaac9041ead90a1044e
Author: Rex Dieter <rdieter at math.unl.edu>
Date: Sat Dec 7 20:59:05 2013 -0600
fully charged battery reported as 0% charged (#1025980)
...x-Clamp-percentage-for-overfull-batteries.patch | 77 ++++++++++++++++++++
upower.spec | 11 +++-
2 files changed, 87 insertions(+), 1 deletions(-)
---
diff --git a/0004-linux-Clamp-percentage-for-overfull-batteries.patch b/0004-linux-Clamp-percentage-for-overfull-batteries.patch
new file mode 100644
index 0000000..76c0680
--- /dev/null
+++ b/0004-linux-Clamp-percentage-for-overfull-batteries.patch
@@ -0,0 +1,77 @@
+From b8fe9902f3c6c50ca6a23e24fcea99582beebc65 Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martinpitt at gnome.org>
+Date: Tue, 22 Oct 2013 10:02:51 +0200
+Subject: [PATCH 4/4] linux: Clamp percentage for overfull batteries
+
+Some batteries report energy > energy_full and a percentage ("capacity"
+attribute) > 100%. Clamp these within 0 and 100% for both plausibility as well
+as to avoid setting an out-of-range property which would then become 0%.
+
+https://launchpad.net/bugs/1240673
+---
+ src/linux/integration-test | 33 +++++++++++++++++++++++++++++++++
+ src/linux/up-device-supply.c | 4 ++++
+ 2 files changed, 37 insertions(+)
+
+diff --git a/src/linux/integration-test b/src/linux/integration-test
+index 8489bf3..4be1922 100755
+--- a/src/linux/integration-test
++++ b/src/linux/integration-test
+@@ -442,6 +442,39 @@ class Tests(unittest.TestCase):
+ self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
+ self.stop_daemon()
+
++ def test_battery_overfull(self):
++ '''battery which reports a > 100% percentage for a full battery'''
++
++ self.testbed.add_device('power_supply', 'BAT0', None,
++ ['type', 'Battery',
++ 'present', '1',
++ 'status', 'Full',
++ 'current_now', '1000',
++ 'charge_now', '11000000',
++ 'charge_full', '10000000',
++ 'charge_full_design', '11000000',
++ 'capacity', '110',
++ 'voltage_now', '12000000'], [])
++
++ self.start_daemon()
++ devs = self.proxy.EnumerateDevices()
++ self.assertEqual(len(devs), 1)
++ bat0_up = devs[0]
++
++ # should clamp percentage
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'Percentage'), 100.0)
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'IsPresent'), True)
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'State'),
++ UP_DEVICE_STATE_FULLY_CHARGED)
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'Energy'), 132.0)
++ # should adjust EnergyFull to reality, not what the battery claims
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'EnergyFull'), 132.0)
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'EnergyFullDesign'), 132.0)
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'Voltage'), 12.0)
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'PowerSupply'), True)
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'Type'), 2)
++ self.stop_daemon()
++
+ def test_battery_temperature(self):
+ '''battery which reports temperature'''
+
+diff --git a/src/linux/up-device-supply.c b/src/linux/up-device-supply.c
+index 8020277..b953d65 100644
+--- a/src/linux/up-device-supply.c
++++ b/src/linux/up-device-supply.c
+@@ -708,6 +708,10 @@ up_device_supply_refresh_battery (UpDeviceSupply *supply)
+ /* get a precise percentage */
+ if (sysfs_file_exists (native_path, "capacity")) {
+ percentage = sysfs_get_double (native_path, "capacity");
++ if (percentage < 0.0f)
++ percentage = 0.0f;
++ if (percentage > 100.0f)
++ percentage = 100.0f;
+ /* for devices which provide capacity, but not {energy,charge}_now */
+ if (energy < 0.1f && energy_full > 0.0f)
+ energy = energy_full * percentage / 100;
+--
+1.8.4.2
+
diff --git a/upower.spec b/upower.spec
index 74f6eee..7d8b9c5 100644
--- a/upower.spec
+++ b/upower.spec
@@ -1,11 +1,15 @@
Summary: Power Management Service
Name: upower
Version: 0.9.23
-Release: 1%{?dist}
+Release: 2%{?dist}
License: GPLv2+
Group: System Environment/Libraries
URL: http://upower.freedesktop.org/
Source0: http://upower.freedesktop.org/releases/upower-%{version}.tar.xz
+
+# upstream patches
+Patch1: 0004-linux-Clamp-percentage-for-overfull-batteries.patch
+
BuildRequires: sqlite-devel
BuildRequires: libtool
BuildRequires: intltool
@@ -41,6 +45,8 @@ Headers and libraries for UPower.
%prep
%setup -q
+%patch1 -p1 -b .linux-Clamp-percentage-for-overfull-batteries
+
%build
%configure \
--enable-gtk-doc \
@@ -101,6 +107,9 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
%{_includedir}/libupower-glib/upower.h
%changelog
+* Sat Dec 07 2013 Rex Dieter <rdieter at fedoraproject.org> 0.9.23-2
+- fully charged battery reported as 0% charged (#1025980)
+
* Fri Oct 18 2013 Richard Hughes <rhughes at redhat.com> - 0.9.23-1
- New upstream release
- Add missing dbus-glib-1 to private requires
More information about the scm-commits
mailing list