/********************************************************
*                                                                                                            
* 文 件 名： NonRouteConfigDataManage.h   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2012-11-17
* 作    者： 联锁组
* 功能描述： 非进路调车配置数据管理头文件  
* 函数包括：
* 使用注意：
* 修改记录：   
*
********************************************************/ 

#ifndef _NON_ROUTE_CONFIG_DATA_MANAGE_H_
#define _NON_ROUTE_CONFIG_DATA_MANAGE_H_

#include "CommonTypes.h"
#include "NonRouteDefine.h"




#ifdef __cplusplus
extern "C" {
#endif


/*进路物理区段数据结构体*/
typedef struct S_NonRoute_PhysicalSection
{
	UINT16 PhySectionId;   /*区段ID (配置字段)*/
	UINT8 CheckState; /*检查属性 (配置字段)*/
} NonRoutePhySectionStruct;

/*非进路道岔结构体*/
typedef struct S_NonRoute_Switch_Struct
{
	UINT16 SwitchId; /*道岔ID (配置字段)*/
	UINT8 SwitchPos; /*道岔位置 (配置字段)*/
} NonRouteSwitchStruct;

/*非进路防护道岔结构体*/
typedef struct S_NonRoute_Protect_Switch_Struct
{
	UINT16 ProtectSwitchId; /*防护道岔ID (配置字段)*/
	UINT8 ProtectPosition;       /*防护位置 (配置字段)*/
} NonRouteProtectSwitchStruct;

/*敌对信号结构体*/
typedef struct S_NonRoute_Enemy_Signal_Struct
{
	UINT16 EnemySigId; /*敌对信号ID (配置字段)*/
	UINT8 SwitchSum; /*相关道岔数目 (配置字段)*/
	NonRouteSwitchStruct EnemySwitchStru[NONROUTE_CONDITION_SWITCH_SUM_MAX]; /*进路道岔结构体数组 (配置字段)*/
} NonRouteEnemySignalStruct;

/*非进路侵限区段结构体*/
typedef struct S_NonRoute_Intrude_PhySection
{
	UINT16 SectionId;      		/*侵限区段ID (配置字段)*/
	UINT8 SwitchSum;      	/*条件道岔数目 (配置字段)*/
	NonRouteSwitchStruct ConditionSwitchStru[NONROUTE_CONDITION_SWITCH_SUM_MAX];   /*条件道岔结构数组(配置字段)*/
} NonRouteIntrudePhySectionStruct;

/*非进路调车数据结构体*/
typedef struct S_NonRouteConfigDataStruct
{
	UINT8 NonRouteId;
	UINT8 SignalSum; /*非进路包含信号机数目 (配置字段)*/
	UINT16 SignalIdBuf[NONROUTE_SIGNAL_SUM_MAX]; /*非进路包含信号机数组 (配置字段)*/
	UINT8 PhySectionSum; /*非进路包含区段数目 (配置字段)*/
	NonRoutePhySectionStruct NonRoutePhySecStru[NONROUTE_PHYSEC_SUM_MAX]; /*非进路包含区段结构数组 (配置字段)*/
	UINT8 SwitchSum; /*非进路包含道岔数目 (配置字段)*/
	NonRouteSwitchStruct NonRouteSwitStru[NONROUTE_SWITCH_SUM_MAX]; /*非进路包含道岔结构体数组 (配置字段)*/
	UINT8 ProtectSwitchSum;                                                         /*非进路关联防护道岔道岔数目 (配置字段)*/
	NonRouteProtectSwitchStruct NonRouteProtectSwitchStru[NONROUTE_PROTECTSWI_SUM_MAX];   /*非进路关联防护道岔结构数组 (配置字段)*/
	UINT8 EnemySignalSum; /*敌对信号数目 (配置字段)*/
	NonRouteEnemySignalStruct EnemySignalStru[NONROUTE_ENEMY_SIGNAL_SUM_MAX]; /*非进路敌对信号结构体数组 (配置字段)*/
	UINT8 IntruPhySecSum; /*侵限区段数目 (配置字段)*/
	NonRouteIntrudePhySectionStruct IntruPhySecStru[NONROUTE_ENEMY_SIGNAL_SUM_MAX]; /*非进路侵限区段结构体数组 (配置字段)*/
	UINT16 ApplyTryTrainRelayId; /*申请试车继电器ID (配置字段)*/
	UINT16 AgreeTryTrainRelayId; /*同意试车继电器ID (配置字段)*/
	UINT16 DrvApplyTryTrainRelayId;	/* 试车线驱动的申请试车继电器ID */
	UINT16 ColAgreeTryTrainRelayId;	/* 试车线采集的同意试车继电器ID */
} NonRouteConfigDataStruct;

/*******************************全局变量声明*******************************/
extern NonRouteConfigDataStruct NonRouteConfigDataStruArr[NONROUTE_ID_NUM_MAX];  /*非进路数据结构体数组*/

extern UINT16 NonRouteCurSum;   /*非进路当前总数*/

/**************************************************以下为新增******************************************************/
/**************************************************以下为新增******************************************************/
/**************************************************以下为新增******************************************************/
/**************************************************以下为新增******************************************************/
/**************************************************以下为新增******************************************************/
/**************************************************以下为新增******************************************************/
	

/*
* 功能描述： 获取非进路数量
* 参数说明： void    
* 返回值  ： 非进路配置数据
*/
UINT16 GetNonRouteCurSum(void);


/*
* 功能描述： 获取非进路数组首元素指针
* 参数说明： void    
* 返回值  ： 进路结构体指针
*/
NonRouteConfigDataStruct* GetNonRouteConfigDataPtr(void);
	
/*
* 功能描述： 根据非进路id，获取非进路结构体指针
* 参数说明： 非进路id    
* 返回值  ： 非进路结构体指针
*/
NonRouteConfigDataStruct* GetNonRouteConfigDataPtrById(UINT8 nonRouteId);

/*
* 功能描述： 根据非进路id，获取非进路对应的信号机数量
* 参数说明： 非进路id    
* 返回值  ： 信号机数量
*/
UINT8 GetNonRouteSignalSumById(UINT8 nonRouteId);

/*
* 功能描述： 根据非进路id，获取非进路对应的信号机id数组指针
* 参数说明： 非进路id    
* 返回值  ： 信号机id数组指针
*/
UINT16* GetNonRouteSignalIdBufById(UINT8 nonRouteId);

/*
* 功能描述： 根据非进路id，获取非进路对应的物理区段数量
* 参数说明： 非进路id    
* 返回值  ： 物理区段数量
*/
UINT8 GetNonRoutePhySectionSumById(UINT8 nonRouteId);

/*
* 功能描述： 根据非进路id，获取非进路对应的物理区段id数组指针
* 参数说明： 非进路id    
* 返回值  ： 物理区段首元素指针
*/
NonRoutePhySectionStruct* GetNonRoutePhySecStruBufById(UINT8 nonRouteId);

/*
* 功能描述： 根据非进路id，获取非进路对应的道岔数量
* 参数说明： 非进路id    
* 返回值  ： 道岔数量
*/
UINT8 GetNonRouteSwitchSumById(UINT8 nonRouteId);

/*
* 功能描述： 获取非进路调车关联防护道岔数目
* 参数说明： 非进路id
* 返回值  ： 非进路调车关联防护道岔数目
*/
UINT8 GetNonRouteRelatedProtSwitSum(UINT8 nonRouteId);

/*
* 功能描述： 根据非进路id，获取非进路对应的道岔结构体首元素指针
* 参数说明： 非进路id    
* 返回值  ： 道岔结构体首元素指针
*/
NonRouteSwitchStruct* GetNonRouteSwitchStructBufById(UINT8 nonRouteId);

/*
* 功能描述： 获取非进路调车关联防护道岔结构体数组
* 参数说明： 非进路id 
* 返回值  ： 非进路调车关联防护道岔结构体数组
*/
NonRouteProtectSwitchStruct* GetNonRouteRelatedProtSwitStru(UINT8 nonRouteId);

/*
* 功能描述： 根据非进路id，获取非进路对应的敌对信号机数量
* 参数说明： 非进路id    
* 返回值  ： 敌对信号机数量
*/
UINT8 GetNonRouteEnemySignalSumById(UINT8 nonRouteId);

/*
* 功能描述： 根据非进路id，获取非进路对应的敌对信号机结构体首元素指针
* 参数说明： void    
* 返回值  ： 敌对信号机结构体首元素指针
*/
NonRouteEnemySignalStruct* GetNonRouteEnemySigStruBufById(UINT8 nonRouteId);

/*
* 功能描述： 根据非进路id，获取非进路对应的侵限区段数量
* 参数说明： 非进路id    
* 返回值  ： 侵限区段数量
*/
UINT8 GetNonRouteIntrudePhySecSumById(UINT8 nonRouteId);

/*
* 功能描述： 根据非进路id，获取非进路对应的侵限区段结构体首元素指针
* 参数说明： 非进路id    
* 返回值  ： 侵限区段结构体首元素指针
*/
NonRouteIntrudePhySectionStruct* GetNonRouteIntrudePhySecBufById(UINT8 nonRouteId);

/*
* 功能描述： 根据非进路id，获取非进路对应的申请试车继电器id
* 参数说明： 非进路id    
* 返回值  ： 申请试车继电器id
*/
UINT16 GetNonRouteAppTryRelayIdById(UINT8 nonRouteId);

/*
* 功能描述： 根据非进路id，获取非进路对应的同意试车试车继电器id
* 参数说明： 非进路id    
* 返回值  ： 同意试车继电器id
*/
UINT16 GetNonRouteAgreeTryRelayIdById(UINT8 nonRouteId);

/*
* 功能描述： 根据非进路id，获取试车线驱动试车申请继电器ID
* 参数说明： 非进路id    
* 返回值  ： 试车线驱动试车申请继电器ID
*/
UINT16 GetSCXDrvApplyTryRelayIdById(UINT8 nonRouteId);

/*
* 功能描述： 根据非进路id，获取试车线驱动同意试车继电器ID
* 参数说明： 非进路id    
* 返回值  ： 试车线采集同意试车继电器ID
*/
UINT16 GetSCXColAgreeTryRelayIdById(UINT8 nonRouteId);

/*
* 功能描述： 根据道岔id，获取非进路结构体指针
* 参数说明： 道岔id    
* 返回值  ： 非进路结构体指针
*/
NonRouteConfigDataStruct* GetNonRouteConfigDataBySwitchId(UINT16 swId);

/*
* 功能描述： 根据信号机id，获取非进路结构体指针
* 参数说明： 信号机    
* 返回值  ： 非进路结构体指针
*/
NonRouteConfigDataStruct* GetNonRouteConfigDataBySignalId(UINT16 sigId);

/*
* 功能描述：根据物理区段id查找对应的非进路
* 参数说明：phyId-物理区段id
* 返回值：非进路结构体指针：查找成功
*        NULL：查找失败
*/
NonRouteConfigDataStruct* GetNonRouteConfigDataByPhySecId(UINT16 phyId);

/*
* 功能描述： 获取非进路所属虚拟联锁
* 参数说明： 非进路id    
* 返回值  ： 所属虚拟联锁
*/
UINT8 GetnonRouteIdbelongVirCIid(UINT8 nonRouteId);


/*
* 功能描述： 获取非进路所属联锁ID
* 参数说明： 非进路id
* 返回值  ： 所属虚拟联锁
*/
UINT8 GetnonRouteIdbelongCIid(UINT8 nonRouteId);

#ifdef __cplusplus
}
#endif

#endif
