首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

HID报告描述符中的ReportID

HID(Human Interface Device)报告描述符是USB设备描述符的一种,用于定义人机接口设备(如键盘、鼠标、游戏手柄等)与主机之间的通信方式和数据格式。Report Descriptor包含了设备的所有输入、输出和特征报告的详细信息。

基础概念

  • Report ID:报告ID是一个字节值,用于区分不同的报告。每个报告可以有一个唯一的Report ID,这样主机就可以请求特定的报告。
  • 描述符:描述符是USB设备用来向主机描述自身特性和功能的数据结构。

相关优势

  • 灵活性:通过不同的Report ID,设备可以发送多种类型的报告,增加了设备的功能性和灵活性。
  • 效率:主机可以精确地请求所需的数据报告,减少了不必要的数据传输,提高了通信效率。

类型

  • 输入报告:包含设备状态变化的信息,如按键被按下。
  • 输出报告:包含主机发送到设备的控制命令,如LED灯的控制。
  • 特征报告:包含设备的配置信息,如可用的按键数量。

应用场景

  • 多键无冲键盘:通过不同的Report ID区分不同的按键组合,实现多键同时按下而不冲突。
  • 多功能游戏手柄:通过Report ID区分不同的输入模式,如模拟摇杆和方向键。

可能遇到的问题及解决方法

问题:设备报告的数据不正确或不完整

  • 原因:可能是Report Descriptor配置错误,或者硬件故障。
  • 解决方法
    • 检查Report Descriptor的定义,确保所有必需的报告项都已正确配置。
    • 使用USB分析工具检查设备与主机之间的通信数据,确认数据传输是否正确。
    • 检查硬件连接和状态,确保没有物理损坏。

问题:设备无法识别Report ID

  • 原因:可能是Report ID未正确设置,或者主机不支持该Report ID。
  • 解决方法
    • 确保在Report Descriptor中正确设置了Report ID。
    • 检查主机端的驱动程序,确保它支持设备使用的Report ID。

示例代码

以下是一个简单的HID报告描述符示例,定义了一个具有两个按键的键盘设备:

代码语言:txt
复制
const unsigned char hid_report_descriptor[] = {
    0x05, 0x01,       // USAGE_PAGE (Generic Desktop)
    0x09, 0x06,       // USAGE (Keyboard)
    0xa1, 0x01,       // COLLECTION (Application)
    0x05, 0x07,       // USAGE_PAGE (Keyboard)
    0x19, 0xe0,       // USAGE_MINIMUM (Keyboard LeftControl)
    0x29, 0xe7,       // USAGE_MAXIMUM (Keyboard Right GUI)
    0x15, 0x00,       // LOGICAL_MINIMUM (0)
    0x25, 0x01,       // LOGICAL_MAXIMUM (1)
    0x75, 0x01,       // REPORT_SIZE (1)
    0x95, 0x02,       // REPORT_COUNT (2)
    0x81, 0x02,       // INPUT (Data,Var,Abs)
    0x95, 0x01,       // REPORT_COUNT (1)
    0x75, 0x08,       // REPORT_SIZE (8)
    0x81, 0x03,       // INPUT (Cnst,Var,Abs)
    0xc0                // END_COLLECTION
};

参考链接

通过以上信息,您可以更好地理解HID报告描述符中的Report ID及其相关概念和应用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

USB初学(一)---USB-HID初步认识【转】

为厂商自定义类型,0x00不是在设备描述符定义,如HID BYTE bDeviceSubClass; //usb分配子类代码,同上,值由USB规定和分配HID设备此值为0 BYTE...从框图中,可以看出除了USB标准定义一些描述符外,HID设备还必须定义HID描述符。另外设备和主机通信是通过报告形式来实现,所以还必须定义报告描述符;而物理描述符不是必需。...接口描述符bInterfaceClass值必须为0x03,bInterfaceSubClass值为0或1,为1表示HID设备符是一个启动设备(Boot Device,一般对PC机而言才有意义,意思是...HID描述符 0x22:报告描述符 0x23:物理描述符 7 wDescriptorLength 2 数字 报告描述符总长度 9 bDescriptorType 1 常量用于识别描述符类型常量,使用在有一个以上描述符设备...和00100001有效 1 bRequest 1 HID类请求(参考下表) 2 wValue 2 高字节说明描述符类型 0x21:HID描述符 0x22:报告描述符 0x23:物理描述符 低字节为非

12.1K50

