libusb是一个开源的用C实现的,应用程序与用户的USB设备进行通信的库。它是可移植的,对外使用统一的API,支持Windows、macOS、Linux、Android。它是用户模式(user-mode),应用程序与USB设备通信不需要高权限,但是在Android下好像有些接口需要root权限才能调用成功。它支持所有版本的USB协议。它的License是LGPL,源码地址在https://github.com/libusb/libusb,最新发布版本为1.0.23。

libusb特性:

(1).支持所有的传输类型(control/bulk/interrupt/isochronous)。

(2).传输接口包括同步和异步。

(3).线程安全。

(4).在一些平台上支持热插拔(Hotplug)。

libusb中的接口通常在成功时返回0,在失败时返回负值。

libusb使用stderr记录所有日志(log)。默认情况下,日志记录设置为NONE,将不产生任何输出。除非在编译源码时禁用了日志记录,否则任何应用程序对libusb_set_option(ctx, LIBUSB_OPTION_LOG_LEVEL, level)的调用或在应用程序外部对环境变量LIBUSB_DEBUG的设置都可能生成日志记录。log消息是非结构化的,它与调用接口返回的错误码没有一一对应的关系。

在Windows上编译步骤:在源码的msvc目录下有各种版本的vs工程,2013、2017等等。这里以vs2013为例,打开libusb_2013.sln,然后点击”重新生成解决方案”,便会生成动态库、静态库、及一些二进制文件。仿照原工程所需文件及配置,这里在OpenCV_Test的基础上新加一个libusb工程,编译生成libusb静态库。

在Linux上编译步骤:执行以下命令即可:

./autogen.sh
make

以下为获取PC机上usb设备信息的测试代码:

#include "funset.hpp"
#include <libusb.h>int test_libusb_get_devices_list()
{// reference: examples/listdevs.cint 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;
}

Windows上执行结果如下:

Linux上执行结果如下:

GitHub:https://github.com//fengbingchun/OpenCV_Test

libusb介绍及简单使用相关推荐

  1. 通用usb驱动libusb介绍和使用示例

    小知识: sudo insmod /lib/modules/2.6.22-14-generic/kernel/drivers/usb/serial/usbserial.ko vendor=0x8086 ...

  2. Matplotlib的介绍及简单操作

    Matplotlib的介绍及简单操作 1 什么是Matplotlib 是专门用于开发2D图表(包括3D图表) 以渐进.交互式方式实现数据可视化 2 为什么要学习Matplotlib 可视化是在整个数据 ...

  3. (三)AJAX基本介绍和简单实例03

    (三)AJAX基本介绍和简单实例03-----Ajax与数据库的动态应用 前台显示界面: 选择所有客户之后: 选择其中一个客户---杜森: Demo03.html代码 <html> < ...

  4. rabbitMQ消息队列 – 面板介绍及简单demo

    首先rabbit安装好之后,运维会给一个控制面板. 默认账号密码为guest 登入以后可以看到具体界面. 在此鸣谢百度翻译给予的大力支持.. ###写一个简单的demo 编写之前..虽然说可以直接用底 ...

  5. Protobuf介绍及简单使用(上)

    目录 Protobuf 介绍 优势 protobuf语法 Specifying Field Rules Data type Data name Number Protobuf注释 保留字段与标识符 s ...

  6. SQL Server中追踪器Trace的介绍和简单使用

    原文:SQL Server中追踪器Trace的介绍和简单使用 一.What is Trace? 对于SQL Profiler这个工具相信大家都不是很陌生,没用过的朋友可以在SQL Server Man ...

  7. S3C2440移植linux3.4.2内核之内核框架介绍及简单修改

    文章目录 uboot启动内核分析 简单配置内核 编译内核 设置机器ID 修改晶振 移植Linux3.4.2内核其他文章链接: S3C2440移植linux3.4.2内核之内核框架介绍及简单修改 S3C ...

  8. 新颖的自我介绍_简单新颖的自我介绍范文

    简单新颖的自我介绍范文 简单新颖的自我介绍范文1 各位考官好,今天能够站在这里参加面试,有机会向各位考官请教和学习,我感到非常的荣幸.希望通过这次面试能够把自己展示给大家,希望大家记住我.我叫.... ...

  9. Quartz框架实现定时任务介绍及简单使用

    https://blog.csdn.net/bicheng4769/article/details/81097305 Quartz框架介绍及简单使用 https://www.cnblogs.com/d ...

最新文章

  1. 【Spark】Spark2.x版的新特性
  2. 暗网 tor溯源困难根因——用户的请求会在分布全球的主机随机跳转三次,最终才到达服务器,这就造成了溯源的极其困难...
  3. iPhone X掉漆愈演愈烈?手机变成刮刮乐
  4. Phpcms之核心目录phpcms
  5. [JQuery] jQuery选择器ID、CLASS、标签获取对象值、属性、设置css样式
  6. ABP Framework:移除 EF Core Migrations 项目,统一数据上下文
  7. 又跑回去拿的即时通讯
  8. iOS开发之控制器创建与加载(生命周期)
  9. 微信统一下单需注意问题
  10. 【语音识别】基于matlab GUI HMM 0~9数字和汉字语音识别(带面板)【含Matlab源码 1716期】
  11. CAD常用字体库大全
  12. 网购中7天无理由退货、运费险及退货退款流程图
  13. Linux文字游戏制作软件,小精灵美化app
  14. [Android Studio] 添加Override/Implement methods
  15. 思科模拟器的常用命令
  16. 俞敏洪演讲:不要为眼前的得失而抓狂 zt
  17. getway 的session相关
  18. 程序员申请加班调休被HR拒绝:996是行规,不想加班就趁早走人!
  19. oracle sql常用的函数,界别Oracle和SQL Server常用函数
  20. python猪代码_猪圈密码python脚本实现

热门文章

  1. Element DatePicker 日期选择器禁用单个指定日期
  2. JavaSE学习摘要
  3. java jsf_eclipse搭建JSF简单示例的教程(亲测)
  4. 线性规划问题可行域中的极点、方向与最优解
  5. 黑马程序员pink老师前端h5(html5)+css3(16)P94-P104伪类选择器上并集选择器子选择器后代选择器emmet语法生成标签快速格式化代码复合选择器简介
  6. 解决“javac”提示不是内部或外部命令的问题
  7. 告别公共网盘,用闲置电脑或个人工作PC建立私有云超级网盘!
  8. 关于心跳ajax请求pending状态(被挂起),stalled时间过长的问题。涉及tcp连接异常。
  9. linux 卸载nexus,Linux下安装maven和nexus
  10. chrom浏览器模拟手机访问