/********************************************************
*                                                                                                            
* 文 件 名： OutputDataProcess.h   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2012-04-07
* 作    者： 联锁组
* 功能描述： 输出数据处理头文件  
* 函数包括：
* 使用注意：
* 修改记录：   
*
********************************************************/ 

#ifndef _OUTPUT_DATA_PROCESS_H_
#define _OUTPUT_DATA_PROCESS_H_


#include "../ERROR/ErrorDefine.h"
#include "../ERROR/ErrorDataManage.h"
#include "../ParsePack/ParsePackAtsData.h"
#include "../ParsePack/CiInterfaceDefine.h"
#include "../ParsePack/ParsePackLeuData.h"
#include "../DataManage/DeviceDataManage.h"
#include "../DataManage/PlatDataManage.h"
#include "./DeviceRelayDataProcess.h"
#include "../Indicator/IndicatorConfigDataManage.h"
#include "../Indicator/IndicatorDataManage.h"
#include "../Indicator/IndicatorDefine.h"
#include "../NonRoute/NonRouteConfigDataManage.h"
#include "../NonRoute/NonRouteDataManage.h"
#include "../NonRoute/NonRouteDefine.h"
#include "../2oo2/2oo2InterfaceDataManage.h"
#include "../Transmit/TransmitStateDataManage.h"
#include "../Route/RouteConfigDataManage.h"
#include "../LogicProcess/InterlockLogicCheck.h"
#include "../VirtualDevice/VirtualDevDataManage.h"
#include "../QueryFiles/dquCIInterFace.h"
#include "../DiffLineDev/DiffLineDevConfigDataManage.h"
#include "../Relay/RelayDataManage.h"

