Files
CodeRepository/Projects/App_Toolkits/3rd/GuideCaptrueCard/include/pciedatamanager.h
2026-03-02 21:40:25 +08:00

292 lines
10 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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