键帽高度尺寸图及USB协议HID设备描述符和键值表

一图顶所有,有需要直接看图吧。 意外收到了一名网友打赏,能否留个言。互动一下?...键帽规格 HID设备描述符 按键值 HID Usage ID table 文字速查: Key HID Usage HID Usage ID Key HID Usage HID...表示 X 坐标的变化量超出-256 ~ 255范围,0表示没有溢出 |--bit5: Y 坐标变化符号位,1表示负数,即鼠标向下移动 |--bit4: X 坐标变化符号位,1表示负数,即鼠标向左移动...用补码表示变化量 BYTE3 -- Y坐标变化量,与bytebit5组成9位符号数,负数表示向下移,正数表上移。用补码表示变化量 BYTE4 -- 滚轮变化。...由于手上没有USB鼠标,对BYTE14-7位没有测试,对于BYTE2 BYTE3做个测试,BYTE14-7全为0时候,BYTE2 BYTE3正负表示鼠标移动方向 键盘发送给PC数据每次8个字节

1.9K30
  • 基于STM32CUBEUSB键盘例程.docx

    再接着是报告描述符长度: ? 之前是:HID_MOUSE_REPORT_DESC_SIZE,长度是74,现在改成: HID_KEYBOARD_REPORT_DESC_SIZE,长度63...., /*bInterval: Polling Interval */ 3 修改HID描述符 修改HID描述符报告描述符长度: ?...上面提到了,之前是鼠标描述符,长度74,现在改成键盘描述符,长度63. 4 生成键盘报告描述符 把USB鼠标的报告描述符删掉,换成USB键盘报告描述符。...不会写USB键盘报告描述符怎么办? USB官方提供了一个USB报告描述符自动配置工具,打开!里面有各种例程,我们直接复制一个USB键盘报告描述符即可。 ?...获取报告描述符部分,之前这里是鼠标的报告描述符信息,现在换成了键盘

    71930

    基于STM32CUBEUSB鼠标键盘二合一

    第二,修改usbd_hid.c配置集合(USBD_HID_CfgFSDesc)。如下图所示,框住地方是个宏定义。配置集合长度,由之前34,变为41. ? 端点个数,由1变成2...., /*bInterval: Polling Interval */ 第三,修改HID描述符报告描述符长度: ?...现在我们要实现是键盘与鼠标二合一,要修改核心位置就是报告描述符这里。 简单来说,就是把前面两个例程报告描述符合二为一。一个数组里面,上面放键盘报告描述符,下面放鼠标的报告描述符。...方法就是分别在键盘与鼠标的报告描述符中放一个报告ID,键盘报告ID是1,鼠标的报告ID是2. 两个报告描述符,一个长65,一个长62,加起来117....现在我们只需要一个数组,它同一时间,只发送一种数据,所以大小为8,然后,还要包含报告ID,所以变成9. 在USB协议报告ID默认是数组第一个元素。

    2.3K41

    如何定制自己HID调试助手

    但是对于一个产品来说,如果有一个定制版调试助手,那么对于我们开发就提供了更加美好便利,以及节省很多时间。 这篇文章介绍如何使用C#开发一款定制化HID工具。...首先一定是UI设计,HID工具最重要两个东东就是VendorID和ProductID。在HIDdevice information这一栏中出了那两个东东,其他都是跟产品有关。...对象申请:申请HID对象,并将接收事件委托指定事件委托类型。 打开设备:其中VendorID和ProductID就是UI上VendorID和ProductID。...关闭设备:通过调用CloseDevice()函数关闭设备 接收数据:在第一步,我们注册了接收数据事件委托,接收数据函数名就是注册函数名。...发送数据:发送数据通过Write(),其中需要申请Report对象,第一个参数为ReportID,第二个参数为ReportBuff。 最后美化了一下UI,最后调试一下,功能都正常使用。

    1.9K10

    原创 Paper | USB设备开发:从入门到实践指南(一)

    ,在配置描述符响应包里,除了配置描述符信息,还包含了接口描述符,端点描述符,并且因为USB键盘注册是一个USB HID设备,所以在配置描述符还包含着HID描述符,如图14所示: 图14:Wireshark...2.1.6 HID报告描述符 当USB主机通过接口描述符得知USB设备是USB HID设备时,将会再获取HID报告描述符,在USBPcap捕获到HID报告描述符如图21所示: 图21:Wireshark...查看HID报告描述符 定义HID报告描述符代码在bash脚本如下所示: # Write the report descriptor # Source: https://www.kernel.org/...HID报告描述符来源于Linux内核示例,如图22所示: 图22:Linux USB HID gadget 驱动文档 所以下一步我们需要能顺利阅读HID报告描述符,可以参考官方文档,官方文档优点是内容齐全...通过修改接口描述符字段和HID报告描述符字段,来模拟一个鼠标。 研究一下手柄,讲道理手柄也是使用HID协议,但是Linux代码里没看到相关定义。 研究非HID协议,比如U盘,网卡,打印机这些。

    1.5K00

    安卓蓝牙键盘鼠标映射_蓝牙鼠标模拟器

    通过它将我们应用注册成具有HID特征蓝牙设备,并传送HID设备报告描述符。如果我们报告描述符没有问题,那么我们设备就会成功模拟想要HID设备。...在实现HID媒体播放过程中发现,安卓对报告描述符兼容性非常好,只要看上去正确描述符运行起来基本没有问题,而win10就没有那么好兼容性了,从理论上分析正确描述符不一定能在win10下工作。...经过了不知多少次尝试后终于能够编写出兼容win10描述符。还有,既然能兼容安卓,那么智能电视媒体控制自然是不在话下。...2020.11.15编辑 就在实现了媒体控制功能后,偶然在微软网站上看到了显示器亮度调节相关HID描述符,果断决定试试。...纠结半天将媒体控制停止功能去掉,因为播放/暂停可以实现类似的功能。看到这里你也许会问,报告描述符一个Main Item不能超过8个Control?

    5.6K20

    C#进阶——记一次USB HID各种坑(x86,x64,win10,win7)

    private bool IsRead = true; //允许读取标志 int outputReportLength;//输出报告长度,包刮一个字节报告ID public...,包刮一个字节报告ID public int InputReportLength { get { return inputReportLength; } } private...summary> /// 异步读取结束,发出有数据到达事件 /// /// 这里是输入报告数组...我在x86下,调用“SetupDiGetClassDevs”获取设备信息集句柄时返回地址大概是9位数左右,而在x64,返回地址大概是13位数。...五、学不完新知识,调不完BUG 虽然解决了几个HID坑,目前来说是没有多大问题,但是并不能保证以后没有新需求新bug出现,革命尚未完成,同志仍需努力!

    2.3K30

    使用stm32cubeMX生成模板,配置stm32f103c8t6键鼠一体化

    选择Crystal/ceramic Resonator SYSDebug选择serial wire USB勾选Device(FS) USB_DEVICEClass选择HID 设备描述符修改vid和...pid值(避免和连接到电脑上其他usb设备冲突而引起错误) GPIOpa1配置成Pull-down(按键接3.3v和pa1间,若配置成Pull-up,则按键接gnd和pa1间) clock Configuration...修改USBD_HID_CfgFSDesc(HID设备全速配置描述符) *USB_HID_CONFIG_DESC_SIZ 大小改为41U image.png *Descriptor of Joystick...Mouse interface 端点数量改为0x02,接口协议改为0x01 image.png *配置描述符末尾新增输出端点描述符 image.png 3....修改报告描述符HID_MOUSE_ReportDesc *替换报告描述符内容为 //将整个报告描述符复制替换过去, 其中键盘REPORT_ID是1,鼠标REPORT_ID是2 0x05, 0x01

    1.1K60

    基于STM32CubeMXUSB鼠标例程

    最近在玩STM32CUBEUSB功能,用起来还是挺方便。只要配置一下,设备描述符、配置描述符、接口描述符什么,都能给你自动生成,其中还包括比较复杂报告描述符。...USB设备回答:… 6、两次回答一样,说明USB设备地址分配成功。USB主机继续提问,获取其它描述符。 7、USB设备,在向主机回复配置集合时候,表明自己身份:你好,我是个鼠标!...也就是说,在配置集合,有信息说明这个设备是鼠标,我们看下。在usb_hid.c文件,有一个数组:USBD_HID_CfgFSDesc,其中一行: ? 单是这个还不够,还要结合报告描述符。...无论是配置集合,还是报告描述符,这里都不做解释,因为一两篇文章根本说不完。这里只说一点,由于报告描述符规定,鼠标设备向电脑发送数据时候,一般是发送4个字节数据。...所以,我在上面的代码循环将第一个字节值设为0和1,就能看到屏幕上光标每隔一秒,触发一下鼠标左键。 细心的人,这时候会发现一个问题。有符号、无符号问题。

    1.6K20

    Linux驱动开发: USB驱动开发

    在 USB 协议HID 设备定义放置在接口描述符, USB 设备描述符和配置描述符不包含 HID 设备信息。...除此之外, HID 设备还有三种特殊描述符HID 描述符报告描述符、物理描述符。一个 USB 设备只能支持一个 HID 描述符,但可以支持多个报告描述符,而物理描述符则可以有也可以没有。...3.2 HID 描述符 HID 描述符用于识别 HID 设备中所包含额外描述符,例如报告描述符或物理描述符等。...他设备描述符数量。由于 HID 设备至少需要包括一个报告描述符,故其值至小为 0x01。 bDescriptorType: HID 描述符附属类别描述符长度。...3.3 报告描述符 HID 设备报告描述符是一种数据报表,主要用于定义 HID 设备和 USB 主机之间数据交换格式, HID 设备报告描述符类型值为 0x22。

    69.7K20

    DIY一个专属HID注入设备吧

    起初BadUSB设备是通过更改U盘控制器固件实现,支持设备型号较少。...于是RUBBER DUCKY(橡皮鸭)从原始批操作设备逐步发展为一个成熟HID攻击平台,并拥有完善攻击脚本、可靠硬件支持和活跃技术论坛。...电脑主机是通过设备描述符识别USB设备类型,并在规定端点建立与设备通信关系,因此要做第一步是要配置好设备描述符。...参考STM32F10X USB设备开发套件(STM32_USB-FS-Device_Lib_V4.0.0)JoyStickMouse例程,按照lsj9383[1]思路对配置描述符报告描述符进行修改...由于BadUSB要求很高攻击代码注入速度,故而可通过状态机用DMA加速传输。为了解决字符输入过快导致错误和遗漏问题,需要要配置描述符bInterval调到一个很低值以缩短主机响应时间。

    1.4K00

    Flowportal.Net BPM帮我轻松搞定单次出差+多出差报表子表单设计

    首先要感谢3个人,第1个是宁波许先生(QQ昵称:木木),他是FlowPortal应用高手,电话指导我如何通过子流程方式满足客户需求,不失是一个绝妙解决方案。...言归正传,我需求如下: 1、出差申请是一个流程,在流程“总经理审批”后有一个“提交出差报告步骤 2、用户可以添加多个出差报告,但要求按照标准报告格式填写 3、出差报告详细信息需要保存到数据库表...以下就是使用FlowPortal.Net BPM实现单次出差+多出差报告主表单和子表单要领。...1、需要创建明细表,然后绑定到主表单Grid动态表 2、明细表额外创建一个字段(如ReportId)记录出差报告主键Id 3、按照正常流程创建Form Service、子表单,关联出差报告表到创建...Form Service和子表单 4、需要在Grid动态行里添加子表单链接,关联到上一步创建Form Service,同时把子表单绑定到明细表ReportId 5、发起一下流程,就可以测试通过了

    99120

    python学习笔记6.5-类描述符使用

    之后,底层实例字典会根据需要适当进行调整。 要使用一个描述符,首先要创建一个描述符类,然后把描述符实例放在类定义作为类变量来使用。...要执行所请求操作,底层实例字典(即dict属性)会根据需要进行适当调整。描述符self.name属性会保存字典键值,通过这些键可以找到储存在实例字典实例数据。...如果以类变量形式访问描述符,参数instance应该设为None。 这种情况下,标准做法就是简单返回描述符实例本身。...描述符常常作为一个组件出现在大型编程框架,其中还会涉及装饰器或者元类。正因为如此,对于描述符使用可能隐藏很深,几乎看不到痕迹。...:如果只想访问某个特定一种属性,并且做一些自定义处理,那么最好不要编写描述符来实现。

    63490

    浅谈总线通信机制----USB学习指南与总结

    (2)电源态(供电态) 就是给设备供电,分为设备接入时默认供电值,配置阶段后供电值(按数据要求最大值,可通过编程设置),在配置描述符可以配置最大电流。...来看一张我画图,再怎么觉得难东西,也许你看完这张图以后,也就知道自己该怎么去学习了,这张图是我使用USB逻辑分析勾出来图,然后加上自己学习总结,这就是一个USB传输过程,相信你已经明白了USB...传输、事务、包、域之间关系了吧?...而主机要获取设备相关信息就必须要发起请求,请求主要有:USB标准请求(有一定格式组成)、HID类请求等。 ? ? ?...说到描述符,USB有标准描述符,分别是:设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符 (可选),每个设备都必须要支持标准描述符,还有HID描述符报告描述符,物理描述符等。 ? ?

    1.2K20

    几个小例子给你讲解Python描述符

    描述符是Python 语言独有的特性,它不仅在应用层使用,在语言基础设施也有涉及。...我可以大胆地猜测,你对于描述符了解是始于诸如 Django ORM 和 SQLAlchemy 字段对象,是的,它们都是描述符。你认识,可能也止步于此,如果你没有去深究,它为何要如此设计?...我建议你去了解一下 Python 描述符。 经过主管指点,你知道了「描述符」这个东西。怀着一颗敬畏之心,你去搜索了下关于描述符用法。 其实也很简单,一个实现了 描述符协议 类就是一个描述符。...它返回属性值,若属性不存在、不合法等都可以抛出对应异常。 __set__:将在属性分配操作调用。不会返回任何内容。 __delete__:控制删除操作。不会返回内容。...以上,我举了下具体实例,从最原始编码风格到 Property ,最后引出描述符。由浅入深,一步一步带你感受到描述符优雅之处。

    78420

    tomcat宕机无法响应问题研究解决

    本人于两年前接手,在对该系统进行开发运维过程,先后解决了两种tomcat宕机无法提供服务情况,具体如下: (1)JVM 内存不足 主Tomcat运行过程出现宕机无法响应现象,刚开始无法定位问题时只能在挂死出现时采用手工重启方式解决...就是某模块java代码在开发环境下运行正常,但是编译并发布到正式系统上,只要执行报告审核操作,系统随机马上挂死,无法响应,端口telnet不通。...不扯了,解决过程如下: 1)本地再次编译该模块代码并部署,启动tomcat,开启jconsole对tomcat进行监控; 2)执行该模块报告批准操作,tomcat随即处于挂死状态,报告审核没有这个问题...method=updateReport&reportId=” + reportId; URL myUrl = null; try { myUrl = new URL(url); } catch (MalformedURLException...,当报告状态为7时候调用了这个method,不停向系统发出http请求,当请求数上到2千左右,tomcat拒绝了响应,tomcat挂死。

    1.2K30

    硬件笔记(8)----USB学习笔记5

    该值报告了本配置字节总数以及一个配置所需接口和端点描述符。 bNumInterfaces 则定义了在该指定配置接口总数。最小为 1 个接口。...10.7 其他杂项描述符类型 报告描述符:某个 USB 类设备可能需要一组扩展式描述符信息。开发者必须保证 USB 设备所需要任意额外描述符信息都包含在描述符文件里。...例如,对于 HID 类设备,开发者必须将报告描述符添加到描述符文件内,用于定义其他设备属性。如果需要额外描述符,可以在类定义规范或其他类支持文档查找相关描述符格式。...更多有关报告描述符信息,请参考 AN57473 — PSoC®3 和 PSoC 5LP USB HID 初级应用笔记以及 AN58726 — PSoC®3 和 PSoC 5LP USB HID...支持 LPM 特性所有 USB 2.0 设备都需要使用 USB 2.0 扩展描述符报告其 LPM 能力。USB 2.0 扩展描述符是BOS 描述符一部分。

    1.7K20

    基于KT6368A蓝牙芯片开发智能抖音翻页翻页笔总结

    一、功能简介KT6368A蓝牙芯片也是基于 HID 开发,主要用于浏览当下火爆抖音等小视频上下翻页、左右菜单切换、暂停等操作。打开手机蓝牙进行连接,进入视频浏览界面操作对应按键即可。...程序部分理解记录在 系 统 进 行 初 始 化 过 程 , 根 据 以 下 信 息 进 行 APP 注 册 。...,如下是按键动作处理:当 APP 注册运行后,有按键事件发生时,会进行对应数据发送,由于是 HID 设备,所以数据发送形式从对应 HID 设备描述符产生。...用户如需要对设备进行功能自定义,可以结合 HID 官方文档对下述描述符进行修改。暂停按键对应 HID 设备发送数据包,通过下图 hid_data_send_pt()进行数据传输。1....KEY_DELAY_TIME();7. }8. }由描述符可知,设备一共有 5 个输入实体 Input,一共组成 7byte 数据,所以对应暂停按键数据包由 7byte 数据组成

    30620
    领券