diff --git a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c index 2005c6407..0bb5a243e 100755 --- a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c +++ b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c @@ -271,15 +271,18 @@ void SF_StrgRegister(SF_MESSAGE_BUF_S *pMessageBuf) else { sf_mmc_dev[MMC_DEV_EMMC]->node = MMC_DEV_NODE_STATE_NO_EXIST; + sf_set_emmc_err(1); } if(pMessageBuf->arg1 == CMD_SD_STRG_CB_MOUNT_FINISH) { sf_mmc_dev[MMC_DEV_EMMC]->moumted_state = MMC_DEV_MOUNT_STATE_MOUNTED; + sf_set_emmc_err(0); } else if(pMessageBuf->arg1 == CMD_SD_STRG_CB_UNMOUNT_FINISH) { sf_mmc_dev[MMC_DEV_EMMC]->moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED; + sf_set_emmc_err(1); } } diff --git a/code/application/source/sf_app/code/include/sf_device.h b/code/application/source/sf_app/code/include/sf_device.h index af217b258..76bb27591 100644 --- a/code/application/source/sf_app/code/include/sf_device.h +++ b/code/application/source/sf_app/code/include/sf_device.h @@ -70,6 +70,8 @@ SINT32 sf_in_update(void); void sf_set_card_statu(UINT32 val); UINT32 sf_get_card_statu(void); BOOL sf_system_check_bt_ko(void); +void sf_set_emmc_err(BOOL val); +BOOL sf_is_emmc_err(void); #ifdef __cplusplus #if __cplusplus } 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 f0023a4ab..b2239180e 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 @@ -616,6 +616,7 @@ static SINT32 sfStrgDevOnActionMount(int dev_id, int result) { printf("EMMC has Mounted!\r\n"); sf_strg_dev_register(MMC_DEV_EMMC, MMC_DEV_MOUNT_STATE_MOUNTED); + sf_set_emmc_err(0); } // if(SF_MCU_STARTUP_ONKEY == startup) // { @@ -693,6 +694,7 @@ static SINT32 sfStrgDevSdHandler(int cb_evt, int dev_id, int result) static SINT32 sfStrgDevEmmcHandler(int cb_evt, int dev_id, int result) { + sf_set_emmc_err(1); switch(cb_evt) { case CMD_SD_STRG_CB_UNKNOWN: diff --git a/code/application/source/sf_app/code/source/app/sf_device.c b/code/application/source/sf_app/code/source/app/sf_device.c index 885bbbbfb..9bde3eeb3 100755 --- a/code/application/source/sf_app/code/source/app/sf_device.c +++ b/code/application/source/sf_app/code/source/app/sf_device.c @@ -45,6 +45,7 @@ static SINT32 IsCardFull = 0; static SINT32 isGoing2Pir = 0; static SINT32 IsCard = 0; static int formatSD = CMD_FORMAT_SD_ERR; +static BOOL IsEmmcErr = TRUE; SF_THREAD_S PirMonitorTskCfg = { @@ -547,7 +548,7 @@ SINT32 sf_is_card_full(void) void sf_set_card_full(SINT32 vol) { UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); - if((0 == puiPara->SendType) && (!sf_get_mode_flag())) + if((0 == puiPara->SendType) && (!sf_get_mode_flag()) &&(sf_is_emmc_err())) { MLOGW("The memory sending function has been enabled, but the identification is not effective. IsCardFull:%d\n",vol); IsCardFull = 0; @@ -726,6 +727,17 @@ SINT32 sf_in_update(void) return (regValue & 0xFF) ? 0:1; } +BOOL sf_is_emmc_err(void) +{ + //printf("[%s]:%d IsEmmcFull:%d\n", __FUNCTION__, __LINE__, IsEmmcFull); + return IsEmmcErr; +} +void sf_set_emmc_err(BOOL vol) +{ + //printf("[%s]:%d IsEmmcFull:%d\n", __FUNCTION__, __LINE__, IsEmmcFull); + IsEmmcErr = vol; +} + #ifdef __cplusplus #if __cplusplus } diff --git a/code/application/source/sf_app/code/source/app/sf_service.c b/code/application/source/sf_app/code/source/app/sf_service.c index ef867e46b..2ac9744e5 100755 --- a/code/application/source/sf_app/code/source/app/sf_service.c +++ b/code/application/source/sf_app/code/source/app/sf_service.c @@ -2441,12 +2441,20 @@ static int sf_is_sdc_mounted(void) int sf_check_sd(void) { UINT8 i = 0; - int ret = SF_SUCCESS; + static int ret = SF_SUCCESS; int cnt = 0; + static int flag = 0; + if((flag) && (sf_get_mode_flag() == 0)) + { + MLOGI("SD Status:%d\r\n", ret); + return ret; + } if(0 == sf_in_card_exist() && (0 == sf_in_emmc_exist())) { NET_SLOGE("NO SD\r\n"); - return SF_FAILURE; + flag = 1; + ret = SF_FAILURE; + return ret; } if (sf_sd_status_get() != SF_SD_OK) { ret = SF_FAILURE; @@ -2476,8 +2484,10 @@ int sf_check_sd(void) } } + flag = 1; return ret; } + flag = 1; return ret; } /************************************************* diff --git a/code/lib/source/sifar/code/include/sf_sd_common.h b/code/lib/source/sifar/code/include/sf_sd_common.h index 426ef4bc0..925fcf06b 100644 --- a/code/lib/source/sifar/code/include/sf_sd_common.h +++ b/code/lib/source/sifar/code/include/sf_sd_common.h @@ -21,5 +21,7 @@ BOOL sf_in_card_exist(void); BOOL sf_in_emmc_exist(void); void sf_set_card_statu(UINT32 val); UINT32 sf_get_card_statu(void); +void sf_set_emmc_err(BOOL val); +BOOL sf_is_emmc_err(void); #endif 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 9247552eb..e4053b2ce 100755 --- a/code/lib/source/sifar/code/source/common/sf_common.c +++ b/code/lib/source/sifar/code/source/common/sf_common.c @@ -3591,7 +3591,7 @@ INT32 sf_mem_write_photo(UINT32 buf, UINT32 size) { UINT32 fd = 0; UIMenuStoreInfo *puiPara = sf_ui_para_get(); - if(0 == puiPara->SendType) + if((0 == puiPara->SendType) && sf_is_emmc_err()) { MLOGD("filesys not ready, store data into mem\n"); system("rm -rf /tmp/MEMPHOTO.JPG"); 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 00cba5f21..ad9193807 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 @@ -49,7 +49,7 @@ SF_CALLBACK_SD_CMD g_fpSd_Exist_CB = NULL; static int formatSD = CMD_FORMAT_SD_ERR; static BOOL IsCardFull = TRUE; static BOOL IsEmmcFull = TRUE; - +static BOOL IsEmmcErr = TRUE; void sf_sd_exist_reg_cb(SF_CALLBACK_SD_CMD fpCB) { g_fpSd_Exist_CB = fpCB; @@ -104,4 +104,15 @@ BOOL sf_is_emmc_full(void) void sf_set_emmc_card_full(BOOL val) { IsEmmcFull = val; -} \ No newline at end of file +} + +BOOL sf_is_emmc_err(void) +{ + //printf("[%s]:%d IsEmmcFull:%d\n", __FUNCTION__, __LINE__, IsEmmcFull); + return IsEmmcErr; +} +void sf_set_emmc_err(BOOL val) +{ + //printf("[%s]:%d IsEmmcFull:%d\n", __FUNCTION__, __LINE__, IsEmmcFull); + IsEmmcErr = val; +} diff --git a/rtos/code/application/source/cardv/SrcCode/System/sys_filesys.c b/rtos/code/application/source/cardv/SrcCode/System/sys_filesys.c index a0e51276c..13f4f28ed 100755 --- a/rtos/code/application/source/cardv/SrcCode/System/sys_filesys.c +++ b/rtos/code/application/source/cardv/SrcCode/System/sys_filesys.c @@ -96,7 +96,11 @@ static void card_insert_job2(void) printf("filesys2_init b\r\n"); memset(&Param, 0, sizeof(FILE_TSK_INIT_PARAM)); - pStrg->Open(); + ret = pStrg->Open(); + if (FST_STA_OK != ret) { + DBG_ERR("Open err %d\r\n", ret); + sf_set_emmc_err(1); + } pStrg->GetParam(STRG_GET_DEVICE_PHY_SECTORS, (UINT32)&totoal_sectors, 0); if (totoal_sectors == 0) { DBG_WRN("totoal_sectors couldn't be zero\n"); @@ -126,9 +130,14 @@ static void card_insert_job2(void) ret = FileSys_OpenEx('B', StrgDXH2, &Param); if (FST_STA_OK != ret) { printf("FileSys_Open err %d\r\n", ret); + sf_set_emmc_err(1); } - FileSys_WaitFinishEx('B'); + ret = FileSys_WaitFinishEx('B'); + if (FST_STA_OK != ret) { + printf("FileSys_WaitFinishEx err %d\r\n", ret); + sf_set_emmc_err(1); + } FileSys_SetParamEx('B', FST_PARM_UPDATE_FSINFO , TRUE); #if USE_RTOS_MMC_CHECK SF_RtosStrgRegister(1, ret); diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c index bd95154ce..16692389a 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c @@ -2393,17 +2393,20 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data) } if(waitFalg) { - sf_fastboot_msg_en(ENABLE); - DBG_WRN("filesys not ready, store data into mem\n"); + if(sf_is_emmc_err()) + { + sf_fastboot_msg_en(ENABLE); + DBG_WRN("filesys not ready, store data into mem\n"); - SYS_USRMEM usrmem = {0}; + SYS_USRMEM usrmem = {0}; - if(sys_usrmem_init(&usrmem) == E_OK){ - sys_usrmem_write_photo( - &usrmem, - (UINT32) queue_ele_in->jpg_thumb_addr, - queue_ele_in->jpg_thumb_size - ); + if(sys_usrmem_init(&usrmem) == E_OK){ + sys_usrmem_write_photo( + &usrmem, + (UINT32) queue_ele_in->jpg_thumb_addr, + queue_ele_in->jpg_thumb_size + ); + } } } else diff --git a/rtos/code/driver/na51089/include/sf_mcu.h b/rtos/code/driver/na51089/include/sf_mcu.h index 49a61d93e..a1d2aa128 100755 --- a/rtos/code/driver/na51089/include/sf_mcu.h +++ b/rtos/code/driver/na51089/include/sf_mcu.h @@ -533,5 +533,7 @@ UINT32 sf_in_mcu_update(void); int sf_base64_decode(const char * base64, char * bindata); void sf_dailyReport_refresh(void); void sf_fastboot_msg_en(int en); +void sf_set_emmc_err(BOOL val); +BOOL sf_is_emmc_err(void); #endif diff --git a/rtos/code/driver/na51089/source/mcu/sf_sd_common.c b/rtos/code/driver/na51089/source/mcu/sf_sd_common.c index cb62a1839..5dcd897a3 100755 --- a/rtos/code/driver/na51089/source/mcu/sf_sd_common.c +++ b/rtos/code/driver/na51089/source/mcu/sf_sd_common.c @@ -49,6 +49,7 @@ static BOOL IsCardFull = FALSE; SF_CALLBACK_SD_CMD g_fpSd_Exist_CB = NULL; extern BOOL DrvCARD_DetStrgCard(void); static BOOL IsEmmcFull = FALSE; +static BOOL IsEmmcErr = FALSE; SF_RTOS_ST_MMC_DEV *sf_rtos_mmc_dev[MMC_DEV_MAX_NUM] = {NULL}; @@ -129,6 +130,17 @@ UINT32 sf_check_emmc_full(void) return ret; } +BOOL sf_is_emmc_err(void) +{ + //printf("[%s]:%d IsEmmcFull:%d\n", __FUNCTION__, __LINE__, IsEmmcFull); + return IsEmmcErr; +} +void sf_set_emmc_err(BOOL val) +{ + //printf("[%s]:%d IsEmmcFull:%d\n", __FUNCTION__, __LINE__, IsEmmcFull); + IsEmmcErr = val; +} + void sf_sd_exist_reg_cb(SF_CALLBACK_SD_CMD fpCB) { g_fpSd_Exist_CB = fpCB;