#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();
    

    // 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();
    CanMSg_XMS_Analysis(&CAN_CH0_CanMsgOp,5u);
}


void Sys_10ms_Tasks(void)
{    
	Line_In_Debounce_Service(10u);
    if(Common_GetIgnOnTime() >= 3030)
    {
        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();
    Protocol_Service();
    Protocol_Send_Service();  
    
    //FaultCode_Service(10u);
    FaultCode_Servers();
    }    

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();
    
    
    BU98R10_Update_Request();
}

void Sys_50ms_Tasks(void)
{
   
    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);
    }
    Service_Interval_Processing();
    Fuel_Cal_Sevice(100u);
    BackLight_Process();
    Services_Mileage_Callback();
    Data_Voltage_Processing_Service();
	S3_ServerCNTT();    
    Send_UUID_To_Esp32();
    
    if (u8LEDDriverCheckCount >= 10U)
    {
        u8LEDDriverCheckCount = 0U;
        LED_Driver_Work_Check();
        //LED_Driver_Service_Immediate();//注意顺序1
        //ALS_Service();//注意顺序2
    }
    else
    {
        u8LEDDriverCheckCount++;
    }   

    Clear_Navigation_St(); 
    Protocol_ESP32_Active_Service();
    if(Common_GetIgnOffTime() >= 1000)
    {
        CAN_TX_SetEnable(&CAN_CH0_CanMsgTxOp, CAN_N_TX_Disable);
    }
    
}


/**
 * @brief 50us中断服务 尽可能的减少中断使用
 * 
 */

void Sys_Exact_50us_Tasks(void)
{
    static uint32_t task_1ms = 0u;
    static uint32_t task_100ms = 0u;
    Can_Write_Fun(&CAN_CH0_CanMsgTxOp, 50u);
        DoCAN_Timer_Update(50u);
    GenDelay_Tick();
    task_100ms++;
    if(task_100ms >= 1996)
    {
                task_100ms = 0u;
        if(Get_MileageInit_Status() == 0X5AA53AA3UL)
        {
            Data_Mileage_ISR();
        }

    }
    task_1ms++;
    if ( task_1ms >=20U )   
    {
        task_1ms =0U;
        eeprom_1ms_timeCount( );
    }
    
}