Windows 精确式触摸板集合 (touchpad-windows-precision-touchpad-collection)

本主题讨论了 Windows 精确式触控板的顶级集合,还说明了该集合如何向 Windows 主机提供符合 HID 的触控板报告。

Windows 精确式触控板设备可以使用 HID 协议来提供显示为数字化器/触控板的顶级集合(页面 0x0D,用法 0x05)。

此 Windows 精确式触控板集合旨在向主机提供丰富的多触点和按钮报告,以及与这些报告相关的设备信息。 集合应支持两个功能报告:一个允许主机获取设备功能,另一个报告用于获取设备的认证状态。 有关强制输入报告的示例,请参阅示例报告描述符

可以实现可选(但强烈建议)的功能报告,以从主机获取延迟模式提示,从而实现 USB 设备在睡眠模式下所需的功耗。 以下部分详细介绍了适用于 Windows 精确式触控板的顶级集合中的报告。

“设备功能”功能报告

“设备功能”功能报告由 Windows 精确式触控板的主机请求,用于检索有关设备的触点报告功能和设备按钮类型的信息。

设备的触点报告功能由它可以报告的最大并发表面接触数定义。 一个 Windows 精确式触摸板应至少支持 3 个并发触点,最多支持 5 个并发触点。 触控板应通过“设备功能”功能报告中的最大触点数(页面 0x0D,用法 0x55)来报告此值。 在报告数据时,设备报告的触点数不得超过最大触点计数。 如果输入帧包含的联系人数超过最大值,主机将丢弃整个帧,包括以前报告的任何联系人的数据。 为了获得最佳用户体验,在达到新联系人生命周期的最大数值后,设备应该取消对检测到的任何新联系人的报告,即使任何现有联系人离开也不例外。 现有联系人可以继续报告,如果有任何人离开,新到达的联系人可以取代他们。

该设备的按钮类型被定义为可按压的实现(也称为点击板类型)或不可按压的实现(也称为压力板)。 Windows 精确式触控板也可以具有非按钮报告数字化器表面和外部按钮。

应在“设备功能”功能报告中通过按钮类型的值(页面 0x0D,用法 0x59)指定按钮实现类型。 如果设备具有非按钮报告数字化器表面,并且仅依赖外部按钮进行鼠标单击,则可以选择报告此用法。

下表显示了按钮类型用法值。

按钮类型值 实现
0 可按压(点击板)
1 不可按压(压力板)
2 不可点击(离散板)

主机可以在读取报告描述符后随时请求 Windows 精确式触控板的“设备功能”功能报告。

设备认证状态功能报告

设备认证状态功能报告由 Windows 精确式触控板的主机请求,用于检索有关设备的 256 字节 Blob 的信息。

在 Windows 10 中,向主机报告有效的已认证 Blob 是可选操作,但若要与 Windows 8.1 后向兼容,必须执行此操作。 未与已签名的 PTPHQA Blob 通信的设备仍必须报告(任何)256 字节的 Blob,例如下面的示例 Blob。 不报告有效认证 Blob 的设备将无法在 Windows 8.1 上运行。 Windows 不会与使用 HID 触控板用法但不在其“设备功能”功能报告中公开认证状态的设备交互。

应在设备认证状态功能报告中“供应商定义的用法”页(页面 0xFF,用法 0xC5)中通过供应商特定的用法指定 256 字节 Blob。

在设备收到指示其认证状态的 256 字节 Blob 之前,它应实现默认 Blob,如下所示:

