/********************************************************
*                                                                                                            
* 文 件 名： InterlockCommonManage.h   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2015-06-30
* 作    者： 联锁组
* 功能描述： 联锁车辆段和正线公用逻辑管理函数头文件  
* 函数包括：
* 使用注意：
* 修改记录：   
*
********************************************************/ 

#ifndef _INTERLOCK_LOGIC_COMMON_MANAGE_H_
#define _INTERLOCK_LOGIC_COMMON_MANAGE_H_



#include "../System/SystemParameterManage.h"
#include "../System/CiSystemDefine.h"
#include "../Switch/SwitchDefine.h"
#include "../Switch/SwitchDataManage.h"
#include "../Switch/SwitchConfigDataManage.h"
#include "../Signal/SignalDefine.h"
#include "../Signal/SignalDataManage.h"
#include "../Signal/SignalConfigDataManage.h"
#include "../Section/SectionDefine.h"
#include "../Section/PhysicalSectionDataManage.h"
#include "../Section/PhysicalSectionConfigDataManage.h"
#include "../Route/RouteDefine.h"
#include "../Route/RouteDataManage.h"
#include "../Route/RouteConfigDataManage.h"
#include "../ReverseRoute/ReverseRouteConfigDataManage.h"
#include "../2oo2/2oo2InterfaceDataManage.h"
#include "../ERROR/ErrorDataManage.h"
#include "../ERROR/ErrorDefine.h"
#include "../DataManage/DeviceDataManage.h"
#include "../ParsePack/CiInterfaceDefine.h"
#include "../ParsePack/ParsePackAtsData.h"
#include "../LogicManage/InterlockLogicManage.h"
#include "../LogicManage/TradInterlockLogicManage.h"
#include "../Train/TrainDefine.h"
#include "LogicalRouteDataManage.h"
#include "../EnvelopeManage/EnvelopeManageAPI.h"

#ifdef SCADE_MODE
#include "../LogicManage/General/LogicManageScadeInterface.h"
#else
#include "../LogicProcess/InterlockLogicProcess.h"
#include "../LogicProcess/TradInterlockLogicProcess.h"
#endif

