/************************************************************************
*
* 文件名   ：  dquCILSStruFrmChar.c
* 版权说明 ：  北京交控科技有限公司 
* 版本号   ：  1.0
* 创建时间 ：  2011.12.27
* 作者     ：  研发中心软件部
* 功能描述 ：   从数据到进路表数据转换处理过程
* 使用注意 ： 
* 修改记录 ：  
*
************************************************************************/
#include "dquCILSStruFrmChar.h"
#include "dquCIReadCommonChar.h"
/*********************************************
*函数功能：从数据到长进路表转换
*参数说明：pDataAddr数据地址，  pLongRouteStr长进路数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_LongRouteStruFromChar(UINT8 * pDataAddr,LS_LongRouteStru* pLongRouteStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pLongRouteStr))
    {
        rtnvalue = 0u;
        return rtnvalue;
    }

	pLongRouteStr->wId =  dquCiShortFromChar(pData);
	pData+=2u;

	for(i=0u;i<LR_MAX_INCLUDE_ROUTE_NUM;i++)
	{
		pLongRouteStr->szIncludeRouteId[i] = dquCiShortFromChar(pData);
		pData+=2u;
	}
	rtnvalue = 1u;
	return rtnvalue;
}
/*********************************************
*函数功能：从数据到非进路调车表数据结构体转换
*参数说明：pDataAddr数据地址，  pNoRouteDcStr非进路调车数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_NoRouteDcStruFromChar(UINT8 * pDataAddr,LS_NoRouteDcStru* pNoRouteDcStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pNoRouteDcStr))
    {
        rtnvalue = 0u;
        return rtnvalue;
    }

	/*ID*/
	pNoRouteDcStr->wId =  dquCiShortFromChar(pData);
	pData+=2u;

	/*非进路调车包含信号机ID*/
	pNoRouteDcStr->wIncludeSignal =  dquCiShortFromChar(pData);
	pData+=2u;

	/*物理区段和检查属性ID*/
	pNoRouteDcStr->wWuliJianchaType =  dquCiShortFromChar(pData);
	pData+=2u;

	/*包含道岔编号*/
	for(i=0u;i<NR_MAX_INCLUDE_POINT_NUM;i++)
	{
		pNoRouteDcStr->wIncludePoint[i] = dquCiShortFromChar(pData);
		pData+=2u;
		pNoRouteDcStr->wIncludePointSta[i] = dquCiShortFromChar(pData);
		pData+=2u;
	}
	 /*防护道岔Id*/
	pNoRouteDcStr->wFHPointId =  dquCiShortFromChar(pData);
	pData+=2u;

	/*非进路调车包含敌对信号结构*/
	for(i=0u;i<NR_MAX_INCLUDE_DDXH_NUM;i++)
	{
		pNoRouteDcStr->wDiDuiXinhao[i] = dquCiShortFromChar(pData);
		pData+=2u;
		
	}
	
	/*侵限区段ID*/
	for(i=0u; i<ROUTE_MAX_QXQD_NUM; i++)
	{
	    pNoRouteDcStr->wIntrudePhySecId[i] = dquCiShortFromChar(pData);
	    pData+=2u;
    }
	rtnvalue = 1u;
	return rtnvalue;
}


