#include "DisplaySch_user.h" #include "Common_Interface.h" #include "DispSch.h" #include "Popup_Scheduler.h" #include "Popup_List.h" #include "Key.h" #include "CAN_Lib.h" #include "GUI.h" #include "Services_ODO_User.h" /*清空总计里程函数*/ #include "Menu.h" #include "jcua.h" #include "kwp2000_service.h" uint32_t EnterTimer[10]; uint8_t UE_EN[Display_MAX]; #pragma alignvar(8) #pragma ghs section bss = default uint8_t Mem[32]; #pragma ghs section bss = default #pragma ghs section bss = ".myNonInitArea" UE_CtrlInfo_Struct_t UE_CtrlInfo; uint8_t BG_display_flag; #pragma ghs section bss = default uint16_t HMI_StartAnimationFrameCnt; uint8_t backgroundOFFFlag; static void switch_branch(void); uint8_t Get_Pwr(void) { return Common_Get_IG_Sts(); } uint32_t Get_IG_ON(void) { return Common_GetIgnOnTime(); } uint32_t Get_IG_Off(void) { return Common_GetIgnOffTime(); } static const DispSch_Attr_st loc[] = { {&UE_EN[Display_StartAnimation], UE_IGN_ON , Display_StartAnimation, ((void *)0), Display_StartAnimationEnter, Display_StartAnimationService, Display_StartAnimationExit}, {&UE_EN[Display_Menu] , UE_IGN_ON , Display_Menu , ((void *)0), Display_MenuEnter , Display_MenuService , ((void *)0)}, {&UE_EN[Display_Alarm] , UE_IGN_ON , Display_Alarm , ((void *)0), Display_AlarmEnter , Display_AlarmService , ((void *)0)}, {&UE_EN[Display_Nothing] , UE_IGN_OFF, Display_Nothing , ((void *)0), Display_NothingEnter , Display_NothingService , ((void *)0)}, }; void DispSch_TotalInit(void) { uint8_t i; DispSch_Ext_st m_st; m_st.Get_Power = Get_Pwr; m_st.Get_IG_ON_Timer = Get_IG_ON; m_st.Get_IG_OFF_Timer = Get_IG_Off; m_st.Get_IG_OFF_Timer = Get_IG_Off; m_st.TotalSize = Display_MAX; DispSch_Init(Mem, loc, &m_st, 0u); for (i = 0u; i < Display_MAX; i++) { UE_EN[i] = UE_Disable; } if (BG_display_flag == 0u) { BG_display_flag = 1u; MenuFlag.Menu_Popup_Flag = 0u ; MenuInit(); } } void DisplayServices(void) { uint32_t PowerOnTimer; uint32_t PowerOFFTimer; uint8_t PowerStatus; uint32_t Get_Menu_Off_Time = 0u; uint16_t popupID = 0xFFFFu; PowerStatus = Common_Get_IG_Sts(); PowerOnTimer = Common_GetIgnOnTime(); PowerOFFTimer = Common_GetIgnOffTime(); Get_Menu_Off_Time = Coom_Get_Menu_Off_Time(); if ((PowerOnTimer <= StartAnimationEnd) && (PowerOnTimer >= StartAnimationStart)) { UE_EN[Display_StartAnimation] = UE_Enable; UE_EN[Display_Menu] = UE_Disable; UE_EN[Display_Alarm] = UE_Disable; UE_EN[Display_Nothing] = UE_Disable; } else { /*获取四种模式*/ Meter_Mode_conversion(); if ((K_Line_Set.K_Line_LID51 == 0x01u) && (MenuFlag.Menu_Test != 1u)) { popupID = Popup_Get_Current_Message(); } if ((popupID != 0xffffu) && (MenuFlag.Key_Menu_Popup_time == 0x00u)) { UE_EN[Display_Alarm] = UE_Enable; if (PowerStatus == COMMON_POWER_ON) { ; /*不处理*/ } else { UE_EN[Display_Nothing] = UE_Disable; } } else { if (MenuFlag.Key_Menu_Popup_time != 0x00u) { MenuFlag.Key_Menu_Popup_time--; } else { ; /*Do Nothing!*/ } UE_EN[Display_Alarm] = UE_Disable; if (PowerStatus == COMMON_POWER_ON) { UE_EN[Display_Menu] = UE_Enable; } else { if ((State_Flag.Menu_Key_Static == 1u) && (Get_Menu_Off_Time < 150000)) { UE_EN[Display_Menu] = UE_Enable; UE_EN[Display_Nothing] = UE_Disable; } else { UE_EN[Display_Menu] = UE_Disable; UE_EN[Display_Nothing] = UE_Enable; } } } } DispSch_xxxMs_Logic(10u); /*上短*/ if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_UP == KEY_EVENT_SHORT_PRESS) { HMI_Clear_KEY_UP(); } /*上长*/ else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_UP == KEY_EVENT_LONG_PRESS) { HMI_Clear_KEY_UP(); } /*下短*/ else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_DOWN == KEY_EVENT_SHORT_PRESS) { HMI_Clear_KEY_DOWN(); } /*下长*/ else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_DOWN == KEY_EVENT_LONG_PRESS) { HMI_Clear_KEY_DOWN(); } /*确认短*/ else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_CONFIRM == KEY_EVENT_SHORT_PRESS) { HMI_Clear_KEY_CONFIRM(); } /*确认长*/ else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_CONFIRM == KEY_EVENT_LONG_PRESS) { HMI_Clear_KEY_CONFIRM(); } /*确认超长 15 S*/ else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_CONFIRM == KEY_EVENT_SUPER_LONG_PRESS) { HMI_Clear_KEY_CONFIRM(); /*TYW总计清零*/ TYW_Data_ODO_Clear(); } /*返回短*/ else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_CANCEL == KEY_EVENT_SHORT_PRESS) { HMI_Clear_KEY_CANCEL(); } /*返回长*/ else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_CANCEL == KEY_EVENT_LONG_PRESS) { HMI_Clear_KEY_CANCEL(); } /*MENU短*/ else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_MENU == KEY_EVENT_SHORT_PRESS) { HMI_Clear_KEY_MENU(); } /*MENU长*/ else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_MENU == KEY_EVENT_LONG_PRESS) { HMI_Clear_KEY_MENU(); } else { ; /*do nothing*/ } /*ODOTrip短*/ if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_ODOTRIP == KEY_EVENT_SHORT_PRESS) { HMI_Clear_KEY_ODOTRIP(); } /*ODOTrip长*/ else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_ODOTRIP == KEY_EVENT_LONG_PRESS) { HMI_Clear_KEY_ODOTRIP(); } /*ODO off-to-on*/ else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_ODOTRIP == KEY_EVENT_OFF_TO_ON) { HMI_Clear_KEY_ODOTRIP(); } else { ; /*do nothing*/ } } /*----开机动画----*/ void Display_StartAnimationEnter(void) { HMI_StartAnimationFrameCnt = 0u; backgroundOFFFlag = 0; /*硬清空所有缓存数据*/ loc_free_mem(MENU_Sprite, MENU_Sprite); /*使能底图窗口*/ JCUA_Enable_window(); } void Display_StartAnimationService(void) { uint16_t m16_FrameCnt; HMI_StartAnimationFrameCnt++; m16_FrameCnt = HMI_StartAnimationFrameCnt; if ((m16_FrameCnt % 4) == 0u) { GUI_Display_Animation_Frame(m16_FrameCnt / 4u); } } void Display_StartAnimationExit(void) { } uint16_t Common_GetHMI_StartAnimationFrameCnt(void) { return HMI_StartAnimationFrameCnt; } /*----菜单----*/ void Display_MenuEnter (void) { /*开机动画播放完毕使能底图窗口 二次使能窗口*/ JCUA_Enable_window(); /*使能PNG窗口*/ loc_Enable_Window_App(); /*刷底图*/ GUI_Display_background(); } void Display_MenuService(void) { } /*----报警----*/ void Display_AlarmEnter (void) { } void Display_AlarmService(void) { } /*----Nothing----*/ void Display_NothingEnter(void) { JCUA_Disable_window(); loc_Disable_Window_App( ); loc_free_mem(WET_Sprite, MENU_Sprite); } void Display_NothingService(void) { } void GUI_DisplayServices(void) { uint32_t PowerStatus = 0u; UElib_uint16_t HMI_MENU_Sta = 0u; HMI_MENU_Sta = Get_Cur_HMI(); PowerStatus = Common_Get_IG_Sts(); if (HMI_MENU_Sta == Display_Alarm) { loc_Del_Sprite(MENU_Sprite, MENU_Sprite); if (Common_Get_window_Sta() != 1u) { JCUA_Enable_window(); } if (MenuFlag.Menu_Popup_Flag == 0u) { MenuFlag.Menu_Popup_Flag = 1u; NextMenu(_MN_DSP_LEVEPOPUP); bCurMenuIDX = _MN_DSP_LEVEPOPUP; } } else if ((HMI_MENU_Sta == Display_Menu) || (HMI_MENU_Sta == Display_Nothing)) { if (PowerStatus == COMMON_POWER_ON) { if (MenuFlag.Menu_Factory == 1u) { MenuFlag.Menu_Factory = 0u; MenuFlag.Menu_Popup_Flag = 2u; NextMenu( _FAC_DSP_LEVEL0MENU_1 ); bCurMenuIDX = _FAC_DSP_LEVEL0MENU_1; } else if (MenuFlag.Menu_Dealer == 1u) { MenuFlag.Menu_Dealer = 0u; MenuFlag.Menu_Popup_Flag = 3u; NextMenu( _DEA_DSP_LEVEL0MENU_1 ); bCurMenuIDX = _DEA_DSP_LEVEL0MENU_1; } else if (MenuFlag.Menu_Test == 1u) { MenuFlag.Menu_Test = 0; MenuFlag.Menu_Popup_Flag = 4u; NextMenu( _MN_DSP_Menu_Test ); bCurMenuIDX = _MN_DSP_Menu_Test; } else if (MenuFlag.Menu_Popup_Flag == 1u) { MenuFlag.Menu_Popup_Flag = 0u; NextMenu( MenuFlag.Menu_Flag); bCurMenuIDX = MenuFlag.Menu_Flag; } if (((bCurMenuIDX > _MN_DSP_LEVEPOPUP) && (bCurMenuIDX < _MN_DSP_LEVEL3_5_MENU_1)) || (bCurMenuIDX >= _FAC_DSP_LEVEL0MENU_1)) { loc_Del_Sprite(ADAS_Sprite, Gear_Sprite); loc_Del_Sprite(MENU_Sprite, MENU_Sprite); if (Common_Get_window_Sta() != 0u) { JCUA_Disable_window(); } } else { loc_Del_Sprite(MENU_Sprite, MENU_Sprite); if (Common_Get_window_Sta() != 1u) { JCUA_Enable_window(); } } } else { ;/*Do Nothing!*/ //BG_display_flag = 0u; //NextMenu(_MN_DSP_Menu_OFF); } } if (HMI_MENU_Sta != Display_StartAnimation) { if (PowerStatus == COMMON_POWER_ON) { MenuManage(); } else { if (backgroundOFFFlag == 0u) { loc_Enable_Window_App(); GUI_Display_backgroundOFF(); loc_Del_Sprite(MENU_Sprite, MENU_Sprite); backgroundOFFFlag = 1u; } GUI_Time_OilTemp_OFF_Display(GUI_DISP_MODE_NORMAL); BG_display_flag = 0u; } } else { ; /*Do Nothing!*/ } } void HMI_Set_KEY_UP(uint8_t u8KeyVal) { UE_CtrlInfo.HMI_KEYInfo.u8KEY_UP = u8KeyVal; } void HMI_Set_KEY_DOWN(uint8_t u8KeyVal) { UE_CtrlInfo.HMI_KEYInfo.u8KEY_DOWN = u8KeyVal; } void HMI_Set_KEY_CONFIRM(uint8_t u8KeyVal) { UE_CtrlInfo.HMI_KEYInfo.u8KEY_CONFIRM = u8KeyVal; } void HMI_Set_KEY_CANCEL(uint8_t u8KeyVal) { UE_CtrlInfo.HMI_KEYInfo.u8KEY_CANCEL = u8KeyVal; } void HMI_Set_KEY_MENU(uint8_t u8KeyVal) { UE_CtrlInfo.HMI_KEYInfo.u8KEY_MENU = u8KeyVal; } void HMI_Set_KEY_ODOTRIP(uint8_t u8KeyVal) { UE_CtrlInfo.HMI_KEYInfo.u8KEY_ODOTRIP = u8KeyVal; } void HMI_Clear_KEY_UP(void) { UE_CtrlInfo.HMI_KEYInfo.u8KEY_UP = 0u; } void HMI_Clear_KEY_DOWN(void) { UE_CtrlInfo.HMI_KEYInfo.u8KEY_DOWN = 0u; } void HMI_Clear_KEY_CONFIRM(void) { UE_CtrlInfo.HMI_KEYInfo.u8KEY_CONFIRM = 0u; } void HMI_Clear_KEY_CANCEL(void) { UE_CtrlInfo.HMI_KEYInfo.u8KEY_CANCEL = 0u; } void HMI_Clear_KEY_MENU(void) { UE_CtrlInfo.HMI_KEYInfo.u8KEY_MENU = 0u; } void HMI_Clear_KEY_ODOTRIP(void) { UE_CtrlInfo.HMI_KEYInfo.u8KEY_ODOTRIP = 0u; } void Meter_Mode_conversion(void) { uint16_t popupID = 0xFFFFu; uint16_t DispVSpeed = 0u; uint16_t DispESpeed = 0u; DispVSpeed = Common_Get_Disp_V_Speed(); DispESpeed = Common_Get_Act_E_Speed(); /*工厂模式*/ if (MenuFlag.Menu_Popup_Flag == 2u) { if (K_Line_Set.K_Line_LID51 == 0x01u) { popupID = Popup_Get_Current_Message(); if ((popupID != 0xffffu) && (MenuFlag.Key_Menu_Popup_time == 0x00u)) { MenuFlag.Menu_Popup_Flag = 0u; } else { MenuFlag.Menu_Popup_Flag = 1u; } } else if (K_Line_Set.K_Line_LID51 == 0x02u) { MenuFlag.Menu_Dealer = 1u; } else { ;/*Do Nothing!*/ } } /*经销商模式*/ else if (MenuFlag.Menu_Popup_Flag == 3u) { if (K_Line_Set.K_Line_LID51 == 0x01u) { popupID = Popup_Get_Current_Message(); if ((popupID != 0xffffu) && (MenuFlag.Key_Menu_Popup_time == 0x00u)) { MenuFlag.Menu_Popup_Flag = 0u; } else { MenuFlag.Menu_Popup_Flag = 1u; } } else if (K_Line_Set.K_Line_LID51 == 0x00u) { MenuFlag.Menu_Factory = 1u; } else { ;/*Do Nothing!*/ } } /*自检模式*/ else if (MenuFlag.Menu_Popup_Flag == 4u) { if ((DispVSpeed >= 66u) || (DispESpeed >= 330u)) { popupID = Popup_Get_Current_Message(); if ((popupID != 0xffffu) && (MenuFlag.Key_Menu_Popup_time == 0x00u)) { MenuFlag.Menu_Popup_Flag = 0u; } else { MenuFlag.Menu_Popup_Flag = 1u; } } else if (K_Line_Set.K_Line_LID51 == 0x02u) { MenuFlag.Menu_Dealer = 1u; } else { ;/*Do Nothing!*/ } } /*通常模式*/ else { /*进入自检模式*/ if ((MenuFlag.Key_MenuTest_Long == 1u) && (MenuFlag.Key_MenuTest_ShortNum >= 3u)) //if (MenuFlag.Key_MenuTest_ShortNum >= 3u) { MenuFlag.Menu_Test = 1u; MenuFlag.Key_MenuTest_Long = 0u; MenuFlag.Key_MenuTest_ShortNum = 0u; } else if (K_Line_Set.K_Line_LID51 == 0x00u) { MenuFlag.Menu_Factory = 1u; } else if (K_Line_Set.K_Line_LID51 == 0x02u) { MenuFlag.Menu_Dealer = 1u; } else { if (DispVSpeed > 66u) { if ((bCurMenuIDX >= _MN_DSP_LEVEL2MENU_1) && (bCurMenuIDX <= _MN_DSP_MENU_MAX)) { NextMenu(MenuFlag.Menu_Flag); } } else { ; /*Do Nothing!*/ } } } }