下载和安装libusb-1.0

在Ubuntu15中可以从软件仓库安装libusb,当前的libusb版本为1.0。可以使用如下命令安装libusb的全部内容。
$sudo apt-get install libusb*
在Ubuntu15.04中,libusb-1.0的头文件和库文件分别被安装在“/usr/include/libusb-1.0”“/usr/lib/x86_64-linux-gnu”目录下。

Qt Creator配置和使用libusb-1.0

使用Qt Creator创建项目,然后在工程文件(*.pro)中添加如下内容:

INCLUDEPATH += /usr/include/libusb-1.0
LIBS += -L"/usr/lib/x86_64-linux-gnu" -lusb-1.0
  • 1
  • 2

测试程序

一个打开、关闭、读写USB HID设备的示例代码如下。
qtusbtes.h

#ifndef QTUSBTES_H
#define QTUSBTES_H #include <QMainWindow>
#include <libusb.h> namespace Ui {
class QtUSBTes;
} class QtUSBTes : public QMainWindow
{
Q_OBJECT public:
explicit QtUSBTes(QWidget *parent = 0);
~QtUSBTes(); private slots:
void on_pushButton_clicked(); void on_pushButton_2_clicked(); private:
Ui::QtUSBTes *ui;
struct libusb_config_descriptor *conf_desc;
quint8 endpoint_in, endpoint_out;
libusb_device *dev;
int OutSize;
libusb_device_handle *handle; void print_devs(libusb_device **devs);
}; #endif // QTUSBTES_H

qtusbtes.cpp

#include "qtusbtes.h"
#include "ui_qtusbtes.h"
#include <QDebug> QtUSBTes::QtUSBTes(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::QtUSBTes)
{
ui->setupUi(this); ui->pushButton_2->setText("打开");
} QtUSBTes::~QtUSBTes()
{
delete ui;
} void QtUSBTes::on_pushButton_clicked()
{
unsigned char intTransData[2] = {0xAA, 0x55};
OutSize = sizeof(intTransData);
int intTrans = libusb_interrupt_transfer(handle, endpoint_in, intTransData, OutSize, &OutSize, 5000);
if (intTrans >= 0)
{
;
}
else
{
return;
}
intTransData[0] = 0x01; /**< 如果使用了 REPORT_ID 则 USB 发送数据缓冲区第一个字节必须为 REPORT_ID 以告知系统该数据属于哪个 ID */
intTransData[1] = 0x01;
intTrans = libusb_interrupt_transfer(handle, endpoint_out, intTransData, OutSize, &OutSize, 5000);
if (intTrans >= 0)
{
;
}
else
{
return;
}
intTransData[0] = 0x02; /**< 如果使用了 REPORT_ID 则 USB 发送数据缓冲区第一个字节必须为 REPORT_ID 以告知系统该数据属于哪个 ID */
intTransData[1] = 0x01;
intTrans = libusb_interrupt_transfer(handle, endpoint_out, intTransData, OutSize, &OutSize, 5000);
if (intTrans >= 0)
{
;
}
else
{
return;
}
intTrans = intTrans;
OutSize = OutSize;
} void QtUSBTes::on_pushButton_2_clicked()
{
if("打开"==ui->pushButton_2->text())
{
ui->pushButton_2->setText("关闭"); int r; r = libusb_init(NULL);
if (r < 0)
return; handle = libusb_open_device_with_vid_pid(NULL, 1155, 22352);
dev = libusb_get_device(handle); libusb_get_config_descriptor(dev, 0, &conf_desc);
for(int i=0; i<conf_desc->bNumInterfaces; i++)
{
for (int j=0; j<conf_desc->interface[i].num_altsetting; j++)
{
for (int k=0; k<conf_desc->interface[i].altsetting[j].bNumEndpoints; k++)
{
const struct libusb_endpoint_descriptor *endpoint = &conf_desc->interface[i].altsetting[j].endpoint[k];
if (endpoint->bEndpointAddress & LIBUSB_ENDPOINT_IN)
{
endpoint_in = endpoint->bEndpointAddress;
}
else
{
endpoint_out = endpoint->bEndpointAddress;
}
}
}
}
r = libusb_set_configuration(handle, 1);
if (r < 0)
return;
libusb_get_config_descriptor(dev, 0, &conf_desc);
ui->pushButton->setEnabled(true);
}
else
{
ui->pushButton_2->setText("打开");
libusb_free_config_descriptor(conf_desc);
libusb_close(handle);
libusb_exit(NULL);
ui->pushButton->setEnabled(false);
}
}

运行界面如下:

