/******************************************************************************
** 文件名:  AxisAssertManage.h
** 描 述:   计轴故障诊断模块，计轴故障诊断模块简称aam
*******************************************************************************/
#ifndef AXIS_ASSERT_MANAGE_H_
#define AXIS_ASSERT_MANAGE_H_
#include "AxisAssertDefine.h"
#include "ELMDataPrepare.h"

/**
 * @brief 初始化计轴诊断信息
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
UINT8 aam_InitAxisAssert(void);


/**
 * @brief 通过数组索引获取计轴诊断信息
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
const AxisAsserStruct* aam_GetAxisAssertInfo(UINT16 acIndex);


/**
 * @brief 设置列车进入的计轴区段类型
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
void aam_SetEnvelopeEnterType(UINT16 acIndex,UINT8 type,UINT16 trainID);


/**
 * @brief 设置好车通过标志位
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
void aam_SetPassTrainFlag(UINT16 acIndex,UINT16 trainID);


/**
 * @brief 冗余计时位增加
 * @param[in] UINT16 acIndex 计轴索引
 * @param[in] UINT8 maxTimes 占用到空闲的冗余时间
 * @param[out] 无
 * @return 无
 * @note 
 */
void aam_AddRedunTime(UINT16 acIndex,UINT8 maxTimes);

/**
 * @brief 设置计轴状态
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
void aam_SetAxisStatus(UINT16 acIndex,UINT8 status);


/**
 * @brief 设置指定诊断信息
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
UINT8 aam_SetAxisAssert(UINT16 acIndex,const AxisAsserStruct* pBuff); 


/**
 * @brief 重置指定计轴诊断信息存储空间
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
void aam_ResetAxisAssertByACIndex(UINT16 acIndex);


/**
 * @brief 清除好车通过标志位
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
UINT8 aam_ClearPassTrainFlag(UINT16 acIndex);


/**
 * @brief 清除冗余计时位
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
UINT8 aam_ClearRedunTime(UINT16 acIndex);

/**
 * @brief 清除计轴上车头进入的信息
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
void aam_ClearHeadEnterTrainId(UINT16 acIndex);

/**
 * @brief 清除计轴上车头进入的信息的指定列车信息
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
void aam_ClearHeadEnterIdForTrain(UINT16 acIndex,UINT16 trainId);

/**
 * @brief 清除计轴上车尾进入的信息
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
void aam_ClearTailEnterTrainId(UINT16 acIndex);


/**
 * @brief 清除计轴上车尾进入的信息的指定列车信息
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
void aam_ClearTailEnterIdForTrain(UINT16 acIndex,UINT16 trainId);

/**
 * @brief 设置尽头线ARB特殊处理标志 
 * @param[in] UINT8 flag 处理标志
 * @param[out]
 * @return 
 * @note 
 */
void aam_SetInitEndlineFlag(UINT8 flag);


/**
 * @brief 获取尽头线ARB特殊处理标志 
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
UINT8 aam_GetInitEndlineFlag(void);


/**
 * @brief 获取好车通过标志位
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
UINT8 aam_GetPassTrainFlag(UINT16 acIndex);


/**
 * @brief 获取计轴状态
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
UINT8 aam_GetAxisStatus(UINT16 acIndex);


/**
 * @brief 获取计轴冗余时间
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
UINT8 aam_GetRedunTime(UINT16 acIndex);


/**
 * @brief 获取列车车头进入标志
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
UINT8 aam_GetHeadEnterFlag(UINT16 acIndex,UINT16 trainID);

/**
 * @brief 获取列车车尾进入标志
 * @param[in] 
 * @param[out]
 * @return 
 * @note 
 */
UINT8 aam_GetTailEnterFlag(UINT16 acIndex,UINT16 trainID);

/*
* 功能描述： 获取指定ID计轴区段冗余结束可否ARB标志
* 参数说明： const UINT16 acIndex, 计轴索引
* 返回值  ： 0x55 可ARB 0xaa 不可ARB
* Create:  fan 2024/10/14
*/
UINT8 aam_GetAxisRedunCanArbFlag(const UINT16 acIndex);
/*
* 功能描述： 设置指定ID计轴区段冗余结束可否ARB标志
* 参数说明： const UINT16 acIndex, 计轴索引
*			 const UINT8 redunOverArbFlag, 冗余结束可否ARB标志
* 返回值  ： 无
* Create:  fan 2024/10/14
*/
void aam_SetAxisRedunCanArbFlag(const UINT16 acIndex, const UINT8 redunOverArbFlag);

/*
* 功能描述：设置指定ID计轴区段计轴通信中断可判ARB标志
* 参数说明：const UINT16 acIndex 计轴索引
*			const UINT8 cCommBadArbFlag 计轴通信中断可判ARB标志
* 返 回 值：无
* Created By LQ 2025.02.24
*/
void aam_SetAxisCommBadArbFlag(const UINT16 acIndex, const UINT8 cCommBadArbFlag);

/*
* 功能描述：获取指定ID计轴区段计轴通信中断可判ARB标志
* 参数说明：const UINT16 acIndex 计轴索引
* 返 回 值：0x55 有效
*           0xAA 无效
* Created By LQ 2025.02.24
*/
UINT8 aam_GetAxisCommBadArbFlag(const UINT16 acIndex);

#endif