/******************************************************************************
版权所有：	
文件名称：	dcfactor.h
文件版本：	01.01
创建作者:	sunxi
创建日期：	2013-05-20
功能说明：	内部运行状态
其它说明：
修改记录：
*/
#ifndef _RUN_STATUS_H
#define _RUN_STATUS_H
/*------------------------------- 头文件 --------------------------------------
*/

/*------------------------------- 宏定义 --------------------------------------
*/
// 遥控器4个按键
enum
{
	RMT_A,
	RMT_B,
	RMT_C,
	RMT_D,
	RMT_NUM,
};

// 遥控器4个按键对应的功能
// 解锁3秒内，按分闸实现分闸；解锁3秒内，按合闸实现合闸；单按复归实现复归
// 多键并存，按键无效
enum
{
	RMT_KEY_FZ,		// 分闸
	RMT_KEY_ULK,	// 解锁
	RMT_KEY_FG,		// 复归
	RMT_KEY_HZ,		// 合闸
	RMT_KEY_NUM,
};

// 遥控器相关命令
enum
{
	CMD_NILL,
	CMD_HZ,			// 合闸命令
	CMD_FZ,			// 分闸命令
	CMD_FG,			// 复归命令
	CMD_PAIR,		// 配对命令
	CMD_CLRPAIR,	// 清除配对命令
	YK_CMD_NUM,
};

//动作类型
enum
{
    RY_DZ_NULL=0,    //无动作
    RY_DZ_XYBS,    //X/Y闭锁合闸
    RY_DZ_BHT,     //保护跳
    RY_DZ_BHGJ,    //保护告警
	RY_DZ_HZ,     //FA合闸
	RY_DZ_NUM,  
};
/*------------------------------ 类型结构 -------------------------------------
*/
// 与内部状态开入状态结构体
struct di_stu
{
	u32 pub_di;					// 公共开入
	u32 sw_di[SWITCH_NUM_MAX];	// 开关开入
};

// 内部状态结构体
struct run_stu
{
	u8 yf;			// 远方
	u8 jd;			//就地
	u8 fg;			// 复归
	u8 js;                   // FA解锁按钮
	u8 fg_js;		//复归+解锁
	u8 kz_out_tt;	//控制出口
	u8 rmtjs;             // 遥控解锁
	u8 button_on;             // 复归按钮按下
#ifdef FUNC_ONLY_MMD_JS
	bool b_mmdjs;			  // 液晶解锁
#endif
	u32 dcjlsd;		// 电池交流失电
	u32 dcjlsd_t;	// 电池交流失电,带延时定时器
	u8 dcdygz;		// 电池电源故障
	u8 dcqy;		// 电池欠压
	u8 dchh;		// 电池欠压
#if defined BATTERY_WITH_COMM && defined FUNC_SEL_BAT_MODULE
	u8 dcgygj;		// 电池过压告警
	u8 dclxgj;		// 电池离线告警
	u8 dcfzgj;		// 电池反接告警
	u8 dcbyjlsd;	// 电池备用点交流失电
	u8 dcrlgz;		// 电池容量故障
#endif
	u8 pubdz;		// 动作
	u8 rmt_A;		// 遥控器A
	u8 rmt_B;		// 遥控器B
	u8 rmt_C;		// 遥控器C
	u8 rmt_D;		// 遥控器D
	u8 pt1yy;		// PT1有压
	u8 pt2yy;		// PT2有压
	u8 pt1cyy;		// PT1曾有压
	u8 pt2cyy;		// PT2曾有压
	u8 bToolRmtTest;// 维护工具测试
	u8 bHmiRmtTest;// 维护工具测试
	u8 bhall;	// 保护投退
	u8 bjx;	// 装置检修额
	u8 mb_yuk;		//面板预控
	u8 mb_hz;		//面板分闸
	u8 mb_fz;		//面板合闸
	u8 yxError;		//遥信异常
#ifdef YX_DI_ERROR
	u8 yxEnable;	//遥信使能，自检
#endif
	u32 cd;
	u8 led[CFG_UART_NUM_MAX*2+CFG_ETH_NUM_MAX];	
};


