QT调用最新的libusb库

devtools/2024/10/10 15:33:29/

一:下载libusb文件

下载最新的库的下载网站:https://libusb.info/

下载:

解压后目录如下:

二:库文件添加QT中

根据自己的编译器选择库:

①将头文件中添加libusb.h

②源文件中添加libusb-1.0.lib

③添加库文件:

三:编译工程

添加库后直接编译,不报错即为成功:

四:example

参考例程中的调用方法:

/*
* Test suite program based of libusb-0.1-compat testlibusb
* Copyright (c) 2013 Nathan Hjelm <hjelmn@mac.ccom>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/#include <stdio.h>
#include <string.h>
#include "libusb.h"int verbose = 0;static void print_endpoint_comp(const struct libusb_ss_endpoint_companion_descriptor *ep_comp)
{printf("      USB 3.0 Endpoint Companion:\n");printf("        bMaxBurst:           %u\n", ep_comp->bMaxBurst);printf("        bmAttributes:        %02xh\n", ep_comp->bmAttributes);printf("        wBytesPerInterval:   %u\n", ep_comp->wBytesPerInterval);
}static void print_endpoint(const struct libusb_endpoint_descriptor *endpoint)
{int i, ret;printf("      Endpoint:\n");printf("        bEndpointAddress:    %02xh\n", endpoint->bEndpointAddress);printf("        bmAttributes:        %02xh\n", endpoint->bmAttributes);printf("        wMaxPacketSize:      %u\n", endpoint->wMaxPacketSize);printf("        bInterval:           %u\n", endpoint->bInterval);printf("        bRefresh:            %u\n", endpoint->bRefresh);printf("        bSynchAddress:       %u\n", endpoint->bSynchAddress);for (i = 0; i < endpoint->extra_length;) {if (LIBUSB_DT_SS_ENDPOINT_COMPANION == endpoint->extra[i + 1]) {struct libusb_ss_endpoint_companion_descriptor *ep_comp;ret = libusb_get_ss_endpoint_companion_descriptor(NULL, endpoint, &ep_comp);if (LIBUSB_SUCCESS != ret)continue;print_endpoint_comp(ep_comp);libusb_free_ss_endpoint_companion_descriptor(ep_comp);}i += endpoint->extra[i];}
}static void print_altsetting(const struct libusb_interface_descriptor *interface)
{uint8_t i;printf("    Interface:\n");printf("      bInterfaceNumber:      %u\n", interface->bInterfaceNumber);printf("      bAlternateSetting:     %u\n", interface->bAlternateSetting);printf("      bNumEndpoints:         %u\n", interface->bNumEndpoints);printf("      bInterfaceClass:       %u\n", interface->bInterfaceClass);printf("      bInterfaceSubClass:    %u\n", interface->bInterfaceSubClass);printf("      bInterfaceProtocol:    %u\n", interface->bInterfaceProtocol);printf("      iInterface:            %u\n", interface->iInterface);for (i = 0; i < interface->bNumEndpoints; i++)print_endpoint(&interface->endpoint[i]);
}static void print_2_0_ext_cap(struct libusb_usb_2_0_extension_descriptor *usb_2_0_ext_cap)
{printf("    USB 2.0 Extension Capabilities:\n");printf("      bDevCapabilityType:    %u\n", usb_2_0_ext_cap->bDevCapabilityType);printf("      bmAttributes:          %08xh\n", usb_2_0_ext_cap->bmAttributes);
}static void print_ss_usb_cap(struct libusb_ss_usb_device_capability_descriptor *ss_usb_cap)
{printf("    USB 3.0 Capabilities:\n");printf("      bDevCapabilityType:    %u\n", ss_usb_cap->bDevCapabilityType);printf("      bmAttributes:          %02xh\n", ss_usb_cap->bmAttributes);printf("      wSpeedSupported:       %u\n", ss_usb_cap->wSpeedSupported);printf("      bFunctionalitySupport: %u\n", ss_usb_cap->bFunctionalitySupport);printf("      bU1devExitLat:         %u\n", ss_usb_cap->bU1DevExitLat);printf("      bU2devExitLat:         %u\n", ss_usb_cap->bU2DevExitLat);
}static void print_bos(libusb_device_handle *handle)
{struct libusb_bos_descriptor *bos;uint8_t i;int ret;ret = libusb_get_bos_descriptor(handle, &bos);if (ret < 0)return;printf("  Binary Object Store (BOS):\n");printf("    wTotalLength:            %u\n", bos->wTotalLength);printf("    bNumDeviceCaps:          %u\n", bos->bNumDeviceCaps);for (i = 0; i < bos->bNumDeviceCaps; i++) {struct libusb_bos_dev_capability_descriptor *dev_cap = bos->dev_capability[i];if (dev_cap->bDevCapabilityType == LIBUSB_BT_USB_2_0_EXTENSION) {struct libusb_usb_2_0_extension_descriptor *usb_2_0_extension;ret = libusb_get_usb_2_0_extension_descriptor(NULL, dev_cap, &usb_2_0_extension);if (ret < 0)return;print_2_0_ext_cap(usb_2_0_extension);libusb_free_usb_2_0_extension_descriptor(usb_2_0_extension);} else if (dev_cap->bDevCapabilityType == LIBUSB_BT_SS_USB_DEVICE_CAPABILITY) {struct libusb_ss_usb_device_capability_descriptor *ss_dev_cap;ret = libusb_get_ss_usb_device_capability_descriptor(NULL, dev_cap, &ss_dev_cap);if (ret < 0)return;print_ss_usb_cap(ss_dev_cap);libusb_free_ss_usb_device_capability_descriptor(ss_dev_cap);}}libusb_free_bos_descriptor(bos);
}static void print_interface(const struct libusb_interface *interface)
{int i;for (i = 0; i < interface->num_altsetting; i++)print_altsetting(&interface->altsetting[i]);
}static void print_configuration(struct libusb_config_descriptor *config)
{uint8_t i;printf("  Configuration:\n");printf("    wTotalLength:            %u\n", config->wTotalLength);printf("    bNumInterfaces:          %u\n", config->bNumInterfaces);printf("    bConfigurationValue:     %u\n", config->bConfigurationValue);printf("    iConfiguration:          %u\n", config->iConfiguration);printf("    bmAttributes:            %02xh\n", config->bmAttributes);printf("    MaxPower:                %u\n", config->MaxPower);for (i = 0; i < config->bNumInterfaces; i++)print_interface(&config->interface[i]);
}static void print_device(libusb_device *dev, libusb_device_handle *handle)
{struct libusb_device_descriptor desc;unsigned char string[256];const char *speed;int ret;uint8_t i;switch (libusb_get_device_speed(dev)) {case LIBUSB_SPEED_LOW:		speed = "1.5M"; break;case LIBUSB_SPEED_FULL:		speed = "12M"; break;case LIBUSB_SPEED_HIGH:		speed = "480M"; break;case LIBUSB_SPEED_SUPER:	speed = "5G"; break;case LIBUSB_SPEED_SUPER_PLUS:	speed = "10G"; break;default:			speed = "Unknown";}ret = libusb_get_device_descriptor(dev, &desc);if (ret < 0) {fprintf(stderr, "failed to get device descriptor");return;}printf("Dev (bus %u, device %u): %04X - %04X speed: %s\n",libusb_get_bus_number(dev), libusb_get_device_address(dev),desc.idVendor, desc.idProduct, speed);if (!handle)libusb_open(dev, &handle);if (handle) {if (desc.iManufacturer) {ret = libusb_get_string_descriptor_ascii(handle, desc.iManufacturer, string, sizeof(string));if (ret > 0)printf("  Manufacturer:              %s\n", (char *)string);}if (desc.iProduct) {ret = libusb_get_string_descriptor_ascii(handle, desc.iProduct, string, sizeof(string));if (ret > 0)printf("  Product:                   %s\n", (char *)string);}if (desc.iSerialNumber && verbose) {ret = libusb_get_string_descriptor_ascii(handle, desc.iSerialNumber, string, sizeof(string));if (ret > 0)printf("  Serial Number:             %s\n", (char *)string);}}if (verbose) {for (i = 0; i < desc.bNumConfigurations; i++) {struct libusb_config_descriptor *config;ret = libusb_get_config_descriptor(dev, i, &config);if (LIBUSB_SUCCESS != ret) {printf("  Couldn't retrieve descriptors\n");continue;}print_configuration(config);libusb_free_config_descriptor(config);}if (handle && desc.bcdUSB >= 0x0201)print_bos(handle);}if (handle)libusb_close(handle);
}#ifdef __linux__
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>static int test_wrapped_device(const char *device_name)
{libusb_device_handle *handle;int r, fd;fd = open(device_name, O_RDWR);if (fd < 0) {printf("Error could not open %s: %s\n", device_name, strerror(errno));return 1;}r = libusb_wrap_sys_device(NULL, fd, &handle);if (r) {printf("Error wrapping device: %s: %s\n", device_name, libusb_strerror(r));close(fd);return 1;}print_device(libusb_get_device(handle), handle);close(fd);return 0;
}
#else
static int test_wrapped_device(const char *device_name)
{(void)device_name;printf("Testing wrapped devices is not supported on your platform\n");return 1;
}
#endifint main(int argc, char *argv[])
{const char *device_name = NULL;libusb_device **devs;ssize_t cnt;int r, i;for (i = 1; i < argc; i++) {if (!strcmp(argv[i], "-v")) {verbose = 1;} else if (!strcmp(argv[i], "-d") && (i + 1) < argc) {i++;device_name = argv[i];} else {printf("Usage %s [-v] [-d </dev/bus/usb/...>]\n", argv[0]);printf("Note use -d to test libusb_wrap_sys_device()\n");return 1;}}r = libusb_init_context(/*ctx=*/NULL, /*options=*/NULL, /*num_options=*/0);if (r < 0)return r;if (device_name) {r = test_wrapped_device(device_name);} else {cnt = libusb_get_device_list(NULL, &devs);if (cnt < 0) {libusb_exit(NULL);return 1;}for (i = 0; devs[i]; i++)print_device(devs[i], NULL);libusb_free_device_list(devs, 1);}libusb_exit(NULL);return r;
}