/*********************************************
*函数功能：从数据到自动进路表转换
*参数说明：pDataAddr数据地址，  pAutoRouteStr自动进路数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_AutoRouteStruFromChar(UINT8 * pDataAddr,LS_AutoRouteStru* pAutoRouteStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pAutoRouteStr))
    {
        rtnvalue = 0u;
        return rtnvalue;
    }

	pAutoRouteStr->wId =  dquCiShortFromChar(pData);
	pData+=2u;

	for(i=0u;i<AR_MAX_INCLUDE_ROUTE_NUM;i++)
	{
		pAutoRouteStr->szIncludeRouteId[i] = dquCiShortFromChar(pData);
		pData+=2u;
	}
    pData+=20u;
	rtnvalue = 1u;
	return rtnvalue;
}

/*********************************************
*函数功能：从数据到自动折返进路表转换
*参数说明：pDataAddr数据地址，  pAutoRtnRouteStr自动折返进路数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_AutoRtnRouteStruFromChar(UINT8 * pDataAddr,LS_AutoRtnRouteStru* pAutoRtnRouteStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pAutoRtnRouteStr))
    {
        rtnvalue = 0u;
        return rtnvalue;
    }

	pAutoRtnRouteStr->wId =  dquCiShortFromChar(pData);
	pData+=2u;

	for(i=0u;i<ARR_MAX_INCLUDE_ROUTE_NUM;i++)
	{
		pAutoRtnRouteStr->szIncludeRouteId[i] = dquCiShortFromChar(pData);
		pData+=2u;
	}
    pData+=20u;
	rtnvalue = 1u;
	return rtnvalue;
}

/*********************************************
*函数功能：从数据到反向进路表转换
*参数说明：pDataAddr数据地址，  pReverseRouteStr反向进路数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_ReverseRouteStruFromChar(UINT8 * pDataAddr,LS_ReverseRouteStru* pReverseRouteStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pReverseRouteStr))
    {
        rtnvalue = 0u;
    }
	else
	{
		pReverseRouteStr->wId =  dquCiShortFromChar(pData);
		pData+=2u;

		for(i=0u;i<RR_MAX_INCLUDE_ROUTE_NUM;i++)
		{
			pReverseRouteStr->szIncludeRouteId[i] = dquCiShortFromChar(pData);
			pData+=2u;
		}
		rtnvalue = 1u;	
	}
	return rtnvalue;
}

/*********************************************
*函数功能：从数据到自动进路物理区段及检查类型转换
*参数说明：pDataAddr数据地址， pRoutePhyAndCheckStateStr 自动进路物理区段及检查类型数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_RoutePhyCheckStaStruFromChar(UINT8 * pDataAddr,LS_RoutePhyAndCheckStateStruct* pRoutePhyAndCheckStateStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pRoutePhyAndCheckStateStr))
    {
        rtnvalue = 0u;
        return rtnvalue;
    }

	pRoutePhyAndCheckStateStr->wId = dquCiShortFromChar(pData);
	pData+=2u;

	for(i=0u;i<MAX_INCLUDE_PHYSC_SGMT_NUM;i++)
	{
		pRoutePhyAndCheckStateStr->wPhysicalSgmtId[i] = dquCiShortFromChar(pData);
		pData+=2u;
		pRoutePhyAndCheckStateStr->wCheckState[i] = *pData;
		pData++;
	}
	rtnvalue = 1u;
	return rtnvalue;
}

/*********************************************
*函数功能：从数据到防护道岔转换
*参数说明：pDataAddr数据地址，  pFHDaoChaStr防护道岔数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_FHDaoChaStruFromChar(UINT8 * pDataAddr,LS_FHDaoChaStruct* pFHDaoChaStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pFHDaoChaStr))
    {
        rtnvalue = 0u;
        return rtnvalue;
    }

	pFHDaoChaStr->wId = dquCiShortFromChar(pData);
	pData+=2u;

	for(i=0u;i<FHDC_MAX_INCLUDE_POINT_NUM;i++)
	{
		pFHDaoChaStr->wPointId[i] = dquCiShortFromChar(pData);
		pData+=2u;
		pFHDaoChaStr->wPointSta[i] = dquCiShortFromChar(pData);
		pData+=2u;
	}
	rtnvalue = 1u;
	return rtnvalue;
}

/*********************************************
*函数功能：从数据到带动道岔组数据转换
*参数说明：pDataAddr数据地址，  pDrivedSwitchGroupStru防护道岔数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_DrvSwiGrpStruFromChar(UINT8 * pDataAddr, LS_RouteDrivedSwitchGroupStruct * pDrivedSwitchGroupStru)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pDrivedSwitchGroupStru))
    {
        rtnvalue = 0u;
    }
	else
	{
		pDrivedSwitchGroupStru->wId = dquCiShortFromChar(pData);

		pData += LS_DATA_DUAL_BYTE_ELEM_LEN;

		for(i = 0u; i < DRV_SWI_GRP_MAX_INCLUDE_POINT_NUM; i++)
		{
			pDrivedSwitchGroupStru->wPointId[i] = dquCiShortFromChar(pData);
			pData += LS_DATA_DUAL_BYTE_ELEM_LEN;

			pDrivedSwitchGroupStru->wPointSta[i] = dquCiShortFromChar(pData);
			pData += LS_DATA_DUAL_BYTE_ELEM_LEN;
		}

		rtnvalue = 1u;
	}

	return rtnvalue;
}


/*********************************************
*函数功能：从数据到敌对信号转换
*参数说明：pDataAddr数据地址， pDDXHStr 敌对信号数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_DDXHStruFromChar(UINT8 * pDataAddr,LS_DDXHStruct* pDDXHStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pDDXHStr))
    {
        rtnvalue = 0u;
        return rtnvalue;
    }

	pDDXHStr->wId = dquCiShortFromChar(pData);
	pData+=2u;
	pDDXHStr->wDiDuiXinHaoId = dquCiShortFromChar(pData);
	pData+=2u;

	for(i=0u;i<DDXH_MAX_INCLUDE_POINT_NUM;i++)
	{
		pDDXHStr->wPointId[i] = dquCiShortFromChar(pData);
		pData+=2u;
		pDDXHStr->wPointSta[i] = dquCiShortFromChar(pData);
		pData+=2u;
	}
	rtnvalue = 1u;
	return rtnvalue;
}
/*********************************************
*函数功能：从数据到敌对信号组转换
*参数说明：pDataAddr数据地址，  pDDXHZStr敌对信号数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_DDXHZStruFromChar(UINT8 * pDataAddr,LS_DDXHZStruct* pDDXHZStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pDDXHZStr))
    {
        rtnvalue = 0u;
        return rtnvalue;
    }

	pDDXHZStr->wId = dquCiShortFromChar(pData);
	pData+=2u;
	for(i=0u;i<DDXHZ_MAX_DDXH_NUM;i++)
	{
		pDDXHZStr->wDiDuiXinHaoId[i] = dquCiShortFromChar(pData);
	    pData+=2u;
	}
	rtnvalue = 1u;
	return rtnvalue;
}
/*********************************************
*函数功能：从数据到信号机组转换
*参数说明：pDataAddr数据地址， pSignalStr 信号机数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_SignalStruFromChar(UINT8 * pDataAddr,LS_SignalStruct* pSignalStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pSignalStr))
    {
        rtnvalue = 0u;
        return rtnvalue;
    }

	pSignalStr->wId = dquCiShortFromChar(pData);
	pData+=2u;
	

	for(i=0u;i<MAX_INCLUDE_SIGNAL_NUM;i++)
	{
		pSignalStr->wSignalId[i] = dquCiShortFromChar(pData);
		pData+=2u;
	}
	rtnvalue = 1u;
	return rtnvalue;
}
/*********************************************
*函数功能：从数据到侵限区段及条件道岔表数据结构体转换
*参数说明：pDataAddr数据地址，  pIntruPhySecStr侵限区段及条件道岔数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_IntrudePhySecStruFromChar(UINT8 * pDataAddr,LS_IntrudePhySectionStruct* pIntruPhySecStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pIntruPhySecStr))
    {
        rtnvalue = 0u;
    }
	else
	{
		rtnvalue = 1u;
		pIntruPhySecStr->wId = dquCiShortFromChar(pData);
		pData += 2u;

		if (PHYSICAL_SECTION_SUM_MAX < dquCiShortFromChar(pData))
		{
			rtnvalue = 0u;
		}
		else
		{
			pIntruPhySecStr->wIntrudePhySecId = dquCiShortFromChar(pData);
			pData += 2u;
			for (i = 0u; i < QXQD_MAX_INCLUDE_POINT_NUM; i++)
			{
				if (SWITCH_SUM_MAX < dquCiShortFromChar(pData))
				{
					rtnvalue = 0u;
					break;
				}
				else
				{
					pIntruPhySecStr->wPointId[i] = dquCiShortFromChar(pData);
					pData += 2u;
					pIntruPhySecStr->wPointSta[i] = dquCiShortFromChar(pData);
					pData += 2u;
				}
			}
			if (1U == rtnvalue)
			{
				pIntruPhySecStr->wCondSwitLockDir = *(pData);
				pData += 1u;
			}
		}
	}	
	return rtnvalue;
}


/*********************************************
*函数功能：从数据到其他联锁表数据结构体转换
*参数说明：pDataAddr数据地址，  pOtherCIStr其他联锁数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_OtherCIStruFromChar(UINT8 * pDataAddr,LS_OtherCIStruct* pOtherCIStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pOtherCIStr))
    {
        rtnvalue = 0u;
        return rtnvalue;
    }

	pOtherCIStr->wId = dquCiShortFromChar(pData);
	pData+=2u;

#if 0
	for(i=0;i<OTHER_MAX_PSD_NUM;i++)
	{
		pOtherCIStr->wPsdId[i] = dquCiShortFromChar(pData);
		pData+=2u;
	}
	for(i=0;i<OTHER_MAX_EMERG_CLSBTN_NUM;i++)
	{
		pOtherCIStr->wEmgClsBtn[i] = dquCiShortFromChar(pData);
		pData+=2u;
	}
#else
	/* 一个其他联锁条件支持总共10个设备信息 */
	for(i=0u;i<OTHER_CI_MAX_DEV_NUM;i++)
	{
		pOtherCIStr->otherCiDevInfoBuf[i].wDevType = *(pData);
		pData+=1u;
		pOtherCIStr->otherCiDevInfoBuf[i].wId = dquCiShortFromChar(pData);
		pData+=2u;
		pOtherCIStr->otherCiDevInfoBuf[i].wDevStatus = *(pData);
		pData+=1u;
	}
