win10x64下vs2019使用libusb
2021-07-15
4645
86
libusb是一个c语言的usb库,这个库使用们可以在不使用特定驱动的性情况下对USB设备进行相关的操作,这些操作包括:
- 对USB设备支持的传输类型如控制传输、批量传输,中断传输或等时/同步传输进行数据通讯操作。。
- 支持数据接口的同步和异步操作。
- 线程安全。
- 支持热插拔(Hotplug)功能(windows不支持,linux支持)。
本人下载的libusb来源于:https://codechina.csdn.net/mirrors/libusb/libusb?utm_source=csdn_github_accelerator
其它相关的LIBUSB工程可参见:https://github.com/libuvc
使用的环境如:
- windows 10 x64
- vs2019 这里需要安装spectre缓解库
这个工程下载完成后包括的目录如下:
- doc:文档目录,包括一个makefile,在Windows下可以忽略
- android:安卓环境下需要的文件
- examples:项目自带的测试工程源文件,是我们学习的重点
- libusb:libusb源代码的实现文件,我们一般在使用时会将其编译为.lib或dll库
- msvc:贴心的VS工程文件。我们可以根据提供的各种VS版本打开进行整个工程编译。如这里我们打开libusb_2019的工程。
打开工程后,我们必须先编译libusb-1.0 (static)工程,这个工程会生成一个叫做libusb-1.0.lib的文件,我们的测试工程一般会链接这个文件。编译完成后,我们再编译运行testlibusb工程。运行结果如下:
自建libusb测试工程
使用VS2019新建一个控制台程序,引入头文件,如我这里的为:
#include "../libusb-master/libusb/libusb.h"
将我们上面编译好的lib文件复制到我们自建工程的目录中,然后引入该lib文件
#pragma comment(lib,"libusb-1.0.lib")
使用一个测试代码:
#include <iostream>
#include "../libusb-master/libusb/libusb.h"
#pragma comment(lib,"libusb-1.0.lib")
int test_libusb_get_devices_list()
{
// reference: examples/listdevs.c
int ret = libusb_init(nullptr);
if (ret != 0) {
fprintf(stderr, "fail to init: %d\n", ret);
return -1;
}
libusb_device** devs = nullptr;
ssize_t count = libusb_get_device_list(nullptr, &devs);
if (count < 0) {
fprintf(stderr, "fail to get device list: %d\n", count);
libusb_exit(nullptr);
return -1;
}
libusb_device* dev = nullptr;
int i = 0;
while ((dev = devs[i++]) != nullptr) {
struct libusb_device_descriptor desc;
ret = libusb_get_device_descriptor(dev, &desc);
if (ret < 0) {
fprintf(stderr, "fail to get device descriptor: %d\n", ret);
return -1;
}
fprintf(stdout, "%04x:%04x (bus: %d, device: %d) ",
desc.idVendor, desc.idProduct, libusb_get_bus_number(dev), libusb_get_device_address(dev));
uint8_t path[8];
ret = libusb_get_port_numbers(dev, path, sizeof(path));
if (ret > 0) {
fprintf(stdout, "path: %d", path[0]);
for (int j = 1; j < ret; ++j)
fprintf(stdout, ".%d", path[j]);
}
fprintf(stdout, "\n");
}
libusb_free_device_list(devs, 1);
libusb_exit(nullptr);
return 0;
}
int main()
{
test_libusb_get_devices_list();
return 0;
}
编译运行的结果如下:
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936