diff --git a/code/application/source/sf_app/code/include/sf_storeMng.h b/code/application/source/sf_app/code/include/sf_storeMng.h index 5683b9c31..dedfa40af 100644 --- a/code/application/source/sf_app/code/include/sf_storeMng.h +++ b/code/application/source/sf_app/code/include/sf_storeMng.h @@ -91,6 +91,7 @@ MMC_DEV_TYPE sf_get_strg_dev(void); char *sf_root_path_strcat(char *path_name); char *sf_get_root_path(void); +SINT32 sf_activity_info_get(SF_STORE_ATTR_S *pstoreattrs); SINT32 sf_sd_info_get(SF_STORE_ATTR_S *pstoreattrs); SINT32 sf_emmc_info_get(SF_STORE_ATTR_S *pstoreattrs); SINT32 sf_sd_remove_file(const char *path,SINT32 threshold) ; diff --git a/code/application/source/sf_app/code/source/4gMng/sf_sms.c b/code/application/source/sf_app/code/source/4gMng/sf_sms.c index fc0f023f5..7ea692a44 100755 --- a/code/application/source/sf_app/code/source/4gMng/sf_sms.c +++ b/code/application/source/sf_app/code/source/4gMng/sf_sms.c @@ -2676,9 +2676,8 @@ SINT32 sf_power_off_check_sd(void) { UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); SF_STORE_ATTR_S storeattrs = {0}; - MMC_DEV_TYPE mmc_dev = MMC_DEV_NO; + SF_STORE_ATTR_S SDstoreattrs = {0}; - mmc_dev = sf_get_strg_dev(); /******************** SD cycle *************************/ if((0 == sf_check_sd()) || (sf_get_mode_flag() == 1)) { @@ -2692,10 +2691,10 @@ SINT32 sf_power_off_check_sd(void) /*check disk free size*/ sf_emmc_info_get(&storeattrs); - + sf_sd_info_get(&SDstoreattrs); if((puiPara->SdLoopSwitch) && (!sf_get_mode_flag())) { - if((storeattrs.SDStatus == 0) & (storeattrs.SDFree < SDLOOP_REMAIN_SPACE)) + if((storeattrs.SDStatus == 0) & (storeattrs.SDFree < SDLOOP_REMAIN_SPACE) && (SDstoreattrs.SDFree < 30)) { // sf_sd_loopremove(SF_DCIM_DIR); sf_app_sd_loop(); @@ -2704,29 +2703,14 @@ SINT32 sf_power_off_check_sd(void) } } printf("Emmc free=%dM/%dM\n", storeattrs.SDFree, storeattrs.SDTotalSize); - if(mmc_dev != MMC_DEV_EMMC) + printf("SD free=%dM/%dM\n", SDstoreattrs.SDFree, SDstoreattrs.SDTotalSize); + + if((SDstoreattrs.SDFree < 30) && (storeattrs.SDFree < 30)) /* 30MB */ { - sf_sd_info_get(&storeattrs); - printf("SD free=%dM/%dM\n", storeattrs.SDFree, storeattrs.SDTotalSize); - if(storeattrs.SDFree < 30) /* 30MB */ - { - sf_set_card_full(1); - puiPara->SdFailCount++; - sf_sleep_ms(100); - } - } - else if(storeattrs.SDFree < 30) /* 30MB */ - { - if(puiPara->SdLoopSwitch == 0) - { - sf_set_card_full(1); - puiPara->SdFailCount++; - sf_sleep_ms(100); - } - if(mmc_dev == MMC_DEV_EMMC) - { - printf("eMMC is FULL!\n"); - } + sf_set_card_full(1); + puiPara->SdFailCount++; + sf_sleep_ms(100); + printf("card is FULL!\n"); } else { 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 b0ceaae2d..42952aa33 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,7 +616,7 @@ static SINT32 sfStrgDevOnActionMount(int dev_id, int result) if(SF_MCU_STARTUP_ONKEY == startup) { SF_STORE_ATTR_S storeattrs = {0}; - sf_sd_info_get(&storeattrs); + sf_activity_info_get(&storeattrs); printf("SD free=%dM/%dM\n", storeattrs.SDFree, storeattrs.SDTotalSize); if (storeattrs.SDFree < 30) /* 30MB */ { diff --git a/code/application/source/sf_app/code/source/storeMng/sf_storeMng.c b/code/application/source/sf_app/code/source/storeMng/sf_storeMng.c index 17effaf85..8def81ef8 100644 --- a/code/application/source/sf_app/code/source/storeMng/sf_storeMng.c +++ b/code/application/source/sf_app/code/source/storeMng/sf_storeMng.c @@ -152,7 +152,7 @@ char *sf_root_path_strcat(char *path_name) return tmp; } -SINT32 sf_sd_info_get(SF_STORE_ATTR_S *pstoreattrs) +SINT32 sf_activity_info_get(SF_STORE_ATTR_S *pstoreattrs) { SF_COMM_CHECK_POINTER(pstoreattrs,SF_FAILURE); @@ -195,6 +195,44 @@ SINT32 sf_sd_info_get(SF_STORE_ATTR_S *pstoreattrs) return SF_FAILURE; } + MLOGD("ActiveStorage:Status = %d,Free = %d MB,TotalSize = %d MB\n", pstoreattrs->SDStatus, pstoreattrs->SDFree,pstoreattrs->SDTotalSize); + return SF_SUCCESS; +} +SINT32 sf_sd_info_get(SF_STORE_ATTR_S *pstoreattrs) +{ + SF_COMM_CHECK_POINTER(pstoreattrs,SF_FAILURE); + + SINT32 fd = -1; + fd = open(SF_SD_ROOT, O_RDONLY,0); + if(fd >= 0) + { + struct statfs diskInfo; + statfs(SF_SD_ROOT, &diskInfo); + if(diskInfo.f_bsize > 1024) + { + pstoreattrs->SDTotalSize = (diskInfo.f_blocks * (diskInfo.f_bsize >> 10)) >> 10 ; //blocks * 4096 / 1024 /1024 = MB + pstoreattrs->SDFree = (diskInfo.f_bavail * (diskInfo.f_bsize >> 10)) >> 10 ; + } + else + { + pstoreattrs->SDTotalSize = (diskInfo.f_blocks * diskInfo.f_bsize) >> 10 ; //blocks * 4096 / 1024 /1024 = MB + pstoreattrs->SDFree = (diskInfo.f_bavail * diskInfo.f_bsize) >> 10 ; + } + close(fd); + + if(pstoreattrs->SDTotalSize > 0) + pstoreattrs->SDStatus = 0; //SD card SUCESS + else + pstoreattrs->SDStatus = 2; //SD card ERROR + } + else + { + pstoreattrs->SDStatus = 1; //SD card not insert + pstoreattrs->SDFree = 0; + pstoreattrs->SDTotalSize = 0; + return SF_FAILURE; + } + MLOGD("SDStatus = %d,SDFree = %d MB,SDTotalSize = %d MB\n", pstoreattrs->SDStatus, pstoreattrs->SDFree,pstoreattrs->SDTotalSize); return SF_SUCCESS; }