0xfc, 0x28, 0xfe, 0x84, 0x40, 0xcb, 0x9a, 0x87, 0x0d, 0xbe, 0x57, 0x3c, 0xb6, 0x70, 0x09, 0x88, 0x07,
0x97, 0x2d, 0x2b, 0xe3, 0x38, 0x34, 0xb6, 0x6c, 0xed, 0xb0, 0xf7, 0xe5, 0x9c, 0xf6, 0xc2, 0x2e, 0x84,
0x1b, 0xe8, 0xb4, 0x51, 0x78, 0x43, 0x1f, 0x28, 0x4b, 0x7c, 0x2d, 0x53, 0xaf, 0xfc, 0x47, 0x70, 0x1b,
0x59, 0x6f, 0x74, 0x43, 0xc4, 0xf3, 0x47, 0x18, 0x53, 0x1a, 0xa2, 0xa1, 0x71, 0xc7, 0x95, 0x0e, 0x31,
0x55, 0x21, 0xd3, 0xb5, 0x1e, 0xe9, 0x0c, 0xba, 0xec, 0xb8, 0x89, 0x19, 0x3e, 0xb3, 0xaf, 0x75, 0x81,
0x9d, 0x53, 0xb9, 0x41, 0x57, 0xf4, 0x6d, 0x39, 0x25, 0x29, 0x7c, 0x87, 0xd9, 0xb4, 0x98, 0x45, 0x7d,
0xa7, 0x26, 0x9c, 0x65, 0x3b, 0x85, 0x68, 0x89, 0xd7, 0x3b, 0xbd, 0xff, 0x14, 0x67, 0xf2, 0x2b, 0xf0,
0x2a, 0x41, 0x54, 0xf0, 0xfd, 0x2c, 0x66, 0x7c, 0xf8, 0xc0, 0x8f, 0x33, 0x13, 0x03, 0xf1, 0xd3, 0xc1, 0x0b,
0x89, 0xd9, 0x1b, 0x62, 0xcd, 0x51, 0xb7, 0x80, 0xb8, 0xaf, 0x3a, 0x10, 0xc1, 0x8a, 0x5b, 0xe8, 0x8a,
0x56, 0xf0, 0x8c, 0xaa, 0xfa, 0x35, 0xe9, 0x42, 0xc4, 0xd8, 0x55, 0xc3, 0x38, 0xcc, 0x2b, 0x53, 0x5c,
0x69, 0x52, 0xd5, 0xc8, 0x73, 0x02, 0x38, 0x7c, 0x73, 0xb6, 0x41, 0xe7, 0xff, 0x05, 0xd8, 0x2b, 0x79,
0x9a, 0xe2, 0x34, 0x60, 0x8f, 0xa3, 0x32, 0x1f, 0x09, 0x78, 0x62, 0xbc, 0x80, 0xe3, 0x0f, 0xbd, 0x65,
0x20, 0x08, 0x13, 0xc1, 0xe2, 0xee, 0x53, 0x2d, 0x86, 0x7e, 0xa7, 0x5a, 0xc5, 0xd3, 0x7d, 0x98, 0xbe,
0x31, 0x48, 0x1f, 0xfb, 0xda, 0xaf, 0xa2, 0xa8, 0x6a, 0x89, 0xd6, 0xbf, 0xf2, 0xd3, 0x32, 0x2a, 0x9a,
0xe4, 0xcf, 0x17, 0xb7, 0xb8, 0xf4, 0xe1, 0x33, 0x08, 0x24, 0x8b, 0xc4, 0x43, 0xa5, 0xe5, 0x24, 0xc2

主机可以在读取报告描述符后随时请求 Windows 精确式触控板的设备认证状态功能报告。

延迟模式功能报告

延迟模式功能报告由主机发送到 Windows 精确式触控板,指示何时需要高延迟以节省电量,或反之,何时需要正常延迟以确保正常操作。 对于 USB 连接的 Windows 精确式触控板设备,此功能使设备能够区分由于不活动而处于暂停状态(运行时空闲)和由于系统进入 S3 或连接待机模式而处于暂停状态。

应通过延迟模式功能报告中的延迟模式用法值(页面 0x0D,用法 0x60)来指示延迟模式。 下表显示了延迟模式用法值。

延迟模式值 延迟模式
0 正常延迟
1 高延迟

触觉强度功能报告(可选)

在 Windows 11 中,实现了触觉强度功能报表,以提供使用触觉执行器以当前 PTP 为基础构建的进一步功能。 触觉强度功能报表由主机发送到 Windows 精确式触摸板,用于为触摸板设置触觉反馈的强度。 此可选功能报告要求设备报告 SimpleHapticsController(页面 0x09,用法 0x01),它公开具有单一全局强度的 SET_FEATURE(页面 0x09,用法 0x23)。

