#include "Sys_Scheduler_Lib.h"
#include "Application.h"
#include "Components.h"
#include "RTE.h"
#include "UDS_ISO14229_Server.h"
void Sys_Pseudo_Real_Time_Tasks(void)
{
    Power_Management_Service();
    DoCAN_Communication_Service();              
    UDS_Server_Application_Service();
    BU98R10_Update_Service();
    LED_Driver_Service();
    
}

void Sys_2ms_Tasks(void)
{
    Common_Input_Para();
    Can_Write_Fun(&CAN_CH0_CanMsgTxOp, 2000u);
    Sys_Status_Update_Service();
    Analog_Signal_Conv_Service();
    CanMSg_XMS_Analysis(&CAN_CH0_CanMsgOp,2u);

    // if (RTE_GPIO_Get_Level(VSPEED_TEN_OUT))
    // {
    //     RTE_GPIO_Config(VSPEED_TEN_OUT, RTE_GPIO_DIR_OUT|RTE_GPIO_LEVEL_LOW);
    // }
    // else
    // {
    //     RTE_GPIO_Config(VSPEED_TEN_OUT, RTE_GPIO_DIR_OUT|RTE_GPIO_LEVEL_HIGH);
    // }
}

void Sys_5ms_Tasks(void)
{
    Flash_Sync_Signal_Generation_Service();
}


void Sys_10ms_Tasks(void)
{
    Line_In_Debounce_Service(10u);
    Key_Service();
    Data_Mileage_Write_EEPROM();
    Can_BusOff_Recover(10u);
    Turn_Left_Right_Lamp();
    Fuel_R_Cal(10u);
    TYW_Check_Count();
    Data_TPMS_Processing_Service();
}

void Sys_20ms_Tasks(void)
{
    Key_Clear_Time();
    Key_Auto_Save();
    Data_Vehicle_Speed_Processing_Service();
    Data_Engine_Speed_Processing_Service();
    Data_Coolant_Temp_Processing_Service();
    
}

void Sys_50ms_Tasks(void)
{
    BU98R10_Update_Request();
    LED_Driver_Scan_Refresh();
    Telltales_Management();
    Gauge_Service();
    Key_Check_Service();
}

uint8_t u8LEDDriverCheckCount = 0U;
void Sys_100ms_Tasks(void)
{
    if((PageType != Page_Time_Hour)&&(PageType != Page_Time_Minute))
    {
        RTE_RTC_Get_CounterValue(&counter_val);
        counter_val.time.RTC_Hours = RTC_Bcd2ToByte(counter_val.time.RTC_Hours);
		counter_val.time.RTC_Minutes = RTC_Bcd2ToByte(counter_val.time.RTC_Minutes);
    }
    Fuel_Cal_Sevice(100u);
    BackLight_Process();
    Services_Mileage_Callback();
    Data_Voltage_Processing_Service();
	S3_ServerCNTT();
    //ECU_FaultCode_Processing_Service();
    
    if (u8LEDDriverCheckCount >= 10U)
    {
        u8LEDDriverCheckCount = 0U;
        LED_Driver_Work_Check();
        LED_Driver_Service_Immediate();//注意顺序1
        //ALS_Service();//注意顺序2
    }
    else
    {
        u8LEDDriverCheckCount++;
    }    
}


/**
 * @brief 50us中断服务 尽可能的减少中断使用
 * 
 */
void Sys_Exact_50us_Tasks(void)
{
    static uint32_t task_1ms = 0u;
    DoCAN_Timer_Update(50u);
    GenDelay_Tick();
    task_1ms++;
    if ( task_1ms >=20U )   
    {
        task_1ms =0U;
        eeprom_1ms_timeCount( );
    }
}