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
......
#include "Key.h"
/*------------------------------------------------------------------------------------------*/
/*---------------------------------------------------------------------*/
/*-----按键服务函数调用周期。单位ms--------*/
#define KEY_CALL_CYCLE 10U
/*-----------------------------------------------------------------------------------------*/
/*-----------------------------------------------------------------------------------------*/
typedef struct
{
uint16_t u16KeyShortPressTime; /*¶Ì°´¼ì²âʱ¼ä*/
uint16_t u16KeyLongPressTime; /*³¤°´¼ì²âʱ¼ä*/
uint16_t u16KeySuperLongPressTime; /*³¬³¤°´¼ì²âʱ¼ä*/
uint16_t u16KeyLoosenTime; /*ËÉ¿ª¼ì²âʱ¼ä*/
uint16_t u16KeyValidOFFTime; /*ÓÐЧOFF¼ì²âʱ¼ä*/
uint16_t u16KeyValidONTime; /*ÓÐЧON¼ì²âʱ¼ä*/
} Key_Parameter_st_t;
typedef struct
{
Key_Real_Status_en_t enKeyTypeLast;
uint16_t u16KeyInvalidTimeCount;
uint16_t u16KeyValidTimeCount;
uint16_t u16KeyFirstIGNTimeRecord;
Key_IGN_en_t enKeyIGNFirstStatus;
Key_IGN_en_t enKeyIGNStatusLast;
uint8_t u8KeyIGNChangeFlag;
uint16_t u16KeyIGNTimeCount;
} Key_Ctr_st_t;
/*------------------------------------------------------------------------------------------*/
#pragma ghs section bss = ".myNonInitArea"
static Key_Parameter_st_t stKeyParameter;
#pragma ghs section bss = default
static Key_Ctr_st_t stKeyCtrVariate[KEY_NUM_MAX];
// static Key_IGN_en_t enKeyIGNFirstStatus = KEY_IG_INVALID;
// static Key_IGN_en_t enKeyIGNStatusLast = KEY_IG_INVALID;
// static uint8_t u8KeyIGNChangeFlag = 0U;
// static uint16_t u16KeyIGNTimeCount;
/*-----------------------------------------------------------------------------------------*/
static void Key_Process(Key_Num_en_t enKeyIndex);
void Key_Service(void);
void Key_Init(void);
Key_Set_en_t Key_Parameter_Set_Short_Press_Time(uint16_t u16Time);
Key_Set_en_t Key_Parameter_Set_Long_Press_Time(uint16_t u16Time);
Key_Set_en_t Key_Parameter_Set_Super_Long_Press_Time(uint16_t u16Time);
Key_Set_en_t Key_Parameter_Set_OFF_Press_Time(uint16_t u16Time);
Key_Set_en_t Key_Parameter_Set_ON_Press_Time(uint16_t u16Time);
/*-----------------------------------------------------*/
static void Key_Process(Key_Num_en_t enKeyIndex)
{
if (enKeyIndex < KEY_NUM_MAX)
{
/*Key_Real_Status_en_t enKeyRealType = (*stKeyAttribute[enKeyIndex].penKeyRealStatus);*/
Key_Real_Status_en_t enKeyRealType = KEY_CAN_NONE;
Key_IGN_en_t enKeyIGNRealStatus = Key_Get_IGN_Status();
if (stKeyAttribute[enKeyIndex].pfnKeyReadStatusCallBack != 0U)
{
enKeyRealType = stKeyAttribute[enKeyIndex].pfnKeyReadStatusCallBack();
}
/*CAN°´¼ü*/
if (stKeyAttribute[enKeyIndex].enKeyType == KEY_NO_DEBOUNCE_RISE)
{
if (enKeyRealType <= KEY_CAN_LONG_PRESS_NOT_RELEASE)
{
if (stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack != 0U)
{
if ((stKeyCtrVariate[enKeyIndex].enKeyTypeLast == KEY_CAN_NONE) &&
(enKeyRealType == KEY_CAN_SHORT_PRESS))
{
stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack(KEY_EVENT_SHORT_PRESS);
}
else if ((stKeyCtrVariate[enKeyIndex].enKeyTypeLast == KEY_CAN_NONE) &&
(enKeyRealType == KEY_CAN_LONG_PRESS))
{
stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack(KEY_EVENT_LONG_PRESS);
}
else if ((stKeyCtrVariate[enKeyIndex].enKeyTypeLast == KEY_CAN_NONE) &&
(enKeyRealType == KEY_CAN_LONG_PRESS_NOT_RELEASE))
{
stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack(KEY_EVENT_SUPER_LONG_PRESS);
}
else
{
stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack(KEY_EVENT_NONE);
}
}
stKeyCtrVariate[enKeyIndex].enKeyTypeLast = enKeyRealType;
}
else
{
stKeyCtrVariate[enKeyIndex].enKeyTypeLast = KEY_CAN_NONE;
}
}
else if (stKeyAttribute[enKeyIndex].enKeyType == KEY_NO_DEBOUNCE_FALL)
{
if (enKeyRealType <= KEY_CAN_LONG_PRESS_NOT_RELEASE)
{
if (stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack != 0U)
{
if ((stKeyCtrVariate[enKeyIndex].enKeyTypeLast == KEY_CAN_SHORT_PRESS) &&
(enKeyRealType == KEY_CAN_NONE))
{
stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack(KEY_EVENT_SHORT_PRESS);
}
else if ((stKeyCtrVariate[enKeyIndex].enKeyTypeLast == KEY_CAN_LONG_PRESS) &&
(enKeyRealType == KEY_CAN_NONE))
{
stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack(KEY_EVENT_LONG_PRESS);
}
else if ((stKeyCtrVariate[enKeyIndex].enKeyTypeLast == KEY_CAN_LONG_PRESS_NOT_RELEASE) &&
(enKeyRealType == KEY_CAN_NONE))
{
stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack(KEY_EVENT_SUPER_LONG_PRESS);
}
else
{
stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack(KEY_EVENT_NONE);
}
}
stKeyCtrVariate[enKeyIndex].enKeyTypeLast = enKeyRealType;
}
else
{
stKeyCtrVariate[enKeyIndex].enKeyTypeLast = KEY_CAN_NONE;
}
}
/*Ó²Ïß°´¼ü*/
else if (stKeyAttribute[enKeyIndex].enKeyType == KEY_NEED_DEBOUNCE_NORMAL)
{
if (enKeyRealType == KEY_LINE_LOOSEN) /*空闲*/
{
if (stKeyCtrVariate[enKeyIndex].u16KeyInvalidTimeCount <= stKeyParameter.u16KeyLoosenTime)
{
stKeyCtrVariate[enKeyIndex].u16KeyInvalidTimeCount += KEY_CALL_CYCLE;
}
else
{
stKeyCtrVariate[enKeyIndex].u16KeyValidTimeCount = 0U;
stKeyCtrVariate[enKeyIndex].enKeyTypeLast = KEY_LINE_LOOSEN;
stKeyCtrVariate[enKeyIndex].u16KeyFirstIGNTimeRecord = 0U;
stKeyCtrVariate[enKeyIndex].enKeyIGNFirstStatus = KEY_IG_INVALID;
stKeyCtrVariate[enKeyIndex].enKeyIGNStatusLast = KEY_IG_INVALID;
stKeyCtrVariate[enKeyIndex].u8KeyIGNChangeFlag = 0U;
stKeyCtrVariate[enKeyIndex].u16KeyIGNTimeCount = 0U;
}
if ((stKeyCtrVariate[enKeyIndex].u16KeyInvalidTimeCount >= stKeyParameter.u16KeyLoosenTime) &&
(stKeyCtrVariate[enKeyIndex].u16KeyValidTimeCount >= stKeyParameter.u16KeyShortPressTime) &&
(stKeyCtrVariate[enKeyIndex].u16KeyValidTimeCount < stKeyParameter.u16KeyLongPressTime))
{
stKeyCtrVariate[enKeyIndex].u16KeyValidTimeCount = 0U;
/* call back */
if (stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack != 0U)
{
stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack(KEY_EVENT_SHORT_PRESS);
}
}
}
else if (enKeyRealType == KEY_LINE_PRESS) /*按键按下*/
{
if (stKeyCtrVariate[enKeyIndex].enKeyTypeLast != enKeyRealType)
{
stKeyCtrVariate[enKeyIndex].u16KeyValidTimeCount = 0U;
stKeyCtrVariate[enKeyIndex].u16KeyFirstIGNTimeRecord = 0U;
stKeyCtrVariate[enKeyIndex].enKeyTypeLast = enKeyRealType;
stKeyCtrVariate[enKeyIndex].u16KeyIGNTimeCount = 0U;
stKeyCtrVariate[enKeyIndex].enKeyIGNFirstStatus = enKeyIGNRealStatus;
stKeyCtrVariate[enKeyIndex].enKeyIGNStatusLast = enKeyIGNRealStatus;
}
else
{
if (stKeyCtrVariate[enKeyIndex].enKeyIGNStatusLast != enKeyIGNRealStatus)
{
stKeyCtrVariate[enKeyIndex].enKeyIGNStatusLast = enKeyIGNRealStatus;
if (stKeyCtrVariate[enKeyIndex].enKeyIGNFirstStatus != enKeyIGNRealStatus)
{
stKeyCtrVariate[enKeyIndex].u16KeyFirstIGNTimeRecord = stKeyCtrVariate[enKeyIndex].u16KeyIGNTimeCount;
}
stKeyCtrVariate[enKeyIndex].u16KeyIGNTimeCount = 0U;
}
else
{
if (stKeyCtrVariate[enKeyIndex].u16KeyIGNTimeCount < 0xFFF0U)
{
stKeyCtrVariate[enKeyIndex].u16KeyIGNTimeCount += KEY_CALL_CYCLE;
}
}
if (stKeyCtrVariate[enKeyIndex].u16KeyValidTimeCount < 0xFFF0U)
{
stKeyCtrVariate[enKeyIndex].u16KeyValidTimeCount += KEY_CALL_CYCLE;
}
if (stKeyCtrVariate[enKeyIndex].enKeyIGNFirstStatus != enKeyIGNRealStatus)
{
stKeyCtrVariate[enKeyIndex].u8KeyIGNChangeFlag = 1U;
}
if (stKeyCtrVariate[enKeyIndex].u16KeyValidTimeCount >= stKeyParameter.u16KeyShortPressTime)
{
// stKeyCtrVariate[enKeyIndex].u16KeyInvalidTimeCount = 0U;
}
stKeyCtrVariate[enKeyIndex].u16KeyInvalidTimeCount = 0U;
if (stKeyCtrVariate[enKeyIndex].u8KeyIGNChangeFlag == 0U)
{
if (stKeyCtrVariate[enKeyIndex].u16KeyValidTimeCount >= stKeyParameter.u16KeySuperLongPressTime)
{
if (stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack != 0U)
{
stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack(KEY_EVENT_SUPER_LONG_PRESS);
}
}
else if (stKeyCtrVariate[enKeyIndex].u16KeyValidTimeCount >= stKeyParameter.u16KeyLongPressTime)
{
if (stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack != 0U)
{
stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack(KEY_EVENT_LONG_PRESS);
}
}
}
else
{
if (stKeyCtrVariate[enKeyIndex].enKeyIGNFirstStatus == KEY_IG_OFF)
{
if (enKeyIGNRealStatus == KEY_IG_ON)
{
if ((stKeyCtrVariate[enKeyIndex].u16KeyFirstIGNTimeRecord >= stKeyParameter.u16KeyValidOFFTime) &&
(stKeyCtrVariate[enKeyIndex].u16KeyIGNTimeCount >= stKeyParameter.u16KeyValidONTime))
{
if (stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack != 0U)
{
stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack(KEY_EVENT_OFF_TO_ON);
}
stKeyCtrVariate[enKeyIndex].u16KeyFirstIGNTimeRecord = 0U;
}
}
}
else if (stKeyCtrVariate[enKeyIndex].enKeyIGNFirstStatus == KEY_IG_ON)
{
if (enKeyIGNRealStatus == KEY_IG_OFF)
{
if ((stKeyCtrVariate[enKeyIndex].u16KeyFirstIGNTimeRecord >= stKeyParameter.u16KeyValidONTime) &&
(stKeyCtrVariate[enKeyIndex].u16KeyIGNTimeCount >= stKeyParameter.u16KeyValidOFFTime))
{
if (stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack != 0U)
{
stKeyAttribute[enKeyIndex].pfnKeyOperationCallBack(KEY_EVENT_ON_TO_OFF);
}
stKeyCtrVariate[enKeyIndex].u16KeyFirstIGNTimeRecord = 0U;
}
}
}
}
}
}
else
{
/*ERROR*/
stKeyCtrVariate[enKeyIndex].u16KeyInvalidTimeCount = 0U;
stKeyCtrVariate[enKeyIndex].u16KeyValidTimeCount = 0U;
stKeyCtrVariate[enKeyIndex].enKeyTypeLast = (Key_Real_Status_en_t)0U;
}
}
else
{
}
}
}
/*10ms调用一次*/
void Key_Service(void)
{
uint8_t i = 0U;
for (i = 0U; i < KEY_NUM_MAX; i++)
{
Key_Process((Key_Num_en_t)i); /*Key_Num_en_t*/
}
}
/*首次上电时调用一次即可*/
void Key_Init(void)
{
uint8_t i = 0U;
for (i = 0U; i < KEY_NUM_MAX; i++)
{
stKeyCtrVariate[i].enKeyTypeLast = KEY_CAN_NONE;
stKeyCtrVariate[i].u16KeyInvalidTimeCount = 0U;
stKeyCtrVariate[i].u16KeyValidTimeCount = 0U;
stKeyCtrVariate[i].u16KeyFirstIGNTimeRecord = 0U;
stKeyCtrVariate[i].enKeyIGNFirstStatus = KEY_IG_INVALID;
stKeyCtrVariate[i].enKeyIGNStatusLast = KEY_IG_INVALID;
stKeyCtrVariate[i].u8KeyIGNChangeFlag = 0U;
stKeyCtrVariate[i].u16KeyIGNTimeCount = 0U;
}
/*按键动作时间*/
/*342 4.1 短按/长按操作的判断标准(判定时间):短按;40ms以上,未到800ms,长按;800ms以上*/
stKeyParameter.u16KeyLoosenTime = 100U;
stKeyParameter.u16KeyShortPressTime = 80U;
stKeyParameter.u16KeyLongPressTime = 1000U;
stKeyParameter.u16KeySuperLongPressTime = 3000U;
stKeyParameter.u16KeyValidOFFTime = 200U; /*按键动作时间*/
stKeyParameter.u16KeyValidONTime = 1000U;
}
/*对于硬线按键而言,判断短按的时间参数*/
Key_Set_en_t Key_Parameter_Set_Short_Press_Time(uint16_t u16Time)
{
Key_Set_en_t enKeySetResult = KEY_SET_OK;
if (u16Time < stKeyParameter.u16KeyLoosenTime)
{
enKeySetResult = KEY_SET_ERROR;
}
else if (u16Time > stKeyParameter.u16KeyLongPressTime)
{
enKeySetResult = KEY_SET_ERROR;
}
else
{
stKeyParameter.u16KeyShortPressTime = u16Time;
}
return enKeySetResult;
}
/*对于硬线按键而言,判断长按的时间参数*/
Key_Set_en_t Key_Parameter_Set_Long_Press_Time(uint16_t u16Time)
{
Key_Set_en_t enKeySetResult = KEY_SET_OK;
if (u16Time < stKeyParameter.u16KeyShortPressTime)
{
enKeySetResult = KEY_SET_ERROR;
}
else if (u16Time > stKeyParameter.u16KeySuperLongPressTime)
{
enKeySetResult = KEY_SET_ERROR;
}
else
{
stKeyParameter.u16KeyLongPressTime = u16Time;
}
return enKeySetResult;
}
/*对于硬线按键而言,判断超长按的时间参数*/
Key_Set_en_t Key_Parameter_Set_Super_Long_Press_Time(uint16_t u16Time)
{
Key_Set_en_t enKeySetResult = KEY_SET_OK;
if (u16Time < stKeyParameter.u16KeyLongPressTime)
{
enKeySetResult = KEY_SET_ERROR;
}
else
{
stKeyParameter.u16KeySuperLongPressTime = u16Time;
}
return enKeySetResult;
}
#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
......@@ -14,7 +14,12 @@
#include "kwp2000_service.h"
#include "CAN_Communication_Matrix.h"
#include "SEG_DISPLAY.h"
/*----------按键具体功能执行的回调函数-----------------------*/
#pragma ghs section bss=".myNonInitArea"
Key_uint8_t u8KeyRamData[KEY_RAM_DATA_LEN];
#pragma ghs section bss=default
void Key_Operation_Enter(Key_Event_en_t enKeyEvent);
void Key_Operation_Return(Key_Event_en_t enKeyEvent);
......@@ -23,8 +28,6 @@ void Key_Operation_Down(Key_Event_en_t enKeyEvent);
void Key_Operation_Menu(Key_Event_en_t enKeyEvent);
void Key_Operation_ODOTrip(Key_Event_en_t enKeyEvent);
Key_IGN_en_t Key_Get_IGN_Status(void);
/*******************************UP***********************************************
Function: Key_Operation_Up
Description:
......@@ -49,7 +52,7 @@ void Key_Operation_Up(Key_Event_en_t enKeyEvent)
/*----无车速,无报警----*/
if (HMI_MENU_Sta != Display_Alarm)
{
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
/*主界面 一级菜单 二级菜单*/
if (((bCurMenuIDX >= _MN_DSP_LEVEL1MENU_1) && (bCurMenuIDX <= _MN_DSP_LEVEL2_6_MENU_2)) ||
......@@ -349,7 +352,7 @@ void Key_Operation_Up(Key_Event_en_t enKeyEvent)
;/*Do Nothing!*/
}
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
MenuFlag.Menu_Key_Time++;
if (MenuFlag.Menu_Key_Time > 10)
......@@ -458,11 +461,11 @@ void Key_Operation_Up(Key_Event_en_t enKeyEvent)
/*----无车速,有报警----*/
else
{
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
; /*D0 Nothing!*/
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*D0 Nothing!*/
}
......@@ -473,7 +476,7 @@ void Key_Operation_Up(Key_Event_en_t enKeyEvent)
/*----有车速,无报警----*/
if (HMI_MENU_Sta != Display_Alarm)
{
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
/*工厂模式*/ /*经销商模式*/
if (((bCurMenuIDX >= _FAC_DSP_LEVEL1MENU_1) && (bCurMenuIDX <= _FAC_DSP_LEVEL1_3MENU_2)) ||
......@@ -500,7 +503,7 @@ void Key_Operation_Up(Key_Event_en_t enKeyEvent)
;/*Do Nothing!*/
}
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*D0 Nothing!*/
}
......@@ -508,11 +511,11 @@ void Key_Operation_Up(Key_Event_en_t enKeyEvent)
/*----有车速,有报警----*/
else
{
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
; /*D0 Nothing!*/
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*D0 Nothing!*/
}
......@@ -541,7 +544,7 @@ void Key_Operation_Down(Key_Event_en_t enKeyEvent)
/*----无车速,无报警----*/
if (HMI_MENU_Sta != Display_Alarm)
{
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
/*主界面 一级菜单 二级菜单*/
if (((bCurMenuIDX >= _MN_DSP_LEVEL1MENU_1) && (bCurMenuIDX <= _MN_DSP_LEVEL2_6_MENU_2)) ||
......@@ -856,7 +859,7 @@ void Key_Operation_Down(Key_Event_en_t enKeyEvent)
;/*Do Nothing!*/
}
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
MenuFlag.Menu_Key_Time++;
if (MenuFlag.Menu_Key_Time > 10)
......@@ -972,11 +975,11 @@ void Key_Operation_Down(Key_Event_en_t enKeyEvent)
else
{
/*----无车速,有报警----*/
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
; /*D0 Nothing!*/
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*D0 Nothing!*/
}
......@@ -987,7 +990,7 @@ void Key_Operation_Down(Key_Event_en_t enKeyEvent)
/*----有车速,无报警----*/
if (HMI_MENU_Sta != Display_Alarm)
{
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
/*工厂模式*/ /*经销商模式*/
if (((bCurMenuIDX >= _FAC_DSP_LEVEL1MENU_1) && (bCurMenuIDX <= _FAC_DSP_LEVEL1_3MENU_2)) ||
......@@ -1014,7 +1017,7 @@ void Key_Operation_Down(Key_Event_en_t enKeyEvent)
;/*Do Nothing!*/
}
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*D0 Nothing!*/
}
......@@ -1022,11 +1025,11 @@ void Key_Operation_Down(Key_Event_en_t enKeyEvent)
/*----有车速,有报警----*/
else
{
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
; /*D0 Nothing!*/
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*D0 Nothing!*/
}
......@@ -1054,7 +1057,7 @@ void Key_Operation_Enter(Key_Event_en_t enKeyEvent)
/*----无车速,无报警----*/
if (HMI_MENU_Sta != Display_Alarm)
{
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
if (((bCurMenuIDX >= _MN_DSP_LEVEL2MENU_1) && (bCurMenuIDX <= _MN_DSP_LEVEL2_5_MENU_4)) ||
((bCurMenuIDX >= _MN_DSP_LEVEL3_4_MENU_41) && (bCurMenuIDX <= _MN_DSP_LEVEL3_4_MENU_47)))
......@@ -1133,7 +1136,7 @@ void Key_Operation_Enter(Key_Event_en_t enKeyEvent)
;/*Do Nothing!*/
}
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
/*Go Enter*/
if ((bCurMenuIDX >= _MN_DSP_LEVEL3_2_MENU_1) && (bCurMenuIDX <= _MN_DSP_LEVEL3_2_MENU_8))
......@@ -1146,11 +1149,11 @@ void Key_Operation_Enter(Key_Event_en_t enKeyEvent)
else
{
/*----无车速,有报警----*/
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
; /*D0 Nothing!*/
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*D0 Nothing!*/
}
......@@ -1161,7 +1164,7 @@ void Key_Operation_Enter(Key_Event_en_t enKeyEvent)
/*----有车速,无报警----*/
if (HMI_MENU_Sta != Display_Alarm)
{
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
/*工厂模式 经销商模式*/
if ((bCurMenuIDX >= _FAC_DSP_LEVEL0MENU_1) && (bCurMenuIDX <= _MN_DSP_MENU_MAX))
......@@ -1192,7 +1195,7 @@ void Key_Operation_Enter(Key_Event_en_t enKeyEvent)
;/*Do Nothing!*/
}
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*D0 Nothing!*/
}
......@@ -1200,11 +1203,11 @@ void Key_Operation_Enter(Key_Event_en_t enKeyEvent)
/*----有车速,有报警----*/
else
{
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
; /*D0 Nothing!*/
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*D0 Nothing!*/
}
......@@ -1233,7 +1236,7 @@ void Key_Operation_Return(Key_Event_en_t enKeyEvent)
/*----无车速,无报警----*/
if (HMI_MENU_Sta != Display_Alarm)
{
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
if ((bCurMenuIDX >= _MN_DSP_LEVEL2_1_MENU_1) && (bCurMenuIDX < _MN_DSP_ENTER_MENU))
{
......@@ -1293,7 +1296,7 @@ void Key_Operation_Return(Key_Event_en_t enKeyEvent)
; /*do nothing*/
}
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*D0 Nothing!*/
}
......@@ -1301,11 +1304,11 @@ void Key_Operation_Return(Key_Event_en_t enKeyEvent)
else
{
/*----无车速,有报警----*/
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
; /*Do Nothing!*/
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
MenuFlag.Key_Menu_Popup_time = 6000u;
}
......@@ -1316,7 +1319,7 @@ void Key_Operation_Return(Key_Event_en_t enKeyEvent)
if (HMI_MENU_Sta != Display_Alarm)
{
/*----有车速,无报警----*/
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
/*工厂模式 经销商模式*/
if ((bCurMenuIDX >= _FAC_DSP_LEVEL0MENU_1) && (bCurMenuIDX <= _MN_DSP_MENU_MAX))
......@@ -1328,7 +1331,7 @@ void Key_Operation_Return(Key_Event_en_t enKeyEvent)
; /*do nothing*/
}
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*Do Nothing!*/
}
......@@ -1336,11 +1339,11 @@ void Key_Operation_Return(Key_Event_en_t enKeyEvent)
else
{
/*----有车速,无报警----*/
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
; /*Do Nothing!*/
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
MenuFlag.Key_Menu_Popup_time = 6000u;
}
......@@ -1372,7 +1375,7 @@ void Key_Operation_Menu(Key_Event_en_t enKeyEvent)
/*----无车速,无报警----*/
if (HMI_MENU_Sta != Display_Alarm)
{
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
/*自检模式进入经销商模式*/
if (bCurMenuIDX == _MN_DSP_Menu_Test)
......@@ -1408,7 +1411,11 @@ void Key_Operation_Menu(Key_Event_en_t enKeyEvent)
NextMenu(MenuFlag.Menu_Flag);
}
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*Do Nothing!*/
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_2)
{
; /*Do Nothing!*/
}
......@@ -1416,7 +1423,7 @@ void Key_Operation_Menu(Key_Event_en_t enKeyEvent)
else
{
/*----无车速,有报警----*/
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
/*自检模式进入经销商模式*/
if (bCurMenuIDX == _MN_DSP_Menu_Test)
......@@ -1440,7 +1447,11 @@ void Key_Operation_Menu(Key_Event_en_t enKeyEvent)
MenuFlag.Menu_StaFlag = 0x01u;
}
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*Do Nothing!*/
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_2)
{
; /*Do Nothing!*/
}
......@@ -1451,7 +1462,7 @@ void Key_Operation_Menu(Key_Event_en_t enKeyEvent)
if (HMI_MENU_Sta != Display_Alarm)
{
/*----有车速,无报警----*/
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
/*工厂模式*/
if (MenuFlag.Menu_StaFlag == 0x00u)
......@@ -1470,15 +1481,21 @@ void Key_Operation_Menu(Key_Event_en_t enKeyEvent)
MenuFlag.Menu_StaFlag = 0x01u;
}
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*Do Nothing!*/
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_2)
{
Gui_Display_Test();
/*TYW总计清零*/
TYW_Data_ODO_Clear();
}
}
else
{
/*----有车速,无报警----*/
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
/*工厂模式*/
if (MenuFlag.Menu_StaFlag == 0x00u)
......@@ -1497,10 +1514,16 @@ void Key_Operation_Menu(Key_Event_en_t enKeyEvent)
MenuFlag.Menu_StaFlag = 0x01u;
}
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*Do Nothing!*/
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_2)
{
Gui_Display_Test();
/*TYW总计清零*/
TYW_Data_ODO_Clear();
}
}
}
}
......@@ -1527,7 +1550,7 @@ void Key_Operation_ODOTrip(Key_Event_en_t enKeyEvent)
{
MenuFlag.Key_MenuTest_Long = 1u;
}
else if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
else if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
if (PowerStatus == COMMON_POWER_ON)
{
......@@ -1560,7 +1583,7 @@ void Key_Operation_ODOTrip(Key_Event_en_t enKeyEvent)
State_Flag.Menu_Key_Static = 1u;
}
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
if (PowerStatus == COMMON_POWER_ON)
{
......@@ -1585,11 +1608,11 @@ void Key_Operation_ODOTrip(Key_Event_en_t enKeyEvent)
if (HMI_MENU_Sta != Display_Alarm)
{
/*----无车速,无报警----*/
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
;
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*Do Nothing!*/
}
......@@ -1597,11 +1620,11 @@ void Key_Operation_ODOTrip(Key_Event_en_t enKeyEvent)
else
{
/*----无车速,有报警----*/
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
; /*Do Nothing!*/
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*Do Nothing!*/
}
......@@ -1612,11 +1635,11 @@ void Key_Operation_ODOTrip(Key_Event_en_t enKeyEvent)
if (HMI_MENU_Sta != Display_Alarm)
{
/*----有车速,无报警----*/
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
; /*Do Nothing!*/
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*Do Nothing!*/
}
......@@ -1624,11 +1647,11 @@ void Key_Operation_ODOTrip(Key_Event_en_t enKeyEvent)
else
{
/*----有车速,无报警----*/
if (enKeyEvent == KEY_EVENT_SHORT_PRESS)
if (enKeyEvent == KEY_EVENT_SHORT_PRESS_1)
{
; /*Do Nothing!*/
}
else if (enKeyEvent == KEY_EVENT_LONG_PRESS)
else if (enKeyEvent == KEY_EVENT_LONG_PRESS_1)
{
; /*Do Nothing!*/
}
......@@ -1642,11 +1665,11 @@ uint8_t Common_Get_RetMenu_Flag(void)
return MenuFlag.Menu_Flag;
}
/*------------读按键实时状态的回调函数-------------------------------------------*/
Key_Real_Status_en_t Key_Real_Status_Read_Enter(void);
Key_Real_Status_en_t Key_Real_Status_Read_Return(void);
Key_Real_Status_en_t Key_Real_Status_Read_Up(void);
Key_Real_Status_en_t Key_Real_Status_Read_Down(void);
Key_Real_Status_en_t Key_Real_Status_Read_Menu(void);
Key_Status_en_t Key_Real_Status_Read_Enter(void);
Key_Status_en_t Key_Real_Status_Read_Return(void);
Key_Status_en_t Key_Real_Status_Read_Up(void);
Key_Status_en_t Key_Real_Status_Read_Down(void);
Key_Status_en_t Key_Real_Status_Read_Menu(void);
/*-------------------------------------------------*/
// Menu_R = 24000*470 / (24000 + 470) = 460.97Ω
......@@ -1670,26 +1693,26 @@ Key_Real_Status_en_t Key_Real_Status_Read_Menu(void);
// Down_R 3000~3200Ω
/*上*/
Key_Real_Status_en_t Key_Real_Status_Read_Up(void)
Key_Status_en_t Key_Real_Status_Read_Up(void)
{
Key_Real_Status_en_t enKeyRealStatus = KEY_LINE_LOOSEN;
Key_Status_en_t enKeyRealStatus = KEY_REALTIME_LOOSEN;
uint16_t Key_R = 0;
Key_R = (uint16_t)RTE_Read_KEY_R();
if (RTE_Read_KEY_R_Valid() == 0)
{
enKeyRealStatus = KEY_LINE_LOOSEN;
enKeyRealStatus = KEY_REALTIME_LOOSEN;
}
else
{
if ((Key_R >= (1250 - 400)) && (Key_R <= (1250 + 400)))
{
enKeyRealStatus = KEY_LINE_PRESS;
enKeyRealStatus = KEY_REALTIME_PRESS;
}
else
{
enKeyRealStatus = KEY_LINE_LOOSEN;
enKeyRealStatus = KEY_REALTIME_LOOSEN;
}
}
......@@ -1697,26 +1720,26 @@ Key_Real_Status_en_t Key_Real_Status_Read_Up(void)
}
/*下*/
Key_Real_Status_en_t Key_Real_Status_Read_Down(void)
Key_Status_en_t Key_Real_Status_Read_Down(void)
{
Key_Real_Status_en_t enKeyRealStatus = KEY_LINE_LOOSEN;
Key_Status_en_t enKeyRealStatus = KEY_REALTIME_LOOSEN;
uint16_t Key_R = 0;
Key_R = (uint16_t)RTE_Read_KEY_R();
if (RTE_Read_KEY_R_Valid() == 0)
{
enKeyRealStatus = KEY_LINE_LOOSEN;
enKeyRealStatus = KEY_REALTIME_LOOSEN;
}
else
{
if ((Key_R >= (2900 - 400)) && (Key_R <= (2900 + 400)))
{
enKeyRealStatus = KEY_LINE_PRESS;
enKeyRealStatus = KEY_REALTIME_PRESS;
}
else
{
enKeyRealStatus = KEY_LINE_LOOSEN;
enKeyRealStatus = KEY_REALTIME_LOOSEN;
}
}
......@@ -1724,52 +1747,52 @@ Key_Real_Status_en_t Key_Real_Status_Read_Down(void)
}
/*Enter*/
Key_Real_Status_en_t Key_Real_Status_Read_Enter(void)
Key_Status_en_t Key_Real_Status_Read_Enter(void)
{
Key_Real_Status_en_t enKeyRealStatus = KEY_LINE_LOOSEN;
Key_Status_en_t enKeyRealStatus = KEY_REALTIME_LOOSEN;
uint16_t Key_R = 0;
Key_R = (uint16_t)RTE_Read_KEY_R();
if (RTE_Read_KEY_R_Valid() == 0)
{
enKeyRealStatus = KEY_LINE_LOOSEN;
enKeyRealStatus = KEY_REALTIME_LOOSEN;
}
else
{
if ((Key_R >= (4800 - 400)) && (Key_R <= (5300 + 400)))
{
enKeyRealStatus = KEY_LINE_PRESS;
enKeyRealStatus = KEY_REALTIME_PRESS;
}
else
{
enKeyRealStatus = KEY_LINE_LOOSEN;
enKeyRealStatus = KEY_REALTIME_LOOSEN;
}
}
return enKeyRealStatus;
}
/*Return*/
Key_Real_Status_en_t Key_Real_Status_Read_Return(void)
Key_Status_en_t Key_Real_Status_Read_Return(void)
{
Key_Real_Status_en_t enKeyRealStatus = KEY_LINE_LOOSEN;
Key_Status_en_t enKeyRealStatus = KEY_REALTIME_LOOSEN;
uint16_t Key_R = 0;
Key_R = (uint16_t)RTE_Read_KEY_R();
if (RTE_Read_KEY_R_Valid() == 0)
{
enKeyRealStatus = KEY_LINE_LOOSEN;
enKeyRealStatus = KEY_REALTIME_LOOSEN;
}
else
{
if ((Key_R >= (7800 - 400)) && (Key_R <= (8900 + 400)))
{
enKeyRealStatus = KEY_LINE_PRESS;
enKeyRealStatus = KEY_REALTIME_PRESS;
}
else
{
enKeyRealStatus = KEY_LINE_LOOSEN;
enKeyRealStatus = KEY_REALTIME_LOOSEN;
}
}
......@@ -1777,26 +1800,26 @@ Key_Real_Status_en_t Key_Real_Status_Read_Return(void)
}
/*Menu*/
Key_Real_Status_en_t Key_Real_Status_Read_Menu(void)
Key_Status_en_t Key_Real_Status_Read_Menu(void)
{
Key_Real_Status_en_t enKeyRealStatus = KEY_LINE_LOOSEN;
Key_Status_en_t enKeyRealStatus = KEY_REALTIME_LOOSEN;
uint16_t Key_R = 0;
Key_R = (uint16_t)RTE_Read_KEY_R();
if (RTE_Read_KEY_R_Valid() == 0)
{
enKeyRealStatus = KEY_LINE_LOOSEN;
enKeyRealStatus = KEY_REALTIME_LOOSEN;
}
else
{
if ((Key_R >= (500 - 300)) && (Key_R <= (500 + 300)))
{
enKeyRealStatus = KEY_LINE_PRESS;
enKeyRealStatus = KEY_REALTIME_PRESS;
}
else
{
enKeyRealStatus = KEY_LINE_LOOSEN;
enKeyRealStatus = KEY_REALTIME_LOOSEN;
}
}
......@@ -1804,20 +1827,20 @@ Key_Real_Status_en_t Key_Real_Status_Read_Menu(void)
}
/*TRIO-ODO*/
Key_Real_Status_en_t Key_Real_Status_Read_ODOTrip(void)
Key_Status_en_t Key_Real_Status_Read_ODOTrip(void)
{
Key_Real_Status_en_t enKeyRealStatus = KEY_LINE_LOOSEN;
Key_Status_en_t enKeyRealStatus = KEY_REALTIME_LOOSEN;
uint16_t Key_R = 0;
Key_R = (uint16_t)CD4051_COM3_X5_IN;
if (Key_R == 0u)
{
enKeyRealStatus = KEY_LINE_PRESS;
enKeyRealStatus = KEY_REALTIME_PRESS;
}
else
{
enKeyRealStatus = KEY_LINE_LOOSEN;
enKeyRealStatus = KEY_REALTIME_LOOSEN;
}
return enKeyRealStatus;
......@@ -1833,16 +1856,25 @@ const Key_Attribute_st_t stKeyAttribute[KEY_NUM_MAX] =
{KEY_NEED_DEBOUNCE_NORMAL, Key_Real_Status_Read_ODOTrip, Key_Operation_ODOTrip},
};
Key_IGN_en_t Key_Get_IGN_Status(void)
void Key_KL30_Init_EXample(void)
{
Key_IGN_en_t ret = KEY_IG_INVALID;
if (SYS_OPR_STAT_IGN_ON)
{
ret = KEY_IG_ON;
}
else
Key_Init_st_t stKeyInitTem;
Key_uint16_t i;
for (i = 0; i < KEY_RAM_DATA_LEN; i++)
{
ret = KEY_IG_OFF;
u8KeyRamData[i] = 0;
}
return ret;
stKeyInitTem.u8KeyNum = KEY_NUM_MAX;
stKeyInitTem.enKeyIGNRealStatus = KEY_IG_OFF;
Key_KL30_Init(&u8KeyRamData[0], stKeyAttribute, &stKeyInitTem);
}
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);
}
\ No newline at end of file
#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