牛卧堂MCU技术交流
标题: nano130ke3bn的 USBD_HID_Keyboard标准例程在BIOS下无法使用 [打印本页]
作者: jonahsun 时间: 2017-8-25 13:58
标题: nano130ke3bn的 USBD_HID_Keyboard标准例程在BIOS下无法使用
搞定了,要响应主机的SET_IDLE命令。例程里面没有响应。注意以下函数与你的有什么不同。
RESULT CustomHID_NoData_Setup(u8 RequestNo)
{
if ((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
&& (RequestNo == SET_PROTOCOL))
{
return CustomHID_SetProtocol();
}
else if ((Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
&& (RequestNo == SET_IDLE))//响应主机SET_IDLE命令
{
return CustomHID_SetProtocol();//没仔细研究,此处返回SET_PROTOCOL响应数据即可
}
else
{
return USB_UNSUPPORT;
}
}
请教新唐这个怎么修改,HID_KB.C中。
作者: a_ziliu 时间: 2017-8-28 15:31
void HID_ClassRequest(void)
{
uint8_t buf[8];
USBD_GetSetupPacket(buf);
if(buf[0] & 0x80) /* request data transfer direction */
{
// Device to host
switch(buf[1])
{
case GET_REPORT:
// {
// break;
// }
case GET_IDLE:
// {
// break;
// }
case GET_PROTOCOL:
// {
// break;
// }
default:
{
/* Setup error, stall the device */
USBD_SetStall(EP0);
USBD_SetStall(EP1);
break;
}
}
}
else
{
// Host to device
switch(buf[1])
{
case SET_REPORT:
{
if(buf[3] == 2)
{
/* Request Type = Output */
USBD_SET_DATA1(EP1);
USBD_SET_PAYLOAD_LEN(EP1, buf[6]);
/* Status stage */
USBD_PrepareCtrlIn(0, 0);
}
break;
}
case SET_IDLE:
{
/* Status stage */
USBD_SET_DATA1(EP0);
USBD_SET_PAYLOAD_LEN(EP0, 0);
break;
}
case SET_PROTOCOL:
{
USBD_SET_DATA1(EP0);
USBD_SET_PAYLOAD_LEN(EP0, 0);
}
default:
{
// Stall
/* Setup error, stall the device */
USBD_SetStall(EP0);
USBD_SetStall(EP1);
break;
}
}
}
}
作者: jonahsun 时间: 2017-8-31 09:10
本帖最后由 jonahsun 于 2017-9-1 13:50 编辑
case SET_PROTOCOL: //增加这一条不行
{
USBD_SET_DATA1(EP0);
USBD_SET_PAYLOAD_LEN(EP0, 0);
}
作者: a_ziliu 时间: 2017-9-4 10:34
case SET_PROTOCOL:
{
USBD_SET_DATA1(EP0);
USBD_SET_PAYLOAD_LEN(EP0, 0);
break;
}
欢迎光临 牛卧堂MCU技术交流 (http://nuvoton-mcu.com/) |
Powered by Discuz! X3.2 |