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

227 lines
8.1 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 _PCIeDef_H_
#define _PCIeDef_H_
//typedef unsigned char uchar;
typedef unsigned short uint16;
typedef unsigned int uint32;
//typedef unsigned long ulong;
#include <QString>
#define ControlRegBaseAddr 1024*1024 //控制寄存器基地址
#define CaptureChannelRegBaseAddr 0x1000 + 1024*1024 //采集端口基地址--首地址(通道0地址)
#define InjectChannelRegBaseAddr 0x11000 + 1024*1024 //注入端口基地址--首地址(通道0地址)
#define UpgradeChannelRegBaseAddr 0x20000 + 1024*1024 //在线升级端口基地址--首地址
//#define Fpga_Freq 156250000 //FPGA时钟频率 用于计算图像帧周期
#define InjectChannelXRegBaseAddr 0x20000 //注入端口X基地址
#define ChannelCacheNum 8 //每个通道的缓存区数量
#define CaptureChannelNum 4 //采集 端口数
#define InjectChannelNum 4 //注入 端口数
#define PcieDDR_EachBuffSize 4096 * 1024 * 5 //Pcie DDR上每个buff的大小 20M
#define MaxImgHeight 3840
#define MaxImgWidth 2160
#define DefaultImageWidth 640
#define DefaultImageHeight 512
#define DefaultMaxImageSize (3840*2160*4)
#pragma pack(push,1)
typedef struct tagCaptureDelayStatusInfo //采集延时状态信息
{
double uiHostCaptureDelay; //上位机采集延时 单位:秒
double uiHostDealInterruptDelay; //上位机响应中断的延时 单位:秒
double uiFPGACostTime1; //FPGA耗时测量1 单位:秒
double uiFPGACostTime2; //FPGA耗时测量2 单位:秒
int iHostDealImgToDraw; //(自己计算)上位机从采集到图像到开始送到显卡绘制的时间
} CaptureDelayStatusInfo;
#pragma pack(pop)
#pragma pack(push,1)
typedef struct tagInjectDelayStatusInfo //采集延时状态信息
{
double uiHostInjectDelay; //注入延时 单位:秒 CPU 开始写入 → CPU 写入 1 帧数据
double uiFPGADealInterruptDelay; //FPGA响应中断的延时 单位:秒
double uiFPGACostTime; //耗时测量1 单位:秒 FPGA输出1帧图像
double uiCPUSendInterCostTime; //耗时测量2 单位:秒 CPU开始发送数据到发送中断的时间
} InjectDelayStatusInfo;
#pragma pack(pop)
#pragma pack(push,1)
typedef struct tagThermalImgParams //模拟热像参数
{
char szHeader[4]; //标志头 55 aa aa 55 bc bc 52 5a
uint32 iFrameNo; //帧编号
char szReserved01[2]; //保留字节
char szProtocolVersion[2]; //标准协议版本
uint16 sCmdLineBytes; //参数行字节总数
char szReserved02[4]; //保留字节
char szSoftVersion[2]; //软件版本号
char szSoftVersionYear[2]; //软件版本 日期年
char szSoftVersionMonthDay[2]; //软件版本 日期月 日
char szReserved03[10]; //保留字节
uint16 sVideoType; //视频源类型
uint16 sImgWidth; //图像宽度
uint16 sImgHeight; //图像高度
uint16 sFocus; //焦距值
uint16 sPixelSize; //像元尺寸
uint16 sPixalAngularResolution; //像元角分辨率
char szReserved04[4]; //保留字节
float fServoOra; //伺服方位角
float fServoPitch; //伺服俯仰角
float fNortheastSkyOra; //东北天方位角
float fNortheastSkyPitch; //东北天俯仰角
float fCarrierRoll; //载体横滚角
float fCarrierPitch; //载体俯仰角
float fCarrierOra; //载体方位角
/**协议属于不定长协议, 长度默认为图像width*ePt*1 帧尾5a 5a a5 a5 bc bc 52 5a在注入时加上***/
} THERMAL_IMG_PARAMS;
#pragma pack(pop)
//系统状态数据的回调函数
typedef void (*SystemStateCallback)(int channelIndex, const QByteArray& state, void* userData);
/**
* @brief 采集图像数据的回调函数
* @param channelIndex 采集图像的通道号
* @param imgData 采集图像的缓存指针
* @param userData 用户实例指针
*/
typedef void (*CaptureImgDataCallback)(int channelIndex, const char* imgData, void* userData);
/**
* @brief 采集图像数据的回调函数(错误帧指示)
* @param channelIndex 采集图像的通道号
* @param imgData 采集图像的缓存指针
* @param userData 用户实例指针
* @param isErrFrame 该帧是否为错误帧true:错误帧 false:正常帧
*/
typedef void (*CaptureImgDataCallbackErrDet)(int channelIndex, const char* imgData, void* userData, bool isErrFrame);
// 采集模式
enum eCaptureMode
{
eNormalImg = 0, // 正常图像
eTestImg = 1, // 测试图像
};
//注入模式
enum iInjectMode
{
iNormalImg = 0, // 正常图像
iSingleImg = 1, //单帧模式
iTestImg = 2, // 测试画模式
};
//测试图像类型
enum eTestImgType
{
eIncreasingNumber = 0, // 递增数
eCheckerBoard = 1, // 棋盘格
eScrollBar = 2 //滚动条
};
// 字节序
enum eByteOrder
{
eBO_LittleEndian = 1, // 低字节在前
eBO_BigEndian = 2, // 高字节在前
};
// 图像像素格式
enum ePixelType
{
ePT_YUV422 = 0, // packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
ePT_Y8, // Y , 8bpp
ePT_Y16, // Y , 16bpp
ePT_Y16Y8, //Y16+Y8
ePT_BGR24, // packed RGB 8:8:8, 24bpp, RGBRGB...
ePT_Y32, // packed RGB 8:8:8, 24bpp, RGBRGB...
};
// 帧格式
struct GFrameFormat
{
int nChannelIndex; //通道号 1~8
int nImageWidth; // 图像宽度
int nImageHeight; // 图像高度
int nParamStartLine; // 参数起始行
int nParamLineCount; // 注入文件参数行数
int nFrameRate; // 帧率
int nBytesOfPixel; // 像素字节数
int nImgLinePeriod; //图像行周期
eByteOrder eBO; // 字节序
ePixelType ePT; // 像素类型
eCaptureMode eCpMode; //采集模式
iInjectMode iInMode; //注入模式
eTestImgType eTestImageType; //测试图像类型
GFrameFormat()
{
nImageWidth = 1280;
nImageHeight = 1024;
nParamStartLine = 0;
nParamLineCount = 0;
nFrameRate = 50;
nBytesOfPixel = 2;
nImgLinePeriod = 0;
nChannelIndex = 0;
}
};
// Maximum number of RIFFA FPGAs
#define RIFFA_MAX_NUM_FPGAS (5)
//Riffa框架对应的结构体 Holds FPGA information for installed RIFFA FPGAs
struct fpga_info_list
{
int num_fpgas;
int id[RIFFA_MAX_NUM_FPGAS];
int num_chnls[RIFFA_MAX_NUM_FPGAS];
char name[RIFFA_MAX_NUM_FPGAS][16];
int vendor_id[RIFFA_MAX_NUM_FPGAS];
int device_id[RIFFA_MAX_NUM_FPGAS];
};
typedef struct fpga_info_list fpga_info_list;
#define BoardStateControl_BaseAddr 0x0000 //板卡状态控制寄存器 基地址
#define FiberPort_BaseAddr 0x0001 //光纤端口控制寄存器 基地址
#define ChannelConfig_BaseAddr 0x0002 //通道配置寄存器 基地址
#define DDRControl_BaseAddr 0x0003 //DDR控制寄存器 基地址
//PCIe光纤采集整体框架说明
enum ePCIeFrameworkType
{
eXDMA_MM,
eRiffa_Stream,
eXDMA_Stream,
};
//采集异常状态
enum eErrorCode
{
eNotFoundCard, //未检测到采集卡(未安装采集卡驱动、主板未安装卡)
eCardStateError, //采集卡状态异常(采集卡系统时钟未锁定、DDR初始化失败、通道Link失败、通道编码错误等等)
eCapture_ExceedSingleChannelMaxBandwidthError, //单路采集数据帧率超过采集卡光模块单通道能提供的最大带宽
eCapture_ExceedTotalInterEventFrequencyError, //采集总帧率超过上位机能响应的硬件中断频率(上位机能响应的硬件中断频率为500帧/秒左右,即所有通道的采集图像帧率总和应该小于500帧/秒)
eInject_BuffIsFull, //采集卡的注入buff缓存已满请重复注入一下当前帧
eNULL, //未发生错误
};
#endif // _CommDef_H_