libusb Qt使用记录

1.libusb 下载 ,选择编译好的二进制文件,libusb-1.0.26-binaries.7z

        libusb Activity

2. 解压

3. 在 Qt Widgets Application 或者 Qt Console Application 工程中导入库,Qt 使用的是 minggw 64编译器,所以选择libusb-MinGW-x64。

        把 libusb-1.0.a 和 libusb.h 放入工程。

4. 驱动转换,把libusb驱动转换成Windows的WinUSB驱动。

        Zadig - USB driver installation made easy

Zadig是USB驱动安装变得更容易。 
Zadig是一个安装通用USB驱动程序的Windows应用程序,诸如WinUSB,libusb-win32/libusb0.sys,libusbK,可以帮助你快速的使用USB设备。 

        选择 Options -> List All Devices 选择需要通信的USB设备 -> install driver

 5. 函数介绍

        玩转USB HID系列:libusb函数介绍-CSDN博客

 6.测试代码

#include <stdio.h>
#include <libusb.h>
#include <string.h>
#include <time.h>
#include <sys/time.h>

#define MAX_TX_SIZE 239*27
#define MAX_RX_SIZE 8000
#define MAX_FILE_SIZE 1024*1024*300

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);


    int ret = 1;
    libusb_context *ctx = NULL;
    libusb_device_handle *dev_handle = NULL;

    if(libusb_init(&ctx) < 0)
    {
        printf("init fail\r\n");
        return 1;
    }
    else
    {
        printf("init Successful\r\n");
    }

    dev_handle = libusb_open_device_with_vid_pid(ctx, 0x33AA, 0x0000);
    if(dev_handle == NULL)
    {
        printf("device is not open\r\n");
        return 1;
    }
    else
    {
        printf("Device Opened\n");
    }

    if(libusb_kernel_driver_active(dev_handle, 0) == 1)
    {
        printf("Kernel Driver Active\n");
        if(libusb_detach_kernel_driver(dev_handle, 0) == 0)
        {
            printf("Kernel Driver Detached!\n");
        }
    }

    ret = libusb_claim_interface(dev_handle, 0);
    if(ret < 0)
    {
        perror("Cannot Claim Interface\n");
        return 1;
    }

    int transferred = 0;
    uint8_t sendcmd[MAX_TX_SIZE] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
    uint8_t readbuf[MAX_RX_SIZE] = {0};
    for(int i=0; i<163; i++)
    {
        ret = libusb_bulk_transfer(dev_handle, 0x02, sendcmd, sizeof(sendcmd), &transferred, 0);
        //printf("write num=%d\r\n",transferred);
        if(ret==0 && transferred==sizeof(sendcmd))
        {
           // printf("write Successful!\n");
        }
        else
        {
            printf("write error!\n");
        }


        ret = libusb_bulk_transfer(dev_handle, 0x82, readbuf, sizeof(readbuf), &transferred, 0);
        if (ret != 0)
        {
            printf("failed to read \n");
        }
        else
        {
            printf("read num=%d\r\n", transferred);
        }
    }

    ret = libusb_release_interface(dev_handle, 0);
    if(ret != 0)
    {
        printf("Cannot Released Interface!\n");
    }
    else
    {
        printf("Released Interface!\n");
    }

    libusb_close(dev_handle);
    libusb_exit(ctx);


    return a.exec();
}

 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
libusb是一个开源的、跨平台的应用程序接口库,它允许开发者在不同的操作系统上使用统一的API与USB设备进行通讯。Qt则是一个跨平台的C++应用程序开发框架,可以在不同的操作系统上编写图形用户界面。 在Windows系统上进行libusbQt的结合开发时,可以利用libusb提供的功能与USB设备进行通讯,同时使用Qt提供的图形界面进行用户交互。 首先,我们需要在Windows系统上安装libusbQt的相应库文件。然后,可以使用Qt IDE(例如Qt Creator)来创建一个新的工程。在工程中,需要添加libusb的头文件和库文件,以便在代码中调用libusb提供的函数和结构。 在程序的主界面中,可以添加按钮、文本框等控件来与用户交互。例如,可以添加一个按钮用来打开USB设备,通过点击按钮后,程序调用libusb函数来连接USB设备。 在代码中,可以通过libusb提供的函数来枚举已连接的USB设备、打开设备、进行读写操作等。例如,可以通过libusb_get_device_list函数获取已连接的USB设备列表,然后使用libusb_open_device_with_vid_pid函数打开指定的设备。之后,可以使用libusb_bulk_transfer函数进行读写数据操作。 需要注意的是,在Windows下使用libusbQt进行开发时,还需要处理Windows系统的驱动签名问题。如果遇到无法加载驱动的情况,可以考虑禁用驱动签名验证功能。 总之,libusbQt的结合可以实现在Windows系统上与USB设备进行通讯和交互的功能。通过调用libusb的函数和使用Qt的图形界面,可以方便地进行USB设备的控制和数据传输操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值