在该文中所使用的范例即为整合鼠标的键盘装置,只是仅列出一个接口描述符(即编号为0x00 的键盘接口),另一个编号为0x01 的鼠标接口在该文中没有列出,读者可以自行参考本文所附的描述符程序代码descriptor.asm(即在标记为 interface_descriptor01,hid_descriptor01,和endpoint_descriptor01 处)。 表8:范例的输入报告...
而报告描述符,是描述一个报告以及报告里面的数据是用来干什么的.通过它,USB Host可以解析出报告里面的数据所表示的含义.它通过控制输入断点0返回,Host使用获取报告描述符命令来获取报告描述符,注意这个请求是发送到Interface,而不是设备.一个报告描述符可以描述多个报告,不同的报告通过Report ID来区分,Reort ID在报告...
(2)HID通信速度受HID端点(一般linux系统是dev/hidg0)最大包长影响,包长一般有1024,512,256等,表示的含义就是一个包里面的数据大小 (3)端点FIFO大小也会影响速度 (4)hid interval影响。这个就是上面描述的通信过程中发包的时间间隔,一般是在kernel/driver/usb/gadaget/fhid.c里定义,interval越小,通信速度越快...
再接下来处理设备的描述符和interface相关的信息,最后调用了函数HidMdd_Attach()将report descriptor信息传递给MDD层。 MDD层的HidMdd_Attach()函数这里就不仔细研究,只关注这里调用了一个函数LoadHidClients(),该函数也位于MDD层的Hidmdd.cpp文件中。接下来会用到另一部分关于HID设备的注册表信息,如下: [HKEY_LOCAL...
HID设备要被主机识别,就要提供足够多的信息给主机。而HID设 备本身不会主动发消息给主机。HID设备插入后,依靠的是主机 使用控制传输来从设备获取信息。 Descriptor就是描述符,是一个存储在USB设备的固件中的数据 结构,用于描述该设备的属性,主机就是通过使用控制传输来 要求设备提供这些信息的。让主机知道设备...
原因:可能是Report ID未正确设置,或者主机不支持该Report ID。 解决方法: 确保在Report Descriptor中正确设置了Report ID。 检查主机端的驱动程序,确保它支持设备使用的Report ID。 示例代码 以下是一个简单的HID报告描述符示例,定义了一个具有两个按键的键盘设备: ...
HID描述符是HID类特有的描述符,保证设备正确识别,遵循规定的格式。 偏移量 域 大小/字节 说明 0 bLength 1 该描述符的长度(0x09字节) 1 bDescriptorType 1 描述符类型(0x21 HID描述符) 2 bcdHID 2 HID规范版本 4 bCountryCode 1 国家代码 5
USB设备数据的读写操作由总线驱动现在,我们可以直接使用总线读取到的数据,然后解析这些数据的含义、再进行相关的操作就可以了(这里需要注意的一点是USB总线驱动只提供USB设备的读写操作函数,这函数是通用的,即里面的数据的含义总线驱动并不知道)。 USB设备驱动的框架图下,具体的代码可以参考内核中的/drivers/hid/usb...
2. USB HID通讯 2.1 下位机实现 使用USB HID设备的一个好处就是操作系统自带了HID类的驱动程序,而用户无需去开发驱动程序,只要使用API系统调用即可完成通信。 HID具体实现略,具体可以可以自行搜索或者参考PIBOT Firmware代码,下面讲下如何替换串口通讯的部分逻辑。