/**************************************************************************//**
  * \file     Tasks.c
  * \brief    Task list
  * \details
  * \author   Zhang Xuan
  * \version  V1.0.0
  * \date     07-Sep-2018
  * \par      History:
  *           V1.0.0 Initial release
  * \par      Copyright:
  *           (c) Heilongjiang TYW Electronics co., LTD
******************************************************************************/
#include "BAT32A239.h"
#include "common.h"
#include "Sys_Scheduler.h"
#include "Line_In.h"
#include "adc.h"
#include "Analog_Signals.h"
#include "MCU_Core_Protocol.h"
#include "PowerManagement.h"
#include "System_Monitor.h"
#include "Common_Interface.h"
#include "PowerManagement_user.h"
#include "Telltales_Lib.h"
#include "Sys_Tick.h"
#include "Fuel.h" 
#include "CoolantTemp.h"
#include "rtc.h" 
#include "Flash_synchronizer.h"
#include "eepromManage.h"
#include "Data_Gear.h"
#include "LightDetect.h"
#include "BGLInterface.h"
#include "Key.h"
#include "Menus.h"
#include "CAN_User.h"
#include "gpio.h"
#include "uds_includes.h"
#include "U2_uds_includes.h"
#include "CoolantTemp.h"
#include "BU98R10.h"
#include "Gauges.h" 
#include "Services_Mileage_User.h"
#include "can.h"
#include "IS31FL3236.h"
#include "IS31_IIC_Master.h"
#include "app_Telltales.h"


/*******************************************************************************
*                                                                              *
*   系统常规运行模式(SYS_MODE_OFF / SYS_MODE_ON / SYS_MODE_STANDBY )任务列表   *
*                                                                              *
*******************************************************************************/

/*==============================================================================
伪实时任�?
------------------------------------------------------------------------------*/

void Sys_Run_Mode_Pseudo_Real_Time_Tasks(void)
{
 
    if (CAN_Initflag == 0xeb)
    {
        Diagnosis_main();
        // Key_Status_Detect_Service();
        // IS31FL3236_Update();
        U2_Diagnosis_main();
        //    DoCAN_Communication_Service();
        //    UDS_Server_Application_Service();
    }
}
/*============================================================================*/



/*==============================================================================
2ms周期执行任务
------------------------------------------------------------------------------*/
void Sys_Run_Mode_2ms_Tasks(void)
{
        Analog_Signal_Conv_Real_Time_Run();
        Power_Management_Service();
		//UDS_KL15_init();
		//Diagno_Tick(2);
        //U2_Diagno_Tick(2);
        //CAN_TX_Tick();
		//MCU_Send_Service(2);
    	Sys_Status_Update_Service();
      	//Common_Input_Para();
    	//Gauges_Time_Xms_Count(2);
    	//UDS_10ms_Service();
		BU98R10_Update_Service();
}
/*============================================================================*/
/*==============================================================================
5ms周期执行任务
------------------------------------------------------------------------------*/
void Sys_Run_Mode_5ms_Tasks(void)
{

    CAN_RX_Tick();
	
}

/*==============================================================================
10ms周期执行任务
------------------------------------------------------------------------------*/
void Sys_Run_Mode_10ms_Tasks(void)
{
						
	Common_SetSelfcheckStart(1);
    Analog_Signal_Conv_Service();

    BackLightDamp(10u);
    
//    DisplayServices();
//    loc_Display_Service();
    Line_In_Debounce_Service();
    Telltales_Management();
    Can_BusOff_Fun(10u);
    Selfcheck_Display_Update_Service();
    Key_Status_Detect_Service();
    //Test();
    
//    Telltales_Left_Right_Management_Service();
//    Key_Service();
//    //CAN_BUSOFF_Recover();
//    /*车�?�处�?*/
//    SetGaugesPara(VehGauges, VehSpeedAmplification(Cal_Veh_Val()));
//    /*转�?�处�?*/
//    Common_Set_Act_E_Speed(Get_ID_CF00400_Sig_EngineSpeed() / 8);
//    SetGaugesPara(RevGauges, RevSpeedManage(Common_Get_Act_E_Speed()));

//    /*表头调度函数 added by yutian*/
//    UserGaugeSchedule();/*在主循环中调�?*/
//    /*end*/
//    Sound_Play_Service();
//    CD4051B_ReadSignal_Serviece();

//    Can_BusOff_Fun();

//    //for (i = 0; i < LED_Max ; i++)
//    //{
//    //    Telltales_DiagCtrl(i, 1u);
//    //}

        //if(Common_Get_IG_Sts() == COMMON_POWER_ON)
				

}
/*============================================================================*/


