首先我必须说我是 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 显示更改。
我不知道问题是什么。
从现在开始感谢您的帮助。