/********************************************************
*                                                                                                            
* 文 件 名： GaragedoorDataManage.h   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2014-12-17
* 作    者： 联锁组
* 功能描述： 车库门数据管理头文件  
* 函数包括： 
* 使用注意：
* 修改记录：   
*
********************************************************/ 

#ifndef _GARAGEDOOR_DATA_MANAGE_H_
#define _GARAGEDOOR_DATA_MANAGE_H_

#include "GaragedoorDefine.h"
#include "GaragedoorConfigDataManage.h"
#include "CommonTypes.h"
#include "../DataManage/DeviceDataManage.h"


#ifdef __cplusplus
extern "C" {
#endif



/*车库门数据结构体*/
typedef struct S_GaragedoorDataStruct
{
    UINT16 GaragedoorId;         /*车库门ID (初始化字段)*/
	UINT8 GaragedoorState;      /*车库门状态 (动态字段)*/
	UINT8 GaragedoorAllowCloseFlag; /*车库门允许关门标志，ZC发送*/
	UINT8 GDAllowCloseFlagIVOC;   /*车库门允许关门标志，IVOC发送*/
	UINT16 GDAkuNearestTrainId;     /*A库物理区段上最接近的列车*/
    UINT8 GaragedoorModeState;       /*车库门模式状态*/
    UINT8 GaragedoorFaultState;		/*车库门故障状态*/
	UINT8 GaragedoorPangLuState;    /*车库门旁路状态*/
	UINT8 drvDoorState;				/* 驱动车库门状态*/
	UINT8 cmdProcessState;			/* 命令处理状态 */
	UINT32 drvDoorStartCycle;		/* 驱动开始时间,预留 */
    UINT32 waiteZCResponseStartCycNum; /*等待ZC反馈开始时间*/
	UINT32 waiteIVOCResponseStartCycNum; /*等待IVOC反馈开始时间*/
	UINT32 GaragedoorOpenStartCycNum;   /*车库门打开开始周期 (动态字段)*/
	UINT32 GaragedoorCloseStartCycNum;   /*车库门关闭开始周期 (动态字段)*/
} GaragedoorDataStruct;


extern GaragedoorDataStruct GaragedoorDataStru[GARAGE_DOOR_SUM_MAX];   /*定义车库门数据结构体*/

/*
* 功能描述： 获取指定车库门数据
* 参数说明：    
* 返回值  ： 
            GaragedoorDataStruct *  
*/
GaragedoorDataStruct *GetGaragedoorData(void);

/*
* 功能描述： 获取指定ID车库门驱动状态
* 参数说明： const UINT16 garagedoorId, 车库门ID    
* 返回值  ： 0: 获取数据失败
*			>0: 车库门驱动状态      
*/
UINT8 GetDrvGaragedoorState(const UINT16 garagedoorId);
/*
* 功能描述： 设置指定ID车库门驱动状态
* 参数说明： const UINT16 garagedoorId, 车库门ID  
*            UINT8 drvState , 车库门驱动状态    
* 返回值  ： CI_ERROR: 设置失败
*			 CI_SUCCESS: 设置成功       
*/
UINT8 SetDrvGaragedoorState(const UINT16 garagedoorId,const UINT8 drvState);

/*
* 功能描述： 获取指定ID车库门命令处理状态
* 参数说明： const UINT16 garagedoorId, 车库门ID    
* 返回值  ： 0: 获取数据失败
*			>0: 车库门状态      
*/
UINT8 GetGrgdoorCmdProcessState(const UINT16 garagedoorId);
/*
* 功能描述： 设置指定ID车库门驱动状态
* 参数说明： const UINT16 garagedoorId, 车库门ID  
*            UINT8 drvState , 车库门状态 
* 返回值  ： 0: 获取数据失败
*			>0: 车库门状态      
*/
UINT8 SetGrgdoorCmdProcessState(const UINT16 garagedoorId,UINT8 state);


/*
* 功能描述： 获取指定ID车库门状态
* 参数说明： const UINT16 garagedoorId, 车库门ID    
* 返回值  ： 0: 获取数据失败
*			>0: 车库门状态      
*/
UINT8 GetGaragedoorState(const UINT16 garagedoorId);

/*
* 功能描述： 设置指定ID车库门状态
* 参数说明： const UINT16 garagedoorId, 车库门ID
*			 const UINT8 garagedoorState, 车库门状态   
* 返回值  ： 0: 设置失败
*			 1: 设置成功  
*/
UINT8 SetGaragedoorState(const UINT16 garagedoorId, const UINT8 garagedoorState);

/*
* 功能描述： 获取指定ID车库门允许关门标志 ZC
* 参数说明： const UINT16 garagedoorId, 车库门ID
* 返回值  ： 0: 设置数据失败
*            1: 设置数据成功
*/
UINT8 GetGaragedoorAllowCloseFlag(const UINT16 garagedoorId);


/*
* 功能描述： 设置指定ID车库门允许关门标志 ZC
* 参数说明： const UINT16 garagedoorId, 车库门ID
* 返回值  ： 无
*             
*/
void SetGaragedoorAllowCloseFlag(const UINT16 garagedoorId, const UINT8 allowCloseFlag);

/*
* 功能描述： 获取指定ID车库门允许关门标志,IVOC
* 参数说明： const UINT16 garagedoorId, 车库门ID
* 返回值  ： 0u: 获取数据失败
*            >0u: 获取数据成功
*/
UINT8 GetGaragedoorAllowCloseFlagIVOC(const UINT16 garagedoorId);

/*
* 功能描述： 设置指定ID车库门允许关门标志 IVOC
* 参数说明： const UINT16 garagedoorId, 车库门ID
* 返回值  ： 无
*
*/
void SetGaragedoorAllowCloseFlagIVOC(const UINT16 garagedoorId, const UINT8 allowCloseFlag);

/*
* 功能描述： 获取A库区段上最接近车库门的列车ID
* 参数说明： const UINT16 garagedoorId, 车库门ID
* 返回值  ： 0u: 获取数据失败
*            >0u: 列车ID
* LC
*/
UINT16 GetGaragedoorNearestTrainId(const UINT16 garagedoorId);

/*
* 功能描述： 设置A库区段上最接近车库门的列车ID
* 参数说明： const UINT16 garagedoorId, 车库门ID
*          const UINT16 trainId  列车ID
* 返回值  ： 无
* LC
*/
void SetGaragedoorNearestTrainId(const UINT16 garagedoorId, const UINT16 trainId);

#if 0
/*
* 功能描述： 设置所有车库门命令处理状态
* 参数说明：  
*            UINT8 state , 车库门状态
* 返回值  ： 0: 设置失败
*			>0: 设置成功     
*/
UINT8 SetAllGrgdoorCmdProcessState(const UINT8 state);
#endif

/*
* 功能描述： 设置指定ID车库门模式状态
* 参数说明： const UINT16 garagedoorId, 车库门ID   
* 返回值  ： 0: 获取失败
*			 >0: 获取成功  
*/
UINT8 GetGaragedoorModeState(const UINT16 garagedoorId);
/*
* 功能描述： 设置指定ID车库门模式状态
* 参数说明： const UINT16 garagedoorId, 车库门ID
*			 const UINT8 garagedoorModeState, 车库门模式状态   
* 返回值  ： 0: 设置失败
*			 1: 设置成功  
*/
UINT8 SetGaragedoorModeState(const UINT16 garagedoorId, const UINT8 garagedoorModeState);

/*
* 功能描述： 获取指定ID车库门故障状态
* 参数说明： const UINT16 garagedoorId, 车库门ID   
* 返回值  ：
				GARAGE_DOOR_FAULT_TRUE 车库门故障为真
				GARAGE_DOOR_FAULT_FALSE 车库门故障为假
				GARAGE_DOOR_FAULT_NULL 车库门故障状态无效 
*/
UINT8 GetGaragedoorFaultState(const UINT16 garagedoorId);

/*
* 功能描述： 设置指定ID车库门故障状态
* 参数说明： const UINT16 garagedoorId, 车库门ID
*			 const UINT8 garagedoorFaultState, 车库门故障状态   
* 返回值  ： 0: 设置失败
*			 1: 设置成功  
*/
UINT8 SetGaragedoorFaultState(const UINT16 garagedoorId, const UINT8 garagedoorFaultState);

/*
* 功能描述： 获取指定ID车库门旁路状态
* 参数说明： const UINT16 garagedoorId, 车库门ID   
* 返回值  ：
				GARAGE_DOOR_PANGLU_TRUE 车库门旁路为真
				GARAGE_DOOR_PANGLU_FALSE 车库门旁路为假
				CI_ERROR   获取失败 
*/
UINT8 GetGaragedoorPangLuState(const UINT16 garagedoorId);

/*
* 功能描述： 设置指定ID车库门旁路状态
* 参数说明： const UINT16 garagedoorId, 车库门ID
*			 const UINT8 garagedoorPangLuState, 车库门故障状态   
* 返回值  ： 0: 设置失败
*			 1: 设置成功  
*/
UINT8 SetGaragedoorPangLuState(const UINT16 garagedoorId, const UINT8 garagedoorPangLuState);


/*
* 功能描述： 设置指定ID车库门等待ZC反馈开始时间
* 参数说明： const UINT16 garagedoorId, 车库门ID 
*			 const UINT32 startCycNum, 起始周期号
* 返回值  ： 无
*			    
*/
void SetWaiteZCResponseStartCycNum(const UINT16 garagedoorId, const UINT32 startCycNum);
/*
* 功能描述： 获取指定ID车库门等待ZC反馈开始时间
* 参数说明： const UINT16 garagedoorId, 车库门ID 
* 返回值  ： 0: 获取失败
*			 >0: 获取成功  
*/
UINT32 GetWaiteZCResponseStartCycNum(const UINT16 garagedoorId);

/*
* 功能描述： 设置指定ID车库门等待IVOC反馈开始时间
* 参数说明： const UINT16 garagedoorId, 车库门ID
*			 const UINT32 startCycNum, 起始周期号
* 返回值  ： 无
* BY LC
*/
void SetWaiteIVOCResponseStartCycNum(const UINT16 garagedoorId, const UINT32 startCycNum);

/*
* 功能描述： 获取指定ID车库门等待IVOC反馈开始时间
* 参数说明： const UINT16 garagedoorId, 车库门ID
* 返回值  ： 0u: 获取失败
*			 >0u: 获取成功
* BY LC
*/
UINT32 GetWaiteIVOCResponseStartCycNum(const UINT16 garagedoorId);


/*
* 功能描述： 获取指定ID车库门关门起始周期号
* 参数说明： const UINT16 garagedoorId, 车库门ID    
* 返回值  ： 0: 获取数据失败
*			>0: 关闭车库门起始周期号      
*/
UINT32 GetGaragedoorCloseStartCycNum(const UINT16 garagedoorId);

/*
* 功能描述： 设置指定ID车库门关门起始周期号
* 参数说明： const UINT16 garagedoorId, 车库门ID
*			 const UINT32 startCycNum, 关闭车库门起始周期号
* 返回值  ： void   
*/
void SetGaragedoorCloseStartCycNum(const UINT16 garagedoorId, const UINT32 startCycNum);
/*
* 功能描述： 获取指定ID车库门开门起始周期号
* 参数说明： const UINT16 garagedoorId, 车库门ID    
* 返回值  ： 0: 获取数据失败
*			>0: 打开车库门起始周期号      
*/
UINT32 GetGaragedoorOpenStartCycNum(const UINT16 garagedoorId);

/*
* 功能描述： 设置指定ID车库门开门起始周期号
* 参数说明： const UINT16 garagedoorId, 车库门ID
*			 const UINT32 startCycNum, 打开车库门起始周期号
* 返回值  ： 0: 设置失败
*			 1: 设置成功      
*/
UINT8 SetGaragedoorOpenStartCycNum(const UINT16 garagedoorId, const UINT32 startCycNum);

/*
* 功能描述： 获取指定ID车库门相邻计轴
* 参数说明： const UINT16 garagedoorId, 车库门ID
* 返回值  ： 0u: 获取数据失败
*			>0u: 相邻计轴数目
*/
UINT8 GetGarageDoorAdjacentAC(const UINT16 garagedoorId, OUT UINT16 adjacentACID[GARAGE_DOOR_ADJACENT_AXIS]);



/*
* 功能描述： 检查指定计轴区段是否都属于车库门A库线上的休眠轨
* 参数说明： const UINT16 garagedoorId, 车库门ID
*          const UINT8 axisNum  计轴区段数目
*          UINT16 axisID[GARAGE_DOOR_ADJACENT_AXIS]  计轴区段
* 返回值  ： 0u: 检查失败
*			1u: 检查通过
* BY LC
*/
UINT8 CheckGarageDoorSleepAC(const UINT16 garagedoorId, UINT16 axisID);

/*
* 功能描述： 获取车库门A库线区段是否为VBTC车占用
* 参数说明： const UINT16 garagedoorId, 车库门ID
*
* 返回值  ： 0u: 非VBTC车占用
*			1u: VBTC车占用或无车
* BY LC
*/
UINT8 CheckGarageDoorAKuIsCTOccu(const UINT16 garagedoorId);

/*
* 功能描述： 获取车库门A库线物理区段是否占用
* 参数说明： const UINT16 garagedoorId, 车库门ID
*
* 返回值  ： 0u: 占用
*			1u: 未占用
*/
UINT8 GetGarageDoorAKuIsOccu(const UINT16 garagedoorId);

/* 功能描述： 获取车库门关联的处于已办理状态的防护进路
*  参数说明：  const UINT16 garagedoorId, 车库门ID
			 UINT16 routeId[GARAGE_DOOR_ROUTE_MAX]    已办理的进路ID
*  返回值：    已办理的进路数量
*/
UINT8 GetProRouteInTransactState(const UINT16 garagedoorId, OUT UINT16  routeId[GARAGE_DOOR_ROUTE_MAX]);



/* 功能描述： 查询A库物理区段上离车库门最接近的列车
*  参数说明：  const UINT16 garagedoorId, 车库门ID
*  返回值：    !=UINT16_MAX  列车ID
*             UINT16_MAX  查询失败
* BY LC
*/
UINT16 FindNearestTrainInAKuPhy(const UINT16 garagedoorId);




/* 功能描述： 检查列车接近车库门一端无可疑
*  参数说明：   UINT16 garageDoorId 车库门
*            UINT16 trainId 列车ID
*  返回值：    CI_ERROR  存在可疑
*             CI_SUCCESS 无可疑
* BY LC
*/
UINT8 CheckNearestTrainScreen(const UINT16 garageDoorId, const UINT16 trainId, const  UINT8 functionId, const UINT8 sendLevel);


/* 功能描述： 检查列车包络是否跨压车库门
*  参数说明：   UINT16 garageDoorId 车库门
*            UINT16 trainId 列车ID
*  返回值：    CI_ERROR  跨压
*             CI_SUCCESS 未跨压
* BY LC
*/
UINT8 CheckNearestTrainKuaya(const UINT16 garageDoorId, const UINT16 trainId, const  UINT8 functionId, const UINT8 sendLevel);

/* 功能描述： 检查车库门相邻计轴是否存在锁闭
*  参数说明：   UINT16 garageDoorId 车库门
* *           UINT16* pDevId 锁闭的区段ID（出参）
*             UINT8* pDevState 锁闭状态（出参）
*  返回值：    CI_ERROR  存在锁闭
*             CI_SUCCESS 未存在锁闭
* BY LC
*/
UINT8 CheckGDAdjacentACLockState(const UINT16 garageDoorId, UINT16* pDevId, UINT8* pDevState);

#ifdef __cplusplus
}
#endif

#endif
