USB 键盘支持 HID_SET_IDLE

之前的代码中,没有对 SET_IDLE 进行处理,所以会使用 STALL 进行回复。这次的目标是在代码中添加处理的代码。

作为比对,正常情况下应该使用下面的方式处理:

                /* 分析并处理当前的SETUP包 */
                len = 0;                                                                      // 默认为成功并且上传0长度
                status = 0;
                if (( UsbSetupBuf->bRequestType & USB_REQ_TYP_MASK ) != USB_REQ_TYP_STANDARD )  /* 非标准请求 */
                {
                        // 处理 HID_SET_IDLE
                        if ((UsbSetupBuf->bRequestType==0x21)&&(SetupReqCode==HID_SET_IDLE)) {
                                printf("SETUP HID_SET_IDLE\n");
                                R16_UEP0_T_LEN1 = 0;
                                R8_UEP0_TX_CTRL1 = UEP_DATA1 | UEP_T_RES_ACK;                    // 默认数据包是DATA1
                                return ;
                        }
                        status = 0xFF;  // 操作失败
                }

修改之后的运行结果:

完整代码如下:

发表评论

您的电子邮箱地址不会被公开。