找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

[NANO] nano130ke3bn的 USBD_HID_Keyboard标准例程在BIOS下无法使用

[复制链接]
跳转到指定楼层
楼主
jonahsun 发表于 2017-8-25 13:58:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
搞定了,要响应主机的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中。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具 举报

沙发
a_ziliu 发表于 2017-8-28 15:31:22 | 只看该作者
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:33 | 只看该作者
本帖最后由 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:58 | 只看该作者
case SET_PROTOCOL:
              {
                USBD_SET_DATA1(EP0);
                 USBD_SET_PAYLOAD_LEN(EP0, 0);
                break;
              }
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU