#ifndef __DATA_H__
#define __DATA_H__
#include "types.h"


// BCD码方式时标数据结构
typedef struct
{
    uint8_t           byYear_L;                                   // 年(低位)
    uint8_t           byYear_H;                                   // 年(高位) 默认为0x20
    uint8_t           byMonth;                                    // 月
    uint8_t           byDay;                                      // 日
    uint8_t           byHour;                                     // 时
    uint8_t           byMinute;                                   // 分
    uint8_t           bySecond;                                   // 秒
    uint8_t           byMS_L;                                     // 毫秒(低位)
    uint8_t           byMS_H;                                     // 毫秒(高位)
    uint8_t           byWeek;                                     // 星期
    uint8_t           byRes[2];                                   // 备用字节(配齐4的整数倍)
    uint32_t          dwRamScan;                                  // 扫描内存片
}tagTimeBCD,*tagPTimeBCD;


// 板间控制信息结构体
typedef struct
{
    uint8_t           bySamCnt[2];                    // ARM核采样计数器(0:ARM核;1DSP核)
    uint8_t           bySysLock;                      // 系统闭锁标记(0:正常;CN_FLAG_TRUE:异常)
    uint8_t           bySysSig;                       // 系统信号标记(DB0:运行;DB1:自检异常;DB2:运行异常)
    uint32_t          iFpgaCmp;                       // 中断频率比较寄存器补偿值
}tagBoardCtrl;
// 开出资源区结构(包括正/反码)
typedef struct
{
    uint32_t          dwKOBuf[2];
    uint32_t          dwKONot[2];
}tagKOBuf;
// CPU运行信息结构体
typedef struct
{
    uint32_t          dwCPURun;                                // 上电运行标记
    uint32_t          dwSysLock;                               // 系统闭锁标记(本核组件自检)
    uint32_t          dwSysLockMerge;                          // 系统闭锁标记(汇总各板件)
    uint32_t          dwSamCnt;                                // 中断计数器
    tagKOBuf        tALLKOBuf;                               // 总开出状态数据区
}tagCPURunInfo;
// 模拟量向量(测量)
typedef struct
{
    int32_t          iAmp;                                       // 幅值(开方)
    uint16_t          wAngle;                                     // 相角
    uint16_t          wRes;                                       // 备用
}tagVectorMea;

