Thread (2 messages) 2 messages, 2 authors, 2016-05-11

Re: [PATCH] Input: Do not add SYN_REPORT in between a single packet data

flat view

From: Aniroop Mathur <hidden>
Date: 2016-05-11 14:10:19

Hello Mr. Torokhov,

Would you please provide update for this patch?
As you can notice it is really pending for a long time,
I'll be grateful if you could update and conclude it quickly.

Thank you.

BR,
Aniroop Mathur


On Wed, May 4, 2016 at 9:12 PM, Aniroop Mathur [off-list ref] wrote:
quoted hunk ↗ jump to hunk
As mentioned in documentation, SYN_REPORT should be used to separate two packets
and should not be inserted in between a single packet as otherwise with multiple
SYN_REPORT in a single packet, input reader would not be able to know when the
packet ended really.

Documentation snippet:
* SYN_REPORT:
  - Used to synchronize and separate events into packets of input data changes
    occurring at the same moment in time. For example, motion of a mouse may set
    the REL_X and REL_Y values for one motion, then emit a SYN_REPORT. The next
    motion will emit more REL_X and REL_Y values and send another SYN_REPORT.

Signed-off-by: Aniroop Mathur <redacted>
---
 drivers/input/input.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/drivers/input/input.c b/drivers/input/input.c
index 8806059..5b0b1ae 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -401,12 +401,14 @@ static void input_handle_event(struct input_dev *dev,
                if (dev->num_vals >= 2)
                        input_pass_values(dev, dev->vals, dev->num_vals);
                dev->num_vals = 0;
-       } else if (dev->num_vals >= dev->max_vals - 2) {
-               dev->vals[dev->num_vals++] = input_value_sync;
-               input_pass_values(dev, dev->vals, dev->num_vals);
-               dev->num_vals = 0;
+       } else if (dev->num_vals >= dev->max_vals - 1) {
+               /* Pass all events except the newest event in order to
+                * not suppress the immediate EV_SYN/SYN_REPORT event.
+                */
+               input_pass_values(dev, dev->vals, dev->num_vals - 1);
+               dev->vals[0] = dev->vals[dev->num_vals - 1];
+               dev->num_vals = 1;
        }
-
 }

 /**
--
2.6.2
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help