图1 支持的鼠标 图2 不支持的鼠标
在
STM32Cube_FW_F4_V1.5.0ProjectsSTM32F429I-DiscoveryApplica
tionsUSB_HostHID_Mouse 基础上进行修改(STM32F429I-Discovery
开发板也测试过,同样问题)
目前仅发现支持 HP的一款鼠标(HP PC设备配套的)
其他的有线,无线的(大概测试了4种)都不支持
区别在于,支持的鼠标
在如下函数中:static USBH_StatusTypeDef USBH_HID_ClassRequest(USBH_HandleTypeDef *phost)
case HID_REQ_SET_IDLE:
classReqStatus = USBH_HID_SetIdle (phost, 0, 0); //YFSoft 2015-04-06
LCD_UsrLog("si%d ",classReqStatus);
/* set Idle */
if (classReqStatus == USBH_OK)
{
HID_Handle->ctl_state = HID_REQ_SET_PROTOCOL;
}
else if(classReqStatus == USBH_NOT_SUPPORTED)
{
HID_Handle->ctl_state = HID_REQ_SET_PROTOCOL;
}
break;
case HID_REQ_SET_PROTOCOL:
/* set protocol */
classReqStatus = USBH_HID_SetProtocol(phost, 0);
LCD_UsrLog("sp%d ",classReqStatus);
if (classReqStatus == USBH_OK)
{
HID_Handle->ctl_state = HID_REQ_IDLE;
/* all requests performed*/
phost->pUser(phost, HOST_USER_CLASS_ACTIVE);
status = USBH_OK;
}
else if(classReqStatus == USBH_NOT_SUPPORTED)
{
HID_Handle->ctl_state = HID_REQ_IDLE;
// all requests performed
phost->pUser(phost, HOST_USER_CLASS_ACTIVE);
status = USBH_OK;
}
break;
调试信息是我添加的,从图1可以看出 USBH_HID_SetIdle 函数开始状态为忙,几次后就OK了,USBH_HID_SetProtocol也是类似
但是不支持的鼠标,如图2,USBH_HID_SetIdle开始为忙,后续为不支持,USBH_HID_SetProtocol 直接为不支持。
有遇到类似问题的网友没有?
我测过几个鼠标,出问题的都是无线鼠标,你的也是这样的吗?
文档:Device Class Definition for Human Interface Devices (HID) Version 1.11
Appendix G: HID Request Support Requirements
对于Non-Boot Mouse,Set Idle Set Protocol 命令都是可选的。
我试的两个无线鼠标接收器,都是两个interface,第一个是键盘,第2个是鼠标及几个功能不明的设备。
两个无线鼠标中键盘的interface支持Set Idle Set Protocol,
两个无线鼠标中一个鼠标的Interface不支持Set Idle Set Protocol,另一个支持。但接收的数据包并不是boot protocol的。
如果鼠标不支持boot protocol,只能解析report的格式了,我现在也正烦着呢,因为设备要配无线鼠标。
一周热门 更多>