diff --git a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c index 50269dace..933376c03 100755 --- a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c +++ b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c @@ -63,6 +63,7 @@ void SF_StrgInit(void) sf_mmc_dev[i]->space_state = MMC_DEV_SPACE_STATE_ENOUGH; sf_mmc_dev[i]->loop_state = MMC_DEV_LOOP_STATE_OFF; } + pMMCDev = (SF_ST_MMC_DEV *)malloc(sizeof(SF_ST_MMC_DEV)); } void SF_StrgUnInit(void) @@ -74,6 +75,8 @@ void SF_StrgUnInit(void) sf_mmc_dev[i] = NULL; } } + free(pMMCDev); + pMMCDev = NULL; } void SF_StrgSetDcfHandle(UINT32 strg_id, UINT32 handle) @@ -86,7 +89,6 @@ static UINT32 SF_StrgSpaceCheckFull(MMC_DEV_TYPE mmc_dev) UINT64 diskFree = 0; UINT32 ret = 0; - return 0; /*check disk free size*/ if(mmc_dev == MMC_DEV_SD) { @@ -313,10 +315,12 @@ SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void) if(workable_dev == MMC_DEV_NO) { + MLOGD("Strg Check, No dev can use\n"); return NULL; } else { + MLOGD("Strg Check, workable_dev = %d\n", workable_dev); return sf_mmc_dev[workable_dev]; } } @@ -326,9 +330,9 @@ static void* mmc_monitoring_thread(void *arg) while(MMCMonitorTskCfg.IsRun) { #if USE_MMC_DEV_CHECK - SF_SetMMCDev(SF_StrgCheckWorkableDev()); + pMMCDev = SF_StrgCheckWorkableDev(); #endif - sf_sleep_ms(500); + sf_sleep_ms(1000); } return NULL; } @@ -341,6 +345,8 @@ int sf_mmc_dev_check_start(void) MLOGD("thread sf_mmc_monitoring_start creat fail!\n"); return ret; } + MMCMonitorTskCfg.IsRun = 1; + MLOGD("mmc_dev check create success!\n"); return 0; } diff --git a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h index 3f41d8abe..d28c801c5 100755 --- a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h +++ b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h @@ -32,7 +32,7 @@ #define EMMC_DEVICE_NAME "/dev/mmcblk1p1" #define EMMC_MOUNT_ROOT "/mnt/sd2" -#define USE_MMC_DEV_CHECK (1) +#define USE_MMC_DEV_CHECK (0) typedef enum { diff --git a/code/application/source/cardv/SrcCode/System/main.c b/code/application/source/cardv/SrcCode/System/main.c index dc35fae74..38f2c5cc8 100755 --- a/code/application/source/cardv/SrcCode/System/main.c +++ b/code/application/source/cardv/SrcCode/System/main.c @@ -447,7 +447,9 @@ int NvtMain(void) printf("create cardv message successs!!!!\n"); } sf_cardv_message_thread_init(); - +#if USE_MMC_DEV_CHECK + sf_mmc_dev_check_start(); +#endif SF_MESSAGE_BUF_S stMessageBuf = {0}; /*if(!sf_gpio_get_status(GPIO_KEY_TEST)){ @@ -476,8 +478,6 @@ int NvtMain(void) sf_led_init(); #endif sf_sd_exist_reg_cb(DrvCARD_DetStrgCard); - - sf_mmc_dev_check_start(); #endif System_WaitForPowerOffStart(); // Wait for shutdown cmd diff --git a/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c b/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c index 97c8e4dfb..5a2b0aedf 100755 --- a/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c +++ b/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c @@ -38,9 +38,10 @@ #define __DBGFLT__ "*" //*=All, [mark]=CustomClass #include #include "SF_SysStrgMng.h" +#if USE_MMC_DEV_CHECK SF_ST_MMC_DEV *mmc_dev = NULL; - +#endif void UIStorageCheck_AllSize(UINT64 *uiTotal, UINT64 *uiRemain) { (*uiTotal) = FileSys_GetDiskInfo(FST_INFO_DISK_SIZE); @@ -257,9 +258,11 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount) UINT32 useFileDB = 0; useFileDB = UI_GetData(FL_IsUseFileDB); - mmc_dev = SF_GetMMCDev(); + DBG_IND("UI_StorageCheck: Check item = 0x%x\r\n", uiCheckItem); #if USE_MMC_DEV_CHECK + mmc_dev = SF_GetMMCDev(); + if(mmc_dev == NULL) { DBG_ERR("No MMC_Dev Can use!\n"); 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 d58c67edb..80f9c79fc 100755 --- a/rtos/code/application/source/cardv/SrcCode/System/sys_filesys.c +++ b/rtos/code/application/source/cardv/SrcCode/System/sys_filesys.c @@ -63,8 +63,9 @@ static void card_insert_job(void) // call the function to wait init finish FileSys_WaitFinishEx('A'); FileSys_SetParamEx('A', FST_PARM_UPDATE_FSINFO , TRUE); - +#if USE_RTOS_MMC_CHECK SF_RtosStrgRegister(0, ret); +#endif #if HUNTING_CAMERA_MCU == ENABLE if(TRUE == sf_check_card_full()) { @@ -122,7 +123,9 @@ static void card_insert_job2(void) FileSys_WaitFinishEx('B'); FileSys_SetParamEx('B', FST_PARM_UPDATE_FSINFO , TRUE); +#if USE_RTOS_MMC_CHECK SF_RtosStrgRegister(1, ret); +#endif fastboot_set_done(BOOT_INIT_FILESYSOK_2); printf("filesys2_init e\r\n"); @@ -143,7 +146,9 @@ static void sys_detect_card_task(void) #if defined(_EMBMEM_EMMC_) THREAD_ENTRY(); +#if USE_RTOS_MMC_CHECK SF_RtosStrgInit(); +#endif card_insert_job(); THREAD_RETURN(0); @@ -176,7 +181,9 @@ static void sys_detect_card_task(void) vTaskDelay(pdMS_TO_TICKS(1000)); } +#if USE_RTOS_MMC_CHECK SF_RtosStrgUnInit(); +#endif THREAD_RETURN(0); #endif } diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c index 63e0abaf7..f8a5f4f93 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c @@ -1172,6 +1172,7 @@ static void MovieFast_UserEventCb(UINT32 id, MOVIE_USER_CB_EVENT event_id, UINT3 char tmp[256] = {'\0'}; #if HUNTING_CAMERA_MCU == ENABLE +#if USE_RTOS_MMC_CHECK SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev(); if(mmc_dev->dcf_handle < 0) { @@ -1188,7 +1189,9 @@ static void MovieFast_UserEventCb(UINT32 id, MOVIE_USER_CB_EVENT event_id, UINT3 snprintf(tmp, sizeof(tmp), "%c%s%s", 'B', MOVIE_THUMB_PATH, thumb_current_path); /* DCF 8.3 naming rule */ } } - +#else + snprintf(tmp, sizeof(tmp), "%c%s%s", 'A', MOVIE_THUMB_PATH, thumb_current_path); /* DCF 8.3 naming rule */ +#endif #else snprintf(tmp, sizeof(tmp), "%s%s", MOVIE_THUMB_PATH, (thumb_current_path + (length - 12))); /* DCF 8.3 naming rule */ snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG"); @@ -1301,7 +1304,9 @@ THREAD_RETTYPE MovieFast_InitFileNamingThread(void *arg) if(TRUE != sf_is_card_full()) #endif { - SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl2); +#if USE_RTOS_MMC_CHECK + SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl); +#endif fastboot_set_done(BOOT_INIT_FILENAMINGOK); } } @@ -1342,7 +1347,9 @@ THREAD_RETTYPE MovieFast_InitFileNamingThread2(void *arg) if(TRUE != sf_is_card_full()) #endif { - SF_RtosStrgSetDcfHandle(MMC_DEV_SD, g_dcf_hdl); +#if USE_RTOS_MMC_CHECK + SF_RtosStrgSetDcfHandle(MMC_DEV_SD, g_dcf_hdl2); +#endif fastboot_set_done(BOOT_INIT_FILENAMINGOK_2); } #endif 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 329f61430..97a5875c3 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 @@ -623,17 +623,21 @@ UINT32 PhotoExe_GetFreePicNum(void) UINT32 reserveSize = 0x80000; // 500KB UINT32 CaptureSize; UINT32 size; - + +#if USE_RTOS_MMC_CHECK 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; } +#endif #if (FILESIZE_ALIGN_FUNC) reserveSize += FS_ALIGN_RESERVED_SIZE; #endif +#if USE_RTOS_MMC_CHECK + if(mmc_dev->dev_type == MMC_DEV_SD) { uiFreeSpace = FileSys_GetDiskInfoEx('A', FST_INFO_FREE_SPACE); @@ -642,7 +646,9 @@ UINT32 PhotoExe_GetFreePicNum(void) { uiFreeSpace = FileSys_GetDiskInfoEx('B', FST_INFO_FREE_SPACE); } - +#else + uiFreeSpace = FileSys_GetDiskInfoEx('A', FST_INFO_FREE_SPACE); +#endif DBG_IND("[cap]Free Space = %d KB\r\n", uiFreeSpace / 1024); size = UI_GetData(FL_PHOTO_SIZE); 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 65e981cf7..c8bfd5e97 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/Photo/UIStorageCheck.c @@ -58,12 +58,15 @@ void UIStorageCheck_ResetFileReachMax(void) static BOOL check_CurrDir_writable(void) { +#if USE_RTOS_MMC_CHECK + 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; } +#endif UINT32 useFileDB = 0; useFileDB = UI_GetData(FL_IsUseFileDB); @@ -73,10 +76,15 @@ static BOOL check_CurrDir_writable(void) #if (USE_DCF == ENABLE) UINT32 CurrDirID; SDCFDIRINFO dirinfo = {0}; - +#if USE_RTOS_MMC_CHECK CurrDirID = DCF_GetDBInfoEx(mmc_dev->dcf_handle, DCF_INFO_CUR_DIR_ID); if (CurrDirID) { if (DCF_GetDirInfoEx(mmc_dev->dcf_handle, CurrDirID, &dirinfo)) { +#else + CurrDirID = DCF_GetDBInfo(DCF_INFO_CUR_DIR_ID); + if (CurrDirID) { + if (DCF_GetDirInfo(CurrDirID, &dirinfo)) { +#endif if (M_IsReadOnly(dirinfo.ucAttrib)) { DBG_IND("DCF folder %d is READONLY.\r\n", CurrDirID); return FALSE; @@ -100,13 +108,15 @@ static BOOL check_CurrDir_writable(void) BOOL UIStorageCheck_DCIMWritable(void) { +#if USE_RTOS_MMC_CHECK + 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; } - +#endif UINT32 useFileDB = 0; useFileDB = UI_GetData(FL_IsUseFileDB); if (useFileDB) { @@ -115,6 +125,7 @@ BOOL UIStorageCheck_DCIMWritable(void) INT32 uiStatus = 0; UINT8 ucAttrib = 0; BOOL ret = FALSE; + #if USE_RTOS_MMC_CHECK if(mmc_dev->dev_type == MMC_DEV_SD) { uiStatus = FileSys_GetAttrib("A:\\DCIM", &ucAttrib); @@ -123,6 +134,9 @@ BOOL UIStorageCheck_DCIMWritable(void) { uiStatus = FileSys_GetAttrib("B:\\DCIM", &ucAttrib); } + #else + uiStatus = FileSys_GetAttrib("A:\\DCIM", &ucAttrib); + #endif if (uiStatus == FST_STA_OK) { if (ucAttrib & FS_ATTRIB_DIRECTORY) { @@ -161,8 +175,11 @@ static BOOL UIStrgCheckFolderFull(DCF_HANDLE DcfHandle) return TRUE; } bIsFileReachMax = FALSE; - +#if USE_RTOS_MMC_CHECK ret = DCF_GetNextIDEx(DcfHandle, &DCF_DirId, &DCF_FileId); +#else + ret = DCF_GetNextID(&DCF_DirId, &DCF_FileId); +#endif 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); @@ -199,6 +216,8 @@ static BOOL UIStrgCheckFull(UINT32 *pFreeCount) static BOOL UIStrgCheckErr(MMC_DEV_TYPE dev_id) { +#if USE_RTOS_MMC_CHECK + if(dev_id == MMC_DEV_SD) { FileSys_WaitFinishEx('A'); @@ -207,7 +226,9 @@ static BOOL UIStrgCheckErr(MMC_DEV_TYPE dev_id) { FileSys_WaitFinishEx('B'); } - +#else + FileSys_WaitFinishEx('A'); +#endif if (System_GetState(SYS_STATE_FS) == FS_DISK_ERROR || System_GetState(SYS_STATE_FS) == FS_UNKNOWN_FORMAT || System_GetState(SYS_STATE_FS) == FS_UNFORMATTED @@ -226,13 +247,15 @@ static BOOL UIStrgCheckErr(MMC_DEV_TYPE dev_id) BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount) { +#if USE_RTOS_MMC_CHECK + 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; } - +#endif UINT32 useFileDB = 0; useFileDB = UI_GetData(FL_IsUseFileDB); @@ -243,7 +266,11 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount) if (useFileDB) { return FALSE; } else { + #if USE_RTOS_MMC_CHECK UIStrgCheckFolderFull(mmc_dev->dcf_handle); + #else + UIStrgCheckFolderFull(0); + #endif } break; case STORAGE_CHECK_FULL: @@ -258,7 +285,12 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount) } break; case STORAGE_CHECK_ERROR: - UIStrgCheckErr(mmc_dev->dev_type); + + #if USE_RTOS_MMC_CHECK + UIStrgCheckErr(mmc_dev->dev_type); + #else + UIStrgCheckErr(0); + #endif break; case STORAGE_CHECK_DCIM_READONLY: if ((UIStorageCheck_DCIMWritable() == FALSE) diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c index 4d5a4014c..ed8ad953c 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c @@ -747,7 +747,9 @@ INT32 PhotoFast_FileNaming_Open(void) } DCF_ScanObjEx(g_dcf_hdl); +#if USE_RTOS_MMC_CHECK SF_RtosStrgSetDcfHandle(MMC_DEV_SD, g_dcf_hdl); +#endif } else{ DBG_WRN("dcf handle1 is already opened\n"); @@ -777,7 +779,9 @@ INT32 PhotoFast_FileNaming_Open2(void) DBG_WRN("DCF_ScanObjEx emmc handle=%d\n", g_dcf_hdl2); DCF_ScanObjEx(g_dcf_hdl2); + #if USE_RTOS_MMC_CHECK SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl2); + #endif } else{ DBG_WRN("dcf handle2 is already opened\n"); @@ -806,9 +810,11 @@ INT32 PhotoFast_FileNaming_Close(void) DCF_UnInstallID(); } +#if USE_RTOS_MMC_CHECK + SF_RtosStrgSetDcfHandle(MMC_DEV_SD, g_dcf_hdl); SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl2); - +#endif return 0; } 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 436ddbb7c..b3f0dd3bb 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFastSliceEncode.c @@ -2389,6 +2389,7 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data) #endif #if HUNTING_CAMERA_MCU == ENABLE + #if USE_RTOS_MMC_CHECK SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev(); if(mmc_dev->dcf_handle < 0) { @@ -2405,6 +2406,9 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data) snprintf(tmp, sizeof(tmp), "%c%s%s", 'B', PHOTO_THUMB_PATH, file_path); /* DCF 8.3 naming rule */ } } + #else + snprintf(tmp, sizeof(tmp), "%c%s%s", 'A', PHOTO_THUMB_PATH, file_path); /* DCF 8.3 naming rule */ + #endif #else UINT32 length = strlen(file_path); snprintf(tmp, sizeof(tmp), "%s%s", PHOTO_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */ diff --git a/rtos/code/driver/na51089/include/sf_sd_common.h b/rtos/code/driver/na51089/include/sf_sd_common.h index 6c6635ab9..75255f960 100755 --- a/rtos/code/driver/na51089/include/sf_sd_common.h +++ b/rtos/code/driver/na51089/include/sf_sd_common.h @@ -22,6 +22,8 @@ #define MMC_DEV_MAX_NUM (2) +#define USE_RTOS_MMC_CHECK (0) + typedef enum { MMC_DEV_SD = 0,