/*==============================================================================
20ms周期执行任务
------------------------------------------------------------------------------*/

void Sys_Run_Mode_20ms_Tasks(void)
{

    //Key_Status_Detect_Service();

    MenuStatusSwitchODO(Key_Get_Status(KEY_MODE));
    MenuStatusSwitchUnit(Key_Get_Status(KEY_SET));

	/*if(Common_Get_IG_Sts() == COMMON_POWER_ON)
	{
      if((Common_GetIgnOnTime() >= IGON_SelfcheckingTimer)&&(get_SEG_Check_Contrl() == 0))
			{
				//转�?�显�?
				SEG_LCD_Engine_Speed_Seg_Display( Common_Get_Disp_E_Speed());
      }
    }*/
    
	BU98R10_Update_Request();

	//转�?�表头走�?
	//Gauges_Management_Service();
    Diag_Req_Send(20);		
    IS31FL3236_Update();
 						
//    Coolant_Processing_Service();
//    Tacho_Processing_Service();
//    Speed_Processing_Service();

//    CD4051B_Debounce_Service();


}
/*============================================================================*/


/*==============================================================================
50ms周期执行任务
------------------------------------------------------------------------------*/
void Sys_Run_Mode_50ms_Tasks(void)
{

	
	
    Flash_Sync_Signal_Generation_Service();


    if(get_SEG_Check_Contrl() == 0)	CalcODO_50ms_Services();//20221117  TYW大计清零后,循环显示断码�?�? 停止大计/小计里程

//    Data_Time_Calibration();
//    Data_Service_Gear_Processing();
//    Speed_PPK_Processing();
//    TLC6C5912_Sync_Service();
//    Sound_Scheduling_Service();

    BGTask();


    CAN_LED_Check_50msTask();


    SetDtcFault();

//    Data_Group_Processing_Service();


}
/*============================================================================*/


/*==============================================================================
100ms周期执行任务
------------------------------------------------------------------------------*/
uint32_t tempodo = 0;
uint32_t tempTripA = 0;
uint32_t tempTripB = 0;
void Sys_Run_Mode_100ms_Tasks_Group1(void)
{

//    static uint16_t CounterBak;
//    uint16_t delta;
//    if(SYS_ROLLING_COUNTER_1ms >= CounterBak){
//        delta = SYS_ROLLING_COUNTER_1ms - CounterBak;
//    }
//    else{
//        delta = 0xffff - CounterBak + SYS_ROLLING_COUNTER_1ms + 1;
//    }
//    CounterBak = SYS_ROLLING_COUNTER_1ms;  

	
    Power_Management_Service_user();

}
void Sys_Run_Mode_100ms_Tasks_Group2(void)
{


    /*燃油计算*/
    Fuel_Cal_Sevice(100u);

}
void Sys_Run_Mode_100ms_Tasks_Group3(void)
{

    /*水温计算*/
    CoolantTemp_Cal_Sevice(100u);

}
void Sys_Run_Mode_100ms_Tasks_Group4(void)
{
    

    /*获取RTC时间*/
    RTC_Service();
    

    /*大计小计计算*/
    CalcODO_100ms_Services();
	


}
void Sys_Run_Mode_100ms_Tasks_Group5(void)
{
    /*挡位�?�?*/
    //Data_Service_Gear_Processing();

}
void Sys_Run_Mode_100ms_Tasks_Group6(void)
{

    /*环境光线亮度读取*/
 //   Light_Detect_Serivce();
 
    /*LCD显示服务*/
    Drive_Info_Display_Update_Service();

}
void Sys_Run_Mode_100ms_Tasks_Group7(void)
{

    //MenuManage();

    /*联电和德尔福协议自动识别*/
    //CAN_Check_Liandian();
    ReqSilentTimer100mSService();

    /*MIL灯超时计�?*/
    Can_User_Time_Service(100);

 }
