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.lib和User32.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的长度