Qt读写Usb设备的数据

Qt读写Usb设备的数据

  • 问题:要读取usb设备进行通讯,qt好像没有对应的库支持。
  • 解决:
    • libusb
      • window下载 :
      • Linux下载:
    • QtUsb 开源的第三方库
      • 库里面的函数说明:
      • window版本:
      • Linux中也提供的直接下载
      • 测试代码:
      • 库下载:

问题:要读取usb设备进行通讯,qt好像没有对应的库支持。

解决:

libusb

查看到,基本上使用的都是libusb这库,这个库是支持跨平台的,C语言的库。
官网 http://libusb.info/可以下载到,如下图:
在这里插入图片描述
可以下载源代码,和.7z后缀的window版本的库。

还有的是github的地址:https://github.com/libusb/libusb,如图:
在这里插入图片描述
可以下载对应的源码进行编译。里面有configure文件,编译用的。下载对应的依赖就行。

window下载 :

直接下载对应的relase版本的.7z文件就可以了。

Linux下载:

sudo apt-get install libusb-1.0-0-dev

可以使用对应的API与usb进行数据通讯。

QtUsb 开源的第三方库

dithub地址:https://github.com/fpoussin/QtUsb

这里面库,可以看到有依赖,libusb,hidapi这两个库。

库里面的函数说明:

地址:https://fpoussin.github.io/doxygen/qtusb/0.7.x/qusbendpoint.html

window版本:

提供了msvc编译器版本的直接的下载:
在这里插入图片描述

Linux中也提供的直接下载

不过我在使用Linux中的时候出现了问题,直接下载老是失败。只能是自己编译源代码了。

在这里插入图片描述
需要下载依赖:
libusb-1.0-0-dev, libhidapi-dev and pkg-config

不过我是编译成静态库,方便移动。

测试代码:

