Commit 194cb60d authored by hu's avatar hu

按键移植完成,好使。

parent 367b6d72
......@@ -98,8 +98,9 @@
.\APP\GaugesMode\GaugesInterface.c
.\APP\GaugesMode\GaugesInterface.h
.\APP\Key\Key.h
.\APP\Key\Key.c
.\APP\Key\Key_user.c
.\APP\Key\Key_user.h
.\APP\Key\Key_V1.3_1441.a
.\APP\LINE_IN\Line_In.c
.\APP\LINE_IN\Line_In.h
.\APP\LINE_IN\Line_In_user.h
......
This diff is collapsed.
#ifndef KEY_H__
#define KEY_H__
#include "TYW_stdint.h"
/*
说明:
1、按键类型分为两类:
1)CAN按键。
2)单纯硬线按键,AD按键。
2、按键触发时间:
1)短按动作在抬手时触发、
2)长按动作(或超长按)在时间达到,按住时就可触发。
3)OFF到ON(或ON到OFF)在各个电源状态时按键按下时间满足后即可触发,不必抬手。
*/
/*所有按键枚举,目前最多支持8个按键*/
typedef enum
{
KEY_UP = 0U,
KEY_DOWN,
KEY_ENTER,
KEY_RETURN,
KEY_MENU,
KEY_ODOTRIP,
KEY_NUM_MAX,
} Key_Num_en_t;
/*--------------------------Do not modify the following--------------------------------*/
/*--------------------------Do not modify the following--------------------------------*/
/*--------------------------Do not modify the following--------------------------------*/
typedef enum
{
// KEY_TYPE_CAN = 0U, /*CAN按键。按键不需要消抖*/
// KEY_TYPE_LINE, /*硬线按键,包含AD按键。按键需要消抖*/
/*按键检测方式选择*/
KEY_NO_DEBOUNCE_RISE = 0U, /*按键不需要消抖,并且在无效状态切换到有效状态的上升沿触发按键动作*/
KEY_NO_DEBOUNCE_FALL, /*按键不需要消抖,并且在有效状态切换到无效状态的下降沿触发按键动作*/
KEY_NEED_DEBOUNCE_NORMAL, /*按键需要消抖,短按松手触发,长按,超超按,按住即可触发*/
KEY_TYPE_MAX,
} Key_Type_en_t;
/*按键相关设置返回状态*/
typedef enum
{
KEY_SET_OK = 0U,
KEY_SET_ERROR,
KEY_SET_MAX,
} Key_Set_en_t;
/*按键IG状态*/
typedef enum
{
KEY_IG_INVALID = 0U,
KEY_IG_OFF,
KEY_IG_ON,
} Key_IGN_en_t;
/*-----实时传入的键值--------*/
typedef enum
{
KEY_CAN_NONE = 0U, /*CAN按键时,按键无动作*/
KEY_CAN_SHORT_PRESS, /*CAN按键时,按键短按动作*/
KEY_CAN_LONG_PRESS, /*CAN按键时,按键长按动作*/
KEY_CAN_LONG_PRESS_NOT_RELEASE, /*CAN按键时,按键长按不松手动作,触发动作超长按*/
KEY_LINE_PRESS, /*硬线按键时,按键按下*/
KEY_LINE_LOOSEN, /*硬线按键时,按键松开*/
KEY_REAL_STATUS_MAX,
} Key_Real_Status_en_t;
/*按键支持的具体动作*/
typedef enum
{
KEY_EVENT_NONE = 0U,
KEY_EVENT_SHORT_PRESS,
KEY_EVENT_LONG_PRESS,
KEY_EVENT_SUPER_LONG_PRESS,
KEY_EVENT_OFF_TO_ON,
KEY_EVENT_ON_TO_OFF,
KEY_EVENT_MAX,
} Key_Event_en_t;
typedef struct
{
uint32_t u32KeyRAMAddr; /* 数据缓冲地址 */
uint16_t u16KeyRAMLen; /* 数据缓冲大小:以uint32_t为单位*/
} Key_RAM_Attribute_st_t;
typedef Key_Real_Status_en_t (*Key_Real_Status_Read)(void);
typedef void (*Key_Operation)(Key_Event_en_t enKeyEvent);
/*每个按键的属性*/
typedef struct
{
/*按键类型,是CAN的还是硬线的*/
Key_Type_en_t enKeyType;
/*获取按键实时状态的回调函数*/
Key_Real_Status_Read pfnKeyReadStatusCallBack;
/*按键触发动作的回调函数*/
Key_Operation pfnKeyOperationCallBack;
} Key_Attribute_st_t;
/*--------------------------------------------------------------------------------------------*/
extern const Key_Attribute_st_t stKeyAttribute[KEY_NUM_MAX];
/*------------------------------------------------------------------------------------*/
/*10ms调用一次*/
extern void Key_Service(void);
/*首次上电时调用一次即可*/
extern void Key_Init(void);
/*对于硬线按键而言,判断短按的时间参数*/
extern Key_Set_en_t Key_Parameter_Set_Short_Press_Time(uint16_t u16Time);
/*对于硬线按键而言,判断长按的时间参数*/
extern Key_Set_en_t Key_Parameter_Set_Long_Press_Time(uint16_t u16Time);
/*对于硬线按键而言,判断超长按的时间参数*/
extern Key_Set_en_t Key_Parameter_Set_Super_Long_Press_Time(uint16_t u16Time);
/*获取IG状态*/
extern Key_IGN_en_t Key_Get_IGN_Status(void);
extern uint8_t Common_Get_RetMenu_Flag(void);
#ifndef KEY_H__
#define KEY_H__
//#define KEY_PLATFORM_16BIT
#ifdef KEY_PLATFORM_16BIT
typedef unsigned char Key_uint8_t;
typedef unsigned int Key_uint16_t;
typedef unsigned long Key_uint32_t;
#else
typedef unsigned char Key_uint8_t;
typedef unsigned short Key_uint16_t;
typedef unsigned int Key_uint32_t;
typedef unsigned long long Key_uint64_t;
#endif
/*所有按键枚举*/
/*默认所有按键在任意电源状态下均可被触发*/
typedef enum
{
KEY_UP = 0U,
KEY_DOWN,
KEY_ENTER,
KEY_RETURN,
KEY_MENU,
KEY_ODOTRIP,
KEY_NUM_MAX,
} Key_Num_en_t;
/*--------------------------Do not modify the following--------------------------------*/
/*--------------------------Do not modify the following--------------------------------*/
/*--------------------------Do not modify the following--------------------------------*/
#define KEY_RAM_DATA_LEN (KEY_NUM_MAX * 16U + 24U)
typedef enum
{
/*按键检测方式选择*/
/*按键不需要消抖,并且在无效状态切换到有效状态的上升沿触发按键动作。
一般用于CAN发送按键处理后状态时*/
KEY_NO_DEBOUNCE_RISE = 0U,
/*按键不需要消抖,并且在有效状态切换到无效状态的下降沿触发按键动作。
一般用于CAN发送按键处理后状态时*/
KEY_NO_DEBOUNCE_FALL,
/*按键需要消抖,短按松手触发,长按按住即可触发。
一般用于硬线按键,AD按键,CAN发送按键实时状态时*/
KEY_NEED_DEBOUNCE_NORMAL,
KEY_TYPE_MAX,
} Key_Type_en_t;
/*按键相关设置返回状态*/
typedef enum
{
KEY_SET_OK = 0U,
KEY_SET_ERROR,
KEY_SET_MAX,
} Key_Set_en_t;
/*-----传入的按键状态--------*/
typedef enum
{
/*当按键检测方式选择需要消抖时使用*/
KEY_REALTIME_LOOSEN = 0U, /*按键松开*/
KEY_REALTIME_PRESS, /*按键按下*/
/*当按键检测方式选择不需要消抖时使用*/
KEY_STATUS_IDLE,
KEY_STATUS_SHORT_PRESS_1,
KEY_STATUS_SHORT_PRESS_2,
KEY_STATUS_LONG_PRESS_1,
KEY_STATUS_LONG_PRESS_2,
KEY_STATUS_LONG_PRESS_3,
KEY_STATUS_LONG_PRESS_4,
KEY_STATUS_MAX,
} Key_Status_en_t;
/*按键支持的具体动作*/
typedef enum
{
KEY_EVENT_NONE = 0U, /***超时动作可在这个按键动作下自行计时触发**/
/*以下按键动作都是单次触发,只有松手后才能再次触发*/
KEY_EVENT_SHORT_PRESS_1,
KEY_EVENT_SHORT_PRESS_2,
KEY_EVENT_LONG_PRESS_1,
KEY_EVENT_LONG_PRESS_2,
KEY_EVENT_LONG_PRESS_3,
KEY_EVENT_LONG_PRESS_4,
/*OFF时才首先按下按键,然后不松手,之后切换到ON并持续一定时间后触发动作。*/
KEY_EVENT_OFF_TO_ON,
KEY_EVENT_ON_TO_OFF,
KEY_EVENT_MAX,
} Key_Event_en_t;
/*按键IG状态*/
typedef enum
{
KEY_IG_INVALID = 0U,/***无效的电源状态**/
KEY_IG_OFF,
KEY_IG_ON,
} Key_IGN_en_t;
typedef Key_Status_en_t (*Key_Status_Read)(void);
typedef void (*Key_Operation)(Key_Event_en_t enKeyEvent);
/*每个按键的属性*/
typedef struct
{
/*按键检测方式选择*/
Key_Type_en_t enKeyType;
/*获取按键传入状态的回调函数*/
Key_Status_Read pfnKeyReadStatusCallBack;
/*按键触发动作的回调函数*/
Key_Operation pfnKeyOperationCallBack;
} Key_Attribute_st_t;
typedef struct
{
/*当前IG状态*/
Key_IGN_en_t enKeyIGNRealStatus;
/*按键数量,也就是KEY_NUM_MAX*/
Key_uint8_t u8KeyNum;
} Key_Init_st_t;
/*--------------------------------------------------------------------------------------------*/
/*------------------------------------------------------------------------------------*/
/*10ms调用一次*/
extern void Key_Service(void);
/*首次上电时调用.
默认短按1时间100ms~~1000ms,
默认短按2时间1100ms~~2000ms,
长按1时间2000ms,
长按2时间10000ms,
长按3时间30000ms,
长按4时间60000ms,
OFF下时间500ms,ON下时间500ms*/
extern void Key_KL30_Init(Key_uint8_t *pu8KyeRamData, const Key_Attribute_st_t *pstKeyAttribute, Key_Init_st_t *pstKeyInit);
/***确保传入的内存指针在休眠唤醒后不会丢失,那么可正常使用唤醒初始化函数。否是使用上述KL30初始化**/
extern void Key_Wakeup_Init(Key_uint8_t *pu8KyeRamData, const Key_Attribute_st_t *pstKeyAttribute, Key_Init_st_t *pstKeyInit);
/*对于消抖按键而言,判断短按的时间参数。
u16TimeMin :最小识别的时间 u16TimeMax:最大识别的时间 (不可大于短按2的最小识别时间)*/
extern Key_Set_en_t Key_Parameter_Set_Short_Press_1_Time(Key_uint16_t u16TimeMin, Key_uint16_t u16TimeMax);
/*对于消抖按键而言,判断短按2的时间参数。
u16TimeMin :最小识别的时间(不可小于短按1的最大识别时间) u16TimeMax:最大识别的时间*/
extern Key_Set_en_t Key_Parameter_Set_Short_Press_2_Time(Key_uint16_t u16TimeMin, Key_uint16_t u16TimeMax);
/*对于消抖按键而言,判断长按1的时间参数。不可大于长按2的时间*/
extern Key_Set_en_t Key_Parameter_Set_Long_Press_1_Time(Key_uint16_t u16Time);
/*对于消抖按键而言,判断长按2的时间参数。不可小于长按1的时间,不可大于长按3的时间*/
extern Key_Set_en_t Key_Parameter_Set_Long_Press_2_Time(Key_uint16_t u16Time);
/*对于消抖按键而言,判断长按3的时间参数。不可小于长按2的时间,不可大于长按4的时间*/
extern Key_Set_en_t Key_Parameter_Set_Long_Press_3_Time(Key_uint16_t u16Time);
/*对于消抖按键而言,判断长按4的时间参数。不可小于长按3的时间*/
extern Key_Set_en_t Key_Parameter_Set_Long_Press_4_Time(Key_uint16_t u16Time);
/*设置电源状态给按键,单次调用或者多次调用均可*/
extern void Key_Set_IG_Status(Key_IGN_en_t enIGStatus);
#endif
\ No newline at end of file
This diff is collapsed.
#ifndef KEY_USER_H__
#define KEY_USER_H__
extern void Key_KL30_Init_EXample(void);
extern void Key_Wakeup_Init_EXample(void);
#endif
\ No newline at end of file
......@@ -18,6 +18,7 @@
#include "Door.h"
#include "Data_AirPressure.h"
#include "Key.h"
#include "Key_user.h"
#include "Menu.h"
#include "Services_ODO_User.h"
#include "AvgSpeed.h"
......@@ -96,7 +97,9 @@ Power_Status_t Power_KL30_Init ( void )
SeatbeltInit();
Door_WakeUpInit();
Key_Init();
Key_KL30_Init_EXample();
Key_Parameter_Set_Short_Press_1_Time(40, 800);
Key_Parameter_Set_Long_Press_2_Time(4000);
LED_Driver_Init();
Sound_Scheduler_Init();
......@@ -209,6 +212,7 @@ Power_Status_t Power_Wakeup_Init ( void )
Door_WakeUpInit();
RTE_PWM_Init();
Key_Wakeup_Init_EXample();
/*燃油新增 ----20220503----*/
Fuel_User_Wakeup_Init();
......@@ -243,6 +247,7 @@ void Power_IG_OFF_Init(void)
/*关闭所有断码*/
Seg_Display_OFF();
Key_Set_IG_Status(KEY_IG_OFF);
}
void Power_IG_ON_Init(void)
{
......@@ -263,6 +268,7 @@ void Power_IG_ON_Init(void)
UserGaugeK15Init() ;/*仪表IGON调用*/
/*end*/
CD4051B_KL15Init();
Key_Set_IG_Status(KEY_IG_ON);
/*5s不按按键计时清零*/
//LongTimeNoKey_Operation_TimeRest();
......
......@@ -1207,7 +1207,7 @@ void Seg_Display_OFF(void)
uint8_t Flash_time = 0;
uint16_t Color_Time = 0;// 20 更换一次颜色
extern uint8_t BackOdoFlagSta ;
uint8_t BackOdoFlagSta ;
void Gui_Display_Test(void)
{
uint16_t Get_Data_Veh_value = 0u ;
......@@ -1283,6 +1283,7 @@ void Gui_Display_Test(void)
Loc_Display_Red(1, 1, 1);
Flash_time = 0;
Color_Time = 0;
BackOdoFlagSta = 1 ;
break;
}
}
......
......@@ -1756,6 +1756,7 @@ void Level3_4Menu_7Enter_1(void)
void Level3_4Menu_7Do_1(void)
{
GUI_OftenShow_Display();
GUI_BG_UserSet_Display(GUI_DISP_MODE_NORMAL);
GUI_BG_User_Light1_Display(GUI_DISP_MODE_NORMAL);
}
void Level3_4Menu_7Exit_1(void)
......@@ -1779,6 +1780,7 @@ void Level3_4Menu_7Enter_2(void)
void Level3_4Menu_7Do_2(void)
{
GUI_OftenShow_Display();
GUI_BG_UserSet_Display(GUI_DISP_MODE_NORMAL);
GUI_BG_User_Light2_Display(GUI_DISP_MODE_NORMAL);
}
void Level3_4Menu_7Exit_2(void)
......
......@@ -6,11 +6,9 @@
#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"
#include "SEG_DISPLAY.h"
uint32_t EnterTimer[10];
uint8_t UE_EN[Display_MAX];
......@@ -26,8 +24,6 @@ uint8_t BG_display_flag;
uint16_t HMI_StartAnimationFrameCnt;
uint8_t backgroundOFFFlag;
uint8_t BackOdoFlagSta;
uint8_t BackOdoFlag;
static void switch_branch(void);
......@@ -154,68 +150,59 @@ void DisplayServices(void)
}
DispSch_xxxMs_Logic(10u);
#if 0
/*上短*/
if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_UP == KEY_EVENT_SHORT_PRESS)
if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_UP == KEY_EVENT_SHORT_PRESS_1)
{
HMI_Clear_KEY_UP();
}
/*上长*/
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_UP == KEY_EVENT_LONG_PRESS)
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_UP == KEY_EVENT_LONG_PRESS_1)
{
HMI_Clear_KEY_UP();
}
/*下短*/
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_DOWN == KEY_EVENT_SHORT_PRESS)
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_DOWN == KEY_EVENT_SHORT_PRESS_1)
{
HMI_Clear_KEY_DOWN();
}
/*下长*/
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_DOWN == KEY_EVENT_LONG_PRESS)
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_DOWN == KEY_EVENT_LONG_PRESS_1)
{
HMI_Clear_KEY_DOWN();
}
/*确认短*/
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_CONFIRM == KEY_EVENT_SHORT_PRESS)
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_CONFIRM == KEY_EVENT_SHORT_PRESS_1)
{
HMI_Clear_KEY_CONFIRM();
}
/*确认长*/
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_CONFIRM == KEY_EVENT_LONG_PRESS)
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_CONFIRM == KEY_EVENT_LONG_PRESS_1)
{
HMI_Clear_KEY_CONFIRM();
}
/*确认超长 3S*/
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_CONFIRM == KEY_EVENT_SUPER_LONG_PRESS)
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_CONFIRM == KEY_EVENT_LONG_PRESS_2)
{
HMI_Clear_KEY_CONFIRM();
if (BackOdoFlag == 0)
{
BackOdoFlag = 1;
HMI_Clear_KEY_CONFIRM();
BackOdoFlagSta = 1 ;
Gui_Display_Test();
/*TYW总计清零*/
TYW_Data_ODO_Clear();
}
}
/*返回短*/
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_CANCEL == KEY_EVENT_SHORT_PRESS)
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_CANCEL == KEY_EVENT_SHORT_PRESS_1)
{
HMI_Clear_KEY_CANCEL();
}
/*返回长*/
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_CANCEL == KEY_EVENT_LONG_PRESS)
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_CANCEL == KEY_EVENT_LONG_PRESS_1)
{
HMI_Clear_KEY_CANCEL();
}
/*MENU短*/
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_MENU == KEY_EVENT_SHORT_PRESS)
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_MENU == KEY_EVENT_SHORT_PRESS_1)
{
HMI_Clear_KEY_MENU();
}
/*MENU长*/
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_MENU == KEY_EVENT_LONG_PRESS)
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_MENU == KEY_EVENT_LONG_PRESS_1)
{
HMI_Clear_KEY_MENU();
}
......@@ -225,12 +212,12 @@ void DisplayServices(void)
}
/*ODOTrip短*/
if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_ODOTRIP == KEY_EVENT_SHORT_PRESS)
if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_ODOTRIP == KEY_EVENT_SHORT_PRESS_1)
{
HMI_Clear_KEY_ODOTRIP();
}
/*ODOTrip长*/
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_ODOTRIP == KEY_EVENT_LONG_PRESS)
else if (UE_CtrlInfo.HMI_KEYInfo.u8KEY_ODOTRIP == KEY_EVENT_LONG_PRESS_1)
{
HMI_Clear_KEY_ODOTRIP();
}
......@@ -243,6 +230,7 @@ void DisplayServices(void)
{
; /*do nothing*/
}
#endif
}
/*----开机动画----*/
......@@ -250,9 +238,7 @@ void Display_StartAnimationEnter(void)
{
HMI_StartAnimationFrameCnt = 0u;
backgroundOFFFlag = 0;
MenuFlag.Menu_Popup_Flag= 0u ;
BackOdoFlagSta = 0;
BackOdoFlag = 0;
MenuFlag.Menu_Popup_Flag = 0u ;
/*硬清空所有缓存数据*/
loc_free_mem(MENU_Sprite, MENU_Sprite);
......
......@@ -265,35 +265,7 @@ static void Common_Set_Act_E_Speed(uint16_t Val)
}
static void Common_Set_Disp_V_Speed(uint16_t Val)
{
static uint16_t Vspeed_ReflashTime = 0;
static uint16_t Vspeed_Val = 0;
if ((Vspeed_ReflashTime > 0) && (Vspeed_Val != Val))
{
Vspeed_ReflashTime--;
}
if (Vspeed_ReflashTime == 0)
{
if (Vspeed_Val < Val)
{
Vspeed_ReflashTime = 50 / (Val - Vspeed_Val);
Vspeed_Val++;
}
else if (Vspeed_Val > Val)
{
Vspeed_ReflashTime = 50 / (Vspeed_Val - Val);
Vspeed_Val--;
}
else
{
Vspeed_ReflashTime = 500;
}
}
Disp_V_Speed = Vspeed_Val;
Disp_V_Speed = Val;
}
static void Common_Set_Disp_E_Speed(uint16_t Val)
{
......
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