#include "Application.h"
#include "Data_TPMS\Data_TPMS.h"

_TPMS_Display TPMS;
uint32_t LearnTime_Count = 0;
uint32_t LearnTime_Count1 = 0;
void Data_TPMS_KL30_Init ( void )
{
    uint8_t TPMS_L[2] = {0,0};
    Data_User_EEPROM_Read(EM_MenuData_TPMS_LEARN, (uint32_t*)TPMS_L, 1u);
    MenuData.TPMS_Front_Learn = TPMS_L[0];
    MenuData.TPMS_Rear_Learn  = TPMS_L[1];
    //MenuData.TPMS_Front_FirstLearn_Flag = TPMS_L[2];
    //MenuData.TPMS_Rear_FirstLearn_Flag  = TPMS_L[3];
    TPMS.Front_Press_Value = 0;
    TPMS.Rear_Press_Value  = 0;

    TPMS.Front_TPMS_Valid  = 0;
    TPMS.Rear_TPMS_Valid   = 0;
    TPMS.TPMS_Warning      = 0;
    //TPMS.TPMS_Unit         = Get_Dis_Tpms_Unit();
    TPMS.TPMS_Front_Learn  = MenuData.TPMS_Front_Learn;
    TPMS.TPMS_Rear_Learn   = MenuData.TPMS_Rear_Learn;
    TPMS.TPMS_Front_FirstLearn_Flag  = MenuData.TPMS_Front_FirstLearn_Flag;
    TPMS.TPMS_Rear_FirstLearn_Flag   = MenuData.TPMS_Rear_FirstLearn_Flag;

    TPMS.TPMS_LOST = 0;
    LearnTime_Count = 6001;
    LearnTime_Count1 = 6001;
}
void Data_TPMS_KL15_WAKE_UP_Init ( void )
{
    uint8_t TPMS_L[2] = {0,0};
    Data_User_EEPROM_Read(EM_MenuData_TPMS_LEARN, (uint32_t*)TPMS_L, 1);
    MenuData.TPMS_Front_Learn = TPMS_L[0];
    MenuData.TPMS_Rear_Learn  = TPMS_L[1];
    //MenuData.TPMS_Front_FirstLearn_Flag = TPMS_L[2];
    //MenuData.TPMS_Rear_FirstLearn_Flag  = TPMS_L[3];
    TPMS.TPMS_Front_Learn     = MenuData.TPMS_Front_Learn;
    TPMS.TPMS_Rear_Learn      = MenuData.TPMS_Rear_Learn;
    TPMS.TPMS_Front_FirstLearn_Flag  = MenuData.TPMS_Front_FirstLearn_Flag;
    TPMS.TPMS_Rear_FirstLearn_Flag   = MenuData.TPMS_Rear_FirstLearn_Flag;

    TPMS.TPMS_LOST = 0;
    LearnTime_Count = 6001;
    LearnTime_Count1 = 6001;
}

