win7基于libusb在QT中实现USB通讯

第一次写这种文章,不清晰的地方请帮忙指出
QT环境准备
引言
PC环境:window7
网上很多QT的USB访问,使用的是MCVS的环境,我一番使用下来遇到很多问题,
使用C#写USB驱动需要用到LIBUSBDONET这个库,但是这个库需要手动使用内部的工具生成驱动上位机才能访问到,但是我的是标准的HID设备且每次使用都需要安装一下驱动不太适合,所以改用QT使用libusb这个库来绕开这一步直接访问我的HID设备。
做的过程中发现libusb也分好几种方法,像hidapi这个库虽然很方便,但是在WIN7系统上,hid_write方法总是会失败而hid_read正常,查了很久的资料也找不到解决问题的方法。
Libusb0.h这个库也是需要手动用inf-wizard.exe生成驱动之后上位机才能识别,且此工具会更改USB设备的枚举,我的设备正常枚举是这样
在这里插入图片描述

经过inf-wizard.exe生成后,HID这个接口消失,卸载了好几遍驱动才恢复回来。
环境介绍
最后选用libusb1.0这个库
配套的头文件是libusb.h
在这里插入图片描述

QT使用的环境是5.15.2MinGw32bit,MinGw实际上就是GCC编译,所以对应使用后缀.a的lib
在这里插入图片描述

PS:如果使用MCVS的编译器,记得选用liusb-1.0.lib的静态库,最好是32位的。

在QT中导入LIBUSB
我这边的QT是需要ui界面的,所以新建了一个标准的mainwindow的工程,文件结构是
1.放置了需要引用的.a文件和.h文件
2.QT的工程文件
在这里插入图片描述

打开对应的.pro文件,导入libUSB的库,是通过路径索引的方法,导入的方法很多,还是推荐直接填写路径的方法,因为-L的方法有时候会出错,看个人选用。

这种导入.h的方法就不需要在Headers文件中再次导入我们的libusb.h文件直接在代码中
#Include”libusb.h”就可以了,如图所示。
在这里插入图片描述

QT代码部分
USB初始化
1.初始化
在窗口生成的时候,放入USB初始化的语句,若初始化成功,则res变量值为0,这一步如果出现函数解析错误的报错,就需要检查当前libusb库是否跟编译对应,或者将libusb重新生成一遍。

然后对应在窗口关闭时销毁USB

#include "ui_mainwindow.h"
#include "libusb.h"
#include "self_config.h"

#include <stdio.h>
#include <stdlib.h>
#include <qstring.h>
#include <windows.h>
#include <qdebug.h>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    int res;
    res=libusb_init(NULL);
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    libusb_exit(NULL);
    delete ui;
}

USB打印设备
打印所有USB设备,这一步可以检查上位机是否能访问到现在PC上接入的USB设备,如果就要检查是否使用到libusb0.h这种库,因为网上搜索libusb也会搜索到libusb0.h这种库,但是库里面函数名和使用的方法也不一样,几率不是很大,可以用BUS HOUND多多检查。

int find_all_of_devices(void)
{
   
    libusb_device **devs;
    ssize_t cnt;
    cnt = libusb_get_device_list(NULL, &devs);
    print_dev(devs);

}

void print_dev(libusb_device **devs)
{
   
    libusb_device *dev;
        int i = 0, j = 0;
        uint8_t path[8];

        while ((dev = devs[i++]) != NULL)
        {
   
            struct libusb_device_descriptor desc;
            int r = libusb_get_device_descriptor(dev, &desc);
            if (r < 0) {
   
                qDebug("failed to get device descriptor"
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值