/********************************************************
*
* 文 件 名： DynamicRouteDataManage.h
* 版权说明： 北京交控科技有限公司
* 创建时间： 2023-05-05
* 作    者： 联锁组
* 功能描述： 动态进路数据管理函数的头文件
* 函数包括：
* 使用注意：
* 修改记录：
*
********************************************************/

#ifndef _DYNAMIC_ROUTE_DATA_MANAGE_H_
#define _DYNAMIC_ROUTE_DATA_MANAGE_H_


#include "CommonTypes.h"
#include "RouteDefine.h"
#include "../System/CiSystemDefine.h"
#include "RouteConfigDataManage.h"



#ifdef __cplusplus
extern "C" {
#endif

#define SET_DR_IDLE_CAUSE_FINISHED		((UINT8)0x55u)	/*动态进路因为处理完成，设置动态进路空闲*/
#define SET_DR_IDLE_CAUSE_FAULT			((UINT8)0xAAu)	/*动态进路因故设置空闲*/

/*进路配置数据结构体*/
typedef struct S_DynamicRouteDataStruct
{
	UINT16 dynamicRouteId;								/*动态进路ID */
	UINT8 dynamicRouteState;							/*动态进路状态*/
	UINT8 subRouteSum;									/*动态进路包含子进路数目 */
	UINT16 subRouteIdBuf[ROUTE_SUBROUTE_SUM_MAX];		/*动态进路包含子进路ID数组*/
	UINT32 xuanpaiStartCycleNum;						/*动态进路选排起始周期号*/
	UINT32 lockStartCycleNum;							/*动态进路锁闭起始周期号*/
} DynamicRouteDataStruct;

/*******************************全局变量声明*******************************/
extern DynamicRouteDataStruct gDynamicRouteDataSt[ROUTE_DYNAMIC_SUM_MAX];
extern UINT16 gDynamicRouteSum;
extern UINT16 gSzDanamicRouteIdBuff[ROUTE_DYNAMIC_SUM_MAX];

/**
* @brief 获取动态进路总数
* @param 无
* @return 动态进路总数
* @note：
*/
extern UINT16 GetDynamicRouteSum(void);

/**
* @brief 获取动态进路ID
* @param 无
* @return 动态进路ID
* @note：
*/
extern UINT16 GetDynamicRouteId(const UINT16 wIndex);

/**
* @brief 获取动态进路索引
* @param 无
* @return 动态进路索引
* @note：
*/
extern UINT16 GetDrBufIndex(const UINT16 wDrId);

/**
* @brief 获取最小可用动态进路（ID最小，状态空闲）
* @param 无
* @return 动态进路ID
* @note：
*/
extern UINT16 GetUsableDrId(void);

/**
* @brief 获取动态进路状态
* @param 无
* @return 动态进路状态
* @note：
*/
extern UINT8 GetDynamicRouteState(const UINT16 wDrId);

/**
* @brief 获取动态进路包含子进路数目
* @param 无
* @return 动态进路包含子进路数目
* @note：
*/
extern UINT8 GetDrSubRouteSum(const UINT16 wDrId);

/**
* @brief 获取动态进路包含子进路ID
* @param 无
* @return 动态进路包含子进路ID
* @note：
*/
extern UINT16 * GetDrSubRouteIdBuf(const UINT16 wDrId);

/**
* @brief 获取动态进路选排起始周期号
* @param 无
* @return 动态进路包含子进路选排起始周期号
* @note：
*/
extern UINT32 GetDrXuanPaiStartCyc(const UINT16 wDrId);

/**
* @brief 获取动态进路锁闭起始周期号
* @param 无
* @return 动态进路包含子进路锁闭起始周期号
* @note：
*/
extern UINT32 GetDrLockStartCyc(const UINT16 wDrId);

/**
* @brief 设置动态进路状态处理(设置动态进路状态，必须通过此函数）
* @param const UINT16 dynamicRouteId 动态进路ID
* @param const UINT8 dyRouteState 动态进路状态
* @return 无
* @note：
*/
extern void SetDynamicRouteStateProcess(const UINT16 dynamicRouteId, const UINT8 dyRouteState, const UINT8 chFlag);

/*
* 功能描述： 初始化动态进路数据
* 参数说明： void
* 返回值  ： 无
*
*/
extern void InitialDynamicRouteData(void);

/**
* @brief 动态进路状态主处理函数
* @param 无
* @return 无
* @note：
*/
extern void DynamicRouteLogicProcess(void);

/**
* @brief 设置动态进路包含子进路
* @param 无
* @return 无
* @note：
*/
extern void SetDrSubRoute(const UINT16 wDrId, const UINT8 chSubSum, UINT16 szSubId[ROUTE_SUBROUTE_SUM_MAX]);

/**
* @brief 获取组合动态进路跟随数据
* @param UINT8 *pDataBuff 跟随数据存储缓冲区
* @param UINT32 curIndex 当前索引
* @return 计算后的索引
*/
extern UINT32 GetDrTransferData(OUT UINT8 *pDataBuff, IN UINT32 curIndex);

/**
* @brief 设置列车跟随数据
* @param UINT8 *pDataBuff 跟随数据存储缓冲区
* @param UINT32 curIndex 当前索引
* @return 计算后的索引
*/
extern UINT32 SetDrTransferData(OUT UINT8 *pDataBuff, IN UINT32 curIndex);
#ifdef __cplusplus
}
#endif

#endif
