【问题标题】:Windows USB HID Report LengthWindows USB HID 报告长度
【发布时间】:2017-10-26 18:35:29
【问题描述】:

我正在使用 STMicro 微控制器开发 USB HID 设备。我从 STMicro 的 HID 示例开始,它运行良好。我在 PC 端的 Windows 7 64 位上使用 C++。我有一个适用于我的设备的应用程序。然而,有一件事我想不通。

示例固件一次只允许发送和接收 2 个字节,这由 HIDP_CAPS.OutputReportByteLength 和 InputReportByteLength 确定。我想一次发送比这更多的数据,但我不知道如何增加报告长度。我成功地更改了端点 wMaxPacketSize、VID 和 PID 以及其他一些东西,但我无法弄清楚 Windows 是如何计算进出报告长度的。我的报告或设备描述中似乎没有任何字段表明此长度,但我无法想象它可能来自其他地方。

谁能告诉我 Windows 如何确定 HIDP_CAPS.OutputReportByteLength 和 HIDP_CAPS.InputReportByteLength?

如何增加这些长度?

【问题讨论】:

    标签: windows usb hid


    【解决方案1】:

    我想通了。我想我会在这里发帖以防其他人需要知道。我不完全确定我是否真的全部理解,所以如果我犯了错误,请有人纠正我。

    我不得不更改固件中的报告描述。我有几种用法。 Windows 获取报告描述并确定哪种用法需要最长的长度并使用该长度。在我的一个输入报告中,我进行了以下更改(输入报告只是固件中的一个字节数组):

    0x27, 0xFF, 0xFF, 0xFF, 0xFF, //Logical maximum is 4 bytes long, and has a value of 0xFFFFFFFF 0x95, 0x01, //There is one report 0x75, 0x20, //There are 32 bits per report

    我为输出做了类似的事情,但没有报告编号字段 (0x95)。

    Windows 现在告诉我可以发送和接收 5 个字节,我相信这意味着端点加上报告数量乘以报告大小。

    【讨论】:

    • 您能发布完整的 HID 报告描述符吗?如果你有一个报告 ID,那么你必须在任何报告前面加上那个 ID……这占了额外的字节。
    • 你可以在这里获得整个原始项目:github.com/zegervdv/PS2-controller/tree/master/…
    • 不是什么大问题,但该示例的 HID 报告描述符中有一个小错误... 0x25, 0xFF, //逻辑最大值 (255) ...真正的意思是“逻辑最大值 -1 ”。应该是: 0x26, 0xFF, 0x00, //逻辑最大值 (255) 另外,为物理集合指定 0xA0 而不是 0xA1 0x00 是灰色区域。规范没有明确说明如果省略一个值会假定什么默认值......但我认为零是合理的。除此之外,没有报告描述符,所以我希望看到 5 个字节的报告(Ry、Rx、Y、X 和按钮位各一个)。
    猜你喜欢
    • 2015-08-28
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多