From 08de3740d2330f23bd587730d132d469bef2c2cf Mon Sep 17 00:00:00 2001 From: xiaojiazhu Date: Tue, 21 Nov 2023 16:29:35 +0800 Subject: [PATCH] Fixed setting screen bug about left key long pressing. --- .../source/cardv/SrcCode/System/SysMain.c | 17 +- .../UIFlowMenuCommonItemEventCallback.c | 20 +- .../UIFlowMenuCommonOptionEventCallback.c | 467 +++++++++++++----- 3 files changed, 390 insertions(+), 114 deletions(-) diff --git a/code/application/source/cardv/SrcCode/System/SysMain.c b/code/application/source/cardv/SrcCode/System/SysMain.c index 8332a0bd0..8eb372663 100644 --- a/code/application/source/cardv/SrcCode/System/SysMain.c +++ b/code/application/source/cardv/SrcCode/System/SysMain.c @@ -523,10 +523,12 @@ bool pointer_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data) /*Return `false` because we are not buffering and no more data to read*/ return false; } - +extern int is_menu_screen_luck(void); void UserMainProc(void) { TM_BOOT_BEGIN("flow", "preboot"); + #define PRESSING_EVENT_INTERVAL_MS 500 + static unsigned long leftKeyPressingTime_ms = 0; ////////////////////////////////////////////////////////////// UserMainProc_Init(); @@ -599,6 +601,7 @@ void UserMainProc(void) } else{ g_keyboard_pressed = false; + leftKeyPressingTime_ms = 0; } //call input task immediately for read key state if(indev_keypad){ @@ -629,6 +632,18 @@ void UserMainProc(void) } if(paramArray[0] == NVTEVT_KEY_CONTINUE){ uint32_t nvt_user_key = lv_user_keymap_find(evt); + #define MENU_UNLUCK 0 + if (LV_USER_KEY_LEFT == nvt_user_key && MENU_UNLUCK == is_menu_screen_luck()) + { + printf(" check left key continue.\n"); + leftKeyPressingTime_ms += PRESSING_EVENT_INTERVAL_MS; + #define RETURN_TO_PHOTO_SCREEN (2 * 1000) + if (leftKeyPressingTime_ms >= RETURN_TO_PHOTO_SCREEN) + { + Ux_PostEvent(NVTEVT_SYSTEM_MODE, 1, PRIMARY_MODE_PHOTO); + leftKeyPressingTime_ms = 0; + } + } if(nvt_user_key != LV_USER_KEY_UNKNOWN){ if(indev_keypad && indev_keypad->group){ diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonItem/UIFlowMenuCommonItemEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonItem/UIFlowMenuCommonItemEventCallback.c index 332229313..c14ad8d8c 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonItem/UIFlowMenuCommonItemEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonItem/UIFlowMenuCommonItemEventCallback.c @@ -22,7 +22,18 @@ static lv_obj_t* menu_item = NULL; //#NT#Support IVOT_N12144_CO-148 -5 BOOL PrevSel_Img = false; //#NT#2023/11/03#Eric - end - +#define MENU_LUCK -1 +#define MENU_UNLUCK 0 +#define MENU_CLOSED 1 +static int gMenuLuck = MENU_CLOSED; +int is_menu_screen_luck(void) +{ + return gMenuLuck; +} +lv_obj_t *menu_opened_get(void) +{ + return menu_item; +} #if 0 static lv_obj_t* container_option1 = NULL; static lv_obj_t* container_option2 = NULL; @@ -317,6 +328,10 @@ static void LV_MenuItem_OnSelected(lv_obj_t* obj) return; } #endif + if (IDM_NETWORK_SELECTION == pItem->ItemId || IDM_CAMERA_FW_UPGRADE == pItem->ItemId || IDM_MODULE_FW_UPGRADE == pItem->ItemId) + { + gMenuLuck = MENU_LUCK; + } if((pItem->ItemId == IDM_CHECK_IN_PHOTO) || (pItem->ItemId == IDM_SD_LOOP) \ //#NT#2023/11/03#Eric - begin //#NT#Support IVOT_N12144_CO-148 -6 @@ -755,6 +770,7 @@ static void UIFlowMenuCommonItem_ScrOpen(lv_obj_t* obj) LV_MenuItem_OnOpen(obj); + gMenuLuck = MENU_UNLUCK; #if HUNTING_CAMERA_MCU == ENABLE // sf_set_menu_open(TRUE); #endif @@ -842,6 +858,7 @@ static void UIFlowMenuCommonItem_ScrClose(lv_obj_t* obj) DBG_DUMP("%s\r\n", __func__); Save_MenuInfo(); LV_MenuItem_OnClose(obj); + gMenuLuck = MENU_CLOSED; } @@ -865,6 +882,7 @@ static void UIFlowMenuCommonItem_ChildScrClose(lv_obj_t* obj,const LV_USER_EVENT } } + gMenuLuck = MENU_UNLUCK; // sf_set_menu_open(FALSE); } diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonOption/UIFlowMenuCommonOptionEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonOption/UIFlowMenuCommonOptionEventCallback.c index 950fd82f9..874fb5998 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonOption/UIFlowMenuCommonOptionEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonOption/UIFlowMenuCommonOptionEventCallback.c @@ -788,7 +788,247 @@ static void UIFlowMenuCommonOption_Key(lv_obj_t* obj, uint32_t key) } } - +static void CommondOptionCloseSencondPage(lv_obj_t* obj, uint32_t* key) +{ + TM_MENU* pMenu = TM_GetMenu(); + TM_PAGE* pPage; + TM_ITEM* pItem; + pPage = &pMenu->pPages[pMenu->SelPage]; + pItem = &pPage->pItems[pPage->SelItem]; + UINT16 itemID = pItem->ItemId; + printf("\033[33m[UIFlowMenuCommonOptionEventCallback]LV_USER_EVENT_KEY_RELEASE key:%d\033[0m\n", *key); + /* handle key event */ + switch(itemID) + { + case IDM_NETWORK_SELECTION: + // Option_Network_Selection_Key(obj, *key); + break; + case IDM_QR_PICTURE: + // UIFlowMenuCommonOption_Key(obj, *key); + break; + case IDM_PASSWORD: + if(isSetting) + { + Option_Password_Key(obj, *key); + } + else + { + // UIFlowMenuCommonOption_Key(obj, *key); + } + break; + case IDM_CAMERA_INFO: + // Option_CAMERA_INFO_Key(obj, *key); + break; + case IDM_CAMERA_NAME: + if(isSetting) + { + Option_Camera_Name_Key(obj, *key); + } + else + { + // UIFlowMenuCommonOption_Key(obj, *key); + } + break; + case IDM_CAMERA_MODE: + case IDM_IMAGE_SIZE: + case IDM_VIDEO_SIZE: + case IDM_VIDEA_LENGTH: + case IDM_FLASH_POWER: + // UIFlowMenuCommonOption_Key(obj, *key); + break; + case IDM_SENSITIVITY: + // Option_Sensitivity_Key(obj, *key); + break; + case IDM_DELAY: + if(isSetting) + { + Option_Delay_Key(obj, *key); + } + else + { + // UIFlowMenuCommonOption_Key(obj, *key); + } + break; + case IDM_OPERATING_TIME: + if(isSetting) + { + Option_Operating_Time_Key(obj, *key); + } + else + { + // UIFlowMenuCommonOption_Key(obj, *key); + } + break; + case IDM_FORMAT_SD: + case IDM_DATE_AND_TIME: + if(isSetting) + { + Option_DateTime_Key(obj, *key); + } + else + { + // UIFlowMenuCommonOption_Key(obj, *key); + } + break; + case IDM_MAX_NUM_DAY: + if(isSetting) + { + Option_MaxNum_Key(obj, *key); + } + else + { + // UIFlowMenuCommonOption_Key(obj, *key); + } + break; + case IDM_SETTINGS_CHECK: + // UIFlowMenuCommonOption_Key(obj, *key); + break; + case IDM_SEND_TYPE: + if(isSetting) + { + Option_send_time_Key(obj, *key); + } + else + { + // UIFlowMenuCommonOption_Key(obj, *key); + } + break; + case IDM_CHECK_IN_PHOTO: + case IDM_GPS: + // UIFlowMenuCommonOption_Key(obj, *key); + break; + case IDM_BATTERY_TYPE: + case IDM_SD_LOOP: + case IDM_CAMERA_FW_UPGRADE: + case IDM_MODULE_FW_UPGRADE: + case IDM_RESET: + // UIFlowMenuCommonOption_Key(obj, *key); + break; + default: + break; + } + isSetting = 0; +} +static void CommondOptionKeyCallback(lv_obj_t* obj, uint32_t* key) +{ + TM_MENU* pMenu = TM_GetMenu(); + TM_PAGE* pPage; + TM_ITEM* pItem; + pPage = &pMenu->pPages[pMenu->SelPage]; + pItem = &pPage->pItems[pPage->SelItem]; + UINT16 itemID = pItem->ItemId; + printf("\033[33m[UIFlowMenuCommonOptionEventCallback]LV_USER_EVENT_KEY_RELEASE key:%d\033[0m\n", *key); + /* handle key event */ + switch(itemID) + { + case IDM_NETWORK_SELECTION: + Option_Network_Selection_Key(obj, *key); + break; + case IDM_QR_PICTURE: + UIFlowMenuCommonOption_Key(obj, *key); + break; + case IDM_PASSWORD: + if(isSetting) + { + Option_Password_Key(obj, *key); + } + else + { + UIFlowMenuCommonOption_Key(obj, *key); + } + break; + case IDM_CAMERA_INFO: + Option_CAMERA_INFO_Key(obj, *key); + break; + case IDM_CAMERA_NAME: + if(isSetting) + { + Option_Camera_Name_Key(obj, *key); + } + else + { + UIFlowMenuCommonOption_Key(obj, *key); + } + break; + case IDM_CAMERA_MODE: + case IDM_IMAGE_SIZE: + case IDM_VIDEO_SIZE: + case IDM_VIDEA_LENGTH: + case IDM_FLASH_POWER: + UIFlowMenuCommonOption_Key(obj, *key); + break; + case IDM_SENSITIVITY: + Option_Sensitivity_Key(obj, *key); + break; + case IDM_DELAY: + if(isSetting) + { + Option_Delay_Key(obj, *key); + } + else + { + UIFlowMenuCommonOption_Key(obj, *key); + } + break; + case IDM_OPERATING_TIME: + if(isSetting) + { + Option_Operating_Time_Key(obj, *key); + } + else + { + UIFlowMenuCommonOption_Key(obj, *key); + } + break; + case IDM_FORMAT_SD: + case IDM_DATE_AND_TIME: + if(isSetting) + { + Option_DateTime_Key(obj, *key); + } + else + { + UIFlowMenuCommonOption_Key(obj, *key); + } + break; + case IDM_MAX_NUM_DAY: + if(isSetting) + { + Option_MaxNum_Key(obj, *key); + } + else + { + UIFlowMenuCommonOption_Key(obj, *key); + } + break; + case IDM_SETTINGS_CHECK: + UIFlowMenuCommonOption_Key(obj, *key); + break; + case IDM_SEND_TYPE: + if(isSetting) + { + Option_send_time_Key(obj, *key); + } + else + { + UIFlowMenuCommonOption_Key(obj, *key); + } + break; + case IDM_CHECK_IN_PHOTO: + case IDM_GPS: + UIFlowMenuCommonOption_Key(obj, *key); + break; + case IDM_BATTERY_TYPE: + case IDM_SD_LOOP: + case IDM_CAMERA_FW_UPGRADE: + case IDM_MODULE_FW_UPGRADE: + case IDM_RESET: + UIFlowMenuCommonOption_Key(obj, *key); + break; + default: + break; + } +} void UIFlowMenuCommonOptionEventCallback(lv_obj_t* obj, lv_event_t event) { TM_MENU* pMenu = TM_GetMenu(); @@ -811,6 +1051,8 @@ void UIFlowMenuCommonOptionEventCallback(lv_obj_t* obj, lv_event_t event) case LV_PLUGIN_EVENT_SCR_CLOSE: { printf("\033[33m[UIFlowMenuCommonOptionEventCallback]LV_PLUGIN_EVENT_SCR_CLOSE\033[0m\n"); + uint32_t key = LV_KEY_ENTER; + CommondOptionCloseSencondPage(obj, &key); isSetting = 0; UIFlowMenuCommonOption_ScrClose(obj); break; @@ -885,120 +1127,121 @@ void UIFlowMenuCommonOptionEventCallback(lv_obj_t* obj, lv_event_t event) case LV_USER_EVENT_KEY_RELEASE: { uint32_t* key = (uint32_t*)lv_event_get_data(); - printf("\033[33m[UIFlowMenuCommonOptionEventCallback]LV_USER_EVENT_KEY_RELEASE key:%d\033[0m\n", *key); - /* handle key event */ - switch(itemID) - { - case IDM_NETWORK_SELECTION: - Option_Network_Selection_Key(obj, *key); - break; - case IDM_QR_PICTURE: - UIFlowMenuCommonOption_Key(obj, *key); - break; - case IDM_PASSWORD: - if(isSetting) - { - Option_Password_Key(obj, *key); - } - else - { - UIFlowMenuCommonOption_Key(obj, *key); - } - break; - case IDM_CAMERA_INFO: - Option_CAMERA_INFO_Key(obj, *key); - break; - case IDM_CAMERA_NAME: - if(isSetting) - { - Option_Camera_Name_Key(obj, *key); - } - else - { - UIFlowMenuCommonOption_Key(obj, *key); - } - break; + CommondOptionKeyCallback(obj, key); + // printf("\033[33m[UIFlowMenuCommonOptionEventCallback]LV_USER_EVENT_KEY_RELEASE key:%d\033[0m\n", *key); + // /* handle key event */ + // switch(itemID) + // { + // case IDM_NETWORK_SELECTION: + // Option_Network_Selection_Key(obj, *key); + // break; + // case IDM_QR_PICTURE: + // UIFlowMenuCommonOption_Key(obj, *key); + // break; + // case IDM_PASSWORD: + // if(isSetting) + // { + // Option_Password_Key(obj, *key); + // } + // else + // { + // UIFlowMenuCommonOption_Key(obj, *key); + // } + // break; + // case IDM_CAMERA_INFO: + // Option_CAMERA_INFO_Key(obj, *key); + // break; + // case IDM_CAMERA_NAME: + // if(isSetting) + // { + // Option_Camera_Name_Key(obj, *key); + // } + // else + // { + // UIFlowMenuCommonOption_Key(obj, *key); + // } + // break; - case IDM_CAMERA_MODE: - case IDM_IMAGE_SIZE: - case IDM_VIDEO_SIZE: - case IDM_VIDEA_LENGTH: - case IDM_FLASH_POWER: - UIFlowMenuCommonOption_Key(obj, *key); - break; - case IDM_SENSITIVITY: - Option_Sensitivity_Key(obj, *key); - break; - case IDM_DELAY: - if(isSetting) - { - Option_Delay_Key(obj, *key); - } - else - { - UIFlowMenuCommonOption_Key(obj, *key); - } - break; - case IDM_OPERATING_TIME: - if(isSetting) - { - Option_Operating_Time_Key(obj, *key); - } - else - { - UIFlowMenuCommonOption_Key(obj, *key); - } - break; - case IDM_FORMAT_SD: - case IDM_DATE_AND_TIME: - if(isSetting) - { - Option_DateTime_Key(obj, *key); - } - else - { - UIFlowMenuCommonOption_Key(obj, *key); - } - break; + // case IDM_CAMERA_MODE: + // case IDM_IMAGE_SIZE: + // case IDM_VIDEO_SIZE: + // case IDM_VIDEA_LENGTH: + // case IDM_FLASH_POWER: + // UIFlowMenuCommonOption_Key(obj, *key); + // break; + // case IDM_SENSITIVITY: + // Option_Sensitivity_Key(obj, *key); + // break; + // case IDM_DELAY: + // if(isSetting) + // { + // Option_Delay_Key(obj, *key); + // } + // else + // { + // UIFlowMenuCommonOption_Key(obj, *key); + // } + // break; + // case IDM_OPERATING_TIME: + // if(isSetting) + // { + // Option_Operating_Time_Key(obj, *key); + // } + // else + // { + // UIFlowMenuCommonOption_Key(obj, *key); + // } + // break; + // case IDM_FORMAT_SD: + // case IDM_DATE_AND_TIME: + // if(isSetting) + // { + // Option_DateTime_Key(obj, *key); + // } + // else + // { + // UIFlowMenuCommonOption_Key(obj, *key); + // } + // break; - case IDM_MAX_NUM_DAY: - if(isSetting) - { - Option_MaxNum_Key(obj, *key); - } - else - { - UIFlowMenuCommonOption_Key(obj, *key); - } - break; - case IDM_SETTINGS_CHECK: - UIFlowMenuCommonOption_Key(obj, *key); - break; - case IDM_SEND_TYPE: - if(isSetting) - { - Option_send_time_Key(obj, *key); - } - else - { - UIFlowMenuCommonOption_Key(obj, *key); - } - break; - case IDM_CHECK_IN_PHOTO: - case IDM_GPS: - UIFlowMenuCommonOption_Key(obj, *key); - break; + // case IDM_MAX_NUM_DAY: + // if(isSetting) + // { + // Option_MaxNum_Key(obj, *key); + // } + // else + // { + // UIFlowMenuCommonOption_Key(obj, *key); + // } + // break; + // case IDM_SETTINGS_CHECK: + // UIFlowMenuCommonOption_Key(obj, *key); + // break; + // case IDM_SEND_TYPE: + // if(isSetting) + // { + // Option_send_time_Key(obj, *key); + // } + // else + // { + // UIFlowMenuCommonOption_Key(obj, *key); + // } + // break; + // case IDM_CHECK_IN_PHOTO: + // case IDM_GPS: + // UIFlowMenuCommonOption_Key(obj, *key); + // break; - case IDM_BATTERY_TYPE: - case IDM_SD_LOOP: - case IDM_CAMERA_FW_UPGRADE: - case IDM_MODULE_FW_UPGRADE: - case IDM_RESET: - UIFlowMenuCommonOption_Key(obj, *key); - break; - default: - break; - } + // case IDM_BATTERY_TYPE: + // case IDM_SD_LOOP: + // case IDM_CAMERA_FW_UPGRADE: + // case IDM_MODULE_FW_UPGRADE: + // case IDM_RESET: + // UIFlowMenuCommonOption_Key(obj, *key); + // break; + // default: + // break; + // } KeyPressingTimeMs = 0;