/******************************************************************************
** 文件名:  WLScreenDataPrepare.h
** 描 述:   全线免筛模块外部数据准备
*******************************************************************************/
#ifndef WLS_SCREEN_DATA_PREPARE_H_
#define WLS_SCREEN_DATA_PREPARE_H_

#include "WholeLineScreenDefine.h"
#include "ELMDataPrepare.h"
#include "../QueryFiles/dquCIInterFace.h"

#define WLS_LOG_FATAL 0u   /** 维护日志--维护级别 */
#define WLS_LOG_ERROR 1u  /*维护日志--错误级别*/
#define WLS_LOG_WARING 2u  /*维护日志--警告级别*/
#define WLS_LOG_DEBUG 3u   /*维护日志--调试级别*/
#define WLS_LOG_LEVEL WLS_LOG_DEBUG   /*维护日志--当前日志级别*/
#define WLS_PRINT_LEN 1280u /* 维护日志打印打印长度 1024+256 */


/** 日志打印函数 */
#define WLS_LOG_LOC(level,fmt,...)  wls_PrintDebugInfo(level,fmt" line:%d fun:%s.\n",##__VA_ARGS__,__LINE__,__FUNCTION__);

#define WLS_LOG(level,fmt,...)  wls_PrintDebugInfo(level,fmt,##__VA_ARGS__);

#if (kPLATFORM==kWINDOWS) 
#define WLS_LOG_TIME(level,fmt,...)  { \
	SYSTEMTIME sys; \
	GetLocalTime(&sys); \
	wls_PrintDebugInfo(level,fmt" time:%02d:%02d:%02d.%03d.\n",##__VA_ARGS__,sys.wHour,sys.wMinute, sys.wSecond,sys.wMilliseconds); \
}
#else
#define WLS_LOG_TIME(level,fmt,...)  wls_PrintDebugInfo(level,fmt" time:%08d.\n",##__VA_ARGS__,TimeStamp); 
#endif


/** 打印Debug信息 */
void wls_PrintDebugInfo(UINT8 level, const char *fmt, ...);

/**
 * @brief 获取全线免筛功能开关
 * @param[in] 无
 * @param[out] 无
 * @return CI_SUCCESS 功能打开；CI_ERROR 功能关闭
 * @note 
 */
UINT8 wls_PrepareWLSFunSwitch(void);


/**
 * @brief 判断本OC是否为具有免筛属性的TIOC 
 * @param[in] 无
 * @param[out] 无
 * @return CI_SUCCESS 正线TIOC；CI_ERROR 非正线TIOC
 * @note 无
 */
UINT8 wls_PrepareisWLSTioc(void);

/**
 * @brief 获取本OC是否上电解封解锁
 * @param[in] 无
 * @param[out] 无
 * @return CI_SUCCESS 已上电解封解锁；CI_ERROR 未上电解封解锁
 * @note 
 */
UINT8 wls_PrepareTIOCWorkStatus(void);


/**
 * @brief 获取入口检测计轴状态
 * @param[in] 无
 * @param[out] 无
 * @return CI_SUCCESS 入口检测正常；CI_ERROR 入口检测异常
 * @note 
 */
UINT8 wls_PrepareEnterACStatus(void);


/**
 * @brief 获取当前周期
 * @param[in] 无
 * @param[out] 无
 * @return 当前周期
 * @note 无
 */
UINT32 wls_PrePareCurCycle(void);


/**
 * @brief 获取与TMC通信状态
 * @param[in] 
 * @param[out]
 * @return CI_SUCCESS 通信正常；CI_ERROR 通信异常
 * @note 
 */
UINT8 wls_PrepareCommStatusWithTMC(void);

/**
* @brief 获取本OC及公管区内的UT或者UT冗余计轴区段
* @param[in] 无
* @param[out] UINT16 acID[MAX_UT_AC_CNT] UT计轴ID
* @return 0~MAX_UT_AC_CNT-1 合法值；MAX_UT_AC_CNT 非法值
* @note 无
*/
UINT8 wls_PrepareUTACInOCArea(UINT16 acID[MAX_UT_AC_CNT]);


/**
 * @brief 获取免筛处理建立冗余时间
 * @param[in] 无
 * @param[out] 无
 * @return 无
 * @note 无
 */
UINT32 wls_PrepareRedunTime(void);

/**
* @brief 查找指定计轴上列车是否前端可疑
* @param[in] UINT16 envelopeID 包络ID
* @param[out] 无
* @return FLAG_SET 无前端可疑
		  FLAG_UNSET 有前端可疑
* edit cgh 20241009
*/
UINT8 elm_CheckTrainheadTrain(UINT16 axisId, UINT16 trainId);

/**
* @brief 查找指定计轴上列车是否后端可疑
* @param[in] UINT16 envelopeID 包络ID
* @param[out] 无
* @return FLAG_SET 无后端可疑
		  FLAG_UNSET 有后端可疑
* edit cgh 20241009
*/
UINT8 elm_CheckTrainTailTrain(UINT16 axisId, UINT16 trainId);

#endif