
#ifndef _READ_XML_TO_DATA_H
#define _READ_XML_TO_DATA_H
#include "CommonTypes.h"
#include "..\\SimDef\\SimDef.h"
#include "CommonMemory.h"
#include "dfsDataRead.h"
#define DEFAULT_ZERO                  0                 /*变量初始值为0*/
#define FLAG_SET                      0x55              /*标志位已置位*/
#define FLAG_UNSET                    0xAA              /*标志位未置位*/
#define MAX_CI_CNT 255

#define DSU_DEVICE_IP_CONFIG_TYPE        0x40     /*设备ip表bookId*/ 
#define DUS_PORT_TABLE_ID				9		/*端口表ID*/

#define RED_NET		1
#define BLUE_NET	2

#define MASK_HLHLNO_FACTORY		0x7

#define SYSTEM_TYPE_VOBC		0x14
#define SYSTEM_TYPE_CI		0x3c

#define FACTORY_NO_TONGHAO		1/*厂商编号：通号*/
#define FACTORY_NO_TCT			2/*厂商编号：交控*/
#define FACTORY_NO_TK			3 /*厂商编号：铁科*/
#define FACTORY_NO_HOLLYSYS		4 /*厂商编号：和利时*/
#define FACTORY_NO_ZHONGHE		5 /*厂商编号：众合*/

