无法获取HID报告说明仅适用于鼠标滚轮

问题描述

我正在尝试通过STM32自学USB HID。现在,我一直在努力尝试使用自定义报告说明。

这是现在正在工作的内容

报告说明:

0x05,0x01,// Usage Page (Generic Desktop Ctrls)
0x09,0x02,// Usage (Mouse)
0xA1,// Collection (Application)
0x09,//   Usage (Pointer)
0xA1,0x00,//   Collection (Physical)
0x05,//     Usage Page (Generic Desktop Ctrls)
0x09,0x30,//     Usage (X)
0x09,0x31,//     Usage (Y)
0x09,0x38,//     Usage (Wheel)
0x15,0x81,//     Logical Minimum (-127)
0x25,0x7F,//     Logical Maximum (127)
0x75,0x08,//     Report Size (8)
0x95,0x03,//     Report Count (3)
0x81,0x06,//     Input (Data,Var,Rel,No Wrap,Linear,Preferred State,No Null Position)
0xC0,//   End Collection
0xC0,// End Collection

报告说明大小:

#define USBD_CUSTOM_HID_REPORT_DESC_SIZE     0x1E
在main.c中声明的

struct

struct mouseHID_t {
int8_t x;
int8_t y;
int8_t wheel;
};
struct mouseHID_t mouseHID;

在while循环中编码:

while (1)
{
    if (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_9) == 0)
    {
        mouseHID.wheel = 1;
        USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS,&mouseHID,sizeof(struct mouseHID_t));
        mouseHID.wheel = 0;
    }
}

当我按下板上的按钮时,它将向上滚动鼠标滚轮。如果我更改报告描述以删除x&y用法,将描述大小更改为0x1A(26),并更改mouseHID结构以删除x&y,则开发板将不再滚动鼠标滚轮。

我能够运行到最远的地方是“ USBD_CUSTOM_HID_SendReport”中的语句“ if(hhid-> state == CUSTOM_HID_IDLE)”从不等于true,因为hhid-> state == CUSTOM_HID_BUSY。

我进行了更改,以便任何人都可以查看我的工作:

0x05,//     Report Count (1)
0x81,// End Collection

#define USBD_CUSTOM_HID_REPORT_DESC_SIZE     0x1A

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)