123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- 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.
|