首页
学习
活动
专区
工具
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及其相关概念和应用。

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

相关·内容

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

    如前面所述,当某个设备被连接到 USB 主机上,该设备会向主机提供其功能和电源要求。通常,设备会通过一个描述符表格(其固件的一部分)来提供这些信息。描述符表格是数据的结构化序列,描述了设备信息;这些值由开发人员定义。所有描述符表格都具有一个标准信息,用于介绍设备属性和电源要求。如果某个设计满足指定 USB 设备类别的要求,则该 USB 设备必须具备的其他描述符信息都将包含在设备描述符结构中。附录 A 包含一个 PSoC USB 的全功能设备描述符的示例。如果您正在阅读或创建您自己的描述符,那么请注意,传输数据字段时,优先传输最低有效位。许多参数的长度均为 2个字节。请确保先发送低字节,然后再发送高字节。

    02

    硬件笔记(6)----USB学习笔记3

    根据 USB 规范,设备端点是 USB 设备中一个独特的可寻址部分,它作为主机和设备间通信流的信息源或库。USB 枚举和配置一节介绍了设备向默认地址做出响应的步骤。枚举过程中,该事件在主机读取端点描述符等其他描述符信息之前发生。在该过程中,需要使用一套专用的端点用于与设备进行通信。这些专用的端点(统称为控制端点或端点 0)被定义为端点 0 IN 和端点 0 OUT。虽然端点 0 IN 和端点 0 OUT 是两个不同的端点,但对开发者来说,它们的构建和运行方式是一样的。每一个 USB 设备都需要支持端点 0。因此,该端点不需要使用独立的描述符。 除了端点 0 外,特定设备所支持的端点数量将由各自的设计要求决定。简单的设计(如鼠标)可能仅要一个 IN 端点。复杂的设计可能需要多个数据端点。USB 规范对高速和全速设备的端点数量进行了限制,即每个方向最多使用 16 个端点(16 个 IN、16 个 OUT,总共为 32 个),其中不包含控制端点 0 IN 和 0 OUT 在内。低速设备仅能使用两个端点。USB 类设备可对端点数量设定更严格的限制。例如,低速人机界面设备(HID)设计的端点可能不超过两个 — 通常有一个 IN 端点和一个 OUT 端点。数据端点本身具有双向特性。只有对它们进行配置后才支持单向传输(具有单向特性)。例如,端点 1 可作为 IN 或 OUT 端点使用。设备的描述符将正式使其成为一个 IN 端点。 各端点使用循环冗余校验(CRC)来检测传输中发生的错误。CRC 是一个用于检测错误的计算值。USB 规范中对实际的计算公式进行了解释,这些计算由 USB 硬件进行,这样可确保能够发出正确的响应。数据操作的接收方对数据进行 CRC 检查。如果两者匹配,那么接收方将发出一个 ACK。如果两者匹配失败,便不会发出任何握手数据包。在这种情况下,发送方将重新发送数据。 USB 规范定义了四种端点,并根据类型以及所支持的设备速度限制了数据包的尺寸。根据设计要求,开发者使用端点描述符指出端点类型以及数据包最大尺寸。四种端点和各自的特性如下:

    03

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

    鼠标发送给PC的数据每次4个字节 BYTE1 BYTE2 BYTE3 BYTE4 定义分别是: BYTE1 -- |--bit7: 1 表示 Y 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出 |--bit6: 1 表示 X 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出 |--bit5: Y 坐标变化的符号位,1表示负数,即鼠标向下移动 |--bit4: X 坐标变化的符号位,1表示负数,即鼠标向左移动 |--bit3: 恒为1 |--bit2: 1表示中键按下 |--bit1: 1表示右键按下 |--bit0: 1表示左键按下 BYTE2 -- X坐标变化量,与byte的bit4组成9位符号数,负数表示向左移,正数表右移。用补码表示变化量 BYTE3 -- Y坐标变化量,与byte的bit5组成9位符号数,负数表示向下移,正数表上移。用补码表示变化量 BYTE4 -- 滚轮变化。 由于手上没有USB鼠标,对BYTE1的4-7位没有测试,对于BYTE2 BYTE3做个测试,BYTE1的4-7全为0的时候,BYTE2 BYTE3的正负表示鼠标移动方向

    03

    【翻译】HyNet: Learning Local Descriptor with Hybrid Similarity Measure and Triplet Loss

    最近的研究表明,局部描述符学习得益于L2归一化的使用,然而,文献中缺乏对这种效应的深入分析。在本文中,我们研究了L2归一化如何影响训练期间的反向传播描述符梯度。根据我们的观察,我们提出了一个新的局部描述符HyNet,它可以在匹配方面带来最先进的结果。HyNet引入了一种混合相似性度量,用于度量三态边际损失,一个正则化项约束描述符范数,以及一种新的网络体系结构,该体系结构对所有中间特征映射和输出描述符执行L2正则化。在包括补丁匹配、验证和检索在内的标准基准上,HyNet大大超过了以前的方法,并且在3D重建任务上优于完整的端到端方法。代码和模型可在https://github.com/yuruntian/HyNet上找到。

    02

    J. Chem. Inf. Model. | 评估图神经网络和迁移学习在口服吸收率预测中的应用

    今天为大家介绍的是来自Yunpeng Lu团队的一篇论文。口服生物利用度是药物发现中的重要药代动力学属性。最近开发的计算模型涉及使用分子描述符、指纹和传统机器学习模型。然而,确定分子描述符的类型需要领域专家知识和进行特征选择所需的时间。随着图神经网络(GNN)的出现,模型可以被训练成自动提取它们认为重要的特征。作者利用了GNN的自动特征选择来预测口服生物利用度。为了增强GNN的预测性能,作者利用迁移学习预训练了一个模型来预测溶解度,并获得了最终的平均准确度为0.797,F1得分为0.840,AUC-ROC为0.867,这超过了先前在相同测试数据集上预测口服生物利用度的研究成果。

    06
    领券