diff --git a/rtos/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S550.h b/rtos/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S550.h index 058fb0aad..f6263c633 100755 --- a/rtos/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S550.h +++ b/rtos/code/application/source/cardv/SrcCode/PrjCfg_HUNTING_S550.h @@ -849,7 +849,7 @@ // 2. enable FS_DX_TYPE_DRIVE_B as DX_TYPE_CARD2 // 3. enable FS_MULTI_STRG_FUNC // 4. NETWORK = NETWORK_NONE (Both uITRON and eCos) -#define FS_MULTI_STRG_FUNC DISABLE +#define FS_MULTI_STRG_FUNC ENABLE //MULTI_DRIVE #if defined(_EMBMEM_EMMC_) && (FS_MULTI_STRG_FUNC==DISABLE) #define FS_DX_TYPE_DRIVE_A USER_DX_TYPE_EMBMEM_FAT diff --git a/rtos/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c b/rtos/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c index fdb3192a5..4c9c38ecc 100644 --- a/rtos/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c +++ b/rtos/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c @@ -299,16 +299,16 @@ void System_OnStrgInit_FS(void) Pool.addr = mempool_filesys; #if (FS_MULTI_STRG_FUNC == ENABLE) MEM_RANGE Pool2; - Pool.Size = POOL_SIZE_FS_BUFFER; + Pool.size = POOL_SIZE_FILESYS; GxStrg_SetConfigEx(0, FILE_CFG_BUF, (UINT32)&Pool); - Pool2.Addr = Pool.Addr + POOL_SIZE_FS_BUFFER; - Pool2.Size = POOL_SIZE_FS_BUFFER; + Pool2.addr = Pool.addr + POOL_SIZE_FILESYS; + Pool2.size = POOL_SIZE_FILESYS; GxStrg_SetConfigEx(1, FILE_CFG_BUF, (UINT32)&Pool2); #if defined(_CPU2_LINUX_) && defined(_EMBMEM_EMMC_) // 3rd is for linux-pstore mounted by filesys MEM_RANGE Pool3; - Pool3.Addr = Pool2.Addr + POOL_SIZE_FS_BUFFER; - Pool3.Size = POOL_SIZE_FS_BUFFER; + Pool3.Addr = Pool2.addr + POOL_SIZE_FS_BUFFER; + Pool3.size = POOL_SIZE_FS_BUFFER; GxStrg_SetConfigEx(PST_DEV_ID, FILE_CFG_BUF, (UINT32)&Pool3); #endif #else @@ -592,22 +592,24 @@ INT32 System_OnStrgInsert(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) // Open DCF dcfParm.Drive = (stg_id == 0) ? 'A' : 'B'; #if (FS_MULTI_STRG_FUNC) - if (POOL_CNT_DCF_BUFFER !=2) { - DBG_FATAL("POOL_CNT_DCF_BUFFER be 2 for FS_MULTI_STRG_FUNC.\r\n"); - } else { +// if (POOL_CNT_DCF_BUFFER !=2) { +// DBG_FATAL("POOL_CNT_DCF_BUFFER be 2 for FS_MULTI_STRG_FUNC.\r\n"); +// } else { switch(stg_id) { case 0: - dcfParm.WorkbuffAddr = dma_getCacheAddr(OS_GetMempoolAddr(POOL_ID_DCF_BUFFER)); +// dcfParm.WorkbuffAddr = dma_getCacheAddr(OS_GetMempoolAddr(POOL_ID_DCF_BUFFER)); + dcfParm.WorkbuffAddr = mempool_dcf; break; case 1: - dcfParm.WorkbuffAddr = dma_getCacheAddr(OS_GetMempoolAddr(POOL_ID_DCF_BUFFER)) + POOL_SIZE_DCF_BUFFER; +// dcfParm.WorkbuffAddr = dma_getCacheAddr(OS_GetMempoolAddr(POOL_ID_DCF_BUFFER)) + POOL_SIZE_DCF_BUFFER; + dcfParm.WorkbuffAddr = mempool_dcf + POOL_SIZE_DCF_BUFFER; break; default: DBG_ERR("unknown stg_id=%d\r\n", stg_id); dcfParm.WorkbuffAddr = 0; break; } - } +// } #else dcfParm.WorkbuffAddr = mempool_dcf;//dma_getCacheAddr(OS_GetMempoolAddr(POOL_ID_DCF_BUFFER)); diff --git a/rtos/code/application/source/cardv/SrcCode/System/sys_card.c b/rtos/code/application/source/cardv/SrcCode/System/sys_card.c index 5b1916428..091850bc3 100755 --- a/rtos/code/application/source/cardv/SrcCode/System/sys_card.c +++ b/rtos/code/application/source/cardv/SrcCode/System/sys_card.c @@ -25,5 +25,15 @@ void card_init(void) sdio_setCallBack(SDIO_CALLBACK_CARD_DETECT, (SDIO_CALLBACK_HDL)card_det_insert); sdio_setCallBack(SDIO_CALLBACK_WRITE_PROTECT, (SDIO_CALLBACK_HDL)card_det_wp); pStrg->SetParam(STRG_SET_MEMORY_REGION, mempool_storage_sdio, POOL_SIZE_STORAGE_SDIO); + +#if FS_MULTI_STRG_FUNC + pStrg = sdio2_getStorageObject(STRG_OBJ_FAT1); + sdio2_setCallBack(SDIO_CALLBACK_CARD_DETECT, (SDIO_CALLBACK_HDL)card_det_insert); + sdio2_setCallBack(SDIO_CALLBACK_WRITE_PROTECT, (SDIO_CALLBACK_HDL)card_det_wp); + pStrg->SetParam(STRG_SET_MEMORY_REGION, mempool_storage_sdio + POOL_SIZE_STORAGE_SDIO, POOL_SIZE_STORAGE_SDIO); +#endif + + + #endif } 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 4c0a02ec5..ae1dc14be 100755 --- a/rtos/code/application/source/cardv/SrcCode/System/sys_filesys.c +++ b/rtos/code/application/source/cardv/SrcCode/System/sys_filesys.c @@ -12,6 +12,7 @@ #include "sys_fastboot.h" #include "PrjCfg.h" #include "DxHunting.h" +#include #if HUNTING_CAMERA_MCU == ENABLE #include "PrjInc.h" #include "wdt.h" @@ -32,7 +33,7 @@ static void card_insert_job(void) int ret; FILE_TSK_INIT_PARAM Param = {0}; - FS_HANDLE StrgDXH; + FS_HANDLE StrgDXH, StrgDXH2; printf("filesys_init b\r\n"); memset(&Param, 0, sizeof(FILE_TSK_INIT_PARAM)); @@ -42,6 +43,49 @@ static void card_insert_job(void) StrgDXH = (FS_HANDLE)sdio_getStorageObject(STRG_OBJ_FAT1); #endif +#if FS_MULTI_STRG_FUNC + StrgDXH2 = (FS_HANDLE)sdio2_getStorageObject(STRG_OBJ_FAT1); + + + DBG_WRN("sdio2_getStorageObject\n"); + { + UINT32 totoal_sectors = 0; +// UINT32 uiPhyAddr = 0; +// UINT32 uiPhySize = 0; +// unsigned long long partition_ofs= 0, partition_size = 0; +// unsigned long long usr_area_size = 0; + STORAGE_OBJ* pStrg = sdio2_getStorageObject(STRG_OBJ_FAT1); +// void *strg_mem = malloc(0x300); + +// pStrg->SetParam(STRG_SET_MEMORY_REGION, (UINT32)strg_mem, 0x300); + pStrg->Open(); //for initial emmc speed up, should open first, and then set partition + pStrg->GetParam(STRG_GET_DEVICE_PHY_SECTORS, (UINT32)&totoal_sectors, 0); + if (totoal_sectors == 0) { + DBG_WRN("totoal_sectors couldn't be zero\n"); + } + + DBG_WRN("storage_partition_init: totoal_sectors = %d\r\n", totoal_sectors); + pStrg->SetParam(STRG_SET_PARTITION_SECTORS, 16, totoal_sectors - 16); +// pStrg->Close(); + + //set the FAT size +// ret = storage_get_partition_addr(&partition_ofs, &partition_size, PARTITION_PATH_ROOTFSL1); +// usr_area_size = (unsigned long long)totoal_sectors*(unsigned long long)_EMBMEM_BLK_SIZE_; +// uiPhyAddr = partition_ofs/_EMBMEM_BLK_SIZE_; +// uiPhySize = (usr_area_size - partition_ofs)/_EMBMEM_BLK_SIZE_; +// if (ret == 0) { +// pStrg = EMB_GETSTRGOBJ(STRG_OBJ_FW_FAT); +// pStrg->SetParam(STRG_SET_MEMORY_REGION, (UINT32)strg_mem, STRG_MEM_SIZE); +// pStrg->SetParam(STRG_SET_PARTITION_SECTORS, uiPhyAddr, uiPhySize); +// } else { +// DBG_ERR("Cat get the %s path info\r\n", PARTITION_PATH_ROOTFSL1); +// } + } + + +#endif + + uiPoolAddr = mempool_filesys; Param.FSParam.WorkBuf = uiPoolAddr; Param.FSParam.WorkBufSize = (POOL_SIZE_FILESYS); @@ -52,11 +96,11 @@ static void card_insert_job(void) Param.FSParam.szMountPath[sizeof(Param.FSParam.szMountPath) - 1] = '\0'; Param.FSParam.MaxOpenedFileNum = MAX_OPENED_FILE_NUM; if (FST_STA_OK != FileSys_Init(FileSys_GetOPS_uITRON())) { - printf("FileSys_Init failed\r\n"); + DBG_WRN("FileSys_Init failed\r\n"); } ret = FileSys_OpenEx('A', StrgDXH, &Param); if (FST_STA_OK != ret) { - printf("FileSys_Open err %d\r\n", ret); + DBG_WRN("FileSys_Open err %d\r\n", ret); } // call the function to wait init finish FileSys_WaitFinishEx('A'); @@ -64,7 +108,7 @@ static void card_insert_job(void) #if HUNTING_CAMERA_MCU == ENABLE if(TRUE == sf_check_card_full()) { - printf("ERR card full\r\n"); + DBG_WRN("ERR card full\r\n"); fastboot_set_done(BOOT_INIT_FILESYSOK); } else @@ -75,8 +119,31 @@ static void card_insert_job(void) } #endif +#if FS_MULTI_STRG_FUNC + uiPoolAddr = mempool_filesys + POOL_SIZE_FILESYS; + Param.FSParam.WorkBuf = uiPoolAddr; + Param.FSParam.WorkBufSize = (POOL_SIZE_FILESYS); + // support exFAT + Param.FSParam.bSupportExFAT = FALSE; + //Param.pDiskErrCB = (FileSys_CB)Card_InitCB; + strncpy(Param.FSParam.szMountPath, "/mnt/sd2", sizeof(Param.FSParam.szMountPath) - 1); //only used by FsLinux + Param.FSParam.szMountPath[sizeof(Param.FSParam.szMountPath) - 1] = '\0'; + Param.FSParam.MaxOpenedFileNum = MAX_OPENED_FILE_NUM; +// if (FST_STA_OK != FileSys_Init(FileSys_GetOPS_uITRON())) { +// printf("FileSys_Init failed\r\n"); +// } + DBG_WRN("Open B:\n"); + ret = FileSys_OpenEx('B', StrgDXH2, &Param); + if (FST_STA_OK != ret) { + printf("FileSys_Open err %d\r\n", ret); + } + // call the function to wait init finish + FileSys_WaitFinishEx('B'); +// FileSys_SetParamEx('B', FST_PARM_UPDATE_FSINFO , TRUE); +#endif + //fastboot_set_done(BOOT_INIT_FILESYSOK); - printf("filesys_init e\r\n"); + DBG_WRN("filesys_init e\r\n"); } #if !defined(_EMBMEM_EMMC_) diff --git a/rtos/code/application/source/cardv/SrcCode/System/sys_mempool.c b/rtos/code/application/source/cardv/SrcCode/System/sys_mempool.c index 19a1dd32c..7df0f47de 100755 --- a/rtos/code/application/source/cardv/SrcCode/System/sys_mempool.c +++ b/rtos/code/application/source/cardv/SrcCode/System/sys_mempool.c @@ -60,7 +60,11 @@ void mempool_init(void) UINT32 pa; HD_RESULT ret; +#if FS_MULTI_STRG_FUNC + ret = vendor_common_mem_alloc_fixed_pool("sdio", &pa, (void **)&va, POOL_SIZE_STORAGE_SDIO * 2, DDR_ID0); +#else ret = vendor_common_mem_alloc_fixed_pool("sdio", &pa, (void **)&va, POOL_SIZE_STORAGE_SDIO, DDR_ID0); +#endif if (ret != HD_OK) { return; } @@ -77,7 +81,11 @@ void mempool_init(void) } mempool_storage_nor = (UINT32)va; +#if FS_MULTI_STRG_FUNC + ret = vendor_common_mem_alloc_fixed_pool("filesys", &pa, (void **)&va, POOL_SIZE_FILESYS * 2, DDR_ID0); +#else ret = vendor_common_mem_alloc_fixed_pool("filesys", &pa, (void **)&va, POOL_SIZE_FILESYS, DDR_ID0); +#endif if (ret != HD_OK) { return; } @@ -215,11 +223,17 @@ void mempool_init(void) mempool_usbcmd_va = (UINT32)va; #endif #if (HUNTING_CAMERA_MODEL == ENABLE) + +#if (FS_MULTI_STRG_FUNC) + ret = vendor_common_mem_alloc_fixed_pool("dcf", &pa, (void **)&va, POOL_SIZE_DCF_BUFFER * 2, DDR_ID0); +#else ret = vendor_common_mem_alloc_fixed_pool("dcf", &pa, (void **)&va, POOL_SIZE_DCF_BUFFER, DDR_ID0); +#endif if (ret != HD_OK) { return; } mempool_dcf = (UINT32)va; + #endif } 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 b056c5eb9..4b9102435 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c @@ -88,6 +88,7 @@ static CHAR g_photo_fast_write_file_Path[NMC_TOTALFILEPATH_MAX_LE static INT32 g_photo_fast_id_mapping[PHOTO_CAP_ID_MAX] = {-1,-1}; static PHOTO_FILENAME_CB *g_fpPhotoFastFileNameCB = NULL; static DCF_HANDLE g_dcf_hdl = 0; +static DCF_HANDLE g_dcf_hdl2 = 0; static HD_PATH_ID g_video_enc_path[PHOTO_ENC_JPG_TYPE_MAX_ID] = {0}; static UINT32 g_bVideoEncPathStart[PHOTO_ENC_JPG_TYPE_MAX_ID] = {0}; static HD_VIDEOENC_BUFINFO g_enc_buf_info[PHOTO_ENC_JPG_TYPE_MAX_ID] = {0}; @@ -722,6 +723,31 @@ INT32 PhotoFast_FileNaming_Open(void) DCF_SetFileFreeChars(DCF_FILE_TYPE_ANYFORMAT, DCF_FILE_NAME); DCF_ScanObj(); +#if (FS_MULTI_STRG_FUNC) + { + DCF_OPEN_PARM dcfParm = { + .Drive = 'B', + .WorkbuffAddr = mempool_dcf + POOL_SIZE_DCF_BUFFER, + .WorkbuffSize = POOL_SIZE_DCF_BUFFER, + }; + g_dcf_hdl2 = DCF_Open(&dcfParm); + if(g_dcf_hdl2 < 0){ + DBG_ERR("get dcf handle error!\n"); + } + + + DBG_WRN("DCF_ScanObjEx emmc handle=%d\n", g_dcf_hdl2); +// DCF_SetParm(DCF_PRMID_REMOVE_DUPLICATE_FOLDER, TRUE); +// DCF_SetParm(DCF_PRMID_REMOVE_DUPLICATE_FILE, TRUE); +// DCF_SetParm(DCF_PRMID_SET_VALID_FILE_FMT, DCF_FILE_TYPE_JPG|DCF_FILE_TYPE_MP4|DCF_FILE_TYPE_MOV); +// DCF_SetParm(DCF_PRMID_SET_DEP_FILE_FMT, DCF_FILE_TYPE_JPG|DCF_FILE_TYPE_WAV|DCF_FILE_TYPE_MPO); +// DCF_SetDirFreeChars(DCF_DIR_NAME); +// DCF_SetFileFreeChars(DCF_FILE_TYPE_ANYFORMAT, DCF_FILE_NAME); + DCF_ScanObjEx(g_dcf_hdl2); + } +#endif + + return 0; } @@ -734,6 +760,11 @@ INT32 PhotoFast_FileNaming_Close(void) g_dcf_hdl = -1; } +#if (FS_MULTI_STRG_FUNC) + DCF_Close(g_dcf_hdl2); + g_dcf_hdl2 = -1; +#endif + DCF_UnInstallID(); } @@ -856,6 +887,11 @@ INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId, INT32 rt; UINT32 Length; CHAR FilePath[NMC_TOTALFILEPATH_MAX_LEN]; + +#if FS_MULTI_STRG_FUNC + CHAR FilePath2[NMC_TOTALFILEPATH_MAX_LEN]; +#endif + UINT32 fileType; UINT32 open_flag; UINT32 nextFolderID = 0, nextFileID = 0; @@ -898,9 +934,30 @@ INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId, } } DCF_MakeObjPath(nextFolderID, nextFileID, fileType, FilePath); - DCF_AddDBfile(FilePath); - DBG_DUMP("%s added to DCF\r\n", FilePath); + DCF_AddDBfile(FilePath); + DBG_DUMP("%s added to DCF\r\n", FilePath); } + +#if 0//FS_MULTI_STRG_FUNC + + if (DCF_GetDBInfoEx(g_dcf_hdl2, DCF_INFO_IS_9999)) { + DBG_ERR("Exceed max dcf file!\r\n"); + return FST_STA_NOFREE_SPACE; + } + else { + if (Fmt == HD_CODEC_TYPE_RAW){ + fileType = DCF_FILE_TYPE_RAW; + } + else{ + fileType = DCF_FILE_TYPE_JPG; + } + //DCF_GetNextIDEx(g_dcf_hdl2, &nextFolderID,&nextFileID); + DCF_MakeObjPathEx(g_dcf_hdl2, nextFolderID, nextFileID, fileType, FilePath2); + DCF_AddDBfileEx(g_dcf_hdl2, FilePath2); + DBG_DUMP("%s added to DCF2\r\n", FilePath2); + } +#endif + } else{ strncpy(FilePath, Path, sizeof(FilePath)); @@ -948,6 +1005,29 @@ INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId, rt =FST_STA_ERROR; } +#if FS_MULTI_STRG_FUNC + + DBG_WRN("write %s\n", FilePath2); + if ((fp = FileSys_OpenFile(FilePath2, open_flag)) != NULL) { + Length = Size; + + rt = FileSys_WriteFile(fp, (UINT8 *)Addr, &Length, 0, NULL); + FileSys_FlushFile(fp); + FileSys_CloseFile(fp); + if (rt == FST_STA_OK) { + // DCF_AddDBfile(FilePath); + // DBG_DUMP("%s added to DCF\r\n", FilePath); + } else { + DBG_ERR("Addr=0x%x,Size=0x%x,Fmt=%d\r\n", Addr, Size, Fmt); + } + }else{ + DBG_ERR("FileSys_OpenFile fail\r\n"); + rt =FST_STA_ERROR; + } + +#endif + + return rt; } diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/UsbDisk/UIAppUsbDisk_Exe.c b/rtos/code/application/source/cardv/SrcCode/UIApp/UsbDisk/UIAppUsbDisk_Exe.c index b8151059a..a6e618cb0 100755 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/UsbDisk/UIAppUsbDisk_Exe.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/UsbDisk/UIAppUsbDisk_Exe.c @@ -153,10 +153,10 @@ ER AppInit_ModeUSBMSDC(void) MSDCInfo.msdc_vendor_cb = NULL; //#NT#2016/12/20#Niven Cho -begin //#NT#MULTI_DRIVE -#if (FS_MULTI_STRG_FUNC == ENABLE) - char *pDxName2 = NULL; - DX_HANDLE pStrgDev2 = 0; -#endif +// #if (FS_MULTI_STRG_FUNC == ENABLE) +// char *pDxName2 = NULL; +// DX_HANDLE pStrgDev2 = 0; +// #endif pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_A); @@ -178,21 +178,21 @@ ER AppInit_ModeUSBMSDC(void) } DBG_DUMP("===>%s\r\n", pDxName); -#if (FS_MULTI_STRG_FUNC == ENABLE) - MSDCInfo.pStrgHandle[1] = pStrgDev2; +// #if (FS_MULTI_STRG_FUNC == ENABLE) +// MSDCInfo.pStrgHandle[1] = pStrgDev2; - if (Dx_GetInfo(pStrgDev2, DX_INFO_NAME, &pDxName2) != DX_OK) { - pDxName2 = NULL; - } -#endif +// if (Dx_GetInfo(pStrgDev2, DX_INFO_NAME, &pDxName2) != DX_OK) { +// pDxName2 = NULL; +// } +// #endif -#if (FS_MULTI_STRG_FUNC == ENABLE) - MSDCInfo.pStrgHandle[1] = pStrgDev2; +// #if (FS_MULTI_STRG_FUNC == ENABLE) +// MSDCInfo.pStrgHandle[1] = pStrgDev2; - if (Dx_GetInfo(pStrgDev2, DX_INFO_NAME, &pDxName2) != DX_OK) { - pDxName2 = NULL; - } -#endif +// if (Dx_GetInfo(pStrgDev2, DX_INFO_NAME, &pDxName2) != DX_OK) { +// pDxName2 = NULL; +// } +// #endif #if (FS_MULTI_STRG_FUNC == ENABLE) MSDCInfo.msdc_storage_detCB[0] = (MSDC_StorageDet_CB)DrvCARD_DetStrgCard; @@ -280,7 +280,7 @@ INT32 MSDCExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) pLastStrgDev = GxStrg_GetDevice(0); if (pLastStrgDev == 0) { - //PowerOn_CB() POWERON_CB_SXOPEN ¨S¦³´£¦­±Ò°ÊFile System + //PowerOn_CB() POWERON_CB_SXOPEN �S�������Ұ�File System DBG_ERR("MSDC: Wait for FS start...\r\n"); FileSys_WaitFinish();