/********************************************************
*
* 文 件 名： LogicalRouteLogicCheck.h
* 版权说明： 北京交控科技有限公司
* 创建时间： 2023-10-10
* 作    者： 联锁组
* 功能描述： 逻辑进路条件检查函数的头文件
* 函数包括：
* 使用注意：
* 修改记录：
* by lc 20231011创建
*
********************************************************/

#ifndef _LOGICAL_ROUTE_LOGIC_CHECK_H_
#define _LOGICAL_ROUTE_LOGIC_CHECK_H_


#include "CommonTypes.h"
#include "RouteDefine.h"
#include "SectionDefine.h"



#ifdef __cplusplus
extern "C" {
#endif


/**
* @brief 逻辑进路办理条件检查
* @param  wLogRouteId 逻辑进路ID
* @return 1，检查通过  0，检查不通过
* @note：
*/
UINT8 SetLogRouteCheckProcess(UINT16 const logRouteId);

/**
* @brief 逻辑进路锁闭条件检查
* @param  wLogRouteId 逻辑进路ID
* @return 1，检查通过  0，检查不通过
* @note：
*/
UINT8 LockLogRouteCheckProcess(UINT16 const logRouteId);


/**
* @brief 逻辑进路关联的物理区段封锁检查
* @param  wLogRouteId 逻辑进路ID
*         UINT8 functionId,      调用函数编号
*          UINT8 sendLevel,       故障码发送级别
* @note：
*/
UINT8 LogRoutePhySecFengSuoCheck(UINT16 logRouteId, UINT16* pDevId, UINT8* pDevState);

/**
* @brief 逻辑进路逻辑区段锁闭检查
* @param  wLogRouteId 逻辑进路ID
*         UINT8 pDevId,设备ID
*          UINT8 pDevState,设备状态
* @note：
*/
UINT8 LogRouteSectionLockCheck(UINT16 logRouteId, UINT16* pDevId, UINT8* pDevState);

/**
* @brief 逻辑区段被逻辑进路锁闭条件检查
* @param  wLogRouteId 逻辑进路ID
*         UINT8 pDevId,设备ID
*          UINT8 pDevState,设备状态
* @note：
*/
UINT8 LogRouteLockBylogRouteCheck(UINT16 logRouteId, UINT16* pDevId, UINT8* pDevState);
/**
* @brief 逻辑区段是否被引导进路锁闭条件检查
* @param  wLogRouteId 逻辑进路ID
*         UINT8 pDevId,设备ID
*          UINT8 pDevState,设备状态
* @note：
*/
UINT8 LogRouteYDLockCheck(UINT16 logRouteId, UINT16* pDevId, UINT8* pDevState);
/**
* @brief 逻辑进路区段检查
* @param  wLogRouteId 逻辑进路ID
*         UINT8 functionId,      调用函数编号
*         UINT8 sendLevel,       故障码发送级别
* @note：
*/
UINT8 LogRouteSectionCheck(UINT16 logRouteId, UINT8 functionId, UINT8 sendLevel);

/**
* @brief 逻辑进路跳跃锁闭检查
* @param  wLogRouteId 逻辑进路ID
*         UINT8 functionId,      调用函数编号
*         UINT8 sendLevel,       故障码发送级别
* @note：
*/
UINT8 LogRouteJumpLockCheck(UINT16 logRouteId, UINT16* pDevId, UINT8* pDevState);

/**
* @brief 办理逻辑进路道岔条件检查
* @param  wLogRouteId 逻辑进路ID
*         UINT8 functionId,      调用函数编号
*         UINT8 sendLevel,       故障码发送级别
* @note：
*/
UINT8 SetLogRouteSwitchCheck(UINT16 logRouteId, UINT8 functionId, UINT8 sendLevel);

/**
* @brief 锁闭逻辑进路道岔条件检查
* @param  wLogRouteId 逻辑进路ID
*         UINT8 functionId,      调用函数编号
*         UINT8 sendLevel,       故障码发送级别
* @note：
*/
UINT8 LockLogRouteSwitchCheck(UINT16 logRouteId, UINT8 functionId, UINT8 sendLevel);

/**
* @brief 逻辑进路道岔封锁条件检查
* @param  UINT16 routeId,    逻辑进路号
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
*            UINT8* pYLockAlarmFlag  引导总锁报警标志（返回）
* @note：CI_ERROR  CI_SUCCESS
*/
UINT8 LogRouteSwitchFLockCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState, UINT8* pYLockAlarmFlag);

