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 SendKeyCnt = 0;
static UINT32 LeftKeyPressCnt = 0;
static UINT32 LeftSendKeyCnt = 0;
// static UINT32 LeftKeyPressCnt = 0;
// static UINT32 LeftSendKeyCnt = 0;
static UINT32 RightKeyPressCnt = 0;
static UINT32 RightSendKeyCnt = 0;
// static UINT32 RightKeyPressCnt = 0;
// static UINT32 RightSendKeyCnt = 0;
//static BOOL KeyPress_Long = FALSE;
@ -179,17 +179,17 @@ UINT32 DrvKey_DetNormalKey(void)
static UINT32 cmdflag = 0;
static UINT32 time = 0;
static UINT32 LeftCmdflag = 0;
static VOS_TICK LeftTtick=0;
static UINT32 LeftFlag = 0;
// static UINT32 LeftCmdflag = 0;
// static VOS_TICK LeftTtick=0;
// static UINT32 LeftFlag = 0;
static UINT32 LeftPressFlag = 0;
static UINT32 LeftTime = 0;
// static UINT32 LeftTime = 0;
static UINT32 RightCmdflag = 0;
static VOS_TICK RightTtick=0;
static UINT32 RightFlag = 0;
//static UINT32 RightPressFlag = 0;
static UINT32 RightTime = 0;
// static UINT32 RightCmdflag = 0;
// static VOS_TICK RightTtick=0;
// static UINT32 RightFlag = 0;
// static UINT32 RightPressFlag = 0;
// static UINT32 RightTime = 0;
//static UINT32 retset_cmdflag = 0;
#if (ADC_KEY == ENABLE)
UINT32 uiKey1Lvl = VolDet_GetKey1Level();
@ -282,93 +282,99 @@ UINT32 DrvKey_DetNormalKey(void)
if (gpio_getPin(GPIO_KEY_DOWN)) {
uiKeyCode |= FLGKEY_DOWN;
}
if(gpio_getPin(GPIO_KEY_RIGHT))
{
if(0 == RightFlag){
vos_perf_mark(&RightTtick);
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_RIGHT)) {
uiKeyCode |= FLGKEY_RIGHT;
}
if (!gpio_getPin(GPIO_KEY_LEFT)) {
uiKeyCode |= FLGKEY_LEFT;
}
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(gpio_getPin(GPIO_KEY_RIGHT))
// {
// if(0 == RightFlag){
// vos_perf_mark(&RightTtick);
// 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);
// }
if(LeftKeyPressCnt && (0 == sf_get_fw_update())){
// }else {
// if(RightKeyPressCnt && (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);
// 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);
LeftSendKeyCnt = 0;
LeftKeyPressCnt = 0;
LeftFlag = 0;
LeftTtick = 0;
LeftCmdflag = 0;
}
// RightSendKeyCnt = 0;
// RightKeyPressCnt = 0;
// RightFlag = 0;
// RightTtick = 0;
// RightCmdflag = 0;
// }
}else{
LeftSendKeyCnt = 0;
LeftKeyPressCnt = 0;
LeftFlag = 0;
LeftTtick = 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)) {
uiKeyCode |= FLGKEY_DATAREADY;
}

View File

@ -4,6 +4,7 @@
#include "UIFlowLVGL/UIFlowWrnMsg/UIFlowWrnMsgAPI.h"
#include "UIFlowLVGL/UIFlowMenuCommonConfirm/UIFlowMenuCommonConfirmAPI.h"
#include "UIFlowLVGL/UIFlowPassword/UIFlowPasswordEventCallback.h"
#include "UIFlowLVGL_SPORTCAM.h"
#include "UIFlowPhotoParams.h"
#include "UIFlowPhotoFuncs.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_qview_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;
@ -1437,6 +1440,11 @@ static void UIFlowPhoto_Key(lv_obj_t* obj, uint32_t key)
#endif
switch(key)
{
case LV_USER_KEY_LEFT:
{
KeyLeftPressingTimeMs = 0;
break;
}
case LV_KEY_ENTER:
{
#if HUNTING_CAMERA_MCU == ENABLE
@ -1525,6 +1533,24 @@ void UIFlowPhoto_KeyRelease(lv_obj_t* obj, uint32_t key)
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)
{
@ -1564,8 +1590,6 @@ void UIFlowPhotoEventCallback(lv_obj_t* obj, lv_event_t event)
case LV_USER_EVENT_KEY_RELEASE:
{
uint32_t* key = (uint32_t*)lv_event_get_data();
printf(" ===================================== 2222 release key = %d\n", *key);
/* handle key event */
UIFlowPhoto_Key(obj, *key);
@ -1590,13 +1614,15 @@ void UIFlowPhotoEventCallback(lv_obj_t* obj, lv_event_t event)
// break;
// }
// case LV_USER_EVENT_KEY_LONG_PRESS:
// {
// uint32_t* key = (uint32_t*)lv_event_get_data();
// UIFlowPhoto_KeyRelease(obj, *key);
case LV_USER_EVENT_KEY_LONG_PRESS:
{
uint32_t* key = (uint32_t*)lv_event_get_data();
UIFlowPhtot_KeyLongPress(obj, *key);
break;
UIFlowPhoto_KeyRelease(obj, *key);
// break;
// }
break;
}
/* handle nvt event except key event */