[packages/upower] - rel 5; one more fix for hid++v2 devices; don't do classic stop on preun
arekm
arekm at pld-linux.org
Tue Mar 26 19:22:19 CET 2013
commit f310ec0800ec360cbae8cf62771454b763fb6df7
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date: Tue Mar 26 19:22:16 2013 +0100
- rel 5; one more fix for hid++v2 devices; don't do classic stop on preun
upower-fixes.patch | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++++
upower.spec | 5 +-
2 files changed, 145 insertions(+), 4 deletions(-)
---
diff --git a/upower.spec b/upower.spec
index d2f2a9f..c0670c9 100644
--- a/upower.spec
+++ b/upower.spec
@@ -2,7 +2,7 @@ Summary: Power management service
Summary(pl.UTF-8): Usługa zarządzania energią
Name: upower
Version: 0.9.20
-Release: 4
+Release: 5
License: GPL v2+
Group: Libraries
Source0: http://upower.freedesktop.org/releases/%{name}-%{version}.tar.xz
@@ -142,9 +142,6 @@ rm -rf $RPM_BUILD_ROOT
%systemd_post upower.service
%preun
-if [ "$1" = "0" ]; then
- %service upower stop
-fi
%systemd_preun upower.service
%postun
diff --git a/upower-fixes.patch b/upower-fixes.patch
index 34d4aaf..a58a3e3 100644
--- a/upower-fixes.patch
+++ b/upower-fixes.patch
@@ -497,3 +497,147 @@ index f6636e6..ea8b0b3 100644
&error);
if (!ret) {
g_warning ("failed to coldplug unifying device: %s",
+diff --git a/src/linux/hidpp-device.c b/src/linux/hidpp-device.c
+index 5398a38..1ce48b7 100644
+--- a/src/linux/hidpp-device.c
++++ b/src/linux/hidpp-device.c
+@@ -46,7 +46,6 @@
+ /* HID++ 1.0 */
+ #define HIDPP_READ_SHORT_REGISTER 0x81
+ #define HIDPP_READ_SHORT_REGISTER_BATTERY 0x0d
+-#define HIDPP_READ_SHORT_REGISTER_CONNECTION_STATE 0x02
+
+ #define HIDPP_READ_LONG_REGISTER 0x83
+ #define HIDPP_READ_LONG_REGISTER_DEVICE_TYPE 11
+@@ -315,11 +314,10 @@ hidpp_device_cmd (HidppDevice *device,
+ buf[2] == HIDPP_ERR_INVALID_SUBID &&
+ buf[3] == 0x00 &&
+ buf[4] == HIDPP_FEATURE_ROOT_FN_PING) {
+- if (buf[5] == HIDPP_ERROR_CODE_UNSUPPORTED) {
+- /* device offline / unreachable */
+- g_set_error_literal (error, 1, 0,
+- "device is unreachable");
+- ret = FALSE;
++ /* HID++ 1.0 ping reply, so fake success with version 1 */
++ if (priv->version < 2 && (buf[5] == HIDPP_ERROR_CODE_UNKNOWN
++ || buf[5] == HIDPP_ERROR_CODE_UNSUPPORTED)) {
++ response_data[0] = 1;
+ goto out;
+ }
+ }
+@@ -504,32 +502,12 @@ hidpp_device_refresh (HidppDevice *device,
+ ret = FALSE;
+ goto out;
+ }
+-
+- /* add features we are going to use */
+-// hidpp_device_map_add (device,
+-// HIDPP_FEATURE_I_FEATURE_SET,
+-// "IFeatureSet");
+-// hidpp_device_map_add (device,
+-// HIDPP_FEATURE_I_FIRMWARE_INFO,
+-// "IFirmwareInfo");
+- hidpp_device_map_add (device,
+- HIDPP_FEATURE_GET_DEVICE_NAME_TYPE,
+- "GetDeviceNameType");
+- hidpp_device_map_add (device,
+- HIDPP_FEATURE_BATTERY_LEVEL_STATUS,
+- "BatteryLevelStatus");
+-// hidpp_device_map_add (device,
+-// HIDPP_FEATURE_WIRELESS_DEVICE_STATUS,
+-// "WirelessDeviceStatus");
+- hidpp_device_map_add (device,
+- HIDPP_FEATURE_SOLAR_DASHBOARD,
+- "SolarDashboard");
+- hidpp_device_map_print (device);
+ }
+
+ /* get version */
+ if ((refresh_flags & HIDPP_REFRESH_FLAGS_VERSION) > 0) {
+- /* first try v2 packet */
++ guint version_old = priv->version;
++
+ buf[0] = 0x00;
+ buf[1] = 0x00;
+ buf[2] = HIDPP_PING_DATA;
+@@ -540,34 +518,43 @@ hidpp_device_refresh (HidppDevice *device,
+ buf, 3,
+ buf, 4,
+ error);
+- if (ret)
+- priv->version = buf[0];
+- /* then try v1 packet */
+- else {
+- /* discard potential v1 error */
+- g_clear_error (error);
+-
+- /* checking hid++ v1 packet */
+- buf[0] = 0x00;
+- buf[1] = 0x00;
+- buf[2] = 0x00;
++ if (!ret)
++ goto out;
+
+- ret = hidpp_device_cmd (device,
+- HIDPP_RECEIVER_ADDRESS,
+- HIDPP_READ_SHORT_REGISTER,
+- HIDPP_READ_SHORT_REGISTER_CONNECTION_STATE,
+- buf, 3,
+- buf, 2,
+- error);
++ priv->version = buf[0];
+
+- if (!ret)
+- goto out;
++ if (version_old != priv->version)
++ g_debug("protocol for hid++ device changed from v%d to v%d",
++ version_old, priv->version);
+
+- priv->version = 1;
+- }
++ if (version_old < 2 && priv->version >= 2)
++ refresh_flags |= HIDPP_REFRESH_FLAGS_FEATURES;
+
+ }
+
++ if ((refresh_flags & HIDPP_REFRESH_FLAGS_FEATURES) > 0) {
++ /* add features we are going to use */
++// hidpp_device_map_add (device,
++// HIDPP_FEATURE_I_FEATURE_SET,
++// "IFeatureSet");
++// hidpp_device_map_add (device,
++// HIDPP_FEATURE_I_FIRMWARE_INFO,
++// "IFirmwareInfo");
++ hidpp_device_map_add (device,
++ HIDPP_FEATURE_GET_DEVICE_NAME_TYPE,
++ "GetDeviceNameType");
++ hidpp_device_map_add (device,
++ HIDPP_FEATURE_BATTERY_LEVEL_STATUS,
++ "BatteryLevelStatus");
++// hidpp_device_map_add (device,
++// HIDPP_FEATURE_WIRELESS_DEVICE_STATUS,
++// "WirelessDeviceStatus");
++ hidpp_device_map_add (device,
++ HIDPP_FEATURE_SOLAR_DASHBOARD,
++ "SolarDashboard");
++ hidpp_device_map_print (device);
++ }
++
+ /* get device kind */
+ if ((refresh_flags & HIDPP_REFRESH_FLAGS_KIND) > 0) {
+
+diff --git a/src/linux/hidpp-device.h b/src/linux/hidpp-device.h
+index 935cd07..3f249a8 100644
+--- a/src/linux/hidpp-device.h
++++ b/src/linux/hidpp-device.h
+@@ -68,7 +68,8 @@ typedef enum {
+ HIDPP_REFRESH_FLAGS_VERSION = 1,
+ HIDPP_REFRESH_FLAGS_KIND = 2,
+ HIDPP_REFRESH_FLAGS_BATTERY = 4,
+- HIDPP_REFRESH_FLAGS_MODEL = 8
++ HIDPP_REFRESH_FLAGS_MODEL = 8,
++ HIDPP_REFRESH_FLAGS_FEATURES = 16
+ } HidppRefreshFlags;
+
+ GType hidpp_device_get_type (void);
+
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/upower.git/commitdiff/f310ec0800ec360cbae8cf62771454b763fb6df7
More information about the pld-cvs-commit
mailing list