/*
* 功能描述： 逻辑进路防护道岔封锁条件检查
* 参数说明： UINT16 routeId,    逻辑进路号
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
*            UINT8* pYLockAlarmFlag  引导总锁报警标志（返回）
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 LogRouteProSwitchFLockCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState, UINT8* pYLockAlarmFlag);

/*
* 功能描述： 逻辑进路侧防条件满足检查
* 参数说明： UINT16 routeId,    逻辑进路号
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 LogRouteCeFangSwitchCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState);

/*
* 功能描述： 逻辑进路区段全部联络线设备条件满足检查
* 参数说明： UINT16 logRouteId,    逻辑进路ID号
*            UINT8 functionId,  调用函数编号
*            UINT8 sendLevel,   故障码发送级别
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 LogRouteContactLineDevSwitCheck(UINT16 const logRouteId, UINT8 functionId, UINT8 sendLevel);


/*
* 功能描述： 逻辑进路防护道岔防护锁闭条件满足检查
* 参数说明： UINT16 routeId,    逻辑进路号
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 LogRouteProtectLockSwitchCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState);

/*
* 功能描述： 逻辑进路道岔位置与是否可动条件检查
* 参数说明： UINT16 routeId,    进路号
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 LogRouteSwitchMoveValidCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState);

/*
* 功能描述： 逻辑进路防护道岔位置与是否可动条件检查
* 参数说明： UINT16 routeId,    进路号
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 LogRouteProSwitchMoveValidCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState);

/**
* @brief 逻辑进路道岔关联区段锁闭条件检查
* @param  wLogRouteId 逻辑进路ID
*         UINT8 functionId,      调用函数编号
*         UINT8 sendLevel,       故障码发送级别
* @note：
*/
UINT8 LogRouteSwitchRelaySecCheck(UINT16 logRouteId, UINT8 functionId, UINT8 sendLevel);

/*
* 功能描述： 逻辑进路内道岔关联另一逻辑区段锁闭检查
* 参数说明： UINT16 routeId,    进路号
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 LogRouteSwOtherLogLockCheck(UINT16 const logRouteId, UINT16* pDevId, UINT8* pDevState);

/**
* @brief 逻辑进路内道岔关联物理区段的非进路内且非道岔关联的逻辑区段锁闭检查
* @param  wLogRouteId 逻辑进路ID
*         UINT8 pDevId,设备ID
*          UINT8 pDevState,设备状态
* @note：
*/
UINT8 LogRouteOutLogSecLockCheck(UINT16 logRouteId, UINT16* pDevId, UINT8* pDevState);

/**
* @brief 逻辑进路侵限条件检查
* @param  wLogRouteId 逻辑进路ID
*         UINT8 functionId,      调用函数编号
*         UINT8 sendLevel,       故障码发送级别
* @return CI_ERROR  不通过
*         CI_SUCCESS  通过
* @note：by LC
*/
UINT8 LogRouteIntruSecCheck(UINT16 logRouteId, UINT8 functionId, UINT8 sendLevel);

/**
* @brief 检查逻辑进路征用是否成功
* @param  wLogRouteId 逻辑进路ID
*         UINT8 functionId,调用函数编号
*         UINT8 sendLevel,故障码发送级别
* @return CI_ERROR  不通过
*         CI_SUCCESS  通过
* @note：by LC
*/
UINT8 LogRouteUseStateCheck(UINT16 logRouteId);

/*
* 功能描述： 锁闭逻辑进路道岔位置条件检查
* 参数说明： UINT16 routeId,    进路号
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 LogRouteSwitchPosCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState);

/*
* 功能描述： 锁闭逻辑进路防护道岔位置条件检查
* 参数说明： UINT16 routeId,    进路号
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 LogRouteProSwitchPosCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState);

/* 逻辑进路信号保持区段联锁条件检查 */
/*
* 功能描述： 逻辑进路信号保持区段联锁条件检查
* 参数说明：
*            UINT16 wLogRouteId,    逻辑进路号
*            UINT8 functionId,  调用函数编号
*            UINT8 sendLevel,   故障码发送级别
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 KeepLogRouteSectionCheck(UINT16 wLogRouteId, UINT8 functionId, UINT8 sendLevel);

/**
* @brief 逻辑区段被逻辑进路锁闭状态检查
* @param  UINT16 wLogRouteId 逻辑进路ID
*		  UINT8 checkState		需要检查的逻辑锁闭状态
*         UINT8 pDevId,设备ID
*          UINT8 pDevState,设备状态
* @note：
*/
UINT8 LogNormalLockBylogRouteCheck(UINT16 wLogRouteId, UINT8 checkState, UINT16* pDevId, UINT8* pDevState);

/**
* @brief 逻辑进路逻辑区段异常锁闭以及第一逻辑区段未被进路锁闭检查
* @param  wLogRouteId 逻辑进路ID
*         UINT8 pDevId,设备ID
*          UINT8 pDevState,设备状态
* @note：
*/
UINT8 LogRouteSectionExceptLockCheck(UINT16 wLogRouteId, UINT16* pDevId, UINT8* pDevState);

