QT Creater与libusb使用
新建一个C项目,然后修改.pro文件,添加LIBS一行
TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt LIBS += "D:\Projects\qt\usbtest\libusb.a" SOURCES += main.c
源码:
#include <stdio.h>
#include "lusb0_usb.h" #define MY_VID 0x04f3
#define MY_PID 0x0103
#define m_dev_DATA_SIZE 8 /* Number of bytes to get at once */ usb_dev_handle * my_usb_get_device_list(void)
{
char str[];
struct usb_bus *bus;
struct usb_device *dev;
usb_dev_handle *udh; for (bus = usb_get_busses(); bus; bus = bus->next) {
for (dev = bus->devices; dev; dev = dev->next) {
printf("VID:PID = %x:%x\n", dev->descriptor.idVendor, dev->descriptor.idProduct);
if ((dev->descriptor.idVendor == MY_VID) && (dev->descriptor.idProduct == MY_PID))
{
udh = usb_open(dev);
printf("dev opened: %s\n", dev->filename);
printf("Device Protocol : %d\n",dev->descriptor.bDeviceProtocol);
printf("Report Length : %d\n",dev->descriptor.bLength);
printf("Decriptor Type : %d\n",dev->descriptor.bDescriptorType);
printf("End Points : %d\n",dev->config->interface->altsetting->bNumEndpoints);
printf("Interface Class : %d\n",dev->config->interface->altsetting->bInterfaceClass);
printf("Protocol : %d\n",dev->config->interface->altsetting->bInterfaceProtocol);
printf("Interface Number: %d\n",dev->config->interface->altsetting->bInterfaceNumber);
printf("Device Filename : %s\n",dev->filename); usb_get_string_simple(udh, dev->descriptor.iManufacturer, str, sizeof(str));
printf("Device Manfucaturer : %s\n", str);
usb_get_string_simple(udh, dev->descriptor.iProduct, str, sizeof(str));
printf("Product Name : %s\n", str);
usb_get_string_simple(udh, dev->descriptor.iSerialNumber, str, sizeof(str));
printf("Device Serial Number: %s\n", str);
printf("End point addresses : 0x%x\n",dev->config->interface->altsetting->endpoint->bEndpointAddress); return udh;
}
}
} return NULL;
} int main(void)
{
int ret, i;
char data[m_dev_DATA_SIZE] = {};
char data_zero[m_dev_DATA_SIZE] = {};
usb_dev_handle *udh;
//char ShiftMouseScrollDown1[] = {0x02,0xf3,0xff}; memset(data_zero, , m_dev_DATA_SIZE); usb_init(); /* initialize the library */
printf("buses:%d\n", usb_find_busses()); /* find all busses */
printf("devices:%d\n", usb_find_devices()); /* find all connected devices */ udh = my_usb_get_device_list();
if (!udh) {
printf("usb dev handle is NULL\n");
} if(usb_set_configuration(udh, ) < )
{
printf("Could not set configuration\n");
usb_close(udh);
return ;
} if(usb_claim_interface(udh, ) < ) //claim_interface 0指向第一个设备
{
printf("Could not claim interface\n");
usb_close(udh);
return ;
} while()
{
ret = usb_interrupt_read(udh, 0x81, data, m_dev_DATA_SIZE, );
if (!memcmp(data, data_zero, m_dev_DATA_SIZE)) {
continue;
}
printf("%02X ", (unsigned char)(data[]));
//printf("%c", (unsigned char)(data[2])-4+'a');
} usb_release_interface(udh, );
usb_close(udh);
printf("m_dev closed\n"); printf("END!\n"); return ;
}
需要将libusb0.dll和libusb0.sys添加到Sytem32目录下面去,否则运行就列机。
这时上面的程序还不能打印出USB设备来,是因为还需要安装USB的驱动。
运行下载文件夹中的bin/inf-wizard应用程序,选中你的USB设备然后一步一步地next,最后install,就可以了。
再次运行上面的源码编译得的程序,就可以看到真正的枚举输出了。
输入abcdefg时的反应:
另外参考:http://www.embed-net.com/thread-18-1-1.html
QT Creater与libusb使用的更多相关文章
- Qt Creater中的.pro文件和.pri文件
初学Qt,使用Qt Creater打开Demo "QT 3D Basic Shapes C++ Example",发现除了pro文件外,还有一个pri文件,在此小白一下! *.pr ...
- Qt Creater之hello world
下载Qt Creater,博主是Qt5.2.0版本: 15:17:16 打开界面,选择文件新项目, 文件名:hellodemo: 生成的文件有.pro时项目文件,包含项目的信息,mainwindow. ...
- Qt Creater中Clang-format的使用
起因在于习惯性的想格式化代码,发现Qt Creater默认居然是没有代码格式化的,只有一个缩进,搞毛线啊!!! 搜索了下,倒是很容易就搜到了,Qt Creater中有个插件:beautifier,在 ...
- QT Creater 配色方案及下载
打开QT Creater的工具--选项--文本编辑器--字体和颜色,复制一份配色方案:Vim (dark) ->Vim (dark) (copy) 更改想更改的任何内容的配色.其中,修改后的文件 ...
- Qt 4.8.5 + MinGW32 + Qt creater 安装
Qt 4.8.5 + MinGW32 + Qt creater 安装 下载文件 文件版本 Qt 4.8.5 MinGW 0.4.4 Qt Creator 2.8或2.8.1 gdb-7.4-MinGW ...
- 1.1 Qt Creater使用Python开发桌面软件的操作流程
Qt Creater及Python的下载与安装过程不再赘述,读者可自行在网上搜索相应的下载与安装方法. 首先我们打开Qt Creater,单击"Create Project"按钮或 ...
- QT Creater环境搭建
需要的软件包: 1.qt-win-opensource-4.8.5-mingw.exe //Qt库 2.MinGW-gcc440_1.zip //QT编译器 3.qt-creator-opensour ...
- QT Creater + vs2010 发布程序
这几天帮同学写了个简单的gui应用,用的qt5.0.2_msvc2010.写的程序需要在一台没有装过vs和qt的机子上运行. 在release下编译运行通过后,把相应的依赖dll加入到exe相同的文件 ...
- Qt Creater 制作汽车仪表盘
最近项目用到了模拟仪表,网上下载大神编写的按个仪表Meter没有成功 转战 QWt 编译后,在creater中仍然无法使用,只可以在代码中使用 百度说是我编译的版本不对 扔到 开始做自己的 这个用到了 ...
随机推荐
- SSH深度历险记(八) 剖析SSH核心原则+Spring依赖注入的三种方式
于java发育.一类程序猿必须依靠类的其他方法,它是通常new依赖类的方法,然后调用类的实例,这样的发展问题new良好的班统一管理的例子.spring提出了依赖注入的思想,即依赖类不由程 ...
- POJ1080 Human Gene Functions 动态规划 LCS的变形
题意读了半年,唉,给你两串字符,然后长度不同,你能够用'-'把它们补成同样长度,补在哪里取决于得分,它会给你一个得分表,问你最大得分 跟LCS非常像的DP数组 dp[i][j]表示第一个字符串取第i个 ...
- -Android的发展webservice-号码归属地查询
代码地址:http://download.csdn.net/detail/jiangliqing1234/8027039 流程具体解释:http://blog.csdn.net/lyq8479/art ...
- RSA JS 加密解密DEMO
<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script&g ...
- springmvc集成Ueditor插件实现图片上传2、
一.下载Ueditor插件. 地址:http://ueditor.baidu.com/website/download.html 二.环境搭建. 具体可以参看http://fex.baidu.com/ ...
- UIBarButtonItem 小记边
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ3poZW4xOTkwMDcwMQ==/font/5a6L5L2T/fontsize/400/ ...
- Android批量图片加载经典系列——使用二级缓存、异步网络负载形象
一.问题描写叙述 Android应用中常常涉及从网络中载入大量图片,为提升载入速度和效率,降低网络流量都会採用二级缓存和异步载入机制.所谓二级缓存就是通过先从内存中获取.再从文件里获取,最后才会訪问网 ...
- 14行脚本配置Linux下一个Java环境变量
供Java人们刚开始学习.多半Java它需要花费大量的精力在开发环境的配置,于Linux下一个,构造Java环境变量,很可能加入这一努力. 为此,我做了一个bash脚本来配置自己主动Java环境变量. ...
- MVC自定义配置
ASP.NET 5 入门 (2) – 自定义配置 ASP.NET 5 理解和入门 建立和开发ASP.NET 5 项目 初步理解ASP.NET5的配置 正如我的第一篇文章ASP.NET 5 (vNext ...
- ASP.NET MVC学习之控制器篇扩展性
原文:ASP.NET MVC学习之控制器篇扩展性 一.前言 在之前的一篇随笔中已经讲述过控制器,而今天的随笔是作为之前的扩展. 二.正文 1.自定义动作方法 相信大家在开发过程一定会遇到动作方法的重名 ...