babde4995af70a662130869fdcdef61.png

上图是在ch582 HostU2Enum基础上参考CH559EVT修改而来的代码;由于CtrlGetU2HIDDeviceReport有SetIdeal操作,所以就直接调用了,我们的设备有三个接口

/*********************************************************************
 * @fn      CtrlGetU2HIDDeviceReport
 *
 * @brief   获取HID设备报表描述符,返回在TxBuffer中
 *
 * @param   none
 *
 * @return  错误码
 */
uint8_t CtrlGetU2HIDDeviceReport(uint8_t infc)
{
    uint8_t s;
    uint8_t len;

    CopyU2SetupReqPkg((uint8_t *)SetupSetU2HIDIdle);
    pU2SetupReq->wIndex = infc;
    s = U2HostCtrlTransfer(U2Com_Buffer, &len); // 执行控制传输
    if(s != ERR_SUCCESS)
    {
        return (s);
    }

    CopyU2SetupReqPkg((uint8_t *)SetupGetU2HIDDevReport);
    pU2SetupReq->wIndex = infc;
    s = U2HostCtrlTransfer(U2Com_Buffer, &len); // 执行控制传输
    if(s != ERR_SUCCESS)
    {
        return (s);
    }

    return (ERR_SUCCESS);
}


调用CtrlGetU2HIDDeviceReport获取接口0和接口1的报告描述符正常,但接口2的描述符不正常,如下图

c7b372d05acee391b98bad925ec0c08.png

出现0x2E,

#define ERR_USB_TRANSFER       0x20  /* NAK/STALL等更多错误码在0x20~0x2F */

所以想请假如何解决这个问题

另外我们usbhid描述符情况如下附件,是一个三个接口的hid类复合设备

icon_rar.gifUSB Composite Device.rar