#endif
	rtnvalue = 1u;
	return rtnvalue;
}

/*********************************************
*函数功能：从数据到防护道岔-主体道岔数据结构体转换
*参数说明：pDataAddr数据地址，pFloodGateStr  数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_ProSwitchHostSwStruFromChar(UINT8 * pDataAddr,LS_ProSwitchHostSwitchMapStruct* pProHostSwitchMapStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtVal = 0u;
	UINT16 index = 0u;
	if ((NULL == pDataAddr) || (NULL == pProHostSwitchMapStr))
	{
		rtVal = 0u;
	}
	else
	{
		rtVal = 1u;
	}
	if (1u == rtVal)
	{
		/*防护道岔ID */
		pProHostSwitchMapStr->wProSwitchID = dquCiShortFromChar(pData);
		index +=2u;

		/*主体道岔ID数组*/
		for (i=0u;i<SWITCH_HOST_SWITCH_MAX_NUM;i++)
		{
			pProHostSwitchMapStr->wHostSwitchIDBuf[i] = dquCiShortFromChar((UINT8*)(&pData[index]));
			index +=2u;

		}
	}

	return rtVal;
}
/*********************************************
*函数功能：从数据到进路数据结构体转换
*参数说明：pDataAddr数据地址，pRouteStr  数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_RouteStruFromChar(UINT8 * pDataAddr,LS_RouteStruct* pRouteStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pRouteStr))
    {
        rtnvalue = 0u;
        return rtnvalue;
    }

	 /*进路ID */
	pRouteStr->wRouteId = dquCiShortFromChar(pData);
	pData+=2u;

	 /*进路方向 */
	pRouteStr->wDir = *pData;
	pData++;

	 

	/*引导属性*/
	pRouteStr->wYinDao = *pData;
	pData++;

	/*始端按钮对应信号机ID*/
	pRouteStr->wStarBtnSignal = dquCiShortFromChar(pData);
	pData+=2u;

	/*变通按钮对应信号机ID*/
	pRouteStr->wFlexibleSignal = dquCiShortFromChar(pData);
	pData+=2u;

	/*终端按钮对应信号机ID*/
	pRouteStr->wEndBtnSignal = dquCiShortFromChar(pData);
	pData+=2u;

	/*始端信号机显示颜色*/
	pRouteStr->wStarSignalClr = dquCiShortFromChar(pData);
	pData+=2u;

	/*始端信号机引导开放颜色*/
	pRouteStr->wStarSigYinDaoClr = dquCiShortFromChar(pData);
	pData+=2u;

    /*物理区段及检查属性ID*/ 
	pRouteStr->wPhySecCheckStaId= dquCiShortFromChar(pData);
	pData+=2u;

    /*进路防护道岔组ID*/ 
	pRouteStr->wFHDCId= dquCiShortFromChar(pData);
	pData+=2u;

	/*敌对信号及条件道岔ID*/
	
    pRouteStr->wDDXHId = dquCiShortFromChar(pData);
	pData+=2u;
	
	 /*侵限区段ID*/
	for(i=0;i<ROUTE_MAX_QXQD_NUM;i++)
	{
		pRouteStr->wIntrudePhySecId[i] = dquCiShortFromChar(pData);
	   pData+=2u;
	}

     /*进路折返信号机组ID*/
	pRouteStr->wReturnSignalId = dquCiShortFromChar(pData);
	pData+=2u;

	/*防护区段解锁对应停稳物理区段ID*/
	pRouteStr->wFHQD_TW_WLQDId = dquCiShortFromChar(pData);
	pData+=2u;

	/*进路相关可封锁信号机组ID*/
	pRouteStr->wFS_SignalId = dquCiShortFromChar(pData);
	pData+=2u;

	/*进路开放需关闭信号机组ID*/
	pRouteStr->wSignalClsId = dquCiShortFromChar(pData);
	pData+=2u;


	/*进路开放需开放信号机组ID*/
	pRouteStr->wCBTCSignalOpenId = dquCiShortFromChar(pData);
	pData += 2u;

	 /*进路开放需开放信号机组ID*/
	pRouteStr->wSignalOpenId = dquCiShortFromChar(pData);
	pData+=2u;


	/*不同时开放信号机组*/
	pRouteStr->wBTSOpenId = dquCiShortFromChar(pData);
	pData+=2u;

	/*带动道岔组ID*/
	pRouteStr->wDrvSwiGrpId = dquCiShortFromChar(pData);
	pData+=2u;
	
	/*CBTC级别其他联锁ID*/
	pRouteStr->wCBTCOtherCIID = dquCiShortFromChar(pData);
	pData+=2u;
	  /*点式级别其他联锁ID*/
    pRouteStr->wBLCKOtherCIID = dquCiShortFromChar(pData);
	pData+=2u;

	/* 防淹门 ID */
	for(i=0u;i<ROUTE_MAX_FLOOD_GATE_NUM;i++)
	{
		pRouteStr->wFloodGateIdBuf[i] = dquCiShortFromChar(pData);
		pData+=2u;
	}
	/*进路人解、取消需要延时解锁属性*/
	pRouteStr->wNeedDelayUnlock = *pData;
	pData++;

	rtnvalue = 1u;
	return rtnvalue;
}
/*********************************************
*函数功能：从数据到全自动折返进路表转换
*参数说明：pDataAddr数据地址，  pAllAutoRtnRouteStr全自动折返进路数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_AllAutoRtnRouteStruFromChar(UINT8 * pDataAddr,LS_AllAutoRtnRouteStru* pAllAutoRtnRouteStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pAllAutoRtnRouteStr))
    {
        rtnvalue = 0u;
    }
	else
	{
		pAllAutoRtnRouteStr->wId =  dquCiShortFromChar(pData);
		pData+=2u;

		for(i=0u;i<AARR_MAX_INCLUDE_ROUTE_NUM;i++)
		{
			pAllAutoRtnRouteStr->szIncludeRouteId[i] = dquCiShortFromChar(pData);
			pData+=2u;
		}
        pData+=20u;
		rtnvalue = 1u;
	}
	return rtnvalue;
}

/*********************************************
*函数功能：从数据到保护区段锁闭条件表转换
*参数说明：
				pDataAddr数据地址，
				pOverlapLockCondStru 保护区段锁闭条件数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_OverlapLockCondStruFromChar(UINT8 * pDataAddr, LS_OveralpLockCondStru * pOverlapLockCondStru)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pOverlapLockCondStru))
    {
        rtnvalue = 0u;
    }
	else
	{
		/*获取保护区段ID*/
		pOverlapLockCondStru->wOverlapId = dquCiShortFromChar(pData);
		pData += LS_DATA_DUAL_BYTE_ELEM_LEN;

		/*获取保护区段包含折返进路ID*/
		for(i = 0u; i < OVLP_LOCK_COND_MAX_INCL_RET_ROUTE_N_PHY_SEC_NUM; i++)
		{
			pOverlapLockCondStru->szIncludeReturnRouteId[i] = dquCiShortFromChar(pData);
			pData += LS_DATA_DUAL_BYTE_ELEM_LEN;
		}

		/*获取保护区段包含折返轨物理区段ID*/
		for(i = 0u; i < OVLP_LOCK_COND_MAX_INCL_RET_ROUTE_N_PHY_SEC_NUM; i++)
		{
			pOverlapLockCondStru->szIncludeRetTrkPhySecId[i] = dquCiShortFromChar(pData);
			pData += LS_DATA_DUAL_BYTE_ELEM_LEN;
		}

		/*获取保护区段包含侵限区段及条件道岔ID*/
		for(i = 0u; i < OVLP_LOCK_COND_MAX_INCL_INV_SEC_N_CON_SWI_NUM; i++)
		{
			pOverlapLockCondStru->szIncludeInvSecAndConSwiId[i] = dquCiShortFromChar(pData);
			pData += LS_DATA_DUAL_BYTE_ELEM_LEN;
		}

		/*获取保护区段包含侵限侵限敌对保护区段ID*/
		for(i = 0u; i < OVLP_LOCK_COND_MAX_INCL_INV_OPP_OVLP_NUM; i++)
		{
			pOverlapLockCondStru->szIncludeInvOppOverlapId[i] = dquCiShortFromChar(pData);
			pData += LS_DATA_DUAL_BYTE_ELEM_LEN;
		}

		/*获取保护区段锁闭条件防护道岔组ID*/
		pOverlapLockCondStru->overlapLocProSwitchGroupID = dquCiShortFromChar(pData);
		pData += LS_DATA_DUAL_BYTE_ELEM_LEN;

		/*获取保护区段包含防淹门ID*/
		for(i = 0u; i < ROUTE_MAX_FLOOD_GATE_NUM; i++)
		{
			pOverlapLockCondStru->szIncludeFloodGateId[i] = dquCiShortFromChar(pData);
			pData += LS_DATA_DUAL_BYTE_ELEM_LEN;
		}

		/*保护区段本端照查继电器ID*/
		pOverlapLockCondStru->wOverlapThisZhaoChaRelayId = dquCiShortFromChar(pData);
		pData += LS_DATA_DUAL_BYTE_ELEM_LEN;

		/*保护区段对端照查继电器ID*/
		pOverlapLockCondStru->wOverlapThatZhaoChaRelayId = dquCiShortFromChar(pData);
		pData += LS_DATA_DUAL_BYTE_ELEM_LEN;

		rtnvalue = 1u;
	}
	return rtnvalue;
}

