Merge branch 'Branch_S550_Fast_Emmc' of 192.168.6.216:linux-em-group/s530-ntk into Branch_S550_Emmc

This commit is contained in:
xiehongyan 2023-12-26 18:19:21 +08:00
commit 36e55a3291
16 changed files with 472 additions and 271 deletions

View File

@ -110,13 +110,13 @@ DX_HANDLE Dx_GetObject(UINT32 DxClassType) // Query device object
hDevice = (UINT32)(&gDevEmbMem7); hDevice = (UINT32)(&gDevEmbMem7);
} else if ((DxClassType & DX_TYPE_MASK) == DX_TYPE_EMBMEM8) { } else if ((DxClassType & DX_TYPE_MASK) == DX_TYPE_EMBMEM8) {
hDevice = (UINT32)(&gDevEmbMem8); hDevice = (UINT32)(&gDevEmbMem8);
DBG_ERR("DX_TYPE_EMBMEM8 hDevice = %lx\n", hDevice); DBG_IND("DX_TYPE_EMBMEM8 hDevice = %lx\n", hDevice);
} }
#endif #endif
#if !defined(_CARD1_NONE_) #if !defined(_CARD1_NONE_)
if ((DxClassType & DX_TYPE_MASK) == DX_TYPE_CARD1) { if ((DxClassType & DX_TYPE_MASK) == DX_TYPE_CARD1) {
hDevice = (UINT32)(&gDevCARD1); hDevice = (UINT32)(&gDevCARD1);
DBG_ERR("DX_TYPE_CARD1 hDevice = %lx\n", hDevice); DBG_IND("DX_TYPE_CARD1 hDevice = %lx\n", hDevice);
} }
#endif #endif
#if !defined(_CARD3_NONE_) #if !defined(_CARD3_NONE_)

View File

