在多点触控驱动程序中选择数据包报告模式 (Windows 7)

Windows 支持通过以下三种方法向系统报告多点触控数据:串行模式、并行模式和混合模式。 供应商提供的 HID 报告描述符因选择的模式而异。

我们建议供应商使用混合或并行模式,因为这些模式可以提高从操作系统组件到应用程序的数据传递效率。

串行模式

每个数据包都包含描述单个物理触点的信息。 将以串行方式流式传输多个触点。

在此模式下,设备会通过一系列数据包报告所有触点信息。 每个数据包都包含描述单个物理触点的信息。 设备针对每个并发触点发送单独的数据包。

例如,如果双指向下按,则使用串行模式的设备会先发送第一个触点的更新,然后发送第二个触点的更新。 只要两根手指都与数字化器接触,就会重复执行此过程。

串行模式可能会降低设备上每个物理触点的有效报告速度。 例如,如果设备可以每毫秒 (ms) 发送一次更新,在存在两个物理触点的情况下,每个触点只能每 2 毫秒更新一次。

如需串行模式报告描述符示例,请参阅示例报告描述符(串行报告模式)

相比之下,混合和并行报告模式因数据传递开销降低而受益。

并行模式

在并行模式下,设备会在一个数据包中报告所有触点信息。 每个物理触点都由一个嵌入到顶级集合中的逻辑集合来表示。 此逻辑集合包含设备对各个触点都支持的所有用法(例如 X、Y 和压力)。 由于设备报告的触点数通常低于最大值,因此,应通过以下方式传达并行数据包中报告的触点数:使用触点使用计数或在数据包中为所有无效的触点设置 null 值。

假定某个设备支持三个触点。 如果用户目前在数字化器上只放两根手指,则即使数据包可携带三个触点的数据,并行数据包也只能包含两个有效触点的数据。 在这种情况下,应将“触点计数”设置为 2,让客户端应用程序知道超过两个触点的信息都是无效的。

也可让设备将第二项以外的触点使用计数的值设置为 null 值。 客户端应用程序可以通过检查触点使用计数的值来检测实际触点,也可以使用读取数据直到遇到 null 值的方法。

如需并行模式报告描述符示例,请参阅示例报告描述符(并行/混合模式)

在一个数据包中报告多个触点有个缺点,那就是在每次要报告的触点数少于可能的最大触点数时,每个数据包都会浪费空间。 设备可以使用混合报告模式来减少这种低效情况。

混合模式

在混合模式中,可在一个数据包中报告的触点数少于该设备支持的最大触点数。 例如,最多支持 48 个并发物理触点的设备可以将其顶级集合设置为在一个数据包中最多报告 12 个触点。 如果目前有 48 个有效触点,该设备可以将这些触点分为 4 个串行数据包,每个串行数据包报告 12 个触点。

在设备以这种方式报告数据时,第一个数据包中的触点使用计数值应该反映混合数据包中报告的触点总数。 其他串行数据包的触点计数应该为 0。 使用上面的示例,第一个数据包中的触点使用计数的值为 48,而后三个数据包的触点使用计数为 0。

混合和并行报告模式的优点是减少了数据传递开销。

如需混合模式报告描述符示例,请参阅示例报告描述符(并行/混合模式)

Null 值

应按照 HID 规范中所述指定 Null 值。 必须在报告描述符中的所有主项上设置 null 位。 请注意,设备可以通过触点使用计数或 null 值向主机通知数据包中的实际有效触点数。