Files
CodeRepository/Apps/App_GeneralDataInjectionApp/Common/include/pciedef.h

218 lines
7.8 KiB
C
Raw Normal View History

#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);
//采集图像数据的回调函数
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_