牛卧堂MCU技术交流

标题: nano130ke3bn的 USBD_HID_Keyboard标准例程在BIOS下无法使用 [打印本页]

作者: jonahsun    时间: 2017-8-25 13:58
标题: nano130ke3bn的 USBD_HID_Keyboard标准例程在BIOS下无法使用
SX给出解决方案 https://www.amobbs.com/thread-4789378-1-1.html
搞定了,要响应主机的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://www.nuvoton-mcu.com/) Powered by Discuz! X3.2