/********************************************************
*                                                                                                            
* 文 件 名： MainAPP.c   
* 版权说明： 北京交控科技有限公司 
* 创建时间： 2012-03-26
* 作    者： 联锁组
* 功能描述： 联锁应用主程序
* 修改记录：   
*
********************************************************/ 

#include "MainApp.h"
#include "../Deployment/DeploymentExtern.h"


/*
* 功能描述： 联锁应用初始化函数
* 参数说明： void
* 返回值  ： 0: 初始化失败
*			 1: 初始化成功      
*/
UINT8 CiAppInitial(void)
{
	UINT8 retVal = CI_SUCCESS;
#ifdef LOGPRINT

#endif/*打印标志结束*/

    /*初始化联锁数据*/
    if (InitialProcess() != CI_SUCCESS)
    {
        retVal = CI_ERROR;			
	}

	return retVal;
}


/*
* 功能描述： 主处理函数
* 参数说明： void
* 返回值  ： void      
*/
UINT8 MainProcess(void)
{
	UINT8 retVal = CI_SUCCESS;
	UINT8 localCiType = GetLocalCiType();
	UINT16* pTiocFsVersion = NULL;
	unsigned long long cost[20] = {0U};

    #ifdef LOGPRINT

    /*windows LABVIEW调试平台定义变量*/
        

    /*2OO2平台打印版本号*/
    #ifdef PLATFORM_2OO2
        
    /*打印运行模式*/
    #ifdef SCADE_MODE
    debug_infor_printf((const)"-----------------I am SCADE MODE V477------------------\n");
    #else
    debug_infor_printf((const)"-----------------I am C MODE V1035------------------\n");
    #endif

    
    /*打印版本号*/
	/*子系统版本号:子系统版本号.回归次数编号*/
	debug_infor_printf((const)"\nSUBCI_CID_VERSION:V(%d.%d.%d).%d\n",VER_MAIN_SUBCI_CI_CID,VER_SUB_SUBCI_CI_CID,VER_BRUNCH_CI_CID,VER_RETURN_SUBCI_CI_CID);

	/*软件内部版本号:产品编号.模块编号.主版本号.子版本号*/
	debug_infor_printf((const)"SOFTWARE_INSIDE_VERSION:%d.%d.%d.%d\n",VER_SOFT_PRODUCT,VER_SOFT_MODUAL_APP,VER_SOFT_MIANVERSION,VER_SOFT_SUBVERSION);

	/*集成版本号:项目编号.产品编号.可执行编号.集成次数*/
	debug_infor_printf((const)"SOFTWARE_INTEGRATION_VERSION:%d.%d.%d.%d\n",VER_INTE_PROJECT,VER_INTE_PRODUCT,VER_INTE_EXE,VER_INTE_TIME);
   
	pTiocFsVersion = GetTiocFsVersion();/*不会返回NULL*/
	/*数据版本号*/
	debug_infor_printf((const)"FS_VERSION:%d.%d.%d.%d\n", pTiocFsVersion[0], pTiocFsVersion[1], pTiocFsVersion[2], pTiocFsVersion[3]);
	
    #endif/*2OO2平台标志结束*/

    /*打印周期号*/
	debug_infor_printf((const)"\n\nSystemCycleNum=%d\n", Get2oo2CurCycleNum());/*2oo2平台打印系统周期号*/
    if (CI_START_LOCK_YES == GetStartLockFlag())
    {/*上电锁闭 打印 上电锁闭状态*/

    /*2OO2平台打印*/
    #ifdef PLATFORM_2OO2

        debug_infor_printf((const)"\n\n StartLock %d\n", Get2oo2CurCycleNum());/*2oo2平台打印系统周期号*/

    #endif/*2OO2平台标志结束*/
    }
	else
	{
		/*2OO2平台打印*/
#ifdef PLATFORM_2OO2

		debug_infor_printf((const)"\n\nCiCiConfirm:%d  CurCycle:%d  %d\n",GetCiCiRelayInterfConfirmFlag(), Get2oo2CurCycleNum());/*打印继电接口确认标志*/

#endif/*2OO2平台标志结束*/
	}

    #endif/*打印标志结束*/

	cost[0] = MSCP_GetTick();
	/*解析输入数据*/
	ParseInputData();
	cost[1] = MSCP_GetTick();	
	/*处理输入数据*/
	InputDataProcess();

	cost[2] = MSCP_GetTick();
	/*退出运营处理*/
	(void)APP_API_ExitOperation();


	/*联锁逻辑处理*/
	InterlockLogicMainProc();
#if 0
	if ((localCiType == CI_TYPE_ZX) || (localCiType == CI_TYPE_SCX))
	{
		/*正线处理*/
		/*联锁逻辑处理*/
		InterlockLogicMainProc();
	}
	else
	{
		/*车辆段处理*/
		/*联锁逻辑处理*/
		TradInterlockLogicMainProc();
	}
#endif
    
	cost[3] = MSCP_GetTick();
	/*处理输出数据*/
	OutputDataProcess();
	cost[4] = MSCP_GetTick();
	/*组包输出数据*/
	PackOutputData();

	cost[5] = MSCP_GetTick();
	/*清除上周期故障码*/
	ClearErrorData();

	cost[6] = MSCP_GetTick();
	debug_infor_printf((const)"\n Parse :%dms  InputData:%dms MainProcess:%dms Output:%dms PackOut:%dms SendLog:%dms  \n", (cost[1] - cost[0]) / 1000, (cost[2] - cost[1]) / 1000, (cost[3] - cost[2]) / 1000, (cost[4] - cost[3]) / 1000, (cost[5] - cost[4]) / 1000, (cost[6] - cost[5]) / 1000);

	/*向维护机发送日志打印*/
	SendOut_LogBuff();
	if (CI_OVER_YES == GetPlatOverFlag())
	{
		retVal = CI_ERROR;

	}
	else
	{
	}

	return retVal;
}