/* zt 删除单轨相关代码 2022-02-15 */



/*********************************************
*函数功能：从数据到物理区段侵限区段及条件道岔联锁关系表转换
*参数说明：
				pDataAddr数据地址，
				pLSPhyIntruPhySecStru 物理区段侵限区段及道岔数据结构体
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_PhySecIntrudeStruFromChar(UINT8 * pDataAddr, LS_PhySectionIntrudeStruct* pLSPhyIntruPhySecStru)
{
	UINT8 * pData = pDataAddr;

	UINT16 i = 0u;

	UINT8 rtnvalue = 0u;

    if ((NULL == pDataAddr) || (NULL == pLSPhyIntruPhySecStru))
    {
        rtnvalue = 0u;
        return rtnvalue;
    }

	pLSPhyIntruPhySecStru->physicalId = dquCiShortFromChar(pData);

	pData += 2u;

	for(i = 0u; i < PHYSICAL_INCL_INV_SWICH_NUM ; i++)
	{
		pLSPhyIntruPhySecStru->phyInvSecAndConSwiId[i] = dquCiShortFromChar(pData);
		pData += 2u;

	}

	rtnvalue = 1u;

	return rtnvalue;
}

/*********************************************
*函数功能：从数据到组合自动进路表转换
*参数说明：pDataAddr数据地址，  pGroupAutoRtnRouteStr 组合自动进路数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_GroupAutoRtnRouteStruFrmChar(UINT8 * pDataAddr,LS_GroupAutoRouteStru* pGroupAutoRtnRouteStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

	if ((NULL == pDataAddr) || (NULL == pGroupAutoRtnRouteStr))
	{
		rtnvalue = 0u;
	}
	else
	{
		pGroupAutoRtnRouteStr->wId =  dquCiShortFromChar(pData);
		pData+=2u;

		for(i=0u;i<AR_MAX_INCLUDE_ROUTE_NUM;i++)
		{
			pGroupAutoRtnRouteStr->szIncludeAutoRouteId[i] = dquCiShortFromChar(pData);
			pData+=2u;
		}
		rtnvalue = 1u;
	}
	return rtnvalue;
}

/*********************************************
*函数功能：从数据到逻辑区段区段侵限区段及条件道岔联锁关系表转换
*参数说明：
*		pDataAddr数据地址，
*		pLSLgcIntruSecStru 逻辑区段侵限区段及道岔数据结构体
*返回值：0，失败；1，成功
*创建  ：qw.liu 增加读取逻辑区段侵限条件表
*********************************************/
UINT8 LS_LgcSecIntrudeStruFromChar(UINT8 * pDataAddr, LS_LgcSectionIntrudeStruct* pLSLgcIntruSecStru)
{
	UINT8 * pData = pDataAddr;

	UINT16 i = 0u;

	UINT8 rtnvalue = 0u;

	if ((NULL != pDataAddr) && (NULL != pLSLgcIntruSecStru))
	{


		pLSLgcIntruSecStru->wLogSecId = dquCiShortFromChar(pData);

		pData += 2u;

		for (i = 0u; i < LOGIC_INCL_INV_SWICH_NUM; i++)
		{
			pLSLgcIntruSecStru->wszLogicInvSecAndConSwiId[i] = dquCiShortFromChar(pData);
			pData += 2u;

		}

		rtnvalue = 1u;
	}
	else
	{
		rtnvalue = 0u;
	}
	return rtnvalue;
}

