QT实现USB通讯

这篇具有很好参考价值的文章主要介绍了QT实现USB通讯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.概述

QT实现USB通讯这里主要介绍两种方法,一种是通过libusb库来实现usb通讯,一种是通过hidapi库实现通信。

1.介绍libusb库

libusb 是一个 C 库,提供对 USB 设备的通用访问。

可移植的:使用单个跨平台API,它可以访问Linux,macOS,Windows等上的USB设备。

用户模式:应用程序与设备通信不需要特殊特权或提升。

版本无关:支持从 1.0 到 3.1(最新)的所有 USB 协议版本。

代码下载:

libusb GIT仓库:https://github.com/libusb/libusb.git

libusb API接口:https://libusb.sourceforge.io/api-1.0/

libusb 示例:https://github.com/libusb/libusb/tree/master/examples

2.hidapi库介绍

hidapi是一个开源的库,用于与HID (人机接口设备) 类设备进行通信,支持Windows、Linux、FreeBSD和Mac OS X等操作系统。它提供了一个C语言的API,使得开发者可以轻松地与HID类设备进行交互。

hidapi是一个跨平台的库,这意味着你可以使用相同的代码来与不同操作系统上的HID设备进行通信。

hidapi的源代码遵循MIT许可,使得开发者可以自由地使用和修改。

代码下载:

https://gitcode.com/libusb/hidapi/tree/master

3.libusb和hidapi库的区别与选择

他们都是用于处理USB设备的库,但它们有一些关键的区别:

首先,libusb是一个通用的USB设备库,主要用于与USB设备进行通信。它可以用来与大部分USB设备进行数据传输,包括设备配置、数据传输等。libusb提供了对USB设备的底层访问和控制,使得开发者可以编写更复杂的USB设备驱动程序或应用程序。

相比之下,hidapi是一个专门针对HID类设备的库。HID类设备包括键盘、鼠标、触控板等输入设备。hidapi主要用于这些设备的通信和控制,它依赖于libusb库,并提供了更高级别的抽象和接口,使得开发者可以更方便地与这些设备进行交互。

总的来说,如果你需要与USB设备进行底层通信和控制,libusb可能更适合你的需求。而如果你需要与HID类设备进行交互,例如编写一个与鼠标或键盘交互的应用程序,那么hidapi可能更加方便和高效。

二.libusb代码示例

1.头文件

#include "libusb.h"

2.代码示例

#define VENDOR_ID (0x046D)

#define PRODUCT_ID (0xC31D)

int kernelDriverDetached = 0;

unsigned char data_in[64]={0};

int length = 0;

int r,j;

libusb_device_handle *handle;

handle = libusb_open_device_with_vid_pid(NULL, vendor_id, product_id);

if (handle == NULL)

{

    qDebug()<<"libusb_open() failed\n";

    return -1;;

}

/*驱动必须解绑定,否则数据由驱动程序处理*/

if(libusb_kernel_driver_active(handle, 1))

{

    qDebug()<<"Kernel Driver Active\n";

    r = libusb_detach_kernel_driver(handle, 1);

    if (r == 0)

    {

        qDebug()<<"Detach Kernel Driver\n";

        kernelDriverDetached = 1;

    }

    else

    {

        qDebug()<<"Error detaching kernel driver:"<<r;

        return -1;;

    }

}

/* 指定当前接口 */

r = libusb_claim_interface(handle, 0);

if (r != 0)

{

    qDebug()<<"Error claiming interface";

    goto exit;

}

while(1)

{

    memset(data_in, 0, sizeof(data_in));

    /*中断方式读取断点数据,

      由端点描述符可知端点地址 0x81 为鼠标输入端点

      读取长度为5字节,超时时间为1000ms*/

    r = libusb_interrupt_transfer(handle, 0x81, data_in, 5, &length, 1000);

    if ((r < 0) || (length == 0))

    {

        qDebug()<<"bulk recive error"<<r<<length;

    }

    else

    {

        qDebug()<<"receive data:";

        for(j=0; j<length; j++)

        {

            qDebug()<<data_in[j];

        }

    }

    QTest::qSleep (1000) ;

}

/* 释放指定的接口 */

r = libusb_release_interface(handle, 0);

if (0 != r)

{

    qDebug()<<"Error releasing interface";

}

exit:

if(kernelDriverDetached)

{

    //恢复驱动绑定,否则鼠标不可用

    libusb_attach_kernel_driver(handle, 0);

}

libusb_close(handle);

return r;

二.hidapi代码示例

  1. 头文件

#include "hidapi.h"

