Fixed long press key event bug.

This commit is contained in:
xiaojiazhu 2023-11-02 10:14:06 +08:00
parent 2ea7b78010
commit 0dbe58adbd
2 changed files with 132 additions and 100 deletions

View File

@ -151,11 +151,11 @@ void DrvKey_Init(void)
static UINT32 KeyTestPressCnt = 0; static UINT32 KeyTestPressCnt = 0;
static UINT32 SendKeyCnt = 0; static UINT32 SendKeyCnt = 0;
static UINT32 LeftKeyPressCnt = 0; // static UINT32 LeftKeyPressCnt = 0;
static UINT32 LeftSendKeyCnt = 0; // static UINT32 LeftSendKeyCnt = 0;
static UINT32 RightKeyPressCnt = 0; // static UINT32 RightKeyPressCnt = 0;
static UINT32 RightSendKeyCnt = 0; // static UINT32 RightSendKeyCnt = 0;
//static BOOL KeyPress_Long = FALSE; //static BOOL KeyPress_Long = FALSE;
@ -179,17 +179,17 @@ UINT32 DrvKey_DetNormalKey(void)
static UINT32 cmdflag = 0; static UINT32 cmdflag = 0;
static UINT32 time = 0; static UINT32 time = 0;
static UINT32 LeftCmdflag = 0; // static UINT32 LeftCmdflag = 0;
static VOS_TICK LeftTtick=0; // static VOS_TICK LeftTtick=0;
static UINT32 LeftFlag = 0; // static UINT32 LeftFlag = 0;
static UINT32 LeftPressFlag = 0; static UINT32 LeftPressFlag = 0;
static UINT32 LeftTime = 0; // static UINT32 LeftTime = 0;
static UINT32 RightCmdflag = 0; // static UINT32 RightCmdflag = 0;
static VOS_TICK RightTtick=0; // static VOS_TICK RightTtick=0;
static UINT32 RightFlag = 0; // static UINT32 RightFlag = 0;
//static UINT32 RightPressFlag = 0; // static UINT32 RightPressFlag = 0;
static UINT32 RightTime = 0; // static UINT32 RightTime = 0;
//static UINT32 retset_cmdflag = 0; //static UINT32 retset_cmdflag = 0;
#if (ADC_KEY == ENABLE) #if (ADC_KEY == ENABLE)
UINT32 uiKey1Lvl = VolDet_GetKey1Level(); UINT32 uiKey1Lvl = VolDet_GetKey1Level();
@ -282,93 +282,99 @@ UINT32 DrvKey_DetNormalKey(void)
if (gpio_getPin(GPIO_KEY_DOWN)) { if (gpio_getPin(GPIO_KEY_DOWN)) {
uiKeyCode |= FLGKEY_DOWN; uiKeyCode |= FLGKEY_DOWN;
} }
if (gpio_getPin(GPIO_KEY_RIGHT)) {
if(gpio_getPin(GPIO_KEY_RIGHT)) uiKeyCode |= FLGKEY_RIGHT;
{ }
if(0 == RightFlag){ if (!gpio_getPin(GPIO_KEY_LEFT)) {
vos_perf_mark(&RightTtick); uiKeyCode |= FLGKEY_LEFT;
RightFlag = 1;
}
RightKeyPressCnt++;
vos_perf_mark(&tticktmp);
RightTime = ((tticktmp/1000) - (RightTtick/1000));
if((!RightCmdflag) && (RightTime >= 5000))
{
RightCmdflag = 1;
sf_save_camera_info();
vos_perf_mark(&ttick);
}
}else {
if(RightKeyPressCnt && (0 == sf_get_fw_update())){
if((++RightSendKeyCnt < SendKey_LessCnt) && (!RightCmdflag)){//shot key
printf("[%s:%d] RightSendKeyCnt:%d RightKeyPressCnt:%d RightTime: %dms\n", __FUNCTION__, __LINE__, RightSendKeyCnt, RightKeyPressCnt, RightTime);
uiKeyCode |= FLGKEY_RIGHT;
}else {
printf("[%s:%d] RightSendKeyCnt:%d RightKeyPressCnt:%d RightTime: %dms\n", __FUNCTION__, __LINE__, RightSendKeyCnt, RightKeyPressCnt, RightTime);
RightSendKeyCnt = 0;
RightKeyPressCnt = 0;
RightFlag = 0;
RightTtick = 0;
RightCmdflag = 0;
}
}else{
RightSendKeyCnt = 0;
RightKeyPressCnt = 0;
RightFlag = 0;
RightTtick = 0;
RightCmdflag = 0;
}
} }
if(!(gpio_getPin(GPIO_KEY_LEFT))) // if(gpio_getPin(GPIO_KEY_RIGHT))
{ // {
if(0 == LeftFlag){ // if(0 == RightFlag){
vos_perf_mark(&LeftTtick); // vos_perf_mark(&RightTtick);
LeftFlag = 1; // RightFlag = 1;
} // }
LeftKeyPressCnt++; // RightKeyPressCnt++;
vos_perf_mark(&tticktmp); // vos_perf_mark(&tticktmp);
LeftTime = ((tticktmp/1000) - (LeftTtick/1000)); // RightTime = ((tticktmp/1000) - (RightTtick/1000));
if((!LeftCmdflag) && (LeftTime >= 3000)) // if((!RightCmdflag) && (RightTime >= 5000))
{ // {
LeftCmdflag = 1; // RightCmdflag = 1;
printf("[%s:%d] LeftSendKeyCnt:%d LeftKeyPressCnt:%d LeftTime: %dms\n", __FUNCTION__, __LINE__, LeftSendKeyCnt, LeftKeyPressCnt, LeftTime); // sf_save_camera_info();
Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_APO); // vos_perf_mark(&ttick);
} // }
}else {
if(LeftKeyPressCnt && (0 == sf_get_fw_update())){ // }else {
if((++LeftSendKeyCnt < SendKey_LessCnt) && (!LeftCmdflag)){//shot key // if(RightKeyPressCnt && (0 == sf_get_fw_update())){
printf("[%s:%d] LeftSendKeyCnt:%d LeftKeyPressCnt:%d LeftTime: %dms\n", __FUNCTION__, __LINE__, LeftSendKeyCnt, LeftKeyPressCnt, LeftTime);
uiKeyCode |= FLGKEY_LEFT;
}else {
printf("[%s:%d] LeftSendKeyCnt:%d LeftKeyPressCnt:%d LeftTime: %dms\n", __FUNCTION__, __LINE__, LeftSendKeyCnt, LeftKeyPressCnt, LeftTime);
LeftSendKeyCnt = 0; // if((++RightSendKeyCnt < SendKey_LessCnt) && (!RightCmdflag)){//shot key
LeftKeyPressCnt = 0; // printf("[%s:%d] RightSendKeyCnt:%d RightKeyPressCnt:%d RightTime: %dms\n", __FUNCTION__, __LINE__, RightSendKeyCnt, RightKeyPressCnt, RightTime);
LeftFlag = 0; // uiKeyCode |= FLGKEY_RIGHT;
LeftTtick = 0; // }else {
LeftCmdflag = 0; // printf("[%s:%d] RightSendKeyCnt:%d RightKeyPressCnt:%d RightTime: %dms\n", __FUNCTION__, __LINE__, RightSendKeyCnt, RightKeyPressCnt, RightTime);
}
}else{ // RightSendKeyCnt = 0;
LeftSendKeyCnt = 0; // RightKeyPressCnt = 0;
LeftKeyPressCnt = 0; // RightFlag = 0;
LeftFlag = 0; // RightTtick = 0;
LeftTtick = 0; // RightCmdflag = 0;
LeftCmdflag = 0; // }
}
// }else{
// RightSendKeyCnt = 0;
// RightKeyPressCnt = 0;
// RightFlag = 0;
// RightTtick = 0;
// RightCmdflag = 0;
// }
} // }
// if(!(gpio_getPin(GPIO_KEY_LEFT)))
// {
// if(0 == LeftFlag){
// vos_perf_mark(&LeftTtick);
// LeftFlag = 1;
// }
// LeftKeyPressCnt++;
// vos_perf_mark(&tticktmp);
// LeftTime = ((tticktmp/1000) - (LeftTtick/1000));
// if((!LeftCmdflag) && (LeftTime >= 3000))
// {
// LeftCmdflag = 1;
// printf("[%s:%d] LeftSendKeyCnt:%d LeftKeyPressCnt:%d LeftTime: %dms\n", __FUNCTION__, __LINE__, LeftSendKeyCnt, LeftKeyPressCnt, LeftTime);
// Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_APO);
// }
// }else {
// if(LeftKeyPressCnt && (0 == sf_get_fw_update())){
// if((++LeftSendKeyCnt < SendKey_LessCnt) && (!LeftCmdflag)){//shot key
// printf("[%s:%d] LeftSendKeyCnt:%d LeftKeyPressCnt:%d LeftTime: %dms\n", __FUNCTION__, __LINE__, LeftSendKeyCnt, LeftKeyPressCnt, LeftTime);
// uiKeyCode |= FLGKEY_LEFT;
// }else {
// printf("[%s:%d] LeftSendKeyCnt:%d LeftKeyPressCnt:%d LeftTime: %dms\n", __FUNCTION__, __LINE__, LeftSendKeyCnt, LeftKeyPressCnt, LeftTime);
// LeftSendKeyCnt = 0;
// LeftKeyPressCnt = 0;
// LeftFlag = 0;
// LeftTtick = 0;
// LeftCmdflag = 0;
// }
// }else{
// LeftSendKeyCnt = 0;
// LeftKeyPressCnt = 0;
// LeftFlag = 0;
// LeftTtick = 0;
// LeftCmdflag = 0;
// }
// }
if (gpio_getPin(GPIO_KEY_DATAREADY)) { if (gpio_getPin(GPIO_KEY_DATAREADY)) {
uiKeyCode |= FLGKEY_DATAREADY; uiKeyCode |= FLGKEY_DATAREADY;
} }

