【发布时间】:2018-08-25 21:54:06
【问题描述】:
我正在尝试在 cygwin 中使用 libusb-1.0 与 USB 外围设备连接。
libusb_get_device_list(...) 工作正常,我得到一个 USB 设备列表。它会在设备列表中找到具有正确 VendorID 和 ProductID 的设备,但是当使用该设备调用 libusb_open(...) 时,它总是会失败并返回错误代码 LIBUSB_ERROR_NOT_FOUND。
我认为这不是权限问题,我已尝试以管理员身份运行它,并且为此有一个单独的错误代码 (LIBUSB_ERROR_ACCESS)。同样的代码也适用于 Linux 中的libusb-1.0。
unsigned init_usb(int vendor_id, int product_id, int interface_num)
{
int ret = libusb_init(NULL);
if (ret < 0) return CONTROL_ERROR;
libusb_device **devs = NULL;
int num_dev = libusb_get_device_list(NULL, &devs);
libusb_device *dev = NULL;
for (int i = 0; i < num_dev; i++) {
struct libusb_device_descriptor desc;
libusb_get_device_descriptor(devs[i], &desc);
if (desc.idVendor == vendor_id && desc.idProduct == product_id) {
dev = devs[i];
break;
}
}
if (dev == NULL) return CONTROL_ERROR;
libusb_device_handle *devh = NULL;
ret = libusb_open(dev, &devh);
//ret is always -5 here (in cygwin)!
if (ret < 0) return CONTROL_ERROR;
libusb_free_device_list(devs, 1);
return CONTROL_SUCCESS;
}
【问题讨论】:
标签: c windows cygwin libusb-1.0