作者信息
USB中文网
本站的1位用户
加入于2021-05-27
Windows驱动开发,网站开发
好好学习,天天向上。

win10x64下vs2019使用libusb

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的工程。
    VS2019

打开工程后,我们必须先编译libusb-1.0 (static)工程,这个工程会生成一个叫做libusb-1.0.lib的文件,我们的测试工程一般会链接这个文件。编译完成后,我们再编译运行testlibusb工程。运行结果如下:
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;
}

编译运行的结果如下:
libusb测试工程

0 篇笔记 写笔记

VS2019分析HID报告描述符解析源代码
常有人问,有没有HID解析的工具,好像除了usb官网提供的dt.exe,没有其它的好的东东了。Linux下有相关的工具,在本站的社区里:http://www.usbzh.com/zone/detail-12.html 可以查看做HID开发,其实最麻烦的就是HID报表描述符了。这里本人移植了Reac......
win10x64下vs2019使用libusb
libusb是一个c语言的usb库,这个库使用们可以在不使用特定驱动的性情况下对USB设备进行相关的操作,这些操作包括:对USB设备支持的传输类型如控制传输、批量传输,中断传输或等时/同步传输进行数据通讯操作。。支持数据接口的同步和异步操作。线程安全。支持热插拔(Hotplug)功能(windo......
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!