From: Henrik Rydberg <rydberg@euromail.se>
To: "Éric Piel" <E.A.B.Piel@tudelft.nl>
Cc: Chris Bagwell <chris@cnpbagwell.com>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
"linux-input@vger.kernel.org" <linux-input@vger.kernel.org>,
Florian Ragwitz <rafl@debian.org>
Subject: Re: [PATCH 7/7] elantech: average the two coordinates when 2 fingers
Date: Sun, 01 Aug 2010 11:37:28 +0200 [thread overview]
Message-ID: <4C554058.6080203@euromail.se> (raw)
In-Reply-To: <4C54ABFE.8050106@tudelft.nl>
On 08/01/2010 01:04 AM, Éric Piel wrote:
[...]
> I've got some fairly new versions of everything, but at least here, this
> is already happening with the X synaptics driver: in practice there is
> not jump at all, which ever finger is reported in doubletap. In
> doubletap it moves the scrolling axes, and changing to singletap, it
> resets to the new current position. No jump, both with my old synaptics
> hardware and with the elantech.
You are right. Jumping does not generally occur in synaptics when the number of
fingers changes.
The overall solution is still not quite satisfactory, since the MT points
reported are the lower-left and upper-right corners of a rectangle, instead of
the actual touch points. As mentioned in another mail, it would make sense to
add logic to bring this device up to the type A level. If the needed logic turns
out to be equivalent to the type B level, what can you do. :-)
How about this as a stab at the MT point problem. The idea here is that
get_corner_id() returns the rectangle corner which minimizes the change in
motion direction, according to the principle of inertia. For all cases,
position[0] is reported as the ABS_X/Y point.
state = (num_finger, corner_id, motion_id, position[n])
At each touch frame update, do
1. num_finger == 1
Set
position[0] = finger-position
2. num_finger == 2
If last frame was one finger, do
Find corner id such that position change is minimized
id = get_initial_corner_id(position[0], corner-position[id])
Else
Find temporary motion id
mid = get_motion_id(position[0], corner-position[corner_id])
Find corner id such that motion change is minimized
id = get_corner_id(corner_id, motion_id, mid)
Set
corner_id = id
motion_id = get_motion_id(position[0], corner-position[id])
position[0] = corner-position[id],
position[1] = corner-position[opposite[id]]
Report position[0] and position[1] as MT points
Since this is all integer logic, it should be possible to detect motion changes
as sign changes, such that get_motion_id() and get_corner_id() can be
implemented as constant arrays.
Cheers,
Henrik
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2010-08-01 9:37 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-21 20:59 [PATCH 0/7] elantech: various improvements for 6-byte protocol Éric Piel
2010-06-21 21:01 ` [PATCH 1/7] elantech: Describe further the protocol Éric Piel
2010-06-21 21:02 ` [PATCH 2/7] [NEEDS TEST] elantech: discard the first 2 positions reports for some firmwares Éric Piel
2010-06-21 21:03 ` [PATCH 3/7] elantech: distinguish various hardware/firmware versions Éric Piel
2010-06-21 21:04 ` [PATCH 4/7] elantech: implement data check for 6-byte protocol Éric Piel
2010-06-21 21:05 ` [PATCH 6/7] elantech: export pressure and width when supported Éric Piel
2010-06-21 21:06 ` [PATCH 7/7] elantech: average the two coordinates when 2 fingers Éric Piel
2010-07-21 3:36 ` Dmitry Torokhov
2010-07-30 18:55 ` Éric Piel
2010-07-30 21:01 ` Henrik Rydberg
2010-07-30 21:41 ` Éric Piel
2010-07-31 9:28 ` Henrik Rydberg
2010-07-31 9:33 ` Dmitry Torokhov
2010-07-31 12:49 ` Henrik Rydberg
2010-07-31 23:00 ` Éric Piel
2010-08-01 7:52 ` Henrik Rydberg
2010-07-31 19:56 ` Chris Bagwell
[not found] ` <AANLkTi=cEEx-5eQPbRYvMMaECvXKQ+i-e0Eaw_g4JY7=@mail.gmail.com>
2010-07-31 23:04 ` Éric Piel
2010-08-01 9:37 ` Henrik Rydberg [this message]
2010-08-01 11:28 ` Éric Piel
2010-08-01 13:57 ` Henrik Rydberg
2010-08-02 8:17 ` Éric Piel
2010-08-02 10:02 ` Henrik Rydberg
2010-08-02 11:12 ` Éric Piel
2010-08-02 11:22 ` Henrik Rydberg
2010-08-02 11:33 ` Éric Piel
2010-08-02 11:46 ` Henrik Rydberg
2010-08-02 12:13 ` Éric Piel
2010-08-02 12:29 ` Henrik Rydberg
2010-08-02 12:46 ` Éric Piel
2010-08-02 13:03 ` Henrik Rydberg
2010-08-02 13:23 ` Éric Piel
2010-08-02 14:12 ` Henrik Rydberg
2010-08-02 16:39 ` Dmitry Torokhov
2010-08-02 17:15 ` Henrik Rydberg
2010-08-08 22:51 ` Éric Piel
2010-08-08 22:52 ` [PATCH 07/10] elantech: Report multitouch with proper ABS_MT messages Éric Piel
2010-08-08 22:53 ` [PATCH 08/10] elantech: track finger to distinguish coordinates in 2-finger report Éric Piel
2010-08-08 22:54 ` [PATCH 09/10] elantech: remove support for proprietary X driver Éric Piel
2010-08-08 22:55 ` [PATCH 10/10] elantech: don't take into account the border size in the calculations Éric Piel
2010-08-02 16:26 ` [PATCH 7/7] elantech: average the two coordinates when 2 fingers Dmitry Torokhov
2010-08-02 17:05 ` Henrik Rydberg
2010-08-01 7:36 ` Henrik Rydberg
2010-06-21 21:07 ` [PATCH 5/7] elantech: report position also with 3 fingers Éric Piel
2010-07-21 3:38 ` Dmitry Torokhov
2010-07-30 18:37 ` Éric Piel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4C554058.6080203@euromail.se \
--to=rydberg@euromail.se \
--cc=E.A.B.Piel@tudelft.nl \
--cc=chris@cnpbagwell.com \
--cc=dmitry.torokhov@gmail.com \
--cc=linux-input@vger.kernel.org \
--cc=rafl@debian.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.