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