[PATCH 3/9] hidpp: clear message queue before initiating new requests
Peter Wu
lekensteyn at gmail.com
Wed Aug 7 15:13:38 PDT 2013
This prevents the use of responses from other HID++ applications (such
as Solaar and ltunify).
Signed-off-by: Peter Wu <lekensteyn at gmail.com>
---
src/linux/hidpp-device.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/src/linux/hidpp-device.c b/src/linux/hidpp-device.c
index 6d02bf1..2d4e550 100644
--- a/src/linux/hidpp-device.c
+++ b/src/linux/hidpp-device.c
@@ -271,6 +271,24 @@ hidpp_device_print_buffer (HidppDevice *device, const HidppMessage *msg)
g_print ("param[0]=%02x\n\n", msg->s.params[0]);
}
+static void
+hidpp_discard_messages (HidppDevice *device)
+{
+ HidppDevicePrivate *priv = device->priv;
+ GPollFD poll[] = {
+ {
+ .fd = priv->fd,
+ .events = G_IO_IN | G_IO_OUT | G_IO_ERR,
+ },
+ };
+ char c;
+
+ while (g_poll (poll, G_N_ELEMENTS(poll), 0) > 0) {
+ /* kernel discards remainder of packet */
+ read (priv->fd, &c, 1);
+ }
+}
+
/**
* hidpp_device_cmd:
**/
@@ -302,6 +320,9 @@ hidpp_device_cmd (HidppDevice *device,
msg_len = HIDPP_MSG_LENGTH(request);
+ /* ignore all unrelated queued messages */
+ hidpp_discard_messages(device);
+
/* write to the device */
wrote = write (priv->fd, (const char *)request, msg_len);
if ((gsize) wrote != msg_len) {
--
1.8.3.4
More information about the devkit-devel
mailing list