/******************************************************************************
** 文件名:  RRMManageAPI.h
** 描 述:   远程RM模块对外接口
*******************************************************************************/
#ifndef RRM_MANAGE_API_H_
#define RRM_MANAGE_API_H_
#include "RRMDefine.h"


/**
 * @brief 接口：远程RM主处理函数
 * @param[in] 无
 * @param[out] 无
 * @return 无
 * @note 无
 */
void rrm_MainProcess(void);


/**
 * @brief 接口：获取发送给ATS的UCT列车信息
 * @param[in] 无
 * @param[out] ATSTrainInfoStru* pInfo)
 * @return 无
 * @note 无
 */
void rrm_GetInfToATSUCTInfo(OUT ATSTrainInfoStru* pInfo);

/**
 * @brief 相邻联锁RRM条件检查
 * @param[in] const UINT16 wTrainID 列车ID
 * @param[in] const UINT16 wTrainNextStaId 列车下一站站台ID
 * @param[in] const UINT16 wAxisSecId 边界计轴区段ID
 * @param[in] const UINT8 chCheckDir 查询方向
 * @param[out] 无
 * @return CI_ERROR 检查失败
 *		   CI_SUCCESS 检查成功
 * @note by cgh 20240221
 */
UINT8 rrm_OtherCiConditionsCheck(const UINT16 wTrainID, const UINT16 wTrainNextStaId, const UINT16 wAxisSecId, const UINT8 chCheckDir);

/**
 * @brief 检查列车是否在站台
 * @param[in] UINT8 funValid 函数处理可用性标志
 * @param[in] UINT16 trainID 列车ID
 * @param[in] const UINT16 wTrainNextStaId 列车下一站站台ID
 * @param[in] IN const EnvelopeStruct* pTemp 包络指针
 * @param[out] UINT8* rrmReason 不允许的理由
 * @return UINT8
		   CI_ERROR 处理失败
		   CI_SUCCESS 处理成功
		   0xFF 未处理
 * @note by cgh 20240222
 */
UINT8 rrm_CheckOtherCiTrainInSta(UINT8 funValid, UINT16 trainID, const UINT16 wTrainNextStaId, IN const EnvelopeStruct* pTemp, OUT UINT8* rrmReason);

/**
 * @brief 查询RRM路径及道岔状态是否正确
 * @param[in] UINT8 funValid 函数处理可用性标志
 * @param[in] UINT16 trainID 列车ID
 * @param[in] UINT16 wAtsLgcStaId ATS停车区域ID
 * @param[out] RRMPathOfACSeqStruct* pACSeq RRM路径包含的计轴序列
 * @param[out] UINT8 *pNextTIOC 下一TIOC ID
 * @param[out] UINT16 *pNextSta 下一站台
 * @param[out] UINT8* rrmReason 不允许的理由
 * @return UINT8
		   CI_ERROR 处理失败
		   CI_SUCCESS 处理成功
		   0xFF 未处理
 * @note by cgh 20240221
 */
UINT8 rrm_CheckOtherCiRRMPathAndSw(UINT8 funValid, UINT16 trainID, UINT16 wAtsLgcStaId, IN const EnvelopeStruct* pTemp, UINT16 wAxieSecId, UINT8 chCheckDir, OUT RRMPathOfACSeqStruct* pACSeq, OUT UINT8* pNextTIOC, OUT UINT16* pNextSta, OUT UINT8* rrmReason);

/**
 * @brief 检查查询到的下一站信息是否与列车发送的下一站一致
 * @param[in] UINT8 funValid 函数处理可用性标志
 * @param[in] UINT16 trainID 列车ID
 * @param[in] const UINT16 wTrainNextStaId 列车下一站站台ID
 * @param[in] UINT16 searchNextStaID 查询到的下一站台ID
 * @param[out] UINT8* rrmReason 不允许的理由
 * @return UINT8
		   CI_ERROR 处理失败
		   CI_SUCCESS 处理成功
		   0xFF 未处理
 * @note by cgh 20240221
 */
UINT8 rrm_CheckOtherCiNextStation(UINT8 funValid, UINT16 trainID, const UINT16 wTrainNextStaId, const UINT16 searchNextStaID, OUT UINT8* rrmReason);

#endif