// 内部状态结构体
typedef struct run_stu_sw
{
    u8 sw; // 开关位置
    u8 hw; // 开关合位
    u8 tw; // 开关分位
    u8 hw_change;
    u8 tw_change;

    u8 hzw;
    u8 tzw;
    u8 wcn;   // 未储能
    u8 gld;        // 隔离刀闸
    u8 jdd;        // 接地刀闸
    u8 qyd_bs;     // 气压低闭锁
    u8 qyd_gj;     // 气压低告警
    u8 pt1uf; // PT1瞬压
    u8 pt2uf; // PT2瞬压
    u8 sw_sh; // 手合
    u8 sw_sf; // 手分
    u8 bhztt; // 保护总投退
#ifdef GD_AREA_ZHONGSHAN_FTU
    u8 bs_bhz; // 闭锁功能总
#endif

    u8 jzs_tt; // 集中式投退
    u8 bhtt;        // 常规保护投退
    u8 fatt;        // fa功能跟投退
    u8 fa_g_tt;     // 智能 fa功能跟投退
    u8 fa_ls;       // 联络分段
    u8 chzyb;       // 重合闸
    u8 fa_start_hz; // 对侧开关位置信号，对侧合位后，B侧有压才有效。用于启动fa来电合闸信号
    u8 kgyf;
    u8 gl;       // 保护过流
    u8 jd;       // 保护接地
    u8 chzdz;    // 重合闸动作
    u8 chzcd;    // 重合闸充电
    u8 fa_ll_cd; // 联络充电
    u8 goose_glcd;
    u8 goose_qccd;
    u8 goose_ll_cd;
    u8 gy; // 过压
    u8 gj_led;
    u8 dz;   // 保护动作
    u8 bs;   // 闭锁
    u8 fgbs; // 智能分布式闭锁
    u8 bsch;
    u8 XT;
    u8 YT;
    u8 lock;
    u8 exerr; // 外部异常
    u8 pt1yy; // PT1有压
    u8 pt2yy; // PT2有压
    u8 kzdx;  // 控制回路断线 开入信号
    u8 chzbs;

    u8 bh_yx;   // 常规保护遥信点
    u8 fa_yx;   // fa功能遥信点
    u8 fa_g_yx; // 智能 fa功能遥信点

    u8 gldz; // 隔离刀闸
    u8 jddz; // 接地刀闸
}RUN_STU_SW;



struct rmt_oprate
{
	u8 key;
	u8 cmd;
	u8 stu;
	u8 step[RMT_KEY_NUM];
	u8 key_en[RMT_KEY_NUM];
	TIMERELAY 	tTULK3STime; 	// 解锁3s
};

// 内部状态文件描述
struct instu
{
	u8 	type;		//显示类型:16进制，10进制，2进制
	s8 	name[20];	//名称
	u32 *fstdata;	//对应的值
};

// 内部状态文件描述
struct instu_desc
{
	u8 	type;		//显示类型:16进制，10进制，2进制
	s8 	name[20];	//名称
	u8  reserved[11];
};

// 内部状态文件头，16bytes
struct instu_file_head
{
	u32	signature;	//文件签名
	u32	version;	//文件版本
	u32	reserved0;	//保留0
	u32	reserved1;	//保留1
};

// 内部状态文件格式
struct instu_file_head_data
{
	// 内部状态文件头
	struct instu_file_head cfh;	
	
	// 装置类型
	u8 		equ_sw_num;
	u8 		equ_brd_num;
	char 	equ_name[14];

	// 内部状态描述	
	u32		instu_addr;
	u32 	instu_num;

	u32 	Reserved[2];
};

typedef union USWST
{
    DWORD  wfFlag;
	struct
	{
#ifdef	CUSTOMIZE_BZT //备自投	
        WORD    b1DLHW:1;    			//1DL合位             
        WORD    b2DLHW:1;    			//2DL合位             
        WORD    b3DLHW:1;    			//3DL合位   
        WORD    bBZTBS:1; 
		WORD    bBZTSY:1; 
#endif		
		DWORD   bTZWZ:1;	//重合闸用位置信号
		DWORD   bHZWZ:1;	//重合闸用位置信号
		DWORD   bDIHW:1;	//外部开入合位
		DWORD   bDITW:1;	//外部开入跳位

		DWORD   bWCN:1;		//未储能告警
		DWORD   bKZHL:1;
		DWORD	bTWYL:1;	//跳位有流告警		
		DWORD   bSXWL:1;	//三相无流		
		DWORD   bSHJS:1;	//手合加速
		
		DWORD   bSDJS:1;	//上电加速 
		DWORD   bFagLLJS:1; //智能分布式联络合闸，加速
		DWORD   bBSTZ:1;	//闭锁跳闸
		DWORD   bCYY:1;		//曾有压

		DWORD   bFAWL:1;	//Fa无流
		DWORD   bIBSCHZ:1;	//大电流闭锁重合闸
    }bFlag;
}USWST;

typedef struct TSWST
{
	USWST uSWST;
	TIMERELAY tTRunST_20s1s;
	TIMERELAY tSHz3s10ms;		// 手合
	TIMERELAY tSTz3s10ms;		// 手跳
	TIMERELAY tSf3s;		// 手分保持3秒报 闭锁
	TIMERELAY tTTWYL_10S1S;	// 跳位有流
	TIMERELAY tTWCNGJ1s;		// 弹簧未储能
	TIMERELAY tTKZHLGJ1s;		// 控制回路
	TIMERELAY tCTXXYC;		//  CT相序异常
	TIMERELAY tCTYC;		//  CT断线
	TIMERELAY tBatChk;		//  电池异常
	TIMERELAY tBatOver;		//  电池过压
	TIMERELAY tIBSCHZ;		//  大电流闭锁重合闸
	DWORD     wfFlagsave;
}TSWST;

/*------------------------------ 变量声明 -------------------------------------
*/
extern const int INSTU_NUM;

extern struct run_stu g_run_stu;	// 内部运行状态
extern struct rmt_oprate g_rmt_op;	// 遥控器
extern struct instu g_instu_desc[];	

extern TIMERELAY 	g_tJLSDTime; // 交流失电定时器

/*------------------------------ 函数声明 -------------------------------------
*/

int run_status_init(void);
int run_status_check(u32 dStep);
int run_status_dz_all(void);

int app_action_result(void);
int rmt_key_init(void);

#endif//
//========================== 本文件结束 =============================

