无法在 cygwin 中使用 libusb-1.0 打开 USB 设备
Cannot open USB device with libusb-1.0 in cygwin
我正在尝试在 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;
}
事实证明这是一种驱动程序问题。我不得不告诉 Windows 将我正在使用的特定设备与 libusb 驱动程序相关联。
libusb-win32-1.2.6.0 附带了一些工具来建立这种关联(尽管您可能需要配置系统以允许安装未签名的驱动程序)。
有一个棘手的问题。如果您只想将设备与 libusb 相关联,您可以使用 inf-wizard.exe
工具来建立该关联,但这会将主要关联更改为与 libusb 相关联。在我的例子中,该设备是一个 USB 音频 Class 设备(即 USB 声卡),也 具有一些 libusb 功能。当我使用 inf-wizard.exe
时,libusb 开始工作(耶!),但随后它停止作为音频设备工作。
就我而言,我需要使用 install-filter-win.exe
工具为 libusb 安装过滤驱动程序。这允许设备仍然显示为 USB 音频设备,但也可以使用 libusb 与其交互。
我正在尝试在 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;
}
事实证明这是一种驱动程序问题。我不得不告诉 Windows 将我正在使用的特定设备与 libusb 驱动程序相关联。
libusb-win32-1.2.6.0 附带了一些工具来建立这种关联(尽管您可能需要配置系统以允许安装未签名的驱动程序)。
有一个棘手的问题。如果您只想将设备与 libusb 相关联,您可以使用 inf-wizard.exe
工具来建立该关联,但这会将主要关联更改为与 libusb 相关联。在我的例子中,该设备是一个 USB 音频 Class 设备(即 USB 声卡),也 具有一些 libusb 功能。当我使用 inf-wizard.exe
时,libusb 开始工作(耶!),但随后它停止作为音频设备工作。
就我而言,我需要使用 install-filter-win.exe
工具为 libusb 安装过滤驱动程序。这允许设备仍然显示为 USB 音频设备,但也可以使用 libusb 与其交互。