HID-compliant单点触摸屏输入数据结构及字节赋值规则咨询
HID 单点触控屏输入数据结构及赋值规范
触摸屏没有键盘、鼠标类的通用HID启动协议,输入报告的结构完全由你使用的HID报告描述符定义,你使用的是微软官方提供的示例描述符,对应的规范如下:
字节序规则
所有16位多字节字段(X坐标、Y坐标、时间戳)统一采用小端序,即低字节在前、高字节在后,你代码中先放LOWBYTE再放HIGHBYTE的写法是符合规范的。
8字节触摸报告各字段赋值要求
- report[0]:报告ID,固定填
0x01,和你当前写法一致 - report[1]:触摸状态位,定义如下:
- 第0位:Tip Switch,置1表示触点按下,置0表示触点抬起
- 第1位:In Range,置1表示触点在屏幕检测范围内
你当前填写的0x3对应正常按下的状态,写法正确;如果要实现触点抬起动作,将该字段改为0x0即可。
- report[2]report[3]:X轴坐标,16位无符号整数,取值必须和你报告描述符中定义的X轴逻辑最大/最小值匹配,比如描述符里定义X轴范围是032767,输入的坐标就不能超过32767。
- report[4]~report[5]:Y轴坐标,规则和X轴坐标完全一致。
- report[6]~report[7]:扫描时间戳,16位无符号整数,单位为微秒,你填写的
0x0065是合法值,不需要精确时间戳的场景下也可以固定填0,不影响基础触摸功能。
常见异常排查
你注释中提到的第8字节触摸计数无效,是因为单触点的HID报告描述符中没有定义接触数量字段,只有多点触控的报告需要新增该字段,单触点场景下加这个字节反而会和描述符不匹配,导致系统解析数据错误。
如果当前触摸效果不符合预期,优先排查两个点:
- X、Y坐标的取值是否超出报告描述符中定义的逻辑范围,比如你描述符定义最大分辨率是1920*1080,传10000的坐标会被系统判定为超出屏幕范围,无响应或跳到边缘。
- 触点抬起时是否正确发送了状态位为0的报告,否则系统会判定触点一直处于按下状态,出现拖拽、点击异常。
内容的提问来源于stack exchange,提问作者Narek Aydinyan
相关产品推荐
相关产品推荐