View File

@ -4,6 +4,7 @@
#include "UIFlowLVGL/UIFlowWrnMsg/UIFlowWrnMsgAPI.h" #include "UIFlowLVGL/UIFlowWrnMsg/UIFlowWrnMsgAPI.h"
#include "UIFlowLVGL/UIFlowMenuCommonConfirm/UIFlowMenuCommonConfirmAPI.h" #include "UIFlowLVGL/UIFlowMenuCommonConfirm/UIFlowMenuCommonConfirmAPI.h"
#include "UIFlowLVGL/UIFlowPassword/UIFlowPasswordEventCallback.h" #include "UIFlowLVGL/UIFlowPassword/UIFlowPasswordEventCallback.h"
#include "UIFlowLVGL_SPORTCAM.h"
#include "UIFlowPhotoParams.h" #include "UIFlowPhotoParams.h"
#include "UIFlowPhotoFuncs.h" #include "UIFlowPhotoFuncs.h"
#include "ImageApp/ImageApp_Photo.h" #include "ImageApp/ImageApp_Photo.h"
@ -49,6 +50,8 @@ static lv_task_t* task_qview = NULL;
static void task_selftimer_cb(lv_task_t* task); static void task_selftimer_cb(lv_task_t* task);
static void task_qview_cb(lv_task_t* task); static void task_qview_cb(lv_task_t* task);
static void task_update_icons_timer_cb(lv_task_t* task); static void task_update_icons_timer_cb(lv_task_t* task);
#define LONG_PRESS_INTERVAL 500
static unsigned long KeyLeftPressingTimeMs = 0;
static BOOL g_PhotoBgInitFileSys = FALSE; static BOOL g_PhotoBgInitFileSys = FALSE;
@ -1437,6 +1440,11 @@ static void UIFlowPhoto_Key(lv_obj_t* obj, uint32_t key)
#endif #endif
switch(key) switch(key)
{ {
case LV_USER_KEY_LEFT:
{
KeyLeftPressingTimeMs = 0;
break;
}
case LV_KEY_ENTER: case LV_KEY_ENTER:
{ {
#if HUNTING_CAMERA_MCU == ENABLE #if HUNTING_CAMERA_MCU == ENABLE
@ -1525,6 +1533,24 @@ void UIFlowPhoto_KeyRelease(lv_obj_t* obj, uint32_t key)
break; break;
} }
} }
void UIFlowPhtot_KeyLongPress(lv_obj_t* obj, uint32_t key)
{
switch(key)
{
case LV_USER_KEY_LEFT:
{
KeyLeftPressingTimeMs += LONG_PRESS_INTERVAL;
if (3 * 1000 <= KeyLeftPressingTimeMs)
{
Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_APO);
KeyLeftPressingTimeMs = 0;
}
break;
}
default:
break;
}
}
void UIFlowPhotoEventCallback(lv_obj_t* obj, lv_event_t event) void UIFlowPhotoEventCallback(lv_obj_t* obj, lv_event_t event)
{ {
@ -1564,8 +1590,6 @@ void UIFlowPhotoEventCallback(lv_obj_t* obj, lv_event_t event)
case LV_USER_EVENT_KEY_RELEASE: case LV_USER_EVENT_KEY_RELEASE:
{ {
uint32_t* key = (uint32_t*)lv_event_get_data(); uint32_t* key = (uint32_t*)lv_event_get_data();
printf(" ===================================== 2222 release key = %d\n", *key);
/* handle key event */ /* handle key event */
UIFlowPhoto_Key(obj, *key); UIFlowPhoto_Key(obj, *key);
@ -1590,13 +1614,15 @@ void UIFlowPhotoEventCallback(lv_obj_t* obj, lv_event_t event)
// break; // break;
// } // }
// case LV_USER_EVENT_KEY_LONG_PRESS: case LV_USER_EVENT_KEY_LONG_PRESS:
// { {
// uint32_t* key = (uint32_t*)lv_event_get_data(); uint32_t* key = (uint32_t*)lv_event_get_data();
// UIFlowPhoto_KeyRelease(obj, *key); UIFlowPhtot_KeyLongPress(obj, *key);
break;
UIFlowPhoto_KeyRelease(obj, *key);
// break; break;
// } }
/* handle nvt event except key event */ /* handle nvt event except key event */