#ifndef _PCIeDef_H_ #define _PCIeDef_H_ //typedef unsigned char uchar; typedef unsigned short uint16; typedef unsigned int uint32; //typedef unsigned long ulong; #include #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); //采集图像数据的回调函数 typedef void (*CaptureImgDataCallback)(int channelIndex, const char* imgData, void* userData); // 采集模式 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_RGBA32 = 1, // packed RGBA 8:8:8:8, 32bpp, RGBARGBA... ePT_BGR24 = 2, // packed RGB 8:8:8, 24bpp, RGBRGB... ePT_YUV422 = 3, // packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr // ePT_YUV420P = 4, // planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples) // ePT_YV12 = 5, // packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1 // ePT_Y16U = 6, // Y , 16bpp ePT_Y16 = 7, // Y , 16bpp ePT_Y8 = 8, // Y , 8bpp ePT_Y16Y8 = 9, //Y16+Y8 }; // 帧格式 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_