必需的 HID 顶级集合 (required-hid-top-level-collections)
本主题介绍 Windows 10 及更高版本操作系统中用于笔报告的必需 HID 顶级集合。
集成 Windows 笔设备至少应公开单个用于笔报告的必需顶级集合。 还可以实现可选(但建议)的固件更新集合。 在早于 Windows 10 的操作系统上,还可以实现用于支持笔光标的可选(虚拟)鼠标集合。
下图显示了集成 Windows 笔设备的 HID 集合。
鼠标集合(虚拟)
集成 Windows 笔设备可以使用 HID 协议来提供显示为通用桌面/鼠标的顶级集合(页面 0x01,用法 0x02)。
集成 Windows 笔设备的(虚拟)鼠标集合用于向主机提供符合 HID 标准的鼠标设备,以便在早于 Windows 10 的操作系统上显示光标。 此集合不需要报告实际鼠标;仅在描述符中存在鼠标集合。 如果不必支持早于 Windows 10 的操作系统,则可以省略此集合。
集成 Windows 笔集合
集成 Windows 笔设备应在 Windows 10 系统上使用 HID 协议,以便设备提供显示为数字化器/集成笔的顶级集合(页面 0x0D,用法 0x02)。
集成 Windows 笔集合用于向主机提供丰富的触点、压力、擦除和按钮报告。 该集合可以选择支持功能报告以获取设备的认证状态。 本主题的“集成 Windows 笔输入报告”部分详细指定了必需的输入报告。 可以实现可选(但强烈建议)的功能报告,以从主机获取延迟模式提示。 此可选功能可帮助在休眠模式下唤醒的 USB 设备上实现最小功耗。
设备认证状态功能报告
如果实现设备认证状态功能报告,则集成 Windows 笔设备的主机可以使用它检索设备的 256 字节 Blob。
应在设备认证状态功能报告中“供应商定义的用法”页(页面 0xFF,用法 0xC5)中通过供应商特定的 HID 用法指定 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 10 版本 1511 和更低版本的操作系统目前不会向恰好支持延迟模式功能的笔或触摸屏设备发出此 HID 功能报告。 但是,向设备添加对延迟模式功能报告的支持可以确保将来 Windows 支持在笔和触摸屏设备上使用该功能时,该设备可以立即使用该功能。
延迟模式功能报告由主机发送到集成 Windows 笔设备,指示何时需要高延迟以节省电量,或反之,何时需要正常延迟以确保正常操作。 对于 USB 连接的集成 Windows 笔设备,此功能使设备能够区分由于不活动而处于暂停状态(运行时空闲)和由于系统进入 S3 或连接待机模式而处于暂停状态。
应通过延迟模式功能报告中的延迟模式用法值(页面 0x0D,用法 0x60)来指示延迟模式。
延迟模式值 | 延迟模式 |
---|---|
0 | 普通 |
1 | 高 |
集成 Windows 笔输入报告
下表中的用法由主机用于通过集成 Windows 笔集合从输入报告中提取笔数据。 下表显示了所有必需用法,以及用于报告笔的受 Windows 支持的可选用法。
成员 | 说明 | 页 | ID | 必需/可选 | 对于 HLK 是必需的 |
---|---|---|---|---|---|
X | 触点位置的 X 坐标 | 0x01 | 0x30 | 必需 | 是 |
Y | 触点位置的 Y 坐标 | 0x01 | 0x31 | 必需 | 是 |
提示 | 如果笔位于数字化器的表面,则设置 | 0x0D | 0x42 | 必需 | 是 |
范围内 | 指示笔是否位于数字化器范围内 | 0x0D | 0x32 | 必需 | 是 |
桶形按钮 | 位于笔侧的按钮的状态 | 0x0D | 0x44 | 必需 | 是 |
Invert | 指示笔的方向表示擦除意图 | 0x0D | 0x3C | 可选 | 是 |
橡皮擦 | 指示笔正在擦除 | 0x0D | 0x45 | 可选 | 是 |
笔尖压力 | 笔尖上施加的压力 | 0x0D | 0x30 | 可选 | 是 |
扫描时间 | 每帧的相对扫描时间 | 0x0D | 0x56 | 可选 | 否 |
X 倾斜 | 笔沿 x 轴倾斜的角度 | 0x0D | 0x3D | 可选 | 否 |
Y 倾斜 | 笔沿 y 轴的倾斜角度 | 0x0D | 0x3E | 可选 | 否 |
扭转 | 笔的顺时针旋转 | 0x0D | 0x41 | 可选 | 否 |
传感器序列号 | 传感器的唯一持久标识符 | 0x0D | 0x5B | 可选 | 否 |
传感器序列号 - 第 2 部分 | 用于将传感器序列号再延长 32 位 | 0x0D | 0x6E | 可选 | 否 |
传感器供应商 ID | 为传感器供应商分配的标识符 | 0x0D | 0x91 | 可选 | 否 |
下表显示集成 Windows 笔输入报告的必需报告级别用法。
成员 | 说明 | 页 | ID | 必需/可选 |
---|---|---|---|---|
报表 ID | 集成 Windows 笔报告 ID | 0x0D | 0x02 | 必需 |
必需用法和 Windows 支持的可选用法
任何未在触点级别或报告级别报告所有必需用法的设备无法作为集成 Windows 笔设备正常运行。 必需用法由 Windows 主机严格执行。 如果未设置逻辑最大值,可对其进行优化以减小描述符大小。
以下部分将详细介绍前面表中列出的必需用法和 Windows 支持的可选用法。
X, Y
X 和 Y 报告集成笔的坐标。 应为 X 和 Y 用法指定以下全局项:
物理最小值 & 物理最大值
单位 & 单位指数
逻辑最小值 & 逻辑最大值(确保输入分辨率 >= 150DPI)
注意:整个逻辑坐标范围应可以在 X 轴和 Y 轴上进行报告。
笔尖
用于指示笔尖何时在数字化器的表面上或离开了表面。 这由报告大小为 1 位的主项指示。 在传递输入报告时,如果笔在数字化器表面上,则应设置该位;如果笔离开了表面,则应清除该位。
在清除了笔尖开关的情况下在报告流中首次报告笔时,报告的 X/Y 位置应与设置了尖端开关的情况下报告的最后一个位置相同。
范围内
用于指示笔尖(或尾端橡皮擦)何时位于数字化器范围内。 这由报告大小为 1 位的主项指示。 在传递输入报告时,如果笔尖(或尾部橡皮擦)在数字化器表面上或数字化器的可检测范围内,则应设置该位;如果不再可检测到笔,则应清除该位。 应注意的是,“范围内”仅当在可以可靠地报告笔的 X/Y 位置时才应进行报告,并且应在 Windows 10 的 Pen HLK 要求所规定的参数中。
在清除范围内开关的情况下报告笔时,报告的 X/Y 位置应与在设置了范围内开关时报告的最后一个位置相同。
桶形按钮
用于指示何时按下笔侧的按钮。 这由报告大小为 1 位的主项指示。 传递输入报告时,应在按下此按钮时设置位,在松开按钮时清除位。
Invert
用于指示笔的方向表示擦除意图。 这由报告大小为 1 位的主项指示。 下面是有关不同橡皮擦实现的一些输入报告准则:
尾端橡皮擦实现
在传递输入报告时,每当笔反转时应设置该位,在笔未反转时应清除该位。
橡皮擦按钮实现
在传递输入报告时,每当按下橡皮擦按钮并且笔位于数字化器范围内时应设置该位,否则应清除该位。
橡皮擦
用于指示笔何时在进行擦除。 这由报告大小为 1 位的主项指示。 下面是有关不同橡皮擦实现的一些输入报告准则:
尾端橡皮擦实现
在传递输入报告时,每当笔反转并且与屏幕接触时应设置该位,否则应清除该位。
橡皮擦按钮实现
在传递输入报告时,每当按下橡皮擦按钮并且笔尖与屏幕接触时应设置该位,否则应清除该位。
为了避免在此实现中意外激活或取消擦除功能,强烈建议在笔尖与屏幕接触后,按下或松开擦除按钮不应影响橡皮擦位的报告。
在清除了擦除开关的情况下在报告流中首次报告笔时,报告的 X/Y 位置应与在设置了擦除开关时报告的最后一个位置相同。
扫描时间
扫描时间报告相对数字化器时间,以 100µs 为单位。 当设备在处于非活动状态一段时间后开始报告数据时,扫描时间表示报告的第一帧到报告时间的时间跨度。 收到的第一个扫描时间被视为后续报告时间的基础时间。 报告的扫描时间之间的经过时间应反映数字化器的扫描频率。 必须注意,与其他用法不同,主机不允许扫描时间用法(如果已实现)的单位具有任何灵活性。 它必须以 100µs 为单位。 该值预期会滚动更新,因为只会将 2 个字节分配给计数器。
笔尖压力
用于指示应用于笔尖的压力。 这由报告大小至少为 8 位的主项指示,以容纳至少 256 个不同级别的压力。 若要报告其他粒度,必须使用更大的报告大小。
报告压力的逻辑值应尽量遵循下图中所示的理想对数曲线。 适用于 Windows 10 的 Pen HLK 测试套件提供的压力测试旨在确保报告的压力曲线处于图中指示的上限和下限范围内。 尽管图中的理想曲线及其关联的公式是针对报告 256 个级别的设备而概述的,但可以缩放它们以容纳任意数量的不同级别。
虽然橡皮擦开关在尾部橡皮擦没有压力感应功能的笔上处于活动状态,但笔尖压力应报告 127(最大压力的 50%)。 已选择此值,以支持在橡皮擦开关处于活动状态时可能消耗实际尾端笔压力的笔和应用。
X 倾斜
“X 倾斜”表示 Y-Z 平面与包含笔传感器轴和 Y 轴的平面之间的夹角。
必须指定物理范围和逻辑范围。 物理范围可能最大为 -90 到 90 度,但描述符中报告的物理最小值/最大值应对应于笔的实际最小/最大可实现 X 倾斜,并采用正确的单位(0x14,度)。 逻辑范围必须足够大,提供至少精确到两个小数位的数据。 弧度也可用于物理范围。 在数字化器的本机方向上,用户右侧 X 倾斜为正。
Y 倾斜
“Y 倾斜”表示 X-Z 平面与包含笔传感器轴和 Y 轴的平面之间的夹角。
必须指定物理范围和逻辑范围。 物理范围可能最大为 -90 到 90 度,但描述符中报告的物理最小值/最大值应对应于笔的实际最小/最大可实现 Y 倾斜,并采用正确的单位(0x14,度)。 逻辑范围必须足够大,提供至少精确到两个小数位的数据。 弧度也可用于物理范围。 在数字化器的本机方向上,朝向用户的 Y 倾斜为正。
扭转
“扭转”指定笔绕其自身所在的主轴顺时针旋转。
必须指定物理范围和逻辑范围。 物理范围必须为 0 到 360。 逻辑范围必须足够大,提供至少精确到两个小数位的数据。 弧度也可用于物理范围。 在这种情况下,逻辑范围必须大到足以报告至少精确到四个小数位的值。
传感器序列号
传感器序列号是用于与笔数字化仪通信的笔附件中使用的传感器的唯一持久标识符。 这必须是 32 位,并且由传感器供应商 ID 标识的供应商或实体定义。 如果数字化器不知道传感器序列号,要么因为笔配件不支持传输此值,或者尚未完全接收传输,数字化器应向主机报告 0。 主机不支持 Null 位置。
传感器序列号 - 第 2 部分
传感器序列号 – 第 2 部分允许将额外的 32 位指定为笔配件中使用的传感器的唯一持久标识符的一部分。 如果传感器序列号 – 第 2 部分对数字化器未知,因为笔配件不支持传输此值,或者尚未完全接收传输,数字化器应向主机报告 0。 主机不支持 Null 位置。
传感器供应商 ID
“传感器供应商 ID”字段用于表明与笔式数字化仪通信的笔附件中使用的换能器的制造商。 这需要是一个 2 字节的 USB-IF 分配的供应商 ID,制造商或 IHV/OEM 授权为此目的而使用的 USB-IF 供应商 ID。