/*********************************************
*函数功能：从数据到逻辑区段区段侧防关系表转换
*参数说明：
*		pDataAddr数据地址，
*		pLSLgcSecLtrlDfncStru 逻辑区段侧防条件数据结构体
*返回值：0，失败；1，成功
*创建  ：
*********************************************/
UINT8 LS_LgcSecLrtlDfncStruFromChar(UINT8 * pDataAddr, LS_LgcSecLrtlDfncStruct* pLSLgcSecLtrlDfncStru)
{
	UINT8 * pData = pDataAddr;

	UINT16 i = 0u;

	UINT8 rtnvalue = 0u;

	/*TODO 读取逻辑区段侧防条件表  @liuchang*/
	if ((NULL != pDataAddr) && (NULL != pLSLgcSecLtrlDfncStru))
	{


		pLSLgcSecLtrlDfncStru->wLogSecId = dquCiShortFromChar(pData);

		pData += 2u;

		for (i = 0u; i < LOGIC_LTARL_DFNC_SWITCH_NUM; i++)
		{
			pLSLgcSecLtrlDfncStru->stLrtlDfncSwitch[i].wPointId= dquCiShortFromChar(pData);
			pData += 2U;
			pLSLgcSecLtrlDfncStru->stLrtlDfncSwitch[i].wPointSta = dquCiShortFromChar(pData);
 			pData += 2U;
			pLSLgcSecLtrlDfncStru->szProtectLockDir[i] = *pData;
			pData += 1U;

		}


		rtnvalue = 1u;
	}
	else
	{
		rtnvalue = 0u;
	}
	return rtnvalue;
}

