之前的代码中,没有对 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; // 操作失败
- }
复制代码
|