diff --git a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c index 707270bdb..883a054c1 100755 --- a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c +++ b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c @@ -22,7 +22,9 @@ #if (USE_DCF == ENABLE) #include "DCF.h" #endif - +#include "kwrap/flag.h" +#include "kwrap/debug.h" +#include "kwrap/util.h" #if HUNTING_CAMERA_MCU == ENABLE #include @@ -51,6 +53,49 @@ SF_ST_MMC_DEV *sf_mmc_dev[MMC_DEV_MAX_NUM] = {NULL}; SF_ST_MMC_DEV *pMMCDev = NULL; +static ID sf_dev_flag_id = 0; + +void sf_dev_flag_init(void) +{ + ER ret = E_OK; + T_CFLG cflg; + if ((ret |= vos_flag_create(&sf_dev_flag_id, &cflg, "sf_dev_flag_id")) != E_OK) + { + SYS_SLOGE("sf_dev_flag_id fail\r\n"); + } + vos_flag_clr(sf_dev_flag_id, (FLGPTN)-1); +} + +void sf_dev_flag_set_done(DEV_FLAG_INIT boot_init) +{ + vos_flag_set(sf_dev_flag_id, (FLGPTN)(1 << boot_init)); +} + +void sf_dev_flag_wait_done(DEV_FLAG_INIT boot_init) +{ + FLGPTN flgptn; + vos_flag_wait(&flgptn, sf_dev_flag_id, (FLGPTN)(1 << boot_init), TWF_ANDW); +} + +int sf_dev_flag_wait_done_timeout(DEV_FLAG_INIT boot_init, int timeout_ms) +{ + ER ret = E_OK; + FLGPTN flgptn; + + ret = vos_flag_wait_timeout(&flgptn, sf_dev_flag_id, (FLGPTN)(1 << boot_init), TWF_ANDW, vos_util_msec_to_tick(timeout_ms)); + if(unlikely(ret != E_OK)){ + printf("wait(%lu) init timeout(%ld ms)!\n", boot_init, timeout_ms); + } + + return ret; +} + +void sf_dev_flag_clear_done(DEV_FLAG_INIT boot_init) +{ + //vos_flag_clr(sf_mcu_flag_id, (FLGPTN)(1 << boot_init)); + vos_flag_clr(sf_dev_flag_id, (FLGPTN)-1); +} + void SF_SetMMCDev(SF_ST_MMC_DEV *pDev) { if(pDev == NULL) @@ -144,6 +189,10 @@ static UINT32 SF_StrgSpaceCheckFull(MMC_DEV_TYPE mmc_dev) if(diskFree < MIN_FREE_SIZE_MB) /* 30MB*/ { ret = 1; + } + else + { + ret = 0; if(mmc_dev == MMC_DEV_SD){ sf_set_sd_card_full(1); } @@ -151,10 +200,6 @@ static UINT32 SF_StrgSpaceCheckFull(MMC_DEV_TYPE mmc_dev) sf_set_emmc_card_full(1); } } - else - { - ret = 0; - } if(sf_mmc_dev != NULL) { sf_mmc_dev[mmc_dev]->space_state = ret == 0 ? MMC_DEV_SPACE_STATE_ENOUGH : MMC_DEV_SPACE_STATE_NO_ENOUGH; @@ -315,7 +360,7 @@ SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void) { if(puiPara->SdLoopSwitch == 1) { - workable_dev = MMC_DEV_SD; + workable_dev = MMC_DEV_EMMC; } } } @@ -338,7 +383,7 @@ SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void) { if(puiPara->SdLoopSwitch == 1) { - workable_dev = MMC_DEV_SD; + workable_dev = MMC_DEV_EMMC; } } } @@ -382,6 +427,7 @@ static void* mmc_monitoring_thread(void *arg) static MMC_DEV_TYPE current_id = MMC_DEV_NO; while(MMCMonitorTskCfg.IsRun) { + sf_dev_flag_wait_done_timeout(DEV_FLAG_INIT_FILENAMINGOK, 5000); pMMCDev = SF_StrgCheckWorkableDev(); if(pMMCDev != NULL) { @@ -401,7 +447,7 @@ static void* mmc_monitoring_thread(void *arg) int sf_mmc_dev_check_start(void) { SF_StrgInit();// 初始化sf_mmc设备Obj - + sf_dev_flag_init(); int ret = pthread_create(&MMCMonitorTskCfg.TskId, NULL, mmc_monitoring_thread, NULL); if(ret != SF_SUCCESS) { @@ -413,3 +459,34 @@ int sf_mmc_dev_check_start(void) return 0; } +void sf_file_sys_int_status(void) +{ + MLOGD("s\n"); + + SF_MESSAGE_BUF_S stMessageBuf = {0}; + stMessageBuf.arg1 = CMD_SD_FILESYS_INIT_STATUS; + stMessageBuf.cmdId = CMD_SD; + sf_com_message_send_to_app(&stMessageBuf); + sf_thumb_dir(); +} + +void sf_thumb_dir(void) +{ + MLOGD("s\n"); + char thumb_dir[128] = {'\0'}; + + sprintf(thumb_dir, "%c%s", 'A', PHOTO_THUMB_PATH); + FileSys_MakeDir(thumb_dir); + +#if SF_IQ_TEST != ENABLE + FileSys_SetAttrib(thumb_dir, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE); +#endif + +#if FS_MULTI_STRG_FUNC + sprintf(thumb_dir, "%c%s", 'B', PHOTO_THUMB_PATH); + FileSys_MakeDir(thumb_dir); +#if SF_IQ_TEST != ENABLE + FileSys_SetAttrib(thumb_dir, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE); +#endif +#endif +} diff --git a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h index 06671823a..7644f31e4 100755 --- a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h +++ b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h @@ -71,6 +71,13 @@ typedef enum MMC_DEV_LOOP_STATE_OFF = 2, }MMC_DEV_LOOP_STATE; +typedef enum DEV_FLAG_INIT { + DEV_FLAG_INIT_FILESYSOK = 0x00, + DEV_FLAG_INIT_FILENAMINGOK, + DEV_FLAG_GET, + DEV_FLAG_INIT_MAX_CNT = 32, //flag max bit cnt is 32 +} DEV_FLAG_INIT; + typedef struct { MMC_DEV_TYPE dev_type; @@ -90,8 +97,8 @@ void SF_SetMMCDev(SF_ST_MMC_DEV *pDev); SF_ST_MMC_DEV *SF_GetMMCDev(void); int sf_mmc_dev_check_start(void); int SF_GetMMCDevHandle(MMC_DEV_TYPE dev_type); - - - +void sf_dev_flag_set_done(DEV_FLAG_INIT boot_init); +void sf_file_sys_int_status(void); +void sf_thumb_dir(void); #endif //_SF_SYS_STRG_MNG_H_ diff --git a/code/application/source/cardv/SrcCode/System/SysMain.c b/code/application/source/cardv/SrcCode/System/SysMain.c index edc6cd185..56f3acd42 100644 --- a/code/application/source/cardv/SrcCode/System/SysMain.c +++ b/code/application/source/cardv/SrcCode/System/SysMain.c @@ -26,6 +26,7 @@ #include #include #include +#include "SF_SysStrgMng.h" #endif #if (LOGFILE_FUNC==ENABLE) #include "LogFile.h" @@ -1298,6 +1299,11 @@ void System_WaitFS(void) TM_BOOT_END("Fs", "WaitAttach"); is_fs_ready = TRUE; +#if HUNTING_CAMERA_MCU == ENABLE + sf_dev_flag_set_done(DEV_FLAG_INIT_FILENAMINGOK); + sf_file_sys_int_status(); +#endif + BKG_PostEvent(NVTEVT_BKW_INIT_FILESYS); } diff --git a/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c b/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c index 608d4d459..81f4cba42 100755 --- a/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c +++ b/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c @@ -2705,22 +2705,6 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) g_photo_ImageRatioSize = IMAGERATIO_SIZE[ImageRatioIdx]; // g_photo_ImageRatioSize = IMAGERATIO_SIZE[4]; - char thumb_dir[128] = {'\0'}; - - sprintf(thumb_dir, "%c%s", 'A', PHOTO_THUMB_PATH); - FileSys_MakeDir(thumb_dir); - -#if SF_IQ_TEST != ENABLE - FileSys_SetAttrib(thumb_dir, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE); -#endif - -#if FS_MULTI_STRG_FUNC - sprintf(thumb_dir, "%c%s", 'B', PHOTO_THUMB_PATH); - FileSys_MakeDir(thumb_dir); -#if SF_IQ_TEST != ENABLE - FileSys_SetAttrib(thumb_dir, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE); -#endif -#endif GOIO_Turn_Onoff_IRCUT(1); diff --git a/code/application/source/sf_app/code/include/sf_param_enum.h b/code/application/source/sf_app/code/include/sf_param_enum.h index 3ed5a9ee2..eaa34cdfd 100755 --- a/code/application/source/sf_app/code/include/sf_param_enum.h +++ b/code/application/source/sf_app/code/include/sf_param_enum.h @@ -405,6 +405,7 @@ typedef enum sf_MESSAGE_CMD_SD_e CMD_SD_FULL = 5, CMD_SD_FORMAT = 6, CMD_SD_STRG_WORKABLE_DEV = 7, + CMD_SD_FILESYS_INIT_STATUS = 8, CMD_SD_SYSTEM_CB_CONFIG = 0xFFFFFFFF, }SF_MESSAGE_CMD_SD_E; diff --git a/code/application/source/sf_app/code/source/app/sf_common.c b/code/application/source/sf_app/code/source/app/sf_common.c index 42952aa33..f0023a4ab 100755 --- a/code/application/source/sf_app/code/source/app/sf_common.c +++ b/code/application/source/sf_app/code/source/app/sf_common.c @@ -604,7 +604,7 @@ static SINT32 sf_app_process_cmd_keyctrl(SF_MESSAGE_BUF_S *pMessageBuf) static SINT32 sfStrgDevOnActionMount(int dev_id, int result) { - SINT16 startup = sf_poweron_type_get(); + // SINT16 startup = sf_poweron_type_get(); UINT32 status = 0; status = result; switch (status) @@ -612,32 +612,33 @@ static SINT32 sfStrgDevOnActionMount(int dev_id, int result) case FST_STA_OK: sf_set_card(1); sf_sd_status_set(SF_SD_OK); - - if(SF_MCU_STARTUP_ONKEY == startup) - { - SF_STORE_ATTR_S storeattrs = {0}; - sf_activity_info_get(&storeattrs); - printf("SD free=%dM/%dM\n", storeattrs.SDFree, storeattrs.SDTotalSize); - if (storeattrs.SDFree < 30) /* 30MB */ - { - sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FULL); - } - else - { - sf_sys_status_led_set(SF_LED_SYS_STATE_SD_NORMAL); - } - } - sf_statistics_param_load(sf_statistics_param_get()); - MLOGI("card-%d mount OK\r\n", dev_id + 1); - sf_set_key_fw_update(sf_get_fw_update());//up fw - if(sf_get_mcu_update_flag())//up mcu - { - sf_app_mcu_updata_start(); - } - if(dev_id == MMC_DEV_EMMC) + if(dev_id == MMC_DEV_EMMC) { printf("EMMC has Mounted!\r\n"); + sf_strg_dev_register(MMC_DEV_EMMC, MMC_DEV_MOUNT_STATE_MOUNTED); } + // if(SF_MCU_STARTUP_ONKEY == startup) + // { + // SF_STORE_ATTR_S storeattrs = {0}; + // sf_activity_info_get(&storeattrs); + // printf("SD free=%dM/%dM\n", storeattrs.SDFree, storeattrs.SDTotalSize); + // if (storeattrs.SDFree < 30) /* 30MB */ + // { + // sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FULL); + // } + // else + // { + // sf_sys_status_led_set(SF_LED_SYS_STATE_SD_NORMAL); + // } + // } + // sf_statistics_param_load(sf_statistics_param_get()); + // MLOGI("card-%d mount OK\r\n", dev_id + 1); + // sf_set_key_fw_update(sf_get_fw_update());//up fw + // if(sf_get_mcu_update_flag())//up mcu + // { + // sf_app_mcu_updata_start(); + // } + break; case FST_STA_DISK_UNFORMAT: sf_statistics_param_load(sf_statistics_param_get()); @@ -716,6 +717,7 @@ static SINT32 sfStrgDevEmmcHandler(int cb_evt, int dev_id, int result) static SINT32 sf_app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf) { MLOGD("[dev_id:%d,evt:%d]\n",pMessageBuf->arg2,pMessageBuf->arg1); + SINT16 startup = sf_poweron_type_get(); if(pMessageBuf->arg2 == MMC_DEV_SD) { @@ -743,6 +745,29 @@ static SINT32 sf_app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf) case CMD_SD_STRG_WORKABLE_DEV: sf_strg_dev_register(pMessageBuf->arg2, pMessageBuf->arg3); break; + case CMD_SD_FILESYS_INIT_STATUS: + if(SF_MCU_STARTUP_ONKEY == startup) + { + SF_STORE_ATTR_S storeattrs = {0}; + sf_activity_info_get(&storeattrs); + printf("SD free=%dM/%dM\n", storeattrs.SDFree, storeattrs.SDTotalSize); + if (storeattrs.SDFree < 30) /* 30MB */ + { + sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FULL); + } + else + { + sf_sys_status_led_set(SF_LED_SYS_STATE_SD_NORMAL); + } + } + sf_statistics_param_load(sf_statistics_param_get()); + MLOGI("FILESYS mount OK\r\n"); + sf_set_key_fw_update(sf_get_fw_update());//up fw + if(sf_get_mcu_update_flag())//up mcu + { + sf_app_mcu_updata_start(); + } + break; default: break; } diff --git a/code/lib/source/sifar/code/source/common/sf_sd_common.c b/code/lib/source/sifar/code/source/common/sf_sd_common.c index 0b49424f5..00cba5f21 100644 --- a/code/lib/source/sifar/code/source/common/sf_sd_common.c +++ b/code/lib/source/sifar/code/source/common/sf_sd_common.c @@ -47,8 +47,8 @@ SF_CALLBACK_SD_CMD g_fpSd_Exist_CB = NULL; static int formatSD = CMD_FORMAT_SD_ERR; -static BOOL IsCardFull = FALSE; -static BOOL IsEmmcFull = FALSE; +static BOOL IsCardFull = TRUE; +static BOOL IsEmmcFull = TRUE; void sf_sd_exist_reg_cb(SF_CALLBACK_SD_CMD fpCB) { diff --git a/rtos/code/application/source/cardv/SrcCode/System/rtos-main.c b/rtos/code/application/source/cardv/SrcCode/System/rtos-main.c index 432a9faf5..42f0d7f1c 100644 --- a/rtos/code/application/source/cardv/SrcCode/System/rtos-main.c +++ b/rtos/code/application/source/cardv/SrcCode/System/rtos-main.c @@ -981,6 +981,8 @@ static void fastboot(void) VK_TASK_HANDLE handle_movie_filenaming = 0; VK_TASK_HANDLE handle_movie_filenaming2 = 0; VK_TASK_HANDLE handle_movie_moviemode = 0; + VK_TASK_HANDLE handle_moviefast_power_off_tsk_id = 0; + #if (FASTBOOT_USB_FUNC == ENABLE) VK_TASK_HANDLE handle_usb_msdcmode = 0; VK_TASK_HANDLE handle_usb_uvacmode = 0; @@ -1101,6 +1103,13 @@ static void fastboot(void) } else vos_task_resume(handle_movie_moviemode); + + handle_moviefast_power_off_tsk_id = vos_task_create(MovieFast_PowerOffTsk, 0, "MovieFastPwrTsk", 10, 8192); + if (!handle_moviefast_power_off_tsk_id) { + DBG_ERR("MovieFast_PowerOffTsk create failed.\r\n"); + } else { + vos_task_resume(handle_moviefast_power_off_tsk_id); + } /* GxTime, for stamp */ fwload_wait_done(CODE_SECTION_10); diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c index cbf2f93d3..6b5c77281 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c @@ -113,7 +113,7 @@ static UINT32 g_moviefast_tsk_run = 1; static UINT32 g_moviefast_poweroff_tsk_run = 1; static THREAD_HANDLE g_moviefast_tsk_id = 0; static THREAD_HANDLE g_moviefast_raw_tsk_id = 0; -static THREAD_HANDLE g_moviefast_power_off_tsk_id = 0; +// static THREAD_HANDLE g_moviefast_power_off_tsk_id = 0; static THREAD_HANDLE g_moviefast_write_tsk_id = 0; static BOOL g_bIsRecStatus = FALSE; static BOOL g_manual_raw_tsk_running = FALSE; @@ -135,6 +135,7 @@ static void MovieFast_Close(void); static void MovieFast_Load_Sen_Cfg(MOVIEFAST_IQ_CFG cfg); extern void sf_log_sava(void); +extern void MovieFast_Set_Shutdown_flag(void); static VOID MovieFast_Set_RecStartTick(VOS_TICK tick) { g_rec_start_tick = tick; @@ -170,15 +171,16 @@ static ER MovieFast_InstallID(void) return ret; } -static THREAD_RETTYPE MovieFast_PowerOffTsk(void) +THREAD_RETTYPE MovieFast_PowerOffTsk(void *arg) { const BOOL delay_ms = 200; - + VOS_TICK t1, t2; THREAD_ENTRY(); DBG_DUMP("MovieFast_PowerOffTsk started\n"); g_moviefast_poweroff_tsk_run = TRUE; + vos_perf_mark(&t1); while(g_moviefast_poweroff_tsk_run) { @@ -187,6 +189,13 @@ static THREAD_RETTYPE MovieFast_PowerOffTsk(void) break; } + vos_perf_mark(&t2); + if((vos_perf_duration(t1, t2) / 1000) > (30*1000)) + { + fastboot_msg_en(ENABLE); + DBG_ERR("failed timeout ID:%d\n", MOVIEFAST_FLG_ID); + break; + } vos_util_delay_ms(delay_ms); } @@ -1221,6 +1230,27 @@ static void MovieFast_UserEventCb(UINT32 id, MOVIE_USER_CB_EVENT event_id, UINT3 } } break; + case MOVIE_USER_CB_ERROR_CARD_SLOW: + { + DBG_ERR("Slow card!, id %d\r\n", value); + MovieFast_Set_Shutdown_flag(); + } + break; + + case MOVIE_USER_CB_ERROR_CARD_WR_ERR: + { + DBG_ERR("EVENT %d: card write error!\r\n", event_id); + MovieFast_Set_Shutdown_flag(); + } + break; + + + case MOVIE_USER_CB_EVENT_CARD_FULL: + { + DBG_ERR("EVENT %d: card full!\r\n", event_id); + MovieFast_Set_Shutdown_flag(); + } + break; #if 0 case MOVIE_USER_CB_EVENT_REC_ONE_SECOND: { u32Cnt++; @@ -1665,10 +1695,10 @@ static INT32 MovieFast_Mode2_Get_Cont_Shot(UINT32* max_cnt, UINT32* duration) } #if HUNTING_CAMERA_MCU == ENABLE - if(FALSE == (gpio_getPin(GPIO_CARD_DETECT) == 0 ? TRUE : FALSE)) - { - *max_cnt = 1; - } + // if(FALSE == (gpio_getPin(GPIO_CARD_DETECT) == 0 ? TRUE : FALSE)) + // { + // *max_cnt = 1; + // } if(SF_MULTISHOT_INTEVEL_1S == puiPara->MultiShotIntevel) { @@ -2028,11 +2058,11 @@ DBG_WRN(">>>>>>>>>>>>>>> movie thread <<<<<<<<<<\r\n"); } vos_util_delay_ms(33); - if ((g_moviefast_power_off_tsk_id = vos_task_create(MovieFast_PowerOffTsk, 0, "MovieFastPwrTsk", PRI_MOVIEFAST_CMDTSK, STKSIZE_MOVIEFAST_CMDTSK)) == 0) { - DBG_ERR("MovieFast_PowerOffTsk create failed.\r\n"); - } else { - vos_task_resume(g_moviefast_power_off_tsk_id); - } + // if ((g_moviefast_power_off_tsk_id = vos_task_create(MovieFast_PowerOffTsk, 0, "MovieFastPwrTsk", PRI_MOVIEFAST_CMDTSK, STKSIZE_MOVIEFAST_CMDTSK)) == 0) { + // DBG_ERR("MovieFast_PowerOffTsk create failed.\r\n"); + // } else { + // vos_task_resume(g_moviefast_power_off_tsk_id); + // } if ((g_moviefast_tsk_id = vos_task_create(MovieFast_CmdTsk, 0, "MovieFastTsk", PRI_MOVIEFAST_CMDTSK, STKSIZE_MOVIEFAST_CMDTSK)) == 0) { DBG_ERR("MovieFast_CmdTsk create failed.\r\n"); diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.h b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.h index 2f6f312b1..933ecf301 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.h +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.h @@ -13,7 +13,7 @@ extern THREAD_RETTYPE MovieFast_InitFileNamingThread(void *arg); extern THREAD_RETTYPE MovieFast_InitFileNamingThread2(void *arg); extern THREAD_RETTYPE MovieFast_InitMovieModeThread(void *arg); - +extern THREAD_RETTYPE MovieFast_PowerOffTsk(void *arg); typedef enum { EAC_CONFIG_AD_DMIC_EN, ///< Configure AD(Record) Digital Microphone Enable/Disable.