diff --git a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c index c90b0d2ee..208aee78c 100755 --- a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c +++ b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c @@ -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; } diff --git a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h index c168818b7..cf5f67873 100755 --- a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h +++ b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h @@ -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_ diff --git a/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c b/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c index d434740b7..705b5fc53 100644 --- a/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c +++ b/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c @@ -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) diff --git a/code/application/source/cardv/SrcCode/UIApp/Background/UIBackgroundObj.c b/code/application/source/cardv/SrcCode/UIApp/Background/UIBackgroundObj.c index 5bc501f51..ec905f8a1 100755 --- a/code/application/source/cardv/SrcCode/UIApp/Background/UIBackgroundObj.c +++ b/code/application/source/cardv/SrcCode/UIApp/Background/UIBackgroundObj.c @@ -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; 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 896fab468..0b294eb9e 100755 --- a/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c +++ b/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c @@ -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); diff --git a/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c b/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c index 23a4c9ceb..96ce8437d 100755 --- a/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c +++ b/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c @@ -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 +#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) diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c index ac73f54f6..127f5e88c 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowPhoto/UIFlowPhotoEventCallback.c @@ -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 @@ -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); diff --git a/code/lib/include/FileSysTsk.h b/code/lib/include/FileSysTsk.h index dd9c3e874..2a7c7a800 100644 --- a/code/lib/include/FileSysTsk.h +++ b/code/lib/include/FileSysTsk.h @@ -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 diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c b/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c index 323351ecb..329f61430 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIAppPhoto_Exe.c @@ -27,6 +27,8 @@ #include "UIApp/AppDisp_PipView.h" #include #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; diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c b/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c index 23a4c9ceb..65e981cf7 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c @@ -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) diff --git a/rtos/code/driver/na51089/include/sf_sd_common.h b/rtos/code/driver/na51089/include/sf_sd_common.h index 2f267f451..6c6635ab9 100755 --- a/rtos/code/driver/na51089/include/sf_sd_common.h +++ b/rtos/code/driver/na51089/include/sf_sd_common.h @@ -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; 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 9d04409c7..7fdd216b6 100755 --- a/rtos/code/driver/na51089/source/mcu/sf_sd_common.c +++ b/rtos/code/driver/na51089/source/mcu/sf_sd_common.c @@ -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; } } }