003、创建Qt程序读取开发板数据及CyAPI使用USB3.0配置记录

1.在.h添加命名空间

using namespace std;

2.在.h 添加3个lib

#pragma comment(lib,"SetupAPI.lib")
#pragma comment(lib,"User32.lib")
#pragma comment(lib,"legacy_stdio_definitions.lib")

CyAPI.lib由Cypress提供;
SetupAPI.libUser32.lib;可在C:\Program Files (x86)\Windows Kits\10\Lib\10.0.16299.0\um\x86目录下找到。legacy_stdio_definitions.lib文件可在C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\lib\x64目录下找到。

3.关于暂存空间大小的设置

暂存空间 unsigned char inBuf[ x ]

x应为512的整数倍。

4.在.cpp中写入测试代码

    //测试USB设备是否连接
    CCyUSBDevice* pUSB = new CCyUSBDevice;    //定义 USB 设备
    for (int nIdx = 0; nIdx < pUSB->DeviceCount(); nIdx++)
    {
        pUSB->Open(nIdx);  //打开nIdx号USB设备
        printf("%s\n", pUSB->DeviceName);
        printf("%d\n", pUSB->VendorID);
        printf("%d\n", pUSB->ProductID);
    }

若读取出则表示连接成功

5..h和.cpp代码如下

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QCoreApplication>

#include <windows.h>
#include "CyAPI.h"

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include<QDebug>

using namespace std;

#pragma comment(lib,"SetupAPI.lib")
#pragma comment(lib,"User32.lib")
#pragma comment(lib,"legacy_stdio_definitions.lib")

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    bool flag;
    void Read();
    QString changCharToQString(unsigned char p);
    ~Widget();

private slots:
     void on_btn1_clicked();
     void on_btn2_clicked();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QLatin1String>
#include<QFile>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    connect(ui->btn1,SIGNAL(clicked()),this,SLOT(on_btn1_clicked()));

}

void Widget::Read(){

    //测试USB设备是否连接
    CCyUSBDevice* pUSB = new CCyUSBDevice;    //定义 USB 设备
    for (int nIdx = 0; nIdx < pUSB->DeviceCount(); nIdx++)
    {
        pUSB->Open(nIdx);  //打开nIdx号USB设备
        printf("%s\n", pUSB->DeviceName);
        printf("%d\n", pUSB->VendorID);
        printf("%d\n", pUSB->ProductID);
    }

    //读取FPGA开发板中的32位16进制数据,并存储为unsigned char inBuf[190080]
    CCyUSBDevice *USBDevice = new CCyUSBDevice(NULL);  //建立一个USB设备对象
    //线程中的处理,在这里上位机用异步接收,创建异步事件
    OVERLAPPED outOvLap, inOvLap;  //OVERLAPPED为结构体,用于异步IO
    inOvLap.hEvent = CreateEvent(NULL, false, false, L"CYUSB_IN");  //打开事件对象
    unsigned char inBuf[190080];  //声明变量190080
    ZeroMemory(inBuf, 190080);
    LONG length = 190080;
    UCHAR *inContext = USBDevice->BulkInEndPt->BeginDataXfer(inBuf, length, &inOvLap);  //发起异步传输,并且立即返回,发起此次的length后,并不会等length传输完,而是立即开始下一次length字节传输
    USBDevice->BulkInEndPt->WaitForXfer(&inOvLap, 500);  //异步传输最大等待时间500ms
    USBDevice->BulkInEndPt->FinishDataXfer(inBuf, length, &inOvLap, inContext);  //写内存,将读到的数写到缓冲区inOvLap中
    CloseHandle(inOvLap.hEvent);  //释放对象


//该中间数组用于避免出现读取错误,经测试可省略
//    unsigned char outBuf[190080];
//    for(int i=0;i<190080;i++){
//        unsigned char tempchar;
//        tempchar=inBuf[i];
//        outBuf[i]=tempchar;
//    }

    //将unsigned char类型转换为QString
    QStringList strlist;
    for (int j = 0; j < 190080;j++){
        QString str=changCharToQString(inBuf[j]);
        strlist.append(str);
        qDebug()<<qPrintable(strlist.at(j));
    }
    qDebug()<<strlist.size();//显示strlist的长度

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值