有关示例描述符,请参阅示例报告描述符

按钮按压阈值功能报告(可选)

在 Windows 11 内部版本 26027+ 中,添加了通过 Windows 触摸板设置对用户可配置单击力的支持(也称为按钮按压阈值,即触摸板上实现单击/按下操作的作用力阈值)。 对于支持此功能的精确式触摸板,它应包括处理单次使用按钮按压阈值的 SET_FEATURE 报告(页面 0x0D,使用 0xB0)。 在枚举期间,主机将从描述符中评估支持的逻辑和物理范围,并计算设置 UI 的公开选项,包括默认值。 主机应发出 SET_FEATURE,将用户指定的按钮按压阈值传达给设备;此颁发可在任何时候发生,但应在设置发生更改、出现用户切换以及枚举或重置设备时发生。

逻辑范围应线性映射到值的物理范围,并以默认值为中心均匀分布。 获取逻辑范围后,将使用以下公式计算默认值:

此图表显示用于计算逻辑单元中默认按钮按下阈值的公式

逻辑最小值、默认值和逻辑最大值对应于通过 Windows 设置 UI 向用户公开的 3 个不同的按钮按压力级别(分别支持“低”、“中”和“高”)。

按钮按压阈值的建议物理范围至少涵盖介于 110g 和 190g 之间的范围,分别对应于最小值和最大值。 有关使用物理最大值 190g 和物理最小值 110g 的示例描述符(因此,根据上述公式,默认值为 150g),请参阅示例报告描述符

Windows 精确式触控板输入报告

主机在通过 Windows 精确式触控板集合从输入报告中提取触点数据时使用下表中的用法。 该表包含所有的必需用法,以及与报告的每个唯一数字化器触点相关的受支持的可选用法。

成员 说明 ID 必需/可选
触点 ID 唯一标识给定帧中的触点。 0x0D 0x51 必需
X 触点位置的 X 坐标。 0x01 0x30 必需
Y 触点位置的 Y 坐标。 0x01 0x31 必需
提示 如果触点位于数字化器的表面,则设置此成员。 0x0D 0x42 必需
置信度 如果触点对于手指而言太大,则设置此成员。 0x0D 0x47 必需
宽度 触点周围的边界框的宽度。 0x0D 0x48 可选
高度 触点周围的边界框的高度。 0x0D 0x49 可选
压强 用户对触点施加的压力大小。 0x0D 0x30 可选
方位角 触点标绕 Z 轴逆时针旋转。 0x0D 0x3F 可选

下表包括所有 Windows 精确式触控板输入报告中都应存在的所有概要使用。

成员 说明 ID 必需/可选
扫描时间 相对扫描时间。 0x0D 0x56 必需
触点计数 将在给定报告中报告的触点总数。 0x0D 0x54 必需
机械力 作用于触摸板传感器的总力。 0x20 0x494 可选
按钮 1 指示与数字化器集成的触控板按钮的按钮状态。 0x09 0x01 可选
按钮 2 指示用于主键(默认为左键)单击的外部按钮的按钮状态。 0x09 0x02 可选
按钮 3 指示用于辅键(默认为右键)单击的外部按钮的按钮状态。 0x09 0x03 可选

任何未在触点级别或报告级别报告所有必需用法的设备无法作为 Windows 精确式触控板正常运行。 必需用法由 Windows 主机严格执行。 如果未限制逻辑最大值,可对其进行优化以减小描述符大小。

以下部分提供了有关报告中的成员的信息。 有关按钮成员的信息,请参阅按钮、报表级别用法

触点 ID

唯一标识报告中的触点(在其整个生命周期内)。 在设备检测并报告触点时,该触点 ID 必须保持不变。 每个单独的并发触点必须具有唯一标识符。 在不再检测或报告先前关联的触点后,可以重用标识符。 没有预期的数字范围,使用的值仅受描述符中指定的逻辑最大值限制。

X/Y