@ -47,6 +47,7 @@ BOOL GxStrg_OpenDevice(UINT32 DevID, DX_HANDLE NewStrgDXH)
return FALSE; return FALSE;
} }
DBG_WRN("FileSys_OpenEx %c\n", GXSTRG_ID2DRV(DevID));
if (FileSys_OpenEx(GXSTRG_ID2DRV(DevID), (FS_HANDLE)NewStrgDXH, &g_FSInitParam[DevID]) != FST_STA_OK) { if (FileSys_OpenEx(GXSTRG_ID2DRV(DevID), (FS_HANDLE)NewStrgDXH, &g_FSInitParam[DevID]) != FST_STA_OK) {
DBG_WRN("FileSys_Open(DevID %d)\r\n", DevID); DBG_WRN("FileSys_Open(DevID %d)\r\n", DevID);
return FALSE; return FALSE;
@ -101,11 +102,14 @@ void GxStrg_SendMountStatus(UINT32 DevId, UINT32 MsgId)
if (FST_FS_TYPE_LINUX == g_FsType) { if (FST_FS_TYPE_LINUX == g_FsType) {
if (g_LnxStrgStatus[DevId].IsFormatted) { if (g_LnxStrgStatus[DevId].IsFormatted) {
CHKPNT;
MountStatus = FST_STA_OK; MountStatus = FST_STA_OK;
} else { } else {
CHKPNT;
MountStatus = FST_STA_DISK_UNFORMAT; MountStatus = FST_STA_DISK_UNFORMAT;
} }
} else { } else {
CHKPNT;
MountStatus = MsgId; MountStatus = MsgId;
} }

View File

@ -45,7 +45,7 @@ void GxStrg_Det(UINT32 DevID, DX_HANDLE StrgDXH)
(uiStrgCardCurSts != uiStrgCardStatus)) { (uiStrgCardCurSts != uiStrgCardStatus)) {
isFormat = g_LnxStrgStatus[DevID].IsFormatted; isFormat = g_LnxStrgStatus[DevID].IsFormatted;
DBG_DUMP("isFormat = %lu\n", isFormat); DBG_DUMP("DevID=%lu, isFormat = %lu\n", DevID, isFormat);
switch (uiStrgCardCurSts) { switch (uiStrgCardCurSts) {
case DET_CARD_INSERTED: case DET_CARD_INSERTED:

View File

@ -137,6 +137,73 @@ static int GxStrgLnx_GetSD1DevByBus(char *out_path, int out_size)
} }
} }
static int GxStrgLnx_GetSD2DevByBus(char *out_path, int out_size)
{
#define MMC_SYS_PATH "/sys/bus/mmc/devices"
#define MMC1BUS_PREFIX "mmc1"
#define MMC0BUS "mmc2"
#define MMCDEV "mmc"
char find_path[64] = {0};//e.g. /sys/devices/platform/nt96660_mmc.0/mmc_host/mmc0/mmc0:b368/block
char dev_path[32] = {0};//e.g. /dev/mmcblk0p1, /dev/mmcblk0, /dev/mmcblk1p1, /dev/mmcblk1
char mmc_bus_name[16] = {0}; //e.g. mmc0:b368
char mmc_dev_name[16] = {0};
int bFound = 0, beMMCFound = 0;;
out_path[0] = '\0';//set empty first
//1. find the mmc2 to check eMMC is existed or not.
if(0 == GxStrgLnx_FindEntryByPrefix(MMC_SYS_PATH, MMC0BUS, mmc_bus_name, sizeof(mmc_bus_name))) {
DBG_IND("mmc0 bus not found\r\n");
beMMCFound = 1;
//return -1;
} else if(0 != GxStrgLnx_FindEntryByPrefix(MMC_SYS_PATH, MMC1BUS_PREFIX, mmc_bus_name, sizeof(mmc_bus_name))) { // find the bus mmc0 to check the card is inserted or not
DBG_IND("mmc0 bus not found\r\n");
return -1;
}
//2. get the device name from mmc0 information
snprintf(find_path, sizeof(find_path), "%s/%s/block", MMC_SYS_PATH, mmc_bus_name);
if (!GxStrgLnx_IsPathExist(find_path)) {
DBG_ERR("%s not found\r\n", find_path);
return -1;
}
if(0 != GxStrgLnx_FindEntryByPrefix(find_path, MMCDEV, mmc_dev_name, sizeof(mmc_dev_name))) {
DBG_IND("device not found\r\n");
return -1;
}
//3. try the real device name is mmcblk0/mmcblk1 or mmcblk0p1/mmcblk1p1
//find dev name with p1 (e.g. mmcblk0p1)
if (beMMCFound) { // emmc is mmcblk2p5.
snprintf(dev_path, sizeof(dev_path), "/dev/%sp5", mmc_dev_name);
DBG_IND("GxStrgLnx_GetSD2DevByBus: found emmc\r\n");
}
else {
snprintf(dev_path, sizeof(dev_path), "/dev/%sp1", mmc_dev_name);
}
if (GxStrgLnx_IsPathExist(dev_path)) {
bFound = 1;
}
if(!bFound) {//find dev name without p1. (e.g. mmcblk0)
snprintf(dev_path, sizeof(dev_path), "/dev/%s", mmc_dev_name);
if(GxStrgLnx_IsPathExist(dev_path)) {
bFound = 1;
}
}
if(bFound) {
DBG_IND("SD2Dev = %s\r\n", out_path);
GXSTRG_STRCPY(out_path, dev_path, out_size);
return 0;
} else {
DBG_ERR("The dev partition name not found\r\n");
return -1;
}
}
static int GxStrgLnx_GetDevByMountPath(char *pDevPath, const char* pMountPath, int BufSize) static int GxStrgLnx_GetDevByMountPath(char *pDevPath, const char* pMountPath, int BufSize)
{ {
struct mntent *ent; struct mntent *ent;
@ -177,7 +244,7 @@ static INT32 GxStrgLnx_ChkStatus(UINT32 DevId)
UINT32 StrgCbVal; UINT32 StrgCbVal;
BOOL bIsReadOnly = FALSE; BOOL bIsReadOnly = FALSE;
BOOL bIsFormatted; BOOL bIsFormatted;
static UINT32 StrgCbValPrev = STRG_CB_UNKNOWN; static UINT32 StrgCbValPrev[2] = {STRG_CB_UNKNOWN, STRG_CB_UNKNOWN};
//1. get the device name from the mount list //1. get the device name from the mount list
ret = GxStrgLnx_GetDevByMountPath(DevPath, pMountPath, sizeof(DevPath)); ret = GxStrgLnx_GetDevByMountPath(DevPath, pMountPath, sizeof(DevPath));
@ -203,7 +270,11 @@ static INT32 GxStrgLnx_ChkStatus(UINT32 DevId)
} }
//2. if the device is not mounted, get the dev name from the mmc0 bus //2. if the device is not mounted, get the dev name from the mmc0 bus
ret = GxStrgLnx_GetSD1DevByBus(DevPath, sizeof(DevPath)); if(DevId == 0)
ret = GxStrgLnx_GetSD1DevByBus(DevPath, sizeof(DevPath));
else
ret = GxStrgLnx_GetSD2DevByBus(DevPath, sizeof(DevPath));
if (ret == 0) { if (ret == 0) {
//0. if the storage object is set, detect card insert //0. if the storage object is set, detect card insert
if (g_pCurStrgDXH[DevId]) { if (g_pCurStrgDXH[DevId]) {
@ -246,16 +317,16 @@ static INT32 GxStrgLnx_ChkStatus(UINT32 DevId)
} }
label_exit: label_exit:
if (StrgCbValPrev != StrgCbVal) { if (StrgCbValPrev[DevId] != StrgCbVal) {
g_LnxStrgStatus[DevId].IsInserted = (StrgCbVal == STRG_CB_INSERTED); g_LnxStrgStatus[DevId].IsInserted = (StrgCbVal == STRG_CB_INSERTED);
g_LnxStrgStatus[DevId].IsReadOnly = bIsReadOnly; g_LnxStrgStatus[DevId].IsReadOnly = bIsReadOnly;
g_LnxStrgStatus[DevId].IsFormatted = bIsFormatted; g_LnxStrgStatus[DevId].IsFormatted = bIsFormatted;
DBG_IND("MntPath %s, IsInserted %d, IsReadOnly %d, bIsFormatted %d\r\n", DBG_DUMP("MntPath %s, IsInserted %d, IsReadOnly %d, bIsFormatted %d\r\n",
g_FSInitParam[DevId].FSParam.szMountPath, g_FSInitParam[DevId].FSParam.szMountPath,
g_LnxStrgStatus[DevId].IsInserted, g_LnxStrgStatus[DevId].IsInserted,
g_LnxStrgStatus[DevId].IsReadOnly, g_LnxStrgStatus[DevId].IsReadOnly,
g_LnxStrgStatus[DevId].IsFormatted); g_LnxStrgStatus[DevId].IsFormatted);
StrgCbValPrev = StrgCbVal; StrgCbValPrev[DevId] = StrgCbVal;
} }
if(g_LnxStrgStatus[DevId].IsInserted && bIsFormatted && !g_LnxStrgStatus[DevId].IsFormatted){ if(g_LnxStrgStatus[DevId].IsInserted && bIsFormatted && !g_LnxStrgStatus[DevId].IsFormatted){

View File

@ -926,8 +926,9 @@
#define HW_S530 DISABLE #define HW_S530 DISABLE
#define DCF_DIR_NAME "MEDIA" /* 100MEDIA */ #define DCF_DIR_NAME "MEDIA" /* 100MEDIA */
#define DCF_FILE_NAME "SYGW" /* SYFW0001.JPG */ #define DCF_FILE_NAME "SYGW" /* SYFW0001.JPG */
#define PHOTO_THUMB_PATH "A:\\THUMB\\" #define PHOTO_THUMB_PATH ":\\THUMB\\"
#define MOVIE_THUMB_PATH "A:\\THUMB\\" #define MOVIE_THUMB_PATH ":\\THUMB\\"
#define SF_SD_ROOT "/mnt/sd/" #define SF_SD_ROOT "/mnt/sd/"
#define SF_SEND_LIST_DIR "/mnt/sd/THUMB/" #define SF_SEND_LIST_DIR "/mnt/sd/THUMB/"
#define SF_THUMB_SEND_LIST SF_SEND_LIST_DIR"send.list" #define SF_THUMB_SEND_LIST SF_SEND_LIST_DIR"send.list"

View File

@ -714,6 +714,8 @@ INT32 System_OnLensAttach(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
} }
*/ */
extern INT32 System_OnStrgSetActDrive(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray);
EVENT_ENTRY SystemObjCmdMap[] = { EVENT_ENTRY SystemObjCmdMap[] = {
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////
@ -751,6 +753,8 @@ EVENT_ENTRY SystemObjCmdMap[] = {
{NVTEVT_STRG_REMOVE, System_OnStrgRemove }, {NVTEVT_STRG_REMOVE, System_OnStrgRemove },
{NVTEVT_STRG_ATTACH, System_OnStrgAttach }, {NVTEVT_STRG_ATTACH, System_OnStrgAttach },
{NVTEVT_STRG_DETACH, System_OnStrgDetach }, {NVTEVT_STRG_DETACH, System_OnStrgDetach },
{NVTEVT_STRG_SET_ACT_DRIVE, System_OnStrgSetActDrive},
#endif #endif
#if(USB_MODE==ENABLE) #if(USB_MODE==ENABLE)
//Usb device event //Usb device event

View File

@ -185,6 +185,23 @@ static BOOL Cmd_user_EventTest(unsigned char argc, char **argv)
#endif #endif
#if FS_MULTI_STRG_FUNC /* test cmd */
static BOOL cmd_storage_set_act_drive(unsigned char argc, char **argv)
{
/* A or B*/
UINT32 drive_idx = strtoul(argv[0], NULL, 10);
if(drive_idx == 0 || drive_idx == 1)
Ux_PostEvent(NVTEVT_STRG_SET_ACT_DRIVE, 1, (UINT32)drive_idx);
else
DBG_ERR("invalid drive(%c)\n", drive_idx);
return TRUE;
}
#endif
SXCMD_BEGIN(sys_cmd_tbl, "system command") SXCMD_BEGIN(sys_cmd_tbl, "system command")
SXCMD_ITEM("mem %", cmd_sys_mem, "system memory layout") SXCMD_ITEM("mem %", cmd_sys_mem, "system memory layout")
@ -266,6 +283,9 @@ SXCMD_ITEM("wifisw %", cmd_wifi_switch, "wifisw 0/1")
SXCMD_ITEM("lcdbk %", sf_set_backlight_status, "lcdbk 0/1") SXCMD_ITEM("lcdbk %", sf_set_backlight_status, "lcdbk 0/1")
#endif #endif
#if FS_MULTI_STRG_FUNC /* test cmd */
SXCMD_ITEM("strg_set_act_drvie %", cmd_storage_set_act_drive, "set storage act drive (0 / 1)")
#endif
SXCMD_END() SXCMD_END()

View File

@ -132,6 +132,26 @@ static FST_FS_TYPE m_GxStrgType = FST_FS_TYPE_UITRON;
static void *mp_fwsrv_work_buf = NULL; static void *mp_fwsrv_work_buf = NULL;
#endif #endif
static BOOL g_bSupportExfat = FALSE; static BOOL g_bSupportExfat = FALSE;
#define STRG_NUM 2
#define STRG_ID_SD 0
#define STRG_ID_EMMC 1
typedef struct {
char name[16];
UINT8 strg_id;
DCF_HANDLE dcf_hdl;
CHAR drive;
} STRG_MAPPING_TABLE;
STRG_MAPPING_TABLE g_strg_mapping_table[STRG_NUM] = {
[STRG_ID_SD] = { "SD", .strg_id = STRG_ID_SD, .dcf_hdl = -1, .drive = 'A'},
[STRG_ID_EMMC] = { "EMMC", .strg_id = STRG_ID_EMMC, .dcf_hdl = -1, .drive = 'B'},
};
static DCF_HANDLE g_dcf_hdl_act = -1;
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
// //
// EMBMEM // EMBMEM
@ -316,68 +336,53 @@ void System_OnStrgInit_FS(void)
#if (FS_MULTI_STRG_FUNC == ENABLE) #if (FS_MULTI_STRG_FUNC == ENABLE)
MEM_RANGE Pool2; MEM_RANGE Pool2;
Pool.size = POOL_SIZE_FILESYS; Pool.size = POOL_SIZE_FILESYS;
GxStrg_SetConfigEx(0, FILE_CFG_BUF, (UINT32)&Pool); GxStrg_SetConfigEx(STRG_ID_SD, FILE_CFG_BUF, (UINT32)&Pool);
Pool2.addr = Pool.addr + POOL_SIZE_FILESYS; Pool2.addr = Pool.addr + POOL_SIZE_FILESYS;
Pool2.size = POOL_SIZE_FILESYS; Pool2.size = POOL_SIZE_FILESYS;
GxStrg_SetConfigEx(1, FILE_CFG_BUF, (UINT32)&Pool2); GxStrg_SetConfigEx(STRG_ID_EMMC, 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;
GxStrg_SetConfigEx(PST_DEV_ID, FILE_CFG_BUF, (UINT32)&Pool3);
#endif
#else #else
Pool.size = POOL_SIZE_FILESYS; Pool.size = POOL_SIZE_FILESYS;
GxStrg_SetConfigEx(0, FILE_CFG_BUF, (UINT32)&Pool); GxStrg_SetConfigEx(STRG_ID_SD, FILE_CFG_BUF, (UINT32)&Pool);
#endif #endif
} }
//#NT#2017/06/02#Nestor Yang -begin
//#NT# Do not link uITRON if not use
//GxStrg_SetConfigEx(0, FILE_CFG_FS_TYPE, m_GxStrgType);
#if !defined(__FREERTOS) #if !defined(__FREERTOS)
GxStrg_SetConfigEx(0, FILE_CFG_FS_TYPE, FileSys_GetOPS_Linux()); //for FILE_CFG_FS_TYPE, DevID is don't care GxStrg_SetConfigEx(STRG_ID_SD, FILE_CFG_FS_TYPE, FileSys_GetOPS_Linux()); //for FILE_CFG_FS_TYPE, DevID is don't care
#else
GxStrg_SetConfigEx(0, FILE_CFG_FS_TYPE, FileSys_GetOPS_uITRON()); #if (FS_MULTI_STRG_FUNC == ENABLE)
#endif GxStrg_SetConfigEx(STRG_ID_EMMC, FILE_CFG_FS_TYPE, FileSys_GetOPS_Linux());
//#NT#2017/06/02#Nestor Yang -end
#if 0
#if (LOGFILE_FUNC==ENABLE)
GxStrg_SetConfigEx(0, FILE_CFG_MAX_OPEN_FILE, 6);
#endif
#if (USERLOG_FUNC == ENABLE)
GxStrg_SetConfigEx(0, FILE_CFG_MAX_OPEN_FILE, 6);
#endif
#if (CURL_FUNC == ENABLE)
GxStrg_SetConfigEx(0, FILE_CFG_MAX_OPEN_FILE, 8);
#endif
#if (IPCAM_FUNC == DISABLE)
GxStrg_SetConfigEx(0, FILE_CFG_MAX_OPEN_FILE, 8);
#endif
#else
GxStrg_SetConfigEx(0, FILE_CFG_MAX_OPEN_FILE, 10);
#endif #endif
GxStrg_SetConfigEx(0, FILE_CFG_SUPPORT_EXFAT, TRUE); #else
GxStrg_SetConfigEx(STRG_ID_SD, FILE_CFG_FS_TYPE, FileSys_GetOPS_uITRON());
#if (FS_MULTI_STRG_FUNC == ENABLE)
GxStrg_SetConfigEx(STRG_ID_EMMC, FILE_CFG_FS_TYPE, FileSys_GetOPS_uITRON());
#endif
#endif
GxStrg_SetConfigEx(STRG_ID_SD, FILE_CFG_MAX_OPEN_FILE, 10);
#if (FS_MULTI_STRG_FUNC == ENABLE)
GxStrg_SetConfigEx(STRG_ID_EMMC, FILE_CFG_MAX_OPEN_FILE, 10);
#endif
GxStrg_SetConfigEx(STRG_ID_SD, FILE_CFG_SUPPORT_EXFAT, TRUE);
g_bSupportExfat = TRUE; g_bSupportExfat = TRUE;
//set the device node of msdc mode for emmc only
#if (defined(_EMBMEM_EMMC_) && !defined(__FREERTOS)) #if (FS_MULTI_STRG_FUNC == ENABLE)
emmc_set_dev_node("/dev/mmcblk2p5"); //This devicde node is related to storate-partition, it is last rootfslX logical partition. Using "cat /proc/nvt_info/emmc" to get. GxStrg_SetConfigEx(STRG_ID_EMMC, FILE_CFG_SUPPORT_EXFAT, FALSE);
#endif #endif
// mount path
#if (defined(_EMBMEM_EMMC_) && !defined(__FREERTOS))
strncpy(mount_path, "/mnt/emmc1", sizeof(mount_path) - 1);
#else
strncpy(mount_path, "/mnt/sd", sizeof(mount_path) - 1); strncpy(mount_path, "/mnt/sd", sizeof(mount_path) - 1);
#endif
mount_path[sizeof(mount_path) - 1] = '\0'; mount_path[sizeof(mount_path) - 1] = '\0';
GxStrg_SetConfigEx(0, FILE_CFG_MOUNT_PATH, (UINT32)mount_path); GxStrg_SetConfigEx(STRG_ID_SD, FILE_CFG_MOUNT_PATH, (UINT32)mount_path);
#if !defined(__FREERTOS) #if !defined(__FREERTOS)
GxStrg_SetConfigEx(0, FILE_CFG_STRG_OBJECT, (UINT32)Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_A)); GxStrg_SetConfigEx(STRG_ID_SD, FILE_CFG_STRG_OBJECT, (UINT32)Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_A));
#endif #endif
@ -385,19 +390,10 @@ void System_OnStrgInit_FS(void)
emmc_set_dev_node("/dev/mmcblk1p1"); /* msdc strg obj */ emmc_set_dev_node("/dev/mmcblk1p1"); /* msdc strg obj */
strncpy(mount_path, "/mnt/sd2", sizeof(mount_path) - 1); strncpy(mount_path, "/mnt/sd2", sizeof(mount_path) - 1);
mount_path[sizeof(mount_path) - 1] = '\0'; mount_path[sizeof(mount_path) - 1] = '\0';
GxStrg_SetConfigEx(1, FILE_CFG_MOUNT_PATH, (UINT32)mount_path); GxStrg_SetConfigEx(STRG_ID_EMMC, FILE_CFG_MOUNT_PATH, (UINT32)mount_path);
GxStrg_SetConfigEx(1, FILE_CFG_STRG_OBJECT, (UINT32)Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_B)); GxStrg_SetConfigEx(STRG_ID_EMMC, FILE_CFG_STRG_OBJECT, (UINT32)Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_B));
#endif #endif
//#NT#2018/12/18#Philex Lin - begin
// unused now
#if 0
// Enable 32MB alignment recording.
GxStrg_SetConfigEx(0, FILE_CFG_ALIGNED_SIZE, 32 * 1024 * 1024);
#endif
//#NT#2018/12/18#Philex Lin - end
#if (LOGFILE_FUNC==ENABLE) #if (LOGFILE_FUNC==ENABLE)
{ {
LOGFILE_CFG cfg = {0}; LOGFILE_CFG cfg = {0};
@ -457,43 +453,31 @@ void System_OnStrgInit_FS(void)
if (m_GxStrgType == FST_FS_TYPE_UITRON) { if (m_GxStrgType == FST_FS_TYPE_UITRON) {
#if (FS_MULTI_STRG_FUNC) #if (FS_MULTI_STRG_FUNC)
/************************************************
* EMMC
************************************************/
GxStrg_Det(1, Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_B));
UINT32 uiDxState = 0; UINT32 uiDxState = 0;
DX_HANDLE pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_B); DX_HANDLE pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_B);
if (Dx_GetState((DX_HANDLE)pStrgDev, STORAGE_STATE_INSERT, &uiDxState) != DX_OK || uiDxState == FALSE) { if (Dx_GetState((DX_HANDLE)pStrgDev, STORAGE_STATE_INSERT, &uiDxState) != DX_OK || uiDxState == FALSE) {
Ux_PostEvent(NVTEVT_STRG_REMOVE, 1, 1); Ux_PostEvent(NVTEVT_STRG_REMOVE, 1, STRG_ID_EMMC);
} else { } else {
Ux_PostEvent(NVTEVT_STRG_INSERT, 1, 1); Ux_PostEvent(NVTEVT_STRG_INSERT, 1, STRG_ID_EMMC);
} }
#endif #endif
} }
#if (USE_DCF == ENABLE) #if (USE_DCF == ENABLE)
{
// init DCF
// CHAR pFolderName[9] = {0}; DCF_SetParm(DCF_PRMID_REMOVE_DUPLICATE_FOLDER, TRUE);
// CHAR pFileName[5] = {0}; DCF_SetParm(DCF_PRMID_REMOVE_DUPLICATE_FILE, TRUE);
// // init DCF FolderID/FileID with RTC data DCF_SetParm(DCF_PRMID_SET_VALID_FILE_FMT, DCF_FILE_TYPE_JPG|DCF_FILE_TYPE_MP4|DCF_FILE_TYPE_MOV);
// struct tm tm_cur = hwclock_get_time(TIME_ID_CURRENT); DCF_SetParm(DCF_PRMID_SET_DEP_FILE_FMT, DCF_FILE_TYPE_JPG|DCF_FILE_TYPE_WAV|DCF_FILE_TYPE_MPO);
// snprintf(pFolderName, sizeof(pFolderName), "%1d%02d%02d", tm_cur.tm_year % 0x0A, tm_cur.tm_mon, tm_cur.tm_mday); DCF_SetDirFreeChars(DCF_DIR_NAME);
// snprintf(pFileName, sizeof(pFileName), "%02d%02d", tm_cur.tm_hour, tm_cur.tm_min); DCF_SetFileFreeChars(DCF_FILE_TYPE_ANYFORMAT, DCF_FILE_NAME);
// //DCF dir-name
// DCF_SetDirFreeChars(pFolderName);
// //DCF file-name
// DCF_SetFileFreeChars(DCF_FILE_TYPE_ANYFORMAT, pFileName);
//
// //DCF format
// DCF_SetParm(DCF_PRMID_SET_VALID_FILE_FMT, DCF_SUPPORT_FORMAT);
// DCF_SetParm(DCF_PRMID_SET_DEP_FILE_FMT, DCF_FILE_TYPE_JPG | DCF_FILE_TYPE_WAV | DCF_FILE_TYPE_MPO);
// //TODO: [DCF] How to add an new format & its ext?
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);
}
#endif #endif
} }
void System_OnStrgInit_FS2(void) void System_OnStrgInit_FS2(void)
@ -559,13 +543,10 @@ static BOOL FileSys_DetBusy(void)
void Card_DetInsert(void) void Card_DetInsert(void)
{ {
#if defined(__FREERTOS)
GxStrg_Det(0, Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_A));
#if (0)//FS_MULTI_STRG_FUNC)
GxStrg_Det(1, Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_B));
#endif
#else
GxStrg_Det(0, 0); GxStrg_Det(0, 0);
#if 0 //FS_MULTI_STRG_FUNC
GxStrg_Det(1, Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_B));
#endif #endif
} }
@ -739,24 +720,94 @@ int System_umount_storage(char *pMountPath)
} }
#endif #endif
const char* System_Get_Strg_Name(UINT32 strg_id)
{
if(strg_id >= STRG_NUM){
DBG_ERR("invalid storage id(%d)!\n", strg_id);
return NULL;
}
return g_strg_mapping_table[strg_id].name;
}
INT32 System_Set_Storage_Act_Drive(char drive)
{
DCF_HANDLE act_handle = -1;
for(int i=0 ; i<STRG_NUM ; i++)
{
if(drive == g_strg_mapping_table[i].drive){
act_handle = g_strg_mapping_table[i].dcf_hdl;
break;
}
}
if(act_handle == -1){
DBG_ERR("invalid drive(%c)\n", drive);
return E_SYS;
}
g_dcf_hdl_act = act_handle;
return E_OK;
}
DCF_HANDLE System_Get_DCF_Handle(void)
{
if(g_dcf_hdl_act == -1){
DBG_WRN("g_dcf_hdl_act is not set\n");
}
return g_dcf_hdl_act;
}
CHAR System_Get_DCF_Disk_Drive(DCF_HANDLE handle)
{
CHAR drive = '\0';
for(int i=0 ; i<STRG_NUM ; i++)
{
if(handle == g_strg_mapping_table[i].dcf_hdl){
drive = g_strg_mapping_table[i].drive;
break;
}
}
if(drive == '\0'){
DBG_ERR("invalid act handle(%d)\n", handle);
}
return drive;
}
INT32 System_OnStrgSetActDrive(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
{
if(paramArray[0] == 0)
System_Set_Storage_Act_Drive('A');
else
System_Set_Storage_Act_Drive('B');
return NVTEVT_CONSUME;
}
INT32 System_OnStrgInsert(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) INT32 System_OnStrgInsert(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
{ {
UINT32 stg_id = paramArray[0]; UINT32 strg_id = paramArray[0];
#if (FSCK_FUNC == ENABLE) #if (FSCK_FUNC == ENABLE)
int ret_val = 0; int ret_val = 0;
char *pMountPath = "/mnt/sd"; char *pMountPath = "/mnt/sd";
#endif #endif
if (m_BootState_Drive[stg_id] != BOOT_CARD_STATE_UNKNOWN) { if (m_BootState_Drive[strg_id] != BOOT_CARD_STATE_UNKNOWN) {
if (stg_id == 0) { if (strg_id == 0) {
#if(IPCAM_FUNC==DISABLE && SDHOTPLUG_FUNCTION == DISABLE) #if(IPCAM_FUNC==DISABLE && SDHOTPLUG_FUNCTION == DISABLE)
System_PowerOff(SYS_POWEROFF_NORMAL); System_PowerOff(SYS_POWEROFF_NORMAL);
#endif #endif
} }
} else { } else {
TM_BOOT_BEGIN("sdio", "mount_fs"); TM_BOOT_BEGIN("sdio", "mount_fs");
m_BootState_Drive[stg_id] = BOOT_CARD_STATE_INSERTED; m_BootState_Drive[strg_id] = BOOT_CARD_STATE_INSERTED;
} }
#if (FSCK_FUNC == ENABLE) #if (FSCK_FUNC == ENABLE)
@ -776,73 +827,81 @@ INT32 System_OnStrgInsert(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
ret_val = System_mount_storage(pMountPath); ret_val = System_mount_storage(pMountPath);
if (ret_val) { if (ret_val) {
GxStrg_SetStrgMountStatus(stg_id, FALSE); GxStrg_SetStrgMountStatus(strg_id, FALSE);
DBG_ERR("mount /mnt/sd failed, ret_val is %d; errno = %d\r\n", ret_val, errno); DBG_ERR("mount /mnt/sd failed, ret_val is %d; errno = %d\r\n", ret_val, errno);
} else { } else {
GxStrg_SetStrgMountStatus(stg_id, TRUE); GxStrg_SetStrgMountStatus(strg_id, TRUE);
} }
//SysMain_system("df"); //only for debug, the "/mnt/sd" path must be existed. //SysMain_system("df"); //only for debug, the "/mnt/sd" path must be existed.
#endif #endif
// linux partition as PStore if(strg_id == STRG_ID_SD){
if (stg_id == PST_DEV_ID) { DX_HANDLE pStrgDev = (DX_HANDLE)sdio_getStorageObject(STRG_OBJ_FAT1);
#if defined(_CPU2_LINUX_) if (GxStrg_OpenDevice(strg_id, pStrgDev) != TRUE) {
if (GxStrg_OpenDevice(stg_id, NULL) != TRUE) { char *pDxName = "unknown";
DBG_ERR("Storage mount pstore fail\r\n"); Dx_GetInfo(pStrgDev, DX_INFO_NAME, &pDxName);
DBG_ERR("Storage mount %s fail\r\n", pDxName);
return NVTEVT_CONSUME;
} }
return NVTEVT_CONSUME;
#else
DBG_FATAL("stg_id cannot be %d.\r\n", PST_DEV_ID);
#endif
} }
else if(strg_id == STRG_ID_EMMC){
DX_HANDLE pStrgDev = (DX_HANDLE)sdio_getStorageObject(STRG_OBJ_FAT1); DX_HANDLE pStrgDev = (DX_HANDLE)emmc_getStorageObject(STRG_OBJ_FAT1);
if (GxStrg_OpenDevice(stg_id, pStrgDev) != TRUE) { if (GxStrg_OpenDevice(strg_id, pStrgDev) != TRUE) {
char *pDxName = "unknown"; char *pDxName = "unknown";
Dx_GetInfo(pStrgDev, DX_INFO_NAME, &pDxName); Dx_GetInfo(pStrgDev, DX_INFO_NAME, &pDxName);
DBG_ERR("Storage mount %s fail\r\n", pDxName); DBG_ERR("Storage mount %s fail\r\n", pDxName);
return NVTEVT_CONSUME; return NVTEVT_CONSUME;
}
} }
#if (USE_DCF == ENABLE) #if (USE_DCF == ENABLE)
{ {
DCF_OPEN_PARM dcfParm = {0}; DCF_OPEN_PARM dcfParm = {0};
// Open DCF
dcfParm.Drive = (stg_id == 0) ? 'A' : 'B'; /*****************************************************************
* drive is pre defined in the mapping table
*****************************************************************/
dcfParm.Drive = g_strg_mapping_table[strg_id].drive;
#if (FS_MULTI_STRG_FUNC) #if (FS_MULTI_STRG_FUNC)
// if (POOL_CNT_DCF_BUFFER !=2) { switch(strg_id)
// DBG_FATAL("POOL_CNT_DCF_BUFFER be 2 for FS_MULTI_STRG_FUNC.\r\n"); {
// } else { case STRG_ID_SD:
switch(stg_id) { dcfParm.WorkbuffAddr = mempool_dcf;
case 0: break;
// dcfParm.WorkbuffAddr = dma_getCacheAddr(OS_GetMempoolAddr(POOL_ID_DCF_BUFFER)); case STRG_ID_EMMC:
dcfParm.WorkbuffAddr = mempool_dcf; dcfParm.WorkbuffAddr = mempool_dcf + POOL_SIZE_DCF_BUFFER;
break; break;
case 1: default:
// dcfParm.WorkbuffAddr = dma_getCacheAddr(OS_GetMempoolAddr(POOL_ID_DCF_BUFFER)) + POOL_SIZE_DCF_BUFFER; DBG_ERR("unknown strg_id=%d\r\n", strg_id);
dcfParm.WorkbuffAddr = mempool_dcf + POOL_SIZE_DCF_BUFFER; dcfParm.WorkbuffAddr = 0;
break; break;
default: }
DBG_ERR("unknown stg_id=%d\r\n", stg_id);
dcfParm.WorkbuffAddr = 0;
break;
}
// }
#else #else
dcfParm.WorkbuffAddr = mempool_dcf;//dma_getCacheAddr(OS_GetMempoolAddr(POOL_ID_DCF_BUFFER)); dcfParm.WorkbuffAddr = mempool_dcf;//dma_getCacheAddr(OS_GetMempoolAddr(POOL_ID_DCF_BUFFER));
#endif #endif
dcfParm.WorkbuffSize = POOL_SIZE_DCF_BUFFER; dcfParm.WorkbuffSize = POOL_SIZE_DCF_BUFFER;
UINT32 handle = DCF_Open(&dcfParm); DCF_HANDLE handle = DCF_Open(&dcfParm);
DBG_DUMP("Handle = %lu, drive = %c\n", handle, dcfParm.Drive); DBG_WRN("DCF_Open(strg id = %lu, name = %s, handle = %lu, drive = %c)\n", strg_id, System_Get_Strg_Name(strg_id), handle, dcfParm.Drive);
// DCF_ScanObj(); /*****************************************************************
* update strg mapping table
*****************************************************************/
g_strg_mapping_table[strg_id].dcf_hdl = handle;
/*****************************************************************
* init dcf act handle with sd card
*****************************************************************/
if(strg_id == STRG_ID_SD){
System_Set_Storage_Act_Drive(g_strg_mapping_table[strg_id].drive);
}
} }
#endif #endif
if(stg_id == 0){
if (GxStrg_GetDeviceCtrl(stg_id, CARD_READONLY)) { if(strg_id == STRG_ID_SD){
if (GxStrg_GetDeviceCtrl(strg_id, CARD_READONLY)) {
System_SetState(SYS_STATE_CARD, CARD_LOCKED); System_SetState(SYS_STATE_CARD, CARD_LOCKED);
DBG_IND("Card Locked\r\n"); DBG_IND("Card Locked\r\n");
} else { } else {
@ -850,15 +909,24 @@ INT32 System_OnStrgInsert(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
DBG_IND("Card inserted\r\n"); DBG_IND("Card inserted\r\n");
} }
} }
/************************************************
* EMMC is non-removable and only scan once
************************************************/
else if(strg_id == STRG_ID_EMMC){
DCF_HANDLE handle = g_strg_mapping_table[strg_id].dcf_hdl;
DBG_WRN("DCF_ScanObjEx(strg id = %lu, name = %s, dcf handle = %d)\n", strg_id, System_Get_Strg_Name(strg_id), handle);
DCF_ScanObjEx(handle);
}
return NVTEVT_CONSUME; return NVTEVT_CONSUME;
} }
INT32 System_OnStrgRemove(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) INT32 System_OnStrgRemove(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
{ {
UINT32 stg_id = paramArray[0]; UINT32 strg_id = paramArray[0];
if (m_BootState_Drive[stg_id] != BOOT_CARD_STATE_UNKNOWN) { if (m_BootState_Drive[strg_id] != BOOT_CARD_STATE_UNKNOWN) {
if (stg_id == 0) { if (strg_id == 0) {
#if (LOGFILE_FUNC==ENABLE) #if (LOGFILE_FUNC==ENABLE)
#if HUNTING_CAMERA_MCU == ENABLE #if HUNTING_CAMERA_MCU == ENABLE
UIMenuStoreInfo *puiPara = sf_ui_para_get(); UIMenuStoreInfo *puiPara = sf_ui_para_get();
@ -880,22 +948,25 @@ INT32 System_OnStrgRemove(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
#endif #endif
#if (USE_DCF == ENABLE) #if (USE_DCF == ENABLE)
//Fix the error "DCF_GetInfoByHandle() Dcf Handle 0 Data may be overwritted" when card plug out/in //Fix the error "DCF_GetInfoByHandle() Dcf Handle 0 Data may be overwritted" when card plug out/in
DCF_Close(0);
DCF_HANDLE handle = g_strg_mapping_table[strg_id].dcf_hdl;
DBG_WRN("DCF_Close(strg id = %lu, name = %s, handle = %d)\n", strg_id, System_Get_Strg_Name(strg_id), handle);
DCF_Close(handle);
#endif #endif
System_SetState(SYS_STATE_CARD, CARD_REMOVED); System_SetState(SYS_STATE_CARD, CARD_REMOVED);
GxStrg_CloseDevice(stg_id); GxStrg_CloseDevice(strg_id);
#if(IPCAM_FUNC==DISABLE && SDHOTPLUG_FUNCTION == DISABLE) #if(IPCAM_FUNC==DISABLE && SDHOTPLUG_FUNCTION == DISABLE)
System_PowerOff(SYS_POWEROFF_NORMAL); System_PowerOff(SYS_POWEROFF_NORMAL);
#endif #endif
} }
} else { } else {
TM_BOOT_BEGIN("sdio", "mount_fs"); TM_BOOT_BEGIN("sdio", "mount_fs");
m_BootState_Drive[stg_id] = BOOT_CARD_STATE_REMOVED; m_BootState_Drive[strg_id] = BOOT_CARD_STATE_REMOVED;
#if (FS_SWITCH_STRG_FUNC == ENABLE) #if (FS_SWITCH_STRG_FUNC == ENABLE)
if (stg_id==0) { if (strg_id==0) {
DX_HANDLE pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT|FS_DX_TYPE_DRIVE_B); DX_HANDLE pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT|FS_DX_TYPE_DRIVE_B);
if (GxStrg_OpenDevice(stg_id, pStrgDev)!= TRUE) { if (GxStrg_OpenDevice(strg_id, pStrgDev)!= TRUE) {
char* pDxName="unknown"; char* pDxName="unknown";
Dx_GetInfo(pStrgDev, DX_INFO_NAME,&pDxName); Dx_GetInfo(pStrgDev, DX_INFO_NAME,&pDxName);
DBG_ERR("Storage mount %s fail\r\n",pDxName); DBG_ERR("Storage mount %s fail\r\n",pDxName);
@ -907,12 +978,12 @@ INT32 System_OnStrgRemove(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
#else #else
// boot without card, send attach to continue UI flow. // boot without card, send attach to continue UI flow.
// because of UserWaitEvent(NVTEVT_STRG_ATTACH, &paramNum, paramArray); // because of UserWaitEvent(NVTEVT_STRG_ATTACH, &paramNum, paramArray);
Ux_PostEvent(NVTEVT_STRG_ATTACH, 2, stg_id, 0xFF); Ux_PostEvent(NVTEVT_STRG_ATTACH, 2, strg_id, 0xFF);
#endif #endif
} }
DX_HANDLE pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT | m_FsDxTypeMap[stg_id]); DX_HANDLE pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT | m_FsDxTypeMap[strg_id]);
if (GxStrg_CloseDevice(stg_id) != TRUE) { if (GxStrg_CloseDevice(strg_id) != TRUE) {
char *pDxName = "unknown"; char *pDxName = "unknown";
Dx_GetInfo(pStrgDev, DX_INFO_NAME, &pDxName); Dx_GetInfo(pStrgDev, DX_INFO_NAME, &pDxName);
DBG_ERR("Storage mount %s fail\r\n", pDxName); DBG_ERR("Storage mount %s fail\r\n", pDxName);
@ -977,7 +1048,7 @@ INT32 System_OnStrgAttach(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
#endif #endif
} }
DBG_WRN("stg_id = %lu\n", paramArray[0]); DBG_WRN("strg_id = %lu result = %d\n", paramArray[0], result);
switch (result) { switch (result) {
case FST_STA_OK: case FST_STA_OK:
@ -989,31 +1060,35 @@ INT32 System_OnStrgAttach(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
} }
} }
//#if (USE_DCF == ENABLE) #if (USE_DCF == ENABLE)
// if (!UI_GetData(FL_IsCopyToCarding)) {
DBG_DUMP("DCF scan\n"); DCF_HANDLE handle = g_strg_mapping_table[strg_id].dcf_hdl;
DCF_ScanObjEx(0); /* sd card: strg_id = 0, dcf handle = 1 */ DBG_WRN("DCF_ScanObjEx(strg id = %lu, name = %s, dcf handle = %d)\n", strg_id, System_Get_Strg_Name(strg_id), handle);
DCF_ScanObjEx(1); DCF_ScanObjEx(handle);
// }
//#endif #endif
//FileSys_GetDiskInfo(FST_INFO_DISK_SIZE); //FileSys_GetDiskInfo(FST_INFO_DISK_SIZE);
System_SetState(SYS_STATE_FS, FS_INIT_OK); System_SetState(SYS_STATE_FS, FS_INIT_OK);
#if HUNTING_CAMERA_MCU == ENABLE #if HUNTING_CAMERA_MCU == ENABLE
INT32 uiStatus = 0; INT32 uiStatus = 0;
UINT8 ucAttrib = 0; UINT8 ucAttrib = 0;
uiStatus = FileSys_GetAttrib(PHOTO_THUMB_PATH, &ucAttrib); char tmp[128] = {'\0'};
snprintf(tmp, sizeof(tmp), "%c%s", System_Get_DCF_Disk_Drive(handle), PHOTO_THUMB_PATH); /* DCF 8.3 naming rule */
uiStatus = FileSys_GetAttrib(tmp, &ucAttrib);
if (uiStatus == FST_STA_OK) { if (uiStatus == FST_STA_OK) {
if(!(ucAttrib&FST_ATTRIB_HIDDEN)){ if(!(ucAttrib&FST_ATTRIB_HIDDEN)){
#if SF_IQ_TEST != ENABLE #if SF_IQ_TEST != ENABLE
FileSys_SetAttrib(PHOTO_THUMB_PATH, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE); FileSys_SetAttrib(tmp, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE);
#endif #endif
} }
} }
else { else {
FileSys_MakeDir(PHOTO_THUMB_PATH); FileSys_MakeDir(tmp);
#if SF_IQ_TEST != ENABLE #if SF_IQ_TEST != ENABLE
FileSys_SetAttrib(PHOTO_THUMB_PATH, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE); FileSys_SetAttrib(tmp, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE);
#endif #endif
} }
#if HUNTING_CAMERA_MCU == ENABLE #if HUNTING_CAMERA_MCU == ENABLE
@ -1131,9 +1206,9 @@ INT32 System_OnStrgAttach(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
INT32 System_OnStrgDetach(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray) INT32 System_OnStrgDetach(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
{ {
if (m_GxStrgType == FST_FS_TYPE_LINUX) { if (m_GxStrgType == FST_FS_TYPE_LINUX) {
UINT32 stg_id = paramArray[0]; UINT32 strg_id = paramArray[0];
if (stg_id != 0) { //not sd-1 if (strg_id != 0) { //not sd-1
return NVTEVT_CONSUME; return NVTEVT_CONSUME;
} }
} }

View File

@ -58,6 +58,8 @@ static UINT32 g_FileSerialNum = 0;
static BOOL g_bAllowRawEnc = TRUE; static BOOL g_bAllowRawEnc = TRUE;
static UINT32 raw_enc_path = 0; static UINT32 raw_enc_path = 0;
extern DCF_HANDLE System_Get_DCF_Handle(void);
extern CHAR System_Get_DCF_Disk_Drive(DCF_HANDLE handle);
/********************************************************************************** /**********************************************************************************
* independent thumbnail * independent thumbnail
*********************************************************************************/ *********************************************************************************/
@ -833,7 +835,7 @@ static void MovieExe_WifiCB(HD_VIDEO_FRAME *pEthcamSrc)
//#if (MOVIE_UVAC_FUNC == DISABLE) //#if (MOVIE_UVAC_FUNC == DISABLE)
//if (System_GetState(SYS_STATE_CURRSUBMODE) != SYS_SUBMODE_WIFI) { //if (System_GetState(SYS_STATE_CURRSUBMODE) != SYS_SUBMODE_WIFI) {
if (ImageApp_MovieMulti_IsStreamRunning(_CFG_STRM_ID_1) == FALSE) { if (ImageApp_MovieMulti_IsStreamRunning(_CFG_STRM_ID_1) == FALSE) {
vos_util_delay_ms(10); vos_util_delay_ms(10);
return; return;
} }
//#endif //#endif
@ -1248,17 +1250,17 @@ static void MovieExe_FileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName)
#endif #endif
#elif USE_DCF #elif USE_DCF
UINT32 dcf_path = 1; /* 0:emmc 1:sd */ UINT32 dcf_handle = (UINT32) System_Get_DCF_Handle();
UINT32 nextFolderID = 0, nextFileID = 0; UINT32 nextFolderID = 0, nextFileID = 0;
if (DCF_GetDBInfoEx(dcf_path, DCF_INFO_IS_9999)) { if (DCF_GetDBInfoEx(dcf_handle, DCF_INFO_IS_9999)) {
DBG_ERR("Exceed max dcf file!\r\n"); DBG_ERR("Exceed max dcf file!\r\n");
pFileName[0] = '\0'; pFileName[0] = '\0';
} else { } else {
DCF_GetNextIDEx(dcf_path, &nextFolderID,&nextFileID); DCF_GetNextIDEx(dcf_handle, &nextFolderID,&nextFileID);
DCF_MakeObjPathEx(dcf_path, nextFolderID, nextFileID, DCF_FILE_TYPE_MP4, pFileName); DCF_MakeObjPathEx(dcf_handle, nextFolderID, nextFileID, DCF_FILE_TYPE_MP4, pFileName);
DCF_AddDBfileEx(dcf_path, pFileName); DCF_AddDBfileEx(dcf_handle, pFileName);
DBG_DUMP("%s added to DCF Path%lu\r\n", pFileName, dcf_path); DBG_DUMP("%s added to DCF Path%lu\r\n", pFileName, dcf_handle);
#if HUNTING_CAMERA_MCU == ENABLE #if HUNTING_CAMERA_MCU == ENABLE
char tmp[NMC_TOTALFILEPATH_MAX_LEN] = {'\0'}; char tmp[NMC_TOTALFILEPATH_MAX_LEN] = {'\0'};
sprintf(tmp, "S%03d%04d.JPG", nextFolderID, nextFileID); sprintf(tmp, "S%03d%04d.JPG", nextFolderID, nextFileID);
@ -1319,14 +1321,14 @@ static void MovieExe_RawEncodeFileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName)
#elif USE_DCF #elif USE_DCF
UINT32 nextFolderID = 0, nextFileID = 0; UINT32 nextFolderID = 0, nextFileID = 0;
UINT32 dcf_path = 1; UINT32 dcf_handle = (UINT32) System_Get_DCF_Handle();
if (DCF_GetDBInfoEx(dcf_path, DCF_INFO_IS_9999)) { if (DCF_GetDBInfoEx(dcf_handle, DCF_INFO_IS_9999)) {
DBG_ERR("Exceed max dcf file!\r\n"); DBG_ERR("Exceed max dcf file!\r\n");
pFileName[0] = '\0'; pFileName[0] = '\0';
} else { } else {
DCF_GetNextIDEx(dcf_path, &nextFolderID,&nextFileID); DCF_GetNextIDEx(dcf_handle, &nextFolderID,&nextFileID);
DCF_MakeObjPathEx(dcf_path, nextFolderID, nextFileID, DCF_FILE_TYPE_JPG, pFileName); DCF_MakeObjPathEx(dcf_handle, nextFolderID, nextFileID, DCF_FILE_TYPE_JPG, pFileName);
} }
#endif #endif
@ -1563,9 +1565,9 @@ static void MovieExe_UserEventCb(UINT32 id, MOVIE_USER_CB_EVENT event_id, UINT32
#if HUNTING_CAMERA_MCU == ENABLE #if HUNTING_CAMERA_MCU == ENABLE
snprintf(tmp, sizeof(tmp), "%s%s", MOVIE_THUMB_PATH, thumb_current_path); /* DCF 8.3 naming rule */ snprintf(tmp, sizeof(tmp), "%c%s%s", System_Get_DCF_Disk_Drive(System_Get_DCF_Handle()), MOVIE_THUMB_PATH, thumb_current_path); /* DCF 8.3 naming rule */
#else #else
snprintf(tmp, sizeof(tmp), "%s%s", MOVIE_THUMB_PATH, (thumb_current_path + (length - 12))); /* DCF 8.3 naming rule */ snprintf(tmp, sizeof(tmp), "%c%s%s", System_Get_DCF_Disk_Drive(System_Get_DCF_Handle()), MOVIE_THUMB_PATH, (thumb_current_path + (length - 12))); /* DCF 8.3 naming rule */
snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG"); snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG");
#endif #endif
@ -1908,7 +1910,16 @@ INT32 MovieExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
DBG_FUNC("\r\n"); DBG_FUNC("\r\n");
FileSys_MakeDir(MOVIE_THUMB_PATH); char thumb_dir[128] = {'\0'};
sprintf(thumb_dir, "%c%s", 'A', MOVIE_THUMB_PATH);
FileSys_MakeDir(thumb_dir);
#if FS_MULTI_STRG_FUNC
sprintf(thumb_dir, "%c%s", 'B', MOVIE_THUMB_PATH);
FileSys_MakeDir(thumb_dir);
#endif
GOIO_Turn_Onoff_IRCUT(1); GOIO_Turn_Onoff_IRCUT(1);
Movie_CommPoolInit(); Movie_CommPoolInit();

View File

@ -52,7 +52,8 @@
#define DZOOM_MAX_STEP 6 //Please setting acording the DZoom table #define DZOOM_MAX_STEP 6 //Please setting acording the DZoom table
BOOL _g_bFirstPhoto = TRUE; BOOL _g_bFirstPhoto = TRUE;
extern DCF_HANDLE System_Get_DCF_Handle(void);
extern CHAR System_Get_DCF_Disk_Drive(DCF_HANDLE handle);
/********************************************************************************** /**********************************************************************************
* independent thumbnail * independent thumbnail
*********************************************************************************/ *********************************************************************************/
@ -2596,10 +2597,23 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
g_photo_ImageRatioSize = IMAGERATIO_SIZE[ImageRatioIdx]; g_photo_ImageRatioSize = IMAGERATIO_SIZE[ImageRatioIdx];
// g_photo_ImageRatioSize = IMAGERATIO_SIZE[4]; // g_photo_ImageRatioSize = IMAGERATIO_SIZE[4];
FileSys_MakeDir(PHOTO_THUMB_PATH); char thumb_dir[128] = {'\0'};
#if SF_IQ_TEST != ENABLE
FileSys_SetAttrib(PHOTO_THUMB_PATH, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE); sprintf(thumb_dir, "%c%s", 'A', PHOTO_THUMB_PATH);
#endif FileSys_MakeDir(thumb_dir);
#if SF_IQ_TEST != ENABLE
FileSys_SetAttrib(thumb_dir, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE);
#endif
#if FS_MULTI_STRG_FUNC
sprintf(thumb_dir, "%c%s", 'B', PHOTO_THUMB_PATH);
FileSys_MakeDir(thumb_dir);
#if SF_IQ_TEST != ENABLE
FileSys_SetAttrib(thumb_dir, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE);
#endif
#endif
GOIO_Turn_Onoff_IRCUT(1); GOIO_Turn_Onoff_IRCUT(1);
//sf_ir_led_set(((2 == puiPara->NightMode) ? 2 : 1),puiPara->FlashLed, puiPara->NightMode,0); //sf_ir_led_set(((2 == puiPara->NightMode) ? 2 : 1),puiPara->FlashLed, puiPara->NightMode,0);
@ -6185,19 +6199,19 @@ INT32 PhotoExe_Preview_SliceEncode(VControl *pCtrl, UINT32 paramNum, UINT32 *par
DBG_ERR("primary buffer overflow during combine jpg!\r\n"); DBG_ERR("primary buffer overflow during combine jpg!\r\n");
} }
UINT32 dcf_path = 1; /* 0:emmc , 1:sd */ UINT32 dcf_handle = (UINT32)System_Get_DCF_Handle();
FstStatus.Status = ImageApp_Photo_WriteCB( FstStatus.Status = ImageApp_Photo_WriteCB(
dst_jpg_file.addr, dst_jpg_file.addr,
dst_jpg_file.size, dst_jpg_file.size,
HD_CODEC_TYPE_JPEG, dcf_path); HD_CODEC_TYPE_JPEG, dcf_handle);
{ {
char* file_path = ImageApp_Photo_GetLastWriteFilePath(); char* file_path = ImageApp_Photo_GetLastWriteFilePath();
char tmp[256] = {'\0'}; char tmp[256] = {'\0'};
UINT32 length = strlen(file_path); UINT32 length = strlen(file_path);
snprintf(tmp, sizeof(tmp), "%s%s", PHOTO_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */ snprintf(tmp, sizeof(tmp), "%c%s%s", System_Get_DCF_Disk_Drive(dcf_handle), PHOTO_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */
snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG"); snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG");
DBG_DUMP("PHOTO THUMB %s\n", tmp); DBG_DUMP("PHOTO THUMB %s\n", tmp);
@ -6783,12 +6797,12 @@ INT32 PhotoExe_Preview_SliceEncode_CB3(void* user_data)
extern INT32 ImageApp_Photo_WriteCB(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId); extern INT32 ImageApp_Photo_WriteCB(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId);
IMG_CAP_FST_INFO FstStatus = {FST_STA_OK}; IMG_CAP_FST_INFO FstStatus = {FST_STA_OK};
UINT32 dcf_path = 1; /* 0:emmc 1:sd */ UINT32 dcf_handle = (UINT32)System_Get_DCF_Handle(); /* 0:emmc 1:sd */
FstStatus.Status = ImageApp_Photo_WriteCB( FstStatus.Status = ImageApp_Photo_WriteCB(
(UINT32)queue_ele_in->jpg_combined_addr, (UINT32)queue_ele_in->jpg_combined_addr,
queue_ele_in->jpg_combined_size, queue_ele_in->jpg_combined_size,
HD_CODEC_TYPE_JPEG, dcf_path); HD_CODEC_TYPE_JPEG, dcf_handle);
{ {
char* file_path = ImageApp_Photo_GetLastWriteFilePath(); char* file_path = ImageApp_Photo_GetLastWriteFilePath();
@ -6803,11 +6817,11 @@ INT32 PhotoExe_Preview_SliceEncode_CB3(void* user_data)
strncpy(number, file_path + length - 8, 4); strncpy(number, file_path + length - 8, 4);
number[4] = '\0'; number[4] = '\0';
snprintf(tmp, sizeof(tmp), "%sW%s%s.JPG", PHOTO_THUMB_PATH, folder, number); /* DCF 8.3 naming rule */ snprintf(tmp, sizeof(tmp), "%c%sW%s%s.JPG", System_Get_DCF_Disk_Drive(dcf_handle), PHOTO_THUMB_PATH, folder, number); /* DCF 8.3 naming rule */
#else #else
snprintf(tmp, sizeof(tmp), "%s%s", PHOTO_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */ snprintf(tmp, sizeof(tmp), "%c%s%s", System_Get_DCF_Disk_Drive(dcf_handle), PHOTO_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */
snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG"); snprintf(tmp + strlen(tmp) - 3, sizeof(tmp), "%s", "JPG");
#endif #endif
DBG_IND("PHOTO THUMB %s\n", tmp); DBG_IND("PHOTO THUMB %s\n", tmp);

View File

@ -150,12 +150,6 @@ ER AppInit_ModeUSBMSDC(void)
//If project doesn't need the MSDC Vendor command, set this callback function as NULL. //If project doesn't need the MSDC Vendor command, set this callback function as NULL.
MSDCInfo.msdc_check_cb = NULL; MSDCInfo.msdc_check_cb = NULL;
MSDCInfo.msdc_vendor_cb = NULL; 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
pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_A); pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_A);
@ -166,10 +160,6 @@ ER AppInit_ModeUSBMSDC(void)
} }
#endif #endif
//#if (FS_MULTI_STRG_FUNC == ENABLE)
// pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_B);
//#endif
MSDCInfo.pStrgHandle[0] = (PSTRG_TAB)Dx_Getcaps(pStrgDev, STORAGE_CAPS_HANDLE, 0); MSDCInfo.pStrgHandle[0] = (PSTRG_TAB)Dx_Getcaps(pStrgDev, STORAGE_CAPS_HANDLE, 0);
if (Dx_GetInfo(pStrgDev, DX_INFO_NAME, &pDxName) != DX_OK) { if (Dx_GetInfo(pStrgDev, DX_INFO_NAME, &pDxName) != DX_OK) {
@ -192,14 +182,6 @@ ER AppInit_ModeUSBMSDC(void)
DBG_DUMP("handle = %lx, open = %lx, pDxName2 ===>%s, type=%lu, status=%lu\r\n", MSDCInfo.pStrgHandle[1], MSDCInfo.pStrgHandle[1]->Open, pDxName2, MSDCInfo.pStrgHandle[1]->uiStrgType, MSDCInfo.pStrgHandle[1]->uiStrgStatus); DBG_DUMP("handle = %lx, open = %lx, pDxName2 ===>%s, type=%lu, status=%lu\r\n", MSDCInfo.pStrgHandle[1], MSDCInfo.pStrgHandle[1]->Open, pDxName2, MSDCInfo.pStrgHandle[1]->uiStrgType, MSDCInfo.pStrgHandle[1]->uiStrgStatus);
#endif #endif
//#if (FS_MULTI_STRG_FUNC == ENABLE)
// MSDCInfo.pStrgHandle[1] = pStrgDev2;
//
// if (Dx_GetInfo(pStrgDev2, DX_INFO_NAME, &pDxName2) != DX_OK) {
// pDxName2 = NULL;
// }
//#endif
#if (FS_MULTI_STRG_FUNC == ENABLE) #if (FS_MULTI_STRG_FUNC == ENABLE)
MSDCInfo.msdc_storage_detCB[0] = (MSDC_StorageDet_CB)DrvCARD_DetStrgCard; MSDCInfo.msdc_storage_detCB[0] = (MSDC_StorageDet_CB)DrvCARD_DetStrgCard;
@ -210,13 +192,6 @@ ER AppInit_ModeUSBMSDC(void)
MSDCInfo.msdc_type[1] = MSDC_STRG; MSDCInfo.msdc_type[1] = MSDC_STRG;
MSDCInfo.LUNs = 2; MSDCInfo.LUNs = 2;
// MSDCInfo.msdc_storage_detCB[0] = NULL;
// MSDCInfo.msdc_strgLock_detCB[0] = NULL;
// MSDCInfo.pStrgHandle[0] = MSDCInfo.pStrgHandle[1];
// MSDCInfo.msdc_type[0] = MSDC_STRG;
// MSDCInfo.LUNs = 1;
#else #else
if (pDxName == NULL || strcmp(pDxName, "Storage_EmbMem5") == 0) { if (pDxName == NULL || strcmp(pDxName, "Storage_EmbMem5") == 0) {
MSDCInfo.msdc_storage_detCB[0] = NULL; MSDCInfo.msdc_storage_detCB[0] = NULL;

View File

@ -33,6 +33,7 @@ typedef enum {
NVTEVT_STRG_ATTACH = 0x11010003, //Param1=storage id, Param2=status NVTEVT_STRG_ATTACH = 0x11010003, //Param1=storage id, Param2=status
NVTEVT_STRG_CHANGE = 0x11010004, //Param1=storage id, if insert / remove occurs, also indicate change flag NVTEVT_STRG_CHANGE = 0x11010004, //Param1=storage id, if insert / remove occurs, also indicate change flag
NVTEVT_STRG_MOUNT_OK = 0x11010005, NVTEVT_STRG_MOUNT_OK = 0x11010005,
NVTEVT_STRG_SET_ACT_DRIVE = 0x11010006,
/* INSERT NEW EVENT HRER */ /* INSERT NEW EVENT HRER */
NVTEVT_STRG_EVT_END = DEV_STRG_EVENT_BASE + 0x1000 - 1, ///< Max value = 0x11010fff NVTEVT_STRG_EVT_END = DEV_STRG_EVENT_BASE + 0x1000 - 1, ///< Max value = 0x11010fff

View File

@ -102,6 +102,11 @@ static lfqueue_t write_queue = {0};
//local variable //local variable
static DCF_HANDLE g_dcf_hdl = 0; static DCF_HANDLE g_dcf_hdl = 0;
#if (FS_MULTI_STRG_FUNC)
static DCF_HANDLE g_dcf_hdl2 = 0;
#endif
static ID MOVIEFAST_FLG_ID = 0; static ID MOVIEFAST_FLG_ID = 0;
static UINT32 g_moviefast_tsk_run = 1; static UINT32 g_moviefast_tsk_run = 1;
static UINT32 g_moviefast_poweroff_tsk_run = 1; static UINT32 g_moviefast_poweroff_tsk_run = 1;
@ -852,6 +857,16 @@ static void MovieFast_OnRecStop(void)
} }
static DCF_HANDLE MovieFast_Get_DCF_Handle(void)
{
#if (FS_MULTI_STRG_FUNC)
/* check free space here */
return g_dcf_hdl2;
#else
return g_dcf_hdl;
#endif
}
static void MovieFast_FileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName) static void MovieFast_FileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName)
{ {
//1. The FileID and DirID is set at booting. //1. The FileID and DirID is set at booting.
@ -863,7 +878,8 @@ static void MovieFast_FileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName)
DBG_ERR("Exceed max dcf file!\r\n"); DBG_ERR("Exceed max dcf file!\r\n");
pFileName[0] = '\0'; pFileName[0] = '\0';
} else { } else {
DCF_GetNextID(&nextFolderID,&nextFileID); DCF_HANDLE handle = MovieFast_Get_DCF_Handle();
DCF_GetNextIDEx(handle, &nextFolderID,&nextFileID);
if(DrvGPIO_GetPhotoMovieModeFromMonitor() == DX_HUNTING_MODE_MOVIE2) if(DrvGPIO_GetPhotoMovieModeFromMonitor() == DX_HUNTING_MODE_MOVIE2)
{ {
Movie2_nextFolderID = nextFolderID; Movie2_nextFolderID = nextFolderID;
@ -900,8 +916,8 @@ static void MovieFast_FileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName)
} }
} }
} }
DCF_MakeObjPath(nextFolderID, nextFileID, DCF_FILE_TYPE_MP4, pFileName); DCF_MakeObjPathEx(handle, nextFolderID, nextFileID, DCF_FILE_TYPE_MP4, pFileName);
DCF_AddDBfile(pFileName); DCF_AddDBfileEx(handle, pFileName);
DBG_DUMP("%s added to DCF\r\n", pFileName); DBG_DUMP("%s added to DCF\r\n", pFileName);
#if HUNTING_CAMERA_MCU == ENABLE #if HUNTING_CAMERA_MCU == ENABLE
char tmp[NMC_TOTALFILEPATH_MAX_LEN] = {'\0'}; char tmp[NMC_TOTALFILEPATH_MAX_LEN] = {'\0'};
@ -1198,6 +1214,26 @@ THREAD_RETTYPE MovieFast_InitFileNamingThread(void *arg)
DCF_SetDirFreeChars(DCF_DIR_NAME); DCF_SetDirFreeChars(DCF_DIR_NAME);
DCF_SetFileFreeChars(DCF_FILE_TYPE_ANYFORMAT, DCF_FILE_NAME); DCF_SetFileFreeChars(DCF_FILE_TYPE_ANYFORMAT, DCF_FILE_NAME);
DCF_ScanObj(); 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_ScanObjEx(g_dcf_hdl2);
}
#endif
#if HUNTING_CAMERA_MCU == ENABLE #if HUNTING_CAMERA_MCU == ENABLE
if(TRUE != sf_is_card_full()) if(TRUE != sf_is_card_full())
#endif #endif
@ -1894,6 +1930,11 @@ static void MovieFast_Close(void)
EXIT: EXIT:
DCF_Close(g_dcf_hdl); DCF_Close(g_dcf_hdl);
#if (FS_MULTI_STRG_FUNC)
DCF_Close(g_dcf_hdl2);
#endif
DCF_UnInstallID(); DCF_UnInstallID();
vos_flag_destroy(MOVIEFAST_FLG_ID); vos_flag_destroy(MOVIEFAST_FLG_ID);

View File

@ -88,7 +88,11 @@ 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 INT32 g_photo_fast_id_mapping[PHOTO_CAP_ID_MAX] = {-1,-1};
static PHOTO_FILENAME_CB *g_fpPhotoFastFileNameCB = NULL; static PHOTO_FILENAME_CB *g_fpPhotoFastFileNameCB = NULL;
static DCF_HANDLE g_dcf_hdl = 0; static DCF_HANDLE g_dcf_hdl = 0;
#if (FS_MULTI_STRG_FUNC)
static DCF_HANDLE g_dcf_hdl2 = 0; static DCF_HANDLE g_dcf_hdl2 = 0;
#endif
static HD_PATH_ID g_video_enc_path[PHOTO_ENC_JPG_TYPE_MAX_ID] = {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 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}; static HD_VIDEOENC_BUFINFO g_enc_buf_info[PHOTO_ENC_JPG_TYPE_MAX_ID] = {0};
@ -737,12 +741,6 @@ INT32 PhotoFast_FileNaming_Open(void)
DBG_WRN("DCF_ScanObjEx emmc handle=%d\n", g_dcf_hdl2); 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); DCF_ScanObjEx(g_dcf_hdl2);
} }
#endif #endif
@ -761,8 +759,10 @@ INT32 PhotoFast_FileNaming_Close(void)
} }
#if (FS_MULTI_STRG_FUNC) #if (FS_MULTI_STRG_FUNC)
DCF_Close(g_dcf_hdl2); if(g_dcf_hdl2 >= 0){
g_dcf_hdl2 = -1; DCF_Close(g_dcf_hdl2);
g_dcf_hdl2 = -1;
}
#endif #endif
DCF_UnInstallID(); DCF_UnInstallID();
@ -881,23 +881,29 @@ void PhotoFast_FileNaming_SetSortBySN(CHAR *pDelimStr, UINT32 nDelimCount, UINT3
DBG_ERR("No set Delim String!!\r\n"); DBG_ERR("No set Delim String!!\r\n");
} }
DCF_HANDLE PhotoFast_Get_DCF_Handle()
{
#if (FS_MULTI_STRG_FUNC)
/* check free space here */
return g_dcf_hdl2;
#else
return g_dcf_hdl;
#endif
}
INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId, char* Path) INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId, char* Path)
{ {
FST_FILE fp; FST_FILE fp;
INT32 rt; INT32 rt;
UINT32 Length; UINT32 Length;
CHAR FilePath[NMC_TOTALFILEPATH_MAX_LEN]; CHAR FilePath[NMC_TOTALFILEPATH_MAX_LEN];
#if FS_MULTI_STRG_FUNC
CHAR FilePath2[NMC_TOTALFILEPATH_MAX_LEN];
#endif
UINT32 fileType; UINT32 fileType;
UINT32 open_flag; UINT32 open_flag;
UINT32 nextFolderID = 0, nextFileID = 0; UINT32 nextFolderID = 0, nextFileID = 0;
DCF_HANDLE handle = PhotoFast_Get_DCF_Handle(); /* handle determines which storage would be written */
if(Path == NULL){ if(Path == NULL){
if (DCF_GetDBInfo(DCF_INFO_IS_9999)) { if (DCF_GetDBInfoEx(handle, DCF_INFO_IS_9999)) {
DBG_ERR("Exceed max dcf file!\r\n"); DBG_ERR("Exceed max dcf file!\r\n");
return FST_STA_NOFREE_SPACE; return FST_STA_NOFREE_SPACE;
} }
@ -908,7 +914,7 @@ INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId,
else{ else{
fileType = DCF_FILE_TYPE_JPG; fileType = DCF_FILE_TYPE_JPG;
} }
DCF_GetNextID(&nextFolderID,&nextFileID); DCF_GetNextIDEx(handle, &nextFolderID,&nextFileID);
if(DrvGPIO_GetPhotoMovieModeFromMonitor() == DX_HUNTING_MODE_MOVIE2) if(DrvGPIO_GetPhotoMovieModeFromMonitor() == DX_HUNTING_MODE_MOVIE2)
{ {
nextFolderID = Movie2_nextFolderID; nextFolderID = Movie2_nextFolderID;
@ -933,8 +939,8 @@ INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId,
} }
} }
} }
DCF_MakeObjPath(nextFolderID, nextFileID, fileType, FilePath); DCF_MakeObjPathEx(handle, nextFolderID, nextFileID, fileType, FilePath);
DCF_AddDBfile(FilePath); DCF_AddDBfileEx(handle, FilePath);
DBG_DUMP("%s added to DCF\r\n", FilePath); DBG_DUMP("%s added to DCF\r\n", FilePath);
} }
@ -1004,30 +1010,6 @@ INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId,
DBG_ERR("FileSys_OpenFile fail\r\n"); DBG_ERR("FileSys_OpenFile fail\r\n");
rt =FST_STA_ERROR; 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; return rt;
} }