http://www.ppmy.cn/devtools/122641.html

相关文章

上传文件失败,请检查阿里云配置信息:[The specified bucket is not valid.

-- 十一假期结束 -- 去年今日此门中&#xff0c;人面挑花相应红。 -- 人面不知何处去&#xff0c;桃花依旧笑春风。

Golang 服务器虚拟化应用案例

推荐学习文档 golang应用级os框架&#xff0c;欢迎stargolang应用级os框架使用案例&#xff0c;欢迎star案例&#xff1a;基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识&#xff0c;这里有免费的golang学习笔…

SQL进阶技巧:影院相邻的座位如何预定?

目录 0 场景描述 1 数据准备 2 问题分析 方法1:利用lag()及lead()分析函数求解 方法2:转换成字符串序列进行分析 方法3:自关联求解 3 小结 0 场景描述 影院座位预定表 T_SEATS 记录了当前座位的预定情况。如有2个人去影院看演唱会,需满足位置紧邻且至少其中一人靠过道…

吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.7-2.8

目录 第四门课 卷积神经网络&#xff08;Convolutional Neural Networks&#xff09;第二周 深度卷积网络&#xff1a;实例探究&#xff08;Deep convolutional models: case studies&#xff09;2.7 Inception 网络&#xff08;Inception network&#xff09;2.8 使 用 开 源 …

云原生(四十九) | WordPress源码部署

文章目录 WordPress源码部署 一、WordPress部署步骤 二、创建项目目录 三、上传源码到WordPress 四、配置安全组 五、配置WordPress 六、访问WordPress WordPress源码部署 一、WordPress部署步骤 第一步&#xff1a;创建项目目录 第二步&#xff1a;上传源码到项目目…

Python知识点:如何使用Airflow进行ETL任务调度

开篇&#xff0c;先说一个好消息&#xff0c;截止到2025年1月1日前&#xff0c;翻到文末找到我&#xff0c;赠送定制版的开题报告和任务书&#xff0c;先到先得&#xff01;过期不候&#xff01; 要使用Apache Airflow进行ETL任务调度&#xff0c;你可以遵循以下步骤&#xff1…

MATLAB计算与建模常见函数:4.插值

插值 什么是插值&#xff1f; 通常实验测量或者采集的数据都是离散数值&#xff1b;插值是指在所给的基准数据情况下&#xff0c;研究如何平滑地估算出基准数据之间其它点的函数数值&#xff1b;一些点的数据无法获得&#xff0c;或者获取这些点的数据代价较高时&#xff0c;…

c++grpc详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一.简介支持的语言使用场景特点 二.传输原理protobuf传输HTTP2.0流和帧 三.grpc的四种模式1.一元RPC模式2.服务端流3.客户端流4.双向流 四.基本流程 一.简介 gRPC …