USB-LIB 获取USB设备最大传输数据长度

QVector<QString> vecSerialNum;

//获取当前usb设备列表
libusb_device** ppDevList = nullptr;
ssize_t cnt = libusb_get_device_list(NULL, &ppDevList);
if (cnt <= 0)
    return vecSerialNum;

//获取Gohi设备序列号
libusb_device* pDev = nullptr;
int nIndex = 0;
while((pDev = ppDevList[nIndex++]) != nullptr)
{
    //获取usb设备信息
    libusb_device_descriptor usbDesc;
    int nRt = libusb_get_device_descriptor(pDev, &usbDesc);
    if(nRt != 0)
        continue;
    //判断是否是Gohi设备
    if (GOHI_VID != usbDesc.idVendor || GOHI_PID != usbDesc.idProduct)
     continue;
    //打开Gohi设备
    libusb_device_handle* pGohiHandle = nullptr;
    nRt = libusb_open(pDev,&pGohiHandle);
    if(nRt != 0)
        continue;
    //获取序列号
    char arrSerialNum[128] = {0};
    nRt = libusb_get_string_descriptor_ascii(pGohiHandle, usbDesc.iSerialNumber, (unsigned char*)arrSerialNum, 128);

    int nConfig = 0,naltsettin = 0;
    uint8_t nInterface = 0,nEndpoint = 0;
    int nRet;
    for (nConfig = 0; nConfig < usbDesc.bNumConfigurations; nConfig++)
    {
        struct libusb_config_descriptor *config;
        nRet = libusb_get_config_descriptor(pDev, nConfig, &config);  //获取config
        if (LIBUSB_SUCCESS != nRet)
        {
            qDebug() << "  Couldn't retrieve descriptors\n";
            continue;
        }

        //这个端点能够发送/接收的最大数据包大小
        uint16_t uMaxPacketSize = config->interface->altsetting->endpoint->wMaxPacketSize;
        qDebug() << "uMaxPacketSize: " << uMaxPacketSize << "\n";
        //print_configuration(config);

        libusb_free_config_descriptor(config);
    }


    //关闭Gohi设备
    libusb_close(pGohiHandle);
    pGohiHandle = nullptr;
    //
    if(nRt < 0)
        continue;
    QString strSerialNum = arrSerialNum;
    vecSerialNum.push_back(strSerialNum);
}

//释放资源
libusb_free_device_list(ppDevList, 1);

return vecSerialNum;

版权声明:本文为weixin_47946639原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。