#include <QObject>
#include <QCoreApplication>
#include <QtSerialPort/QSerialPort>
#include <QUsbDevice>
#include <QUsbEndpoint>#include <QByteArray>
#include <QDebug>const quint8 USB_ENDPOINT_IN = 0x81; /* Bulk output endpoint for responses */
const quint8 USB_ENDPOINT_OUT = 0x01; /* Bulk input endpoint for commands */
const quint16 USB_TIMEOUT_MSEC = 300;class UsbTest : public QObject
{Q_OBJECT
public:UsbTest():m_write_ep(nullptr),m_read_ep(nullptr){usb = new QUsb;connect(usb,&QUsb::deviceInserted,[this](QUsb::Id id){qDebug()<<id;if(id.pid == 0x5721){m_filter = id;if (this->openDevice()) {qInfo("Device open!");this->write();} else {qWarning("Could not open device!");}}});m_usb_dev = new QUsbDevice(this);for(auto& elem : usb->devices()){if(elem.pid == 0x5721){m_filter = elem;m_usb_dev->setId(m_filter);m_config.alternate = 0;m_config.config = 1;m_config.interface = 0;m_usb_dev->setConfig(m_config);if (this->openDevice()) {qInfo("Device open!");this->write();} else {qWarning("Could not open device!");}}}for(int i=0;i<513;i++)m_send.append(static_cast<char>(i%10));}bool openDevice(){qDebug("Opening");if (m_usb_dev->open() == QUsbDevice::statusOK) {// Device is openreturn this->openHandle();}return false;}bool openHandle(){if(m_read_ep){disconnect(m_read_ep, SIGNAL(readyRead()), this, SLOT(onReadyRead()));disconnect(m_write_ep, SIGNAL(bytesWritten(qint64)), this, SLOT(onWriteComplete(qint64)));delete m_read_ep;delete m_write_ep;}qDebug("Opening Handle");bool a = false, b = false;m_read_ep = new QUsbEndpoint(m_usb_dev, QUsbEndpoint::bulkEndpoint, USB_ENDPOINT_IN);m_write_ep = new QUsbEndpoint(m_usb_dev, QUsbEndpoint::bulkEndpoint, USB_ENDPOINT_OUT);connect(m_read_ep, SIGNAL(readyRead()), this, SLOT(onReadyRead()));connect(m_write_ep, SIGNAL(bytesWritten(qint64)), this, SLOT(onWriteComplete(qint64)));a = m_read_ep->open(QIODevice::ReadOnly);if (a) {m_read_ep->setPolling(true);}b = m_write_ep->open(QIODevice::WriteOnly);return a && b;}void write(){if(!m_write_ep) return;qDebug()<<"写的状态:"<<m_write_ep->status();//if(m_write_ep->status() != QUsbEndpoint::transferCompleted)//    return;qDebug() << "Writing" << m_send << m_send.size();if (m_write_ep->write(m_send.constData(), m_send.size()) < 0) {qWarning("write failed");}}
public slots:void onReadyRead(){qDebug()<<"读取数据:"<<m_read_ep->readAll();}void onWriteComplete(qint64 id){qDebug()<<"onWriteComplete:"<<id;}private:QUsb* usb;QUsbDevice *m_usb_dev;QUsb::Id m_filter;QUsb::Config m_config;QByteArray m_send, m_recv;QUsbEndpoint *m_read_ep, *m_write_ep;
};

库下载:

版本:ubantu22.04 ,libusb 1.0 ,静态库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/62192.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024最新python使用yt-dlp

2024最新python使用yt-dlp下载YT视频 1.获取yt的cookie1&#xff09;google浏览器下载Get cookies.txt LOCALLY插件2&#xff09;导出cookie 2.yt-dlp下载[yt-dlp的GitHub地址](https://github.com/yt-dlp/yt-dlp?tabreadme-ov-file)1&#xff09;使用Pycharm(2024.3)进行代码…

python学opencv|读取图像

【1】引言 前序学习了使用matplotlib模块进行画图&#xff0c;今天开始我们逐步尝试探索使用opencv来处理图片。 【2】学习资源 官网的学习链接如下&#xff1a; OpenCV: Getting Started with Images 不过读起来是英文版&#xff0c;可能略有难度&#xff0c;所以另推荐一…

27加餐篇:gRPC框架的优势与不足之处

gRPC作为一个现代的、开源的远程过程调用(RPC)框架,在多个方面都展现了其优雅之处,同时也存在一些不足之处。这篇文章我们就相对全面的分析一下gRPC框架那些优雅的地方和不足的地方。 优雅的地方 gRPC作为一个RPC框架,在编码、传输协议已经支持多语言方面都比较高效,下…

linux模拟HID USB设备及wireshark USB抓包配置

文章目录 1. 内核配置2. 设备配置附 wireshark USB抓包配置 linux下模拟USB HID设备的简单记录&#xff0c;其他USB设备类似。 1. 内核配置 内核启用USB Gadget&#xff0c;使用fs配置usb device信息。 Device Drivers ---> [*] USB support ---><*> USB …

Ubuntu20.04运行R-VIO2

目录 1.环境配置2.构建项目3. 运行 VIO 模式4.结果图 1.环境配置 CMakeLists.txt中 C 使用 14、opencv使用4 2.构建项目 克隆代码库&#xff1a; 在终端中执行以下命令克隆项目&#xff1a;git clone https://github.com/rpng/R-VIO2.git编译项目&#xff1a; 使用 catkin_m…

基于YOLOv8深度学习的智慧课堂教师上课行为检测系统研究与实现(PyQt5界面+数据集+训练代码)

随着人工智能技术的迅猛发展&#xff0c;智能课堂行为分析逐渐成为提高教学质量和提升教学效率的关键工具之一。在现代教学环境中&#xff0c;能够实时了解教师的课堂表现和行为&#xff0c;对于促进互动式教学和个性化辅导具有重要意义。传统的课堂行为分析依赖于人工观测&…

wireshark基础

免责声明&#xff1a; 笔记的只是方便各位师傅学习知识&#xff0c;以下代码、网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 泷羽sec官网&#xff1a;https://longyusec.com/ 泷羽sec B站地址&#xff1a;https:/…

单例模式入门

单例模式是一种创建型设计模式&#xff0c; 让你能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。 它的运作方式是这样的&#xff1a; 如果你创建了一个对象&#xff0c; 同时过一会儿后你决定再创建一个新对象&#xff0c; 此时你会获得之前已创建的…

圆域函数的傅里叶变换和傅里叶逆变换

空域圆域函数的傅里叶变换 空域圆域函数&#xff08;也称为空间中的圆形区域函数&#xff09;通常指的是在二维空间中&#xff0c;以原点为中心、半径为 a a a的圆内取值为1&#xff0c;圆外取值为0的函数。这种函数可以表示为&#xff1a; f ( x , y ) { 1 if x 2 y 2 ≤ …

【大模型】深度解析 NLP 模型5大评估指标及 应用案例:从 BLEU、ROUGE、PPL 到METEOR、BERTScore

在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;无论是机器翻译、文本生成&#xff0c;还是问答系统开发&#xff0c;模型性能评估指标始终是开发者绕不开的工具。BLEU、ROUGE、PPL&#xff08;困惑度&#xff09;、METEOR 和 BERTScore 是五个最具代表性的指标&am…

黑马程序员Java项目实战《苍穹外卖》Day01

苍穹外卖-day01 课程内容 软件开发整体介绍苍穹外卖项目介绍开发环境搭建导入接口文档Swagger 项目整体效果展示&#xff1a; ​ 管理端-外卖商家使用 ​ 用户端-点餐用户使用 当我们完成该项目的学习&#xff0c;可以培养以下能力&#xff1a; 1. 软件开发整体介绍 作为一…

Java高级特性 - IO流

第1关 什么是IO流 BC,C 第2关 字节流-输入输出 第3关 字符流 - 输入输出 第4关 复制文件

BERT 详解

BERT简介 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是由 Google 在 2018 年提出的一种预训练语言模型。BERT 在自然语言处理&#xff08;NLP&#xff09;领域取得了重大突破&#xff0c;因为它能够有效地捕捉文本的上下文信息&am…

LLM大模型意图识别:分类算法lora训练案例

参考&#xff1a; https://blog.csdn.net/weixin_42357472/article/details/141134380 &#xff08;LLaMA-Factory 微调训练&#xff09; https://modelscope.cn/competition/54/summary?seasonId56 https://github.com/coggle-club/notebooks/blob/main/notebooks/llm/RAG-BM…

(计算机网络)期末

计算机网络概述 物理层 信源就是发送方 信宿就是接收方 串行通信--一次只发一个单位的数据&#xff08;串行输入&#xff09; 并行通信--一次可以传输多个单位的数据 光纤--利用光的反射进行传输 传输之前&#xff0c;要对信源进行一个编码&#xff0c;收到信息之后要进行一个…

Rk3588 onnx转rknn,出现 No module named ‘rknn‘

一、操作步骤&#xff1a; rk3588 需要将yolo11 的模型onnx转rknn。 https://github.com/airockchip/rknn_model_zoo/tree/main/examples/yolo11 这个是用yolo11训练的模型&#xff0c;有80种类型。 完整下载下来后&#xff0c;在按文档描述下载模型下来&#xff1a; 然后进…

DDR3与MIG IP核详解(一)

一、ddr3(全称第三代双倍速率同步动态随机存储器)&#xff1a; 1、特点&#xff1a;1&#xff1a;掉电无法保存数据&#xff0c;需要周期性的刷新。2:时钟上升沿和下降沿都会传输数据。 3&#xff1a;突发传输&#xff0c;突发长度 Burst Length一般为…

多模态和大模型原理

一、图文匹配原理 Clip 通过图像编码器和照片编码器将两者区分成N项&#xff0c;然后让它们相互内积&#xff0c;能够匹配得上的则内积值为1&#xff0c;不能够匹配上的则内积为-1&#xff0c;也就是负样本&#xff0c;如上图&#xff0c;除了对角线的正样本&#xff0c;周围…

15 go语言(golang) - 并发编程goroutine原理及数据安全

底层原理 Go 的 goroutine 是一种轻量级的线程实现&#xff0c;允许我们在程序中并发地执行函数。与传统的操作系统线程相比&#xff0c;goroutine 更加高效和易于使用。 轻量级调度 用户态调度&#xff1a;Go 运行时提供了自己的调度器&#xff0c;这意味着 goroutine 的创建…

Flink细粒度的资源管理

Apache Flink致力于为所有应用程序自动导出合理的默认资源需求。对于希望根据其特定场景微调其资源消耗的用户,Flink提供了细粒度的资源管理。这里我们就来看下细粒度的资源管理如何使用。(注意该功能目前仅对DataStream API有用) 1. 适用场景 使用细粒度的资源管理的可能…