HID开发笔记
+ -

HID复合设备部分接口设备无数据响应问题

2022-01-19 117 0

群里有位同学使用USB的多接口功能实现了一个复合设备,即使用了多个接口描述符,每个接口描述符下一组端点,用于数据传输,当然每组下也有一组HID描述符和其对应的HID报告描述符
关于HID复合设备接口描述符与其接口描述符的对应关系可见:http://www.usbzh.com/article/detail-381.html

HID报告描述符的获取是通过0x22单独的USB标准请求GET_DESCRIPTOR获取的。当然这个长度应该和HID描述符中指定的长度一致。

当系统获取到报告描述符之后,会解析报告描述符,然后使用中断请求来获取对应的数据,所以固件返回的数据应按报告描述符的格式长度来进行返回。

问题1:
我有一个设备 定义了三个接口描述符,三个接口都是hid,一个键盘接口一个自定义hid 一个鼠标接口,在定义三个接口下面的hid报告描述符的时候,鼠标报告描述符里面定义了一个ReportID, 现在只有鼠标不能使用,请问一下其他的两个hid报告描述符也需要定义ReportID么?

首先每个接口都有一个报告描述符的
其次如果每个接口都只有一个报告描述符而且没有定义多个报告,那应该是不需要的

问题2:
现在是我的鼠标无法正常工作,其他两个接口设备都没有问题。这说明那俩设备没问题,是一个设备 三个接口, 两个接口工作没有问题

分析:

  • 好好看看鼠标的配置,报告reportid也要占一个字节
  • 看的报告描述符正确不,通过抓包看一下接口是否返回对应的报告描述符

    告描述符 应该是正确的, 我是从一个正常的设备里面抓包出来的

  • 描述符通过HIDReportParser分析一下,对应规则可以通地bushound抓包看一下,这些工具都在QQ群文件里有

  • 那就看报告描述符长度和HID描述符中的长度是否一致,还有枚举是否一致

busHound抓包长度长度是计算的 这个是对的

枚举是否一致 是指什么

  • 用busHound抓包
  • 通过抓包分析
  • BUSHOUND表现实际的通讯数据
  • 码有时比如一个索引忽略了,有时看不出来的。通过抓包看比较好排查
    busHound抓包
  • 如果理论还是有点问题,可以看一下圈圈的书,他有一章是专门介绍接口复合设备的
    报告描述符
    IN抓包

问题所在:
数据没有传输够,最大的传输数据 应该限制在了127个,我的报告符是150个字节

  • 返回0长度至少说明固件没有给数据,通读是正常的
  • 看下固件传输的问题
  • 少可以先用测试数据试
  • 什么设备是什么数据,即流程是对的

问题解决了

  • 我上发数据的时候 有个位置限制了发送的总长度为127
  • 导致 发送数据始终有问题
  • 不能超过127个字节
  • 限制了 控制传输过程中,最大字节数位127
  • 消了限制 就没有问题了
    限制的的长度

0 篇笔记 写笔记