/*
* 功能描述： 逻辑进路第一逻辑区段检查
* 参数说明：
*            UINT16 const wLogRouteId,    逻辑进路号
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
* 返回值  ： CI_ERROR   检查失败
*            CI_SUCCESS 检查通过
*/
UINT8 LogRouteFirstLgcSecCheck(UINT16 const wLogRouteId, UINT16 *pDevId, UINT8 *pDevState);


/**
* @brief 检查逻辑进路内部逻辑区段是否全部解锁
* @param  wLogRouteId 逻辑进路ID
* @return CI_ERROR  不通过
*         CI_SUCCESS  通过
* 创建:  fan 2023-10-11
*/
UINT8 LogRouteLogSecReleaseCheck(UINT16 logRouteId);

/* 逻辑进路信号保持信号机联锁条件检查 */
/*
* 功能描述： 逻辑进路信号保持信号机联锁条件检查
* 参数说明：
*            UINT16 wLogRouteId,    逻辑进路号
*            UINT8 functionId,  调用函数编号
*            UINT8 sendLevel,   故障码发送级别
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 KeepLogRouteSignalCheck(UINT16 wLogRouteId, UINT8 functionId, UINT8 sendLevel);


/* 逻辑进路信号开放信号机联锁条件检查 */
/*
* 功能描述： 逻辑进路信号开放信号机联锁条件检查
* 参数说明：
*            UINT16 wLogRouteId,    逻辑进路号
*            UINT8 functionId,  调用函数编号
*            UINT8 sendLevel,   故障码发送级别
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 OpenLogRouteSignalCheck(UINT16 wLogRouteId, UINT8 functionId, UINT8 sendLevel);

/*
* 功能描述： 逻辑进路信号机封锁状态检查
* 参数说明： UINT16 const wLogRouteId, 逻辑进路ID
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 LogRouteSignalFLockCheck(UINT16 const wLogRouteId, UINT16 *pDevId, UINT8 *pDevState);

/* 逻辑进路信号保持道岔联锁条件检查 */
/*
* 功能描述： 逻辑进路信号保持道岔联锁条件检查
* 参数说明：
*            UINT16 wLogRouteId,    逻辑进路号
*            UINT8 functionId,  调用函数编号
*            UINT8 sendLevel,   故障码发送级别
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 KeepLogRouteSwitchCheck(UINT16 wLogRouteId, UINT8 functionId, UINT8 sendLevel);

/*
* 功能描述： 逻辑区段为逻辑进路锁闭的第一区段检查
* 参数说明： const UINT16 wLogSectionId, 逻辑区段ID
* 返回值  ：CI_ERROR 检查不通过
*			CI_SUCCESS 检查通过
* by cgh 20231013
*/
UINT8 LogSecLogRouteFirstLockCheck(const UINT16 wLogSectionId);

/* 逻辑进路信号保持站台联锁条件检查 */
/*
* 功能描述： 逻辑进路信号保持站台联锁条件检查
* 参数说明：
*            UINT16 wLogRouteId,    逻辑进路号
*            UINT8 functionId,  调用函数编号
*            UINT8 sendLevel,   故障码发送级别
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 OpenLogRoutePlatformCheck(UINT16 wLogRouteId, UINT8 functionId, UINT8 sendLevel);

/*
* 功能描述： 逻辑进路站台紧急关闭按钮无效检查
* 参数说明： UINT16 const wLogRouteId,    逻辑进路号
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 LogRouteEsbVainCheck(UINT16 const wLogRouteId, UINT16 *pDevId, UINT8 *pDevState);

/*
* 功能描述： 逻辑进路站台屏蔽门关闭检查
* 参数说明： UINT16 const routeId,    进路号
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 LogRoutePsdCloseCheck(UINT16 const wLogRouteId, UINT16 *pDevId, UINT8 *pDevState);

/*
* 功能描述： 逻辑进路站台未扣车检查
* 参数说明： UINT16 const routeId,    进路号
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 LogRouteDetainCheck(UINT16 const wLogRouteId, UINT16 *pDevId, UINT8 *pDevState);

/*
* 功能描述： 物理区段是否存在逻辑进路锁闭检查
* 参数说明： UINT16 const wPhySectionId, 物理区段ID
* 返回值  ： 0 数据非法，校验失败
*            >0 物理区段逻辑进路锁闭状态
* by cgh 20231014
*/
UINT8 PhySecLogLockStateCheck(UINT16 const wPhySectionId);

/*
* 功能描述： 计轴区段是否存在逻辑进路锁闭检查
* 参数说明： UINT16 const wPhySectionId, 计轴区段ID
* 返回值  ： 0 数据非法，校验失败
*            >0 物理区段逻辑进路锁闭状态
* by cgh 20231014
*/
UINT8 AixsSecLogLockStateCheck(UINT16 const wAxisSectionId);