void Data_TPMS_Processing_Service ( void )
{
    uint16_t Front_TPMS = 0;
    uint16_t Rear_TPMS  = 0;
    uint8_t  TPMS_L[2] = {0,0};
    
    if(CAN_MSG_Status(&CAN_CH0_CanMsgOp, CAN_CH0_ID_CAN_0x341_Msg_Count) != CAN_SIG_LOST) 
    {
        TPMS.TPMS_Front_Learn = Get_CAN_CH0_ID_341_Sig_Front_LearningStatus();
        TPMS.TPMS_Rear_Learn = Get_CAN_CH0_ID_341_Sig_Rear_LearningStatus();
        TPMS.TPMS_LOST = 1;
    }
    else
    {
        TPMS.TPMS_Front_Learn = MenuData.TPMS_Front_Learn;
        TPMS.TPMS_Rear_Learn = MenuData.TPMS_Rear_Learn;
        TPMS.TPMS_LOST = 0;
    }
       
    
    if(TPMS.TPMS_Front_Learn == 0x0)
    {        
        //if(LearnTime_Count <= 6000)
        //{
        //    LearnTime_Count++;
            TPMS.TPMS_Front_Learn = Unstudied;
            LearnTime_Count = 0;
        //}
        //else
        //{
        //    if(TPMS.TPMS_Front_Timeclean == 1)
        //    {
        //        LearnTime_Count = 0;
        //    }
        //    TPMS.TPMS_Front_Timeclean = 0;  
        //    if ((MenuData.TPMS_Front_Learn != 0x2) && (MenuData.TPMS_Front_Learn != 0x3) ) 
        //    {
        //        if(CAN_MSG_Status(&CAN_CH0_CanMsgOp, CAN_CH0_ID_CAN_0x341_Msg_Count) != CAN_SIG_LOST) 
        //        {
        //            TPMS.TPMS_Front_Learn = LearningFailure;
        //        }
        //        else
        //        {
        //            TPMS.TPMS_Front_Learn = MenuData.TPMS_Front_Learn;
        //        }
        //        
        //    }
        //    else
        //    {
        //        TPMS.TPMS_Front_Learn = MenuData.TPMS_Front_Learn;
        //    }
        //}
    }
    else if(TPMS.TPMS_Front_Learn == 0x1)
    { 
        //if(TPMS.TPMS_Front_Timeclean == 0)
        //{
        //    LearnTime_Count = 0;
        //}
        //TPMS.TPMS_Front_Timeclean = 1;        
        if(LearnTime_Count <= 6000)
        {
            LearnTime_Count++;
            TPMS.TPMS_Front_Learn = Learning;
        }
        else
        {
            if ((MenuData.TPMS_Front_Learn != 0x2) && (MenuData.TPMS_Front_Learn != 0x3) ) 
            {
                if(CAN_MSG_Status(&CAN_CH0_CanMsgOp, CAN_CH0_ID_CAN_0x341_Msg_Count) != CAN_SIG_LOST) 
                {
                    TPMS.TPMS_Front_Learn = LearningFailure;
                }
                else
                {
                    TPMS.TPMS_Front_Learn = MenuData.TPMS_Front_Learn;
                }
            }
            else
            {
                TPMS.TPMS_Front_Learn = MenuData.TPMS_Front_Learn;
            }
        }
    }
    else if (TPMS.TPMS_Front_Learn == 0x2)
    {
        LearnTime_Count = 0;
        if((Get_CAN_CH0_ID_373_Sig_Front_id() != 0) && (Get_CAN_CH0_ID_373_Sig_Front_id() != 0xFFFFFFFF))
        {
            TPMS.TPMS_Front_Learn = LearningCompletion;
        }
        else
        {
            ;
        }
        
    }
    else if (TPMS.TPMS_Front_Learn == 0x3)
    {
        LearnTime_Count = 0;
        TPMS.TPMS_Front_Learn = LearningFailure;
    }
    else
    {
        LearnTime_Count = 0;
        TPMS.TPMS_Front_Learn = MenuData.TPMS_Front_Learn;
    }

    if(TPMS.TPMS_Rear_Learn == 0x0)
    {        
        //if(LearnTime_Count1 <= 6000)
        //{
            LearnTime_Count1 = 0;
            TPMS.TPMS_Rear_Learn = Unstudied;
        //}
        //else
        //{
        //    if(TPMS.TPMS_Rear_Timeclean == 1)
        //    {
        //        LearnTime_Count1 = 0;
        //    }
        //    TPMS.TPMS_Rear_Timeclean = 0; 
        //    if ((MenuData.TPMS_Rear_Learn != 0x2) && (MenuData.TPMS_Rear_Learn != 0x3) ) 
        //    {
        //        if(CAN_MSG_Status(&CAN_CH0_CanMsgOp, CAN_CH0_ID_CAN_0x341_Msg_Count) != CAN_SIG_LOST) 
        //        {
        //            TPMS.TPMS_Rear_Learn = LearningFailure;
        //        }
        //        else
        //        {
        //            TPMS.TPMS_Rear_Learn = MenuData.TPMS_Rear_Learn;
        //        }
        //    }
        //    else
        //    {
        //        TPMS.TPMS_Rear_Learn = MenuData.TPMS_Rear_Learn;
        //    }
        //}
    }
    else if(TPMS.TPMS_Rear_Learn == 0x1)
    {        
        if(LearnTime_Count1 <= 6000)
        {
            LearnTime_Count1++;
            TPMS.TPMS_Rear_Learn = Learning;
        }
        else
        {
            if(TPMS.TPMS_Rear_Timeclean == 0)
            {
                LearnTime_Count1 = 0;
            }
            TPMS.TPMS_Rear_Timeclean = 1; 
            if ((MenuData.TPMS_Rear_Learn != 0x2) && (MenuData.TPMS_Rear_Learn != 0x3) )
            {
                if(CAN_MSG_Status(&CAN_CH0_CanMsgOp, CAN_CH0_ID_CAN_0x341_Msg_Count) != CAN_SIG_LOST) 
                {
                    TPMS.TPMS_Rear_Learn = LearningFailure;
                }
                else
                {
                    TPMS.TPMS_Rear_Learn = MenuData.TPMS_Rear_Learn;
                }
            }
            else
            {
                TPMS.TPMS_Rear_Learn = MenuData.TPMS_Rear_Learn;
            }
        }
    }
    else if (TPMS.TPMS_Rear_Learn == 0x2)
    {
        LearnTime_Count1 = 0;
        if((Get_CAN_CH0_ID_373_Sig_Rear_id() != 0) && (Get_CAN_CH0_ID_373_Sig_Rear_id() != 0xFFFFFFFF))
        {
            TPMS.TPMS_Rear_Learn = LearningCompletion;
        }
        else
        {
            ;
        }
        
    }
    else if (TPMS.TPMS_Rear_Learn == 0x3)
    {
        LearnTime_Count1 = 0;
        TPMS.TPMS_Rear_Learn = LearningFailure;
    }
    else
    {
        LearnTime_Count1 = 0;
        TPMS.TPMS_Rear_Learn = MenuData.TPMS_Front_Learn;
    }
    

    if((TPMS.TPMS_Front_Learn != MenuData.TPMS_Front_Learn) || (TPMS.TPMS_Rear_Learn != MenuData.TPMS_Rear_Learn))
    {
        if(TPMS.TPMS_Front_Learn != MenuData.TPMS_Front_Learn)
        {
            TPMS.TPMS_Front_FirstLearn_Flag = 1;
        }
        if(TPMS.TPMS_Rear_Learn != MenuData.TPMS_Rear_Learn)
        {
            TPMS.TPMS_Rear_FirstLearn_Flag = 1;
        }
         
        if((TPMS.TPMS_Front_Learn == 0x2) || (TPMS.TPMS_Front_Learn == 0x3))
        {
            MenuData.TPMS_Front_Learn = TPMS.TPMS_Front_Learn;
        }
        if((TPMS.TPMS_Rear_Learn == 0x2) || (TPMS.TPMS_Rear_Learn == 0x3))
        {
            MenuData.TPMS_Rear_Learn  = TPMS.TPMS_Rear_Learn;
        }
        if(((TPMS.TPMS_Front_Learn == 0x2) || (TPMS.TPMS_Front_Learn == 0x3)) && (TPMS.TPMS_Front_Learn != MenuData.TPMS_Front_Learn))
        {
            TPMS_L[0] = MenuData.TPMS_Front_Learn;
            TPMS_L[1] = MenuData.TPMS_Rear_Learn;            
            Data_User_EEPROM_Write(EM_MenuData_TPMS_LEARN, (uint32_t*)TPMS_L, 1u); 
            
        }
        if( ((TPMS.TPMS_Rear_Learn == 0x2) || (TPMS.TPMS_Rear_Learn == 0x3)) && (TPMS.TPMS_Rear_Learn != MenuData.TPMS_Rear_Learn))
        {
            TPMS_L[0] = MenuData.TPMS_Front_Learn;
            TPMS_L[1] = MenuData.TPMS_Rear_Learn;            
            Data_User_EEPROM_Write(EM_MenuData_TPMS_LEARN, (uint32_t*)TPMS_L, 1u); 
            
        }
        
    }

    //TPMS.TPMS_Unit      = Get_Dis_Tpms_Unit();
    Front_TPMS          = Get_CAN_CH0_ID_341_Sig_Front_Pressure();
    Rear_TPMS           = Get_CAN_CH0_ID_341_Sig_Rear_Pressure();

    if ( Common_Get_IG_Sts() == COMMON_POWER_ON )
    {
        if(CAN_MSG_Status(&CAN_CH0_CanMsgOp, CAN_CH0_ID_CAN_0x341_Msg_Count) == CAN_SIG_LOST)
        {
            TPMS.Front_TPMS_Valid  = 0;  //信号掉线,显示--
            TPMS.Rear_TPMS_Valid   = 0;  //信号掉线,显示--
            TPMS.Front_Press_Value = 0;
            TPMS.Rear_Press_Value  = 0;
            TPMS.TPMS_Warning      = 0;  //白灯
        }
        else
        {            
            if((Front_TPMS == 0xFF) || (Rear_TPMS == 0xFF))
            {
                
                if((Front_TPMS == 0xFF) && (Rear_TPMS != 0xFF))
                {
                    TPMS.Front_TPMS_Valid  = 0;
                    TPMS.Rear_TPMS_Valid   = 1;
                    TPMS.Front_Press_Value = 990;
                    TPMS.Rear_Press_Value  = Rear_TPMS * 2750;
                    TPMS.Rear_Press_Value  /= 102 ;
                    if(TPMS.Rear_Press_Value > 9900)
                    {
                        TPMS.Rear_Press_Value = 9900;
                    }
                    if(((TPMS.Rear_Press_Value + 50)< 1700) || ((TPMS.Rear_Press_Value + 50) > 2500))
                    {
                        TPMS.TPMS_Warning = 1;
                    }
                    else
                    {
                        TPMS.TPMS_Warning = 0;
                    }
                }
                else if ((Front_TPMS != 0xFF) && (Rear_TPMS == 0xFF))
                {
                    TPMS.Front_TPMS_Valid  = 1;
                    TPMS.Rear_TPMS_Valid   = 0;
                    TPMS.Rear_Press_Value  = 990;
                    TPMS.Front_Press_Value = Front_TPMS *2750 ;
                    TPMS.Front_Press_Value  /= 102 ;
                    if(TPMS.Front_Press_Value > 9900)
                    {
                        TPMS.Front_Press_Value = 9900;
                    }
                    if(((TPMS.Front_Press_Value + 50) < 1700) || ((TPMS.Front_Press_Value + 50) > 2300))
                    {
                        TPMS.TPMS_Warning = 1;
                    }
                    else
                    {
                        TPMS.TPMS_Warning = 0;
                    }
                }
                else
                {
                    TPMS.Front_Press_Value = 9900;
                    TPMS.Rear_Press_Value = 9900;
                    TPMS.TPMS_Warning = 0;
                    TPMS.Front_TPMS_Valid  = 0;
                    TPMS.Rear_TPMS_Valid   = 0;
                }
            }
            else
            {
                TPMS.Front_TPMS_Valid  = 1;
                TPMS.Rear_TPMS_Valid   = 1;
                TPMS.Front_Press_Value = Front_TPMS * 2750 ;                
                TPMS.Front_Press_Value  /= 102 ;
                if(TPMS.Front_Press_Value > 9900)
                {
                    TPMS.Front_Press_Value = 9900;
                }

                TPMS.Rear_Press_Value  = Rear_TPMS * 2750;                
                TPMS.Rear_Press_Value  /= 102 ;
                if(TPMS.Rear_Press_Value > 9900)
                {
                    TPMS.Rear_Press_Value = 9900;
                }
                if (((TPMS.Front_Press_Value + 50) < 1700) || ((TPMS.Front_Press_Value + 50) > 2300) || ((TPMS.Rear_Press_Value + 50) < 1700) || ((TPMS.Rear_Press_Value + 50) > 2500))
                {
                    TPMS.TPMS_Warning = 1;
                }
                else
                {
                    TPMS.TPMS_Warning = 0;
                }
            }
            
        }
        if(TPMS.TPMS_Front_Learn == Unstudied)
        {
            TPMS.TPMS_Front_FirstLearn_Flag = Unstudied;            
        }
        else if(TPMS.TPMS_Front_Learn == Learning)
        {
            TPMS.TPMS_Front_FirstLearn_Flag = Learning;            
        }
        else if(TPMS.TPMS_Front_Learn == LearningCompletion)
        {
            TPMS.TPMS_Front_FirstLearn_Flag = LearningCompletion;
            
        }
        else if(TPMS.TPMS_Front_Learn == LearningFailure)
        {
            TPMS.TPMS_Front_FirstLearn_Flag = LearningFailure;
            TPMS.Front_Press_Value = 9900;
        }
        else
        {
            ;
        }

        if(TPMS.TPMS_Rear_Learn == Unstudied)
        {
            TPMS.TPMS_Rear_FirstLearn_Flag = Unstudied;
        }
        else if(TPMS.TPMS_Rear_Learn == Learning)
        {
            TPMS.TPMS_Rear_FirstLearn_Flag = Learning;
        }
        else if(TPMS.TPMS_Rear_Learn == LearningCompletion)
        {
            TPMS.TPMS_Rear_FirstLearn_Flag = LearningCompletion;
            
        }
        else if(TPMS.TPMS_Rear_Learn == LearningFailure)
        {
            TPMS.TPMS_Rear_FirstLearn_Flag = LearningFailure;
            TPMS.Rear_Press_Value = 9900;
        }
        else
        {
            ;
        }

        //if ((MenuData.TPMS_Rear_Learn != LearningCompletion) && (MenuData.TPMS_Front_Learn != LearningCompletion))
        //{
        //    TPMS.TPMS_Warning = 0;
        //}

    }
    else
    {
        TPMS.Front_TPMS_Valid  = 0;
        TPMS.Rear_TPMS_Valid   = 0; 
        TPMS.Front_Press_Value = 0;
        TPMS.Rear_Press_Value  = 0;
        TPMS.TPMS_Warning      = 0; 
    }
}
uint32_t Data_Bar_To_Psi (uint32_t bar)
{
    uint32_t Bar = 0;
    Bar = bar * 145;
    Bar /= 10;
    //Bar += 5;
    // bar *= 145;
    // bar /= 10;
    // bar += 5;    
    return Bar;
}