USB复合HID设备报告描述符的区分
在USB规范中,设备的功能是通过接口来承载的,在USB规格书中就是接口描述符。对于一般的设备,一般一个接口就是一个功能,这个功能可以是鼠标,键盘或其它设备类型。当然这个只是对USB简易设备而言的,对于一些USB复杂设备如UVC摄像头,UAC音频等是多接口相互配合来实现其功能的,为了整合这么多接口使......
HID描述符
HID描述符的主要作用是用来识别HID通信所使用的额外描述符。下表是HID描述符结构。偏移量字段字节数数值类型说明0bLength1Numeric描述符字节数1bDescriptorType1Constant0x21 = HID描述符2bcdH......
HID报告描述符详解
HID的报告描述符和其它描述符不一样,不是具有固定的数据结构,而是由固件开发商根据上报的数据自行组装的。这个组装的原材料是HID规范定义的ITEM。所以说HID报告描述符就像搭积木一样,其最终的数据结构和设计图纸是什么,都是由固件开发商决定的,但是其最终的产品又是由HID规范提供的各个标准积木模块搭......
USB键盘报告描述符数据格式分析
USB键盘的HID报表描述符的内容参见下表。数据的输入端点为中断方式,当有键盘敲击事件时,会上报数据长度为8字节的数据报告。0x05,0x01,// Global Generic Desktop0x09,0x06,// Local KeyBoard 0xA1,0x01,// Main app col......
USB鼠标HID报告描述符数据格式分析
注意:这里的鼠标为普通鼠标报告描述符的信息解释,其并不适用于全鼠标报表描述符。一个示例如下:0x05,0x01, // Global Generic Desktop0x09,0x02, // Local Mouse0xa1,0x01, // Main app collection0x09,......
USB中文网出品-HID报告描述符分析工具
HidReportParser.exe工具已经网页化,可访问http://www.usbzh.com/tool/usb.html 在线分析USB-HID报告描述符USB HID规范中有一个很重要的概念,就是HID的报告描述符。本人搞了这么久的HID设备开发,其中一项最头疼的是HID报告描述符的......
HID 报表描述符/报告描述符
报表描述符用于描述USB HID设备与主机之间数据交互的格式。根据数据的传输方向,分为输入报告和输出报告。输入报告是USB设备发送数据给主机的。大部分的USB HID设备主要实现的是输入报告。如我们平常使用的USB鼠标,就是通过我们点击鼠标按键或滑动鼠标流轮实现给主机上报鼠标的报告信息。输出报告......
HID报告描述符协议
HID报告描述符通过报告描述符的条目定义了HID报告数据的格式。对于大部分的HID设备来说,数据的传输方向都是输入的,即使用输入端点数据从设备端到主机端,并且使用的是中断的方式。当然HID设备不仅仅为数据的输入,有时也需要数据的输出。这时就需要一个输出中断端点来实现。报告描述符包含了属于特定Rep......
USB官网HID报告描述符生成工具
USB规范官网提供了一个HID报告描述符生成工具,https://www.usb.org/document-library/hid-descriptor-tool 使用我们此工具,我们可以:创建、编辑和验证HID报告描述符。输出多种输出(.txt、.inc、.h等)查看一些标准的设备报告描述符......
VS2019分析HID报告描述符解析源代码
常有人问,有没有HID解析的工具,好像除了usb官网提供的dt.exe,没有其它的好的东东了。Linux下有相关的工具,在本站的社区里:http://www.usbzh.com/zone/detail-12.html 可以查看做HID开发,其实最麻烦的就是HID报表描述符了。这里本人移植了Reac......
USB复合设备-UVC摄像头HID设备共存的设计实现
通常做USB设备的开发,我们做的都是单一的功能设备。这种单一的功能设备只实现某种特定的功能,如只实现一个HID鼠标或键盘,只实现一个USB存储功能,或再复杂一点只实现一个UVC音频麦克风和扬声器功能或一个UVC摄像头功能。但我们在一般的市场上看到的设备通常不只实现一种功能,如UVC摄像头功能还提供......
HID复合设备(键盘、鼠标)的实现
在使用一些USB键盘或鼠标的时候,特别是一些电竟高档HID设备时,经常发现这些设备会额外定义一些特别的快捷键,使得这些设备不仅有基础设备(如键盘,鼠标)的功能,也有一些特别的快捷功能(如系统声音的放大放小)。甚至更有一些复杂的设备,只需要一个USB接口,就同时支持鼠标键盘功能或在键盘的额外区域支持触......
HID设备的实现原理-HID描述符
USB设备的信息存储在USB设备的固件中,当USB设备接入PC机启动后,主机会通过USB的标准请求对存储在USB设备的固件信息进行读取分析。这些存储的信息主要包括各种USB描述符信息,如设备描述符,配置描述符,接口描述符、端点描述符和字符串描述符等。USB设备的功能按接口来进行分类的,一个接口就代......
HID报告描述符Report Descriptor解析分析
HID独有的报告描述符也叫报表描述符对于初学者来说比较复杂,但是如果真正理解了它,我们又不得不惊吧于设计者的巧妙设计。HID报告描述符是由一系列的条目(item)组成的,一个item一般是又包括头部信息(bTag,bType,bSize)和数据内容。所以说item在HID的报告描述符中是最小的信息单......
HID报告描述符Usage
Usage是HID报告描述符的一部分,用于应用开发人员提供有关控制测量内容的信息。Usage标签指示了设备供应商对其设备的控制或者设备控制组的特定用途建议。例如虽然报告描述符中定义了数据格式(例如,三个 8 位字段),但使用Usages定义了应对数据执行的操作含义,例如 x、y 和 z 输入。 此功......
作者信息
USB中文网
B站搜索 站长漫谈 看视频。
pnpon内核开网,USB中文网,
busrom硬核技术网站长
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!