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版权协议,转载请附上原文出处链接和本声明。