1

首先我必须说我是 libusb 的新手。我有一个 USB 设备,我正在 linux 中为这个设备编写代码。在我的代码中,我正在显示设备的供应商和产品 ID。之后,我将数据从主机发送到设备。正如预期的那样,产品 ID 正在发生变化。在此更改之后,我想再次显示设备的供应商和产品 ID。尽管我在终端中写 lsusb 时看到了新的产品 ID,但我无法用代码显示。但是当我再次运行程序时可以显示。代码流如下:

  struct    libusb_device_handle     *devh    = NULL;
              libusb_device                **devs;
              libusb_device                **devs2;
              libusb_context               *context1 = NULL;
              libusb_context               *context2 = NULL;    
              libusb_config_descriptor *config;

  libusb_init(&context1);

  libusb_set_debug(context1,3);

  counter = libusb_get_device_list(context1,&devs);

  printf("Devices in List.\n");
  ssize_t i;

  for(i = 0; i < counter; i++) printdev(devs[i]); // display function is printdev

之后,我正在发送数据,并且产品 ID 会随着这些数据而变化。在此更改之后,我想显示新的设备列表,首先我要发布设备列表并关闭会话。

libusb_free_device_list(devs,1);
libusb_exit(context1);

关闭会话后,我正在初始化新会话,我想获取新设备列表。为此,我正在这样做:

 libusb_init(&context2);
 counter = libusb_get_device_list(context2,&devs2);
 for(i = 0; i < counter ; i++) printdev(devs2[i]);

但我无法显示新设备列表。我可以显示旧设备列表。只有我再次运行程序才能显示新设备列表。我也可以在第一个产品 id 更改过程后使用 lsusb 显示更改。

我不知道问题是什么。

从现在开始感谢您的帮助。

4

0 回答 0