如何让操作系统向USB设备上报鼠标绝对位置?HID描述符相关咨询
答复
存在符合USB HID规范的标准描述符可实现该需求,无需开发私有协议,核心配置逻辑如下:
- 你需要在接收位置信息的目标USB设备的HID报告描述符中,声明一个属于通用桌面用法页(Usage Page
0x01)的顶级集合,集合对应用法选0x01(Pointer 指针设备)或0x02(Mouse 鼠标),注意不要直接套用普通相对鼠标的默认描述符。 - 描述符中的X、Y坐标字段必须标记为绝对坐标模式(即字段标识不带
Relative属性,带Absolute属性),逻辑最小值、最大值要覆盖系统全屏幕的坐标范围,物理单位声明为屏幕线性坐标单位,同时将这两个字段配置为输出报告(Output Report)类型。操作系统识别到该合法声明后,会在鼠标指针位置变动时,主动将当前指针的绝对位置通过该输出报告发送给你的设备。 - 如果需要同步采集鼠标按键、滚轮状态,可以在同一个顶级集合下补充对应字段:按键用法范围为
0x01~0x08(对应鼠标左键、右键、中键、前后侧键等标准按键),垂直滚轮用法为0x38,水平滚轮用法为0x42,这些字段同样配置为输出报告类型即可,系统会同步上报对应实时状态。
注意:普通消费级相对鼠标的HID描述符仅定义了输入报告(设备向系统发送位移增量),不会触发系统向设备回传全局指针绝对位置,必须修改坐标字段的模式和报告方向才能实现需求。只要配置符合HID规范,Windows、Linux、macOS均原生支持该类设备,无需安装第三方驱动。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

