首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在cygwin中使用libusb-1.0打开USB设备

无法在cygwin中使用libusb-1.0打开USB设备
EN

Stack Overflow用户
提问于 2018-03-16 18:27:47
回答 1查看 2.3K关注 0票数 3

我正试图用libusb-1.0在cygwin中与USB外围设备进行接口。

libusb_get_device_list(...)工作正常,我得到了一个USB设备列表。它在设备列表中找到具有正确VendorID和ProductID的设备,但是当使用该设备调用libusb_open(...)时,错误代码LIBUSB_ERROR_NOT_FOUND总是失败。

我不认为这是权限问题,我尝试过以管理员的身份运行它,并且有一个单独的错误代码(LIBUSB_ERROR_ACCESS)。这同样的代码适用于Linux中的libusb-1.0

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-19 14:20:47

原来这是司机的问题。我不得不告诉Windows将我使用的特定设备与libusb驱动程序相关联。

libusb-win32-1.2.6.0附带了一些工具来实现这种关联(尽管您可能需要配置您的系统以允许安装未签名的驱动程序)。

有一点很棘手。如果您只想将设备与libusb相关联,则可以使用inf-wizard.exe工具进行关联,但这将更改主关联为libusb。在我的例子中,该设备是一个USB音频类设备(即USB声卡),它还具有一些libusb功能。当我使用inf-wizard.exe时,libusb开始工作(yay!),但后来它停止了作为音频设备的工作。

在我的例子中,我需要使用install-filter-win.exe工具来安装libusb的过滤器驱动程序。这使得设备仍然可以显示为USB音频设备,但也可以使用libusb与其交互。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49327380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档