/************************************************************************** * * Copyright (c) 2009-2018 by SiFar Technology, Inc. * * This software is copyrighted by and is the property of SiFar * Technology, Inc.. All rights are reserved by SiFar Technology, Inc.. * This software may only be used in accordance with the corresponding * license agreement. Any unauthorized use, duplication, distribution, * or disclosure of this software is expressly forbidden. * * This Copyright notice MUST not be removed or modified without prior * written consent of SiFar Technology, Inc.. * * SiFar Technology, Inc. reserves the right to modify this software without notice. * * Author: Payton * Ver: 1.0.0 2023.02.14 * Description: sd code * **************************************************************************/ //#include #include #include #include #include #include //#include #include #include //#include #include #include #include #include #include #include #include #include //#include #include "UIInfo/UIInfo.h" #include #include "sf_sd_common.h" static BOOL IsCardFull = FALSE; SF_CALLBACK_SD_CMD g_fpSd_Exist_CB = NULL; extern BOOL DrvCARD_DetStrgCard(void); static SF_RTOS_ST_MMC_DEV sf_mmc_dev[MMC_DEV_MAX_NUM] = {0}; BOOL sf_is_card_full(void) { //printf("[%s]:%d IsCardFull:%d\n", __FUNCTION__, __LINE__, IsCardFull); return IsCardFull; } UINT32 sf_check_card_full(void) { UINT64 diskFree = 0; UINT32 ret = 0; //UIMenuStoreInfo *puiPara = sf_ui_para_get(); if(!sf_in_card_exist()) { return 1; } /*check disk free size*/ diskFree = FileSys_GetDiskInfo(FST_INFO_FREE_SPACE); diskFree = diskFree/1024/1024; if(diskFree < 30) /* 30MB */ { ret = TRUE; //if(0 == puiPara->SdLoopSwitch) { IsCardFull = TRUE; } //printf("%s:%d sd card is full diskFree=%lu",__FUNCTION__,__LINE__,diskFree); } else { ret = FALSE; //printf("%s:%d sd card no full diskFree=%lu",__FUNCTION__,__LINE__,diskFree); } printf("[%s:%d]sd card diskFree=%lluM\n", __FUNCTION__, __LINE__, diskFree); return ret; } static UINT32 sf_mmc_dev_space_check_full(MMC_DEV_TYPE mmc_dev) { UINT64 diskFree = 0; UINT32 ret = 0; //UIMenuStoreInfo *puiPara = sf_ui_para_get(); if(!sf_in_card_exist()) { return 1; } /*check disk free size*/ if(mmc_dev == MMC_DEV_SD) { diskFree = FileSys_GetDiskInfo(FST_INFO_FREE_SPACE); } else { diskFree = FileSys_GetEMMCDiskInfo(FST_INFO_FREE_SPACE); } diskFree = diskFree/1024/1024; if(diskFree < 30) /* 30MB */ { ret = TRUE; //if(0 == puiPara->SdLoopSwitch) { IsCardFull = TRUE; } //printf("%s:%d sd card is full diskFree=%lu",__FUNCTION__,__LINE__,diskFree); } else { ret = FALSE; } printf("[%s:%d]sd card diskFree=%lluM\n", __FUNCTION__, __LINE__, diskFree); return ret; } void sf_sd_exist_reg_cb(SF_CALLBACK_SD_CMD fpCB) { g_fpSd_Exist_CB = fpCB; } BOOL sf_in_card_exist(void) { return DrvCARD_DetStrgCard(); /* if(g_fpSd_Exist_CB) { return g_fpSd_Exist_CB(); } else { return FALSE; }*/ } int sf_rtos_mmc_dev_register(int devid, int mounted_state) { if(mounted_state == FST_STA_OK) { sf_mmc_dev[devid].moumted_state = MMC_DEV_MOUNT_STATE_MOUNTED; } else { sf_mmc_dev[devid].moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED; } int isfull = sf_mmc_dev_space_check_full(devid); if(isfull) { sf_mmc_dev[devid].space_state = MMC_DEV_SPACE_STATE_ENOUGH; } else{ sf_mmc_dev[devid].space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH; } return 0; } MMC_DEV_TYPE sf_rtos_mmc_check_workable_dev(void) { MMC_DEV_TYPE workable_dev = MMC_DEV_NO; if((sf_mmc_dev[MMC_DEV_SD].moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED) && (sf_mmc_dev[MMC_DEV_EMMC].moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED)) { workable_dev = MMC_DEV_NO; } else if(sf_mmc_dev[MMC_DEV_SD].moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED) { if(sf_mmc_dev[MMC_DEV_EMMC].space_state == MMC_DEV_SPACE_STATE_ENOUGH) { workable_dev = MMC_DEV_EMMC; } else { //if(sf_mmc_dev[MMC_DEV_SD].loop_state == MMC_DEV_LOOP_STATE_ON) { //workable_dev = MMC_DEV_EMMC; } } } else if(sf_mmc_dev[MMC_DEV_EMMC].moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED) { if(sf_mmc_dev[MMC_DEV_SD].space_state == MMC_DEV_SPACE_STATE_ENOUGH) { workable_dev = MMC_DEV_SD; } else { //if(sf_mmc_dev[MMC_DEV_SD].loop_state == MMC_DEV_LOOP_STATE_ON) { //workable_dev = MMC_DEV_SD; } } } else { if(sf_mmc_dev[MMC_DEV_EMMC].space_state == MMC_DEV_SPACE_STATE_ENOUGH && sf_mmc_dev[MMC_DEV_SD].space_state == MMC_DEV_SPACE_STATE_ENOUGH) { workable_dev = MMC_DEV_EMMC; } else if(sf_mmc_dev[MMC_DEV_EMMC].space_state == MMC_DEV_SPACE_STATE_ENOUGH) { workable_dev = MMC_DEV_EMMC; } else if(sf_mmc_dev[MMC_DEV_SD].space_state == MMC_DEV_SPACE_STATE_ENOUGH) { workable_dev = MMC_DEV_SD; } else { //if(sf_mmc_dev[MMC_DEV_SD].loop_state == MMC_DEV_LOOP_STATE_ON) { //workable_dev = MMC_DEV_EMMC; } } } return workable_dev; }