增加UIStorageCheckEMMC检测和UI格式化EMMC

This commit is contained in:
sober.song 2023-12-28 13:39:43 +08:00
parent b9e1fda503
commit 57420f5c15
12 changed files with 451 additions and 191 deletions

View File

@ -69,11 +69,11 @@ static UINT32 SF_StrgSpaceCheckFull(MMC_DEV_TYPE mmc_dev)
/*check disk free size*/
if(mmc_dev == MMC_DEV_SD)
{
diskFree = FileSys_GetDiskInfo(FST_INFO_FREE_SPACE);
diskFree = FileSys_GetDiskInfoEx('A', FST_INFO_FREE_SPACE);
}
else
{
diskFree = FileSys_GetEMMCDiskInfo(FST_INFO_FREE_SPACE);
diskFree = FileSys_GetDiskInfoEx('B', FST_INFO_FREE_SPACE);
}
diskFree = diskFree/1024/1024;
@ -133,16 +133,6 @@ void SF_StrgRegister(SF_MESSAGE_BUF_S *pMessageBuf)
sf_mmc_dev[MMC_DEV_SD]->moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED;
}
UINT32 isfull = SF_StrgSpaceCheckFull(MMC_DEV_SD);
if(isfull == 1)
{
sf_mmc_dev[MMC_DEV_SD]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH;
}
else if(isfull == 0)
{
sf_mmc_dev[MMC_DEV_SD]->space_state = MMC_DEV_SPACE_STATE_ENOUGH;
}
if(puiPara->SdLoopSwitch == 1)
{
sf_mmc_dev[MMC_DEV_SD]->loop_state = MMC_DEV_LOOP_STATE_ON;
@ -173,16 +163,6 @@ void SF_StrgRegister(SF_MESSAGE_BUF_S *pMessageBuf)
sf_mmc_dev[MMC_DEV_EMMC]->moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED;
}
UINT32 isfull = SF_StrgSpaceCheckFull(MMC_DEV_EMMC);
if(isfull == 1)
{
sf_mmc_dev[MMC_DEV_EMMC]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH;
}
else if(isfull == 0)
{
sf_mmc_dev[MMC_DEV_EMMC]->space_state = MMC_DEV_SPACE_STATE_ENOUGH;
}
if(puiPara->SdLoopSwitch == 1)
{
sf_mmc_dev[MMC_DEV_EMMC]->loop_state = MMC_DEV_LOOP_STATE_ON;
@ -201,10 +181,32 @@ void SF_StrgRegister(SF_MESSAGE_BUF_S *pMessageBuf)
}
}
int SF_StrgCheckWorkableDev(void)
SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void)
{
MMC_DEV_TYPE workable_dev = MMC_DEV_NO;
MLOGD("sf mmc check workable dev start!!!\n");
//MLOGD("sf mmc check workable dev start!!!\n");
UINT32 isfull = 0;
isfull = SF_StrgSpaceCheckFull(MMC_DEV_EMMC);
if(isfull == 1)
{
sf_mmc_dev[MMC_DEV_EMMC]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH;
}
else if(isfull == 0)
{
sf_mmc_dev[MMC_DEV_EMMC]->space_state = MMC_DEV_SPACE_STATE_ENOUGH;
}
isfull = SF_StrgSpaceCheckFull(MMC_DEV_SD);
if(isfull == 1)
{
sf_mmc_dev[MMC_DEV_SD]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH;
}
else if(isfull == 0)
{
sf_mmc_dev[MMC_DEV_SD]->space_state = MMC_DEV_SPACE_STATE_ENOUGH;
}
if((sf_mmc_dev[MMC_DEV_SD]->node == MMC_DEV_NODE_STATE_NO_EXIST) &&
(sf_mmc_dev[MMC_DEV_EMMC]->node == MMC_DEV_NODE_STATE_NO_EXIST))
{
@ -304,19 +306,21 @@ int SF_StrgCheckWorkableDev(void)
}
}
MLOGD("sf mmc check workable dev end, dev_id = %d!!!\n", workable_dev);
//MLOGD("sf mmc check workable dev end, dev_id = %d!!!\n", workable_dev);
for(int i = 0; i < 2; i++)
{
sf_mmc_dev[i]->dev_type = workable_dev;
MLOGD("node:%d, mount:%d, space:%d, loop:%d\n",
sf_mmc_dev[i]->node, sf_mmc_dev[i]->moumted_state,
sf_mmc_dev[i]->space_state, sf_mmc_dev[i]->loop_state);
//MLOGD("node:%d, mount:%d, space:%d, loop:%d\n",
//sf_mmc_dev[i]->node, sf_mmc_dev[i]->moumted_state,
//sf_mmc_dev[i]->space_state, sf_mmc_dev[i]->loop_state);
}
if(workable_dev == MMC_DEV_NO)
{
return NULL;
}
else
{
return sf_mmc_dev[workable_dev];
}
if(workable_dev != MMC_DEV_NO)
{
MLOGD("dcf_handle = %d\n", sf_mmc_dev[workable_dev]->dcf_handle);
return sf_mmc_dev[workable_dev]->dcf_handle;
}
else
return -1;
}

