You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
5.4 KiB
126 lines
5.4 KiB
N-Trig touchscreen Driver |
|
------------------------- |
|
Copyright (c) 2008-2010 Rafi Rubin <rafi@seas.upenn.edu> |
|
Copyright (c) 2009-2010 Stephane Chatty |
|
|
|
This driver provides support for N-Trig pen and multi-touch sensors. Single |
|
and multi-touch events are translated to the appropriate protocols for |
|
the hid and input systems. Pen events are sufficiently hid compliant and |
|
are left to the hid core. The driver also provides additional filtering |
|
and utility functions accessible with sysfs and module parameters. |
|
|
|
This driver has been reported to work properly with multiple N-Trig devices |
|
attached. |
|
|
|
|
|
Parameters |
|
---------- |
|
|
|
Note: values set at load time are global and will apply to all applicable |
|
devices. Adjusting parameters with sysfs will override the load time values, |
|
but only for that one device. |
|
|
|
The following parameters are used to configure filters to reduce noise: |
|
|
|
activate_slack number of fingers to ignore before processing events |
|
|
|
activation_height size threshold to activate immediately |
|
activation_width |
|
|
|
min_height size threshold bellow which fingers are ignored |
|
min_width both to decide activation and during activity |
|
|
|
deactivate_slack the number of "no contact" frames to ignore before |
|
propagating the end of activity events |
|
|
|
When the last finger is removed from the device, it sends a number of empty |
|
frames. By holding off on deactivation for a few frames we can tolerate false |
|
erroneous disconnects, where the sensor may mistakenly not detect a finger that |
|
is still present. Thus deactivate_slack addresses problems where a users might |
|
see breaks in lines during drawing, or drop an object during a long drag. |
|
|
|
|
|
Additional sysfs items |
|
---------------------- |
|
|
|
These nodes just provide easy access to the ranges reported by the device. |
|
sensor_logical_height the range for positions reported during activity |
|
sensor_logical_width |
|
|
|
sensor_physical_height internal ranges not used for normal events but |
|
sensor_physical_width useful for tuning |
|
|
|
All N-Trig devices with product id of 1 report events in the ranges of |
|
X: 0-9600 |
|
Y: 0-7200 |
|
However not all of these devices have the same physical dimensions. Most |
|
seem to be 12" sensors (Dell Latitude XT and XT2 and the HP TX2), and |
|
at least one model (Dell Studio 17) has a 17" sensor. The ratio of physical |
|
to logical sizes is used to adjust the size based filter parameters. |
|
|
|
|
|
Filtering |
|
--------- |
|
|
|
With the release of the early multi-touch firmwares it became increasingly |
|
obvious that these sensors were prone to erroneous events. Users reported |
|
seeing both inappropriately dropped contact and ghosts, contacts reported |
|
where no finger was actually touching the screen. |
|
|
|
Deactivation slack helps prevent dropped contact for single touch use, but does |
|
not address the problem of dropping one of more contacts while other contacts |
|
are still active. Drops in the multi-touch context require additional |
|
processing and should be handled in tandem with tacking. |
|
|
|
As observed ghost contacts are similar to actual use of the sensor, but they |
|
seem to have different profiles. Ghost activity typically shows up as small |
|
short lived touches. As such, I assume that the longer the continuous stream |
|
of events the more likely those events are from a real contact, and that the |
|
larger the size of each contact the more likely it is real. Balancing the |
|
goals of preventing ghosts and accepting real events quickly (to minimize |
|
user observable latency), the filter accumulates confidence for incoming |
|
events until it hits thresholds and begins propagating. In the interest in |
|
minimizing stored state as well as the cost of operations to make a decision, |
|
I've kept that decision simple. |
|
|
|
Time is measured in terms of the number of fingers reported, not frames since |
|
the probability of multiple simultaneous ghosts is expected to drop off |
|
dramatically with increasing numbers. Rather than accumulate weight as a |
|
function of size, I just use it as a binary threshold. A sufficiently large |
|
contact immediately overrides the waiting period and leads to activation. |
|
|
|
Setting the activation size thresholds to large values will result in deciding |
|
primarily on activation slack. If you see longer lived ghosts, turning up the |
|
activation slack while reducing the size thresholds may suffice to eliminate |
|
the ghosts while keeping the screen quite responsive to firm taps. |
|
|
|
Contacts continue to be filtered with min_height and min_width even after |
|
the initial activation filter is satisfied. The intent is to provide |
|
a mechanism for filtering out ghosts in the form of an extra finger while |
|
you actually are using the screen. In practice this sort of ghost has |
|
been far less problematic or relatively rare and I've left the defaults |
|
set to 0 for both parameters, effectively turning off that filter. |
|
|
|
I don't know what the optimal values are for these filters. If the defaults |
|
don't work for you, please play with the parameters. If you do find other |
|
values more comfortable, I would appreciate feedback. |
|
|
|
The calibration of these devices does drift over time. If ghosts or contact |
|
dropping worsen and interfere with the normal usage of your device, try |
|
recalibrating it. |
|
|
|
|
|
Calibration |
|
----------- |
|
|
|
The N-Trig windows tools provide calibration and testing routines. Also an |
|
unofficial unsupported set of user space tools including a calibrator is |
|
available at: |
|
http://code.launchpad.net/~rafi-seas/+junk/ntrig_calib |
|
|
|
|
|
Tracking |
|
-------- |
|
|
|
As of yet, all tested N-Trig firmwares do not track fingers. When multiple |
|
contacts are active they seem to be sorted primarily by Y position.
|
|
|