使用报告描述符支持功能发现 (Windows 7)
本部分介绍供应商如何使用报告描述符来支持触控和多点触控设备的功能发现。
报告描述符
供应商提供的驱动程序通过提供报告描述符向操作系统报告其设备功能。 有关报告描述符的完整示例,请参阅 Elotouch.c 文件,该文件是 Windows 驱动程序工具包 (WDK) 中 EloMT 示例的一部分。
若要让 Windows 7 检测设备支持多输入的能力,驱动程序必须在报告描述符中包含接触点标识符用法 (0x51)。 请注意,在示例报告描述符(串行报告模式)中,此用法出现在单个顶级物理集合中,而在示例报告描述符(并行/混合模式)中,此用法在描述多输入的两个逻辑集合中出现一次。
功能报告独占性
在 Windows 7 中,系统以独占方式打开包含设备模式功能报告的配置顶级集合。 由于操作系统以独占方式打开功能报告,因此第三方应用程序无法访问该报告。
由于 Windows 7 将设备配置为仅报告通过多输入模式输入的数据,因此顶级集合必须支持所需的多点触控用法。 有关所需用法的信息,请参阅支持多点触控数字化器驱动程序中的用法。
在 Windows XP 和 Windows Vista 中,第三方应用程序可以使用功能报告来选择当前处于活动状态的输入模式,例如单点触控或基于鼠标的输入。 对于 Windows XP Tablet PC Edition 和 Windows Vista,建议使用单点触控。 对于 Windows XP 和 Microsoft Windows 2000,建议使用鼠标。
功能报告要求
功能报告必须位于其自己的顶级集合中,并且必须包含多输入配置用法。
以下示例显示了来自 Elotouch.c 的功能报告:
0x09, 0x0E, // USAGE (Device Configuration)
0xa1, 0x01, // COLLECTION (Application)
0x85, REPORTID_FEATURE, // REPORT_ID (Configuration)
0x09, 0x23, // USAGE (Device Settings)
0xa1, 0x02, // COLLECTION (logical)
0x09, 0x52, // USAGE (Device Mode)
0x09, 0x53, // USAGE (Device Identifier)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x0a, // LOGICAL_MAXIMUM (10)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x02, // REPORT_COUNT (2)
0xb1, 0x02, // FEATURE (Data,Var,Abs
0xc0, // END_COLLECTION
0xc0, // END_COLLECTION
设备模式
设备模式用法 (0x52) 可以具有以下值之一:
模型 | 值 |
---|---|
鼠标(建议的默认值) |
0x00 |
单输入(单点触控或触笔) |
0x01 |
多输入 |
0x02 |
设置单输入模式后,供应商可以执行以下操作之一:
仅发送有关第一个接触点的信息。 这可以在固件或设备驱动程序中实现。
在 HID 微型驱动程序中删除有关其他接触点的所有信息。 这种方法减少了固件中所需的逻辑。 但是,它仅适用于选择编写设备驱动程序的实现者。
设置鼠标模式时,固件或设备驱动程序应从使用鼠标顶级集合检测到的第一个接触点路由数据。
根据设备的功能和它支持的操作系统版本,为设备选择合适的默认设备模式。 为了提供与早期 Windows 版本的向后兼容性,建议将鼠标模式设置为默认模式。 将默认模式设置为鼠标模式后,设备可以与任何操作系统配合使用。
如果你可以保证不在任何早于 Windows Vista 的 Windows 版本上使用设备,最好将默认模式设置为单输入模式。 如果 Windows 7 发现多输入,它会重新配置设备以支持该功能。
设备标识符
当设备标识符 (0x53) 是数字化器或鼠标顶级集合的一部分时,它是一个静态值 (SV)。 当报告描述符包含多个相同类型的数字化器顶级集合时,必须使用设备标识符。 此用法唯一标识数字化器顶级集合,并应出现在功能报告中。
如果设备可以用作鼠标,则鼠标集合应与相应的数字化器集合具有相同的设备标识符。 只有一个数字化器顶级集合的设备无需指定设备标识符用法。
当该用法是设备设置逻辑集合的一部分时,它是一个动态值 (DV)。 在这种情况下,该用法允许主机选择它想要配置的设备。 零值表示所有集合。 非零值表示具有匹配设备标识符的顶级集合。
触控和触笔支持
如果设备包含同时提供 Windows 触控和触笔功能的数字化器,你必须分别报告触控集合和触笔集合。 如果驱动程序可能安装在平板电脑或其他没有鼠标的计算机上,你还应该报告鼠标集合。