HID学习笔记

news/2025/2/7 7:36:41/文章来源:https://www.cnblogs.com/mydodo/p/18701972

目录
  • 一、HID 基础概念
    • 1. 什么是 HID?
    • 2. HID 报告(HID Report)
    • 3. HID 传输协议
  • 二、HID 报告描述符
    • 1. HID 报告描述符格式


一、HID 基础概念

1. 什么是 HID?

  • HID(Human Interface Device) 是 USB 和 Bluetooth 设备的通用协议,主要用于 键盘、鼠标、游戏手柄、触摸板、遥控器等 人机交互设备。
  • HID 设备通过 HID 报告(HID Report) 与主机通信,主机解析 HID 描述符(HID Descriptor)来理解数据格式。

2. HID 报告(HID Report)

  • HID 输入报告(Input Report) → 设备向主机发送,例如键盘按键、鼠标移动。
  • HID 输出报告(Output Report) → 主机向设备发送,例如键盘指示灯(Num Lock、Caps Lock)。
  • HID 特征报告(Feature Report) → 设备和主机之间的配置数据交换,例如固件升级指令。

3. HID 传输协议

  • USB HID:USB 设备通过 中断传输(Interrupt Transfer) 发送 HID 报告。
  • BLE HID:蓝牙 HID 通过 GATT(Generic Attribute Profile) 传输 HID 报告,HID 数据在 GATT 特性(Characteristics)中进行读写。

二、HID 报告描述符

HID 设备通过 HID Report Descriptor(HID 报告描述符) 告诉主机如何解析数据

1. HID 报告描述符格式

// HID Keyboard Report Descriptor
const uint8_t hid_keyboard_report_desc[] = {0x05, 0x01,   // Usage Page (Generic Desktop Ctrls)0x09, 0x06,   // Usage (Keyboard)0xA1, 0x01,   // Collection (Application)0x85, 0x01,   //   Report ID (1)  <-- 报告 ID0x05, 0x07,   //   Usage Page (Keyboard)0x19, 0xE0,   //   Usage Minimum (Left Control)0x29, 0xE7,   //   Usage Maximum (Right GUI)0x15, 0x00,   //   Logical Minimum (0)0x25, 0x01,   //   Logical Maximum (1)0x75, 0x01,   //   Report Size (1)0x95, 0x08,   //   Report Count (8)0x81, 0x02,   //   Input (Data,Var,Abs)  <-- 8bit 修饰键0x95, 0x01,   //   Report Count (1)0x75, 0x08,   //   Report Size (8)0x81, 0x03,   //   Input (Cnst,Var,Abs)  <-- 1字节保留位0x95, 0x06,   //   Report Count (6)0x75, 0x08,   //   Report Size (8)0x15, 0x00,   //   Logical Minimum (0)0x25, 0x65,   //   Logical Maximum (101)0x05, 0x07,   //   Usage Page (Keyboard)0x19, 0x00,   //   Usage Minimum (0)0x29, 0x65,   //   Usage Maximum (101)0x81, 0x00,   //   Input (Data,Ary,Abs)  <-- 6字节按键值0xC0          // End Collection
};

hid1_11规范(官方文档)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/879915.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BOM最全基础信息:标准件、通用件、替换件、必选件

在生产制造领域,物料清单(BOM)是产品设计、生产计划和供应链管理的核心基础。本文系统梳理了BOM中各类零部件的分类方法,供大家参考。在生产制造的复杂领域中,我们会与各式各样的产品组成部分打交道。清晰、准确地对它们进行分类,并实施有效的管理,对于提升生产效率、保…

人工智能辅助芯片设计

芯片设计:一个近乎无限的问题空间 设计复杂性呈指数级增长 设计复杂性的含义 一连串棘手的问题 贯穿整个流程优化 HDL生成研究 使用GCN加速设计评估 人工智能辅助验证 参考文献链接https://www.hc2024.hotchips.org/assets/program/tutorials/3-HC24.synopsys.SteliosDiaman…

应用随机过程 | 期末 cheat sheet

出分后发布笔记……这篇博客汇总了「应用随机过程」2018 - 2022 的期末试题,并根据题型分类总结。 本站相关博客:应用随机过程 | 期末知识点总结特别鸣谢:知乎 | 九一居士 |《应用随机过程》课程笔记系列目录1 马尔可夫链计算题2 常返的马尔可夫链3 连续时间参数的马尔可夫链…

推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》4本书,非常感谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

OpenVX基本原理与历史

OpenVX基本原理 2.1 引言 2.1.1 摘要 OpenVX 是一个低级编程框架域,用于支持软件开发人员,可高效访问计算机视觉硬件加速功能和性能的可移植性。OpenVX 旨在支持现代硬件架构,例如,移动和嵌入式 SoC 以及桌面系统。其中许多系统是并行和异构的:多个处理器类型包括多核 CPU…

L4D2自制角色Mod - HUI篇

如何以相对简易的思路自制求生之路2求生者头像Mod本文是笔者尝试制作 求生之路2 角色 Mod 的过程中编写的笔记,笔者的背景是有基础的计算机知识和图像处理软件的使用经验,相信大多数读者朋友都有同样的水平。本文面向希望能快速简单地自定义游戏内角色图像/模型,但对更深层次…

使用Netty与前端请求进行交互实现实时通讯

引言因为不满足与一般的SpringBoot CRUD开发(太无聊了)所以去学一下网络编程,第一站就是通过B站老罗的EasyChat项目了解到了Netty这个网络框架,在学习这个项目之前也是去学习了一下Netty框架的使用以及相关的原理知识所以是有一定了解的,但是只是一味的学习不去实践总感觉是空中…

如何使用 Filebeat 8 连接 Easysearch

在日志场景,还是有很多小伙伴在使用 Filebeat 采集日志的。今天我来实战下使用 Filebeat 8 连接 Easysearch 。本次使用 Easysearch-1.9.0 版本和 Filebeat-8.17.0 版本做演示,也适用 Filebeat-oss-8.17.0 版本。 Easysearch 不开启兼容参数的情况 Easysearch 默认情况下未开…

25.2.7小记

异常捕捉 try{} catch{} import java.util.Scanner;public class ArrayIndex {public static void main(String[] args) {int [] a =new int[10];int idx;Scanner in = new Scanner(System.in);idx = in.nextInt();try{a[idx] = 10;System.out.println("hello");}cat…

《笨办法学Python3》PDF、EPUB免费下载

本书是一本Python入门书,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用。这本书以习题的方式引导读者一步一步学习编程,从简单的打印一直讲到完整项目的实现,让初学者从基础的编程技术入手,最终体验到软件开发的基本过程。本书是基于Python 3.6版本编…

RocketMQ实战—5.消息重复+乱序+延迟的处理

大纲 1.根据RocketMQ原理分析为什么会重复发优惠券 2.引入幂等性机制来保证数据不会重复 3.如何用死信队列处理优惠券系统数据库宕机 4.基于RocketMQ的订单库同步为什么会消息乱序 5.如何解决RocketMQ的消息乱序问题 6.RocketMQ的顺序消息机制的代码实现 7.基于RocketMQ的数据过…