Qt linux读取usb设备,Linux libusb USB开发(四)―― libusb例程,Linux环境下实现PC与USB设备的交互通信 (用的QT C++)...

一、具体流程

用libusb函数库来完成电脑与USB设备的数据交互功能,主要有以下步骤:

1)初始化libusb函数库;

2)根据vid和pid查找某一具体设备,并获取设备描述符;(vid和pid为设备的id,且每台设备的都vid和pid是唯一的)

3)根据设备描述符打开相应设备,获取设备操作符;

4)用设备操作符配置usb设备的配置模式和接口;

5)调用相应传输函数向usb设备发送数据,本项目中用的是块传输方式;

6)调用相应传输函数读取usb设备的反馈数据,本项目中用的是块传输方式;

7)释放usb设备接口,关闭设备。

综上,步骤1、2为初始化操作,步骤3、4为usb设备打开和配置操作,步骤5、6为电脑与usb设备数据传输操作,步骤7为usb设备关闭和释放系统资源操作。

二、代码展示

//打开usb设备 void MainWindow::on_pushButton_clicked() { int r; ssize_t cnt; //libusb_context *ctx=nullptr; //context 上下文 libusb_device **devs; //devices int i=0; if("open"==ui->pushButton->text()) { ui->pushButton->setText("close"); r=libusb_init(&ctx); //init 初始化libusb if(r<0) { qDebug()<pushButton->setText("open"); libusb_release_interface(udev, 0); //释放接口 libusb_close(udev); //关闭设备 libusb_exit(ctx); //退出libusb上下文 udev=nullptr; qDebug()<read_usb(); //读取usb设备的反馈结果 } } //读取usb设备的反馈结果 void MainWindow::read_usb() { unsigned char tmps[50]={0}; int i=0; int read_size_t=25; while(i<2) { int ret=0; ret = libusb_bulk_transfer(udev, 0x82, tmps, read_size_t, &read_size_t,5000); //以块传输方式接收16进制数据 选择端口号为0x84 //libusb_bulk_transfer函数参数解释:设备操作符 端口地址 要接受的数据 预计接受的字节数 实际接受的字节数 超时时间 //libusb_bulk_transfer根据端口决定此时函数是接收还是发送数据 if(ret >= 0) { qDebug() << "success: bulk read " << read_size_t << " bytes"; QString strTmp; QString strOut; for(int i = 0; i < read_size_t; i++) { strTmp.sprintf("%02X ", tmps[i]); strOut.append(strTmp); } qDebug() << strOut; qDebug() << "success"; break; } else { qDebug() << "fail to read"<

a4af59622c2e0a08c9172d2043512e3b.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值