#define GLOBALS_GUI_TXT
#define GLOBALS_VARIABLE
#include "defines.h"
#include "g_includes.h"
#include "protocol_class.h"
#include "APP_Service.h"
#include "UDS_def.h"
#include "UDS_CFG.h"
#include "TP_Layer.h"
#include "app_ServiceProc.h"
#include "dtc_handle.h"
#include "JAC.h"
#include "User_def.h"

volatile               _BootReg                g_bootReg;

//-- JH-JL-N721-���� --//
void main(void) 
{
	IVBR = 0xFB;
	bsp_Sys_Init();
	Api_MeterLightOFFCtl();
	DiagnosisInit_main();
	bsp_Delay(100000);
	EnableInterrupts;
	App_DTC_EEpromInit();
	App_StarUpInfo();
	bsp_TFT_Init();
	Gui_MotorFirstReset();
	Init2EData();
	App_CalFuelInit();
	//Reset_Device();    
	//Power_Up();
	App_StarUpInfo1();

	for(;;)
	{
		_FEED_COP();
		T2MS_Task();
		Api_GetAdcResult();
		App_SendCanMsg();
		if(g_curkeyinput == KeyON)
		{
			App_FuelManage();
			switch(g_runStep)
			{
				case SYS_INIT_TASK:
					bsp_Sys_ON();
					if(g_validFlag.Bits.BD8379Init)
					{
						DB8379_Init();
					}
					g_validFlag.Bits.BD8379Init=Disable;

					DiagnosisInit_main();
					if(g_30LOGOFlag==0)
					{
						bsp_TFT_Init();
					}
					App_Paramer_Init();
					App_Load_Data();

					if((g_Lastkeyinput == KeyLow) || (g_Lastkeyinput == KeyHi))
					{
						Gui_MotorFirstReset();
					}
					else
					{
						Gui_MotorStarReset();
					}
					g_Lastkeyinput = g_curkeyinput;
					Api_ReadAccKm();
					g_runStep = CAN_TASK;
					break;
				case CAN_TASK:
					CheckEcmMulDTC();
					CheckOSC();
					g_runStep = CALCULATE_TASK;
					break;
				case SCI_TASK:
					g_runStep = CALCULATE_TASK;
					break;
				case CALCULATE_TASK:
					App_CalBorad();
					App_CalFre((_FreType *)&VehFre);
					Gui_ButtonProc((_Button *)&G_Button);
					g_runStep = STORE_TASK;
					break;
				case STORE_TASK:
					App_CalFuelEconomy();
					//App_CalAccKm((_MeterPos *)&g_vehMeter);
					App_CalAccKm();
					g_runStep = GUI_TASK;
					break;
				case GUI_TASK:
					Gui_BeepPrioProc((_Beep *)g_Beep);
					if(g_ReadState == RunErr)
					{
						Api_ReadAccKm();
					}
					Gui_LCD_Display();
					g_runStep = CAN_TASK;
					break;
				default:
					g_runStep = SYS_INIT_TASK;
			}
		}
		App_ChcekSleep();
		PowerManage();       
		T20MS_Task();
		Gui_LightProc();
		Diagnosis_main();
		App_CheckCanDrop();
		App_StoreDTC_handle(); 
		if(g_curkeyinput == KeyOFF)
		{
			SetPowerSt(0);
			g_Init.InitLogoTime = null;
			g_curLightFlag = 0;
			if(g_sysFlag.Bits.SysOffEn)
			{
				Disable_signal(g_sysFlag.Bits.SysOffEn);
				App_State_OFF();
				Gui_MotorOffReset();
			}
			Gui_BeepPrioProc((_Beep *)g_Beep);
			if(g_sysFlag.Bits.AccSaveState)
			{
				Disable_signal(g_sysFlag.Bits.AccSaveState);
				Disable_signal(g_sysFlag.Bits.WakeUpState);
				Api_WriteAccReg();
				SaveDtcInfo.EE_WriteDtcSel = StoreDTC_EE;
			}
			if(WriteleFlag2E == Enable)
			{
				App_2E_Write_handle();
				Init2EData();
				App_CalFuelInit();
				WriteleFlag2E = Disable;
			}
			g_runStep = SYS_INIT_TASK;
			App_SleepProc();
		}
		Api_ClockGenerate();
	}
}