2.代码实现

    hid_device *handle;

    int res;

    unsigned char buf[256];

    struct hid_device_info *devs, *cur_dev;

    devs = hid_enumerate(0x0, 0x0);

    cur_dev = devs;

    while (cur_dev) {

        qDebug()<<"Device Found:"<< cur_dev->vendor_id<< cur_dev->product_id<< cur_dev->path<< cur_dev->serial_number;

        cur_dev = cur_dev->next;

    }

    hid_free_enumeration(devs);

    handle = hid_open(0x046d, 0xc077, nullptr);

    if (!handle) {

        qDebug()<<"unable to open device\n";

        return 1;

    }

    // Set the hid_read() function to be non-blocking.

    hid_set_nonblocking(handle, 1);

    // Try to read from the device. There shoud be no

    // data here, but execution should not block.

       res = hid_read(handle, buf, 8);

       for (int i=0;i<8;i++)

      {

            qDebug()<<"%02X"<<buf[i];

      }

四.usb设备详细信息查看工具:USB Device Tree Viewer

USB Device Tree Viewer在微软USB viewer的基础上开发的USB设备信息的神器。可以方便的查看当前电脑连接了哪些usb设备,同时能够列出设备的详细信息。

QT实现USB通讯,QT实战系列,物联网系列,嵌入式开发,qt,开发语言文章来源地址https://www.toymoban.com/news/detail-819541.html

到了这里,关于QT实现USB通讯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt/C++编写物联网管理平台(支持win/linux/mac/嵌入式linux/modbus等)

    这个物联网综合管理平台前后迭代了五年,一点一滴慢慢积累起来,从最开始的只有modbus串口协议解析以及简单的表格显示数据,慢慢的逐渐增加了tcp_rtu支持,用户管理模块,地图监控模块,而后为了拓展性又做了云端数据同步,网络数据转发等。编写这个系统的过程中,真

    2024年02月10日
    浏览(135)
  • 物联网项目分享 stm32实现车牌识别系统 -物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月21日
    浏览(53)
  • C/C++|物联网开发入门+项目实战|指针|嵌入式C语言高级|C语言内存空间的使用-学习笔记(9)

    参考: 麦子学院-嵌入式C语言高级-内存空间 内存类型资源地址、门牌号的代名词 指针:地址的代名词 指针变量:存放指针这个概念的盒子 *P char *p *p; C语言娟译器对指针这个特殊的概念,有2个疑问? 1、分配一个盒子,盒子要多大? 在32bit系统中,指针就4个字节 2、盘子里存放

    2023年04月22日
    浏览(42)
  • 嵌入式毕设分享 基于单片机的智能音响设计与实现 -物联网 嵌入式 stm32

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月22日
    浏览(42)
  • 【嵌入式实战项目精选】附源码 | 三等奖作品 | 基于RA4M2和阿里云物联网平台的智能卧室小管家

    【RA4M2设计挑战赛】基于RA4M2和阿里云物联网平台的智能卧室小管家 摘要 本项目已RA4M2为主控,搭载了RT-Thread实时操作系统,配合Wi-Fi模块来提供网络通讯能力,外设接入了继电器、红外发射、OLED显示等器件,成功连上了阿里云物联网平台,实现了一个智能卧室小管家的产品

    2024年02月06日
    浏览(34)
  • 单片机毕业设计 stm32智能温控风扇设计与实现 - 嵌入式 物联网

    Hi,大家好,学长今天向大家介绍一个 单片机项目 基于stm32的智能温控风扇设计与实现 大家可用于 课程设计 或 毕业设计 随着科技的日新月异,智能家居逐渐走入普通家庭,风扇作为基本的家用电器也将成为智能家居的一部分。这里介绍的是以STM32单片机为控制单元并结合嵌

    2024年02月09日
    浏览(72)
  • stm32毕设分享 stm32实现车牌识别系统 -物联网 嵌入式 单片机

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月20日
    浏览(50)
  • 毕业设计 - 基于STM32的智能路灯设计与实现 - 物联网 嵌入式 单片机

    Hi,大家好,今天向大家介绍一个 单片机项目 基于STM32的智能路灯设计与实现 大家可用于 课程设计 或 毕业设计 🔥 项目分享与指导: https://gitee.com/sinonfin/sharing 每当夜幕降临,城市中各种各样、色彩缤纷的路灯亮起,为城市披上了一层绚丽的外衣。但在这绚丽的外表下则隐

    2024年02月05日
    浏览(40)
  • 【毕业设计】基于STM32的智能路灯设计与实现 - 物联网 嵌入式 单片机

    Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目 基于STM32的智能路灯设计与实现 大家可用于 课程设计 或 毕业设计 单片机-嵌入式毕设选题大全及项目分享: https://blog.csdn.net/m0_71572576/article/details/125409052 每当夜幕降临,城市中各种各样、色彩缤纷的路灯亮起,

    2024年01月16日
    浏览(45)
  • 物联网毕设 - 基于单片机的智能鱼缸系统设计与实现 - 嵌入式 物联网 stm32 51单片机 智能鱼缸

    Hi,大家好,今天向大家介绍一个 单片机项目, 大家可用于 课程设计 或 毕业设计 基于单片机的智能鱼缸系统设计与实现 🔥 项目分享与指导: https://gitee.com/sinonfin/sharing 近年以来,随着我国综合实力飞速飙升,人们对物质和精神生活质量的要求也不断提升,各式各样的智能

    2024年02月03日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包