|
|
很多新手问HID开发从哪下手。我的建议是:别看三天文档,直接拿开发板跑通一个“按下-松开”的完整循环,遇到不会的再回头查。这篇按这个思路写。
一、环境准备
最小环境三件套:
- 一块带USB外设功能的开发板(选官方例程齐全的型号)
- 官方SDK与交叉编译工具链
- 一个能看描述符和报文的工具(USBlyzer、Wireshark+USBPcap、或Linux的lsusb -v)
先跑官方键盘例程,能点亮、能被主机识别,再动代码。
二、最简报文:按一下A键
标准键盘报告8字节,发一次“按下A”再“松开”:
- 按下: 00 00 04 00 00 00 00 00
- 松开: 00 00 00 00 00 00 00 00
复制代码
第0字节修饰键位图,第2字节放按键码(0x04就是A)。两个报文一发,主机就会收到一个完整的A。
注意三个细节:
- 必须发全0的松开报文,只发按下不收尾,主机会认为键一直按着
- 修饰键要独立成字节,Ctrl+C是`01 00 06 ...`+`00 00 00 ...`两发
- 按键码查表要准,HID Usage Table和ASCII不是一回事
三、鼠标报文对照
相对鼠标最小4字节:
位移是带符号的,向左/向上是负值。绝对定位设备(触屏、数位板)在描述符里声明的方式不同,报文里放的是绝对坐标。
四、调试三板斧
抓包看真实报文:别猜,直接看总线上跑的是什么。
主机测试页验证:Windows设备管理器里HID设备有测试页,能看原始报告。
改一处验一处:描述符和报文代码分开改,每次只动一个变量。
五、接下来学什么
跑通单键之后,按这个顺序深入:
- 组合键与修饰键处理
- 多设备(复合设备)的接口组织
- 批量数据场景换OUT端点
- 上BLE做无线HID
开发入门就这些。卡在环境搭建的可以到手机脚本开发教程版块提问,抓包细节参考报文结构详解。 |
|