#ifdef __cplusplus
extern "C" {
#endif

typedef struct 
{
	UINT16 deviceName;
	UINT32 estId; /*互联互通ID*/
	UINT16 logicId;
	UINT8  redIp[PRTL_CNT];
	UINT8  blueIp[PRTL_CNT];
	UINT16 bluePort[PRTL_CNT];	/* 0:sfp,1:rp,2:rssp/rsr */
	UINT16 redPort[PRTL_CNT];	/* 0:sfp,1:rp,2:rssp/rsr */
} DeviceIpInfoStru;//定义设备信息结构体

typedef struct
{
	UINT16 IndexId;/*索引编号*/

	UINT32 SrcDeviceType;/*源设备类型*/
	UINT32 DstDeviceType;/*目的设备类型*/

	UINT8 SrcFactoryNo;/*源厂商编号*/
	UINT8 DstFactoryNo;/*目的厂商编号*/

	UINT16 Tc1RedSendPort;/*Tc1端红网发送端口*/
	UINT16 Tc1RedRecvPort;/*Tc1端红网接收端口*/
	UINT16 Tc1BlueSendPort;/*Tc1端蓝网发送端口*/
	UINT16 Tc1BlueRecvPort;/*Tc1端蓝网接收端口*/

	UINT16 Tc2RedSendPort;/*Tc2端红网发送端口*/
	UINT16 Tc2RedRecvPort;/*Tc2端红网接收端口*/
	UINT16 Tc2BlueSendPort;/*Tc2端蓝网发送端口*/
	UINT16 Tc2BlueRecvPort;/*Tc2端蓝网接收端口*/

}PORT_DATA_STRUCT;/*定义端口表结构体*/

/*一个设备有多个IP*/
typedef struct
{
	UINT32 blueIp;
	UINT32 redIp;
	UINT16 bluePort;/*每个协议对应一个端口*/
	UINT16 redPort;/*每个协议对应一个端口*/
}IpInfo;

typedef struct
{
	UINT16 DevId;

	UINT32 RedIp;
	UINT32 BlueIp;
	UINT16 RedPort;
	UINT16 BluePort;
}CiAtsIpInfo;

typedef struct
{
	UINT8 DevId;
	UINT8 DevType;

	UINT32 RedIp;
	UINT32 BlueIp;
	UINT16 RedPort;
	UINT16 BluePort;
}CiOcIpInfo;

typedef struct
{
	UINT8 InAts;/*标记CI是否入了ATS网*/
	UINT8 XdInAts;/*标记CI是否通过ATS网与现地进行通信*/
	UINT8 CiCount;/*ci数量*/
	CiAtsIpInfo IpS[MAX_CI_CNT];
}CiAtsCfg;

typedef struct
{
	UINT8 InCi;/*OC是否接入CI网*/
	UINT8 CiCount;/*ci数量*/
	CiOcIpInfo IpS[MAX_CI_CNT];
}CiOcCfg;

void ReadXml(const char * pPath);
void ReadXmlLeuCICfg(const char * pPath);
UINT8 GetIpAndPortByDeviceName(UINT16 deviceName, UINT8 protocolType, IpInfo pIpInfo[], UINT8 *num);
UINT8 GetDeviceNameByIpAndPort(UINT16 port,UINT32 ip,UINT16 *deviceName,UINT16 *pLogId);
UINT8 GetDeviceNameByIpAndPort1(UINT16 port,UINT32 ip,UINT16 *deviceName,UINT16 *pLogId,UINT32 *pEtcid);
UINT8 GetEtcsIdByIpAndPort(UINT16 port, UINT32 ip, UINT32 *etcsId);
UINT8 GetNetEndPoint(UINT16 devId, UINT16 logicId, UINT8 prtlIdx, IpInfo pIpInfos[], UINT8 *ipCnt);
UINT8 GetNetATSEndPoint(UINT16 devId, UINT16 logicId, UINT8 prtlIdx, IpInfo pIpInfos[], UINT8 *ipCnt);
UINT8 GetIpAndPortByDeviceNameLEUCI(UINT16 deviceName, IpInfo pIpInfo[], UINT8 *num);
UINT8 GetDeviceNameByIpAndPortLEU(UINT16 port, UINT32 ip, UINT16 *deviceName);

/*********************************************
*函数功能：读取CI在入ATS网的配置
*参数说明：
*入口参数：
		pPath：配置文件路径
*出口参数：
		无
*返回值：失败或成功 0:成功 1：失败
*********************************************/
UINT8 ReadCiAtsCfg(const char *pPath);

/*********************************************
*函数功能：读取CI在入OC网的配置
*参数说明：
*入口参数：
pPath：配置文件路径
*出口参数：
无
*返回值：失败或成功 0:成功 1：失败
*********************************************/
UINT8 ReadCiOcCfg(const char *pPath, UINT16 wDevName, CiOcIpInfo* pIpInfo);

/*********************************************
*函数功能：读取指定CI在ATS网络中的网络节点信息
*参数说明：
*入口参数：
		devId：CI设备ID
		UINT8 ccovIdx:协议编号
*出口参数：
		pIpInfo：CI在ATS网络中的网络节点信息
*返回值：失败或成功 0:成功 1：失败
*********************************************/
UINT8 ReadCiAtsIpInfo(UINT16 devId, UINT8 ccovIdx, CiAtsIpInfo *pIpInfo);

/*********************************************
*函数功能：读取CI是否入ATS网标志
*参数说明：
*入口参数：
		无
*出口参数：
		无
*返回值：CI是否入ATS网标志
*********************************************/
UINT8 ReadCiInAtsFlag(void);

/*********************************************
*函数功能：读取CI与现地通信方式标志
*参数说明：
*入口参数：
		无
*出口参数：
		无
*返回值：CI与现地通信方式标志
*********************************************/
UINT8 ReadXdInAtsFlag(void);
/*********************************************
*函数功能：通过互联互通ID获取VOBC编号
*参数说明：
*入口参数：
		EtcsId VOBC互联互通ID
*出口参数：
		无
*返回值：VOBC编号
*********************************************/
UINT16 dquGetVobcNumForEstId(UINT32 EtcsId);

/*
* 功能描述：根据设备名称获取红蓝网的IP地址和端口号
* 输入参数：UINT32 hlhtId 互联互通ID
*			UINT8 tc1tc2	头尾端
*			UINT8 redOrBlue	红蓝网
* 输出参数：UINT16* pPort	端口
* 返 回 值：1:正常返回 0：错误返回
*/
UINT8 GetPortFromPortData(UINT32 hlhtId, UINT8 tc1Ortc2,UINT8 redOrBlue,UINT16* pPort);

/*
* 功能描述：初始化端口表数据。
* 输入参数：UINT8* FSName， 文件名或者指针地址
* 返 回 值：1，成功
*           0，失败，数据有错误
*/
UINT8 InitPortTableData(UINT8* FSName);
/*根据IP和端口查找设备名称，
查找成功返回零，查找失败返回其他值*/
UINT8 GetEtcsIdByIp(UINT8 ip[4], UINT32 *etcsId,UINT16 *pDevName);

#ifdef __cplusplus
}
#endif
#endif
