C语言 libusb:如何检索端口号(COMxx)



我正在使用libusb枚举USB设备。现在我用VID/PID识别了正确的设备,我想知道它的COM端口号。我找不到libusb函数来检索这些信息。

#include "libusb.h"
static void print_devs(libusb_device **devs)
{
libusb_device *dev;
int i = 0, j = 0;
uint8_t path[8]; 
while ((dev = devs[i++]) != NULL) {
struct libusb_device_descriptor desc;
int r = libusb_get_device_descriptor(dev, &desc);
if (r < 0) {
fprintf(stderr, "failed to get device descriptor");
return;
}
printf("%04x:%04x (bus %d, device %d)",
desc.idVendor, desc.idProduct,
libusb_get_bus_number(dev), libusb_get_device_address(dev));
r = libusb_get_port_numbers(dev, path, sizeof(path));
if (r > 0) {
printf(" path: %d", path[0]);
for (j = 1; j < r; j++)
printf(".%d", path[j]);
}
printf("n");
if (desc.idVendor == 0xAAAA && desc.idProduct == 0xBBBB)
{
// How can I know the device COM port number?? COM12 for instance
}
}
}
int main( int argc, char* argv[] )
{
libusb_device **devs;
int r;
ssize_t cnt;
r = libusb_init(NULL);
if (r < 0)
return r;
cnt = libusb_get_device_list(NULL, &devs);
if (cnt < 0){
libusb_exit(NULL);
return (int) cnt;
}
print_devs(devs);
libusb_free_device_list(devs, 1);
libusb_exit(NULL);
return 0;
}

根据这里的文档:

  • https://vovkos.github.io/doxyrest/samples/libusb/group_libusb_dev.html
  • https://libusb.sourceforge.io/api - 1.0 -/- group__libusb__dev.html

您可以使用以下函数获取端口号:

uint8_t
libusb_get_port_number(libusb_device* dev);

或者,您可以打开与USB设备的连接,使用以下功能之一来执行I/O:

int
libusb_open(
libusb_device* dev,
libusb_device_handle** dev_handle
);
libusb_device_handle*
libusb_open_device_with_vid_pid(
libusb_context* ctx,
uint16_t vendor_id,
uint16_t product_id
);

最新更新