diff --git a/BSP/u-boot/arch/arm/include/asm/nvt-common/nvt_common.h b/BSP/u-boot/arch/arm/include/asm/nvt-common/nvt_common.h index ccbdfb210..79b859820 100755 --- a/BSP/u-boot/arch/arm/include/asm/nvt-common/nvt_common.h +++ b/BSP/u-boot/arch/arm/include/asm/nvt-common/nvt_common.h @@ -165,6 +165,7 @@ int nvt_process_rootfs_format(void); int nvt_check_is_fw_update_fw(void); int nvt_check_is_fomat_rootfs(void); int nvt_fs_set_blk_dev(void); +int nvt_fs_set_blk_dev_emmc(void); int nvt_process_sys_recovery(void); int nvt_flash_mark_bad(void); void nvt_shminfo_init(void); diff --git a/BSP/u-boot/board/novatek/common/nvt_ivot_fw_update.c b/BSP/u-boot/board/novatek/common/nvt_ivot_fw_update.c index b320b8d9c..ca39bd367 100755 --- a/BSP/u-boot/board/novatek/common/nvt_ivot_fw_update.c +++ b/BSP/u-boot/board/novatek/common/nvt_ivot_fw_update.c @@ -47,6 +47,7 @@ ((((UINT32)(data)) & 0x00FF0000) >> 8) | \ ((((UINT32)(data)) & 0xFF000000) >> 24)) ///< Swap [31:24] with [7:0] and [23:16] with [15:8]. static UINT32 g_LcdBl = TRUE; +static int curr_device = 1; static int nvt_update_partitions(unsigned int addr, unsigned int size, u64 part_off, u64 PartitionSize) { @@ -2347,16 +2348,39 @@ int nvt_fw_update(bool firm_upd_firm) } else if (p_shminfo->boot.LdCtrl2 & LDCF_BOOT_FLASH) { return ERR_NVT_UPDATE_NO_NEED; } else { - if (nvt_fs_set_blk_dev()) - return ERR_NVT_UPDATE_OPENFAILED; - else { - if (fs_size(get_nvt_bin_name(NVT_BIN_NAME_TYPE_FW), &size) < 0) { - return ERR_NVT_UPDATE_NO_NEED; - } - } + + /*added for emmc upgrade by greg*/ + extern struct mmc *init_mmc_device(int dev, bool force_init); + struct mmc *mmc; + mmc = init_mmc_device(curr_device, false); + if (!mmc) { + printf("Get eMMc device failed\n\r"); + return ERR_NVT_UPDATE_OPENFAILED; + } + + typedef int (*set_blk_dev_cb)(void); + set_blk_dev_cb nvt_fs_set_blk_dev_cb = NULL; + + if(nvt_fs_set_blk_dev() == 0 && fs_exists(get_nvt_bin_name(NVT_BIN_NAME_TYPE_FW))){ + printf("***found fw bin in sd card******\n"); + nvt_fs_set_blk_dev_cb = nvt_fs_set_blk_dev; + } + else if(nvt_fs_set_blk_dev_emmc() == 0 && fs_exists(get_nvt_bin_name(NVT_BIN_NAME_TYPE_FW))){ + + printf("***found fw bin in emmc*******\n"); + nvt_fs_set_blk_dev_cb = nvt_fs_set_blk_dev_emmc; + } + else{ + return ERR_NVT_UPDATE_OPENFAILED; + } + + if (nvt_fs_set_blk_dev_cb() || fs_size(get_nvt_bin_name(NVT_BIN_NAME_TYPE_FW), &size) < 0) { + return ERR_NVT_UPDATE_NO_NEED; + } + while (retry < UPDATE_ALL_IN_ONE_RETRY_TIMES) { - if (nvt_fs_set_blk_dev()) + if (nvt_fs_set_blk_dev_cb()) return ERR_NVT_UPDATE_OPENFAILED; else { #ifdef CONFIG_NVT_DISPLAY_BAR_FWUPDATE //uboot config diff --git a/BSP/u-boot/board/novatek/common/nvt_ivot_fw_update_utils.c b/BSP/u-boot/board/novatek/common/nvt_ivot_fw_update_utils.c index 45f9dcc83..8334bb4c3 100755 --- a/BSP/u-boot/board/novatek/common/nvt_ivot_fw_update_utils.c +++ b/BSP/u-boot/board/novatek/common/nvt_ivot_fw_update_utils.c @@ -426,6 +426,17 @@ int nvt_fs_set_blk_dev(void) return 0; } +/*added for emmc upgrade by greg*/ +int nvt_fs_set_blk_dev_emmc(void) +{ + if (fs_set_blk_dev("mmc", "1:1", FS_TYPE_FAT)){ + printf("MMC interface configure failed\n"); + return -1; + } + + return 0; +} + #ifndef CONFIG_NVT_SPI_NONE int nvt_flash_mark_bad(void) { diff --git a/BSP/u-boot/board/novatek/nvt-na51089/na51089evb.c b/BSP/u-boot/board/novatek/nvt-na51089/na51089evb.c index 1ae1041f4..b3700fd50 100755 --- a/BSP/u-boot/board/novatek/nvt-na51089/na51089evb.c +++ b/BSP/u-boot/board/novatek/nvt-na51089/na51089evb.c @@ -158,18 +158,21 @@ static int nvt_handle_fw_abin(void) char buf[512] = {0}; int ota_upgrade_sts = 0; int is_ota = 0; + if(WDT_OTA_GET_STS() == WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LOADER_DETECTING_FW)) { is_ota = 1; } else if(WDT_OTA_GET_STS() == WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LOADER_DETECTING_FW_AUTO)) { - is_ota = 1; + is_ota = 1; #ifdef CONFIG_NVT_DISPLAY_BAR_FWUPDATE //uboot config sf_display_lcd_bl(0); #endif } + printf("is_ota: %d\r\n", is_ota); + /* To handle firmware update */ ret = nvt_fw_update(false); if (ret < 0) { @@ -396,7 +399,7 @@ static int nvt_handle_fw_auto(void) if (ret < 0) return ret; } else if (nvt_detect_fw_tbin()) { - ret = nvt_handle_fw_tbin(); + ret = nvt_handle_fw_tbin(); if (ret < 0) return ret; @@ -425,7 +428,7 @@ static int nvt_handle_fw_auto(void) if (ret < 0) return ret; } else { - ret = nvt_handle_fw_abin(); + ret = nvt_handle_fw_abin(); if (ret < 0) return ret; } diff --git a/BSP/u-boot/drivers/mmc/nvt_ivot_mmc.c b/BSP/u-boot/drivers/mmc/nvt_ivot_mmc.c index 3b2546677..fd28c7bf3 100755 --- a/BSP/u-boot/drivers/mmc/nvt_ivot_mmc.c +++ b/BSP/u-boot/drivers/mmc/nvt_ivot_mmc.c @@ -53,7 +53,7 @@ #define SDIO2_MASK 0x7FF0000 #else #define SDIO_MASK 0x7FF -#define SDIO2_MASK 0x7FF000 +#define SDIO2_MASK 0x7FF0000 //from 0x7FF000 to 0x7FF0000 for emmc speed added by greg #endif #ifdef CONFIG_NVT_FPGA_EMULATION @@ -383,7 +383,7 @@ void pll_set_sdioclock_rate(int id, u32 value) regdata |= value; } else { regdata &= ~SDIO2_MASK; - regdata |= value << 12; + regdata |= value << 16;//Improve the read and write speed of the emmc added by greg } if (id != SDIO_HOST_ID_3) diff --git a/code/application/source/cardv/SrcCode/System/SysMain_Exe.c b/code/application/source/cardv/SrcCode/System/SysMain_Exe.c index 78e10f4aa..082d96410 100755 --- a/code/application/source/cardv/SrcCode/System/SysMain_Exe.c +++ b/code/application/source/cardv/SrcCode/System/SysMain_Exe.c @@ -483,7 +483,14 @@ INT32 System_OnShutdown(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) if(sf_get_mode_flag() && SHOW_POWER_OFF == displayShow) #endif { - if (FALSE == isMenu) + if (!sf_cardv_battery_level_get()) + { + Display_ShowSplash(SPLASH_POWEROFF); + SwTimer_DelayMs(500); + GxDisplay_Set(LAYER_OSD1, LAYER_STATE_ENABLE, 0); //turn off OSD1 + GxDisplay_Flush(LAYER_OSD1); + } + else if (FALSE == isMenu) { GxDisplay_Set(LAYER_OSD1, LAYER_STATE_ENABLE, 0); //turn off OSD1 GxDisplay_Flush(LAYER_OSD1); diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM.rar b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM.rar index 5b9c8a512..5b5176cb7 100644 Binary files a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM.rar and b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM.rar differ diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL.UIFlowClose.lvglscr b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL.UIFlowClose.lvglscr index e63620455..52b3196bb 100644 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL.UIFlowClose.lvglscr +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL.UIFlowClose.lvglscr @@ -5,6 +5,118 @@ "widgets": [ { "auto size": true, + "children": [ + { + "align": "Left", + "class": "lv_label", + "click": false, + "drag": false, + "event callback": "", + "font type": "Font_Type2", + "geometry": { + "height": 24, + "width": 121, + "x": 99, + "y": 110 + }, + "hidden": true, + "locked": false, + "long mode": "Expand", + "name": "label_2", + "recolor": false, + "string id": "None", + "styles": [ + { + "Text": { + "text_color": "0xffffff", + "text_font": "SF-UI-Text-Bold 20 1bpp", + "text_sel_bg_color": "0x00b495", + "text_sel_color": "0x3c3c3c" + }, + "part": 0, + "state": 0 + }, + { + "part": 0, + "state": 1 + }, + { + "part": 0, + "state": 2 + }, + { + "part": 0, + "state": 3 + }, + { + "part": 0, + "state": 4 + }, + { + "part": 0, + "state": 5 + }, + { + "part": 0, + "state": 6 + } + ], + "text": "Low Battery", + "widget": "Label" + }, + { + "auto size": true, + "class": "lv_img", + "click": false, + "drag": false, + "event callback": "", + "geometry": { + "height": 40, + "width": 48, + "x": 268, + "y": 6 + }, + "hidden": true, + "locked": false, + "name": "image_2", + "offset": { + "X": 0, + "Y": 0 + }, + "source": "sf_Battery_L0", + "styles": [ + { + "part": 0, + "state": 0 + }, + { + "part": 0, + "state": 1 + }, + { + "part": 0, + "state": 2 + }, + { + "part": 0, + "state": 3 + }, + { + "part": 0, + "state": 4 + }, + { + "part": 0, + "state": 5 + }, + { + "part": 0, + "state": 6 + } + ], + "widget": "Image" + } + ], "class": "lv_img", "click": false, "drag": false, diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowClose.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowClose.c index 347ed875f..5f6be543d 100644 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowClose.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowClose.c @@ -13,6 +13,8 @@ lv_obj_t* image_1_scr_uiflowclose; lv_obj_t* label_tips_scr_uiflowclose; lv_obj_t* image_closing_scr_uiflowclose; lv_obj_t* label_1_scr_uiflowclose; +lv_obj_t* label_2_scr_uiflowclose; +lv_obj_t* image_2_scr_uiflowclose; lv_obj_t* UIFlowClose_create(){ lv_obj_t *parent = lv_plugin_scr_create(); @@ -249,5 +251,114 @@ lv_obj_t* UIFlowClose_create(){ label_1_scr_uiflowclose = label_1; + static lv_style_t label_2_s0; + lv_style_init(&label_2_s0); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_color(&label_2_s0, LV_STATE_DEFAULT, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_grad_color(&label_2_s0, LV_STATE_DEFAULT, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_border_color(&label_2_s0, LV_STATE_DEFAULT, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_text_color(&label_2_s0, LV_STATE_DEFAULT, color); + lv_style_set_text_font(&label_2_s0,LV_STATE_DEFAULT,&sf_ui_text_bold_20_1bpp); + STYLE_COLOR_PROP(0xd3, 0x3c, 0x3c, 0x3c) ; lv_style_set_text_sel_color(&label_2_s0, LV_STATE_DEFAULT, color); + STYLE_COLOR_PROP(0x3a, 0x00, 0xb4, 0x95) ; lv_style_set_text_sel_bg_color(&label_2_s0, LV_STATE_DEFAULT, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_color(&label_2_s0, LV_STATE_CHECKED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_grad_color(&label_2_s0, LV_STATE_CHECKED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_border_color(&label_2_s0, LV_STATE_CHECKED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_text_color(&label_2_s0, LV_STATE_CHECKED, color); + STYLE_COLOR_PROP(0xd3, 0x3c, 0x3c, 0x3c) ; lv_style_set_text_sel_color(&label_2_s0, LV_STATE_CHECKED, color); + STYLE_COLOR_PROP(0x3a, 0x00, 0xb4, 0x95) ; lv_style_set_text_sel_bg_color(&label_2_s0, LV_STATE_CHECKED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_color(&label_2_s0, LV_STATE_FOCUSED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_grad_color(&label_2_s0, LV_STATE_FOCUSED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_border_color(&label_2_s0, LV_STATE_FOCUSED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_text_color(&label_2_s0, LV_STATE_FOCUSED, color); + STYLE_COLOR_PROP(0xd3, 0x3c, 0x3c, 0x3c) ; lv_style_set_text_sel_color(&label_2_s0, LV_STATE_FOCUSED, color); + STYLE_COLOR_PROP(0x3a, 0x00, 0xb4, 0x95) ; lv_style_set_text_sel_bg_color(&label_2_s0, LV_STATE_FOCUSED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_color(&label_2_s0, LV_STATE_EDITED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_grad_color(&label_2_s0, LV_STATE_EDITED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_border_color(&label_2_s0, LV_STATE_EDITED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_text_color(&label_2_s0, LV_STATE_EDITED, color); + STYLE_COLOR_PROP(0xd3, 0x3c, 0x3c, 0x3c) ; lv_style_set_text_sel_color(&label_2_s0, LV_STATE_EDITED, color); + STYLE_COLOR_PROP(0x3a, 0x00, 0xb4, 0x95) ; lv_style_set_text_sel_bg_color(&label_2_s0, LV_STATE_EDITED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_color(&label_2_s0, LV_STATE_HOVERED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_grad_color(&label_2_s0, LV_STATE_HOVERED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_border_color(&label_2_s0, LV_STATE_HOVERED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_text_color(&label_2_s0, LV_STATE_HOVERED, color); + STYLE_COLOR_PROP(0xd3, 0x3c, 0x3c, 0x3c) ; lv_style_set_text_sel_color(&label_2_s0, LV_STATE_HOVERED, color); + STYLE_COLOR_PROP(0x3a, 0x00, 0xb4, 0x95) ; lv_style_set_text_sel_bg_color(&label_2_s0, LV_STATE_HOVERED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_color(&label_2_s0, LV_STATE_PRESSED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_grad_color(&label_2_s0, LV_STATE_PRESSED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_border_color(&label_2_s0, LV_STATE_PRESSED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_text_color(&label_2_s0, LV_STATE_PRESSED, color); + STYLE_COLOR_PROP(0xd3, 0x3c, 0x3c, 0x3c) ; lv_style_set_text_sel_color(&label_2_s0, LV_STATE_PRESSED, color); + STYLE_COLOR_PROP(0x3a, 0x00, 0xb4, 0x95) ; lv_style_set_text_sel_bg_color(&label_2_s0, LV_STATE_PRESSED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_color(&label_2_s0, LV_STATE_DISABLED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_grad_color(&label_2_s0, LV_STATE_DISABLED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_border_color(&label_2_s0, LV_STATE_DISABLED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_text_color(&label_2_s0, LV_STATE_DISABLED, color); + STYLE_COLOR_PROP(0xd3, 0x3c, 0x3c, 0x3c) ; lv_style_set_text_sel_color(&label_2_s0, LV_STATE_DISABLED, color); + STYLE_COLOR_PROP(0x3a, 0x00, 0xb4, 0x95) ; lv_style_set_text_sel_bg_color(&label_2_s0, LV_STATE_DISABLED, color); + lv_obj_t *label_2 = lv_label_create(image_1, NULL); + lv_obj_set_hidden(label_2, true); + lv_obj_set_click(label_2, false); + lv_obj_set_drag(label_2, false); + lv_plugin_label_allocate_ext_attr(label_2); + lv_label_set_text(label_2,"Low Battery"); + lv_plugin_label_allocate_ext_attr(label_2); + lv_plugin_label_set_font_type(label_2, LV_PLUGIN_LANGUAGE_FONT_TYPE_2); + lv_obj_set_pos(label_2, 99, 110); + lv_obj_set_size(label_2, 121, 24); + lv_obj_add_style(label_2, 0, &label_2_s0); + + label_2_scr_uiflowclose = label_2; + + + static lv_style_t image_2_s0; + lv_style_init(&image_2_s0); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_color(&image_2_s0, LV_STATE_DEFAULT, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_grad_color(&image_2_s0, LV_STATE_DEFAULT, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_border_color(&image_2_s0, LV_STATE_DEFAULT, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_outline_color(&image_2_s0, LV_STATE_DEFAULT, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_image_recolor(&image_2_s0, LV_STATE_DEFAULT, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_color(&image_2_s0, LV_STATE_CHECKED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_grad_color(&image_2_s0, LV_STATE_CHECKED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_border_color(&image_2_s0, LV_STATE_CHECKED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_outline_color(&image_2_s0, LV_STATE_CHECKED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_image_recolor(&image_2_s0, LV_STATE_CHECKED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_color(&image_2_s0, LV_STATE_FOCUSED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_grad_color(&image_2_s0, LV_STATE_FOCUSED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_border_color(&image_2_s0, LV_STATE_FOCUSED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_outline_color(&image_2_s0, LV_STATE_FOCUSED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_image_recolor(&image_2_s0, LV_STATE_FOCUSED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_color(&image_2_s0, LV_STATE_EDITED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_grad_color(&image_2_s0, LV_STATE_EDITED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_border_color(&image_2_s0, LV_STATE_EDITED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_outline_color(&image_2_s0, LV_STATE_EDITED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_image_recolor(&image_2_s0, LV_STATE_EDITED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_color(&image_2_s0, LV_STATE_HOVERED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_grad_color(&image_2_s0, LV_STATE_HOVERED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_border_color(&image_2_s0, LV_STATE_HOVERED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_outline_color(&image_2_s0, LV_STATE_HOVERED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_image_recolor(&image_2_s0, LV_STATE_HOVERED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_color(&image_2_s0, LV_STATE_PRESSED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_grad_color(&image_2_s0, LV_STATE_PRESSED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_border_color(&image_2_s0, LV_STATE_PRESSED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_outline_color(&image_2_s0, LV_STATE_PRESSED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_image_recolor(&image_2_s0, LV_STATE_PRESSED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_color(&image_2_s0, LV_STATE_DISABLED, color); + STYLE_COLOR_PROP(0x02, 0xff, 0xff, 0xff) ; lv_style_set_bg_grad_color(&image_2_s0, LV_STATE_DISABLED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_border_color(&image_2_s0, LV_STATE_DISABLED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_outline_color(&image_2_s0, LV_STATE_DISABLED, color); + STYLE_COLOR_PROP(0x01, 0x00, 0x00, 0x00) ; lv_style_set_image_recolor(&image_2_s0, LV_STATE_DISABLED, color); + lv_obj_t *image_2 = lv_img_create(image_1, NULL); + lv_obj_set_hidden(image_2, true); + lv_obj_set_click(image_2, false); + lv_obj_set_drag(image_2, false); + lv_obj_set_pos(image_2, 268, 6); + lv_obj_set_size(image_2, 48, 40); + lv_img_set_src(image_2, &sf_battery_l0); + lv_obj_add_style(image_2, 0, &image_2_s0); + + image_2_scr_uiflowclose = image_2; + + return parent; } diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowClose.h b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowClose.h index a130f3e4f..c07a3af71 100644 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowClose.h +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowClose.h @@ -21,6 +21,8 @@ extern lv_obj_t* image_1_scr_uiflowclose; extern lv_obj_t* label_tips_scr_uiflowclose; extern lv_obj_t* image_closing_scr_uiflowclose; extern lv_obj_t* label_1_scr_uiflowclose; +extern lv_obj_t* label_2_scr_uiflowclose; +extern lv_obj_t* image_2_scr_uiflowclose; /********************** * GLOBAL PROTOTYPES diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.c index 2d64deba0..8d2ae8740 100644 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.c @@ -8,6 +8,7 @@ #include #include #define UPDATE_TIMEER_MS 200 +#define LOW_BATTERY_TIMEER_MS 500 static lv_task_t* update_timer = NULL; static lv_group_t* gp = NULL; static DISPLAY_FINAL_E gPowerOff = DISPLAY_FINAL_END; @@ -26,30 +27,60 @@ static void task_update_timer_cb(lv_task_t* task) { static short closing_index = 0; static unsigned int time_ms = 3 * 1000; - lv_plugin_res_id res[] = { + if (DISPLAY_FINAL_LOW_BATTERY == gPowerOff) + { + time_ms -= LOW_BATTERY_TIMEER_MS; + closing_index ++; + if (time_ms == 0) + { + printf("task_update_timer_cb gPowerOff = %d\n", gPowerOff); + Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, APP_POWER_OFF_BATT_EMPTY); + } + } + else + { + lv_plugin_res_id res[] = { LV_PLUGIN_IMG_ID_SF_BUSY_1, LV_PLUGIN_IMG_ID_SF_BUSY_2, LV_PLUGIN_IMG_ID_SF_BUSY_3, LV_PLUGIN_IMG_ID_SF_BUSY_4 - }; - closing_index = closing_index % 4; - lv_plugin_img_set_src(image_closing_scr_uiflowclose, res[closing_index]); - lv_label_set_text_fmt(label_1_scr_uiflowclose, "%ds", time_ms / 1000); - time_ms -= UPDATE_TIMEER_MS; - closing_index ++; - if (time_ms == 0) - { - printf("task_update_timer_cb gPowerOff = %d\n", gPowerOff); - Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 2, APP_POWER_OFF_APO, gPowerOff); - if(update_timer){ - lv_task_del(update_timer); - update_timer = NULL; - // update_selftimer(); + }; + closing_index = closing_index % 4; + lv_plugin_img_set_src(image_closing_scr_uiflowclose, res[closing_index]); + lv_label_set_text_fmt(label_1_scr_uiflowclose, "%ds", time_ms / 1000); + time_ms -= UPDATE_TIMEER_MS; + closing_index ++; + if (time_ms == 0) + { + printf("task_update_timer_cb gPowerOff = %d\n", gPowerOff); + Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 2, APP_POWER_OFF_APO, gPowerOff); + if(update_timer){ + lv_task_del(update_timer); + update_timer = NULL; + // update_selftimer(); + } } } + + } void OpenClosingScreen(const DISPLAY_FINAL_E powerOff) { + if (DISPLAY_FINAL_LOW_BATTERY == powerOff) + { + printf("[%s, %d]DISPLAY_FINAL_LOW_BATTERY\n", __FUNCTION__, __LINE__); + lv_obj_set_hidden(image_closing_scr_uiflowclose, true); + lv_obj_set_hidden(label_tips_scr_uiflowclose, true); + lv_obj_set_hidden(label_2_scr_uiflowclose, false); + lv_obj_set_hidden(image_2_scr_uiflowclose, false); + } + else + { + lv_obj_set_hidden(image_closing_scr_uiflowclose, false); + lv_obj_set_hidden(label_tips_scr_uiflowclose, false); + lv_obj_set_hidden(label_2_scr_uiflowclose, true); + lv_obj_set_hidden(image_2_scr_uiflowclose, true); + } gPowerOff = powerOff; lv_plugin_scr_open(UIFlowClose, NULL); } diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.h b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.h index 88535d321..020201b4f 100644 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.h +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.h @@ -6,7 +6,8 @@ typedef enum { DISPLAY_FINAL_DO_NOT_SHOW_POWER_OFF = 0, DISPLAY_FINAL_SHOW_POWER_OFF, - DISPLAY_FINAL_END + DISPLAY_FINAL_END, + DISPLAY_FINAL_LOW_BATTERY } DISPLAY_FINAL_E; void OpenClosingScreen(const DISPLAY_FINAL_E powerOff); #endif /*UIFLOW_CLOSE_EVENT_CALLBACK_H*/ \ No newline at end of file diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonConfirm/UIFlowMenuCommonConfirmEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonConfirm/UIFlowMenuCommonConfirmEventCallback.c index 4986586f0..2eadb79d8 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonConfirm/UIFlowMenuCommonConfirmEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonConfirm/UIFlowMenuCommonConfirmEventCallback.c @@ -614,6 +614,19 @@ void UIFlowMenuCommonConfirmEventCallback(lv_obj_t* obj, lv_event_t event) break; } + case LV_USER_EVENT_NVTMSG: + { + const LV_USER_EVENT_NVTMSG_DATA* msg = (const LV_USER_EVENT_NVTMSG_DATA*)lv_event_get_data(); + if (msg->event == NVTEVT_BATTERY_LOW) + { + #define DISPLAY_FINAL_LOW_BATTERY 3 + OpenClosingScreen(DISPLAY_FINAL_LOW_BATTERY); + break; + } + + break; + } + default: break; 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 e0713de50..92119e90d 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 @@ -3,6 +3,7 @@ #include "UIFlowLVGL/UIFlowLVGL.h" #include "UIApp/Network/UIAppNetwork.h" #include "UIFlowLVGL/UIFlowMenuCommonItem/MenuId.h" +#include "UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.h" #include #include #include @@ -134,10 +135,21 @@ static int is_camera_fw_upgrade(void) //char font = System_Get_DCF_Disk_Drive(dcf_handle) == 'B' ? 'B' : 'A'; //char fw_file[64] = {'\0'}; //sprintf((char *)fw_file, "%c%s", font, FW_UPDATE_NAME); - hFile = FileSys_OpenFile(FW_UPDATE_NAME, FST_OPEN_READ); + hFile = FileSys_OpenFile("B:\\FW98565A.bin", FST_OPEN_READ); //hFile = FileSys_OpenFile(fw_file, FST_OPEN_READ); //if (gBattery < 40 || hFile == NULL) if (hFile == NULL) + { + printf("[%s:%d]emmc no update file\n", __FUNCTION__, __LINE__); + } + else + { + FileSys_CloseFile(hFile); + return UPGRADABLE; + } + + hFile = FileSys_OpenFile(FW_UPDATE_NAME, FST_OPEN_READ); + if (hFile == NULL) { printf("[%s:%d]sd card no update file\n", __FUNCTION__, __LINE__); return NOT_UPGRADABLE; @@ -1203,6 +1215,18 @@ void UIFlowMenuCommonItemEventCallback(lv_obj_t* obj, lv_event_t event) lv_indev_wait_release(lv_indev_get_act()); break; } + case LV_USER_EVENT_NVTMSG: + { + const LV_USER_EVENT_NVTMSG_DATA* msg = (const LV_USER_EVENT_NVTMSG_DATA*)lv_event_get_data(); + if (msg->event == NVTEVT_BATTERY_LOW) + { + #define DISPLAY_FINAL_LOW_BATTERY 3 + OpenClosingScreen(DISPLAY_FINAL_LOW_BATTERY); + break; + } + + break; + } default: break; 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 940e243dd..fc47de496 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 @@ -4,6 +4,7 @@ #include "UIApp/Network/UIAppNetwork.h" #include #include "UIFlowLVGL/UIFlowMenuCommonConfirm/UIFlowMenuCommonConfirmAPI.h" +#include "UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.h" #include "UIFlowLVGL/UIFlowMenuCommonItem/MenuId.h" #if HUNTING_CAMERA_MCU == ENABLE #include @@ -1899,6 +1900,18 @@ void UIFlowMenuCommonOptionEventCallback(lv_obj_t* obj, lv_event_t event) lv_indev_wait_release(lv_indev_get_act()); break; } + case LV_USER_EVENT_NVTMSG: + { + const LV_USER_EVENT_NVTMSG_DATA* msg = (const LV_USER_EVENT_NVTMSG_DATA*)lv_event_get_data(); + if (msg->event == NVTEVT_BATTERY_LOW) + { + #define DISPLAY_FINAL_LOW_BATTERY 3 + OpenClosingScreen(DISPLAY_FINAL_LOW_BATTERY); + break; + } + + break; + } default: break; diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c index f5b599367..d34654522 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMovie/UIFlowMovieEventCallback.c @@ -4,6 +4,7 @@ #include "UIFlowLVGL/UIFlowLVGL.h" #include "UIFlowLVGL/UIFlowWrnMsg/UIFlowWrnMsgAPI.h" #include "UIFlowLVGL/UIFlowPassword/UIFlowPasswordEventCallback.h" +#include "UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.h" #include "UIFlowLVGL/UIFlowCommon/UIFlowCommon.h" #include #include "SysMain.h" @@ -1417,6 +1418,13 @@ static void UIFlowMovie_NVTMSG(lv_obj_t* obj, const LV_USER_EVENT_NVTMSG_DATA* m break; } + case NVTEVT_BATTERY_LOW: + { + #define DISPLAY_FINAL_LOW_BATTERY 3 + OpenClosingScreen(DISPLAY_FINAL_LOW_BATTERY); + break; + } + //#NT#2021/09/10#Philex Lin--begin case NVTEVT_CB_MOVIE_REC_FINISH: { diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPassword/UIFlowPasswordEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPassword/UIFlowPasswordEventCallback.c index bd7226db4..64216f95d 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPassword/UIFlowPasswordEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPassword/UIFlowPasswordEventCallback.c @@ -5,6 +5,7 @@ #include "sf_mcu.h" #include "sf_common.h" #include +#include "UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.h" static int PasswordIndex = 0; @@ -440,6 +441,18 @@ printf(" UIFlowPasswordEventCallback %d\n", event); { break; } + case LV_USER_EVENT_NVTMSG: + { + const LV_USER_EVENT_NVTMSG_DATA* msg = (const LV_USER_EVENT_NVTMSG_DATA*)lv_event_get_data(); + if (msg->event == NVTEVT_BATTERY_LOW) + { + #define DISPLAY_FINAL_LOW_BATTERY 3 + OpenClosingScreen(DISPLAY_FINAL_LOW_BATTERY); + break; + } + + break; + } default: break; diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c index 2b7349b09..f4b096b47 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c @@ -3,6 +3,7 @@ #include "UIFlowLVGL/UIFlowLVGL.h" #include "UIFlowLVGL/UIFlowWrnMsg/UIFlowWrnMsgAPI.h" #include "UIFlowLVGL/UIFlowMenuCommonConfirm/UIFlowMenuCommonConfirmAPI.h" +#include "UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.h" #include "UIFlowLVGL/UIFlowPassword/UIFlowPasswordEventCallback.h" #include "UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.h" #include "UIFlowLVGL_SPORTCAM.h" @@ -373,7 +374,7 @@ static void update_battery(void) // #else // lv_plugin_img_set_src(image_battery_0_scr_uiflowphoto, res[GetBatteryLevel()]); // #endif - + //printf("[%s:%d]battery: %d\n", __FUNCTION__, __LINE__, sf_cardv_battery_level_get()); lv_plugin_img_set_src(image_battery_0_scr_uiflowphoto, res[sf_cardv_battery_level_get()]); } @@ -1893,6 +1894,15 @@ static void task_update_icons_timer_cb(lv_task_t* task) if (autoOffTime >= ShutDownTime - is_password && autoOffTime < ShutDownTime + 3) { + if (sf_cardv_battery_level_get() == 0) + { + #define DISPLAY_FINAL_LOW_BATTERY 3 + OpenClosingScreen(DISPLAY_FINAL_LOW_BATTERY); + while(true) + { + usleep(100); + } + } printf("[%s]go to shutdown", __FUNCTION__); // unsigned int autoCloseTime_s = ShutDownTime == GO_TO_WORK_MODE_TIME ? 30 : 3; if (GO_TO_WORK_MODE_TIME == ShutDownTime || MENU_GO_TO_WORK_MODE_TIME_S == ShutDownTime) @@ -2108,8 +2118,11 @@ static void UIFlowPhoto_NVTMSG(lv_obj_t* obj, const LV_USER_EVENT_NVTMSG_DATA* m break; case NVTEVT_BATTERY_LOW: - UIFlowPhoto_OnBatteryLow(obj, msg); + { + #define DISPLAY_FINAL_LOW_BATTERY 3 + OpenClosingScreen(DISPLAY_FINAL_LOW_BATTERY); break; + } case NVTEVT_BACKGROUND_DONE: { NVTEVT message=msg->paramArray[ONDONE_PARAM_INDEX_CMD]; diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPlay/UIFlowPlayEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPlay/UIFlowPlayEventCallback.c index ac4b145ce..8a8f9b3d6 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPlay/UIFlowPlayEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPlay/UIFlowPlayEventCallback.c @@ -16,6 +16,7 @@ #include "UIWnd/LVGL_SPORTCAM/UIInfo/UIInfo.h" #include "UIFlowLVGL/UIFlowWrnMsg/UIFlowWrnMsgAPI.h" #include "UIFlowLVGL/UIFlowMenuCommonConfirm/UIFlowMenuCommonConfirmAPI.h" +#include "UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.h" #include "kwrap/nvt_type.h" #include "SF_SysStrgMng.h" #if (USE_DCF == ENABLE) @@ -1411,6 +1412,13 @@ static void UIFlowPlay_ChildScrClose(lv_obj_t* obj, const void * data) //Return from thumbnail, magnify or delete mode and play current image again. switch (msg->event) { + case NVTEVT_BATTERY_LOW: + { + #define DISPLAY_FINAL_LOW_BATTERY 3 + OpenClosingScreen(DISPLAY_FINAL_LOW_BATTERY); + break; + } + case NVTRET_THUMBNAIL: case NVTRET_MAGNIFY: g_PlbData.State = PLB_ST_FULL; @@ -2579,6 +2587,12 @@ static void UIFlowPlay_NVTMSG(lv_obj_t* obj, const LV_USER_EVENT_NVTMSG_DATA* ms { switch(msg->event) { + case NVTEVT_BATTERY_LOW: + { + #define DISPLAY_FINAL_LOW_BATTERY 3 + OpenClosingScreen(DISPLAY_FINAL_LOW_BATTERY); + break; + } case NVTEVT_CB_MOVIE_FINISH: { UIFlowPlay_CB_Finish(obj,msg); diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPlayThumb/UIFlowPlayThumbEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPlayThumb/UIFlowPlayThumbEventCallback.c index 239d396c6..2eeef88f9 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPlayThumb/UIFlowPlayThumbEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPlayThumb/UIFlowPlayThumbEventCallback.c @@ -6,6 +6,7 @@ #include "GxStrg.h" #include #include "NVTUserCommand.h" +#include "UIFlowLVGL/UIFlowClose/UIFlowCloseEventCallback.h" #if HUNTING_CAMERA_MCU == ENABLE #include #endif @@ -806,6 +807,12 @@ static void UIFlowPlayThumb_NVTMSG(lv_obj_t* obj, const LV_USER_EVENT_NVTMSG_DAT break; } + case NVTEVT_BATTERY_LOW: + { + #define DISPLAY_FINAL_LOW_BATTERY 3 + OpenClosingScreen(DISPLAY_FINAL_LOW_BATTERY); + break; + } default: break; diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowWrnMsg/UIFlowWrnMsgEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowWrnMsg/UIFlowWrnMsgEventCallback.c index d200c61ea..3ec1b2113 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowWrnMsg/UIFlowWrnMsgEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowWrnMsg/UIFlowWrnMsgEventCallback.c @@ -426,6 +426,18 @@ void message_box_wrnmsg_event_callback(lv_obj_t* obj, lv_event_t event) break; } + case LV_USER_EVENT_NVTMSG: + { + const LV_USER_EVENT_NVTMSG_DATA* msg = (const LV_USER_EVENT_NVTMSG_DATA*)lv_event_get_data(); + if (msg->event == NVTEVT_BATTERY_LOW) + { + #define DISPLAY_FINAL_LOW_BATTERY 3 + OpenClosingScreen(DISPLAY_FINAL_LOW_BATTERY); + break; + } + + break; + } } } diff --git a/code/lib/source/sifar/code/source/common/sf_common.c b/code/lib/source/sifar/code/source/common/sf_common.c index 331a8ac11..e5242f672 100755 --- a/code/lib/source/sifar/code/source/common/sf_common.c +++ b/code/lib/source/sifar/code/source/common/sf_common.c @@ -1780,7 +1780,7 @@ static SINT32 sf_cardv_proccess_cmd_key(SF_MESSAGE_BUF_S *pMessageBuf) } break; case SF_EVENT_KEY_TEST: - sf_do_upgrade_thread();//update + sf_do_upgrade_thread();//update break; default: @@ -1987,15 +1987,17 @@ static SINT32 sf_cardv_proccess_cmd_poweroff(SF_MESSAGE_BUF_S *pMessageBuf) //MLOGI("ID = %#x\n",pMessageBuf->arg1); + + switch(pMessageBuf->arg1) + { + case APP_POWER_OFF_BATT_EMPTY: + Ux_PostEvent(NVTEVT_BATTERY_LOW, NULL, NULL); + return; + break; + default: + break; + } Ux_PostEvent(NVTEVT_SYSTEM_SHUTDOWN, 1, pMessageBuf->arg1); //shutdown start - /*switch(pMessageBuf->arg1) - { - case APP_POWER_OFF_BATT_EMPTY: - - break; - default: - break; - }*/ return SF_SUCCESS; } void* sf_cardv_message_thread(void *argv) @@ -2242,14 +2244,17 @@ static UINT32 sf_fwupdate(void) #else BOOL sf_ota_trigger(void) { + UINT32 uiUserData = 0; char cmd[128]={0}; - if((PWR_ON_SETUP == sf_cardv_convert_power_on_mode())) + if((PWR_ON_SETUP == sf_cardv_convert_power_on_mode())) { + uiUserData = WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LINUX_TRIGGER); } else { + uiUserData = WDT_OTA_MAKEFOURCC(WDT_OTA_STS_LINUX_TRIGGER_AUTO); } Ux_PostEvent(NVTEVT_ALGMSG_FOCUSEND, 0); @@ -2328,8 +2333,7 @@ void* sf_sys_do_upgrade(void *arg) #if !SF_UBOOT_UPDATA_FW UIMenuStoreInfo *puiPara = sf_ui_para_get(); #endif - SLOGW("Begin to do Upgrade!\n"); - + //if(sf_is_enough_power_to_update() == FALSE) if(sf_cardv_battery_value_get() < 40){ sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR); @@ -2338,7 +2342,8 @@ void* sf_sys_do_upgrade(void *arg) // sf_set_fw_update(0); // } else{ - sf_mcu_reg_set(SF_MCU_SOFT_UPDATE, 1); + + sf_mcu_reg_set(SF_MCU_SOFT_UPDATE, 1); //sf_set_fw_update(1); sf_set_send_statu(TRUE); sf_sys_status_led_set(SF_LED_SYS_STATE_UPDATE); @@ -2347,12 +2352,13 @@ void* sf_sys_do_upgrade(void *arg) #if SF_UBOOT_UPDATA_FW sf_ota_trigger(); #else - //BKG_PostEvent(NVTEVT_BKW_FW_UPDATE); + + //BKG_PostEvent(NVTEVT_BKW_FW_UPDATE); if(0 != sf_fwupdate()){ sf_sys_status_led_set(SF_LED_SYS_STATE_ERROR); } else { - //SysResetFlag(); + //SysResetFlag(); puiPara->OtaFlag = 1; Save_MenuInfo(); //sync(); diff --git a/loader/LibExt/LIBExt_src/Ctrl_Flow/bl_func.c b/loader/LibExt/LIBExt_src/Ctrl_Flow/bl_func.c index 90fed45cb..fbdaf9005 100755 --- a/loader/LibExt/LIBExt_src/Ctrl_Flow/bl_func.c +++ b/loader/LibExt/LIBExt_src/Ctrl_Flow/bl_func.c @@ -115,12 +115,16 @@ static LDR_RECOVERY_TRIGGER_CB gRecoveryTriggerCallBack = NULL; //#if (STORAGE_EXT_TYPE != STORAGE_EXT_USB) //static BOOL g_is_recovery_triggered = FALSE; // indicate recovery flow is triggered. //#endif + + _THUMB2 static int bl_is_smp(unsigned char *p_fdt); static UINT32 g_uiStartBlkUpdateFW = StartNandBlkUpdateFW; static UINT32 g_uiNandBlkSize = 0; static UINT32 g_rtos_load_addr = 0; static UINT32 g_rtos_target_addr = 0; static UINT32 g_rtos_size = 0; +static UINT32 g_update_from_emmc = 0; + #if (FDT_SUPPORT) #define PATH_MEM_DRAM "/nvt_memory_cfg/dram" @@ -2948,7 +2952,8 @@ _THUMB2 static unsigned int bl_process_flash_boot(unsigned char *p_tmp, DRAM_PAR } } #if 1 - else if (p_dram_partition->rtos_addr == 0 || DUAL_RTOS_SUPPORT || (gFastbootKeyCallBack == NULL) || (!gFastbootKeyCallBack())) { + //added by greg + else if (p_dram_partition->rtos_addr == 0 || DUAL_RTOS_SUPPORT || (gFastbootKeyCallBack == NULL) || (!gFastbootKeyCallBack()|| g_update_from_emmc)) { // load uboot er = bl_load_uboot_from_flash((unsigned char *)p_dram_partition->fdt_addr, p_tmp); if (er != 0) { @@ -2960,6 +2965,7 @@ _THUMB2 static unsigned int bl_process_flash_boot(unsigned char *p_tmp, DRAM_PAR if (er != 0) { bl_displayErrMsg("boot uboot failed\r\n"); } + } #endif else { @@ -3140,53 +3146,10 @@ _THUMB2 UINT32 bl_mainFlow(void) // rtc reset shutdown timer // rtc_resetShutDownTimer(); - - - -#if 0 - // adjust PAD driving (if required) - bl_adjustDriving(); - /* - - @b RTC_PWR_SW_STS: Power on source is PWR_SW - - @b RTC_PWR_VBAT_STS: Power on source is PWR_VBAT - - @b RTC_PWR_VBUS_STS: Power on source is PWR_VBUS - */ - uiPowerOnSrc = rtc_getPWRONSource(); - - if (uiPowerOnSrc & RTC_PWR_SW_STS) { - uart_putSystemUARTStr("\r\nSW PON\r\n"); - } else if (uiPowerOnSrc & RTC_PWR_VBAT_STS) { - uart_putSystemUARTStr("\r\nVBAT PON\r\n"); - } else if (uiPowerOnSrc & RTC_PWR_VBUS_STS) { - uart_putSystemUARTStr("\r\nVBUS PON\r\n"); - } else if (rtc_getIsAlarmPowerOn()) { - uart_putSystemUARTStr("\r\nPwrAlarm PON\r\n"); - } else { - uart_putSystemUARTStr("\r\nPOR PON\r\n"); - } -#endif - // Display Loader Version + // Display Loader Version debug_msg((char *)LOADER_START_STR); UTL_setDrvTmpBufferAddress(uiTmpBufferAddr); - -#if 0 // for now, reduce code size - if (rtc_chkS3boot()) { - UINT32 resume_addr; - - uart_putSystemUARTStr("main selfing..\r\n"); - resume_addr = bl_resume_cpu1((unsigned char *)_BOARD_IPC_ADDR_); - if (resume_addr == 0) { - // in codition for MODELEXT_BUILT_IN_ON - resume_addr = RESUME_ADDR; - } - return resume_addr; - } else { - - uart_putSystemUARTStr("main not selfing..\r\n"); - } -#endif - #if 0 // Sample to hook spi flash extending function flash_installIdentifyCB(bl_spiIdentify); @@ -3231,38 +3194,11 @@ _THUMB2 UINT32 bl_mainFlow(void) uiLoaderFunc |= FUNC_RUN_CARD; } else if ((int_strg_obj->flash_getBlockSize() == EMMC_BLOCK_SIZE) && gRecoveryTriggerCallBack && gRecoveryTriggerCallBack()) { debug_msg("Recovery triggered not support currently.\r\n"); -#if 0 - // open flash - if (bl_flash_open() != 0) { - bl_displayErrMsg("flash open failed\r\n"); - } else { - flash_mount_fs(0, BaseOfStack + 0x4000, FAT_HEAP_BUFFER_SIZE); - if (flash_mount_partition(g_uiPartitionID) == E_OK) { - if (flash_open_file(RECOVERY_FW_NAME) == TRUE) { - NVTPACK_MEM mem_in ; - flash_read_file((UINT8 *)uiUpdateMainBinBufAddr, SIZE_PRELOAD); - mem_in.p_data = (void *)uiUpdateMainBinBufAddr; - mem_in.len = uiUpdateFileLen; - // all in one bin - if (bl_chk_valid_all_in_one(&mem_in) == 0) { - // Read all - uiUpdateFileLen = flash_read_file((UINT8 *)uiUpdateMainBinBufAddr, FAT_READ_TOTAL_FILE_LENGTH); - uiLoaderFunc |= FUNC_UPDATE_FW; - g_is_recovery_triggered = TRUE; - } else { - debug_msg("Recovery should be all in one bin!\r\n"); - } - } else { - debug_msg("no recovery bin!\r\n"); - } - } else { - debug_msg("Partition error!\r\n"); - } - } -#endif + } #if 1 else if ((gSpecialKeyCallBack(ota_flag)) && (gCardDetectCallBack())) { + if (card_open() == TRUE && fat_initFAT(uiheapBufferAddr, FAT_HEAP_BUFFER_SIZE) == TRUE) { #if UPDATE_SIM_CODE BOOL bWDTInit = UTL_canUpdateSecKey(); @@ -3323,102 +3259,7 @@ _THUMB2 UINT32 bl_mainFlow(void) } // Run FW has lower priority else if (fat_open_rootfile(RUN_FW_NAME) == TRUE) { - NVTPACK_MEM mem_in ; - uiUpdateFileLen = fat_read_rootfile((UINT8 *)uiUpdateMainBinBufAddr, SIZE_PRELOAD); - mem_in.p_data = (void *)uiUpdateMainBinBufAddr; - mem_in.len = uiUpdateFileLen; - if (bl_chk_valid_all_in_one(&mem_in) == 0) { - // Read all - uiUpdateFileLen = fat_read_rootfile((UINT8 *)uiUpdateMainBinBufAddr, FAT_READ_TOTAL_FILE_LENGTH); - } else { - // Read rtos - unsigned int adjusted_addr = 0; - unsigned int adjusted_size = 0; - if (bl_load_rtos_from_non_nvtpack(uiUpdateMainBinBufAddr, uiUpdateFileLen, &adjusted_addr, &adjusted_size) != 0) { - bl_displayErrMsg("invalid firmware"); - } else { - uiFwBaseAddr = adjusted_addr; //fix compressed fit bl_checkDramScanFW() after copy its to temp area, see commit log - uiUpdateFileLen = adjusted_size; - } - uiLoaderFunc |= FUNC_RUN_CARD; - } - fat_close_rootfile(); - debug_msg("\r\n"); // for line end RRRRRRR.... - uiLoaderFunc |= FUNC_RUN_CARD; - } -#if UPDATE_SIM_CODE - } -#endif - debug_msg("card close\r\n"); - card_close(); - } else { - debug_msg("card open fail\r\n"); -// while (1); - } - } -#endif -#if 0 - else if (((gCardDetectCallBack == NULL) || gCardDetectCallBack())) - { - debug_msg("sf gCardDetectCallBack gCardDetectCallBack\r\n"); - if (card_open() == TRUE && fat_initFAT(uiheapBufferAddr, FAT_HEAP_BUFFER_SIZE) == TRUE) { -#if UPDATE_SIM_CODE - BOOL bWDTInit = UTL_canUpdateSecKey(); - if (bWDTInit && fat_open_rootfile(RUN_WRKEY_NAME) == TRUE) { - debug_msg("sim.bin exist\r\n"); // the others A or T are skipped. - // Read byte count specified in file directory entry - uiUpdateFileLen = fat_read_rootfile((UINT8 *)uiUpdateMainBinBufAddr, FAT_READ_TOTAL_FILE_LENGTH); - fat_close_rootfile(); - debug_msg("\r\n"); // for line end RRRRRRR.... - uiLoaderFunc |= FUNC_RUN_WRBIN; - } else { // exclude others update if FUNC_RUN_WRBIN is existing. -#endif - // Update loader or not, loader is fixed to 16 KB - if (fat_open_rootfile(UPDATE_LOADER_NAME) == TRUE) { - // Read byte count specified in file directory entry - fat_read_rootfile((UINT8 *)uiUpdateBootloaderBufAddr, FAT_READ_TOTAL_FILE_LENGTH); - fat_close_rootfile(); - debug_msg("\r\n"); // for line end RRRRRRR.... - debug_msg("sf ld\r\n"); // for line end RRRRRRR.... - uiLoaderFunc |= FUNC_UPDATE_LOADER; - uiLoaderSize = *((UINT32 *)(uiUpdateBootloaderBufAddr + 0x24)); - } - // "Update FW" or "Run FW" function - // Update FW has higher priority - if (fat_open_rootfile(UPDATE_FW_NAME) == TRUE) { - NVTPACK_MEM mem_in ; - fat_read_rootfile((UINT8 *)uiUpdateMainBinBufAddr, SIZE_PRELOAD); - mem_in.p_data = (void *)uiUpdateMainBinBufAddr; - mem_in.len = uiUpdateFileLen; - // all in one bin - debug_msg("sf fw\r\n"); // for line end RRRRRRR.... - if (bl_chk_valid_all_in_one(&mem_in) == 0) { - // Read all - uiUpdateFileLen = fat_read_rootfile((UINT8 *)uiUpdateMainBinBufAddr, FAT_READ_TOTAL_FILE_LENGTH); - uiLoaderFunc |= FUNC_UPDATE_FW; - } else { - // only rtos - debug_msg("not all-in-one, force behavior as T bin.\r\n"); - adjusted_addr = 0; - adjusted_size = 0; - if (bl_load_rtos_from_non_nvtpack(uiUpdateMainBinBufAddr, uiUpdateFileLen, &adjusted_addr, &adjusted_size) == 0) { - uiFwBaseAddr = adjusted_addr; //fix compressed fit bl_checkDramScanFW() after copy its to temp area, see commit log - uiUpdateFileLen = adjusted_size; - } else { - bl_displayErrMsg("invalid firmware"); - } -#if UPDATE_EMU_CODE - uiLoaderFunc |= FUNC_UPDATE_FW; -#else - uiLoaderFunc |= FUNC_RUN_CARD; -#endif - } - fat_close_rootfile(); - debug_msg("\r\n"); // for line end RRRRRRR.... - } - // Run FW has lower priority - else if (fat_open_rootfile(RUN_FW_NAME) == TRUE) { NVTPACK_MEM mem_in ; uiUpdateFileLen = fat_read_rootfile((UINT8 *)uiUpdateMainBinBufAddr, SIZE_PRELOAD); mem_in.p_data = (void *)uiUpdateMainBinBufAddr; @@ -3442,10 +3283,16 @@ _THUMB2 UINT32 bl_mainFlow(void) debug_msg("\r\n"); // for line end RRRRRRR.... uiLoaderFunc |= FUNC_RUN_CARD; } + /* no fw found in sd card , start emmc check flow */ + else{ + + g_update_from_emmc = 1; + uiLoaderFunc &= ~(FUNC_UPDATE_LOADER); /* loader won't be updated by emmc */ + } #if UPDATE_SIM_CODE } #endif - card_close(); + card_close(); } else { debug_msg("card open fail\r\n"); // while (1); @@ -3455,6 +3302,8 @@ _THUMB2 UINT32 bl_mainFlow(void) else if (((gSpecialKeyCallBack == NULL) || gSpecialKeyCallBack(ota_flag)) && ((gCardDetectCallBack != NULL) || (gCardDetectCallBack() == FALSE))) { debug_msg("No card inserted\r\n"); + g_update_from_emmc = 1; + uiLoaderFunc &= ~(FUNC_UPDATE_LOADER); /* loader won't be updated by emmc */ } #endif diff --git a/loader/Project/Model/Src/prj_main.c b/loader/Project/Model/Src/prj_main.c index b33b8e7f6..cd9285a4d 100755 --- a/loader/Project/Model/Src/prj_main.c +++ b/loader/Project/Model/Src/prj_main.c @@ -175,7 +175,7 @@ static BOOL prj_isSpecialKeyPressed(UINT32 ota_flag) static BOOL prj_issfSpecialKeyPressed(UINT32 ota_flag) { - #if (MODEL == MODEL_S530) + #if (MODEL == MODEL_S530) if ((!gpio_getPin(GPIO_SPECIAL_KEY)) && (gpio_getPin(GPIO_SPECIAL_USB))) #elif (MODEL == MODEL_S550) if ((!(gpio_getPin(GPIO_SPECIAL_KEY2)) && (gpio_getPin(GPIO_SPECIAL_USB))))//Force Upgrade @@ -242,7 +242,7 @@ _THUMB2 void prj_main(void) { PSTORAGE_OBJ strg_obj = NULL; loader_setVersion(_LDR_VER_); - + debug_msg("\r\n"); debug_msg("LD_VER "); debug_msg(Dec2HexStr2Bytes((LoaderInternalInfo[1] >> 28) & 0xF)); @@ -261,7 +261,7 @@ _THUMB2 void prj_main(void) } else { debug_msg(_LOADER_VERSION_STR_); } - + // Setup loader/fw file names loader_setUpdateFwName(_UPDATE_FW_NAME_); loader_setUpdateLdrName(_UPDATE_LOADER_NAME_);