Qt下libusb-win32的使用方法
之前一直找不到适合WIN7下的Tiny6410的USB下载软件,正好这几天开始学习USB,所以打算自己写一个专门用于Tiny6410的WIN7下的USB下载软件。
发现了libusb这个库可以用作无驱USB开发,就是说根本不需要了解Window驱动开发的知识就可以开发USB设备驱动,只需要了解一下USB的相关协议即可。Windows下我几乎不用VS来写程序,或者说我不懂MFC吧,呵呵,所示我用Qt来做界面。好了,进入正题。
首先下载libusb-win32,下载地址:http://sourceforge.net/projects/libusb-win32/files/,注意选择下载的文件是libusb-win32-bin-1.2.6.0.zip,这不是源码,而是一些已经编译好的库。解压之,里面有这么一些文件(夹):
下面简单介绍一下里面的东西是怎么用的。
(1)bin文件夹。里面最重要的是inf-wizard.exe这个程序,当你的USB设备插到电脑上而没有找到驱动程序时就可以通过这个程序来安装通用的USB驱动。双击它,下一步,在里面找到你的USB设备,选中后下一步,最后会弹出一个对话框让你保存它生成驱动程序。这样就有了驱动程序,但还没有安装,可以通过设备管理器来安装,安装成功后就可以通过libusb来编写程序来访问你的USB设备了。
(2)examples文件夹。里面有两个例程,一个简单的,一个复杂的,参考里面的bulk.c例程就好了。
(3)include文件夹。编写程序时需要用到,一般放在你的工程目录下。
(4)lib文件夹。里面是一些已经编译好的库,有borland版本的,有VC++版本的,有x64位版本的,最重要的是还有gcc版本,这里用到的就是gcc版本的,该版本可以在Qt上使用。
下面开始介绍怎么在Qt下使用该库。
1. 新建一个Qt工程
2. 把gcc版本的库文件libusb.a复制到工程目录下(可以放在其他目录),在.pro文件中追加如下一行(路径根据自己的情况修改):
LIBS+="F:/Qt/pratise/libusb-test/libusb/libusb.a"
这样就可以在链接时找到所需的函数。
3. 把上面所说的include文件夹下lusb0_usb.h文件复制到工程目录下。
4. 编写一个测试文件,我这里写的比较简单,程序的功能是只列出我的USB设备,如下:
#include "testlibusb.h"
#include "lusb0_usb.h" USB::USB()
{
//usb_set_debug(250);
usb_init(); /* initialize the library */
usb_find_busses(); /* find all busses */
usb_find_devices(); /* find all connected devices */ my_usb_get_device_list(); resize(, );
} void USB::my_usb_get_device_list(void)
{
struct usb_bus *bus;
struct usb_device *dev; for (bus = usb_get_busses(); bus; bus = bus->next) {
for (dev = bus->devices; dev; dev = dev->next) {
/* for specified device
if (dev->descriptor.idVendor == MY_VID
&& dev->descriptor.idProduct == MY_PID)
{
return usb_open(dev);
}
*/ qDebug("VID:VID = %x:%x\n", dev->descriptor.idVendor, dev->descriptor.idProduct); }
} }
好了,运行程序,效果:
最后一行打印出来的正是Tiny6410的USB设备号。
注意:
这只能列出安装了inf-wizard.exe生成的驱动程序的USB设备。一开始的时候我没接上Tiny6410,程序没输出,插上一个U盘,还是没输出,以为是程序或者这个库有问题,纠结了一会,后来灵光一闪,插上开发板试试吧,果然成功了,程序运行结果就如上面所示。
继续学习USB,过2天USB开发板到了就开始实战。
Qt下libusb-win32的使用方法的更多相关文章
- QT Creator引用win32 api类库方法(.lib)
由于Qt Creator使用的是mingW进行程序编译,该编译方式无法识别#pragma comment(lib,"lib\\hvdailt.lib")引用. 所以需要在.Pro文 ...
- Qt下libusb-win32的使用方法(转)
源:Qt下libusb-win32的使用方法 之前一直找不到适合WIN7下的Tiny6410的USB下载软件,正好这几天开始学习USB,所以打算自己写一个专门用于Tiny6410的WIN7下的USB下 ...
- 【转】Qt下使用glut库
ps:这个说的很明白,尤其是win10环境下用mingw环境时编程时碰到的问题, 1.加 windows.h 2.在.pro 添加libs 博文地址:Qt下使用glut库 本人使用的环境 ...
- This application failed to start because it could not find or load the Qt platform plugin “windows”错误解决方法
这是一个困扰我很久的问题,关于Qt下生成的exe文件在没有安装Qt的机器上无法运行的问题.Qt是编写C++图形界面的一个很好工具,比MFC来的直观.可是,Qt的安装却是一个让人头疼的事情.早在上个学期 ...
- QT下资源使用和资源占用…(可以动态加载资源文件,这样不占内存)
原文地址:关于QT下资源使用和资源占用内存过多的问题作者:技术成就梦想 最近研究了一下如何从外部动态调用图片的问题,从而研究了图片资源的使用方法.网上最常见的帖子是这个,感觉总结的还不错. h ...
- paip.c++ qt 项目工程互相引用的方法
paip.c++ qt 项目工程互相引用的方法 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/ ...
- VC++或QT下 高精度 多媒体定时器
在VC编程中,用SetTimer可以定义一个定时器,到时间了,就响应OnTimer消息,但这种定时器精度太低了.如果需要精度更高一些的定时器(精 确到1ms),可以使用下面的高精度多媒体定时器进行代码 ...
- Qt下libusb-win32的使用(转)
源:Qt下libusb-win32的使用(一)打印设备描述符 主要是在前一篇的基础上,学习libusb-win32的API使用.程序很简单,就是打印指定USB设备的设备描述符(当然其他描述符也是可以的 ...
- 关于QT下资源使用和资源占用…
原文地址:关于QT下资源使用和资源占用内存过多的问题作者:技术成就梦想 最近研究了一下如何从外部动态调用图片的问题,从而研究了图片资源的使用方法.网上最常见的帖子是这个,感觉总结的还不错. h ...
随机推荐
- Java如何格式化秒数?
在Java中,如何格式化秒数? 此示例使用SimpleDateFormat类的SimpleDateFormat('ss')构造函数和sdf.format(date)方法格式化秒数. package c ...
- unity---gameScreen 的Stats参数
Unity Stats 面板介绍 原创 2016年06月12日 10:06:12 1544 0 3 Time per frame and FPS (每帧的时间和FPS):处理和渲染一个游戏框架(以及由 ...
- Unity------Unity 脚本基类 MonoBehaviour 与 GameObject 的关系
Unity 脚本基类 MonoBehaviour 与 GameObject 的关系 标签: unity脚本 2017-03-27 12:55 395人阅读 评论(0) 收藏 举报 分类: Unity ...
- CI框架 -- 核心文件 之 Input.php(输入数据处理文件)
class CI_Input { //用户ip地址 protected $ip_address = FALSE; //用户浏览器地址 protected $user_agent = FALSE; // ...
- 一篇关于apache commons类库的详解[转]
1.1. 开篇 在Java的世界,有很多(成千上万)开源的框架,有成功的,也有不那么成功的,有声名显赫的,也有默默无闻的.在我看来,成功而默默无闻的那些框架值得我们格外的尊敬和关注,Jakarta C ...
- Java VM
何时需要理解Java 虚拟机机制 一.排错 二.性能优化 字节码文件的执行流程.机制. 涉及到文件的加载机制(类加载器).执行机制(执行引擎).运行时优化(JIT运行时编译).以及内存分配与垃圾回收. ...
- VOIP NAT穿越之SIP信令穿越
本文原创自 http://blog.csdn.net/voipmaker 转载注明出处. 本文是VOIP通信NAT系列专题的第三篇, 本文论述NAT对SIP协议穿越的影响.SIP协议是基于文本的,而 ...
- DWZ主从表界面唯一性验证(后台验证)(三)
之前的博客介绍了前台自写js来验证主动表的唯一性,除了前台的验证,我也学习了后台的一些判断. 再次介绍一下背景需求: 利用DWZ的主从表结构批量添加课程信息,在提交表单后,触发Action事件 1.是 ...
- 7 切片slice
include 切片 切片的日常用法 切片slice 其本身并不是数组,它指向底层的数组 作为变长数组的替代方案,可以关联底层数组的局部或者 为引用类型. 可以直接创建或从底层数组获取生成. 使用le ...
- snmp简单使用
preface snmp 不多说 环境介绍 1.使用CentOs7的系统,内核版本为3.10.0-123.el7.x86_64 2.ip地址为192.168.56.12 安装snmp 1.yum安装: ...