最近在用 QT 做一个 MAC 上的 Kindle 批注管理软件,遇到的第一个问题就是检测 MAC 上连接的 USB 设备的状态。如果是在 Cocoa 进行开发,会有对应的系统 API 可供使用,但是由于我是在 QT 平台进行的开发,所以无形中加大了一点难度。就在这时,我发现了一个库:libusb
libusb 介绍
libusb 设计了一系列的外部API 为应用程序所调用,通过这些API应用程序可以操作硬件,从libusb的源代码可以看出,这些API 调用了内核的底层接口,和kernel driver中所用到的函数所实现的功能差不多,只是libusb更加接近USB 规范。使得libusb的使用也比开发内核驱动相对容易的多。(From: 百度百科)
0x00 下载 libusb
在 libusb 项目主页(http://libusb.info)我们可以找到最新的源码,下载下来,并且解压。这里我下载的是 libusb-1.0.20.tar.bz2,把它解压出来。
0x01 安装 libusb
cd libusb-1.0.20/
./configure
make
make install
这时就已经在机器上编译安装完成了 libusb
0x02 运行示例程序
cd examples/
make
然后我们看到在 examples/
目录下多了几个可执行程序:
listdevs:列出当前所有的 USB 设备
hotplugtest:USB 热插拔测试
dpfp_threaded:操作 U.are.U 4000b 指纹采集仪的 Demo
dpfp:初始化 U.are.U 4000b 指纹采集仪
sam3u_benchmark:测试 Atmel SAM3U USB 主控的同步传输的性能的 Demo
fxload:USB 固件操作
Usage: fxload [-v] [-V] [-t type] [-d vid:pid] [-p bus,addr] [-s loader] -i firmware
-i <path> -- Firmware to upload
-s <path> -- Second stage loader
-t <type> -- Target type: an21, fx, fx2, fx2lp, fx3
-d <vid:pid> -- Target device, as an USB VID:PID
-p <bus,addr> -- Target device, as a libusb bus number and device address path
-v -- Increase verbosity
-q -- Decrease verbosity (silent mode)
-V -- Print program version
- xusb:USB 测试程序
usage: /Users/jason/Downloads/libusb-1.0.20/examples/.libs/xusb [-h] [-d] [-i] [-k] [-b file] [-l lang] [-j] [-x] [-s] [-p] [-w] [vid:pid]
-h : display usage
-d : enable debug output
-i : print topology and speed info
-j : test c