#ifdef __cplusplus
extern "C" {
#endif

/* C01_进路监督级别确认 */
/*
* 功能描述： 进路监督级别确认
* 参数说明： const UINT16 routeId   进路号
* 返回值  ： ROUTE_LEVEL_BLOC（点式）
*            ROUTE_LEVEL_CBTC（CBTC）
* 故障编码： EFC_ROUTE_LEVEL
*/
UINT8 RouteLevelConfirmLogicProcess(const UINT16 routeId);
/*
* 功能描述： 获取指定信号机ID所关联的引导进路ID
* 参数说明： const UINT16 signalId, 信号机ID
* 返回值  ： routeIdBuf[jj]   进路ID
*           0: 获取失败
*/
UINT16 GetStartSignalRouteId(const UINT16 signalId);


/*
* 功能描述： 清除进路物理区段之前占用状态
* 参数说明： const UINT16 routeId, 进路ID
* 返回值  ： 0:清除失败
*			 1:清除成功 
*/
UINT8 CleanRoutePhySecPreOccupyState(const UINT16 routeId);

/*
* 功能描述： 设置进路物理区段征用状态
* 参数说明： const UINT16 routeId, 进路ID
*            const UINT8 useState, 征用状态
* 返回值  ： 无
*/
void SetRoutePhySectionOccupyState(const UINT16 routeId, const UINT8 setUseState);

/*
* 功能描述： 设置进路物理区段锁闭状态
* 参数说明： const UINT16 routeId, 进路ID
*            const UINT8 lockState, 锁闭状态
* 返回值  ： void
*/
void SetRoutePhySectionLockState(const UINT16 routeId, const UINT8 lockState);

/*
* 功能描述： 设置进路关联防护道岔防护锁闭状态
* 参数说明： const UINT16 routeId, 进路ID
*            const UINT8 lockCommand, 锁闭状态
* 返回值  ： void
*/
void SetRouteRelProSwitchLockSta(const UINT16 routeId, const UINT8 lockCommand);

/*
* 功能描述： 进路初选处理
* 参数说明： const UINT16 routeId, 进路ID
* 返回值  ： UINT8   
*/
UINT8 RouteFirstXuanProc(const UINT16 routeId);
/*
* 功能描述： 物理区段故障解锁逻辑管理
* 参数说明： const UINT16 phySectionId, 物理区段ID
* 返回值  ： void
*/
void PhySecFaultUnlockLogicManage(const UINT16 phySectionId,const UINT8 virCIid);
/*
* 功能描述： 将进路内第一个占用的物理区段之前的区段设置成异常锁闭
* 参数说明： const UINT16 routeId, 进路ID
* 返回值  ： void
*/
void SetRoutePhySecExpLockToOccupy(const UINT16 routeId);

/*
* 功能描述：判断进路始端信号机内外方物理区段同时占压
* 参数说明： const UINT16 routeId, 进路ID
* 返回值  ： CI_ERROR：非同时占压
*            CI_SUCCESS：同时占压
*/
UINT8 RouteInOutSecOccupy(const UINT16 routeId);

/*
* 功能描述： 判断是否需要清除列车驶入进路标志，如果需要清除，则清除
* 参数说明： const UINT16 routeId，进路ID
* 返回值  ： void
*/
void TryClearRouteTrainEnterFlag(UINT16 routeId);
#if 0
/*
* 功能描述： 扣车、SPKS、PSD导致信号关闭又重开处理
* 参数说明： const UINT16 routeId，进路ID
* 返回值  ： void
*/
void RouteAutoReOpenProc(const UINT16 routeId);
#endif
/*
* 功能描述： 进路异常锁闭物理区段传递
* 参数说明： const UINT16 routeId，进路ID
* 返回值  ：无
*/
void RouteExpLockContinue(UINT16 routeId);

/*
* 功能描述： SPKS、PSD、扣车恢复重开信号处理
* 参数说明： const UINT16 routeId，进路ID
* 返回值  ： void
*/
void RouteRecoverOpenProc(const UINT16 routeId);

/* 功能描述： ATS或现地锁闭保护区段命令处理
* 参数说明： const UINT16 expLkOverlapId, ATS或现地发送的期望锁闭区段ID
* 返回值  ：void
*/
void SetAtsExpectLockOverlapIdProc(const UINT16 expLkOverlapId,const UINT8 lockType);

/*
* 功能描述： 物理区段故障解锁检查
* 参数说明： const UINT16 phySectionId, 物理区段ID
*           const UINT8 virCIid  操作的Rtu(虚拟联锁现地)  ID  
* 返回值  ： void
*/
UINT8 CheckPhySecFaultUnlockCanDo(const UINT16 phySectionId,const UINT8 virCIid);

/*
* 功能描述： 设置进路逻辑区段锁闭状态
* 参数说明： const UINT16 routeId, 进路ID
*            const UINT8 lockState, 锁闭状态
* 返回值  ： void
*/
void SetRouteLogSectionLockState(const UINT16 routeId, const UINT8 lockState);

/*
* @brief ： 设置进路公共资源标志
* @param ： const UINT16 wRouteId, 进路ID
*           const UINT8 chShrFlag, 共享状态
* @return  ： void
*/
void SetRouteLgcSecShareFlag(const UINT16 wRouteId, const UINT8 chShrFlag);
/*
* @brief ： 设置进路保护区段公共资源标志
* @param ： const UINT16 wRouteId, 进路ID
*			 const UINT16 wOverlapId 保护区段ID
*           const UINT8 chShrFlag, 共享状态
* @return  ： void
*/
void SetRouteOvlpOtherCiShrFlg(const UINT16 wRouteId, const UINT16 wOverlapId, const UINT8 chShrFlag);
/*
* 功能描述： 根据进路状态，清理相关标志
* 参数说明： const UINT16 routeId 进路ID
* 返回值  ： void
* cgh-合并CID-2341-5：
*/
void ClearSomeFlagDependRouteState(const UINT16 routeId);
/*
* 功能描述： 任意位置折返后下发区故解命令，延时设置区段故障处理
* 参数说明： const UINT16 phySectionId  物理区段ID
* 返回值  ： void
* cgh-20230508创建
*/
void DelayErrLockCmdDeal(const UINT16 phySectionId);

/*
* 功能描述： 设置进路部分逻辑区段锁闭状态
* 参数说明： const UINT16 routeId, 进路ID
*            const UINT8 lockState, 锁闭状态
* 返回值  ： void
*/
void SetRouteHalfLogSecLockState(const UINT16 routeId, const UINT8 lockState);

/*
* 功能描述： 设置进路部分物理区段征用状态
* 参数说明： const UINT16 routeId, 进路ID
*            const UINT8 useState, 征用状态
* 返回值  ： 无
*/
void SetRouteHalfPhySecUsingState(const UINT16 routeId, const UINT8 setUseState);

/*
* @brief ： 设置进路部分公共资源标志
* @param ： const UINT16 wRouteId, 进路ID
*           const UINT8 chShrFlag, 共享状态
* @return  ： void
*/
void SetRouteHalfLgcSecShareFlag(const UINT16 wRouteId, const UINT8 chShrFlag);

/*
*
* 功能描述： 设置进路部分防护道岔防护锁闭状态
* 参数说明： const UINT16 routeId, 进路ID
*            const UINT8 lockCommand, 锁闭状态
* 返回值  ： void
*/
void SetRouteHalfProSwLockState(const UINT16 routeId, const UINT8 lockCommand);

/*
* 功能描述： 进路初选处理
* 参数说明： const UINT16 routeId, 进路ID
* 返回值  ： UINT8
*/
UINT8 RouteHalfFirstXuanProc(const UINT16 routeId);
/*
* 功能描述： 设置进路部分锁闭列车脚下锁闭状态
* 参数说明： const UINT16 routeId, 进路ID
*            const UINT8 lockState, 锁闭状态
* 返回值  ： void
*/
void SetRouteTrainLocLogSecState(const UINT16 routeId, const UINT8 lockState);

/*
* 功能描述： 设置进路部分锁闭列车脚下物理区段锁闭状态, 需要先执行逻辑区段锁闭处理
* 参数说明： const UINT16 routeId, 进路ID
*            const UINT8 lockState, 锁闭状态
* 返回值  ： void
*/
void SetRouteTrainLocPhySecState(const UINT16 routeId, const UINT8 lockState);
/*
* 功能描述： 获取指定进路第一个正常锁闭的逻辑区段延时故障锁闭起始周期号
* 参数说明： const UINT16 routeId, 进路ID
*
* 返回值  ： 0:  获取失败
*			 >0: 进路第一个正常锁闭的逻辑区段延时故障锁闭起始周期号
*/
UINT32 GetRouFirDelayErlockStaCycNum(const UINT16 routeId);
/*
* 功能描述： 设置指定进路第一个正常锁闭的逻辑区段延时故障锁闭起始周期号
* 参数说明：const UINT16 routeId, 进路ID
*			 const UINT32 startCycNum 起始周期号
* 返回值  ： 无
*
*/
void SetRouFirDelayErlockStaCycNum(const UINT16 routeId, const UINT32 startCycNum);

/*
* 功能描述： 设置进路部分锁闭物理区段锁闭状态, 需要先执行逻辑区段锁闭处理
* 参数说明： const UINT16 routeId, 进路ID
*            const UINT8 lockState, 锁闭状态
* 返回值  ： void
*/
void SetRouteHalfPhySectionLockState(const UINT16 routeId, const UINT8 lockState);

/*
* 功能描述：校验进路是否需要驱动声光报警器
* 参数说明：const UINT16 routeId 进路ID
* 返回值  ：无
*/
void RouteNeedDriveSGBJCheck(const UINT16 routeId);

/*
* 功能描述： 逻辑区段故障解锁逻辑管理
* 参数说明： const UINT16 wPhySectionId, 物理区段ID
* const UINT8 chVirCIid  操作的Rtu(虚拟联锁现地)  ID
* 返回值  ： void
* by cgh 20231002
*/
void LogicSecFaultUnlockLogicManage(const UINT16 wPhySectionId, const UINT8 chVirCIid);

/*
* 功能描述： 逻辑区段故障解锁逻辑处理-进路属于本联锁
* 参数说明： const UINT16 wLogSectionId, 逻辑区段ID
* const UINT8 chVirCIid  操作的Rtu(虚拟联锁现地)  ID
* 返回值  ： void
* by cgh 20231002
*/
void LocalCiLogSecFaultUnlockProcess(const UINT16 wLogSectionId, const UINT8 chVirCIid);

/*
* 功能描述： 逻辑区段故障解锁逻辑处理-进路属于相邻联锁
* 参数说明： const UINT16 wLogSectionId, 逻辑区段ID
* const UINT8 chVirCIid  操作的Rtu(虚拟联锁现地)  ID
* 返回值  ： void
* by cgh 20231002
*/
void OtherCiLogSecFaultUnlockProcess(const UINT16 wLogSectionId, const UINT8 chVirCIid);

/*
* 功能描述： 逻辑区段故障解锁检查
* 参数说明： const UINT16 wLogSectionId, 逻辑区段ID
*           const UINT8 chVirCIid  操作的Rtu(虚拟联锁现地)  ID
* 返回值  ：CI_ERROR 检查不通过
*			CI_SUCCESS 检查通过
*/
UINT8 CheckLogSecFaultUnlockCanDo(const UINT16 wLogSectionId, const UINT8 chVirCIid);


/*
* 功能描述： 区故解检查失败驱动相关信号关闭
* 参数说明： const UINT16 wPhySectionId  物理区段ID
* 返回值  ： 无
* cgh-20231011创建
*/
void SecFaultUnlockDrvRelSigClose(const UINT16 wPhySectionId);

/*
* 功能描述：逻辑进路保持信号开放处理
* 参数说明： const UINT16 wLogRouteId, 逻辑进路ID
* 返回值  ： CI_ERROR：检查失败
*            CI_SUCCESS：检查成功
* 故障编码： EFUNC_KEEP_CBTC_R_SIGNAL
*/
UINT8 KeepOpenLogRouteSignalProc(const UINT16 wLogRouteId);

/*
* 功能描述：逻辑进路信号开放处理
* 参数说明： const UINT16 wLogRouteId, 逻辑进路ID
* 返回值  ： CI_ERROR：检查失败
*            CI_SUCCESS：检查成功
*/
UINT8 OpenLogRouteSignalProc(const UINT16 wLogRouteId);

/**
* @brief 查询列车小前处于逻辑进路位置(列车小前)
* @param UINT16 wTrainId 列车ID
* @param UINT16 wLogRouteId 逻辑进路ID
* @return 0：查询失败
*			1：列车未驶入进路
*			2：列车车头驶入进路但未跨压
*           3：列车跨压信号机
*			4：列车完全驶入进路
*			5：列车车头出清进路
*/
UINT8 dsuLogRouteTrainCrossSignal(const UINT16 wTrainId, const UINT16 wLogRouteId);
/**
* @brief 查询列车小前处于逻辑进路位置(列车小前)
* @param UINT16 wTrainId 列车ID
* @param UINT16 wLogRouteId 逻辑进路ID
* @return 0：查询失败
*			1：列车未驶入进路
*			2：列车车头驶入进路但未跨压
*			3：列车跨压始端信号机
*			4：列车完全驶入进路
*			5：列车车头出清进路
*/
UINT8 dsuLogRouteMinHeadTrainCrosSig(const UINT16 wTrainId, const UINT16 wLogRouteId);

/*
* 功能描述：逻辑进路开放保持信号检查处理
* 参数说明： const UINT16 wLogRouteId, 逻辑进路ID
* 返回值  ： CI_ERROR：检查失败
*            CI_SUCCESS：检查成功
* 故障编码： EFUNC_KEEP_CBTC_R_SIGNAL
*/
UINT8 KeepLogRouteSignalProcess(const UINT16 wLogRouteId);

/*
* 功能描述：逻辑进路开放信号检查处理
* 参数说明： const UINT16 wLogRouteId, 逻辑进路ID
* 返回值  ： CI_ERROR：检查失败
*            CI_SUCCESS：检查成功
* 故障编码： EFUNC_LogRouteSignalProcess
*/
UINT8 OpenLogRouteSignalProcess(const UINT16 wLogRouteId);

/*
* 功能描述：逻辑进路驱动信号机开放
* 参数说明： const UINT16 wLogRouteId, 逻辑进路ID
* 返回值  ： void
* 故障编码： EFUNC_KEEP_CBTC_R_SIGNAL
*/
void DriveLogRouteSignalOpen(const UINT16 wLogRouteId);

/*
* 功能描述：逻辑进路驱动信号机关闭
* 参数说明： const UINT16 wLogSignalId, 驱动信号机ID
* 返回值  ： void
* 故障编码： EFUNC_KEEP_CBTC_R_SIGNAL
*/
void DriveLogRouteSignalClose(const UINT16 wLogSignalId);


/*
* 功能描述： 逻辑进路监督级别确认
* 参数说明： const UINT16 signalId 始端信号机ID
* 返回值  ： void
* Created by LQ 2023/10/11
*/
void LogicRouteLevelConfirmProcess(const UINT16 wLogRouteId);

/*
* 功能描述： 逻辑进路下发区故解命令，延时设置逻辑区段逻辑故障处理
* 参数说明： const UINT16 wLogSectionId  逻辑区段ID
* 返回值  ： void
* cgh-20231012创建
*/
void LogRouteErrLockCmdDeal(const UINT16 wLogSectionId);

/*
* 功能描述： 逻辑进路区段故障解锁及传递处理
* 参数说明： const UINT16 wLogSectionId, 逻辑区段ID
* 返回值  ： void
* by cgh 20231013
*/
void LogRouteErrLockFaultProcess(const UINT16 wLogSectionId);

/*
* 功能描述： 逻辑进路逻辑区段故障传递
* 参数说明： const UINT16 wLogRouteId, 逻辑进路ID
* 返回值  ： void
* by cgh 20231013
*/
void LogRouteExpLockContinue(const UINT16 wLogRouteId);

/*
* 功能描述： 获取其他逻辑进路第一个锁闭的逻辑区段ID
* 参数说明： const UINT16 wLogSecId 逻辑区段ID
			 const UINT16 wLogRouteId, 逻辑进路ID
			 UINT16* wOtherLogRouteId 其他逻辑进路ID
* 返回值  ： 其他逻辑进路第一个锁闭的逻辑区段ID
* by cgh 20231020
*/
UINT16 GetOtherLogRouteFirNormalLogId(const UINT16 wLogSecId, const UINT16 wLogRouteId, UINT16* wOtherLogRouteId);

/*
* 功能描述： 获取指定逻辑进路第一个逻辑正常锁闭的逻辑区段延时故障锁闭起始周期号
* 参数说明： const UINT16 wLogRouteId, 逻辑进路ID
*
* 返回值  ： 0:  获取失败
*			 >0: 逻辑进路第一个逻辑正常锁闭的逻辑区段延时故障锁闭起始周期号
* by cgh 20231017
*/
UINT32 GetLogRouFirDelayErLockStaCyc(const UINT16 wLogRouteId);

/*
* 功能描述： 设置指定逻辑进路第一个逻辑正常锁闭的逻辑区段延时故障锁闭起始周期号
* 参数说明：const UINT16 wLogRouteId, 逻辑进路ID
*			 const UINT32 startCycNum 起始周期号
* 返回值  ： 无
* by cgh 20231017
*
*/
void SetLogRouFirDelayErLockStaCyc(const UINT16 wLogRouteId, const UINT32 startCycNum);

/*
* 功能描述： 逻辑进路区故解管理
* 参数说明： const UINT16 wPhySectionId, 物理区段ID
* 返回值  ： void
* by cgh 20231002
*/
void LogRouteErrLockFaultManage(const UINT16 wPhySectionId);

/* 功能描述： 带进路ID的保护区段办理命令
* 参数说明： const UINT16 expLkOverlapId, ATS或现地发送的期望锁闭区段ID
*            const UINT16 routeId 进路ID
* 返回值  ： 无
*/
void SetAtsLockOverlapHaveRouteId(const UINT16 expLkOverlapId, const UINT16 routeId);

/**
* @brief 部分进路脚下逻辑区段逻辑锁闭处理
* @param const UINT16 wLogSecId 逻辑区段ID
*        const UINT16 routeId 当前锁闭的进路ID
* @return CI_SUCCESS：处理部分进路脚下逻辑锁闭成功
*		  CI_ERROR：处理部分进路脚下逻辑锁闭失败
*/
UINT8 LogSecLockInHalfRouteProcess(const UINT16 wLogSecId, const UINT16 routeId);

/**
* @brief 获取进路总人解延时解锁周期数
* @param const UINT16 wRouteId 进路ID
* @return 进路总人解延时解锁周期数
* BY CGH 20240605
*/
UINT32 GetRouteDelayCycleCount(const UINT16 wRouteId);

/*
* 功能描述：部分进路通过逻辑区段清除原进路处理
* 参数说明：const UINT16 wRouteId, 进路ID
* 返 回 值：无
* Created By LQ  2024.09.10
*/
void CleanOldRouteProcByLogSec(const UINT16 wRouteId);

/*
* 功能描述：处理有效进路进路状态
* 参数说明： const UINT16 wRouteId, 进路ID
* 返回值  ： void
* BY CGH 20241204
*/
void DealValidRouteState(const UINT16 wRouteId);

#ifdef __cplusplus
}
#endif

#endif
