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

无法在cygwin中使用libusb-1.0打开USB设备,c,windows,cygwin,libusb-1.0,C,Windows,Cygwin,Libusb 1.0,我正在尝试使用cygwin中的libusb-1.0与USB外设接口 libusb\u获取设备列表(…)工作正常,我获取一个USB设备列表。它在设备列表中找到具有正确供应商ID和产品ID的设备,但当使用该设备调用libusb\u open(…)时,它总是失败,错误代码为libusb\u error\u NOT\u FOUND 我不认为这是一个权限问题,我已经试着以管理员的身份运行了这个程序,并且有一个单独的错误代码(LIBUSB\u error\u ACCESS)。同样的代码也适用于Linux中的

我正在尝试使用cygwin中的
libusb-1.0
与USB外设接口

libusb\u获取设备列表(…)
工作正常,我获取一个USB设备列表。它在设备列表中找到具有正确供应商ID和产品ID的设备,但当使用该设备调用
libusb\u open(…)
时,它总是失败,错误代码为
libusb\u error\u NOT\u FOUND

我不认为这是一个权限问题,我已经试着以管理员的身份运行了这个程序,并且有一个单独的错误代码(
LIBUSB\u error\u 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;
}
unsigned init_usb(int-vendor_-id,int-product_-id,int-interface_-num)
{
int-ret=libusb_init(NULL);
如果(ret<0)返回控制错误;
libusb_设备**devs=NULL;
int num_dev=libusb_get_device_list(NULL,&devs);
libusb_设备*dev=NULL;
对于(int i=0;i
原来这是一种驱动程序问题。我必须告诉Windows将我正在使用的特定设备与libusb驱动程序相关联

附带了一些工具来进行关联(尽管您可能需要配置系统以允许安装未签名的驱动程序)

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

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