292 lines
10 KiB
C++
292 lines
10 KiB
C++
#ifndef PCIEDATAMANAGER_H
|
||
#define PCIEDATAMANAGER_H
|
||
#include <QObject>
|
||
#include "pciedef.h"
|
||
#include "systempciesdk_global.h"
|
||
//#include "ConditionVariableQueue.h"
|
||
|
||
struct PCIeDataObjectPrivate;
|
||
class SYSTEMSDKSHARED_EXPORT PCIeDataManager
|
||
{
|
||
|
||
public:
|
||
PCIeDataManager(ePCIeFrameworkType type = eXDMA_MM, QObject* parent = nullptr);
|
||
//******************************************采集接口***************************************************
|
||
|
||
|
||
/**
|
||
* @brief StartCapture 开始采集
|
||
* @param channelIndex 【in】 采集卡上的光模块端口号(范围0~3),一张采集卡有4个光模块,即4个通道
|
||
* @param isCaptureTestImg 【in】 选择采集测试画或者实时图像(测试画由采集卡构造,不需连接前端相机), 默认此处传false(实时图像)
|
||
* @param imgW 【in】 要采集的图像宽
|
||
* @param imgH 【in】 要采集的图像高
|
||
* @param imgType 【in】 要采集的图像类型(取决于前端相机或板卡提供的是什么类型)
|
||
* @param err 【out】 如果采集失败,此处为对应的错误码
|
||
* @param callback 【out】采集到的图像数据的回调
|
||
* @param user 【in】 回调函数的执行实体
|
||
* @param pImgData 【in】 存储图像的数据帧缓存,用户开辟后传入,采集过程中保持有效
|
||
* @return 【out】 采集是否成功
|
||
*/
|
||
bool StartCapture(uint channelIndex,
|
||
bool isCaptureTestImg,
|
||
int imgW,
|
||
int imgH,
|
||
ePixelType imgType,
|
||
eErrorCode& err,
|
||
CaptureImgDataCallback callback,
|
||
void* user,
|
||
char* pImgData);
|
||
|
||
/**
|
||
* @brief StartCapture 开始采集(回调函数增加错误帧指示)
|
||
* @param channelIndex 【in】 采集卡上的光模块端口号(范围0~3),一张采集卡有4个光模块,即4个通道
|
||
* @param isCaptureTestImg 【in】 选择采集测试画或者实时图像(测试画由采集卡构造,不需连接前端相机), 默认此处传false(实时图像)
|
||
* @param imgW 【in】 要采集的图像宽
|
||
* @param imgH 【in】 要采集的图像高
|
||
* @param imgType 【in】 要采集的图像类型(取决于前端相机或板卡提供的是什么类型)
|
||
* @param err 【out】 如果开始采集失败,此处为对应的错误码
|
||
* @param callback 【out】采集到的图像数据的回调
|
||
* @param user 【in】 回调函数的执行实体
|
||
* @param pImgData 【in】 存储图像的数据帧缓存,用户开辟后传入,采集过程中保持有效
|
||
* @return 【out】 采集是否成功
|
||
*/
|
||
bool StartCapture(uint channelIndex,
|
||
bool isCaptureTestImg,
|
||
int imgW,
|
||
int imgH,
|
||
ePixelType imgType,
|
||
eErrorCode& err,
|
||
CaptureImgDataCallbackErrDet callback,
|
||
void* user,
|
||
char* pImgData);
|
||
|
||
/**
|
||
* @brief 停止采集
|
||
* @param channelIndex [in] 采集卡光模块端口号: 0 ~ 7
|
||
*/
|
||
void StopCapture(int channelIndex);
|
||
|
||
|
||
//******************************************注入接口***************************************************
|
||
/**
|
||
* @brief StartInject 开始注入
|
||
* @param channelIndex 【in】 采集卡上的光模块端口号(范围0~3),一张采集卡有4个光模块,即4个通道
|
||
* @param injectFps 【in】注入帧率
|
||
* @param imgW 【in】 要注入的图像宽
|
||
* @param imgH 【in】 要注入的图像高
|
||
* @param imgType 【in】 要注入的图像类型(取决于注入的raw文件中的图像是什么类型)
|
||
* @param linePeriod 【in】 注入图像的行周期(用通用PCIe光纤上位机计算)
|
||
* @param injectData 【in】要注入的图像数据
|
||
* @param err 【out】若操作不成功,对应的错误码
|
||
* @return 【out】 返回操作是否成功
|
||
*/
|
||
bool StartInject(uint channelIndex, int injectFps, int imgW, int imgH, ePixelType imgType, int linePeriod, char* injectData, eErrorCode& err);
|
||
|
||
|
||
/**
|
||
* @brief 【接口2】 停止注入
|
||
* @param channelIndex [in] 采集卡光模块端口号: 0 ~ 7
|
||
*/
|
||
void StopInject(int channelIndex);
|
||
|
||
|
||
|
||
|
||
/**
|
||
* @brief 关闭采集卡
|
||
*/
|
||
void CloseCard();
|
||
|
||
|
||
|
||
/**
|
||
* @brief 【接口4】 控制命令下发注入---与接口1/2/3独立
|
||
* @param iChannelIndex [in] 采集卡光模块端口号: 0 ~ 7
|
||
* @param cmdData [in] 控制命令
|
||
* @return
|
||
*/
|
||
bool WriteControlCmd(int iChannelIndex, QByteArray cmdData);
|
||
|
||
|
||
/**
|
||
* @brief 开始对某端口的采集数据进行录像存盘
|
||
* @param channelIndex [in] 采集卡光模块端口号: 0 ~ 7
|
||
*/
|
||
bool StartRecord(int channelIndex);
|
||
|
||
/**
|
||
* @brief 停止对某端口的采集数据进行录像存盘
|
||
* @param channelIndex [in] 采集卡光模块端口号: 0 ~ 7
|
||
*/
|
||
void StopRecord(int channelIndex);
|
||
|
||
|
||
|
||
/** @brief 通过设置回调来获取每路光纤端口的系统状态数据(如32字节、128字节系统状态,根据项目实际要求变化),与 StartCapture() 接口独立。
|
||
* @brief SetSystemStatusCallback
|
||
* @param channelIndex [in] 采集卡光模块端口号: 0 ~ 7
|
||
* @param callback [in] 回调函数
|
||
* @param user [in] 回调的parent
|
||
* @param isOpen [in]: true/false 是否开启回调
|
||
*/
|
||
void SetSystemStatusCallback(int channelIndex, SystemStateCallback callback, void* user, bool isOpen);
|
||
|
||
|
||
/** --------------------该接口为非必要接口------------------------
|
||
* @brief 更新模拟热像仪参数,可实时更新或多次更新(只有在需要模拟热像仪参数注入时才调用,属于非必要接口)
|
||
* @param 采集卡光纤端口号
|
||
* @param isInjectParamSimulate [in]是否注入该模拟参数
|
||
* @param param [in]模拟热像仪参数
|
||
*/
|
||
void UpdateParamSimulate(int channelindex, bool isInjectParamSimulate, THERMAL_IMG_PARAMS param);
|
||
|
||
|
||
/** --------------------该接口为非必要接口------------------------
|
||
* @brief 获取延时信息 返回结构体
|
||
*/
|
||
InjectDelayStatusInfo* GetInjectDelayStatus(int channelIndex);
|
||
|
||
/** --------------------该接口为非必要接口------------------------
|
||
* @brief 获取延时信息 返回结构体
|
||
*/
|
||
CaptureDelayStatusInfo* GetCaptureDelayStatus(int channelIndex);
|
||
|
||
|
||
/** --------------------该接口为非必要接口------------------------
|
||
* @brief Pcie_ReadData 从采集卡DDR上读取一段数据
|
||
* @param address
|
||
* @param size
|
||
* @param buffer
|
||
* @return
|
||
*/
|
||
bool ReadData(unsigned int address, unsigned int size, unsigned char* buffer);
|
||
|
||
/** --------------------该接口为非必要接口------------------------
|
||
* @brief Pcie_WriteData 向采集卡DDR上写入一段数据
|
||
* @param address
|
||
* @param size
|
||
* @param buffer
|
||
* @return
|
||
*/
|
||
bool WriteData(unsigned int address, unsigned int size, unsigned char* buffer);
|
||
|
||
|
||
|
||
/** 读Bar0寄存器
|
||
* @brief ReadReg
|
||
* @param [in] address 寄存器地址
|
||
* @return [out] 寄存器值
|
||
*/
|
||
uint ReadReg(unsigned int address);
|
||
|
||
/** 写Bar0寄存器
|
||
* @brief WriteReg
|
||
* @param [in] address 寄存器地址
|
||
* @param [out]buffer 待写入的值
|
||
* @return [out]写入的字节数
|
||
*/
|
||
int WriteReg(unsigned int address, int regValue);
|
||
|
||
|
||
void SetImgDisplayDelayTest(int channelIndex, bool isStart);
|
||
|
||
/** 设置采集全屏控件
|
||
* @brief SetCaptureFullScreenWgt
|
||
* @param channelIndex
|
||
* @param openglwgt
|
||
*/
|
||
void SetCaptureFullScreenWgt(int channelIndex, void* openglwgt);
|
||
|
||
/** 设置注入全屏控件
|
||
* @brief SetInjectFullScreenWgt
|
||
* @param channelIndex
|
||
* @param openglwgt
|
||
*/
|
||
void SetInjectFullScreenWgt(int channelIndex, void* openglwgt);
|
||
|
||
/** 采集截图
|
||
* @brief ImgSnapShot
|
||
* @param iChannelIndex
|
||
*/
|
||
void ImgSnapShot(int iChannelIndex);
|
||
|
||
/**
|
||
* @brief 【xdma_mm方式】 获取工控机中的所有采集卡列表
|
||
* @param [out] devpath 设备路径集合
|
||
* @return 采集卡数量
|
||
*/
|
||
int GetDevices(char** devPaths);
|
||
|
||
/**
|
||
* @brief 【xdma_mm方式】 打开采集卡
|
||
* @param[in] devicepath 采集卡路径
|
||
* @return 是否成功
|
||
*/
|
||
bool OpenCard(char* devicepath);
|
||
|
||
|
||
/**
|
||
* @brief 【Riffa_Steam方式】 获取工控机中的所有采集卡列表
|
||
* @param [out] list 采集卡集合,其中fpga_info_list的num_fpgas表示读取到了几张采集卡
|
||
*/
|
||
bool GetDevices(fpga_info_list* list);
|
||
|
||
|
||
/**
|
||
* @brief 【Riffa_Steam方式】 用于打开采集卡
|
||
* @param [in] cardId 通过fpga_info_list.id[i]来选择采集卡id
|
||
* @return
|
||
*/
|
||
bool OpenCard(int cardId);
|
||
|
||
|
||
|
||
|
||
/**
|
||
* @brief 采集卡是否打开
|
||
* @return
|
||
*/
|
||
bool IsCardOpen();
|
||
|
||
/** 某通道是否开始注入
|
||
* @brief IsStartInject
|
||
* @param channelIndex
|
||
* @return
|
||
*/
|
||
bool IsStartInject(int channelIndex);
|
||
|
||
/** 某通道是否开始采集
|
||
* @brief IsStartInject
|
||
* @param channelIndex
|
||
* @return
|
||
*/
|
||
bool IsStartCapture(int channelIndex);
|
||
|
||
/** 某通道是否开始保存注入和采集日志
|
||
* @brief IsStartInject
|
||
* @param channelIndex
|
||
* @return
|
||
*/
|
||
void SetSaveLog(bool isSaved);
|
||
|
||
|
||
/** 设置界面图像显示是否叠加字符
|
||
* @brief SetOsdHidden
|
||
* @param isHidden
|
||
*/
|
||
void SetOsdHidden(bool isHidden);
|
||
|
||
void SetShowErrorFrame(bool isShow);
|
||
|
||
//用与分配使用的cpu核
|
||
uint GetIdealCpuCoreIndex();
|
||
void ResetUsedCpuCoreIndex(uint usedCoreIndex);
|
||
|
||
private:
|
||
PCIeDataObjectPrivate* m_pDataObject;
|
||
|
||
bool PreProcCapture(GFrameFormat &captureParam, uint channelIndex, bool isCaptureTestImg, int imgW, int imgH, ePixelType imgType);
|
||
};
|
||
|
||
#endif // PCIEDATAMANAGER_H
|