/*********************************************
* 函数功能：从数据到声光报警器表转换
* 参数说明：pDataAddr数据地址，
*	        pLSSGBJStru 声光报警数据结构体
* 返回值：0，失败；1，成功
* 成都三线新需求：添加声光报警器——Modified by LQ 2023.11.13
*********************************************/
UINT8 LS_SGBJStruFromChar(UINT8* pDataAddr, LS_SGBJStruct* pLSSGBJStru)
{
	UINT8* pData = pDataAddr;
	UINT16 i = 0U;
	UINT16 wRelPhySecNum = 0U;
	UINT8 rtnvalue = 0U;

	if ((NULL != pDataAddr) && (NULL != pLSSGBJStru))
	{
		rtnvalue = 1U;

		pLSSGBJStru->wSGBJId = dquCiShortFromChar(pData);
		pData += 2U;

		pLSSGBJStru->wSGBJRelayId = dquCiShortFromChar(pData);
		pData += 2U;

		pLSSGBJStru->wSGBJRelayId_2 = dquCiShortFromChar(pData);
		pData += 2U;

		pLSSGBJStru->wSGBJRelPhySecNum = dquCiShortFromChar(pData);
		pData += 2U;

		wRelPhySecNum = pLSSGBJStru->wSGBJRelPhySecNum;

		if (SGBJ_RELATED_PHYSEC_SUM_MAX >= wRelPhySecNum)
		{
			for (i = 0U; i < wRelPhySecNum; i++)
			{
				pLSSGBJStru->szSGBJRelPhySecId[i] = dquCiShortFromChar(pData);
				pData += 2U;
			}
		}
		else
		{
			rtnvalue = 0U;  /*关联进路数量超限，初始化失败*/
		}
	}
	else
	{
		rtnvalue = 0U;
	}

	return rtnvalue;
}

