[PATCH 4/9] hidpp: recognise HID++ 1.0 ping response again
Peter Wu
lekensteyn at gmail.com
Wed Aug 7 15:13:39 PDT 2013
Removed while refactoring hidpp_device_cmd, now that the message
validation is in place, introduce the 1.0 check again.
Signed-off-by: Peter Wu <lekensteyn at gmail.com>
---
src/linux/hidpp-device.c | 31 ++++++++++++++++++++++++++++---
1 file changed, 28 insertions(+), 3 deletions(-)
diff --git a/src/linux/hidpp-device.c b/src/linux/hidpp-device.c
index 2d4e550..8ef1443 100644
--- a/src/linux/hidpp-device.c
+++ b/src/linux/hidpp-device.c
@@ -56,6 +56,21 @@
#define HIDPP_ERROR_MESSAGE 0x8f
+/* HID++ 1.0 error codes */
+#define HIDPP10_ERROR_CODE_SUCCESS 0x00
+#define HIDPP10_ERROR_CODE_INVALID_SUBID 0x01
+#define HIDPP10_ERROR_CODE_INVALID_ADDRESS 0x02
+#define HIDPP10_ERROR_CODE_INVALID_VALUE 0x03
+#define HIDPP10_ERROR_CODE_CONNECT_FAIL 0x04
+#define HIDPP10_ERROR_CODE_TOO_MANY_DEVICES 0x05
+#define HIDPP10_ERROR_CODE_ALREADY_EXISTS 0x06
+#define HIDPP10_ERROR_CODE_BUSY 0x07
+#define HIDPP10_ERROR_CODE_UNKNOWN_DEVICE 0x08
+#define HIDPP10_ERROR_CODE_RESOURCE_ERROR 0x09
+#define HIDPP10_ERROR_CODE_REQUEST_UNAVAILABLE 0x0A
+#define HIDPP10_ERROR_CODE_INVALID_PARAM_VALUE 0x0B
+#define HIDPP10_ERROR_CODE_WRONG_PIN_CODE 0x0C
+
/* HID++ 2.0 */
/* HID++2.0 error codes */
@@ -550,6 +565,7 @@ hidpp_device_refresh (HidppDevice *device,
guint i;
guint len;
HidppDevicePrivate *priv = device->priv;
+ guchar error_code = 0;
g_return_val_if_fail (HIDPP_IS_DEVICE (device), FALSE);
@@ -579,12 +595,21 @@ hidpp_device_refresh (HidppDevice *device,
ret = hidpp_device_cmd (device,
&msg, &msg,
error);
- // TODO: on failure, test if hid error
+ if (!ret) {
+ if (hidpp_is_error(&msg, &error_code) &&
+ (error_code == HIDPP10_ERROR_CODE_INVALID_SUBID)) {
+ /* assume HID++ 1.0 ping response */
+ priv->version = 1;
+ g_error_free(*error);
+ *error = NULL;
+ ret = TRUE;
+ }
+ } else
+ priv->version = msg.s.params[0];
+
if (!ret)
goto out;
- priv->version = msg.s.params[0];
-
if (version_old != priv->version)
g_debug("protocol for hid++ device changed from v%d to v%d",
version_old, priv->version);
--
1.8.3.4
More information about the devkit-devel
mailing list