#include "Service_TPMS.h" #include "CAN_Communication_Matrix.h" #include "Flash_synchronizer.h" /*** TPMS ***/ _USER_TPMS TPMS_Out[TPMSNumMax] = {0}; /****************************************************************************** Function:Data_TPMS_KL30_Init Description:该服务函数首次KL30时调用一次 Input: Output: ******************************************************************************/ void Data_TPMS_KL30_Init(void) { TPMS_Out[FirstLOut].TPMSTyreID = FirstLOutID ; TPMS_Out[FirstROut].TPMSTyreID = FirstROutID ; TPMS_Out[SecondLIn].TPMSTyreID = SecondLInID ; TPMS_Out[SecondRIn].TPMSTyreID = SecondRInID ; TPMS_Out[ThirdLOut].TPMSTyreID = ThirdLOutID ; TPMS_Out[ThirdLIn].TPMSTyreID = ThirdLInID ; TPMS_Out[ThirdROut].TPMSTyreID = ThirdROutID ; TPMS_Out[ThirdRIn].TPMSTyreID = ThirdRInID ; TPMS_Out[FourthLOut].TPMSTyreID = FourthLOutID ; TPMS_Out[FourthLIn].TPMSTyreID = FourthLInID ; TPMS_Out[FourthROut].TPMSTyreID = FourthROutID ; TPMS_Out[FourthRIn].TPMSTyreID = FourthRInID ; TPMS_Out[FirstLOut].TPMSDataInvalidTime = 600u; TPMS_Out[FirstROut].TPMSDataInvalidTime = 600u; TPMS_Out[SecondLIn].TPMSDataInvalidTime = 600u; TPMS_Out[SecondRIn].TPMSDataInvalidTime = 600u; TPMS_Out[ThirdLOut].TPMSDataInvalidTime = 600u; TPMS_Out[ThirdLIn].TPMSDataInvalidTime = 600u; TPMS_Out[ThirdROut].TPMSDataInvalidTime = 600u; TPMS_Out[ThirdRIn].TPMSDataInvalidTime = 600u; TPMS_Out[FourthLOut].TPMSDataInvalidTime = 600u; TPMS_Out[FourthLIn].TPMSDataInvalidTime = 600u; TPMS_Out[FourthROut].TPMSDataInvalidTime = 600u; TPMS_Out[FourthRIn].TPMSDataInvalidTime = 600u; TPMS_Out[FirstLOut].TPMSGuiSta = SOLID_GRAY; TPMS_Out[FirstROut].TPMSGuiSta = SOLID_GRAY; TPMS_Out[SecondLIn].TPMSGuiSta = SOLID_GRAY; TPMS_Out[SecondRIn].TPMSGuiSta = SOLID_GRAY; TPMS_Out[ThirdLOut].TPMSGuiSta = SOLID_GRAY; TPMS_Out[ThirdLIn].TPMSGuiSta = SOLID_GRAY; TPMS_Out[ThirdROut].TPMSGuiSta = SOLID_GRAY; TPMS_Out[ThirdRIn].TPMSGuiSta = SOLID_GRAY; TPMS_Out[FourthLOut].TPMSGuiSta = SOLID_GRAY; TPMS_Out[FourthLIn].TPMSGuiSta = SOLID_GRAY; TPMS_Out[FourthROut].TPMSGuiSta = SOLID_GRAY; TPMS_Out[FourthRIn].TPMSGuiSta = SOLID_GRAY; } /****************************************************************************** Function:Data_TPMS_KL15_ON_Init Description:该服务函数首次KL15时调用一次 Input: Output: ******************************************************************************/ void Data_TPMS_KL15_ON_Init(void) { } /****************************************************************************** Function:Data_TPMS_Value_Processing Description:数据处理总接口 Input: Output: ******************************************************************************/ void Data_TPMS_Value_Processing(void) { /*报文数据获取,处理*/ Get_Data_TPMS_Value(FirstLOut); Get_Data_TPMS_Value(FirstROut); Get_Data_TPMS_Value(SecondLIn); Get_Data_TPMS_Value(SecondRIn); Get_Data_TPMS_Value(ThirdLOut); Get_Data_TPMS_Value(ThirdLIn); Get_Data_TPMS_Value(ThirdROut); Get_Data_TPMS_Value(ThirdRIn); Get_Data_TPMS_Value(FourthLOut); Get_Data_TPMS_Value(FourthLIn); Get_Data_TPMS_Value(FourthROut); Get_Data_TPMS_Value(FourthRIn); /*报文状态获取*/ Get_Data_TPMS_Status(FirstLOut); Get_Data_TPMS_Status(FirstROut); Get_Data_TPMS_Status(SecondLIn); Get_Data_TPMS_Status(SecondRIn); Get_Data_TPMS_Status(ThirdLOut); Get_Data_TPMS_Status(ThirdLIn); Get_Data_TPMS_Status(ThirdROut); Get_Data_TPMS_Status(ThirdRIn); Get_Data_TPMS_Status(FourthLOut); Get_Data_TPMS_Status(FourthLIn); Get_Data_TPMS_Status(FourthROut); Get_Data_TPMS_Status(FourthRIn); } /****************************************************************************** Function:Get_Data_TPMS_Value Description:胎压数据获取 数据精度在获取数据函数进行处理 Input: 输入枚举编号 Output: ******************************************************************************/ void Get_Data_TPMS_Value(TPMSNUM_t TPMSTyreID) { uint16_t TyrePressure = 0u ; uint32_t TyreTemp = 0ul; if (TPMS_Out[TPMSTyreID].TPMSTyreID == Get_ID_18011733_Sig_Tire_Index()) { /*胎压 数据处理*/ TPMS_Out[TPMSTyreID].TPMSPressure = Get_ID_18011733_Sig_Tire_Pressure(); /*胎温数据处理*/ TPMS_Out[TPMSTyreID].TPMSTempSign = Get_ID_18011733_Sig_Tire_Temperature_Sign(); if (TPMS_Out[TPMSTyreID].TPMSTempSign) { //' - ' TPMS_Out[TPMSTyreID].TPMSTemp = 128 - (Get_ID_18011733_Sig_Tire_Temperature() & 0x7F) ; } else { //' + ' TPMS_Out[TPMSTyreID].TPMSTemp = Get_ID_18011733_Sig_Tire_Temperature() ; } /*数据掉线计时器*/ TPMS_Out[TPMSTyreID].TPMSDataInvalidTime = 0u; } else { if (TPMS_Out[TPMSTyreID].TPMSDataInvalidTime < 0xFFFFu) { TPMS_Out[TPMSTyreID].TPMSDataInvalidTime ++ ; } else { TPMS_Out[TPMSTyreID].TPMSDataInvalidTime = 0xFFFFu; } } } /****************************************************************************** Function:Get_Data_TPMS_Status Description:胎压状态获取 Input:输入枚举编号 Output: ******************************************************************************/ void Get_Data_TPMS_Status(TPMSNUM_t TPMSTyreID) { if (TPMS_Out[TPMSTyreID].TPMSTyreID == Get_ID_18011733_Sig_Tire_Index()) { /*低气压报警 */ TPMS_Out[TPMSTyreID].TPMSLowpressure = Get_ID_18011733_Sig_Low_Presure_Alarm(); /*高气压报警 */ TPMS_Out[TPMSTyreID].TPMSHighpressure = Get_ID_18011733_Sig_High_Presure_Alarm(); /*高温报警 */ TPMS_Out[TPMSTyreID].TPMSHightemperature = Get_ID_18011733_Sig_High_Temperature_Alarm(); /*快速漏气报警 */ TPMS_Out[TPMSTyreID].TPMSRapidleakage = Get_ID_18011733_Sig_Fast_air_leakage_alarm(); /*低电压报警 */ TPMS_Out[TPMSTyreID].TPMSLowvoltage = Get_ID_18011733_Sig_Low_Voltage_Alarm(); /*无信号报警 */ TPMS_Out[TPMSTyreID].TPMSNosignal = Get_ID_18011733_Sig_No_signal_Alarm(); /*传感器故障信息 */ TPMS_Out[TPMSTyreID].TPMSSensorfault = Get_ID_18011733_Sig_Sensor_fault_information(); } } /****************************************************************************** Function:Get_Data_TPMS_Pair Description:胎压配对获取 Input:输入枚举编号 Output: ******************************************************************************/ void Get_Data_TPMS_Pair(TPMSNUM_t TPMSTyreID) { if (TPMS_Out[TPMSTyreID].CurPoxID) { if (TPMS_Out[TPMSTyreID].PairEn) { TPMS_Out[TPMSTyreID].PairTimer ++ ; TPMS_Out[TPMSTyreID].TPMSGuiSta = YELLOW_FLASH ; if (Get_ID_18021733_Sig_Setup_cmd() == 0x61u) { TPMS_Out[TPMSTyreID].PairSuccess = 1u ; TPMS_Out[TPMSTyreID].TPMSGuiSta = SOLID_GREEN ; TPMS_Out[TPMSTyreID].PairEn = 0 ; } else if (Get_ID_18021733_Sig_Setup_cmd() == 0xffu) { TPMS_Out[TPMSTyreID].PairSuccess = 0u ; } } } } /****************************************************************************** Function: Get_DataTPMS_Pressure_Value Description:获取某个编号轮胎胎压 Input:输入枚举编号 Output: 对应轮胎位置的胎压数据 ******************************************************************************/ uint16_t Get_DataTPMS_Pressure_Value(TPMSNUM_t TPMSTyreID) { return (uint16_t)TPMS_Out[TPMSTyreID].TPMSPressure ; } /****************************************************************************** Function: Get_DataTPMS_Pressure_Sta Description:获取某个编号轮胎胎压状态 Input:输入枚举编号 Output: 对应轮胎位置的胎压数据状态 有效无效等 ******************************************************************************/ uint16_t Get_DataTPMS_Pressure_Sta(TPMSNUM_t TPMSTyreID) { uint16_t Pressure_Sta = 0u; if ( (TPMS_Out[TPMSTyreID].TPMSDataInvalidTime) >= 600u ) /*数据超时 掉线或轮刷超时*/ { Pressure_Sta = (uint16_t)STATUS_TIMEOUT; } else if ((TPMS_Out[TPMSTyreID].TPMSPressure) >= 0xFAu ) /*超出最大范围*/ { Pressure_Sta = (uint16_t)STATUS_UNSUPPORTED ; } else { Pressure_Sta = (uint16_t)STATUS_SUCCESS ; } return Pressure_Sta ; } /****************************************************************************** Function: Get_DataTPMS_Pressure_FLashSta Description:获取某个编号轮胎胎压状态 Input:输入枚举编号 Output: 对应轮胎位置的胎压数据的闪烁状态 ******************************************************************************/ uint8_t Get_DataTPMS_Pressure_FLashSta(TPMSNUM_t TPMSTyreID) { uint8_t Pressure_Sta = 0u ; uint16_t Get_Pressure_Sta = 0u; Get_Pressure_Sta = Get_DataTPMS_Pressure_Sta(TPMSTyreID) ; if ( Get_Pressure_Sta == STATUS_TIMEOUT ) { Pressure_Sta = FLASH_SYNC_1Hz ; } return (uint8_t)Pressure_Sta ; } /****************************************************************************** Function:Get_DataTPMS_Temp_Value Description:获取某个编号轮胎胎温 Input:输入枚举编号 Output: ******************************************************************************/ uint16_t Get_DataTPMS_Temp_Value(TPMSNUM_t TPMSTyreID) { return (uint16_t)TPMS_Out[TPMSTyreID].TPMSTemp ; } /****************************************************************************** Function:Get_DataTPMS_Temp_Sta Description:获取某个编号轮胎胎温 Input:输入枚举编号 Output: 输出胎温数据状态,有效无效正数负数等 ******************************************************************************/ uint16_t Get_DataTPMS_Temp_Sta(TPMSNUM_t TPMSTyreID) { uint16_t Temp_Value = 0u; uint16_t Get_Temp_Value = 0u; Get_Temp_Value = Get_DataTPMS_Temp_Value(TPMSTyreID) ; if ( TPMS_Out[TPMSTyreID].TPMSDataInvalidTime >= 600u ) /*数据超时 掉线或轮刷超时*/ { Temp_Value = (uint16_t)STATUS_TIMEOUT; } else if ( Get_Temp_Value >= 0xFFFFu ) /*超出最大范围*/ { Temp_Value = (uint16_t)STATUS_UNSUPPORTED ; } else if (TPMS_Out[TPMSTyreID].TPMSTempSigStat == 1u ) /*正数 零 返回状态*/ { Temp_Value = (uint16_t)STATUS_NONNEGATIVE; } else if (TPMS_Out[TPMSTyreID].TPMSTempSigStat == 0u ) /*负数 返回状态*/ { Temp_Value = (uint16_t)STATUS_NEGATIVE; } else { Temp_Value = (uint16_t)STATUS_SUCCESS ; } return (uint16_t)Temp_Value; } /****************************************************************************** Function:Get_DataTPMS_Temp_FLashSta Description:获取某个编号轮胎胎温 Input:输入枚举编号 Output: 输出胎温闪烁状态 ******************************************************************************/ uint8_t Get_DataTPMS_Temp_FLashSta(TPMSNUM_t TPMSTyreID) { uint8_t TEMP_Sta = 0u ; uint16_t Get_Temp_Sta = 0u; Get_Temp_Sta = Get_DataTPMS_Temp_Sta(TPMSTyreID) ; if ( Get_Temp_Sta == (uint16_t)STATUS_TIMEOUT) { TEMP_Sta = FlashSync1Hz ; } return (uint8_t)TEMP_Sta ; } /****************************************************************************** Function:Get_DataTPMS_TPMSHighpressure_Value Description:获取某个编号轮胎气压高 Input:输入枚举编号 Output: ******************************************************************************/ uint8_t Get_DataTPMS_Highpressure_Value(TPMSNUM_t TPMSTyreID) { uint8_t Highpressure_Value = 0u; uint8_t Get_Highpressure_Value = 0u; /*0 极限高压 1 高压 2 正常压力 3 欠压 4 极限欠压 5 无定义 6 错误 7 无效*/ Get_Highpressure_Value = (uint8_t)TPMS_Out[TPMSTyreID].TPMSPressureThresholdDetection ; if ( Get_Highpressure_Value == 1u) { Highpressure_Value = 1u; } else if ( Get_Highpressure_Value == 0u) { Highpressure_Value = 2u; } else { Highpressure_Value = 0u; } return (uint8_t)Highpressure_Value ; } /****************************************************************************** Function:Get_DataTPMS_Lowpressure_Value Description:获取某个编号轮胎气压低 Input:输入枚举编号 Output: ******************************************************************************/ uint8_t Get_DataTPMS_Lowpressure_Value(TPMSNUM_t TPMSTyreID) { uint8_t Lowpressure_Value = 0u; uint8_t Get_Lowpressure_Value = 0u; /*0 极限高压 1 高压 2 正常压力 3 欠压 4 极限欠压 5 无定义 6 错误 7 无效*/ Get_Lowpressure_Value = (uint8_t)TPMS_Out[TPMSTyreID].TPMSPressureThresholdDetection; if ( Get_Lowpressure_Value == 3u) { Lowpressure_Value = 1u; } else if (Get_Lowpressure_Value == 4u) { Lowpressure_Value = 2u; } else { Lowpressure_Value = 0u; } return (uint8_t)Lowpressure_Value ; } /****************************************************************************** Function: Description:获取某个编号轮胎轮胎被盗报警信号 Input:输入枚举编号 Output: ******************************************************************************/ uint8_t Get_DataTPMS_TyresLostWarningSig_Value(TPMSNUM_t TPMSTyreID) { //return (uint8_t)TPMS_Out[TPMSTyreID].TPMSLostWarningSig ; } /****************************************************************************** Function: Description:获取某个编号轮胎标准温度设置状态 Input:输入枚举编号 Output: ******************************************************************************/ uint8_t Get_DataTPMS_TireStandarTemperatureSettingSts_Value(TPMSNUM_t TPMSTyreID) { return (uint8_t)TPMS_Out[TPMSTyreID].TPMSStandarTempSetSts ; } /****************************************************************************** Function: Description:获取某个编号轮胎短时无信号 Input:输入枚举编号 Output: ******************************************************************************/ uint8_t Get_DataTPMS_TemporaryNoSignal_Value(TPMSNUM_t TPMSTyreID) { //return (uint8_t)TPMS_Out[TPMSTyreID].TPMSTemporaryNoSignal ; } /****************************************************************************** Function: Description:获取某个编号轮胎是否换色 Input:输入枚举编号 Output: ******************************************************************************/ uint8_t Get_DataTPMS_Tyre_Red_Sta(TPMSNUM_t TPMSTyreID) { uint8_t TPMS_Tyre_Status = 0u; return (uint8_t)TPMS_Tyre_Status; } /****************************************************************************** Function: Description:获取某个编号轮胎闪烁状态 Input:输入枚举编号 Output: 0--不显示;1--闪烁 ******************************************************************************/ uint8_t Get_DataTPMS_Tyre_FLASH_Sta(TPMSNUM_t TPMSTyreID) { uint8_t TPMS_Tyre_Status = 0u; TPMS_Tyre_Status = FLASH_SYNC_1Hz; return (uint8_t)TPMS_Tyre_Status; } /****************************************************************************** Function:按键切换 选择轮胎 Description:选择某个轮胎 Input:输入枚举编号 Output: UP/DOWN 按键 ******************************************************************************/ void ChooseKey_TPMS_Event(TPMSNUM_t TPMSTyreID) { uint8_t i = 0 ; for (i = 0 ; i < TPMSNumMax ; i ++ ) { if (TPMS_Out[i].TPMSGuiSta == WHITEBOX_GRAY) { TPMS_Out[i].TPMSGuiSta = SOLID_GRAY ; TPMS_Out[i].CurPoxID = 0 ; } } if (TPMS_Out[TPMSTyreID].TPMSGuiSta == SOLID_GRAY) { TPMS_Out[TPMSTyreID].TPMSGuiSta = WHITEBOX_GRAY ; } TPMS_Out[TPMSTyreID].CurPoxID = 1 ; } /****************************************************************************** Function:配对轮胎 Description:选择某个轮胎 Input:输入枚举编号 Output: ENTER 按键 ******************************************************************************/ void EnterKey_TPMS_Event(TPMSNUM_t TPMSTyreID) { TPMS_Out[TPMSTyreID].TPMSGuiSta = YELLOW_FLASH ; TPMS_Out[TPMSTyreID].PairCmd = 0x61 ; TPMS_Out[TPMSTyreID].TireNumber = TPMS_Out[TPMSTyreID].TPMSTyreID ; TPMS_Out[TPMSTyreID].PairEn = 1 ; TPMS_Out[TPMSTyreID].PairTimer = 0 ; } /****************************************************************************** Function:退出配对 Description:选择某个轮胎 Input:输入枚举编号 Output: RETURN 按键 ******************************************************************************/ void ReturnKey_TPMS_Event(TPMSNUM_t TPMSTyreID) { TPMS_Out[TPMSTyreID].PairCmd = 0x91 ; TPMS_Out[TPMSTyreID].PairEn = 0 ; TPMS_Out[TPMSTyreID].PairTimer = 0 ; } /****************************************************************************** Function:Get_TPMSSetGui_Sta Description:胎压设定界面:某个轮胎的式样 Input:输入枚举编号 Output: RETURN 按键 ******************************************************************************/ en_TPMSGUI Get_TPMSSetGui_Sta(TPMSNUM_t TPMSTyreID) { return TPMS_Out[TPMSTyreID].TPMSGuiSta ; } /****************************************************************************** Function:Get_PairSuccess Description:配对是否成功 Input:输入枚举编号 Output: 0 - 失败 1 - 成功 ******************************************************************************/ uint8_t Get_PairSuccess(TPMSNUM_t TPMSTyreID) { return TPMS_Out[TPMSTyreID].PairSuccess ; } /****************************************************************************** Function: Description:获取某个编号轮胎低气压报警 Input:输入枚举编号 Output: ******************************************************************************/ uint8_t Get_TPMSLowpressure_Sta(TPMSNUM_t TPMSTyreID) { return (uint8_t)TPMS_Out[TPMSTyreID].TPMSLowpressure ; } /****************************************************************************** Function: Description:获取某个编号轮胎高气压报警 Input:输入枚举编号 Output: ******************************************************************************/ uint8_t Get_TPMSHighpressure_Sta(TPMSNUM_t TPMSTyreID) { return (uint8_t)TPMS_Out[TPMSTyreID].TPMSHighpressure ; } /****************************************************************************** Function: Description:获取某个编号轮胎快速漏气报警 Input:输入枚举编号 Output: ******************************************************************************/ uint8_t Get_DataTPMS_RapidLeakWarningSig_Value(TPMSNUM_t TPMSTyreID) { return (uint8_t)TPMS_Out[TPMSTyreID].TPMSRapidleakage ; } /****************************************************************************** Function: Description:获取某个编号轮胎高温报警 Input:输入枚举编号 Output: ******************************************************************************/ uint8_t Get_DataTPMS_TyreTempWarningSig_Value(TPMSNUM_t TPMSTyreID) { return (uint8_t)TPMS_Out[TPMSTyreID].TPMSHightemperature ; } /****************************************************************************** Function: Description:获取某个编号轮胎无信号报警 Input:输入枚举编号 Output: ******************************************************************************/ uint8_t Get_TPMSNosignal_Sta(TPMSNUM_t TPMSTyreID) { return (uint8_t)TPMS_Out[TPMSTyreID].TPMSNosignal ; } /****************************************************************************** Function: Description:获取某个编号轮胎传感器故障信息 7 8 9 Input:输入枚举编号 Output: ******************************************************************************/ uint8_t Get_DataTPMS_SensorErrorWarningSig_Value(TPMSNUM_t TPMSTyreID) { return (uint8_t)TPMS_Out[TPMSTyreID].TPMSSensorfault ; } /****************************************************************************** Function: Description:获取某个编号轮胎压力报警 Input:输入枚举编号 Output: ******************************************************************************/ uint8_t Get_TPMSPresure_Alarm(TPMSNUM_t TPMSTyreID) { uint8_t TPMSLowpressure = 0u; uint8_t TPMSHighpressure = 0u; uint8_t TPMSRapidleakage = 0u; uint8_t Ret = 0; TPMSLowpressure = TPMS_Out[TPMSTyreID].TPMSLowpressure; TPMSHighpressure = TPMS_Out[TPMSTyreID].TPMSHighpressure; TPMSRapidleakage = TPMS_Out[TPMSTyreID].TPMSRapidleakage; if ((TPMSLowpressure == 1u) || (TPMSHighpressure == 1u) || (TPMSRapidleakage == 1u)) { Ret = 1u; } else { Ret = 0u; } return Ret ; }