/*********************************************
*函数功能：从数据到逻辑区段关联联络线设备检查条件数据结构体转换
*参数说明：pDataAddr数据地址，  logContactStr逻辑区段关联联络线设备检查条件数据结构体指针
*返回值：0，失败；1，成功
*********************************************/
UINT8 LS_ContactCfgDtStruFromChar(UINT8 * pDataAddr, LS_ContactLineStruct* logContactStr)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

	if ((NULL == pDataAddr) || (NULL == logContactStr))
	{
		rtnvalue = 0u;
	}
	else
	{
		rtnvalue = 1u;
		logContactStr->wId = dquCiShortFromChar(pData);
		pData += 2u;

		if (LOGIC_SECTION_SUM_MAX < dquCiShortFromChar(pData))
		{
			rtnvalue = 0u;
		}
		else
		{
			for (i = 0u; i < LOG_CONTACT_CONFIG_MAX_NUM; i++)
			{

				logContactStr->wPointId[i] = dquCiShortFromChar(pData);
				pData += 2u;
				logContactStr->wPointSta[i] = *pData;
				pData += 1u;
				logContactStr->wAxisSecId[i] = dquCiShortFromChar(pData);
				pData += 2u;
			}
		}
	}
	return rtnvalue;
}

/*********************************************
*函数功能：从数据到逻辑区段互相侵限条件表
*参数说明：
*		pDataAddr数据地址，
*		pLSLgcIntruSecStru 逻辑区段侵限区段及道岔数据结构体
*返回值：0，失败；1，成功
*创建  ：LC
*********************************************/
UINT8 LS_LgcSecInvEachStruFromChar(UINT8* pDataAddr, LS_EachLgcIntrudeStruct* pLSLgcInvEachStru)
{
	UINT8* pData = pDataAddr;

	UINT16 i = 0u;

	UINT8 rtnvalue = 0u;

	if ((NULL != pDataAddr) && (NULL != pLSLgcInvEachStru))
	{
		pLSLgcInvEachStru->wLogSecId1 = dquCiShortFromChar(pData);
		pData += 2u;

		pLSLgcInvEachStru->wLogSecId2 = dquCiShortFromChar(pData);
		pData += 2u;

		pLSLgcInvEachStru->wLogSec1_CheckDir = *(pData);
		pData += 1u;

		pLSLgcInvEachStru->wLogSec2_CheckDir = *(pData);
		pData += 1u;

		rtnvalue = 1u;
	}
	else
	{
		rtnvalue = 0u;
	}
	return rtnvalue;
}

