#include "Key\Key_user.h" #include "Application.h" #include "Components.h" __align(4) #define BACK_MENU_TIME 1500 _Menu_Infor MenuInfor; _Menu_Data MenuData; uint8_t PageType = 0; uint8_t PageMenu = 0; RTC_TimeTypeDef RTC_TimeStruct; RTC_DateTypeDef RTC_DateStruct; RTC_CounterTypeDef counter_val; void Key_Operation_Left(Key_Event_en_t enKeyEvent)//Mode { switch (enKeyEvent) { case KEY_EVENT_SHORT_PRESS_1://1s Key_Left_Short_Press(); break; case KEY_EVENT_SHORT_PRESS_2://3-5s Key_Left_Long_Press(); break; case KEY_EVENT_LONG_PRESS_1: //7 break; case KEY_EVENT_LONG_PRESS_2: //8 break; case KEY_EVENT_LONG_PRESS_3: //9s break; case KEY_EVENT_LONG_PRESS_4: //10s Maintain_Reset_Service(); if((PageMenu == Page_TCS) && (PageType == Page_Menu)) { if(Get_Dis_Tcs_Val() == 0) { MenuData.Tcs_Val = 1;//on } else { MenuData.Tcs_Val = 0;//off } } if((PageMenu == Page_Trip) && (PageType == Page_Menu)) { Data_Clear_Trip_All(); } TYW_RESET_ODO(); break; case KEY_EVENT_OFF_TO_ON: break; case KEY_EVENT_ON_TO_OFF: break; case KEY_EVENT_NONE: KEY_LEFT_EVENT_NONE_Service(); break; default: break; } } void Key_Operation_Right(Key_Event_en_t enKeyEvent)//Set { switch (enKeyEvent) { case KEY_EVENT_SHORT_PRESS_1: break; case KEY_EVENT_SHORT_PRESS_2: break; case KEY_EVENT_LONG_PRESS_1: break; case KEY_EVENT_LONG_PRESS_2: break; case KEY_EVENT_LONG_PRESS_3: break; case KEY_EVENT_LONG_PRESS_4: break; case KEY_EVENT_OFF_TO_ON: break; case KEY_EVENT_ON_TO_OFF: break; case KEY_EVENT_NONE: break; default: break; } } /*---------------------------------------------------------------------------------------*/ Key_Status_en_t Key_Status_Read_Left(void) { Key_Status_en_t enKeyReal = KEY_REALTIME_LOOSEN; if (RTE_GPIO_Get_Level(Key_MCU_IN)) { enKeyReal = KEY_REALTIME_LOOSEN; } else { enKeyReal = KEY_REALTIME_PRESS; } return enKeyReal; } Key_Status_en_t Key_Status_Read_Right(void) { Key_Status_en_t enKeyReal = KEY_REALTIME_LOOSEN; // if (SYS_OPR_STAT_IGN_ON) // { // if (RTE_GPIO_Get_Level(SET_P_IN)) // { // enKeyReal = KEY_REALTIME_LOOSEN; // } // else // { // enKeyReal = KEY_REALTIME_PRESS; // } // } return enKeyReal; } /*---------------------------------------------------------------------------------------*/ const Key_Attribute_st_t stKeyAttribute[KEY_NUM_MAX] = { {KEY_NEED_DEBOUNCE_NORMAL, Key_Status_Read_Left, Key_Operation_Left}, //{KEY_NEED_DEBOUNCE_NORMAL, Key_Status_Read_Right, Key_Operation_Right}, //{KEY_NEED_DEBOUNCE_NORMAL, Key_Status_Read_FLIP, Key_Operation_FLIP}, //{KEY_NEED_DEBOUNCE_NORMAL, Key_Status_Read_ADJUST, Key_Operation_ADJUST}, }; /*---------------------------------------------------------------------------------------*/ Key_uint8_t u8KeyRamData[KEY_RAM_DATA_LEN]; void Key_KL30_Init_EXample(void) { Key_Init_st_t stKeyInitTem; Key_uint16_t i; for (i = 0; i < KEY_RAM_DATA_LEN; i++) { u8KeyRamData[i] = 0; } stKeyInitTem.u8KeyNum = KEY_NUM_MAX; stKeyInitTem.enKeyIGNRealStatus = KEY_IG_OFF; Key_KL30_Init(&u8KeyRamData[0], stKeyAttribute, &stKeyInitTem); Key_Parameter_Set_Short_Press_1_Time(50U,1000U); Key_Parameter_Set_Short_Press_2_Time(3000U,9000U); Key_Parameter_Set_Long_Press_1_Time(9100U); Key_Parameter_Set_Long_Press_2_Time(9200U); Key_Parameter_Set_Long_Press_3_Time(9300U); Key_Parameter_Set_Long_Press_4_Time(10000U); } void Key_Wakeup_Init_EXample(void) { Key_Init_st_t stKeyInitTem; stKeyInitTem.u8KeyNum = KEY_NUM_MAX; stKeyInitTem.enKeyIGNRealStatus = KEY_IG_OFF; Key_Wakeup_Init(&u8KeyRamData[0], stKeyAttribute, &stKeyInitTem); Key_Parameter_Set_Short_Press_1_Time(50U,1000U); Key_Parameter_Set_Short_Press_2_Time(3000U,9000U); //Key_Parameter_Set_Long_Press_1_Time(7000U); //Key_Parameter_Set_Long_Press_2_Time(8000U); //Key_Parameter_Set_Long_Press_3_Time(9000U); Key_Parameter_Set_Long_Press_4_Time(10000U); } void KEY_LEFT_EVENT_NONE_Service(void) { MenuInfor.Back_Time_Left++; if((MenuInfor.Back_Time_Left > BACK_MENU_TIME) &&(PageType != Page_Menu)) { MenuInfor.Back_Time_Left = BACK_MENU_TIME; MenuInfor.Back_Time_Left_Flag = 1; } } void Key_Clear_Time(void) { if(Key_Status_Read_Left() == KEY_REALTIME_PRESS) { MenuInfor.Back_Time_Left = 0; MenuInfor.Back_Time_Left_Flag = 0; } } void Key_Check_Service(void) { } void Key_Left_Short_Press(void) { uint8_t updataDir = 0u; uint8_t datmax = 0u; uint8_t datmin = 0u; if(PageType == Page_Menu) { if(PageMenu == Page_Odo) { PageMenu = Page_Trip; } else if(PageMenu == Page_Trip) { PageMenu = Page_DTC; } else if(PageMenu == Page_DTC) { PageMenu = Page_TCS; } else if(PageMenu == Page_TCS) { PageMenu = Page_Odo; } } if(PageType == Page_Time_Hour) { updataDir = 1; datmax = 23u; datmin = 0u; Menu_u8Data_Updata_Process(updataDir, datmax, datmin, 1u, (uint8_t*)&(counter_val.time.RTC_Hours)); } else if(PageType == Page_Time_Minute) { updataDir = 1; datmax = 59u; datmin = 0u; Menu_u8Data_Updata_Process(updataDir, datmax, datmin, 1u, (uint8_t*)&(counter_val.time.RTC_Minutes)); } else if(PageType == Page_Km_Unit) { if(Get_Dis_KM_Unit() == 0) { MenuData.KM_Unit = 1;//mile } else { MenuData.KM_Unit = 0;//km } Unit_Convert_Service(); } else if(PageType == Page_Tpms_Unit) { if(Get_Dis_Tpms_Unit() == 0) { MenuData.Tpms_Unit = 1;//psi } else { MenuData.Tpms_Unit = 0;//bar } Unit_Convert_Service(); } else { ; } } void Key_Auto_Save(void) { if((MenuInfor.Back_Time_Left_Flag == 1)) { if(PageType == Page_Time_Hour) { RTC_SetTime(&counter_val.time); } if(PageType == Page_Time_Minute) { RTC_SetTime(&counter_val.time); } PageType = Page_Menu ; } } void Key_Left_Long_Press(void) { if((PageType == Page_Menu) ) { PageType = Page_Time_Hour; } else if(PageType == Page_Time_Hour) { PageType = Page_Time_Minute; } else if(PageType == Page_Time_Minute) { PageType = Page_Km_Unit; } else if(PageType == Page_Km_Unit) { PageType = Page_Tpms_Unit; } else if(PageType == Page_Tpms_Unit) { PageType = Page_Menu; } else { ; } } void Menu_u8Data_Updata_Process(uint8_t updateDir , uint8_t datMax, uint8_t datMin, uint8_t datStep, uint8_t *dat) { uint8_t temp = *dat; if(datMax > datMin) { if(updateDir == 1u) { if(temp < datMax) { if((temp) <= (255u-datStep)) { temp += datStep; } } else { temp = datMin; } } else if(updateDir == 2u) { if(temp > datMin) { if(temp >= datStep) { temp -= datStep; } } else { temp = datMax; } } else { } } else { } *dat = temp; } void MenuData_Unit_Init(void) { MenuData.KM_Unit = 0; MenuData.Tpms_Unit = 0; MenuData.Tcs_Val = 1; } void MenuData_TCS_Init(void) { MenuData.Tcs_Val = 1; } uint8_t ClearODO_Flag = 0; void TYW_RESET_ODO(void) { uint8_t Clear_EE[1] = {0xff}; uint32_t EE_Count = 0U; if(SYS_OPR_STAT_IGN_ON) { if(ClearODO_Flag < 1) { if((Get_DispVechileSpeed() >= 1990)&&(Get_DispEngineSpeed() >= 12000)) { ClearODO_Flag = 1; Data_Mileage_Clear(); for(EE_Count = 0 ; EE_Count < 255; EE_Count++) { eeprom_WriteRecord(EE_Count, ( uint8_t * )&Clear_EE, 1); } } } } else { ClearODO_Flag = 0; } } void Maintain_Reset_Service(void) { if((Get_Data_Maintenace_Interval_Processing() == 0) && (PageMenu == Page_TCS) && (PageType == Page_Menu)) { Data_Maintenance_Interval_Reset(); } } uint8_t Get_Dis_Hour_Time(void) { return counter_val.time.RTC_Hours; } uint8_t Get_Dis_Minute_Time(void) { return counter_val.time.RTC_Minutes; } uint8_t Get_Current_PageType(void) { return PageType; } uint8_t Get_Current_PageMenu(void) { return PageMenu; } uint8_t Get_Dis_KM_Unit(void) { return MenuData.KM_Unit; //0km,1mile } uint8_t Get_Dis_Tpms_Unit(void) { return MenuData.Tpms_Unit; //0bar,1psi } uint8_t Get_Dis_Tcs_Val(void) { return MenuData.Tcs_Val; // 0 off, 1 on }