X 和 Y 值报告给定触点的坐标。 Windows 精确式触控板应报告每个触点的点位。 应为 X 和 Y 用法指定以下全局项:

  • 逻辑最小值和逻辑最大值(确保大于或等于 300DPI 输入分辨率)。

    注意:整个逻辑坐标范围应可以在 X 轴和 Y 轴上进行报告。

  • 物理最小值和物理最大值(参阅“设备集成 - 大小”)。

  • 单位和单位指数。

  • 坐标 0,0(x, y 值)指示触控板的左上角。

提示

用于指示触点何时在数字化器的表面上或离开了表面。 这由报告大小为 1 位的主项指示。 在传递触点报告时,如果触点在数字化器表面上,则应设置该位;如果触点离开了表面,则应清除该位。

在清除尖端开关的情况下报告触点时,报告的 (X, Y) 位置应与设置了尖端开关的情况下报告的最后一个位置相同。

此图显示了两个与 Windows 精确式触控板交互的触点,触点被提起后,在不同的时间离开触控板表面。

参考前面图表中概述的示例,两个触点会置于 Windows 精确式触控板上,然后在一段时间后,第一个触点被提起,而第二个触点在表面上保留一段时间。 将按下表中所述报告此情况。

报表 1 2 3 4 5 6 7 8 9 10 11
触点计数 2 2 2 2 2 2 1 1 1 1 1
触点 1:尖端开关 1 1 1 1 1 0 NR NR NR NR NR
触点 1:X、Y X₁, Y₁ X₂, Y₂ X₃, Y₃ X₄, Y₄ X₅, Y₅ X₆, Y₆ NR NR NR NR NR
触点 2:尖端开关 1 1 1 1 1 1 1 1 1 1 0
触点 2:X, Y X₁, Y₁ X₂, Y₂ X₃, Y₃ X₄, Y₄ X₅, Y₅ X₆, Y₆ X₇, Y₇ X₈, Y₈ X₉, Y₉ X₁₀, Y₁₀ X₁₁, Y₁₁

Confidence

用于表示有意的接触。 兼容性要求测试,用于确保当触点的任何尺寸(高或宽)大于 25mm 时,该位设置为“关闭”,表示它不是意外触点。 Windows 精确式触控板设备不应隐藏固件处理中的任何触点,但应将所有触点转发到该主机,并表明置信度。 然后,主机将使用置信度来跟踪意外触点。

一旦设备确定某个触点为无意,它应清除该触点报告和所有后续报告的置信度位。 将触点归为无意之前,设备应在报告中设置该触点的置信度。

宽度和高度

“宽度”和“高度”使用表示触摸板触点周围的边界框的宽度和高度。 报告的值永远不应为零 (0),除非报告了“UP”事件,在这种情况下,则报告的值应为零 (0)。

压力

“压力”是手指对数字化器表面施加的力的度量。 压力的允许范围没有限制。

方位角

“方位角”指定光标绕 Z 轴逆时针旋转一个完整圆范围。 必须指定物理范围和逻辑范围。 物理范围必须为 0 到 360 度或等效的弧度,但是如果触点椭圆基于硬件功能呈对称形状,则设备可能会报告整个范围或一半范围。 逻辑范围必须足够大,提供至少精确到两个小数位的数据。

扫描时间

扫描时间报告相对数字化器时间,以 100μs 为单位。 扫描时间表示设备在处于非活动状态一段时间并开始报告数据后所报告的第一帧的增量。 收到的第一个扫描时间被视为后续报告时间的基准时间。 报告的扫描时间之间的增量应反映数字化器的扫描频率。 必须注意,与其他用法不同,主机不允许扫描时间用法的单位具有任何灵活性。 它必须以 100μs 为单位。 该值预期会滚动更新,因为只会将 2 个字节分配给计数器。

对于一帧内的所有触点,扫描时间值应该相同。

触点计数

这用于指示给定帧中所报告的触点数量,而不考虑其相关的尖端开关。

机械力

这用于报告作用于触摸板传感器的总力,独立于可报告的单个手指的可选压力。 如果还报告了单个触点的压力,则压力和机械力的单位、单位指数、物理范围和逻辑范围必须相同,并且机械力的值必须 = SUM(触点 1 的压力 + 触点 2 的压力 + .... 等),而不考虑这些触点中每一个触点的置信度位。

按钮、报表级别使用情况

示例报告描述符