Ubuntu15下Qt+libusb开发的更多相关文章

  1. arm-linux下qt + opencv开发环境的搭建(Altera DE1 Soc)

    arm-linux-gnueabihf-gcc下载 qt下载 arm-linux下qt + opencv开发环境的搭建(Altera DE1 Soc) Ubuntu 16.04 安装QT arm嵌入式 ...

  2. 初学Qt——vs2012开发环境下的窗体跳转

    最近接了份外快,要求使用vs+qt开发一个简单的数据管理系统.qt开发使用的语言是c++,然而c++只是大一第二学期有教过而已,基本也差不多忘光了,废话不多说,讲下今天遇到的问题吧 如标题所说,窗体跳 ...

  3. 关于 Windows 下 Qt 开发,这个问题必须要搞清楚!

    小伙伴们,大家好,小北师兄又来喂饭啦,从上次写完<一个例子让你秒懂 Qt Creator 编译原理>后,师兄对于 Qt 的一些环境配置有了更深的理解,这对师兄进行 Qt 的后续学习起到了很 ...

  4. Qt官方开发环境生成的exe发布方式--使用windeployqt(windeployqt是单独的程序,放在低版本qt4目录下也可以运行的)

    Qt 官方开发环境使用的动态链接库方式,在发布生成的exe程序时,需要复制一大堆 dll,如果自己去复制dll,很可能丢三落四,导致exe在别的电脑里无法正常运行.因此 Qt 官方开发环境里自带了一个 ...

  5. 关于windows下QT以及QT creator的安装

    普及  之  windows下qt的安装及配置   qt介绍 : Qt,分为商业.开源两个版本,商业版需要花钱购买license,而开源版本则遵守GPL协议,提供了源码,用户需要自行编译,才能生产动态 ...

  6. linux下QT Creator常见错误及解决办法

    最近因为在做一个关于linux下计算机取证的小项目,需要写一个图形界面,所以想到了用QT来写,选用了linux下的集成开发环境QT Creator5.5.1,但刚刚安装好,竟然连一个"hel ...

  7. ubuntu 安装 OpenCv 及其Qt的开发环境配置

    ubuntu安装opencv (1)安装编译opencv的环境 sudo apt-get -y install build-essential cmake pkg-config (2)安装Image ...

  8. centos 下 Qt Creator 的安装使用

    centos 下 Qt Creator 的安装使用 Qt 以其开源,免费,完全面向对象(很容易扩展),允许真正的组件编程以及可移植跨平台等诸多优势得到越来越多的开发人员的青睐.Qt Creator 是 ...

  9. Linux下Qt的安装与配置

    参考资料:http://www.cnblogs.com/emouse/archive/2013/01/28/2880142.html Linux 下编译.安装.配置 QT 下载qt 这里用的是4.7. ...

随机推荐

  1. 5.jQuery之栏切换

    <style> * { margin: 0; padding: 0; } li { list-style-type: none; } .tab { width: 978px; margin ...

  2. HRBUST 1849 商品中心

    vjudge 智商掉线... 可以发现一条边能贡献其他点当且仅当两点路径上这个边权值最小,所以如果按照边权从大到小加边,每加一条边就会合并两个联通块,那么一个联通块内的点到另一个联通块的点的权值就都是 ...

  3. Java的GUI框架如何选择? Swing、SWT、AWT、SwingX、JGoodies、JavaFX、Apache Pivot、BeautyEye框架(美观)?

    AWT 是swing的基础,运行良好,但缺少高级组件.如果您打算创建丰富的应用程序,那么AWT可能不是最好的方法.但是对于不需要丰富用户界面的较小gui应用程序来说.这可能非常适合,因为它是一个久经考 ...

  4. [PyQt5]动态显示matplotlib作图(一)

    完整实例 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QVBoxLayout, QSizePoli ...

  5. 扫描全能王 v5.13.0.20190916 去水印和广告版

    说明 1.先安装1(安装完不要打开),再安装2,然后打开2,参考下图: 2.不要登录扫描全能王账号,否则会导致失败! 3.激活完成后可以卸载2 下载地址 城通网盘 蓝奏云(仅含1) 百度网盘 另外口袋 ...

  6. TanksWar(坦克大战三维、二维版以及90版)

    本文已迁移至:https://coco56.blog.csdn.net/article/details/103198945

  7. RedHat7安装yum工具

    一                   RedHat7安装yum工具 1.1        查看yum是否可用 yum list yum repolist 1.2        卸载原yum rpm ...

  8. centos7下通过LVS的DR模式实现负载均衡访问

    一.两台服务器作为real server ,一台作为director director:172.28.18.69 vip:172.28.18.70 real server1:172.28.18.71 ...

  9. CSS3 transform 属性 旋转 div 元素

    div { transform:rotate(7deg); -ms-transform:rotate(7deg); /* IE 9 */ -moz-transform:rotate(7deg); /* ...

  10. Codeforces 909 substr用法 思维合并线段目标最少 Py语句逆推DP vecrtor缩点删不同颜色点模拟 拓扑排序处理任务

    A str.substr(i,j) 从str[i]开始起取j个字符作为返回的字符串 /* Huyyt */ #include <bits/stdc++.h> using namespace ...