// 遥测量(遥测)
typedef struct
{
    uint16_t          wAngle;                                     // 相角
    float             fValue4[4];                     // 测量有效值依次存放4次
    int32_t          iValue;                                     // 最终显示上送值
    int32_t          iValueBak;                                  // 上次上送值，用于死区计算
    uint16_t          wUpDate;                                    // 更新标志（变化大于死区范围）
    uint16_t          wIEC103Quality;                             // 103上送遥测品质
    uint16_t          wIEC103YCValue;                             // 103上送遥测数值
    uint16_t          wIEC103Inf;                                 // 103上送inf
    uint16_t          wIEC103YCClass;                             // 103上送等级
}tagYCVecMea;
// 谐波量(遥测)
typedef struct
{
    int32_t           iReal;                                      // 各次谐波的实际值
    uint16_t          wRatio;                                     // 各次谐波的与有效值的比值
}tagHumWave;                                                    // 谐波结构
// 双核间信息交互区结构
typedef struct
{
	uint32_t				dwRamScan1;                                 			// 内存扫描点
	tagTimeBCD		tTimeBCD;                                   			// 系统时间
	tagBoardCtrl	tBoardCtrl[2];                    			// 板间控制信息结构体(0区:本板区  其他区:根据插槽号存储)
	uint32_t        dwCalSoftFrFlag;                            			// 测得新频率标志 
	uint32_t        dwFpgaCmpSam;                               			// 中断频率比较寄存器补偿值(本板区)
	uint32_t        dwFpgaCmpUse;                               			// 中断频率比较寄存器补偿值(使用区=本板区+LVDS总线接收区)
	uint32_t        dwRamScan2;                                 			// 内存扫描点
	uint16_t        wFaultNumARM;                               			// 系统故障序号(ARM主机使用;上电时从IIC读出)
	uint16_t        wFaultNumDSP;                               			// 系统故障序号(DSP主机使用;由录波组件累加)
	uint32_t        dwWaveHandFlg;                              			// 指向外部请求手动录波标志,0--无请求手动录波，CN_FLAG_TRUE--请求手动录波,手动录波响应后由录波组件清0
	uint32_t        dwWaveStartFlg;                             			// 录波已启动标记,0--未启动，CN_FLAG_TRUE--已启动
	uint32_t        dwClrFaultNum;                              			// 清除系统故障序号标志(CN_FLAG_TRUE--清除故障序号) 
	uint32_t        dwOpenDebugKO;                              			// 开出DEBUG开放使能标志("CN_FLAG_TRUE"--DEBUG开放使能, 其它--DEBUG不开放使能)
	uint32_t				dwCPUKI;																					// 上电遥信读取标志 0:上电状态，0x55：等待3个中断后读取开入完毕，0xAA：遥信初始化,0xBB 初始化结束。
	uint32_t				dwGpsType;																				// GPS类型标志(=0x00无GPS  =0x33IRIG  =0x55分脉冲  =0xaa秒脉冲)
	uint16_t				wCommFlag;																				//外通讯标志
	uint16_t				wArmRunCnt;																				//ARM核运行计数
	uint8_t    			bFlagGetDrvTime;
	uint8_t					bFlagCompareTime;																	// 第一次上电中断中置1,上电500ms后，比较软硬件时钟
	uint8_t					SignKoFlag[16];																		//线路1~16故障信号开出量
	uint32_t				dwRamScan3;                                 			// 内存扫描点
	tagCPURunInfo	tRunInfoARM;                                			// ARM核运行信息
	tagCPURunInfo	tRunInfoDSP;                                			// DSP核运行信息
	uint32_t        dwRamScan4;                                 			// 内存扫描点
	uint32_t        dwBufKIHld    [2];              			// 开入量采样数据区(本板防抖区,按BIT存储)
	uint32_t        dwBufKIMsg    [2];              			// 开入量采样数据区(本板报文区,按BIT存储)
	uint32_t        dwBufKIUseBit [2];              			// 开入量采样数据区(使用值,按BIT存储)
	uint32_t        dwBufKIUseWord[2][2];	// 开入量采样数据区(DSP核)(使用值,按DWORD存储, 有开入--CN_FLAG_TRUE)
	uint32_t        dwRamScan5;                                 			// 内存扫描点
	uint32_t        dwSoftFRQ;                                  			// 软件测频结果(放大100倍)(DSP测频,ARM调频)
	uint32_t        dwVecNum;                                   			// 需要计算的模拟量通道数<基波>
	uint32_t        dwVecS2Num;                                 			// 需要计算的模拟量通道数<二次谐波>
	uint32_t        dwVecS3Num;                                 			// 需要计算的模拟量通道数<二次谐波>
	uint32_t        dwVecS5Num;                                 			// 需要计算的模拟量通道数<二次谐波>
	tagVectorMea	tVectorMea[2][2]; 			                             // 模拟量向量(DSP核)(测量用)
	uint32_t        dwRamScan6;                                 			// 扫描内存片
	tagYCVecMea   tYCVecMea[2];                			                    // 遥测量(DSP核)(遥测用)
	uint32_t        dwRamScan7;                                 			// 扫描内存片
	tagHumWave		tHumWave[2*(2+1)];		                                // 谐波量(DSP核)(遥测用)
	uint32_t				dwYFBSHZ;                                   			// 遥控闭锁合闸
	uint32_t        dwJLDataYM[128];                             		// 计量数据
	uint32_t				dwHoldLED[32];                             				// 需保持点灯
	uint8_t					byLedData[8];
	uint8_t					byUlogFlag[14];
	uint8_t					byTxFlag;                                   			// 通讯灯点灯标志
	uint8_t					byTxgFlag[8];                           					// 通讯灯点灯标志
	uint32_t				dwErrorNum;
	uint32_t				dwWaveEnd;
	uint8_t					byStartFlg[3];
	uint8_t         byFHZ_Flag;                                  			// 分合闸标志
    uint8_t         byHw_Flag;                                  			// 合位遥信用于点灯--20200319
    uint8_t         byWcn_Flag;                                 			// 未储能遥信用于点灯--20200319
    
	uint32_t				dwFGFlag;                                   			// 复归开入状态
	uint32_t				dwFAZBSFlag;                                			// FA总闭锁状态
	uint32_t				dwFAZBSFlag1;                                			// FA总闭锁状态
	uint16_t				wFZDBSFZ[8];                                 			// 非遮断闭锁分闸
	uint16_t				wCoeData[17];
	uint16_t				wDspRunFlag;
	uint8_t			    byYXData[32];																			// 共享遥信内容
	uint8_t    			bPhaserrFlag[3];																	// 故障相别标志
	uint8_t 					SwitchO;																					// 继电器执行合闸操作 g_tShareData.SwitchO
	uint8_t 					SwitchT;																					// 继电器执行分闸操作 g_tShareData.SwitchT
	uint8_t					byTestData[64];
	float					fTestData[34];
	uint32_t				dwRamScan8;                                 			// 扫描内存片
}tagShareData; 

#endif