View File

@ -4,6 +4,7 @@
#include "hd_common.h" #include "hd_common.h"
#include "UIAppPhoto.h" #include "UIAppPhoto.h"
#include <vf_gfx.h> #include <vf_gfx.h>
#include "DCF.h"
#define FLGPHOTOFAST_CHGMODE 0x00000001 #define FLGPHOTOFAST_CHGMODE 0x00000001
#define FLGPHOTOFAST_SHUTDOWN 0x00000002 #define FLGPHOTOFAST_SHUTDOWN 0x00000002
@ -62,5 +63,6 @@ extern BOOL PhotoFast_SetTriggerFrmCnt(UINT32 cnt); /* trigger vcap frame count
UINT32 PhotoFast_GetTriggerFrmCnt(VOID); UINT32 PhotoFast_GetTriggerFrmCnt(VOID);
extern UINT32 PhotoFast_GetTickBufSize(void); extern UINT32 PhotoFast_GetTickBufSize(void);
ER PhotoFast_Movie_Init(void); ER PhotoFast_Movie_Init(void);
DCF_HANDLE PhotoFast_Get_DCF_Handle(void);
#endif //_UIAPP_PHOTO_H_ #endif //_UIAPP_PHOTO_H_

View File

@ -153,10 +153,10 @@ ER AppInit_ModeUSBMSDC(void)
MSDCInfo.msdc_vendor_cb = NULL; MSDCInfo.msdc_vendor_cb = NULL;
//#NT#2016/12/20#Niven Cho -begin //#NT#2016/12/20#Niven Cho -begin
//#NT#MULTI_DRIVE //#NT#MULTI_DRIVE
// #if (FS_MULTI_STRG_FUNC == ENABLE) //#if (FS_MULTI_STRG_FUNC == ENABLE)
// char *pDxName2 = NULL; // char *pDxName2 = NULL;
// DX_HANDLE pStrgDev2 = 0; // DX_HANDLE pStrgDev2 = 0;
// #endif //#endif
pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_A); pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_A);