Thread (5 messages) 5 messages, 3 authors, 2016-02-24

Re: [PATCH] Input: byd - enable absolute mode

flat view

From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2016-02-23 18:08:47

Hi Richard,

On Mon, Feb 22, 2016 at 08:44:51PM -0800, Richard Pospesel wrote:
Hi Dmitry,


On 02/22/2016 12:05 PM, Dmitry Torokhov wrote:
quoted
Hi Chris,

On Thu, Feb 18, 2016 at 12:07:52AM +0000, Chris Diamand wrote:
quoted
+
+	serio_continue_rx(psmouse->ps2dev.serio);
 }

 static psmouse_ret_t byd_process_byte(struct psmouse *psmouse)
 {
-	struct input_dev *dev = psmouse->dev;
+	struct byd_data *priv = psmouse->private;
+	u32 now = jiffies_to_msecs(jiffies);
 	u8 *pkt = psmouse->packet;

 	if (psmouse->pktcnt > 0 && !(pkt[0] & PS2_ALWAYS_1)) {
@@ -102,53 +292,33 @@ static psmouse_ret_t byd_process_byte(struct psmouse *psmouse)

 	/* Otherwise, a full packet has been received */
 	switch (pkt[3]) {
-	case 0: {
+	case BYD_PACKET_ABSOLUTE:
+		/* Only use absolute packets for the start of movement. */
+		if (!priv->touch) {
+			priv->abs_x = pkt[1] * (BYD_PAD_WIDTH / 256);
+			priv->abs_y = (255 - pkt[2]) *
+				      (BYD_PAD_HEIGHT / 256);
+
+			/* needed to detect tap */
+			if (now - priv->last_touch_time > BYD_TOUCH_TIMEOUT_MS)
+				priv->touch = true;
This is not correct: it will break when time wraps around. If you need
to store/compare times do it in jiffies and use
time_before()/time_after() API.

But I am confused why you need this. Can you please explain?

Thanks.
This does work when time wraps around, unless I've misunderstood you (
see: https://ideone.com/OTnMH7 ).  However, I will change this to
jiffies since that seems to be the lingua franca for time in the
kernel.
Please.
I went over why this particular time delta check is required earlier
in this thread.  For brevity, I'll say this is required to allow
"two-finger" scenario where one finger navigates, while the other
clicks on the primary mouse button.  I can go into further detail if
you like.
Please because I tried going back to earlier messages but I could not
find detailed explanation for the delay in reporting touch.

Thanks.

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