USB调试笔记
+ -

win10x64下vs2019使用libusb

2021-07-15 3643 19

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测试工程

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

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......
Windows自定义HID设备通讯开发概述
HID设备是USB规范中最早提出并支持的一类通讯设备,常见的键盘、鼠标、游戏手柄都属于HID设备。HID设备一般用于数据量小但实时性要求较高的环境,所以HID设备采用的是USB四种通讯类弄的中中断传传输类型。除了上述描述符的标准的HID设备,HID也提供一种自定义通讯,并由Windows提供驱动,而......
USB Packet Viewer 连接方式及驱动安装
典型的设备连接方式监听 PC 上运行 USB Packet Viewer 协议解析软件,通过 Type-C 数据线与抓包设备相连,同时也向抓包设备提供电源。待测试的 USB 主设备通过 Type-C 数据线与抓包设备的 Host 接口相连待测试的 USB 从设备通过 USB-A 数据线与抓包设备......
VS2019使用WinUSB模板创建WinUSB应用程序
当USB设备使用WinUSB驱动之后,可以使用WinUSB提供的应用层库winusb.lig来进行应用程序的开发,这样在应用层可以通过Winusb驱动程序与USB设备进行通讯。开发WinUSB应用程序时需要使用VS开发,不过在建一个示例WinUSB应用程序时,首先得安装WDK,安装完成之后会在创建......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

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

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