void Sys_Run_Mode_100ms_Tasks_Group8(void)
{
	

    /*水温信号超时计算*/
    CoolantTemp_Signal_Time_Service(100);
    bsp_CAN_MaskCheck();
		
	
}
void Sys_Run_Mode_100ms_Tasks_Group9(void)
{	
		/*�?测断码屏数据是否异常*/
		//if(Common_GetIgnOnTime() > 1000)
		//checkSegTftState();

   
    /* 临时测试程序 �?�? */
    // tempodo = Data_ODO_Read( );
    // tempTripA = Data_Read_Trip(EM_TRIP_A);
    // tempTripB = Data_Read_Trip(EM_TRIP_B);
    /*  临时测试程序 结束 */

}
void Sys_Run_Mode_100ms_Tasks_Group10(void)
{

//    if(tempodo<123u) 
//        Data_ODO_Modify ( 123u );    
    
//			PORT->P7 ^= (1<<1); 	// Toggle P71
//		  PORT->P7 ^= (1<<2); 	// Toggle P72              
//    RTE_RTC_Services_100Ms_Cbk();
//    Data_ODO_Processing();
//    Data_Trip_Processing();
//    //Data_Avg_Speed_Processing();
//    Data_TPMS_Value_Processing();
//    Data_Ambient_Temperature_Processing();

//    //Display_Schedule_Service();/*显示函数入口*/

//    if ( Common_get_MotorModeStaFlag() == 0u)
//    {
//        if ((bsp_GetMotorState(0) == Normal) && (bsp_GetMotorState(1) == Normal))
//        {
//            bsp_SetMotorMode(0, MinReset);
//            bsp_SetMotorMode(1, MinReset);
//            Conmmon_Set_MotorModeStaFlag (1u);
//        }
//    }
//    else if ( Common_get_MotorModeStaFlag() == 1u)
//    {
//        if ((bsp_GetMotorState(0) == Normal) && (bsp_GetMotorState(1) == Normal))
//        {
//            bsp_SetMotorMode(0, MaxStep);
//            bsp_SetMotorMode(1, MaxStep);
//            Conmmon_Set_MotorModeStaFlag(2u);
//        }
//    }
//    else if (Common_get_MotorModeStaFlag() == 2u)
//    {
//        if ((bsp_GetMotorState(0) == MaxStepKeep) && (bsp_GetMotorState(1) == MaxStepKeep))
//        {
//            bsp_SetMotorMode(0, MinStep);
//            bsp_SetMotorMode(1, MinStep);
//            Conmmon_Set_MotorModeStaFlag(3u);
//        }
//    }
//    else
//    {
//        Conmmon_Set_MotorModeStaFlag(4u);
//        /*转�?�电机目标步赋�??*/
//        if (bsp_GetMotorState(0) == Normal)
//        {
//            MeterPostion[0].destPosition = GetGaugesCurrentPos(RevGauges);
//        }

//        /*车�?�电机目标步赋�??*/
//        if (bsp_GetMotorState(1) == Normal)
//        {
//            MeterPostion[1].destPosition = GetGaugesCurrentPos(VehGauges);
//        }
//    }

//    //Menu_Display_Service();
//    //External_Influence_ENERGY_RECOVERY_LEVEL_Select();
//    LongTimeNoKey_Operation();
//    //Menu_Get_Battery_Sts_Exist();
//    //BL_Management_service();
//    Popups_Management_Service();
//    Popup_Scheduling_Service();
//    /*综合油�?�信�?*/
//    Data_FuelCounsComprehensive();
//    /*小计油�?�信�?*/
//    Data_FuelCounsumpTrip();
//    /*本次油�?�信�?*/
//    Data_FuelCounsumpThisTime();
//    /*加油后行车信�?*/
//    Data_Info_Last_Refueling();

//    /*当前油�??*/
//    Fuel_CurrentFuelEco_Data();
//    /*综合油�??*/
//    Fuel_ComprehensiveFuelEco_Data();
//    /*综合气�??*/
//    Gas_ComprehensiveGasEco_Data();
//    /*机油压力*/
//    Oil_EngineOilPressure_Data();
}
/*============================================================================*/

/*******************************************************************************
*                                                                              *
*                     系统休眠模式(SYS_MODE_SLEEP)任务列表                     *
*                                                                              *
*******************************************************************************/
/*==============================================================================
休眠模式下执行的后台任务
------------------------------------------------------------------------------*/
void Sys_Sleep_Mode_Tasks(void)
{

}
/*============================================================================*/

/*******************************************************************************
*                                                                              *
*                           精确�?50us计时任务列表                             *
*                                                                              *
*******************************************************************************/
/*==============================================================================
精确�?50us计时任务 禁止添加修改列表中的任务
------------------------------------------------------------------------------*/
void Sys_Exact_50us_Tasks(void)
{
   
}
/*============================================================================*/

/*******************************************************************************
*                                                                              *
*                           精确�?100ms计时任务列表                            *
*                                                                              *
*******************************************************************************/
/*==============================================================================
精确�?100ms计时任务 禁止添加修改列表中的任务
------------------------------------------------------------------------------*/
void Sys_Exact_100ms_Tasks(void)
{
//    Service_OFF_Timing_Process();
//    PORT_ClrBit(CAN0_STB);


    /*不休眠的计时*/
}
/*============================================================================*/


void APP_Startup_Init (uint8_t startMode)
{
//    Power_Management_Init(startMode);
}