View File

@ -83,7 +83,8 @@ void SF_StrgInit(void);
void SF_StrgUnInit(void);
void SF_StrgSetDcfHandle(UINT32 strg_id, UINT32 handle);
void SF_StrgRegister(SF_MESSAGE_BUF_S *pMessageBuf);
int SF_StrgCheckWorkableDev(void);
SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void);
#endif //_SF_SYS_STRG_MNG_H_

View File

@ -760,14 +760,14 @@ INT32 System_Set_Storage_Act_Drive(char drive)
DCF_HANDLE System_Get_DCF_Handle(void)
{
int dcf_handle = SF_StrgCheckWorkableDev();
if(dcf_handle < 0)
SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return -1;
}
DBG_WRN("DCF_GET_HANDLE, %d\n", dcf_handle);
return dcf_handle;
DBG_WRN("DCF_GET_HANDLE, %d\n", mmc_dev->dcf_handle);
return mmc_dev->dcf_handle;
}
CHAR System_Get_DCF_Disk_Drive(DCF_HANDLE handle)

View File

@ -26,6 +26,7 @@
#include "UIApp/Network/EthCamAppCmd.h"
#if (USE_DCF == ENABLE)
#include "DCF.h"
#endif
#include "Utility/SwTimer.h"
@ -861,9 +862,103 @@ UINT32 BackgroundFormat(void)
UINT32 BackgroundFormatEmmc(void)
{
printf(" BackgroundFormatEmmc\n ");
return TRUE;
int ret;
DBG_FUNC_BEGIN("\r\n");
#if HUNTING_CAMERA_MCU == ENABLE
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FORMAT_START);
//sf_sys_status_led_set(SF_LED_SYS_STATE_EXIT_GO_TO_PIR);
#endif
//DX_HANDLE pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT|DX_TYPE_CARD1);
//UINT32 hStrgObj = Dx_Getcaps(pStrgDev, STORAGE_CAPS_HANDLE, 0);
//ret = FileSys_FormatDisk((HNVT_STRG)hStrgObj, FALSE);
FS_HANDLE pStrgDXH = (FS_HANDLE)Dx_GetObject(DX_CLASS_STORAGE_EXT | DX_TYPE_CARD1);
//FS_HANDLE pStrgDXH = (FS_HANDLE)sdio_getStorageObject(STRG_OBJ_FAT1);
DBG_FUNC("pStrgDXH=0x%08X\r\n",pStrgDXH);
//#NT#2016/05/30#Lincy Lin -begin
//#NT#Support logfile function
#if (LOGFILE_FUNC==ENABLE)
#if HUNTING_CAMERA_MCU == ENABLE
UIMenuStoreInfo *puiPara = sf_ui_para_get();
if (puiPara->DebugMode)
{
LogFile_Suspend();
LogFile_Complete();
}
#else
LogFile_Suspend();
LogFile_Complete();
#endif
#endif
//#NT#2016/05/30#Lincy Lin -end
ret = FileSys_FormatAndLabel('B', pStrgDXH, FALSE, NULL);
DBG_FUNC("Call FileSys_FormatDisk() ret=%d\r\n", ret);
if (ret == FST_STA_OK) {
// reset file ID (for FileDB)
#if USE_FILEDB
if (UI_GetData(FL_IsUseFileDB)) {
Ux_SendEvent(&UISetupObjCtrl, NVTEVT_FILEID_RESET, 0);
}
#endif
#if (USE_DCF == ENABLE)
//reset next id 100 , 1
DCF_SetNextID(MIN_DCF_DIR_NUM, MIN_DCF_FILE_NUM);
UI_SetData(FL_DCF_DIR_ID, MIN_DCF_DIR_NUM);
UI_SetData(FL_DCF_FILE_ID, MIN_DCF_FILE_NUM);
UI_SetData(FL_IsDCIMReadOnly, FALSE);
#endif
#if (PLAY_MODE==ENABLE)
if (System_GetState(SYS_STATE_CURRMODE) == PRIMARY_MODE_PLAYBACK) {
UIPlay_PlaySingle(PB_SINGLE_CURR);
}
#endif
//#NT#2016/05/30#Lincy Lin -begin
//#NT#Support logfile function
#if (LOGFILE_FUNC==ENABLE)
#if HUNTING_CAMERA_MCU == ENABLE
if (puiPara->DebugMode)
{
LogFile_ReOpen();
}
#else
LogFile_ReOpen();
#endif
#endif
//#NT#2016/05/30#Lincy Lin -end
// vos_util_delay_ms(1000);
SysMain_system("sync");
#if HUNTING_CAMERA_MCU == ENABLE
//vos_util_delay_ms(1000);
// sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FORMAT_SUCCESS);
// if(sf_get_pir_statu_flag()){
// vos_util_delay_ms(3000);
// }
#endif
}
else
{
#if HUNTING_CAMERA_MCU == ENABLE
// sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FORMAT_FAIL);
// if(sf_get_pir_statu_flag()){
// vos_util_delay_ms(3000);
// }
#endif
}
MovieExe_ResetFileSN();
#if HUNTING_CAMERA_MCU == ENABLE
// sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FORMAT_EXIT);
// if(sf_get_pir_statu_flag()){
// vos_util_delay_ms(1000);
// }
sf_set_card_statu(ret);
#endif
DBG_FUNC_END("\r\n");
return (UINT32)ret;
}
UINT32 BackgroundFormatCard(void)
{
int ret;

View File

@ -39,6 +39,8 @@
#if (USE_DCF == ENABLE)
#include "DCF.h"
#endif
#include "SF_SysStrgMng.h"
#define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
@ -690,7 +692,7 @@ UINT32 PhotoExe_GetExpectSize_RhoBRCrtl(UINT32 ImgIdx, BOOL bPrimaryOnly)
UINT32 PhotoExe_GetFreePicNum(void)
{
UINT64 uiFreeSpace;
UINT64 uiFreeSpace = 0;
UINT32 uiMaxImageSize;
UINT32 freeImgNum;
// UINT32 reserveSize = 0x80000; // 500KB
@ -698,10 +700,24 @@ UINT32 PhotoExe_GetFreePicNum(void)
UINT32 CaptureSize;
UINT32 size;
SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
#if (FILESIZE_ALIGN_FUNC)
reserveSize += FS_ALIGN_RESERVED_SIZE;
#endif
uiFreeSpace = FileSys_GetDiskInfo(FST_INFO_FREE_SPACE);
if(mmc_dev->dev_type == MMC_DEV_SD)
{
uiFreeSpace = FileSys_GetDiskInfoEx('A', FST_INFO_FREE_SPACE);
}
else if(mmc_dev->dev_type == MMC_DEV_EMMC)
{
uiFreeSpace = FileSys_GetDiskInfoEx('B', FST_INFO_FREE_SPACE);
}
//DBG_IND("[cap]Free Space = %d KB\r\n", uiFreeSpace / 1024);

View File

@ -37,6 +37,8 @@
#define __DBGLVL__ 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
#define __DBGFLT__ "*" //*=All, [mark]=CustomClass
#include <kwrap/debug.h>
#include "SF_SysStrgMng.h"
void UIStorageCheck_AllSize(UINT64 *uiTotal, UINT64 *uiRemain)
{
@ -56,6 +58,12 @@ void UIStorageCheck_ResetFileReachMax(void)
//#NT#Add check for folder attribute
static BOOL check_CurrDir_writable(void)
{
SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB);
@ -66,9 +74,9 @@ static BOOL check_CurrDir_writable(void)
UINT32 CurrDirID;
SDCFDIRINFO dirinfo = {0};
CurrDirID = DCF_GetDBInfo(DCF_INFO_CUR_DIR_ID);
CurrDirID = DCF_GetDBInfoEx(mmc_dev->dcf_handle, DCF_INFO_CUR_DIR_ID);
if (CurrDirID) {
if (DCF_GetDirInfo(CurrDirID, &dirinfo)) {
if (DCF_GetDirInfoEx(mmc_dev->dcf_handle, CurrDirID, &dirinfo)) {
if (M_IsReadOnly(dirinfo.ucAttrib)) {
DBG_IND("DCF folder %d is READONLY.\r\n", CurrDirID);
return FALSE;
@ -90,18 +98,32 @@ static BOOL check_CurrDir_writable(void)
BOOL UIStorageCheck_DCIMWritable(void)
{
SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB);
if (useFileDB) {
return TRUE;
} else {
char DCIM_DIR[9] = "A:\\DCIM";
INT32 uiStatus = 0;
UINT8 ucAttrib = 0;
BOOL ret = FALSE;
uiStatus = FileSys_GetAttrib(DCIM_DIR, &ucAttrib);
if(mmc_dev->dev_type == MMC_DEV_SD)
{
uiStatus = FileSys_GetAttrib("A:\\DCIM", &ucAttrib);
}
else
{
uiStatus = FileSys_GetAttrib("B:\\DCIM", &ucAttrib);
}
if (uiStatus == FST_STA_OK) {
if (ucAttrib & FS_ATTRIB_DIRECTORY) {
if (System_GetState(SYS_STATE_CARD) == CARD_REMOVED) {
@ -127,11 +149,90 @@ BOOL UIStorageCheck_DCIMWritable(void)
}
}
BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
static BOOL UIStrgCheckFolderFull(DCF_HANDLE DcfHandle)
{
#if (USE_DCF == ENABLE)
BOOL bIsFileReachMax = FALSE;
UINT32 DCF_DirId = 0, DCF_FileId = 0;
BOOL ret;
if (System_GetState(SYS_STATE_FS) == FS_NUM_FULL) {
DBG_ERR("UI_Validate_Storage: DIR:999 is existing!\r\n");
return TRUE;
}
bIsFileReachMax = FALSE;
ret = DCF_GetNextIDEx(DcfHandle, &DCF_DirId, &DCF_FileId);
if (ret && DCF_DirId == 0 && DCF_FileId == 0) {
bIsFileReachMax = TRUE;
DBG_IND("Next dir_id =%d, file_id = %d \r\n", DCF_DirId, DCF_FileId);
} else if (ret && DCF_GetDBInfoEx(DcfHandle, DCF_INFO_IS_9999) == TRUE)
{
bIsFileReachMax = TRUE;
}
return bIsFileReachMax;
#else
return FALSE;
#endif
}
static BOOL UIStrgCheckFull(UINT32 *pFreeCount)
{
#if (PHOTO_MODE==ENABLE)
UINT32 uiCountTmp = 0;
#endif
#if (PHOTO_MODE==ENABLE)
uiCountTmp = PhotoExe_GetFreePicNum();
DBG_IND("uiCountTmp = %d, pFreeCount=%d\r\n",uiCountTmp,pFreeCount);
if (pFreeCount) {
*pFreeCount = uiCountTmp;
}
if (uiCountTmp == 0) {
return TRUE;
} else {
return FALSE;
}
#else
return FALSE;
#endif
}
static BOOL UIStrgCheckErr(MMC_DEV_TYPE dev_id)
{
if(dev_id == MMC_DEV_SD)
{
FileSys_WaitFinishEx('A');
}
else if(dev_id == MMC_DEV_EMMC)
{
FileSys_WaitFinishEx('B');
}
if (System_GetState(SYS_STATE_FS) == FS_DISK_ERROR
|| System_GetState(SYS_STATE_FS) == FS_UNKNOWN_FORMAT
|| System_GetState(SYS_STATE_FS) == FS_UNFORMATTED
//#NT#2016/12/06#Niven Cho -begin
//#NT#MULTI_DRIVE
|| System_GetState(SYS_STATE_CARD) == CARD_REMOVED)
//#NT#2016/12/06#Niven Cho -end
//|| UIStorageCheck_Error() )
{
DBG_ERR("UIStorageCheck: %d Card Error\r\n", System_GetState(SYS_STATE_FS));
return TRUE;
} else {
return FALSE;
}
}
BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
{
SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB);
@ -142,49 +243,11 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
if (useFileDB) {
return FALSE;
} else {
#if (USE_DCF == ENABLE)
BOOL bIsFileReachMax = FALSE;
UINT32 DCF_DirId = 0, DCF_FileId = 0;
BOOL ret;
if (System_GetState(SYS_STATE_FS) == FS_NUM_FULL) {
DBG_ERR("UI_Validate_Storage: DIR:999 is existing!\r\n");
return TRUE;
}
bIsFileReachMax = FALSE;
//#NT#2011/03/28#Lincy Lin -begin
//#NT#fix delete the 9999th file in 999 folder cause capture not save
ret = DCF_GetNextID(&DCF_DirId, &DCF_FileId);
if (ret && DCF_DirId == 0 && DCF_FileId == 0) {
bIsFileReachMax = TRUE;
DBG_IND("Next dir_id =%d, file_id = %d \r\n", DCF_DirId, DCF_FileId);
} else if (ret && DCF_GetDBInfo(DCF_INFO_IS_9999) == TRUE)
//#NT#2011/03/28#Lincy Lin -end
{
bIsFileReachMax = TRUE;
}
return bIsFileReachMax;
#else
return FALSE;
#endif
UIStrgCheckFolderFull(mmc_dev->dcf_handle);
}
break;
case STORAGE_CHECK_FULL:
#if (PHOTO_MODE==ENABLE)
uiCountTmp = PhotoExe_GetFreePicNum();
DBG_IND("uiCountTmp = %d, pFreeCount=%d\r\n",uiCountTmp,pFreeCount);
if (pFreeCount) {
*pFreeCount = uiCountTmp;
}
if (uiCountTmp == 0) {
return TRUE;
} else {
return FALSE;
}
#else
return FALSE;
#endif
UIStrgCheckFull(pFreeCount);
break;
case STORAGE_CHECK_LOCKED:
if (System_GetState(SYS_STATE_CARD) == CARD_LOCKED) {
@ -195,21 +258,7 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
}
break;
case STORAGE_CHECK_ERROR:
FileSys_WaitFinish();
if (System_GetState(SYS_STATE_FS) == FS_DISK_ERROR
|| System_GetState(SYS_STATE_FS) == FS_UNKNOWN_FORMAT
|| System_GetState(SYS_STATE_FS) == FS_UNFORMATTED
//#NT#2016/12/06#Niven Cho -begin
//#NT#MULTI_DRIVE
|| System_GetState(SYS_STATE_CARD) == CARD_REMOVED)
//#NT#2016/12/06#Niven Cho -end
//|| UIStorageCheck_Error() )
{
DBG_ERR("UIStorageCheck: %d Card Error\r\n", System_GetState(SYS_STATE_FS));
return TRUE;
} else {
return FALSE;
}
UIStrgCheckErr(mmc_dev->dev_type);
break;
case STORAGE_CHECK_DCIM_READONLY:
if ((UIStorageCheck_DCIMWritable() == FALSE)

View File

@ -22,6 +22,7 @@
#include "sf_common.h"
#if (USE_DCF == ENABLE)
#include "DCF.h"
#include "SF_SysStrgMng.h"
#endif
#if HUNTING_CAMERA_MCU == ENABLE
#include <sf_inc.h>
@ -673,6 +674,12 @@ static void update_camera_message(void)
UIMenuStoreInfo *puiPara = sf_ui_para_get();
// if((puiPara->CamMode == SF_CAM_MODE_PHOTO) || (puiPara->CamMode == SF_CAM_MODE_PHOTO_VIDEO))
SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
}
switch (puiPara->ImgSize)
{
case PHOTO_SIZE_40M:
@ -719,6 +726,8 @@ static void update_camera_message(void)
default:
break;
}
#if 1
if (System_GetState(SYS_STATE_FS) == FS_INIT_OK)
{
UINT32 cardStatus = System_GetState(SYS_STATE_CARD);
@ -771,6 +780,8 @@ static void update_camera_message(void)
set_warning_label_text(label_6_scr_uiflowphoto);
lv_label_set_text(label_6_scr_uiflowphoto, "SD Card Error");
}
#endif
}
extern int is_menu_screen_luck(void);

View File

@ -1715,8 +1715,6 @@ extern int FileSys_SearchFileRewind(FS_SEARCH_HDL pSearch);
#define FileSys_RegisterCB(parm1) FileSys_RegisterCBEx('A', parm1)
#define FileSys_Benchmark(parm1,parm2,parm3) FileSys_BenchmarkEx('A', parm1,parm2,parm3)
#define FileSys_GetEMMCDiskInfo(parm1) FileSys_GetDiskInfoEx('B', parm1)
#define fs_getcwd FileSys_GetCwd
#define fs_setcwd FileSys_SetCwd

View File

@ -27,6 +27,8 @@
#include "UIApp/AppDisp_PipView.h"
#include <vf_gfx.h>
#include "vendor_videocapture.h"
#include "sf_sd_common.h"
#define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
@ -615,17 +617,31 @@ UINT32 PhotoExe_GetExpectSize_RhoBRCrtl(UINT32 ImgIdx, BOOL bPrimaryOnly)
UINT32 PhotoExe_GetFreePicNum(void)
{
UINT64 uiFreeSpace;
UINT64 uiFreeSpace = 0;
UINT32 uiMaxImageSize;
UINT32 freeImgNum;
UINT32 reserveSize = 0x80000; // 500KB
UINT32 CaptureSize;
UINT32 size;
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
#if (FILESIZE_ALIGN_FUNC)
reserveSize += FS_ALIGN_RESERVED_SIZE;
#endif
uiFreeSpace = FileSys_GetDiskInfo(FST_INFO_FREE_SPACE);
if(mmc_dev->dev_type == MMC_DEV_SD)
{
uiFreeSpace = FileSys_GetDiskInfoEx('A', FST_INFO_FREE_SPACE);
}
else if(mmc_dev->dev_type == MMC_DEV_EMMC)
{
uiFreeSpace = FileSys_GetDiskInfoEx('B', FST_INFO_FREE_SPACE);
}
DBG_IND("[cap]Free Space = %d KB\r\n", uiFreeSpace / 1024);
@ -659,7 +675,6 @@ UINT32 PhotoExe_GetFreePicNum(void)
return freeImgNum;
}
void PhotoExe_GetDispCord(URECT *dispCord)
{
UINT32 ImageRatioIdx = 0;

View File

@ -30,6 +30,8 @@
#include "FileSysTsk.h"
#include "PlaybackTsk.h"
#include "DCF.h"
#include "sf_sd_common.h"
#define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
///////////////////////////////////////////////////////////////////////////////
@ -46,16 +48,22 @@ void UIStorageCheck_AllSize(UINT64 *uiTotal, UINT64 *uiRemain)
(*uiRemain) /= (1024 * 1024);
}
static BOOL bIsFileReachMax = FALSE;
void UIStorageCheck_ResetFileReachMax(void)
{
bIsFileReachMax = FALSE;
}
//#NT#2009/12/30#Ben Wang -begin
//#NT#Add check for folder attribute
static BOOL check_CurrDir_writable(void)
{
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB);
@ -66,9 +74,9 @@ static BOOL check_CurrDir_writable(void)
UINT32 CurrDirID;
SDCFDIRINFO dirinfo = {0};
CurrDirID = DCF_GetDBInfo(DCF_INFO_CUR_DIR_ID);
CurrDirID = DCF_GetDBInfoEx(mmc_dev->dcf_handle, DCF_INFO_CUR_DIR_ID);
if (CurrDirID) {
if (DCF_GetDirInfo(CurrDirID, &dirinfo)) {
if (DCF_GetDirInfoEx(mmc_dev->dcf_handle, CurrDirID, &dirinfo)) {
if (M_IsReadOnly(dirinfo.ucAttrib)) {
DBG_IND("DCF folder %d is READONLY.\r\n", CurrDirID);
return FALSE;
@ -88,20 +96,34 @@ static BOOL check_CurrDir_writable(void)
}
}
BOOL UIStorageCheck_DCIMWritable(void)
{
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB);
if (useFileDB) {
return TRUE;
} else {
char DCIM_DIR[9] = "A:\\DCIM";
} else {
INT32 uiStatus = 0;
UINT8 ucAttrib = 0;
BOOL ret = FALSE;
if(mmc_dev->dev_type == MMC_DEV_SD)
{
uiStatus = FileSys_GetAttrib("A:\\DCIM", &ucAttrib);
}
else
{
uiStatus = FileSys_GetAttrib("B:\\DCIM", &ucAttrib);
}
uiStatus = FileSys_GetAttrib(DCIM_DIR, &ucAttrib);
if (uiStatus == FST_STA_OK) {
if (ucAttrib & FS_ATTRIB_DIRECTORY) {
if (System_GetState(SYS_STATE_CARD) == CARD_REMOVED) {
@ -127,11 +149,90 @@ BOOL UIStorageCheck_DCIMWritable(void)
}
}
BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
static BOOL UIStrgCheckFolderFull(DCF_HANDLE DcfHandle)
{
#if (USE_DCF == ENABLE)
BOOL bIsFileReachMax = FALSE;
UINT32 DCF_DirId = 0, DCF_FileId = 0;
BOOL ret;
if (System_GetState(SYS_STATE_FS) == FS_NUM_FULL) {
DBG_ERR("UI_Validate_Storage: DIR:999 is existing!\r\n");
return TRUE;
}
bIsFileReachMax = FALSE;
ret = DCF_GetNextIDEx(DcfHandle, &DCF_DirId, &DCF_FileId);
if (ret && DCF_DirId == 0 && DCF_FileId == 0) {
bIsFileReachMax = TRUE;
DBG_IND("Next dir_id =%d, file_id = %d \r\n", DCF_DirId, DCF_FileId);
} else if (ret && DCF_GetDBInfoEx(DcfHandle, DCF_INFO_IS_9999) == TRUE)
{
bIsFileReachMax = TRUE;
}
return bIsFileReachMax;
#else
return FALSE;
#endif
}
static BOOL UIStrgCheckFull(UINT32 *pFreeCount)
{
#if (PHOTO_MODE==ENABLE)
UINT32 uiCountTmp = 0;
#endif
#if (PHOTO_MODE==ENABLE)
uiCountTmp = PhotoExe_GetFreePicNum();
DBG_IND("uiCountTmp = %d, pFreeCount=%d\r\n",uiCountTmp,pFreeCount);
if (pFreeCount) {
*pFreeCount = uiCountTmp;
}
if (uiCountTmp == 0) {
return TRUE;
} else {
return FALSE;
}
#else
return FALSE;
#endif
}
static BOOL UIStrgCheckErr(MMC_DEV_TYPE dev_id)
{
if(dev_id == MMC_DEV_SD)
{
FileSys_WaitFinishEx('A');
}
else if(dev_id == MMC_DEV_EMMC)
{
FileSys_WaitFinishEx('B');
}
if (System_GetState(SYS_STATE_FS) == FS_DISK_ERROR
|| System_GetState(SYS_STATE_FS) == FS_UNKNOWN_FORMAT
|| System_GetState(SYS_STATE_FS) == FS_UNFORMATTED
//#NT#2016/12/06#Niven Cho -begin
//#NT#MULTI_DRIVE
|| System_GetState(SYS_STATE_CARD) == CARD_REMOVED)
//#NT#2016/12/06#Niven Cho -end
//|| UIStorageCheck_Error() )
{
DBG_ERR("UIStorageCheck: %d Card Error\r\n", System_GetState(SYS_STATE_FS));
return TRUE;
} else {
return FALSE;
}
}
BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
{
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB);
@ -142,49 +243,11 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
if (useFileDB) {
return FALSE;
} else {
#if (USE_DCF == ENABLE)
BOOL bIsFileReachMax = FALSE;
UINT32 DCF_DirId = 0, DCF_FileId = 0;
BOOL ret;
if (System_GetState(SYS_STATE_FS) == FS_NUM_FULL) {
DBG_ERR("UI_Validate_Storage: DIR:999 is existing!\r\n");
return TRUE;
}
bIsFileReachMax = FALSE;
//#NT#2011/03/28#Lincy Lin -begin
//#NT#fix delete the 9999th file in 999 folder cause capture not save
ret = DCF_GetNextID(&DCF_DirId, &DCF_FileId);
if (ret && DCF_DirId == 0 && DCF_FileId == 0) {
bIsFileReachMax = TRUE;
DBG_IND("Next dir_id =%d, file_id = %d \r\n", DCF_DirId, DCF_FileId);
} else if (ret && DCF_GetDBInfo(DCF_INFO_IS_9999) == TRUE)
//#NT#2011/03/28#Lincy Lin -end
{
bIsFileReachMax = TRUE;
}
return bIsFileReachMax;
#else
return FALSE;
#endif
UIStrgCheckFolderFull(mmc_dev->dcf_handle);
}
break;
case STORAGE_CHECK_FULL:
#if (PHOTO_MODE==ENABLE)
uiCountTmp = PhotoExe_GetFreePicNum();
DBG_IND("uiCountTmp = %d, pFreeCount=%d\r\n",uiCountTmp,pFreeCount);
if (pFreeCount) {
*pFreeCount = uiCountTmp;
}
if (uiCountTmp == 0) {
return TRUE;
} else {
return FALSE;
}
#else
return FALSE;
#endif
UIStrgCheckFull(pFreeCount);
break;
case STORAGE_CHECK_LOCKED:
if (System_GetState(SYS_STATE_CARD) == CARD_LOCKED) {
@ -195,21 +258,7 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
}
break;
case STORAGE_CHECK_ERROR:
FileSys_WaitFinish();
if (System_GetState(SYS_STATE_FS) == FS_DISK_ERROR
|| System_GetState(SYS_STATE_FS) == FS_UNKNOWN_FORMAT
|| System_GetState(SYS_STATE_FS) == FS_UNFORMATTED
//#NT#2016/12/06#Niven Cho -begin
//#NT#MULTI_DRIVE
|| System_GetState(SYS_STATE_CARD) == CARD_REMOVED)
//#NT#2016/12/06#Niven Cho -end
//|| UIStorageCheck_Error() )
{
DBG_ERR("UIStorageCheck: %d Card Error\r\n", System_GetState(SYS_STATE_FS));
return TRUE;
} else {
return FALSE;
}
UIStrgCheckErr(mmc_dev->dev_type);
break;
case STORAGE_CHECK_DCIM_READONLY:
if ((UIStorageCheck_DCIMWritable() == FALSE)

View File

@ -62,6 +62,7 @@ typedef struct
MMC_DEV_TYPE dev_type;
MMC_DEV_MOUNT_STATE moumted_state;
MMC_DEV_SPACE_STATE space_state;
MMC_DEV_LOOP_STATE loop_state;
int dcf_handle;
}SF_RTOS_ST_MMC_DEV;

View File

@ -157,19 +157,19 @@ static UINT32 sf_rtos_mmc_dev_space_check_full(MMC_DEV_TYPE mmc_dev)
/*check disk free size*/
if(mmc_dev == MMC_DEV_SD)
{
diskFree = FileSys_GetDiskInfo(FST_INFO_FREE_SPACE);
diskFree = FileSys_GetDiskInfoEx('A', FST_INFO_FREE_SPACE);
}
else
{
diskFree = FileSys_GetEMMCDiskInfo(FST_INFO_FREE_SPACE);
diskFree = FileSys_GetDiskInfoEx('B', FST_INFO_FREE_SPACE);
}
diskFree = diskFree/1024/1024;
if(diskFree < 30) /* 30MB */
{
ret = 1;
IsCardFull = TRUE;
}
else
{
@ -181,6 +181,7 @@ static UINT32 sf_rtos_mmc_dev_space_check_full(MMC_DEV_TYPE mmc_dev)
int SF_RtosStrgRegister(int devid, int mounted_state)
{
UIMenuStoreInfo *puiPara = sf_ui_para_get();
if(mounted_state == FST_STA_OK)
{
sf_rtos_mmc_dev[devid]->moumted_state = MMC_DEV_MOUNT_STATE_MOUNTED;
@ -190,16 +191,15 @@ int SF_RtosStrgRegister(int devid, int mounted_state)
sf_rtos_mmc_dev[devid]->moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED;
}
UINT32 isfull = sf_rtos_mmc_dev_space_check_full(devid);
if(isfull == 1)
if(puiPara->SdLoopSwitch == 1)
{
sf_rtos_mmc_dev[devid]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH;
sf_rtos_mmc_dev[devid]->loop_state = MMC_DEV_LOOP_STATE_ON;
}
else if(isfull == 0)
{
sf_rtos_mmc_dev[devid]->space_state = MMC_DEV_SPACE_STATE_ENOUGH;
}
DBG_WRN("11devid = %d, state = %d\n", devid, mounted_state);
else
sf_rtos_mmc_dev[devid]->loop_state = MMC_DEV_LOOP_STATE_OFF;
DBG_WRN("devid = %d, state = %d\n", devid, mounted_state);
return 0;
}
@ -214,6 +214,27 @@ SF_RTOS_ST_MMC_DEV *SF_RtosStrgCheckWorkableDev(void)
{
MMC_DEV_TYPE workable_dev = MMC_DEV_NO;
UINT32 isfull = 0;
isfull = sf_rtos_mmc_dev_space_check_full(MMC_DEV_SD);
if(isfull == 1)
{
sf_rtos_mmc_dev[MMC_DEV_SD]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH;
}
else if(isfull == 0)
{
sf_rtos_mmc_dev[MMC_DEV_SD]->space_state = MMC_DEV_SPACE_STATE_ENOUGH;
}
isfull = sf_rtos_mmc_dev_space_check_full(MMC_DEV_EMMC);
if(isfull == 1)
{
sf_rtos_mmc_dev[MMC_DEV_EMMC]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH;
}
else if(isfull == 0)
{
sf_rtos_mmc_dev[MMC_DEV_EMMC]->space_state = MMC_DEV_SPACE_STATE_ENOUGH;
}
if((sf_rtos_mmc_dev[MMC_DEV_SD]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED) &&
(sf_rtos_mmc_dev[MMC_DEV_EMMC]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED))
{
@ -227,9 +248,9 @@ SF_RTOS_ST_MMC_DEV *SF_RtosStrgCheckWorkableDev(void)
}
else
{
//if(sf_rtos_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON)
if(sf_rtos_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON)
{
//workable_dev = MMC_DEV_EMMC;
workable_dev = MMC_DEV_EMMC;
}
}
}
@ -241,9 +262,9 @@ SF_RTOS_ST_MMC_DEV *SF_RtosStrgCheckWorkableDev(void)
}
else
{
//if(sf_rtos_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON)
if(sf_rtos_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON)
{
//workable_dev = MMC_DEV_SD;
workable_dev = MMC_DEV_SD;
}
}
}
@ -264,9 +285,9 @@ SF_RTOS_ST_MMC_DEV *SF_RtosStrgCheckWorkableDev(void)
}
else
{
//if(sf_rtos_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON)
if(sf_rtos_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON)
{
//workable_dev = MMC_DEV_EMMC;
workable_dev = MMC_DEV_EMMC;
}
}
}