227 lines
8.1 KiB
C
227 lines
8.1 KiB
C
#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_
|