#ifdef __cplusplus
extern "C" {
#endif


/*
* 功能描述： 处理输出数据
* 参数说明： void
* 返回值  ： void      
*/
void OutputDataProcess(void);

/*
* 功能描述： CI到ATS反馈信息处理
* 参数说明： void
* 返回值  ：    
*/
void CiToAtsBackInfoProcess(void);

/*
* 功能描述： 错误码数据处理
* 参数说明： void
* 返回值  ：    
*/
void ErrorCodeDataProcess(void);


/*
* 功能描述： 获取ATS反馈信息参数
* 参数说明： 
*			 const UINT8 functionId，	  函数id
*            const UINT8 deviceStateType, 设备状态类型
*            const UINT8 deviceState, 设备状态
* 返回值  ： 0: 获取失败
*			>0: 获取成功   
*/
UINT8 GetAtsBackInfoParam(const UINT8 functionId,const UINT8 deviceStateType, const UINT8 deviceState);

/*
* 功能描述： 获取ATS反馈信息函数判断
* 参数说明： const UINT8 functionId, 函数ID
             const UINT8 deviceType
* 返回值  ： 0: 获取失败
*			>0: 获取成功   
*/
UINT8 CiToAtsBackInfoFunctionJudge(const UINT8 functionId,const UINT8 deviceType);

/*
* 功能描述： 指示器状态处理
* 参数说明： void
* 返回值  ： void 
*/
void IndicatorStateProc(void);

/*
* 功能描述： 指示器状态处理
* 参数说明： void
* 返回值  ： void
*/
void IndicatorStateProc_UseVirCI(UINT8 virCIid);

/*
* 功能描述： 非进路继电器状态处理
* 参数说明： void
* 返回值  ： void      
*/
void NonRouteRelayStateProc(void);

/*
* 功能描述： 计时反馈数据处理
* 参数说明： void
* 返回值  ：    
*/
void TimeDataFeedBackProcess(void);

/*
* 功能描述： 虚拟照查继电器状态处理
* 参数说明： void
* 返回值  ： void      
*/
void VirtualRelayStateProc(void);

/*
* 功能描述： 更新故障锁闭照查驱动
* 参数说明： void
* 返回值  ： void
*/
void UpdateFaultLockZhaoChaDrive(void);

/*
* 功能描述： 根据配置功能开关判断信号机灯丝断丝报警
* 参数说明： UINT16 devId  指示灯ID
* 返回值  ： void
*/
void SignaDsBreakAlarmIndicator(UINT16 devId);
/*
* 功能描述： 根据配置功能开关判断信号机灯丝断丝报警
* 参数说明： UINT16 devId  指示灯ID
* 返回值  ： void
*/
void SignaDsBreakAlarmIndicator_Vir(UINT8 virCIid,UINT8 devId);

/*
* 功能描述： 相邻联锁间命令输出处理
* 参数说明： void
* 返回值  ： void
*/
void CiToCiOutputCmdProc(void);

/*
* 功能描述： 根据无人折返指示灯的闪灯和稳灯状态驱动继电器或设置状态
* 参数说明： 无
* 返回值  ： 无
*/
static void AutoRtnIndictStatusProc_VirCI(void);
/*
* 功能描述： 获取组合自动进路所属虚拟联锁ID
* 参数说明： groupAutoRouteId 组合自动进路的ID    
* 返回值  ：所属虚拟联锁ID 
*  说明：组合自动进路所属联锁为包含自动进路的第一条进路
*/
UINT8 GetGroupAutoRouteBelongVirCIid(UINT16 groupAutoRouteId);

/*********************************************
*函数功能：更新照查联锁条件检查照查驱动
*参数说明：无          
*返回值：无
*********************************************/
void UpdateZhaoChaCheckZhaoChaDrive(void);

/*********************************************
*函数功能：虚拟设备状态处理
*参数说明：无          
*返回值：无
*********************************************/
void VirtualDeviceOutputProc(void);

/*********************************************
*函数功能：虚拟设备状态处理
*参数说明：无          
*返回值：无
*********************************************/
void VirtualSignalStateProc(void);

/*
* 功能描述： 设置驱动继电器混线状态
* 参数说明： 无       
* 返回值  ： 无
*			      
*/
void SetDriveRelayHunXianState(void);
/*
* 功能描述： 获取人工解锁反馈倒计时
* 参数说明： 
*            const UINT16 overlapId  保护区段id
*            const UINT16 OverlapUnLockCount 解锁倒计时周期数
*            const UINT32 startCycNum        解锁起始周期
* 返回值  ： 倒计时
*			      
*/
UINT16 GetOverlapUnlockBackTime(const UINT16 overlapId, UINT16 OverlapUnLockCount, const UINT32 startCycNum);
/*
* 功能描述： 根据主体信号机当前颜色驱动复示信号机
* 参数说明： 无       
* 返回值  ： 无
*	注意：  		      
*/
void DriveFushiSignal(void);

/*
* 功能描述： 检查自动触发表示报警灯是否亮灯标志
* 参数说明： UINT8 virCiId 虚拟联锁ID
* 返回值  ： CI_SUCCESS 亮灯
*            CI_ERROR   灭灯
*/
UINT8 CheckAutoTriggerIndicatFlag(UINT8 virCiId);
/*
* 功能描述： 指示器状态处理
* 参数说明： void
* 返回值  ： void 
*/
void OcStationIndicStateProc(void);

/*
* 功能描述： PSD通信状态指示灯状态处理
* 参数说明： UINT16 indicatorId    指示灯ID 
*            UINT8 devType         指示灯类型
* 返回值  ：    
*/
void SetPSDCommonState(UINT16 indicatorId ,UINT8 devType);
/*
* 功能描述： PSD通信状态指示灯状态处理
* 参数说明： UINT16 indicatorId    指示灯ID 
*            UINT8 devType         指示灯类型
* 返回值  ：    
*/
void SetPSDCommonState_UseVirCI(UINT8 virCIid,UINT8 indicatorId ,UINT8 devType);

/*
* 功能描述： 照查状态指示灯状态处理
* 参数说明： UINT16 indicatorId    指示灯ID 
*   
* 返回值  ：    
*/
void SetZhaoChaIndictorCommonState(UINT16 indicatorId);

/*
* 功能描述： 联锁站控模式指示灯设置
* 参数说明： void
* 返回值  ： void   
*/
void SetCiModeIndicatorState(UINT16 indicatorId);

/*
* 功能描述： 虚拟联锁使用的输出指示灯处理
* 参数说明： void
* 返回值  ： void
*/
void OutPutIndicatorState_UseVirCI(void);

/*
* 功能描述： 进路相关命令反馈倒计时处理
* 参数说明： const UINT16 wRouteId  进路ID
* 返回值  ： void
* cgh-优化倒计时圈复杂度
*/
void RouteTimeDataBackProcess(const UINT16 wRouteId);
/*
* 功能描述： 物理区段相关命令反馈倒计时处理
* 参数说明： const UINT16 wPhySecId  物理区段ID
* 返回值  ： void
* cgh-优化倒计时圈复杂度
*/
void PhySecTimeDataBackProcess(const UINT16 wPhySecId);

/*
* 功能描述： 保护区段相关命令反馈倒计时处理
* 参数说明： const UINT16 wPhySecId  保护区段ID
* 返回值  ： void
* cgh-优化倒计时圈复杂度
*/
void OverlapTimeDataBackProcess(const UINT16 wOverlapId);
/*
* 功能描述： 总复位继电器反馈倒计时处理
* 参数说明： void
* 返回值  ： void
* cgh-优化倒计时圈复杂度
*/
void ZFWJTimeDataBackProcess(void);

/*
* 功能描述： 非进路反馈倒计时处理
* 参数说明： NonRouteDataStruct* pNonRoute 非进路数据结构体
* 返回值  ： void
* cgh-优化倒计时圈复杂度
*/
void NonRouteTimeDataBackProcess(NonRouteDataStruct* pNonRoute);

/*
* 功能描述： 防淹门延时关门相关命令反馈倒计时处理
* 参数说明： const UINT16 wFloodGateId  防淹门ID
* 返回值  ： void
*/
void FloodGateTimeDataBackProcess(const UINT16 wFloodGateId);

/*
* 功能描述： 处理后备列车发送数据信息
* 参数说明： void
* 返回值  ： 无
*/
void VobcBackUpOutputProcess(void);

/*
* 功能描述： 处理后备列车发送逻辑区段数据信息
* 参数说明： const UINT16 wTrainId 列车ID
* 返回值  ： 无
* by cgh 20240710
*/
void VobcBackUpLogSecManage(const UINT16 wTrainId);

/*
* 功能描述： 处理后备列车发送进路数据信息(折返进路需要记录折返逻辑区段信息)
* 参数说明： const UINT16 wTrainId 列车ID
* 返回值  ： 无
* by cgh 20240710
*/
void VobcBackUpRouteManage(const UINT16 wTrainId);

/*
* 功能描述： 后备列车发送保护区段数据信息处理
* 参数说明： const UINT16 wTrainId 列车ID
* 返回值  ： 无
* by cgh 20240710
*/
void VobcBackUpProSecManage(const UINT16 wTrainId);

/*
* 功能描述： 后备列车发送限速区段数据信息处理
* 参数说明： const UINT16 wTrainId 列车ID
* 返回值  ： 无
* by cgh 20240710
*/
void VobcBackUpXiansuSecManage(const UINT16 wTrainId);

/*
* 功能描述： 添加临时限速物理区段数据
* 参数说明： const UINT16 wPhySecId 逻辑区段ID
*			 const UINT16 wTrainId 列车ID
* 返回值  ： 无
*/
void AddXiansuPhySecData(const UINT16 wLogSecId, const UINT16 wTrainId);

/*
* 功能描述： 处理后备列车发送屏蔽门或者ESB数据信息
* 参数说明： UINT16 wTrainId 列车id
* 返回值  ： 无
*/
void VobcBackUpPsdEsbManage(UINT16 wTrainId);

/*
* 功能描述: 添加逻辑区段PSD数据信息
* 参数说明： const UINT16 , logSecID 逻辑区段ID
*			ABLTrainRelPsdStru* tmpAblPsdData Psd信息数组
*			UINT8 ablPsdNum 已有Psd数量
* 返回值  ：>0添加的个数  0:数据溢出或者错误
*/
UINT8 AddABLPsdInfo(const UINT16 logSecID, ABLTrainRelPsdStru* tmpAblPsdData, const UINT8 ablPsdNum);

/*
* 功能描述: 添加某个逻辑区段ESB数据信息
* 参数说明： const UINT16 , logSecID 逻辑区段ID
*			ABLTrainRelEsbStru* tmpAblEsbData Esb信息数组
*			UINT8 ablEsbNum 已有Esb数量
* 返回值  ：>0添加的个数  0:数据溢出或者错误
*/
UINT8 AddABLEsbInfo(const UINT16 logSecID, ABLTrainRelEsbStru* tmpAblEsbData, const UINT8 ablEsbNum);

# if 0
/*
* 功能描述： 处理后备列车发送道岔数据信息
* 参数说明： VobcBackUpToCiDataStruct* VobcBackUpToCiDataStr列车后备信息结构体
* 返回值  ： 无
*/
void VoBcBackUpSwitchManage(VobcBackUpToCiDataStruct* VobcBackUpToCiDataStr);

/*
* 功能描述：添加ABL道岔
* 参数说明： const UINT16 switchID, 道岔ID
*			ABLTrainRelSwitchStru* tmpAblSwitchData 道岔信息数组
*			UINT8 tmpSwitchNum 已添加道岔数量
* 返回值  ：CI_SUCCESS 新添加 CI_ERROR未改变
*/
UINT8 AddABLSwitchInfo(const UINT16 switchID, ABLTrainRelSwitchStru* tmpAblSwitchData, UINT16 tmpSwitchNum);

/*
* 功能描述：添加逻辑区段所在物理区段全部道岔道岔
* 参数说明：
* 输入参数: UINT8 logSecNum 逻辑区段数量 UINT16* logSecBuf
* 输出参数: ABLTrainRelSwitchStru* tmpAblSwitchData 道岔信息数组 UINT8* chAblSwitchNum 道岔数量
* 返回值  ：>0添加道岔的个数  0:数据溢出或者已添加
* Create:  fan  2024.5.21
*/
UINT8 AddLogBelongPhySecABLSwitchInfo(UINT16 logSecNum, UINT16* logSecBuf, ABLTrainRelSwitchStru* tmpAblSwitchData, UINT8 chAblSwitchNum);
#endif

/*
* 功能描述： 列车车身所处位置反向进路检查
* 参数说明： const UINT16 wTrainId 列车ID
* 返回值  ： 无
* by cgh 20240711
*/
void VobcLocReverseRouteCheck(const UINT16 wTrainId);


/*
* 功能描述： 后备列车发送脚下进路逻辑区段空闲信息计算
* 参数说明： const UINT16 wTrainId 列车ID
* 返回值  ： 无
* by LC
*/
void VobcBackUpRouteNoOccuManage(const UINT16 wTrainId);

/*
* 功能描述： 检查后备列车所在进路内是否空闲
* 参数说明： const UINT16 wTrainId 列车ID
* 返回值  ： CI_SUCCESS 无占用
*           CI_ERROR 存在占用
* by LC
*/
UINT8 VobcBackUpRouteNoOccuCheck(const UINT16 wTrainId);

/*
* 功能描述： 检查后备列车所在进路保护区段是否空闲
* 参数说明： const UINT16 wTrainId 列车ID
*          const UINT16 overLogSecId  保护区段内最后一个逻辑区段ID（出参）
* 返回值  ： CI_SUCCESS 空闲
*           CI_ERROR 存在占用
* by LC
*/
UINT8 VobcBackUpOverlapNoOccuCheck(const UINT16 wOverlapId, UINT16* overLogSecId);

/*
* 功能描述： 检查其他联锁条件中是否配置站外直轨计轴条件
* 参数说明： const UINT16 routeId 进路ID
* 返回值  ： CI_SUCCESS 已配置
*           CI_ERROR 未配置
* by LC
*/
UINT8 FindRouteLeaveAxis(const UINT16 routeId);

/*
* 功能描述： 无人折返继电器粘连状态处理
* 参数说明： void
* 返回值  ：无
* by cgh 20240904
*/
void RtnRealyAdhesionStatePro(void);

#ifdef __cplusplus
}
#endif

#endif
