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

void Sys_5ms_Tasks(void)
{
    Flash_Sync_Signal_Generation_Service();
}

void Sys_10ms_Tasks(void)
{
    Line_In_Debounce_Service(10u);
    Can_BusOff_Recover(10u);
    Data_CumulativeWorkHours_EEPROM_Write();
    TYW_Check_Count();
}

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

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

void Sys_75ms_Tasks(void)
{
    if (checkself_seg_Flag == 1)
    {
        Checkself_SEG_Display();
        // if (Checkself_SEG_step_count < 20)
        // {
        //     Checkself_SEG_step_count++;
        // }
        // else
        // {
        //     Checkself_SEG_step_count = 20;
        // }

        // if (Checkself_SEG_step_count < 10)
        // {
        //     Checkself_SEG_step++;
        // }
        // else
        // {
        //     if (Checkself_SEG_step == 0)
        //     {
        //         Checkself_SEG_step = 0;
        //         SEG_SET_EleDial_2SOC(1, 0);
        //         SEG_SET_EleDial_1SOC(1, 0);
        //     }
        //     else
        //     {
        //         Checkself_SEG_step--;
        //     }
        // }
    }
}

uint8_t u8LEDDriverCheckCount = 0U;
void Sys_100ms_Tasks(void)
{

    BackLight_Process();
    BackLight_Clock_All_Process();
    Interact_Light_Process();
    S3_ServerCNTT();

    if (u8LEDDriverCheckCount >= 10U)
    {
        u8LEDDriverCheckCount = 0U;
        LED_Driver_Work_Check();
        LED_Driver_Service_Immediate(); // 注意顺序1
    }
    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();
    }
}
