12. N-Trig 触摸屏驱动

版权:

© 2008-2010 Rafi Rubin <rafi@seas.upenn.edu>

版权:

© 2009-2010 Stephane Chatty

此驱动程序为 N-Trig 笔和多点触摸传感器提供支持。单点和多点触摸事件被转换为 hid 和输入系统的相应协议。笔事件充分符合 hid 规范,留给 hid 核心处理。该驱动程序还提供额外的过滤和实用程序功能,可以通过 sysfs 和模块参数访问。

据报告,此驱动程序可以与连接的多个 N-Trig 设备正常工作。

12.1. 参数

注意:加载时设置的值是全局的,并将应用于所有适用的设备。使用 sysfs 调整参数将覆盖加载时设置的值,但仅适用于该设备。

以下参数用于配置过滤器以减少噪声

activate_slack

在处理事件之前要忽略的手指数量

activation_height, activation_width

立即激活的大小阈值

min_height, min_width

大小阈值,低于该阈值手指将被忽略,以决定激活以及活动期间

deactivate_slack

在传播活动结束事件之前要忽略的“无接触”帧数

当从设备上移除最后一个手指时,它会发送一些空帧。通过延迟几帧停用,我们可以容忍错误的断开连接,即传感器可能会错误地检测不到仍然存在的手指。因此,deactivate_slack 可以解决用户在绘图期间看到线条中断或在长时间拖动期间丢弃对象的问题。

12.2. 其他 sysfs 项

这些节点只是提供对设备报告的范围的轻松访问。

sensor_logical_height, sensor_logical_width

活动期间报告的位置范围

sensor_physical_height, sensor_physical_width

未用于正常事件但可用于调优的内部范围

所有产品 ID 为 1 的 N-Trig 设备都在以下范围内报告事件

  • X:0-9600

  • Y:0-7200

但是,并非所有这些设备都具有相同的物理尺寸。大多数似乎是 12 英寸传感器(Dell Latitude XT 和 XT2 以及 HP TX2),并且至少一个型号(Dell Studio 17)具有 17 英寸传感器。物理尺寸与逻辑尺寸的比率用于调整基于尺寸的过滤器参数。

12.3. 过滤

随着早期多点触摸固件的发布,越来越明显的是,这些传感器容易发生错误事件。用户报告说,他们看到了不适当地丢弃的接触和幻影,即报告了实际上没有手指触摸屏幕的地方的接触。

Deactivation slack 有助于防止单点触摸使用时的接触丢失,但不能解决在其他接触仍然有效时丢失一个或多个接触的问题。多点触摸环境中的丢失需要额外的处理,并且应与跟踪一起处理。

正如观察到的那样,幻影接触类似于传感器的实际使用,但它们似乎具有不同的配置文件。幻影活动通常表现为小而短促的触摸。因此,我假设事件的连续流越长,这些事件来自真实接触的可能性就越大,并且每个接触的大小越大,它就越真实。为了平衡防止幻影和快速接受真实事件的目标(以最大限度地减少用户可观察到的延迟),过滤器会累积传入事件的置信度,直到达到阈值并开始传播。为了尽量减少存储状态以及做出决策的操作成本,我保持该决策简单。

时间是根据报告的手指数量来衡量的,而不是自上次帧开始的时间,因为多个同时幻影的概率预计会随着数量的增加而急剧下降。我没有将权重累积为大小的函数,而是仅将其用作二元阈值。足够大的接触会立即覆盖等待期并导致激活。

将激活大小阈值设置为较大的值将主要决定激活延迟。如果您看到持续时间较长的幻影,则在降低大小阈值的同时调高激活延迟可能足以消除幻影,同时保持屏幕对稳固的点击非常敏感。

即使在满足初始激活过滤器之后,接触仍然会使用 min_height 和 min_width 进行过滤。目的是提供一种机制,用于过滤掉额外的幻影手指,而您实际上正在使用屏幕。在实践中,这种幻影的问题相对较少或相对罕见,我已将两个参数的默认值都设置为 0,从而有效地关闭了该过滤器。

我不知道这些过滤器的最佳值是什么。如果默认值不适合您,请尝试使用这些参数。如果您确实发现其他值更舒适,我将不胜感激您的反馈。

这些设备的校准会随着时间的推移而漂移。如果幻影或接触丢失恶化并干扰设备的正常使用,请尝试重新校准它。

12.4. 校准

N-Trig Windows 工具提供校准和测试例程。此外,还可以从以下网址获取一套非官方、不受支持的用户空间工具(包括校准器):http://code.launchpad.net/~rafi-seas/+junk/ntrig_calib

12.5. 跟踪

到目前为止,所有经过测试的 N-Trig 固件都不跟踪手指。当多个接触处于活动状态时,它们似乎主要按 Y 位置排序。