/*********************************************
* 函数功能：从数据到转换轨折返信号机转换
* 参数说明：pDataAddr数据地址，
*	        pTransRouteZFSigStru 转换轨折返信号机id数据结构体
* 返回值：0，失败；1，成功
*创建  ：fan
*********************************************/
UINT8 LS_TransZFSigFromChar(UINT8* pDataAddr, LS_TransRouteZFSigStruct* pTransRouteZFSigStru)
{
	UINT8 * pData = pDataAddr;
	UINT16 i = 0u;
	UINT8 rtnvalue = 0u;

	if ((NULL == pDataAddr) || (NULL == pTransRouteZFSigStru))
	{
		rtnvalue = 0u;
	}
	else
	{
		pTransRouteZFSigStru->wRouteId = dquCiShortFromChar(pData);
		pData += 2u;

		pTransRouteZFSigStru->wTransRouteZFSigId = dquCiShortFromChar(pData);
		pData += 2u;

		rtnvalue = 1u;
	}
	return rtnvalue;
}
/*********************************************
*函数功能：从数据到风井进路检查表转换
*参数说明：
*		pDataAddr数据地址，
*		pAirShaftRouteStr 风井进路检查表数据结构体
*返回值：0，失败；1，成功
*创建  ：2026.03.04 yx 增加读取风井进路检查表
*********************************************/
UINT8 LS_AirShaftStruFromChar(UINT8* pDataAddr, LS_AirShaftStruct* pAirShaftRouteStr)
{
	UINT8* pData = pDataAddr;

	UINT8 i = 0u;

	UINT8 rtnvalue = 0u;

	if ((NULL != pDataAddr) && (NULL != pAirShaftRouteStr))
	{

		/*进路ID*/
		pAirShaftRouteStr->wRouteId = dquCiShortFromChar(pData);
		pData += 2u;
		if (AIR_SHAFT_SECTION_SUM_MAX >= *pData)
		{
			pAirShaftRouteStr->airShaftSecSum = *pData;
			/*风井区段数量*/
			pData += 1u;
			for (i = 0u; i < AIR_SHAFT_SECTION_SUM_MAX; i++)
			{
				/*区段ID*/
				pAirShaftRouteStr->wAirShaftSecId[i] = dquCiShortFromChar(pData);
				pData += 2u;
			}
			rtnvalue = 1u;
		}
		else
		{
			rtnvalue = 0u;
		}		
	}
	else
	{
		rtnvalue = 0u;
	}
	return rtnvalue;
}