/************************************************************************
*
* 文件名     ：  dquCIInterFace.h
* 版权说明 ：  北京交控科技有限公司 
* 版本号   ：  1.0
* 创建时间 ：  2011.12.27
* 作者     ：  研发中心软件部
* 功能描述 ：  CI数据接口结构体定义 
* 使用注意 ： 
* 修改记录 ：  
*
************************************************************************/
#ifndef DQU_CI_INTERFACE
#define DQU_CI_INTERFACE

#include "dquCIInit.h"
#include "dquEmapInit.h"
#include "dquMaskInit.h"
#include "../System/SystemParameterManage.h"
#include "dquIdmapInit.h"
#include "../DataManage/DeviceConfigDataManage.h"
#include "../Initial/ConfigDataReadManage.h"
#include "../DebugPrint/DebugPrint.h"
#include "../DebugPrint/ErrorCode.h"
#include "../DebugPrint/ErrorDeviceType.h"
#include "../Section/LinkConfigDataManage.h"
#include "AxisConfigDataManage.h"
#include "../Section/AxisSectionConfigDataManage.h"
#include "../VirtualDevice/VirtualDevDataManage.h"


#ifdef __cplusplus
extern "C" {
#endif
/*********************************************
*函数功能：初始化所有数据
*参数说明：FSName文件指针          
*返回值：0，失败；1，成功
*********************************************/
UINT8 InitAll(CHAR* FSName);

/*********************************************
*函数功能：读继电器配置数据
*参数说明：ciId联锁ID，  pRelayConfigDataStru继电器配置数据结构体指针
*返回值：继电器个数
*********************************************/
INT16 ReadRelayConfigData(const UINT8 ciId, RelayConfigDataStruct* pRelayConfigDataStru);/*读继电器配置数据返回RelayCurSum下雷同*/

/*********************************************
*函数功能：读信号机配置数据
*参数说明：ciId联锁ID，  pSignalConfigDataStru信号机配置数据结构体指针
*返回值：信号机数
*********************************************/
INT16 ReadSignalConfigData(const UINT8 ciId,SignalConfigDataStruct* pSignalConfigDataStru);/*读信号机配置数据*/

/*********************************************
*函数功能：读洗车机配置数据
*参数说明：ciId联锁ID，  
           pWashMachineConfigDataStru洗车机配置数据结构体指针
*返回值：  洗车机个数
*********************************************/
UINT16 ReadWashMachineConfigData(const UINT8 ciId,WashMachineConfigDataStruct* pWashMachineConfigDataStru);


/*********************************************
*函数功能：读道岔配置数据
*参数说明：ciId联锁ID，  pSwitchConfigDataStru道岔配置数据结构体指针
*返回值：道岔数
*********************************************/
INT16 ReadSwitchConfigData(const UINT8 ciId,SwitchConfigDataStruct* pSwitchConfigDataStru);/*读道岔配置数据*/

/*********************************************
	*函数功能：读物理区段配置数据
	*参数说明：ciId联锁ID，  pPhysicalSectionConfigDataStru物理区段配置数据结构体指针
	*返回值：物理区段数
*********************************************/
INT16 ReadPhySicalSectionConfigData(const UINT8 ciId,PhysicalSectionConfigDataStruct* pPhysicalSectionConfigDataStru);/*读物理区段配置数据*/

/*********************************************
*函数功能：读计轴区段配置数据
*参数说明：ciId联锁ID，  AxisSectionConfigDataStru计轴区段配置数据结构体指针
*返回值：计轴区段数
*********************************************/
INT16 ReadAxisSectionConfigData(const UINT8 ciId, AxisSectionConfigDataStruct* AxisSectionConfigDataSt, UINT16 * pAcNum, AxisSectionConfigDataStruct * pAcConfigDataStru);/*读计轴区段配置数据*/

/*********************************************
*函数功能：读逻辑区段配置数据
*参数说明：ciId联锁ID，pLogicSectionConfigDataStru  逻辑区段配置数据结构体指针
*返回值：逻辑区段数
*********************************************/
INT16 ReadLogicSectionConfigData(const UINT8 ciId,LogicSectionConfigDataStruct* pLogicSectionConfigDataStru);/*读逻辑区段配置数据*/

/*********************************************
*函数功能：读紧急停车按钮配置数据
*参数说明：ciId联锁ID，  pEsbConfigDataStru紧急停车配置数据结构体指针
*返回值：紧急停车按钮数
*********************************************/
INT16 ReadEsbConfigData(const UINT8 ciId,EsbConfigDataStruct* pEsbConfigDataStru);/*读紧急停车按钮配置数据*/


/*********************************************
*函数功能：读屏蔽门配置数据
*参数说明：ciId联锁ID，  pPsdConfigDataStru屏蔽门配置数据结构体指针
*返回值：屏蔽门数
*********************************************/
INT16 ReadPsdConfigData(const UINT8 ciId,PsdConfigDataStruct* pPsdConfigDataStru);/*读屏蔽门配置数据*/

/*********************************************
*函数功能：读进路配置数据
*参数说明：ciId联锁ID，pRouteConfigDataStru  进路配置数据结构体指针
*返回值：进路数
*********************************************/
INT16 ReadRouteConfigData(const UINT8 ciId,RouteConfigDataStruct* pRouteConfigDataStru);/*读进路配置数据*/

/*********************************************
*函数功能：读非进路调车配置数据
*参数说明：pNonRouteConfigDataStru 非进路配置数据结构体指针
*返回值：非进路调车数
*********************************************/
UINT16 ReadNonRouteConfigData(NonRouteConfigDataStruct* pNonRouteConfigDataStru);/*读非进路调车配置数据*/

/*********************************************
*函数功能：读自动通过进路配置数据
*参数说明：ciId联锁ID，  pAutoRouteConfigDataStru自动进路配置数据结构体指针
*返回值：自动通过进路数
*********************************************/
INT16 ReadAutoRouteConfigData(const UINT8 ciId,AutoRouteConfigDataStruct* pAutoRouteConfigDataStru);/*读自动通过进路配置数据*/

/*********************************************
*函数功能：读自动折返进路配置数据
*参数说明：ciId联锁ID，  pAutoReturnConfigDataStru自动折返配置数据结构体指针
*返回值：自动折返进路数
*********************************************/
INT16 ReadAutoReturnConfigData(const UINT8 ciId,AutoReturnConfigDataStruct* pAutoReturnConfigDataStru);/*读自动折返进路配置数据*/

/*********************************************
*函数功能：读反向进路配置数据
*参数说明：ciId联锁ID，  pReverseRouteConfigDataStru反向进路配置数据结构体指针
*返回值：反向进路数
*********************************************/
INT16 ReadReverseRouteConfigData(const UINT8 ciId,ReverseRouteConfigDataStruct* pReverseRouteConfigDataStru);


/*********************************************
*函数功能：读长调进路配置数据
*参数说明： pLongRouteConfigDataStru 长进路配置数据结构体指针
*返回值：长调进路数
*********************************************/
INT16 ReadLongRouteConfigData(LongRouteConfigDataStruct* pLongRouteConfigDataStru);/*读长调进路配置数据*/

/*********************************************
*函数功能：读指示灯报警灯配置数据
*参数说明：ciId联锁ID，IndicatorConfigDataStru  指示灯配置数据结构体指针
*返回值：报警灯数
*********************************************/
INT16 ReadIndicatorConfigData(const UINT8 ciId,IndicatorConfigDataStruct* IndicatorConfigDataSt);/*读指示灯报警灯配置数据*/

/*********************************************
*函数功能：读指示灯报警灯配置数据
*参数说明：ciId联锁ID，IndicatorConfigDataStru  指示灯配置数据结构体指针
*返回值：报警灯数
*********************************************/
INT16 ReadIndicatorConfigData_Vir(const UINT8 ciId, const UINT8 virCIid,IndicatorConfigDataStruct* pIndicatorConfigDataStru);/*读指示灯报警灯配置数据*/


/*********************************************
*函数功能：读保护区段配置数据
*参数说明：ciId联锁ID，pOverlapConfigDataStru  保护区段配置数据结构体指针
*返回值：保护区段数
*********************************************/
INT16 ReadOverlapConfigData(const UINT8 ciId,OverlapConfigDataStruct* pOverlapConfigDataStru);/*读保护区段配置数据*/

/*********************************************
	*函数功能：读通信关系配置数据
	*参数说明：ciId联锁ID，  TransmitRelationDataStru通信关系配置数据结构体指针
	*返回值：通信关系数
*********************************************/
UINT16 ReadTransmitRelationConfigData(const UINT8 ciId,TransmitRelationDataStruct* TransmitRelationDataStru);/*读通信关系配置数据*/


/*********************************************
*函数功能：读CI-ATS配置数据
*参数说明：ciId联锁ID，  MaskConfigDataStru码位配置数据结构体指针
*返回值：码位值
*********************************************/
UINT16 ReadCiToAtsMaskConfigData(const UINT8 ciId, MaskConfigDataStruct* MaskConfigDataStru);/*读CI-ATS配置数据*/

/*********************************************
*函数功能：读CI-ZC配置数据
 *参数说明：ciId联锁ID，  MaskConfigDataStru码位配置数据结构体指针
*返回值：码位值
*********************************************/ 
UINT16 ReadCiToZcMaskConfigData(const UINT8 ciId, MaskConfigDataStruct* MaskConfigDataStru);/*读CI-ZC配置数据*/

/*********************************************
 *函数功能：读ZC-CI配置数据
 *参数说明：ciId联锁ID， MaskConfigDataStru 码位配置数据结构体指针
 *返回值：码位值
*********************************************/
UINT16 ReadZcToCiMaskConfigData(const UINT8 ciId, MaskConfigDataStruct* MaskConfigDataStru);/*读ZC-CI配置数据*/

/*********************************************
*函数功能：读CI-LEU配置数据
*参数说明：ciId联锁ID，  MaskConfigDataStru码位配置数据结构体指针
*返回值：码位置
*********************************************/
UINT16 ReadCiToLeuMaskConfigData(const UINT8 ciId, MaskConfigDataStruct* MaskConfigDataStru);/*读CI-LEU配置数据*/

/*********************************************
*函数功能：读应急盘继电器数据
*参数说明：ciId联锁ID 
*返回值：继电器ID
*********************************************/
UINT16 ReadJkjRelayId(const UINT8 ciId);

/*********************************************
*函数功能：释放内存
*参数说明：无
*返回值：无
*********************************************/
void FreeMem(void);

/*********************************************
*函数功能：分配内存空间
*参数说明：pMem空间长度
*返回值：无
*********************************************/
void MyFree(void ** pMem);

/*********************************************
*函数功能：读全自动折返进路配置数据
*参数说明：ciId联锁ID，  pAllAutoReturnConfigDataStru全自动折返配置数据结构体指针
*返回值：全自动折返进路数
*********************************************/
INT16 ReadAllAutoReturnConfigData(const UINT8 ciId,AllAutoReturnConfigDataStruct* pAllAutoReturnConfigDataStru); /*读全自动折返进路配置数据*/

/*********************************************
*函数功能：车库门配置数据
*参数说明：ciId联锁ID，  pGaragedoorConfigDataStru车库门配置数据结构体指针
*返回值：车库门数
*********************************************/
INT16 ReadGaragedoorConfigData(const UINT8 ciId,GaragedoorConfigDataStruct* pGaragedoorConfigDataStru);
/*********************************************
*函数功能：读SPKS配置数据
*参数说明：ciId联锁ID，  spksConfig  SPKS配置数据结构体指针
*返回值：SPKS数
*********************************************/
INT16 ReadSpksConfigData(const UINT8 ciId,SpksDataConfigStruct* spksConfig);
/*********************************************
*函数功能：读门禁配置数据
*参数说明：ciId联锁ID，  mjConfig  门禁配置数据结构体指针
*返回值：SPKS数
*********************************************/
INT16 ReadMJConfigData(const UINT8 ciId, MJDataConfigStruct* mjConfig);

/*********************************************
*函数功能：读站台门控制器配置数据
*参数说明：ciId联锁ID，  pPscConfigDataStru站台门控制器配置数据结构体指针
*返回值：PSC数
*********************************************/
INT16 ReadPscConfigData(const UINT8 ciId,PscConfigDataStruct* pPscConfigDataStru);

/*********************************************
*函数功能：读无人折返配置数据
*参数说明：ciId联锁ID，  pNonReturnConfigDataStru无人折返配置数据结构体指针
*返回值：无人折返数量
*********************************************/
INT16 ReadNonReturnConfigData(const UINT8 ciId, NonAutoReturnConfigDataStruct* pNonReturnConfigDataStru);
/*********************************************
*函数功能：读相连联锁CI之间的配置数据
*参数说明：ciId联锁ID，  pCiTransmitStru  相连联锁配置数据结构体指针
*返回值：与本联锁通信的联锁数目
*********************************************/
UINT16 ReadCiTransConfigData(const UINT8 ciId,CiTransmitStruct* pCiTransmitStru);

/*
功能描述: 	读取其他线路设备配置数据
输入参数:		const UINT8 ciId 联锁ID
输出参数:		DiffLineDevStruct* pDiffLineDevData 其他线路设备数据指针
返回值:	[0-65535]其他线路设备数量总数
*/
UINT16 ReadDiffLineDevConfigData(const UINT8 ciId, DiffLineDevStruct* pDiffLineDevData);

/*********************************************
*函数功能：读联锁功能开关配置数据
*参数说明：
*返回值：与本联锁通信的联锁数目
*********************************************/
UINT16 ReadCiFuncSwitchConfigData(DquCiFuncSwitchStructNew* pCiFuncSwitConfStru);


/*********************************************
*函数功能：整理相邻联锁发送给本联锁的设备配置数据
*参数说明：LocalciId本地联锁ID
*返回值：0,整理成功
*		 >0,整理失败
*********************************************/
UINT8 NeibourToLocalDevConfDataManage(const UINT8 LocalciId);

/*
功能描述: 	读侵限区段配置数据
输入参数:	const UINT8 ciId 联锁ID
	         		pInvSecConfigDataStruct InvSecConfigDataStru[] 侵限区段数据结构数组
输出参数:	无
返回值:		0 无数据
				>1 侵限区段数据数量
*/
INT16 ReadInvaSectionConfigData(const UINT8 ciId, InvSecConfigDataStruct pInvSecConfigDataStru[]);

/*********************************************
*函数功能：初始化轨道区段配置数据结构体----对外结构体
*参数说明：pPhysicalSectionConfigDataStru物理区段配置数据结构体指针        
*返回值：无
*********************************************/
INT16  ReadTrackSectionConfigData(PhysicalSectionConfigDataStruct* pPhysicalSectionConfigDataStru);

/*********************************************
*函数功能：根据根据读入的虚拟设备表设置相关设备的虚拟属性
*参数说明：PsdConfigDataStruct* psdCfgData屏蔽门配置数据
*          EsbConfigDataStruct* esbCfgData ESB配置数据
*		   SpksDataConfigStruct *spksCfgData SPKS配置数据
*返回值：CI_SUCCESS 成功
*        CI_ERROR   失败
*********************************************/
UINT8 ReadVirtualDevicesInit(PsdConfigDataStruct* psdCfgData, EsbConfigDataStruct* esbCfgData, SpksDataConfigStruct *spksCfgData, RelayConfigDataStruct *relayCfgData,IndicatorConfigDataStruct *pIndicatorConfigDataStruct);

/*
* 功能描述： 读取各联锁电子地图校验版本配置
* 参数说明： 
	EmapCheckVerConfigStru emapVerArr[]:存储读到联锁电子地图校验配置的结构体数组
* 返回值:
	无
*/
void ReadEmapCiConfig(EmapCiConfigStru emapVerArr[]);

/*
* 功能描述： 互联互通编号对照表初始化
* 参数说明： void
* 返回值  ： 0: 初始化失败
*            1: 初始化成功
*/
UINT8 HLHTCiIdMapInitial(void);

/*
*功能描述:
*	根据设备名称查询互联互通编号
*参数说明:
*	输入:
*		const UINT16 LocalDevName 本地设备ID
*		const UINT16 logId 设备端ID
*	输出:
*		UINT32 *pHlhtId 互联互通ID指针
*返回值:
*	0 查询失败
*	1 查询成功
*/
UINT8 dquDevName2HlhtId(const UINT16 LocalDevName, const UINT16 logId, UINT32 *pHlhtId);



/*********************************************
*函数功能：检查保护区段码位
*参数说明：无
*返回值：无
*********************************************/
void CheckOverlapMaskBit(void);

/*
功能描述: 	读防掩门配置数据
输入参数:	const UINT8 ciId 联锁ID
	        FloodGateConfigDataStruct floodGateConfigDataStru[] 防掩门数据结构数组
输出参数:	无
返回值:		0 无数据
				>1 防掩门数据数量
*/
INT16 ReadFloodGateConfigData(const UINT8 ciId, FloodGateConfigDataStruct floodGateConfigDataStru[]);

/*********************************************
*函数功能：读系统参数配置数据
*参数说明：ciId联锁ID，SystemParaStruct  系统参数配置数据结构体指针
*返回值：配置长度
*********************************************/
UINT8 ReadSystemParamConfDataNew(const UINT8 ciId,SystemParameterStructNew* SystemParameterStru);

/*********************************************
*函数功能：读组合自动通过进路配置数据
*参数说明： GroupAutoRouteConfigDataStruct* pGroupAutoRouteConfigDataStru 组合自动进路配置数据结构体指针
*返回值：组合自动通过进路数
*********************************************/
INT16 ReadGroupAutoRouteConfigData(GroupAutoRouteConfigDataStruct* pGroupAutoRouteConfigDataStru);

/*********************************************
*函数功能：读Link配置数据
*参数说明：LinkDataConfigStru Link配置数据结构体指针
*返回值：Link数
1、create 2022.02.28
*********************************************/
INT16 ReadLinkConfigData(LinkDataConfigStru* pLinkConfigAddr);

/*********************************************
*函数功能：读计轴器配置数据
*参数说明：pAxisConfigAddr 计轴器配置数据结构体指针
*返回值：计轴器数
1、create 2022.03.11
*********************************************/
INT16 ReadAxisConfigData(AxisConfigStru* pAxisConfigAddr);

/*********************************************
*函数功能：读分界点配置数据
*参数说明：ciId联锁ID，  pstCutoffConfigData屏蔽门配置数据结构体指针
*返回值：本地关联分界点ID
*********************************************/
INT16 ReadCutoffPointConfigData(const UINT8 ciId, CfpConfigStru* pstCutoffConfigData);

/*********************************************
*函数功能：读倒切设备点配置数据
*参数说明：ciId联锁ID，  pstReverseConfigData 倒切设备配置数据结构体指针
*返回值：本地关联分界点ID
*********************************************/
INT16 ReadReverseCutConfigData(const UINT8 ciId, ReverseCutCfgDataStru* pstReverseConfigData);
/************************************************************************
功能：HlhtID转vobc内部编号
输入：
IN UINT32 EtcsId    ETCSID
输出：
OUT UINT16 *pDevName     2字节内部编号（高位设备类型 低位设备索引号)
OUT UINT16 *pEndId		vobc使用端编号 1-TC1 2-TC2 0-2IP车（首尾冗余车）
返回值：UINT8 1成功 0失败
************************************************************************/
UINT8 dquHlhtId2VobcName(IN UINT32 EtcsId, OUT UINT16 *pDevName, OUT UINT16 *pEndId);

/**************************************************
*函数功能：取VOBC设备编号相应位数，查询vobc索引
***************************************************/
UINT8 dquQueryVobcDevLgId2Index(UINT32 devId, UINT32 bitMask, UINT16 *pInDevIndex, UINT16 *wLogicId);

/*
*  功能描述： CRC32函数，计算过程如下，注意：计算CRC是从输入数据第一个字节的最高BIT开始的
*             采用的多项式0x4c10db7L，初始值为0x00000000,未镜像，结果异或系数为0x00000000
*             如果DataLen=0，返回值也为0.
*  参数说明： pData,    数据指针
*             DataLen,  数据长度（字节）
*  返回值：   返回值为CRC值
*/
UINT32 Tioc_CommonCrc32(const UINT8 *pData, UINT32 DataLen);

/**
* @brief CRC32函数 解析平台心跳帧使用
* @param pData 数据指针
* @param dataLen 数据长度
* @return 为CRC值
* @details
* 计算过程如下，注意：计算CRC是从输入数据第一个字节的最高BIT开始的
* 采用的多项式0x4c11db7L，初始值为0x00000000,未镜像，结果异或系数为0x00000000
* 如果dataLen=0，返回值也为0
*/
UINT32 Tioc_PlatCommonCrc32(const UINT8* pData, UINT32 dataLen);


/*********************************************
*函数功能：读防护区域配置数据
*参数说明：EaConfigStru 防护区域配置数据结构体指针
*返回值：防护区域数
*********************************************/
INT16 ReadEaConfigData(EaConfigStru* pEaConfigAddr);

/*********************************************
*函数功能：获取TIOC全线免筛有效标志
*参数说明：ciId联锁ID
*返回值：TIOC全线免筛有效标志 TIOC_WLSCTEEN_VALID TIOC_WLSCTEEN_UNVALID
*********************************************/
UINT8 GetWLScreenTypeById(const UINT8 ciId);

/*********************************************
*函数功能：读声光报警器配置数据
*参数说明：const UINT8 cLocalCiId 本地联锁ID
*          pSGBJConfigDataStruct* SGBJConfigDataStru 声光报警器配置数据结构体指针
*返回值：-1 读取失败
		 其它 声光报警器数量
*********************************************/
INT16 ReadSGBJConfigData(const UINT8 cLocalCiId, SGBJConfigDataStruct* pSGBJConfigDataStru);

/*********************************************
*函数功能：确定计轴区段的边界计轴区段属性
*参数说明：const UINT16 wAxleId 计轴区段ID
*返 回 值：1 边界计轴区段
*	       0 非边界计轴区段
*********************************************/
UINT8 EnsureAxleBorderAtrr(const UINT16 wAxleId);

/*********************************************
*函数功能：确定计轴区段相邻计轴区段是否为存车线
*参数说明：const UINT16 wAxleId 计轴区段ID
*返 回 值：1 是
*	       0 否
* Created By LQ 2025.03.08
*********************************************/
UINT8 EnsureNearAxleStorageLineAtrr(const UINT16 wAxleId);

/*
* 功能描述：读取物理区段在计轴中的索引
* 参数说明：const UINT8 chLocalCiId 本地联锁ID
*			PhysicalSectionConfigDataStruct* pPhysicalSectionConfigDataStru 物理区段结构体
* 返回值  ：CI_SUCCESS,成功
*			CI_ERROR,失败
* BY CGH 20250418
*/
UINT8 ReadPhySecIndexInAxle(const UINT8 chLocalCiId, PhysicalSectionConfigDataStruct* pPhysicalSectionConfigDataStru);

#ifdef __cplusplus
}
#endif
#endif