/*
* 功能描述： 逻辑进路内道岔关联另一逻辑区段未锁闭检查
* 参数说明： UINT16 const logRouteId,    进路号
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
* 返回值  ： CI_ERROR
*            CI_SUCCESS
* add 20221005 优化进路条件检查，进路办理时，检查道岔另一位置关联逻辑区段未锁闭
*/
UINT8 LogRouteSwOtherLogLockValCheck(UINT16 const logRouteId, UINT16* pDevId, UINT8* pDevState);

/*
* 功能描述： 逻辑进路包含的物理区段的非进路内且非道岔关联的逻辑区段有效性检查
* 参数说明： UINT16 const logRouteId,    进路号
*            UINT16 *pDevId,    设备Id（返回）
*            UINT8 *pDevState,  设备状态（返回）
* 返回值  ： CI_ERROR
*            CI_SUCCESS
* add 20221008 适配进路驱动道岔提前扳动功能
*/
UINT8 LogRouteOutLogSecOccClearCheck(UINT16 const routeId, UINT16* pDevId, UINT8* pDevState);

/*
* 功能描述： 检查逻辑进路第一个锁闭的逻辑区段的上一个逻辑区段锁闭状态
* 参数说明： const UINT16 wLogRouteId  逻辑进路ID
*           const UINT16 wLogSecId  逻辑区段ID
* 返回值  ： CI_ERROR   上一个逻辑区段锁闭状态检查不通过
*            CI_SUCCESS 上一个逻辑区段锁闭状态检查通过
* by cgh 20231016
*/
UINT8 CheckLogRouteLogSecLastSecLock(const UINT16 wLogRouteId, const UINT16 wLogSecId);

/*
* 功能描述： 获取指定ID逻辑进路资源包含该逻辑区段
* 参数说明： const UINT16 wLogRouteId, 逻辑进路ID
*			 const UINT16 lgcSecId
* 返回值  ： CI_SUCCESS: 在逻辑进路预锁闭中
*            CI_ERROR: 不在逻辑进路预锁闭中
*/
UINT8  CheckLgcSecInLogRoute(const UINT16 wLogRouteId, const UINT16 lgcSecId);


/*
* 功能描述： 获取指定ID逻辑进路列车脚下资源包含该物理区段
* 参数说明： const UINT16 wLogRouteId, 逻辑进路ID
*			 const UINT16 phySecId
* 返回值  ： CI_SUCCESS: 在逻辑进路预锁闭中
*            CI_ERROR: 不在逻辑进路预锁闭中
*/
UINT8  CheckPhySecInLogRoute(const UINT16 wLogRouteId, const UINT16 phySecId);

/*
* @brief 检查是否为同一列车重复办理同一逻辑进路
* @param const UINT16 wLogSecSum 逻辑进路包含的逻辑区段数目
* @param const UINT16* pLogSecIdbuf 逻辑进路包含的逻辑区段ID数组
* @param const UINT16 wTrainId 办理逻辑进路的列车ID
* @return 1 成功
*         0 失败
* @note：Created by LQ 2023.11.01
*/
UINT8 RepeatSetLogicRouteCheck(const UINT16 wLogSecSum, const UINT16* pLogSecIdbuf, const UINT16 wTrainId);

/*
* @brief 检查逻辑进路是否需要添加始端信号机
* @param const UINT16 wFstLogSecId 逻辑进路包含的第一个逻辑区段ID
* @param const UINT8 cLogicRouteDir 逻辑进路方向（逻辑方向）
* @param const UINT16 wTrainId 办理逻辑进路的列车ID
* @return 0 不添加始端信号机
*        >0 待添加的始端信号机ID
* @note：Created by LQ 2023.11.01
*/
UINT16 LogicRouteAddStartSignalCheck(const UINT16 wFstLogSecId, const UINT8 cLogicRouteDir, const UINT16 wTrainId);

/*
* @brief 检查逻辑区段是否非道岔区段且具有停车区域属性
* @param const UINT16 wLogSecId 逻辑区段ID
* @return 0 道岔区段或不具有停车区域属性
*         1 非道岔区段且具有停车区域属性
* @note：Created by LQ 2023.11.03
*/
UINT8 LogSecIsSwitchAndStopAreaCheck(const UINT16 wLogSecId);

/* 逻辑进路信号保持防淹门联锁条件检查 */
/*
* 功能描述： 逻辑进路信号保持防淹门联锁条件检查
* 参数说明：
*            UINT16 wLogRouteId,    逻辑进路号
*            UINT8 functionId,  调用函数编号
*            UINT8 sendLevel,   故障码发送级别
* 返回值  ： CI_ERROR
*            CI_SUCCESS
*/
UINT8 KeepLogRouteFloodGateCheck(UINT16 wLogRouteId, UINT8 functionId, UINT8 sendLevel);


#ifdef __cplusplus
}
#endif

#endif
