#include "Service_Time.h"


uint8_t  Time_calibration ;
uint8_t  IOTimeCalEnable ;



/******************************************************************************
函数名：SERVICE_Time_FactiryReset
功  能：初始化時間狀態
参  数：无
返回值：无
*******************************************************************************
注  意：KL15On的時候調用
******************************************************************************/

void SERVICE_Time_KL15_Init(void)
{
    Time_calibration = 0u;
    IOTimeCalEnable = 0u;
}

void SERVICE_Time_WakeUp_Init(void)
{
    Time_calibration = 0u;
    IOTimeCalEnable = 0u;
}


void Received_18FEE69F_Calibration(void)
{
    if (Time_calibration <= 3u)/*86104-12*/
    {
        Time_calibration++;
    }
}

/******************************************************************************
SERVICE_Time_Calibration_Service
功  能：时间校准
参  数：无
返回值：无
*******************************************************************************
注  意：该服务函数唤醒后对时
******************************************************************************/
void SERVICE_Time_Calibration_Service(void)
{
    uint16_t  Year_FLAG = 0u;
    uint8_t   Month_FLAG = 0u;
    uint8_t   Date_FLAG = 0u;
    uint8_t   Hour_FLAG;
    uint8_t   Minute_FLAG;
    uint8_t   Second_FLAG;

    Year_FLAG = (uint16_t)(Get_ID_18FEE69F_Sig_TBOX_Year());
    Month_FLAG = (uint8_t)Get_ID_18FEE69F_Sig_TBOX_Month();
    Date_FLAG = (uint8_t)Get_ID_18FEE69F_Sig_TBOX_Day() >> 2;
    Hour_FLAG = (uint8_t)Get_ID_18FEE69F_Sig_TBOX_Hour();
    Minute_FLAG = (uint8_t)Get_ID_18FEE69F_Sig_TBOX_Minute();
    Second_FLAG = (uint8_t)Get_ID_18FEE69F_Sig_TBOX_Second() >> 2;

    if (IOTimeCalEnable == 0u) /*時間未同步過*/   /*86104-9*/ /*86104-12*/
    {
        /*86104*/   /*86104-12*/
        if ((Year_FLAG <= 0xFAu) && (Month_FLAG >= 1u) && (Month_FLAG <= 12u) && \
                (Date_FLAG >= 1u) && (Date_FLAG <= 31u) && (Hour_FLAG < 24u) && \
                (Minute_FLAG < 60u) && (Second_FLAG < 60u))
        {
            if (Time_calibration >= 3u)/*86104-12*/
            {
                /*時間同步完成，記錄同步狀態 IOTimeCalEnable=1代表已經同步過*/
                IOTimeCalEnable = 1u;
                /*時間顯示是完整的所以同步時間*/
                Year_FLAG   +=  1985u;/*86104-6*/

                /*80402-1*/
                RTE_RTC_Set_Secone(  Second_FLAG  );
                RTE_RTC_Set_Hour  (  Hour_FLAG  );
                RTE_RTC_Set_Minute(  Minute_FLAG   );
                RTE_RTC_Set_Date  (  Date_FLAG   );
                RTE_RTC_Set_Month (  Month_FLAG  );
                RTE_RTC_Set_Year  (  Year_FLAG );
                RTE_RTC_Confirm_Overwrite();
            }
        }
        else
        {
            Time_calibration = 0u;
        }
    }
}

/******************************************************************************
函数名：Get_RTC_Time_calibration
功  能: 获得时间校准状态 1为已经校准 0为未校准
******************************************************************************/
uint8_t Get_RTC_Time_calibration(void)
{
    return IOTimeCalEnable;
}

