Commit 81aa0a56 authored by hu's avatar hu

首次增加,交样版本程序

parents
/ghs/obj/*.o
/ghs/obj/*.d
/ghs/obj/*.dbo
/ghs/obj/*.lst
/.tags_sorted_by_file
/.tags
/.vscode
*.vscode
*.tags_sorted_by_file
*.tags
/ghs/project.out
# Object files
*.o
*.ko
*.obj
*.elf
*.su
*.idb
*.pdb
*.pbi
*.zip
*.7z
/ghs/*.log
/ghs/*.dep
/ghs/*.dla
/ghs/*.dle
/ghs/*.dnm
/ghs/*.map
/ghs/*.run
/ghs/*
/ghs/project.mem
*.gh~
*.sublime-project
*.sublime-workspace
*.clang-format
#include "AC_TEMP.h"
/*** 室外温度 ***/
uint16_t AC_Temp_VALUE;
/*该服务函数首次KL30是调用一次*/
void Data_AC_Temp_KL30_Init(void)
{
}
/*该服务函数KL15是调用一次*/
void Data_AC_Temp_KL15_Init(void)
{
}
/******************************************************************************
函数名:Data_Ambient_Temperature_Processing
调用时周期:100ms
功 能: 室外温度数据处理
参 数: 无
返回值:无
******************************************************************************/
void Data_Ambient_Temperature_Processing(void)
{
AC_Temp_VALUE = 0u;
}
/******************************************************************************
函数名:Get_Ambient_Temperature
功 能: 获得室外温度
******************************************************************************/
uint8_t Get_Ambient_Temperature(void)
{
return AC_Temp_VALUE;
}
/******************************************************************************
函数名:Get_Ambient_Temperature_DispMode
功 能: 获得室外温度显示模式
******************************************************************************/
uint8_t Get_Ambient_Temperature_DispMode(void)
{
uint8_t DataAmbientTempDispMode = 0u;
return (uint8_t)DataAmbientTempDispMode;
}
/******************************************************************************
函数名:Get_Ambient_Temperature_DispSign
功 能: 获得室外温度正负温度符号
******************************************************************************/
uint8_t Get_Ambient_Temperature_DispSign(void)
{
uint8_t DataAmbientTempDispSign = 0u;
return (uint8_t)DataAmbientTempDispSign;
}
#ifndef _AC_TEMP_H_
#define _AC_TEMP_H_
#include "TYW_stdint.h"
extern uint16_t AC_Temp_VALUE;
void Data_AC_Temp_KL30_Init(void);
void Data_AC_Temp_KL15_Init(void);
void Data_Ambient_Temperature_Processing(void);
uint8_t Get_Ambient_Temperature(void);
uint8_t Get_Ambient_Temperature_DispMode(void);
uint8_t Get_Ambient_Temperature_DispSign(void);
void InvaldTimeReset(void);
#endif
\ No newline at end of file
#include "Data_ADAS.h"
#include "CAN_Communication_Matrix.h"
//-------------------------------------------
//ADAS数据处理 wangboyu
//-------------------------------------------
//区域4显示逻辑
//-------------------------------------------
//344 - 3.3 ADAS显示区域
//-------------------------------------------
static struct
{
uint8_t Gui_WorkshopScope ;
uint8_t Gui_LDWS_Left ;
uint8_t Gui_LDWS_Right ;
}ADASVariable ;
static void Data_WorkshopScope_2_Gui(void);
static void Data_LDWS_2_Gui(void);
/*-------------------------------------------------------------------------
* Function Name : ADAS_KL30_Init
* Description :
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
void ADAS_KL30_Init(void)
{
ADASVariable.Gui_WorkshopScope = 0 ;
ADASVariable.Gui_LDWS_Left = 0 ;
ADASVariable.Gui_LDWS_Right = 0 ;
}
void ADAS_KL15_ON_Init(void)
{
}
void ADAS_KL15_OFF_Init(void)
{
}
void ADAS_Wakeup_Init(void)
{
}
void ADAS_Sleep_Init(void)
{
}
/*-------------------------------------------------------------------------
* Function Name : ADAS_Processing_Service
* Description :
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
void ADAS_Processing_Service(void)
{
Data_WorkshopScope_2_Gui();
Data_LDWS_2_Gui();
}
/*-------------------------------------------------------------------------
* Function Name : Data_WorkshopScope_2_Gui
* Description : 车间范围逻辑处理
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
static void Data_WorkshopScope_2_Gui(void)
{
uint8_t u8GuiMode = 0 ;
uint8_t Msg_A1_AEBSS = 0 ;
uint8_t Msg_2A_AEBSS = 0 ;
uint8_t Msg_A0_AEBSS = 0 ;
uint8_t Msg_A1_Ro_AEBSS = 0 ;
uint8_t Msg_2A_Ro_AEBSS = 0 ;
uint8_t Msg_A0_Ro_AEBSS = 0 ;
Msg_A1_AEBSS = Get_ID_CF02FA1_Sig_Advanced_Emerg_Braking_Sys_Sta();//Byte1,Bit1‐4
Msg_2A_AEBSS = Get_ID_CF02F2A_Sig_Advanced_Emerg_Braking_Sys_Sta();//Byte1,Bit1‐4
Msg_A0_AEBSS = Get_ID_CF02FA0_Sig_Advanced_Emerg_Braking_Sys_Sta();//Byte1,Bit1‐4
Msg_A1_Ro_AEBSS = Get_ID_CF02FA1_Sig_Relevant_objected_for_AEBS();//Byte2,Bit1‐3
Msg_2A_Ro_AEBSS = Get_ID_CF02F2A_Sig_Relevant_objected_for_AEBS();//Byte2,Bit1‐3
Msg_A0_Ro_AEBSS = Get_ID_CF02FA0_Sig_Relevant_objected_for_AEBS();//Byte2,Bit1‐3
if(Msg_A1_AEBSS == 0x01 || Msg_A1_AEBSS == 0x02 || Msg_A1_AEBSS == 0x0C || Msg_A1_AEBSS == 0x0F ||\
Msg_2A_AEBSS == 0x01 || Msg_2A_AEBSS == 0x02 || Msg_2A_AEBSS == 0x0C || Msg_2A_AEBSS == 0x0F ||\
Msg_A0_AEBSS == 0x01 || Msg_A0_AEBSS == 0x02 || Msg_A0_AEBSS == 0x0C || Msg_A0_AEBSS == 0x0F) \
{
u8GuiMode = 0 ;
}
if(Msg_A1_AEBSS == 0x00 || Msg_A1_AEBSS == 0x04 ||\
Msg_2A_AEBSS == 0x00 || Msg_2A_AEBSS == 0x04 ||\
Msg_A0_AEBSS == 0x00 || Msg_A0_AEBSS == 0x04 \
)
{
u8GuiMode = 1 ;
}
if(((Msg_A1_AEBSS == 0x03)&&(Msg_A1_Ro_AEBSS == 0x00 || Msg_A1_Ro_AEBSS == 0x02))|| \
((Msg_2A_AEBSS == 0x03)&&(Msg_2A_Ro_AEBSS == 0x00 || Msg_2A_Ro_AEBSS == 0x02))|| \
((Msg_A0_AEBSS == 0x03)&&(Msg_A0_Ro_AEBSS == 0x00 || Msg_A0_Ro_AEBSS == 0x02)) \
)
{
u8GuiMode = 2 ;
}
if((Msg_A1_AEBSS == 0x03 && Msg_A1_Ro_AEBSS == 0x01)|| \
(Msg_2A_AEBSS == 0x03 && Msg_2A_Ro_AEBSS == 0x01)|| \
(Msg_A0_AEBSS == 0x03 && Msg_A0_Ro_AEBSS == 0x01) \
)
{
u8GuiMode = 3 ;
}
ADASVariable.Gui_WorkshopScope = u8GuiMode ;
}
/*-------------------------------------------------------------------------
* Function Name : Data_LDWS_2_Gui
* Description : LDWS逻辑处理
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
static void Data_LDWS_2_Gui(void)
{
uint8_t u8Left_GuiMode = 0 ;
uint8_t u8Right_GuiMode = 0 ;
uint8_t Msg_LDWS = 0 ;
uint8_t Msg_Lane_Left = 0 ;
uint8_t Msg_Lane_Right = 0 ;
uint8_t Msg_Tracking_Left = 0 ;
uint8_t Msg_Tracking_Right = 0 ;
uint8_t Msg_Departure_Left = 0 ;
uint8_t Msg_Departure_Right = 0 ;
Msg_LDWS = Get_ID_18FE5BE8_Sig_Lane_Departure_Warning_Sys_Sta();
Msg_Tracking_Left = Get_ID_18FE5BE8_Sig_Lane_Tracking_Status_Left_Side() ;
Msg_Tracking_Right = Get_ID_18FE5BE8_Sig_Lane_Tracking_Status_Right_Side() ;
Msg_Departure_Left = Get_ID_10F007E8_Sig_Lane_Departure_Imminent_Left() ;
Msg_Departure_Right = Get_ID_10F007E8_Sig_Lane_Departure_Imminent_Right() ;
if(Msg_LDWS == 0)
{
u8Left_GuiMode = 1 ;
u8Right_GuiMode = 1 ;
}
else if(Msg_LDWS == 3)
{
if(Msg_Tracking_Left == 0)
{
u8Left_GuiMode = 2 ;
}
else if(Msg_Tracking_Left == 1)
{
u8Left_GuiMode = 3 ;
}
else
{
u8Left_GuiMode = 0u;
}
if(Msg_Tracking_Right == 0)
{
u8Right_GuiMode = 2 ;
}
else if(Msg_Tracking_Right == 1)
{
u8Right_GuiMode = 3 ;
}
else
{
u8Right_GuiMode = 0u ;
}
}
else if(Msg_LDWS == 5)
{
if(Msg_Departure_Left == 1)
{
u8Left_GuiMode = 4 ;
}
else
{
u8Left_GuiMode = 0u ;
}
if(Msg_Departure_Right == 1)
{
u8Right_GuiMode = 4 ;
}
else
{
u8Right_GuiMode = 0u ;
}
}
else
{
u8Left_GuiMode = 0 ;
u8Right_GuiMode = 0 ;
}
ADASVariable.Gui_LDWS_Left = u8Left_GuiMode ;
ADASVariable.Gui_LDWS_Right = u8Right_GuiMode ;
}
/*-------------------------------------------------------------------------
* Function Name : Gui_Get_WorkshopScope_DisplayMode
* Description : 车间范围显示模式
* Input : None
* Output : None
* Return : None
* onther : 刷图时使用
--------------------------------------------------------------------------*/
uint8_t Gui_Get_WorkshopScope_DisplayMode(void)
{
uint8_t u8Result = 0 ;
u8Result = ADASVariable.Gui_WorkshopScope ;
return u8Result ;
}
/*-------------------------------------------------------------------------
* Function Name : Gui_Get_LDWS_DisplayMode
* Description : LDWS显示模式_左车线
* Input : None
* Output : None
* Return : None
* onther : 刷图时使用
--------------------------------------------------------------------------*/
uint8_t Gui_Get_LDWS_Left_DisplayMode(void)
{
uint8_t u8Result = 0 ;
u8Result = ADASVariable.Gui_LDWS_Left ;
return u8Result ;
}
/*-------------------------------------------------------------------------
* Function Name : Gui_Get_LDWS_Right_DisplayMode
* Description : LDWS显示模式_右车线
* Input : None
* Output : None
* Return : None
* onther : 刷图时使用
--------------------------------------------------------------------------*/
uint8_t Gui_Get_LDWS_Right_DisplayMode(void)
{
uint8_t u8Result = 0 ;
u8Result = ADASVariable.Gui_LDWS_Right ;
return u8Result ;
}
#ifndef DATA_ADAS_H
#define DATA_ADAS_H
#include "TYW_stdint.h"
void ADAS_KL30_Init(void);
void ADAS_KL15_ON_Init(void);
void ADAS_KL15_OFF_Init(void);
void ADAS_Wakeup_Init(void);
void ADAS_Sleep_Init(void);
void ADAS_Processing_Service(void);
extern uint8_t Gui_Get_WorkshopScope_DisplayMode(void) ;
extern uint8_t Gui_Get_LDWS_Left_DisplayMode(void);
extern uint8_t Gui_Get_LDWS_Right_DisplayMode(void);
#endif
/*#include "bt_pwm_driver.h"*/
#include "TimerB.h"
#include "BackgroundLight.h"
/*#include "DriverPWM.h"*/
#include "BGLInterface.h"
BL_STATE_PARA BLStatePara;
uint16_t CurLcdBackLightCycle;
/*Comfort 指针仪表
类型 白天 傍晚 夜晚
背光等级 不同仪表配置不同
*/
const uint16_t BackLightValue_TFT_Default[BL_TYPE_TOTAL][BL_LV_TOTAL] =
{
{50, 113, 177, 240, 303, 368, 430, 493, 557, 620, 683, 747, 810, 873, 937 ,1000},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{3, 8, 15, 23, 43, 68, 98, 130, 170, 212, 267, 323, 385, 450, 523 ,600},
};
/*¡°BackLightValue_DIAL¡± corresponds to ¡°Pointer¡±*/
const uint16_t BackLightValue_DIAL_Default[BL_TYPE_TOTAL][BL_LV_TOTAL] =
{
{50, 113, 177, 240, 303, 368, 430, 493, 557, 620, 683, 747, 810, 873, 937 ,1000},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{3, 8, 15, 23, 43, 68, 98, 130, 170, 212, 267, 323, 385, 450, 523 ,600},
};
/*Comfort 断码仪表
主题 不同仪表配置不同
类型 白天 傍晚 夜晚
背光等级 不同仪表配置不同
*/
const uint16_t BackLightValue_R_Default[BL_THEME_TOTAL][BL_TYPE_TOTAL][BL_LV_TOTAL] =
{
{ {20, 70, 140, 210, 280, 350, 400, 470, 540, 610, 680, 680},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
},
{ {10, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 100},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
},
{ {5, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 50},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
}
};
const uint8_t PwmChannel[BACKLIGHT_TOTAL] =
/* TFT 表盘 */
{TIMERB_1_CH11, TIMERB_0_CH15};
/**@brief Back Ground Light Config function
* @author TYW
* @param[in] BGLType 背光类型
* @param[in] DutyVal 占空比
* @since 1.0.0.0
*/
void BGLPwm_Config(uint8_t BGLType, uint16_t DutyVal)
{
/*Pwm_Config(2, CurLcdBackLightCycle, DutyVal);*/
if (PwmChannel[BGLType] != 255u)
{
if(BGLType == BL_DIAL)
TimerB_PWM_Channel_Duty_Set(PwmChannel[BGLType] , DutyVal );
}
else
{
;
}
}
/**@brief Back Ground Light Stop function
* @author TYW
* @param[in] BGLType 背光类型
* @since 1.0.0.0
*/
void BGLPwm_Stop(uint8_t BGLType)
{
if (PwmChannel[BGLType] != 255u)
{
TimerB_PWM_Channel_Stop(PwmChannel[BGLType]);
}
else
{
;
}
}
/**@brief Back Ground Light Start function
* @author TYW
* @param[in] BGLType 背光类型
* @since 1.0.0.0
*/
void BGLPwm_Start(uint8_t BGLType)
{
if (PwmChannel[BGLType] != 255u)
{
TimerB_PWM_Channel_Start(PwmChannel[BGLType]);
}
else
{
;
}
}
/**@brief Back Ground Light Schedu function
* @author TYW
* @param[in] BGLTheme 背光主题
* @param[in] BGLType 背光类型
* @param[in] BGLLvl 背光等级
* @since 1.0.0.0
*/
BL_USER_PARA BL_Tmp_PARA;
uint8_t testBL;
void BackLightSchedu(uint8_t BGLPowerSt, uint8_t WakeFlag)
{
CurLcdBackLightCycle = BACKLIGHTCYCLE;
BL_Tmp_PARA.BL_User_PowerSt = BGLPowerSt;
BL_Tmp_PARA.BL_User_WakeFlag = WakeFlag;
BLStatePara. BL_User_Lvl_Total = BL_LV_TOTAL;
BLStatePara. BL_User_NTC_AD_MAX = NTC_AD_MAX;
BLStatePara. BL_User_effect = testBL;
if (BLStatePara.BL_User_Lvl < BL_LV_TOTAL)
{
BL_Tmp_PARA.BL_User_TFTDuty = BackLightValue_TFT_Default[BLStatePara.BL_User_Type][BLStatePara.BL_User_Lvl];
BL_Tmp_PARA.BL_User_GaugesDuty = BackLightValue_DIAL_Default[BLStatePara.BL_User_Type][BLStatePara.BL_User_Lvl];
//BL_Tmp_PARA.BL_User_RDuty = BackLightValue_R_Default[BLStatePara.BL_User_Theme][BLStatePara.BL_User_Type][BLStatePara.BL_User_Lvl];
//BL_Tmp_PARA.BL_User_GDuty = BackLightValue_G_Default[BLStatePara.BL_User_Theme][BLStatePara.BL_User_Type][BLStatePara.BL_User_Lvl];
//BL_Tmp_PARA.BL_User_BDuty = BackLightValue_B_Default[BLStatePara.BL_User_Theme][BLStatePara.BL_User_Type][BLStatePara.BL_User_Lvl];
BL_Tmp_PARA.BL_User_TFTDuty_MIN = BackLightValue_TFT_Default[BLStatePara.BL_User_Type][BL_LV_MIN];
BL_Tmp_PARA.BL_User_GaugesDuty_MIN = BackLightValue_DIAL_Default[BLStatePara.BL_User_Type][BL_LV_MIN];
//BL_Tmp_PARA.BL_User_RDuty_MIN = BackLightValue_R_Default[BLStatePara.BL_User_Theme][BLStatePara.BL_User_Type][BL_LV_MIN];
//BL_Tmp_PARA.BL_User_GDuty_MIN = BackLightValue_G_Default[BLStatePara.BL_User_Theme][BLStatePara.BL_User_Type][BL_LV_MIN];
//BL_Tmp_PARA.BL_User_BDuty_MIN = BackLightValue_B_Default[BLStatePara.BL_User_Theme][BLStatePara.BL_User_Type][BL_LV_MIN];
}
else
{
;
}
#if COLOR_LED_DEBUG
DebugBGLPara();
# endif
BackLightDeal(BL_Tmp_PARA, BLStatePara);
}
/**@brief Get Ground Light Theme function
* @author TYW
* @param[in] BGLTheme 背光主题
* @since 1.0.0.0
*/
void GetBGLTheme(uint8_t BGLTheme)
{
BLStatePara.BL_User_Theme = BGLTheme;
}
/**@brief Get Ground Light Type function
* @author TYW
* @param[in] BGLType 背光类型 白天 傍晚 晚上
* @since 1.0.0.0
*/
void GetBGLType(uint8_t BGLType)
{
BLStatePara.BL_User_Type = BGLType;
}
/**@brief Get Ground Light Level function
* @author TYW
* @param[in] BGLTheme 背光等级
* @param[in] PositionLight 小灯触发 1是小灯触发 0是关闭
* @since 1.0.0.0
*/
void GetBGLLvl(uint8_t BGLLvl, uint8_t FunPositionLight)
{
uint8_t tmpLvl;
tmpLvl = 0u;
if (FunPositionLight)
{
tmpLvl = ProcessLittleLight(BGLLvl);
}
else
{
tmpLvl = BGLLvl;
}
BLStatePara.BL_User_Lvl = tmpLvl;
}
/**@brief Get Ground Light Little Light function
* @author TYW
* @param[in] BGLTheme 背光等级
* @since 1.0.0.0
*/
uint8_t ProcessLittleLight(uint8_t BGLLvl)
{
uint16_t tmpLvl;
tmpLvl = BGLLvl ;
tmpLvl = tmpLvl * POSITION_LIGHT_PERCENT / 100u;
if ((uint8_t)tmpLvl < BL_LV_2)
{
tmpLvl = BL_LV_2;
}
else
{
;
}
return (uint8_t)tmpLvl;
}
/**@brief Get Ground Light NTCval function
* @author TYW
* @param[in] BGLNTCADVal 热敏电阻电压值
* @since 1.0.0.0
*/
void GetBGLNTCVol(uint16_t BGLNTCVol)
{
BLStatePara.BL_User_NTC_AD = BGLNTCVol;
}
/**@brief Debug Ground Light function
* @author TYW
* @调试背光用传递占空比参数用于调整背后亮度和颜色
* @since 1.0.0.0
*/
#if COLOR_LED_DEBUG
uint16_t DebugTFTDuty;
uint16_t DebugGaugesDuty;
uint16_t DebugRDuty;
uint16_t DebugGDuty;
uint16_t DebugBDuty;
void DebugBGLPara(void)
{
BL_Tmp_PARA.BL_User_TFTDuty = DebugTFTDuty ;
BL_Tmp_PARA.BL_User_GaugesDuty = DebugGaugesDuty;
BL_Tmp_PARA.BL_User_RDuty = DebugRDuty;
BL_Tmp_PARA.BL_User_GDuty = DebugGDuty;
BL_Tmp_PARA.BL_User_BDuty = DebugBDuty;
}
/**@brief Debug Ground Light function
* @author TYW
* @param[in] TestTFTDuty TFT占空比
* @since 1.0.0.0
*/
void SetTFTDebugPara(uint16_t TestTFTDuty)
{
DebugTFTDuty = TestTFTDuty;
}
/**@brief Debug Ground Light function
* @author TYW
* @param[in] TestGaugesDuty Gauges占空比
* @since 1.0.0.0
*/
void SetGaugesDebugPara(uint16_t TestGaugesDuty)
{
DebugGaugesDuty = TestGaugesDuty;
}
/**@brief Debug Ground Light function
* @author TYW
* @param[in] TestRDuty RED占空比
* @since 1.0.0.0
*/
void SetRDebugPara(uint16_t TestRDuty)
{
DebugRDuty = TestRDuty;
}
/**@brief Debug Ground Light function
* @author TYW
* @param[in] TestGDuty Green占空比
* @since 1.0.0.0
*/
void SetGDebugPara(uint16_t TestGDuty)
{
DebugGDuty = TestGDuty;
}
/**@brief Debug Ground Light function
* @author TYW
* @param[in] TestBDuty Blue占空比
* @since 1.0.0.0
*/
void SetGDebugPara(uint16_t TestBDuty)
{
DebugBDuty = TestBDuty;
}
# endif
\ No newline at end of file
#ifndef _BGLINTERFACE_H
#define _BGLINTERFACE_H
#define uint8_t unsigned char
#define uint16_t unsigned short/*3360 324*/
/*#define uint16_t unsigned int*/ /*Freesecale */
/*#define uint32_t unsigned long*//*Freesecale */
#define uint32_t unsigned int
#define COLOR_LED_DEBUG 0u
/*占空比最大值*/
#define BACKLIGHTCYCLE 721u
#define NTC_AD_MAX 4096u
/*有小灯背光降到当前显示等级的百分比*/
#define POSITION_LIGHT_PERCENT 50u
enum {
BGL_IGN_OFF,
BGL_IGN_ON,
};
enum {
BGL_GRADUAL,
BGL_DIRECT,
};
enum {
BL_TYPE_DAY,
BL_TYPE_EVENING,
BL_TYPE_NIGHT,
BL_TYPE_TOTAL,
};
enum {
BL_THEME_RED,
BL_THEME_BLUE,
BL_THEME_WHITE,
BL_THEME_TOTAL,
};
enum {
BL_LV_MIN,
//BL_LV_1,
BL_LV_2,
BL_LV_3,
BL_LV_4,
BL_LV_5,
BL_LV_6,
BL_LV_7,
BL_LV_8,
BL_LV_9,
BL_LV_10,
BL_LV_11,
BL_LV_12,
BL_LV_13,
BL_LV_14,
BL_LV_15,
BL_LV_MAX,
BL_LV_TOTAL,
};
enum {
BL_TFT,
BL_DIAL,
//BL_R,
//BL_G,
//BL_B,
BACKLIGHT_TOTAL,
};
typedef struct {
uint16_t DestBackLightDuty;
uint16_t CurBackLightDuty;
uint16_t BackLightDutyMin;
}BACKLIGHT_PARA;
typedef struct {
uint8_t BL_User_PowerSt;
uint8_t BL_User_WakeFlag;
uint16_t BL_User_TFTDuty;
uint16_t BL_User_GaugesDuty;
uint16_t BL_User_RDuty;
uint16_t BL_User_GDuty;
uint16_t BL_User_BDuty;
uint16_t BL_User_TFTDuty_MIN;
uint16_t BL_User_GaugesDuty_MIN;
uint16_t BL_User_RDuty_MIN;
uint16_t BL_User_GDuty_MIN;
uint16_t BL_User_BDuty_MIN;
}BL_USER_PARA;
typedef struct {
uint8_t BL_User_Theme;
uint8_t BL_User_Type;
uint8_t BL_User_Lvl;
uint8_t BL_User_Lvl_Total;
uint16_t BL_User_NTC_AD;
uint16_t BL_User_NTC_AD_MAX;
uint8_t BL_User_effect;
}BL_STATE_PARA;
extern void BGLPwm_Config(uint8_t BGLType, uint16_t DutyVal);
extern void BackLightDeal(BL_USER_PARA BL_FunPara,BL_STATE_PARA BLFunStatePara);
extern void BGLPwm_Stop(uint8_t BGLType);
extern void BGLPwm_Start(uint8_t BGLType);
/*以下主函数调用*/
/*得到主题模式可自己在枚举中定义 在BackGroundLight.c里填表*/
extern void GetBGLTheme(uint8_t BGLTheme);
/*得到工作模式 白天 傍晚 夜晚 在枚举中已定义*/
extern void GetBGLType(uint8_t BGLType);
/*得到背光等级 可自己在枚举中定义 在BackGroundLight.c里填表*/
extern void GetBGLLvl(uint8_t BGLLvl,uint8_t FunPositionLight);
/*小灯暗级处理*/
uint8_t ProcessLittleLight(uint8_t BGLLvl);
/*得到热敏电阻电压参数为100倍电压值*/
extern void GetBGLNTCVol(uint16_t BGLNTCVol);
/*主函数中调用第一个参数电源状态 1是 ON档 2 off 第二个参数 唤醒条件 1是TTF唤醒 2 是表盘唤醒 3 是表盘和屏都有唤醒,0无唤醒*/
extern void BackLightSchedu(uint8_t BGLPowerSt,uint8_t WakeFlag);
/*定时函数中调用 1ms函数中调用 TimeX 填1u*/
extern void BackLightDamp(uint8_t TimeX);
/*调试用*/
#if COLOR_LED_DEBUG
extern void DebugBGLPara(void);
extern void SetTFTDebugPara(uint16_t TestTFTDuty);
extern void SetGaugesDebugPara(uint16_t TestGaugesDuty);
extern void SetRDebugPara(uint16_t TestRDuty);
extern void SetGDebugPara(uint16_t TestGDuty);
extern void SetBDebugPara(uint16_t TestBDuty);
#endif
#endif
\ No newline at end of file
This diff is collapsed.
#include "BackLight_APP.h"
#include "RTE_PWM_OUT.h"
#include "Common_Interface.h"
#include "DisplaySch.h"
#include "Popup_List.h"
#include "Popup_Scheduler.h"
#include "GPIO.h"
#include "dr7f701441.dvf.h"
#include "CAN_Communication_Matrix.h"
#include "BGLInterface.h"
#include "Line_in.h"
#include "TimerB.h"
#include "Data_Fuel_User.h"
typedef struct
{
uint8_t Brightness;
uint8_t Window;
} SEGLCDBackupStruct;
typedef struct
{
uint8_t DoorStatusBackup;
uint16_t Timer;
uint16_t BackupPwm;
} BlOFFCtrlStruct;
BlOFFCtrlStruct BlOFFCtrl;
SEGLCDBackupStruct SEGLCDBackup;
uint8_t WARNING_DOOR_STATUS ;
uint32_t Left_Right_Delay;
void SEG_LCD_Window_Switch ( uint8_t Sw );
void BL_Init ( void )
{
SEG_LCD_Init();
}
uint16_t BackLightVLv = 10u;
uint8_t BackLightTestIG = 1u;
uint8_t BackLightWakeFlag = 0u;
uint8_t BackLightTPostLight = 0u;
uint16_t testBG = 500 ;
void BL_Management_service ( void )
{
uint8_t Msg;
uint8_t LED_Pos;
uint8_t LED_Left;
uint8_t LED_Right;
uint8_t LED_Plus;
uint8_t WARNING_PARKING_BRAKE_TEL = 0u;
uint8_t BCM_PositionLight = 0;
uint8_t DutyCycle;
uint8_t ILL = 0 ;
if(Line_In_Get_Status(LINE_IN_ILLUMINATION) )
{
ILL = 2 ;
}
else
{
ILL = 0 ;
}
if ( Common_Get_IG_Sts() == COMMON_POWER_OFF )
{
#if 0
LED_Pos = Get_ID_245_Sig_BCM_PosiLightSts();
LED_Left = Get_ID_245_Sig_BCM_TurnLightSts_L();
LED_Right = Get_ID_245_Sig_BCM_TurnLightSts_R();
LED_Plus = LED_Left + LED_Right ;
if (LED_Plus != 0u)
{
Left_Right_Delay = 0u;
WARNING_PARKING_BRAKE_TEL = LED_Left + LED_Right;
}
else
{
if (Left_Right_Delay <= 500ul)
{
Left_Right_Delay++;
}
if (Left_Right_Delay >= 15)
{
WARNING_PARKING_BRAKE_TEL = LED_Left + LED_Right;
}
else
{
WARNING_PARKING_BRAKE_TEL = 1;
}
}
if (( Get_Current_DispType() == Disp_Alarm ) || (WARNING_PARKING_BRAKE_TEL != 0) || (LED_Pos != 0))
{
Msg = Popup_Get_Current_Message();
//if (( Msg != POPUP_MSG_DOOR_OPEN_LOW_SPEED ) || (WARNING_PARKING_BRAKE_TEL != 0))
// BlOFFCtrl.Timer = 0;
//else
//{
// if ( ( WARNING_DOOR_STATUS != 0 ) && ( WARNING_DOOR_STATUS != BlOFFCtrl.DoorStatusBackup ) )
// BlOFFCtrl.Timer = 0;
// else
// {
// if ( BlOFFCtrl.Timer < 30 * 50 )
// BlOFFCtrl.Timer++;
// }
// BlOFFCtrl.DoorStatusBackup = WARNING_DOOR_STATUS;
//}
if ( BlOFFCtrl.Timer < 30 * 50 )
{
SEG_LCD_Window_Switch ( 1 );
BackLightWakeFlag = 1u;
}
else
{
SEG_LCD_Window_Switch ( 0 );
BackLightWakeFlag = 0u;
}
}
else
{
BlOFFCtrl.Timer = 0;
SEG_LCD_Window_Switch ( 0 );
BackLightWakeFlag = 0u;
}
#endif
}
else
{
//if ( BCM_PositionLight )
//{
// RTE_PWM_Set_Panel ( 47, 42, 43 );
// RTE_PWM_Set_LCD ( DutyCycle );
// RTE_PWM_Set_Point ( DutyCycle );
//}
//else
//{
// RTE_PWM_Set_Panel ( 95, 85, 86 );
// RTE_PWM_Set_LCD ( DutyCycle ); //LCD_BL = 1;
// RTE_PWM_Set_Point ( DutyCycle ); //LCD_BL = 1;
//}
SEG_LCD_Window_Switch ( 1 );
}
/*得到主题模式可自己在枚举中定义 在BackGroundLight.c里填表*/
GetBGLTheme(0);
/*得到工作模式 白天 傍晚 夜晚 在枚举中已定义*/
GetBGLType(ILL);
//GetBGLType(0);
/*得到背光等级 可自己在枚举中定义 在BackGroundLight.c里填表*/
GetBGLLvl(BackLightVLv, LED_Pos);
/*得到热敏电阻电压参数为100倍电压值*/
GetBGLNTCVol(0);
/*主函数中调用第一个参数电源状态 1是 ON档 2 off 第二个参数 唤醒条件 1是TTF唤醒 2 是表盘唤醒 3 是表盘和屏都有唤醒,0无唤醒*/
BackLightSchedu(Common_Get_IG_Sts(), BackLightWakeFlag);
D8867_BL_PWM_OUT = 1 ;
//水温灯
TimerB_PWM_Channel_Duty_Set(TIMERB_2_CH7 , testBG );//水温格白色
TEMP_LED_W_MCU_OUT = 1 ;//水温字符白色指示灯
//燃油灯
if(Fuel_Get_LowAlarm())
{
FUEL_LED_Y_MCU = 1U ;
FUEL_LED_W_MCU_OUT = 0U ;
}
else
{
FUEL_LED_Y_MCU = 0U ;
FUEL_LED_W_MCU_OUT = 1U ;
}
}
void BL_PWM_Duty_Cycle_Capture_ISR ( void )
{
}
void SEG_LCD_Init ( void )
{
SEGLCDBackup.Brightness = 0xFF;
SEGLCDBackup.Window = 0x00;
SEG0_MCU_OUT = 0;
COMM_MCU_OUT = 0;
}
void SEG_LCD_Window_Switch ( uint8_t Sw )
{
if ( Sw == SEGLCDBackup.Window )
return;
SEGLCDBackup.Window = Sw;
if ( Sw )
{
SEG0_MCU_OUT = 1;
COMM_MCU_OUT = 0;
}
else
{
SEG0_MCU_OUT = 0;
COMM_MCU_OUT = 0;
}
}
//10ms
void SEG_LCD_Window_Control_Service ( void )
{
if ( SEGLCDBackup.Window )
{
if (SEG0_MCU_OUT == 1)
{
SEG0_MCU_OUT = 0;
COMM_MCU_OUT = 1;
}
else
{
SEG0_MCU_OUT = 1;
COMM_MCU_OUT = 0;
}
}
else
{
SEG0_MCU_OUT = 0;
COMM_MCU_OUT = 0;
}
}
\ No newline at end of file
#ifndef BACK_LIGHT_APP
#define BACK_LIGHT_APP
void SEG_LCD_Window_Control_Service ( void );
void SEG_LCD_Init ( void );
void BL_Init ( void );
void BL_PWM_Duty_Cycle_Capture_ISR ( void );
void BL_Management_service ( void );
#endif
\ No newline at end of file
#ifndef _BACKGROUND_LIGHT_H
#define _BACKGROUND_LIGHT_H
#include "BGLInterface.h"
#define uint8_t unsigned char
#define uint16_t unsigned short/*3360 324*/
/*#define uint16_t unsigned int*/ /*Freesecale */
/*#define uint32_t unsigned long*//*Freesecale */
#define uint32_t unsigned int
#define IGN_ON_BACK_LIGHT_DELAY_MS 400u
#define BACKLIGHT_LV100 0u
#define BACKLIGHT_LV80 1u
#define BACKLIGHT_LV40 2u
extern void SetBackLightOutput(uint8_t n, uint16_t val);
extern void SetBacklightDestVal(uint8_t n, const uint16_t val);
extern void SetBacklightCurVal(uint8_t n, uint16_t val);
extern void SetBacklightMinVal(uint8_t n, uint16_t val);
extern void BackLightDamp(uint8_t TimeX);
extern void BackLightDeal(BL_USER_PARA BL_FunPara, BL_STATE_PARA BLFunStatePara);
extern void SetBacklightMinVal(uint8_t n, uint16_t val);
/*TFT高温处理函数*/
extern void BackLightDeal_NTC(BL_USER_PARA BL_FunPara, BL_STATE_PARA BLFunStatePara);
extern void AD_SwapShort(uint16_t *pData1, uint16_t *pData2);
extern void AD_SortShort(uint16_t SortData[], uint8_t len);
extern uint16_t Calculate_Thermistor(BL_STATE_PARA BLFunStatePara);
#endif
\ No newline at end of file
#include "Data_AdBule.h"
#include "Gauges.h"
#include "GaugesInterface.h"
#include "CAN_Communication_Matrix.h"
//-------------------------------------------
//尿素 数据处理 wangboyu
//-------------------------------------------
//区域1显示逻辑
//-------------------------------------------
//342 - 4.3.DS油位显示器
//-------------------------------------------
static struct
{
uint8_t Number ;
en_ADBULE_Sta DisplaySta ;
}AdBuleVariable ;
/*-------------------------------------------------------------------------
* Function Name : AdBule_KL30_Init
* Description :
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
void AdBule_KL30_Init(void)
{
AdBuleVariable.Number = 0u;
AdBuleVariable.DisplaySta = ADBULE_LED_OFF;
}
void AdBule_KL15_ON_Init(void)
{
AdBuleVariable.Number = 0u;
AdBuleVariable.DisplaySta = ADBULE_LED_OFF;
}
void AdBule_KL15_OFF_Init(void)
{
AdBuleVariable.Number = 0u;
AdBuleVariable.DisplaySta = ADBULE_LED_OFF;
}
void AdBule_Wakeup_Init(void)
{
AdBuleVariable.Number = 0u;
AdBuleVariable.DisplaySta = ADBULE_LED_OFF;
}
void AdBule_Sleep_Init(void)
{
AdBuleVariable.Number = 0u;
AdBuleVariable.DisplaySta = ADBULE_LED_OFF;
}
/*-------------------------------------------------------------------------
* Function Name : AdBule_Processing_Service
* Description :
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
void AdBule_Processing_Service(void)
{
uint8_t Msg_Tank_Level = 0 ;
uint8_t Msg_Level_blinking = 0 ;
uint8_t u8Number = 0 ;
en_ADBULE_Sta u8DisplaySta = ADBULE_LED_OFF ;
Msg_Tank_Level = Get_ID_18FF2300_Sig_Tank_Level();
Msg_Level_blinking = Get_ID_18FF2300_Sig_Level_blinking();
//if(Get_CanFirstRecv_Event(ID_CanMsg18FF2300_Msg_Count) == 0)
//{
// u8Number = 0u;
// u8DisplaySta = ADBULE_LED_OFF;
//}
//else if (CAN_MSG_Status(ID_CanMsg18FF2300_Msg_Count) == CAN_SIG_LOST)
if (CAN_MSG_Status(ID_CanMsg18FF2300_Msg_Count) == CAN_SIG_LOST)
{
u8Number = 0u;
u8DisplaySta = ADBULE_LED_OFF;
}
else
{
if(Msg_Tank_Level == 0x3C)
{
u8Number = 5u;
}
else if(Msg_Tank_Level == 0x1C)
{
u8Number = 4u;
}
else if(Msg_Tank_Level == 0x0C)
{
u8Number = 3u;
}
else if(Msg_Tank_Level == 0x04)
{
u8Number = 2u;
}
else if(Msg_Tank_Level == 0x02)
{
u8Number = 1u;
}
else
{
u8Number = 0u;
}
if(Msg_Level_blinking == 0x03)
{
u8DisplaySta = ADBULE_LED_3HZ_FLASH ;
}
else if(Msg_Level_blinking == 0x01)
{
u8DisplaySta = ADBULE_LED_1HZ_FLASH ;
}
else
{
u8DisplaySta = ADBULE_LED_ON ;
}
}
AdBuleVariable.Number = u8Number ;
AdBuleVariable.DisplaySta = u8DisplaySta ;
}
/*-------------------------------------------------------------------------
* Function Name : AdBule_Get_Number
* Description : 返回尿素当前格数
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
uint8_t AdBule_Get_Number(void)
{
uint8_t u8Result = 0u;
u8Result = AdBuleVariable.Number;
return u8Result;
}
/*-------------------------------------------------------------------------
* Function Name : AdBule_Get_Display_Sta
* Description : 返回尿素当前显示模式(最后一格的显示模式)
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
en_ADBULE_Sta AdBule_Get_Display_Sta(void)
{
en_ADBULE_Sta u8Result = ADBULE_LED_OFF;
u8Result = AdBuleVariable.DisplaySta;
return u8Result;
}
#ifndef DATA_ADBULE_H
#define DATA_ADBULE_H
#include "TYW_stdint.h"
typedef enum
{
ADBULE_LED_OFF = 0 ,
ADBULE_LED_1HZ_FLASH ,
ADBULE_LED_3HZ_FLASH ,
ADBULE_LED_ON ,
}en_ADBULE_Sta ;
void AdBule_KL30_Init(void);
void AdBule_KL15_ON_Init(void);
void AdBule_KL15_OFF_Init(void);
void AdBule_Wakeup_Init(void);
void AdBule_Sleep_Init(void);
void AdBule_Processing_Service(void);
uint8_t AdBule_Get_Number(void);
en_ADBULE_Sta AdBule_Get_Display_Sta(void);
#endif
This diff is collapsed.
#ifndef DATA_AIRPRESSURE_H
#define DATA_AIRPRESSURE_H
#include "TYW_stdint.h"
extern void AirPressure_KL30_Init(void);
extern void AirPressure_KL15_ON_Init(void);
extern void AirPressure_KL15_OFF_Init(void);
extern void AirPressure_Wakeup_Init(void);
extern void AirPressure_Sleep_Init(void);
extern void AirPressure_Processing_Service(void);
extern uint16_t AirPressure_Get_kPa(uint8_t ID);
extern uint8_t AirPressure_Get_Valid(uint8_t ID);
extern void AirPressure_AdcData_Filter(void) ;
extern uint8_t AirPressure_Get_CurSeg(uint8_t ID);
#endif
#include "Data_CoolantTemperature.h"
#include "CAN_Communication_Matrix.h"
#include "GaugesInterface.h"
#include "GPIO.h"
//-------------------------------------------
//水温数据处理 wangboyu
//-------------------------------------------
//断码显示
//-------------------------------------------
//344 - 3.1.1. 水温计显示
//-------------------------------------------
static struct
{
uint8_t Value ;
uint8_t Valid ;
uint8_t CurSeg ;
}CoolantVariable ;
static uint8_t CalCoolant_CurSeg(uint8_t Valid,uint8_t Temp);
static uint8_t CalCoolant_TarSeg(uint16_t CanMsg);
/*-------------------------------------------------------------------------
* Function Name : Coolant_KL30_Init
* Description : 水温KL30初始化
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
void Coolant_KL30_Init(void)
{
CoolantVariable.Valid = 0 ;
CoolantVariable.Value = 0 ;
CoolantVariable.CurSeg = 0 ;
}
void Coolant_KL15_ON_Init(void)
{
CoolantVariable.Valid = 0 ;
CoolantVariable.Value = 0 ;
CoolantVariable.CurSeg = 0 ;
}
void Coolant_KL15_OFF_Init(void)
{
CoolantVariable.Valid = 0 ;
CoolantVariable.Value = 0 ;
CoolantVariable.CurSeg = 0 ;
}
void Coolant_Wakeup_Init(void)
{
CoolantVariable.Valid = 0 ;
CoolantVariable.Value = 0 ;
CoolantVariable.CurSeg = 0 ;
}
void Coolant_Sleep_Init(void)
{
CoolantVariable.Valid = 0 ;
CoolantVariable.Value = 0 ;
CoolantVariable.CurSeg = 0 ;
}
/*-------------------------------------------------------------------------
* Function Name : Coolant_Processing_Service
* Description : 水温
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
static uint8_t wbyTestSeg = 0 ;
void Coolant_Processing_Service(void)
{
static uint8_t Timer2s = 0 ;
uint8_t TargetSeg = 0 ;
uint8_t Msg_CoolTemp = 0 ;
if(CAN_MSG_Status(ID_CanMsg18FEEE00_Msg_Count) == 0x55u)
{//timeout
CoolantVariable.Valid = 0 ;
Timer2s = 0 ;
}
else
{
Msg_CoolTemp = Get_ID_18FEEE00_Sig_Engine_Coolant_Temperature();
if(Msg_CoolTemp > 0xFA)
{
//if(Timer2s < 100)
//{
// Timer2s ++ ;
//}
//else
{
CoolantVariable.Valid = 0 ;
}
}
else
{
Timer2s = 0 ;
CoolantVariable.Valid = 1 ;
CoolantVariable.Value = Msg_CoolTemp ;
TargetSeg = CalCoolant_TarSeg(Msg_CoolTemp);
}
}
if(Msg_CoolTemp < 40)
{
Msg_CoolTemp = 0 ;
}
else
{
Msg_CoolTemp -= 40 ;
}
//CoolantVariable.CurSeg = CalCoolant_CurSeg(CoolantVariable.Valid,Msg_CoolTemp);
//TargetSeg - 目标段
//CoolantVariable.Valid - 有效值
//CoolantVariable.CurSeg - 当前段
CoolantVariable.CurSeg = Coolant_Temp_Filter(TargetSeg, CoolantVariable.Valid);
}
/*-------------------------------------------------------------------------
* Function Name : CalCoolant_TarSeg
* Description : 根据有效报文 得到 目标格
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
static uint8_t CalCoolant_TarSeg(uint16_t CanMsg)
{
uint8_t TargetSeg = 0 ;
if(CanMsg >= 0x00 && CanMsg <= 0x59)
{
TargetSeg = 0 ;
}
if(CanMsg >= 0x5A && CanMsg <= 0x5E)
{
TargetSeg = 1 ;
}
if(CanMsg >= 0x5F && CanMsg <= 0x64)
{
TargetSeg = 2 ;
}
if(CanMsg >= 0x65 && CanMsg <= 0x69)
{
TargetSeg = 3 ;
}
if(CanMsg >= 0x6A && CanMsg <= 0x6F)
{
TargetSeg = 4 ;
}
if(CanMsg >= 0x70 && CanMsg <= 0x74)
{
TargetSeg = 5 ;
}
if(CanMsg >= 0x75 && CanMsg <= 0x8D)
{
TargetSeg = 6 ;
}
if(CanMsg >= 0x8E && CanMsg <= 0x8F)
{
TargetSeg = 7 ;
}
if(CanMsg >= 0x90 && CanMsg <= 0x91)
{
TargetSeg = 8 ;
}
if(CanMsg >= 0x92 && CanMsg <= 0x93)
{
TargetSeg = 9 ;
}
if(CanMsg >= 0x94 && CanMsg <= 0x95)
{
TargetSeg = 10 ;
}
if(CanMsg == 0x96)
{
TargetSeg = 11 ;
}
if(CanMsg >= 0x97)
{
TargetSeg = 12 ;
}
return TargetSeg ;
}
/*-------------------------------------------------------------------------
* Function Name : CalCoolant_CurSeg
* Description : 计算当前段
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
static uint8_t CalCoolant_CurSeg(uint8_t Valid,uint8_t Temp)
{
uint8_t u8Result = 0u;
if(Valid)
{
SetGaugesPara(TempGauges,Temp);
u8Result = GetGaugesCurrentPos(TempGauges) ;
}
else
{
//范围外/CAN中断
u8Result = 0 ;
}
return u8Result ;
}
/*-------------------------------------------------------------------------
* Function Name : Coolant_Get_ActualValue
* Description : 水温值.结果带偏移 - 40
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
uint8_t Coolant_Get_ActualValue(void)
{
uint8_t u8Result = 0u;
u8Result = CoolantVariable.Value ;
return u8Result;
}
/*-------------------------------------------------------------------------
* Function Name : Coolant_Get_Valid
* Description :
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
uint8_t Coolant_Get_Valid(void)
{
uint8_t u8Result = 0u;
u8Result = CoolantVariable.Valid ;
return u8Result;
}
/*-------------------------------------------------------------------------
* Function Name : Coolant_Get_CurSeg
* Description : 水温当前段
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
uint8_t Coolant_Get_CurSeg(void)
{
uint8_t u8Result = 0u;
u8Result = CoolantVariable.CurSeg ;
return u8Result;
}
#ifndef DATA_COOLANTTEMPERATURE_H
#define DATA_COOLANTTEMPERATURE_H
#include "TYW_stdint.h"
extern void Coolant_KL30_Init(void);
extern void Coolant_KL15_ON_Init(void);
extern void Coolant_KL15_OFF_Init(void);
extern void Coolant_Wakeup_Init(void);
extern void Coolant_Sleep_Init(void);
extern void Coolant_Processing_Service(void);
extern uint8_t Coolant_Get_ActualValue(void);
extern uint8_t Coolant_Get_Valid(void);
extern uint8_t Coolant_Get_CurSeg(void);
extern uint8_t Coolant_Temp_Filter(uint8_t ObjSeg, uint8_t Valid);
#endif
#include "Data_CoolantTemperature.h"
//-------------------------------------------
//水温滤波 zhouhang
//-------------------------------------------
#define COOLANT_FILTER_SLOW 200
#define COOLANT_FILTER_FAST 25
uint8_t Coolant_Temp_Filter(uint8_t ObjSeg, uint8_t Valid)
{
static uint8_t Timer = 0u;
static uint8_t Timer_group= 0u;//Timer_group == 1 代表格数上行计时,2代表下行计时
static uint8_t CurSeg = 0u;
if (Valid == 0u)
{
CurSeg = 0u;
Timer = 0u;
Timer_group = 0u;
}
else
{
if (ObjSeg > CurSeg)//上行
{
if (Timer_group != 1u)
{
Timer_group = 1u;
Timer = 0u;
}
else
{
Timer++;
}
if ((ObjSeg - CurSeg) == 1u)
{
if (Timer > COOLANT_FILTER_SLOW)
{
CurSeg++;
Timer = 0u;
}
}
else
{
if (Timer > COOLANT_FILTER_FAST)
{
CurSeg++;
Timer = 0u;
}
}
}
else if (ObjSeg == CurSeg)//保持
{
Timer = 0u;
}
else//下行
{
if (Timer_group != 2u)
{
Timer_group = 2u;
Timer = 0u;
}
else
{
Timer++;
}
if (Timer > COOLANT_FILTER_FAST)
{
CurSeg--;
Timer = 0u;
}
}
}
return CurSeg;
}
#include "Service_Drive_Time.h"
#include "Common_Interface.h"
_DriveTimeInitStruct DriveTimeInitPara;
_DriveTimeScheduleStruct DriveTimeSchedule;
/**@brief DriveTime KL30 Init
* @author TYW - xinyu
* @param[in] mode : WorkMode
* @param[in] BaseTime : start count value
* @param[in] ESpeedStartThre : ESpeed effective value
* @param[in] VSpeedRunThre : VSpeed effective value
* @param[in] ESpeedStopThre : ESpeed failure value
* @param[in] VSpeedStopThre : VSpeed failure value
* @since 1.0.0.0
*/
void Service_Drive_Timing_KL30Init(DriveTimerMode mode,uint32_t BaseTime,uint16_t ESpeedStartThre,uint16_t ESpeedStartThreHyst,uint16_t VSpeedRunThre,uint16_t VSpeedRunThreHyst)
{
if(BaseTime>=59999994ul)
{
DriveTimeInitPara.BaseTime = 59999994ul;
}
else
{
DriveTimeInitPara.BaseTime = BaseTime;
}
if(mode == Mode_ESpeed)
{
if(ESpeedStartThre<=ESpeedStartThreHyst)
{
DriveTimeInitPara.Mode = Mode_Unavailable;
DriveTimeInitPara.ESpeedStartThre = 0u;
DriveTimeInitPara.ESpeedStopThre = 0u;
DriveTimeInitPara.VSpeedRunThre = 0u;
DriveTimeInitPara.VSpeedStopThre = 0u;
}
else
{
DriveTimeInitPara.Mode = Mode_ESpeed;
DriveTimeInitPara.ESpeedStartThre = ESpeedStartThre;
DriveTimeInitPara.ESpeedStopThre = ESpeedStartThre - ESpeedStartThreHyst;
DriveTimeInitPara.VSpeedRunThre = 0u;
DriveTimeInitPara.VSpeedStopThre = 0u;
}
}
else if(mode == Mode_VSpeed)
{
if(VSpeedRunThre<=VSpeedRunThreHyst)
{
DriveTimeInitPara.Mode = Mode_Unavailable;
DriveTimeInitPara.VSpeedRunThre = 0u;
DriveTimeInitPara.VSpeedStopThre = 0u;
DriveTimeInitPara.ESpeedStartThre = 0u;
DriveTimeInitPara.ESpeedStopThre = 0u;
}
else
{
DriveTimeInitPara.Mode = Mode_VSpeed;
DriveTimeInitPara.VSpeedRunThre = VSpeedRunThre;
DriveTimeInitPara.VSpeedStopThre = VSpeedRunThre - VSpeedRunThreHyst;
DriveTimeInitPara.ESpeedStartThre = 0u;
DriveTimeInitPara.ESpeedStopThre = 0u;
}
}
else if(mode == Mode_BothSpeed)
{
if((ESpeedStartThre<=ESpeedStartThreHyst)||(VSpeedRunThre<=VSpeedRunThreHyst) )
{
DriveTimeInitPara.Mode = Mode_Unavailable;
DriveTimeInitPara.VSpeedRunThre = 0u;
DriveTimeInitPara.VSpeedStopThre = 0u;
DriveTimeInitPara.ESpeedStartThre = 0u;
DriveTimeInitPara.ESpeedStopThre = 0u;
}
else
{
DriveTimeInitPara.Mode = Mode_BothSpeed;
DriveTimeInitPara.ESpeedStartThre = ESpeedStartThre;
DriveTimeInitPara.ESpeedStopThre = ESpeedStartThre - ESpeedStartThreHyst;
DriveTimeInitPara.VSpeedRunThre = VSpeedRunThre;
DriveTimeInitPara.VSpeedStopThre = VSpeedRunThre - VSpeedRunThreHyst;
}
}
else
{
DriveTimeInitPara.Mode = mode;
DriveTimeInitPara.VSpeedRunThre = 0u;
DriveTimeInitPara.VSpeedStopThre = 0u;
DriveTimeInitPara.ESpeedStartThre = 0u;
DriveTimeInitPara.ESpeedStopThre = 0u;
}
DriveTimeSchedule.TimerStatus = Timer_OFF;
DriveTimeSchedule.Timer_Min = 0u;
DriveTimeSchedule.Timer_ms = 0u;
}
/**@brief Reset Drive Time
* @author TYW - xinyu
* @param[in] NONE
* @return[out] NONE
* @since 1.0.0.0
*/
void Service_Drive_Timing_Reset(void)
{
DriveTimeSchedule.TimerStatus = Timer_OFF;
DriveTimeSchedule.Timer_Min = 0u;
DriveTimeSchedule.Timer_ms = 0u;
DriveTimeInitPara.BaseTime = 0u;
}
/**@brief Get Drive Time .unit:min
* @author TYW - xinyu
* @param[in] NONE
* @return[out] Drive Time
* @since 1.0.0.0
*/
uint32_t Service_Drive_Timing_GetMin(void)
{
return (DriveTimeInitPara.BaseTime+DriveTimeSchedule.Timer_Min);
}
/**@brief DriveTime Process
* @author TYW - xinyu
* @param[in] Nms : Task In N*1ms
* @param[in] ESpeed : Current ESpeed
* @param[in] VSpeed : Current VSpeed
* @return[out] NONE
* @since 1.0.0.0
*/
void Service_Drive_Timing_Process(uint16_t Nms,uint16_t ESpeed,uint16_t VSpeed)
{
if(Common_Get_IG_Sts_Valid() == COMMON_Valid)
{
if(Common_Get_IG_Sts() == COMMON_POWER_ON)
{
switch(DriveTimeInitPara.Mode)
{
case Mode_IGNON:
if((DriveTimeSchedule.Timer_Min+DriveTimeInitPara.BaseTime)<59999994ul)
{
DriveTimeSchedule.TimerStatus = Timer_ON;
}
else
{
DriveTimeSchedule.TimerStatus = Timer_OFF;
}
break;
case Mode_VSpeed:
if((DriveTimeSchedule.Timer_Min+DriveTimeInitPara.BaseTime)<59999994ul)
{
if(VSpeed>=DriveTimeInitPara.VSpeedRunThre)
{
DriveTimeSchedule.TimerStatus = Timer_ON;
}
else if(VSpeed<DriveTimeInitPara.VSpeedStopThre)
{
DriveTimeSchedule.TimerStatus = Timer_OFF;
}
else
{
;
}
}
else
{
DriveTimeSchedule.TimerStatus = Timer_OFF;
}
break;
case Mode_ESpeed:
if((DriveTimeSchedule.Timer_Min+DriveTimeInitPara.BaseTime)<59999994ul)
{
if(ESpeed>=DriveTimeInitPara.ESpeedStartThre)
{
DriveTimeSchedule.TimerStatus = Timer_ON;
}
else if(ESpeed<DriveTimeInitPara.ESpeedStopThre)
{
DriveTimeSchedule.TimerStatus = Timer_OFF;
}
else
{
;
}
}
else
{
DriveTimeSchedule.TimerStatus = Timer_OFF;
}
break;
case Mode_BothSpeed:
if((DriveTimeSchedule.Timer_Min+DriveTimeInitPara.BaseTime)<59999994ul)
{
if((VSpeed>=DriveTimeInitPara.VSpeedRunThre) && (ESpeed>=DriveTimeInitPara.ESpeedStartThre) )
{
DriveTimeSchedule.TimerStatus = Timer_ON;
}
else if((VSpeed<DriveTimeInitPara.VSpeedStopThre) || (ESpeed<DriveTimeInitPara.ESpeedStopThre) )
{
DriveTimeSchedule.TimerStatus = Timer_OFF;
}
else
{
;
}
}
else
{
DriveTimeSchedule.TimerStatus = Timer_OFF;
}
break;
default:
DriveTimeSchedule.TimerStatus = Timer_OFF;
break;
}
if(DriveTimeSchedule.TimerStatus == Timer_ON)
{
DriveTimeSchedule.Timer_ms += Nms;
if(DriveTimeSchedule.Timer_ms>=60000u)
{
DriveTimeSchedule.Timer_ms = DriveTimeSchedule.Timer_ms - 60000u;
DriveTimeSchedule.Timer_Min += 1u;
}
else
{
;
}
}
else
{
;
}
}
else
{
DriveTimeSchedule.TimerStatus = Timer_OFF;
}
}
}
#ifndef _SERVICE_DRIVE_TIME_H_
#define _SERVICE_DRIVE_TIME_H_
#include "TYW_stdint.h"
typedef enum
{
Timer_OFF=0u,
Timer_ON ,
}DriveTimerStatus;
typedef enum
{
Mode_IGNON=0u ,
Mode_ESpeed ,
Mode_VSpeed ,
Mode_BothSpeed ,
Mode_Unavailable ,
}DriveTimerMode;
typedef struct
{
uint32_t BaseTime ;
uint16_t ESpeedStartThre ;
uint16_t ESpeedStopThre ;
uint16_t VSpeedRunThre ;
uint16_t VSpeedStopThre ;
DriveTimerMode Mode ;
} _DriveTimeInitStruct;
typedef struct
{
DriveTimerStatus TimerStatus;
uint16_t Timer_ms;
uint32_t Timer_Min;
} _DriveTimeScheduleStruct;
void Service_Drive_Timing_KL30Init(DriveTimerMode mode,uint32_t BaseTime,uint16_t ESpeedStartThre,uint16_t ESpeedStartThreHyst,uint16_t VSpeedRunThre,uint16_t VSpeedRunThreHyst);
void Service_Drive_Timing_Reset(void);
uint32_t Service_Drive_Timing_GetMin(void);
void Service_Drive_Timing_Process(uint16_t Nms,uint16_t ESpeed,uint16_t VSpeed);
#endif
\ No newline at end of file
#include "Data_DrivingSupport.h"
#include "CAN_Communication_Matrix.h"
//-------------------------------------------
//驾驶支援数据处理 wangboyu
//-------------------------------------------
//区域6显示逻辑
//-------------------------------------------
//344 - 3.3 驾驶支援显示区域
//-------------------------------------------
static struct
{
uint8_t Gui_SysRunSta ;
uint8_t Gui_SetSpeed ;
}DrivSupVariable ;
static void Data_SystemRunningState_2_Gui(void);
static void Data_SetSpeed_2_Gui(void);
/*-------------------------------------------------------------------------
* Function Name : ADAS_KL30_Init
* Description :
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
void DrivingSupport_KL30_Init(void)
{
DrivSupVariable.Gui_SysRunSta = 0 ;
DrivSupVariable.Gui_SetSpeed = 0 ;
}
void DrivingSupport_KL15_ON_Init(void)
{
}
void DrivingSupport_KL15_OFF_Init(void)
{
}
void DrivingSupport_Wakeup_Init(void)
{
}
void DrivingSupport_Sleep_Init(void)
{
}
/*-------------------------------------------------------------------------
* Function Name : DrivingSupport_Processing_Service
* Description :
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
void DrivingSupport_Processing_Service(void)
{
Data_SystemRunningState_2_Gui();
Data_SetSpeed_2_Gui();
}
/*-------------------------------------------------------------------------
* Function Name : Data_SystemRunningState_2_Gui
* Description : 系统运行状态逻辑处理
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
static void Data_SystemRunningState_2_Gui(void)
{
uint8_t u8GuiMode = 0 ;
uint8_t EOL = 0x01 ;
uint8_t Msg_Cruise_VariableSLD_Disp = 0 ;
uint8_t Msg_Cruise_VariableSLD_Cont_Staus = 0 ;
Msg_Cruise_VariableSLD_Disp = Get_ID_18FF4100_Sig_Cruise_VariableSLD_Disp();
Msg_Cruise_VariableSLD_Cont_Staus = Get_ID_18FF4100_Sig_Cruise_VariableSLD_Cont_Staus();
if(Msg_Cruise_VariableSLD_Disp == 0x01)
{//定速巡航
if(EOL != 0x01)
{
u8GuiMode = 0 ;
}
else
{
if(Msg_Cruise_VariableSLD_Cont_Staus == 0x00)
{
u8GuiMode = 1 ;
}
else if(Msg_Cruise_VariableSLD_Cont_Staus == 0x01)
{
u8GuiMode = 2 ;
}
else if(Msg_Cruise_VariableSLD_Cont_Staus == 0x02)
{
u8GuiMode = 3;
}
else if(Msg_Cruise_VariableSLD_Cont_Staus == 0x03)
{
u8GuiMode = 4;
}
else
{
u8GuiMode = 0 ;
}
}
}
else if(Msg_Cruise_VariableSLD_Disp == 0x03)
{//SLD
if(EOL == 0x00)
{
u8GuiMode = 0 ;
}
else if(EOL == 0x01)
{
if(Msg_Cruise_VariableSLD_Cont_Staus == 0x00)
{
u8GuiMode = 5 ;
}
else if(Msg_Cruise_VariableSLD_Cont_Staus == 0x01)
{
u8GuiMode = 6 ;
}
else if(Msg_Cruise_VariableSLD_Cont_Staus == 0x02)
{
u8GuiMode = 7 ;
}
else if(Msg_Cruise_VariableSLD_Cont_Staus == 0x03)
{
u8GuiMode = 8 ;
}
else
{
u8GuiMode = 0 ;
}
}
else
{
u8GuiMode = 0 ;
}
}
else
{
u8GuiMode = 0 ;
}
DrivSupVariable.Gui_SysRunSta = u8GuiMode ;
}
/*-------------------------------------------------------------------------
* Function Name : Data_SetSpeed_2_Gui
* Description : 设定车速逻辑处理
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
static void Data_SetSpeed_2_Gui(void)
{
uint8_t u8GuiMode = 0 ;
uint8_t Msg_Indicate_Lamp_Speed = 0xff ;
Msg_Indicate_Lamp_Speed = Get_ID_18FF4100_Sig_Indicate_Lamp_Speed();
if (CAN_MSG_Status(ID_CanMsg18FF4100_Msg_Count) == CAN_SIG_LOST)
{
u8GuiMode = 0xff ;
}
else
{
if(Msg_Indicate_Lamp_Speed == 0x00)
{
u8GuiMode = 0 ;
}
else if(Msg_Indicate_Lamp_Speed <= 0xFA)
{
u8GuiMode = Msg_Indicate_Lamp_Speed ;
}
else
{
u8GuiMode = 0xff ;
}
}
DrivSupVariable.Gui_SetSpeed = u8GuiMode ;
}
/*-------------------------------------------------------------------------
* Function Name : Gui_Get_SystemRunningState_DisplayMode
* Description : 系统运行状态显示模式
* Input : None
* Output : None
* Return : None
* onther : 刷图时使用
--------------------------------------------------------------------------*/
uint8_t Gui_Get_SystemRunningState_DisplayMode(void)
{
uint8_t u8Result = 0 ;
u8Result = DrivSupVariable.Gui_SysRunSta ;
return u8Result ;
}
/*-------------------------------------------------------------------------
* Function Name : Gui_Get_SetSpeed_DisplayMode
* Description : 设定车速显示模式
* Input : None
* Output : None
* Return : None
* onther : 刷图时使用
--------------------------------------------------------------------------*/
uint8_t Gui_Get_SetSpeed_DisplayMode(void)
{
uint8_t u8Result = 0 ;
u8Result = DrivSupVariable.Gui_SetSpeed ;
return u8Result ;
}
#ifndef DATA_DRIVINGSUPPORT_H
#define DATA_DRIVINGSUPPORT_H
#include "TYW_stdint.h"
void DrivingSupport_KL30_Init(void);
void DrivingSupport_KL15_ON_Init(void);
void DrivingSupport_KL15_OFF_Init(void);
void DrivingSupport_Wakeup_Init(void);
void DrivingSupport_Sleep_Init(void);
void DrivingSupport_Processing_Service(void);
extern uint8_t Gui_Get_SystemRunningState_DisplayMode(void);
extern uint8_t Gui_Get_SetSpeed_DisplayMode(void);
#endif
#include "Data_EngineSpeed.h"
#include "CAN_Communication_Matrix.h"
#include "GaugesInterface.h"
#include "RTE_PWM_OUT.h"
//-------------------------------------------
//转速数据处理 wangboyu
//-------------------------------------------
//断码显示
//-------------------------------------------
//342 - 3.2. 行驶记录仪
//-------------------------------------------
static struct
{
uint16_t Value ;
uint16_t Valid ;
uint8_t CurSeg ;
}TachoVariable ;
static uint8_t CalTacho_CurSeg(uint8_t Valid,uint16_t Value);
/*-------------------------------------------------------------------------
* Function Name : Tacho_KL30_Init
* Description : 转速KL30初始化
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
void Tacho_KL30_Init(void)
{
TachoVariable.Value = 0 ;
TachoVariable.Valid = 0 ;
TachoVariable.CurSeg = 0 ;
}
void Tacho_KL15_ON_Init(void)
{
TachoVariable.Value = 0 ;
TachoVariable.Valid = 0 ;
TachoVariable.CurSeg = 0 ;
}
void Tacho_KL15_OFF_Init(void)
{
TachoVariable.Value = 0 ;
TachoVariable.Valid = 0 ;
TachoVariable.CurSeg = 0 ;
}
void Tacho_Wakeup_Init(void)
{
TachoVariable.Value = 0 ;
TachoVariable.Valid = 0 ;
TachoVariable.CurSeg = 0 ;
}
void Tacho_Sleep_Init(void)
{
TachoVariable.Value = 0 ;
TachoVariable.Valid = 0 ;
TachoVariable.CurSeg = 0 ;
}
/*-------------------------------------------------------------------------
* Function Name : Tacho_Processing_Service
* Description : 转速
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
void Tacho_Processing_Service(void)
{
uint16_t Msg_Epm_nEng = 0 ;
uint32_t u32Result = 0 ;
uint16_t Fre = 0 ;
Msg_Epm_nEng = Get_ID_CF00400_Sig_Engine_speed();
TachoVariable.Valid = 0 ;
if(Msg_Epm_nEng > 0xFAFF)
{//abnormal
u32Result = 0 ;
}
else if(Msg_Epm_nEng > 0x5DC0)
{
u32Result = 3000u ;
}
else
{
TachoVariable.Valid = 1 ;
u32Result = Msg_Epm_nEng ;
u32Result *= 125u ;
u32Result += 500u ;
u32Result /= 1000u ;
}
if(u32Result > 3000u)
{
u32Result = 3000u ;
}
TachoVariable.Value = RevSpeedManage((uint16_t)u32Result);
TachoVariable.CurSeg = CalTacho_CurSeg(TachoVariable.Valid,TachoVariable.Value);
//转*每转脉冲数/60=频率
u32Result *= 4 ;
u32Result /= 60 ;
Fre = (uint16_t)u32Result ;
RTE_PWM_Set_Tacho_Out(Fre,500) ;
}
/*-------------------------------------------------------------------------
* Function Name : Tacho_Display
* Description : 计算转速当前格
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
static uint8_t CalTacho_CurSeg(uint8_t Valid,uint16_t Value)
{
uint8_t u8Result = 0u;
if(Valid)
{
}
else
{
//范围外/CAN中断
}
SetGaugesPara(RevGauges,Value);
u8Result = GetGaugesCurrentPos(RevGauges) ;
return u8Result ;
}
/*-------------------------------------------------------------------------
* Function Name : Tacho_Get_ActualValue
* Description : 1倍转速
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
uint16_t Tacho_Get_ActualValue(void)
{
uint16_t u16Result = 0u;
u16Result = TachoVariable.Value ;
return u16Result;
}
/*-------------------------------------------------------------------------
* Function Name : Tacho_Get_Valid
* Description :
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
uint8_t Tacho_Get_Valid(void)
{
uint8_t u8Result = 0u;
u8Result = TachoVariable.Valid ;
return u8Result;
}
/*-------------------------------------------------------------------------
* Function Name : Tacho_Get_CurSeg
* Description : 转速当前格
* Input : None
* Output : None
* Return : None
* onther : 应用于断码
--------------------------------------------------------------------------*/
uint8_t Tacho_Get_CurSeg(void)
{
return TachoVariable.CurSeg ;
}
#ifndef DATA_ENGINESPEED_H
#define DATA_ENGINESPEED_H
#include "TYW_stdint.h"
extern void Tacho_KL30_Init(void);
extern void Tacho_KL15_ON_Init(void);
extern void Tacho_KL15_OFF_Init(void);
extern void Tacho_Wakeup_Init(void);
extern void Tacho_Sleep_Init(void);
extern void Tacho_Processing_Service(void);
extern uint16_t Tacho_Get_ActualValue(void);
extern uint16_t Tacho_Get_Display_Value(void);
extern uint8_t Tacho_Get_Valid(void);
extern uint8_t Tacho_Get_CurSeg(void);
#endif
This diff is collapsed.
#ifndef DATA_FUEL_USER_H
#define DATA_FUEL_USER_H
#include "TYW_stdint.h"
extern void Fuel_User_KL30_Init(void);
extern void Fuel_User_KL15_ON_Init(void);
extern void Fuel_User_KL15_OFF_Init(void);
extern void Fuel_User_Wakeup_Init(void);
extern void Fuel_User_Sleep_Init(void);
extern void Fuel_User_KL15_ON_Processing_Service(void);
extern void Fuel_User_KL15_OFF_Processing_Service(void);
extern uint8_t Fuel_Get_CurSeg(void) ;
extern uint8_t Fuel_Get_Percent(void) ;
extern uint16_t Fuel_Get_Res(void) ;
extern uint16_t Fuel_Get_Step(void) ;
extern uint8_t Fuel_Get_LowAlarm(void);
#endif
#ifndef _FUELCONFIG_H
#define _FUELCONFIG_H
typedef unsigned short INT16U;
typedef unsigned char INT8U;
typedef unsigned int INT32U;
#define DISPLAY_BOUNDARY_ES 2300
#define DISPLAY_BOUNDARY_1 2060
#define DISPLAY_BOUNDARY_2 1850
#define DISPLAY_BOUNDARY_3 1570
#define DISPLAY_BOUNDARY_4 1430
#define DISPLAY_BOUNDARY_5 1130
#define DISPLAY_BOUNDARY_6 970
#define DISPLAY_BOUNDARY_7 550
#define DISPLAY_BOUNDARY_8 460
#define DISPLAY_BOUNDARY_9 460
#define DISPLAY_BOUNDARY_10 460
#define DISPLAY_BOUNDARY_11 460
#define DISPLAY_BOUNDARY_12 460
#define DISPLAY_BOUNDARY_FS 460
#define BOUNDARY_FUEL_ES 0
#define BOUNDARY_FUEL_1 70
#define BOUNDARY_FUEL_2 130
#define BOUNDARY_FUEL_3 190
#define BOUNDARY_FUEL_4 250
#define BOUNDARY_FUEL_5 310
#define BOUNDARY_FUEL_6 370
#define BOUNDARY_FUEL_7 440
#define BOUNDARY_FUEL_8 510
#define BOUNDARY_FUEL_9 510
#define BOUNDARY_FUEL_10 510
#define BOUNDARY_FUEL_11 510
#define BOUNDARY_FUEL_12 510
#define BOUNDARY_FUEL_FS 510
#define FUEL_R_MIN_VAL 300 //10 X ohm
#define FUEL_R_MAX_VAL 2700 //10 X ohm
//Fuel Config
typedef struct _FuelStruct {
INT16U FuelShortCircuitR;
INT16U FuelOpenCircuitR;
INT16U DisplayZoneBoundary[22];
INT16U FuelCapacityBoundary[22];
}FuelStruct;
extern void InitFuelParamter(FuelStruct *para);
extern INT8U* GetFuelLibVersion(void);
extern void FuelFSM(INT16U FuelResistance); //unit:ohm,accuracy:0.1
extern void SetMaxFuelBlockNum(INT8U n); //call after InitFuelParamter(),default 12,max 20
extern void SetFuelSensorRecoverGroupCnt(INT16U n); //1:500ms,2:1000ms,3:1500ms.......,range:5s(10)-30min(3600)
extern void SetFuelSensorOpenCircuitGroupCnt(INT16U n); //1:500ms,2:1000ms,3:1500ms.......,range:5s(10)-30min(3600)
extern void SetFuelSensorShortCircuitGroupCnt(INT16U n); //1:500ms,2:1000ms,3:1500ms.......,range:5s(10)-30min(3600)
extern void SetPowerSt(INT8U n);
extern INT8U GetFuelSeg(void); //Segment, range:0~8
extern INT8U GetFuelStep(void); //Pointer or Mono TFT stepless,range:0,10~((MaxFuelBlockNum + 1) * 10) 0,10:E, ((MaxFuelBlockNum + 1) * 10):F
extern INT16U GetFuelCapacityVal(void); //unit:L,accuracy:0.1
enum {
FuelSensorNormal,
FuelSensorShortCircuit,
FuelSensorOpenCircuit,
FuelSensorPreFault,
};
extern INT8U GetFuelSensorState(void);
enum {
FUEL_ST_IGN_ON_PROCESS = 1, //1
FUEL_ST_POWER_ON_ADD_FUEL, //2
FUEL_ST_VEHICLE_RUN, //3
FUEL_ST_IGN_OFF_PROCESS, //4
FUEL_ST_IGN_OFF, //5
};
extern INT8U GetFuelFSM_St(void);
extern INT16U GetFuelResistance(void); //unit:ohm,accuracy:0.1
extern void SetPowerDnStep(INT8U step); //call every ign on (after InitFuelParamter())
extern INT8U GetPowerDnStep(void); //every 10km or ign off or refuel(FUEL_ST_POWER_ON_ADD_FUEL->FUEL_ST_VEHICLE_RUN) record
// AFC & DrivingRange
typedef struct _AFC_INIT {
INT8U CalcAFCMaxNum; //max 100km,default 50
INT16U AFCMin; //unit:L,accuracy:0.1
INT16U AFCMax; //unit:L,accuracy:0.1
INT16U AFCPreinstall; //unit:L,accuracy:0.1
INT32U CurODO; // unit:m,accuracy:1
INT32U MaxDRMileage; //unit:km,accuracy:0.01
}AFC_INIT;
extern void InitAFC(AFC_INIT *data);
extern void ResetAFC(AFC_INIT *data);
typedef struct _AFC_PARA {
INT32U CurODO; // unit:m,accuracy:1
INT16U FuleConsume; // unit:ul,accuracy:1
INT16U RPM; // unit:RPM,accuracy:1
INT8U Speed; // unit:km/h,accuracy:1
}AFC_PARA;
extern void SetAFCPara(AFC_PARA *data);
typedef struct _DAFC_PARA{
INT32U DAFC_FuelConsumeSum; //unit:ul (ul:m->ml:km->L:1000km)
INT32U DAFC_ODO; //unit:m
}DAFC_PARA;
extern void DAFC_GetPowerDownPara(DAFC_PARA *data); //call every 10km or ign off or reset afc
extern void DAFC_SetPowerDownPara(DAFC_PARA *data); //call every KL30 OFF -> KL30 ON (after InitAFC())
typedef struct _DR_PARA{
INT32U DR_FuelConsumeSum; //unit:ul (ul:m->ml:km->L:1000km)
INT32U DR_Mileage; //unit:km,accuracy:0.01
}DR_PARA;
extern void DR_GetPowerDownPara(DR_PARA *data); //call every 10km or ign off
extern void DR_SetPowerDownPara(DR_PARA *data); //call every KL30 OFF -> KL30 ON (after InitAFC())
extern void AFCTimerCall(void); //must per 10ms interrupt
extern INT16U GetDRMileage(void); //unit:km,accuracy:1
extern INT16U GetCurAFC(void); //unit:L,accuracy:0.1
//display afc
extern void DAFC_Reset(AFC_INIT *data);
extern INT16U DAFC_GetAFC(void); //unit:L,accuracy:0.1
//display afc end
#endif
File added
This diff is collapsed.
/**********************************************************************************************************
* @file Data_FuelConsump.h
* @author qitiancun
* @version V1.0.0
* @date 2020.04.21
* @brief c header file
********************************************************************************************************/
#include "TYW_stdint.h"
#ifndef _DATA_FUELCONSUMP_H_
#define _DATA_FUELCONSUMP_H_
extern uint32_t OldTotalFuel_Trip;
extern uint8_t EngineType;
extern uint32_t OldTotalFuel_Comprehensive;
extern uint32_t OldTotalFuel_ThisTime;
extern uint32_t OldOdo_ThisTime;
extern void Fuel_Consump_K15_Init(void);
extern void Fuel_Consump_K30_Init(void);
/*综合油耗*/
extern void Data_FuelCounsComprehensive(void);
extern uint32_t Get_FuelCounsComprehensive_ToalFuelLitre(void);
extern uint32_t Get_FuelCounsComprehensive_ODO(void);
extern uint16_t Get_FuelCounsComprehensive_Value(void);
extern uint32_t Get_FuelCounsComprehensive_RunTime(void);
/*小计油耗*/
extern void Data_FuelCounsumpTrip(void);
extern void Rest_FuelCounsumpTrip_Data(void);
extern uint32_t Get_FuelCounsumpTrip_ToalFuelLitre(void);
extern uint32_t Get_FuelCounsumpTrip_ODO(void);
extern uint16_t Get_FuelCounsumpTrip_Value(void);
/*本次油耗*/
extern void Data_FuelCounsumpThisTime(void);
extern void Rest_FuelCounsumpThisTime_Data(void);
extern uint32_t Get_FuelCounsumpThisTime_ToalFuelLitre(void);
extern uint32_t Get_FuelCounsumpThisTime_ODO(void);
extern uint16_t Get_FuelCounsumpThisTime_Value(void);
/*加油油行车信息*/
extern void Data_Info_Last_Refueling(void);
extern void Rest_Refueling_Data(void);
extern uint16_t Get_Refueling_AVF(void);
extern uint32_t Get_Refueling_Trip(void);
extern uint32_t Get_Refueling_ToalFuelLitre(void);
#endif
\ No newline at end of file
#include "Data_Gear.h"
#include "Flash_synchronizer.h"
#include "CAN_Communication_Matrix.h"
#include "Common_Interface.h"
#include "images.h"
#include "CAN_Lib.h"
#include "GaugesInterface.h"
#include "Gauges.h"
/******************************************************************************
Function:Data_Gear_KL30_Init
Description:该服务函数首次KL30时调用一次
Input:
Output:
******************************************************************************/
void Data_Gear_KL30_Init(void)
{
}
/******************************************************************************
Function:Data_Gear_KL15_Init
Description:该服务函数首次KL15时调用一次
Input:
Output:
******************************************************************************/
void Data_Gear_KL15_Init(void)
{
}
/******************************************************************************
Function:Data_Service_Gear_Processing
Description:如果有特殊数据处理在此函数中进行处理
Input:
Output:
******************************************************************************/
void Data_Service_Gear_Processing(void)
{
Gear_Processing_Service();
}
/******************************************************************************
Function:Get_Gear_Mode_Type
Description:Get Gear P/R/N/D/M/S
Input:
Output: P/R/N/D/M/S
******************************************************************************/
uint8_t Get_Gear_Mode_Type(void)
{
}
/******************************************************************************
Get_Gear_Mode_UPDOWN_Number
Description:Get Gear 1/2/3/4/...
Input:
Output: 1/2/3/4/...
******************************************************************************/
uint8_t Get_Gear_Mode_UPDOWN_Number(void)
{
}
/******************************************************************************
Function:Get_Gear_Mode_Up_Down
Description:Get Gear UP/DOWN
Input:
Output: UP/DOWN
******************************************************************************/
uint8_t Get_Gear_Mode_Up_Down(void)
{
}
/******************************************************************************
Function:Gear_Mode_Display
Description:
Input:
Output:
******************************************************************************/
uint8_t Get_Gear_Mode_Display_Flash(void)
{
uint8_t Gear_Status = 0u;
Gear_Status = FlashSync1Hz;
return (uint8_t)Gear_Status ;
}
uint8_t Get_Gear_Mode_M_A_Display(void)
{
}
uint8_t Get_Gear_Mode_P_E_Display(void)
{
}
uint8_t Get_Gear_Mode_L_C_Display(void)
{
}
//-------------------------------------------
//档位 数据处理 zhouhang
//-------------------------------------------
//区域7显示逻辑
//-------------------------------------------
//344 - 3.2.档位显示
//-------------------------------------------
static struct
{
uint8_t Number ;//档位编号
en_GEAR_Sta Manual ;//是否 M A N U A L
}GearVariable ;
/*-------------------------------------------------------------------------
* Function Name : Gear_KL30_Init
* Description :
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
void Gear_KL30_Init(void)
{
GearVariable.Number = 0u;
GearVariable.Manual = GEAR_MANUAL_OFF;
}
void Gear_KL15_ON_Init(void)
{
GearVariable.Number = 0u;
GearVariable.Manual = GEAR_MANUAL_OFF;
}
void Gear_KL15_OFF_Init(void)
{
GearVariable.Number = 0u;
GearVariable.Manual = GEAR_MANUAL_OFF;
}
void Gear_Wakeup_Init(void)
{
GearVariable.Number = 0u;
GearVariable.Manual = GEAR_MANUAL_OFF;
}
void Gear_Sleep_Init(void)
{
GearVariable.Number = 0u;
GearVariable.Manual = GEAR_MANUAL_OFF;
}
/*-------------------------------------------------------------------------
* Function Name : Gear_Processing_Service
* Description :
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
void Gear_Processing_Service(void)
{
uint8_t can1_4_1_8 = 0 ; //***************************************** 接收报文的变量
uint8_t can2_1_5_2 = 0 ; //***************************************** 接收报文的变量
uint8_t can3_3_7_2 = 0 ; //***************************************** 接收报文的变量
uint8_t can4_5_1_8 = 0 ; //***************************************** 接收报文的变量
uint8_t can5_1_7_2 = 0 ; //***************************************** 接收报文的变量
uint8_t u8Number = 0 ; //************************************** 档位 编号
en_GEAR_Sta u8Manual = GEAR_MANUAL_OFF ; //******************** 是否MANUAL
can1_4_1_8 = Get_ID_18F00503_Sig_Current_Gear(); //can1_4_1_8含义是: byte 4 bit 1 length 8
can2_1_5_2 = Get_ID_18FF8503_Sig_Manouvering_mode();
can3_3_7_2 = Get_ID_18FE4A03_Sig_TransmissionSiftMode1_Indicator();
can4_5_1_8 = Get_ID_18F00503_Sig_ID18F00503_byte5();
can5_1_7_2 = Get_ID_18FF8503_Sig_Automatic_or_Manual_Mode();
if(/*Get_CanFirstRecv_Event(ID_CanMsg18F00503_Msg_Count) == 0*/ 0u)
{
u8Number = 0u;
u8Manual = GEAR_MANUAL_OFF;
}
else if (CAN_MSG_Status(ID_CanMsg18F00503_Msg_Count) == CAN_SIG_LOST)
{
u8Number = 20u;
u8Manual = GEAR_MANUAL_OFF;
}
else
{
if((can1_4_1_8 == 0x7E) && (can2_1_5_2 != 0x01))//档位1
{
u8Number = 1u;
}
else if(can1_4_1_8 == 0x7F)//档位2
{
u8Number = 2u;
}
else if(can1_4_1_8 == 0x80)//档位3
{
u8Number = 3u;
}
else if(can1_4_1_8 == 0x81)//档位4
{
u8Number = 4u;
}
else if(can1_4_1_8 == 0x82)//档位5
{
u8Number = 5u;
}
else if(can1_4_1_8 == 0x83)//档位6
{
u8Number = 6u;
}
else if(can1_4_1_8 == 0x84)//档位7
{
u8Number = 7u;
}
else if(can1_4_1_8 == 0x85)//档位8
{
u8Number = 8u;
}
else if(can1_4_1_8 == 0x86)//档位9
{
u8Number = 9u;
}
else if(can1_4_1_8 == 0x87)//档位10
{
u8Number = 10u;
}
else if(can1_4_1_8 == 0x88)//档位11
{
u8Number = 11u;
}
else if(can1_4_1_8 == 0x89)//档位12
{
u8Number = 12u;
}
else if(can1_4_1_8 == 0x7B)//档位R2
{
u8Number = 13u;
}
else if((can1_4_1_8 == 0x7C) && (can2_1_5_2 != 0x01))//档位R1
{
u8Number = 14u;
}
else if((can1_4_1_8 == 0x7D) && (can3_3_7_2 != 0x01))//档位N
{
u8Number = 15u;
}
else if((can1_4_1_8 == 0x7C) && (can2_1_5_2 == 0x01))//档位RM
{
u8Number = 16u;
}
else if((can1_4_1_8 == 0x7E) && (can2_1_5_2 == 0x01))//档位DM
{
u8Number = 17u;
}
else if((can1_4_1_8 == 0x7D) && (can3_3_7_2 == 0x01))//档位E
{
u8Number = 18u;
}
else if((can4_5_1_8 == 0x7D) && (can3_3_7_2 == 0x01))//档位NE
{
u8Number = 19u;
}
else//档位——
{
u8Number = 20u;
}
if (CAN_MSG_Status(ID_CanMsg18FF8503_Msg_Count) == CAN_SIG_LOST)
{
u8Manual = GEAR_MANUAL_OFF;
}
else if(can5_1_7_2 == 0x00)
{
u8Manual = GEAR_MANUAL_ON;
}
else
{
u8Manual = GEAR_MANUAL_OFF;
}
}
GearVariable.Number = u8Number ;
GearVariable.Manual = u8Manual ;
}
/*-------------------------------------------------------------------------
* Function Name : Gui_Get_Gear
* Description : 返回当前 档位
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
uint8_t Gui_Get_Gear(void)
{
uint8_t u8Result = 0u;
u8Result = GearVariable.Number;
return u8Result;
}
/*-------------------------------------------------------------------------
* Function Name : Gui_Get_Gear_MANUAL
* Description : 返回当前档位栏MANUAL标志是否点亮
* Input : None
* Output : None
* Return : None
* onther : None
--------------------------------------------------------------------------*/
en_GEAR_Sta Gui_Get_Gear_MANUAL(void)
{
en_GEAR_Sta u8Result = GEAR_MANUAL_OFF;
u8Result = GearVariable.Manual;
return u8Result;
}
#ifndef DATA_GEAR_H
#define DATA_GEAR_H
#include "TYW_stdint.h"
#define DATA_GEAR_P 0x0Bu
#define DATA_GEAR_R 0x09u
#define DATA_GEAR_N 0x0Au
#define DATA_GEAR_D 0x01u
#define DATA_GEAR_N_FLASH 0x0Cu
#define DATA_GEAR_P_FLASH 0x08u
#define DATA_GEAR_1 0x01u
#define DATA_GEAR_2 0x02u
#define DATA_GEAR_3 0x03u
#define DATA_GEAR_4 0x04u
#define DATA_GEAR_5 0x05u
#define DATA_GEAR_6 0x06u
#define DATA_GEAR_7 0x07u
#define DATA_GEAR_8 0x08u
#define DATA_GEAR_UP 0x01u
#define DATA_GEAR_DOWN 0x02u
#define DATA_GEAR_UP_FLASH 0x03u
typedef enum
{
GEAR_MANUAL_OFF = 0 ,
GEAR_MANUAL_ON ,
}en_GEAR_Sta ;
void Gear_KL30_Init(void);
void Gear_KL15_ON_Init(void);
void Gear_KL15_OFF_Init(void);
void Gear_Wakeup_Init(void);
void Gear_Sleep_Init(void);
void Gear_Processing_Service(void);
uint8_t Gui_Get_Gear(void);
en_GEAR_Sta Gui_Get_Gear_MANUAL(void);
typedef enum
{
DIS_DATA_GEAR_P = 0,
DIS_DATA_GEAR_R,
DIS_DATA_GEAR_N,
DIS_DATA_GEAR_D,
DIS_DATA_GEAR_M,
DIS_DATA_GEAR_L,
DIS_DATA_GEAR_S,
DIS_DATA_GEAR_E,
DIS_DATA_GEAR_1,
DIS_DATA_GEAR_2,
DIS_DATA_GEAR_3,
DIS_DATA_GEAR_4,
DIS_DATA_GEAR_5,
DIS_DATA_GEAR_6,
DIS_DATA_GEAR_7,
DIS_DATA_GEAR_8,
DIS_DATA_GEAR_N_FLASH,
DIS_DATA_GEAR_P_FLASH,
DIS_DATA_GEAR_BLANK,
DIS_DATA_GEAR_UP,
DIS_DATA_GEAR_DOWN,
DIS_DATA_GEAR_UPDOWN,
DIS_DATA_GEAR_UP_FLASH,
DIS_DATA_GEAR_DOWN_FLASH,
DIS_DATA_GEAR_VALID_INVALID,
} DATA_GEAR_VALUE;
void Data_Gear_KL30_Init(void);
void Data_Gear_KL15_Init(void);
void Data_Service_Gear_Processing(void);
uint8_t Get_Gear_Mode_Type(void);
uint8_t Get_Gear_Mode_Number(void);
uint8_t Get_Gear_Mode_UPDOWN_Number(void);
uint8_t Get_Gear_Mode_Up_Down(void);
uint8_t Get_Gear_Mode_Display_Flash(void);
uint8_t Get_Gear_Mode_M_A_Display(void);
uint8_t Get_Gear_Mode_P_E_Display(void);
uint8_t Get_Gear_Mode_L_C_Display(void);
#endif
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
#ifndef __SERVICE_ODO_USER_H__
#define __SERVICE_ODO_USER_H__
#include "TYW_stdint.h"
#include "Services_Mileage.h"
#define ONLY_CLEAR_ODO_MIL 0x01u /*仅根据距离信息进行ODO清除*/
//#define ONLY_CLEAR_ODO_NUM 0x01u /*仅根据次数信息进行ODO清除*/
//#define CLEAR_ODO_NUM_MIL 0x01u /*以距离信息以及次数信息进行ODO清除*/
#define ODO_CLEAR_NUM 5u /*清除次数上限值 */
#define ODO_CLEAR_MIL 50000u /*清除距离上限值 单位0.1KM*/
void Data_User_Mileage_KL30Init(void);
void Data_User_Mileage_KL15Init(void);
void Data_ODO_Clear_KL30Init(void);
void Data_ODO_Clear_KL15Init(void);
void Data_ODO_Clear_Mileage_Num(void);
void TYW_Data_ODO_Clear(void);
void Data_User_EEPROM_Read(uint16_t u16BlockID, uint32_t u32Data[], uint16_t u16Len);
void Data_User_EEPROM_Write(Data_EEPROM_Enum_t BlockID, uint32_t u32Data[], uint16_t u16Len);
#endif
This diff is collapsed.
File added
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment