尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
第7讲:HID 设备——做一个键盘或鼠标
本讲目标理解 HID 为什么通常可以使用系统通用驱动认识 Report Descriptor并了解键盘和鼠标的基本报告格式。一、HID 为什么通常不需要专用驱动HID 的全称是 Human Interface Device即人机接口设备。常见的 HID 设备包括键盘、鼠标和许多游戏手柄。HID 规范不仅定义了接口类别还定义了设备如何描述自己的报告格式以及如何通过 Input、Output 和 Feature Report 等机制交换数据。操作系统提供通用 HID 驱动因此符合规范的设备通常不需要为每个产品单独编写底层驱动。但要注意把接口类代码写成 HID 并不代表设备就一定能正常工作。报告描述符和实际报告数据必须匹配。二、Report Descriptor 是什么可以把 Report Descriptor 理解成一份数据格式说明书。它告诉 Host报告中有哪些字段。每个字段占多少位。字段有多少个。字段的逻辑取值范围。字段代表什么用途。而真正运行时发送的数据叫作报告例如 Input Report。因此Report Descriptor 描述格式Input Report 承载实际状态。两者不能混为一谈。三、键盘报告是怎样的一种常见的 Boot Keyboard 输入报告长度为 8 字节字节常见用途Byte 0Ctrl、Shift、Alt 等修饰键状态Byte 1保留字段Byte 27最多列出 6 个普通按键的 Usage ID这只是常见 Boot Keyboard 格式不代表所有 HID 键盘都必须采用同一种报告布局。例如按下字母 A 时设备上报的是对应的 HID Usage而不是直接发送 ASCII 字符A。最终显示什么字符还与操作系统键盘布局、修饰键状态以及输入法有关。一个简单的按键过程假设要实现按下 A 键可以采用下面的逻辑发送 A 键按下报告 | 电脑识别到按键状态 | 发送所有按键释放报告如果一直没有发送释放状态电脑就可能认为按键仍然处于按下状态。实际报告字节必须根据使用的 Report Descriptor 及其 Usage 定义确定不能脱离描述符直接套用示例数据。四、鼠标报告相对移动与绝对定位常见鼠标报告包含按钮状态以及 X、Y 位移。例如Buttons 0 X 5 Y -2如果报告描述符定义的是相对坐标那么它表示鼠标相对移动了相应单位而不是移动到屏幕坐标(5, -2)。而触控屏、数位板等设备可能使用绝对坐标。绝对坐标的报告格式和逻辑范围必须通过描述符定义清楚。所以在编写 HID 固件时不能只关心报告长度还必须确认每个字段的语义。五、动手实现时的建议先使用 SDK 提供的 HID Keyboard 示例。检查接口描述符和 Report Descriptor。发送一个按键报告再发送释放报告。在文本编辑器中验证结果。确认按键行为正常后再增加鼠标报告。最后根据产品需求调整报告格式和上报机制。测试模拟键盘时应避免在登录界面或可能触发重要操作的环境中直接发送按键。六、常见错误报告长度与描述符不一致。将 HID Usage ID 误当作 ASCII 编码。按下按键后没有发送释放状态。把相对坐标当成绝对坐标。修改了 Report Descriptor却没有同步修改固件实际发送的数据。遇到这些问题时应同时检查描述符和实际传输的数据而不是只修改其中一方。七、本讲小结HID 的核心是设备先描述数据格式再按照这个格式上报状态。理解 Report Descriptor 与实际报告的关系就掌握了开发键盘、鼠标和许多游戏手柄的基础。留给下一讲的问题如果一个设备既要实现键盘又要实现鼠标还想提供 CDC 调试串口是否需要三个 USB 插头下一讲我们来看复合设备如何让一个 USB 设备同时具备多种功能。
RELATED

相关推荐

iloader:iPhone 侧载 SideStore 与导入 IPA,全程不碰命令行

iloader:iPhone 侧载 SideStore 与导入 IPA,全程不碰命令行

iloader:iPhone 侧载 SideStore 与导入 IPA,全程不碰命令行 【免费下载链接】iloader User friendly sideloader 项目地址: https://gitcode.com/GitHub_Trending/iloa/iloader 用其他工具装 SideStore,装完往往还要把 rppairing、loc…

📅 2026/10/29 10:55:13
计算机服务巡检

计算机服务巡检

一、先一句话总览物理核:CPU真实硬件核心;逻辑核:超线程(SMT)虚拟出来的核心;频率:核心每秒运算次数;进程:程序运行的独立资源容器;线程:进程里面…

📅 2026/10/29 10:55:12
Yuzu模拟器历史版本下载完整指南:7个存档构建一次讲清,怎么选、怎么装

Yuzu模拟器历史版本下载完整指南:7个存档构建一次讲清,怎么选、怎么装

Yuzu模拟器历史版本下载完整指南:7个存档构建一次讲清,怎么选、怎么装 【免费下载链接】yuzu-downloads 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu-downloads 想用 Yuzu 模拟器却找不到某个旧版本?官方渠道往往只留最新…

📅 2026/10/29 10:55:12
MORE NEWS

更多资讯

📰

从词法分析到三地址码:小型编译器的链路与避坑

简介:面向计算机专业编译原理课程设计与实验环节的配套资料包,适合正在完成词法分析、语法分析及小型编译器实现的学生参考。内容围绕词法分析器、LL(1)文法分析简单语句(如 ii*i)、LR(0)与SLR(1)语法分析、四元式生成和汇编代码生…

📰

CTF竞赛中隐蔽题型解析与实战技巧

1. 项目背景与核心挑战 "攻防世界—看不见的100分"这个标题让我联想到网络安全竞赛中那些隐藏极深的关键得分点。在CTF(Capture The Flag)比赛中,往往存在一些非显性的解题路径,需要选手突破常规思维才能发现。这类题目…

📰

离网混合储能系统容量优化与粒子群算法应用

1. 离网混合储能系统的现实挑战 在偏远山区、海岛和边防哨所等无电网覆盖区域,离网供电系统是维持基本生产生活的关键基础设施。这类系统通常采用风光互补发电模式,但可再生能源的间歇性和负荷波动给系统稳定性带来巨大挑战。我去年参与的一个海岛微电网…

📰

从词法分析到四元式:小型编译器三段流水线实现与调试

简介:面向编译原理课程设计与实验环节的资料包,适合计算机专业学生、课程设计选题者以及需要补齐词法、语法分析实践的人使用。内容围绕一个小型编译器的完整链路展开,从词法分析器到LL(1)语法分析,再到LR(0)与SLR(1)方法处理简单…

📰

从个人电脑到AI计算节点:硬件演进与本地化AI实践

1. 从个人电脑到AI计算节点的转变 十年前我们很难想象,每天办公娱乐的普通电脑正在悄然演变为人工智能的训练场。如今一块消费级显卡就能跑通Stable Diffusion生成图片,用CPU也能训练简单的机器学习模型。这种转变背后是开源生态的繁荣和算法效率的提升&…

📰

基于深度学习的智能舌象识别系统开发实践

1. 项目背景与核心价值舌头作为人体重要的器官,其颜色、纹理、形状等特征往往能反映整体健康状况。传统中医舌诊需要经验丰富的医师进行人工判断,存在主观性强、效率低下等问题。这个毕业设计项目正是利用深度学习技术,通过Python和PyTorch框…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