/*指示灯报警信号  0:白色常亮   1:黄色常亮*/
uint8_t Get_Led_TPMS_Waring (void)
{
    return TPMS.TPMS_Warning;
}

/*0:无效,常显--  1:有效,按实际胎压数值显示  */
uint8_t Get_Front_TPMS_Sig_Vaild (void)
{
    return TPMS.Front_TPMS_Valid;
}
uint8_t Get_Rear_TPMS_Sig_Vaild (void)
{
    return TPMS.Rear_TPMS_Valid;
}
//10倍
uint16_t Get_Front_TPMS_Sig_Value (void)
{
    uint16_t value = 0;
    //if (TPMS.TPMS_Unit == 1)
    //{
    //    value = (Data_Bar_To_Psi(TPMS.Front_Press_Value) + 500) / 1000;
    //    if(value > 99)
    //    {
    //        value = 99;
    //    }
    //}
    //else
    {        
        value = TPMS.Front_Press_Value + 50;        
        value = value / 100;
    }
    return value;
}
uint16_t Get_Rear_TPMS_Sig_Value (void)
{
    uint16_t value = 0;
    //if (TPMS.TPMS_Unit == 1)
    //{
    //    value = (Data_Bar_To_Psi(TPMS.Rear_Press_Value) + 500) / 1000;
    //    if(value > 99)
    //    {
    //        value = 99;
    //    }
    //    
    //}
    //else
    {        
        value = TPMS.Rear_Press_Value + 50;        
        value = value / 100;        
    }
    return value;    
}
uint16_t Get_Rear_TPMS_TX (void)
{
    uint16_t value = 0;
    value = Data_Bar_To_Psi(TPMS.Rear_Press_Value) / 100;
    if(value > 990)
    {
        value = 990;
    }
    return value;
}
uint16_t Get_Front_TPMS_TX (void)
{
    uint16_t value = 0;
    value = Data_Bar_To_Psi(TPMS.Front_Press_Value) / 100;
    if(value > 990)
    {
        value = 990;
    }
    return value;
}

/*前轮胎压学习结果 0-未学习“--”常显  1-学习中“--”闪烁  2-学习成功,正常显示数值  3-学习失败,闪烁显示最大值99*/
uint8_t Get_Front_FirstLearn_Flag (void)
{
    return TPMS.TPMS_Front_FirstLearn_Flag;
}
/*后轮胎压学习结果 0-未学习“--”常显  1-学习中“--”闪烁  2-学习成功,正常显示数值  3-学习失败,闪烁显示最大值99*/
uint8_t Get_Rear_FirstLearn_Flag (void)
{
    return TPMS.TPMS_Rear_FirstLearn_Flag;
}

/*获取0x341是否掉线  0-掉线  “--”闪烁   1-在线  获取学习结果进行显示*/
uint8_t Get_TPMS_CAN_LOST (void)
{
    return TPMS.TPMS_LOST ;
}