当使用两个不同的函数时,libusb 返回两个不同的设备描述符值

问题描述 投票:0回答:1

我想使用 libusb 库与 HID 设备通信。我可以实现它的很多功能,这还可以。但是当我想使用

libusb_get_device_descriptor()
函数和
libusb_get_descriptor()
函数获取设备描述符时,它会显示某些字段的不同值,例如 Control Max Packet Size

我对两个函数进行了如下编码:

#include <stdio.h>
#include "libusb.h"

int main(void)
{
  libusb_device_handle* dev_handle;
  int init = libusb_init(NULL);
  dev_handle = libusb_open_device_with_vid_pid(NULL, 0x04d8, 0x01ff);
  libusb_claim_interface(dev_handle, 0);

  unsigned char buf[18];
  
  //first function
  libusb_get_descriptor(dev_handle, LIBUSB_DT_DEVICE, 0, buf, sizeof(buf));

  for (int i = 0; i < sizeof(buf); i++)
  {
    printf("%d ", buf[i]);
  }

// output
//18 1 0 2 0 0 0 64 216 4 255 1 0 1 1 2 0 1
  
  printf("\n");
  
  //second function
  struct libusb_device_descriptor desc;
  libusb_get_device_descriptor(libusb_get_device(dev_handle), &desc);
  printf("%d ", desc.bMaxPacketSize0);


  libusb_release_interface(dev_handle, 0);
  libusb_close(dev_handle);
  libusb_exit(NULL);
  return 0;
}

如果运行上面的代码,第一个函数的 CTRL_Max_Packet_Size 返回值等于 64,但第二个函数的返回值是 8,显然第二个函数是正确的。但是为什么第一个函数返回错误的值? 我已经检查了第一个函数的其他描述符,例如

CONFIG_DESCRIPTOR
,在这种情况下,某些字段也存在一些不正确的值。

我使用的是 Windows 10 64 位,我已经使用 Visual Studio 和 mingw64 编译了我的代码。两者都返回相同的错误值。

c libusb
1个回答
0
投票

我找到了解决方案。问题出在win10中默认安装的驱动程序hidUsb。我使用 Zadig 软件将驱动程序更改为 WinUsb,现在一切正常。

© www.soinside.com 2019 - 2024. All rights reserved.