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:
commit
36e55a3291
|
@ -110,13 +110,13 @@ DX_HANDLE Dx_GetObject(UINT32 DxClassType) // Query device object
|
|||
hDevice = (UINT32)(&gDevEmbMem7);
|
||||
} else if ((DxClassType & DX_TYPE_MASK) == DX_TYPE_EMBMEM8) {
|
||||
hDevice = (UINT32)(&gDevEmbMem8);
|
||||
DBG_ERR("DX_TYPE_EMBMEM8 hDevice = %lx\n", hDevice);
|
||||
DBG_IND("DX_TYPE_EMBMEM8 hDevice = %lx\n", hDevice);
|
||||
}
|
||||
#endif
|
||||
#if !defined(_CARD1_NONE_)
|
||||
if ((DxClassType & DX_TYPE_MASK) == DX_TYPE_CARD1) {
|
||||
hDevice = (UINT32)(&gDevCARD1);
|
||||
DBG_ERR("DX_TYPE_CARD1 hDevice = %lx\n", hDevice);
|
||||
DBG_IND("DX_TYPE_CARD1 hDevice = %lx\n", hDevice);
|
||||
}
|
||||
#endif
|
||||
#if !defined(_CARD3_NONE_)
|
||||
|
|
|
@ -47,6 +47,7 @@ BOOL GxStrg_OpenDevice(UINT32 DevID, DX_HANDLE NewStrgDXH)
|
|||
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) {
|
||||
DBG_WRN("FileSys_Open(DevID %d)\r\n", DevID);
|
||||
return FALSE;
|
||||
|
@ -101,11 +102,14 @@ void GxStrg_SendMountStatus(UINT32 DevId, UINT32 MsgId)
|
|||
|
||||
if (FST_FS_TYPE_LINUX == g_FsType) {
|
||||
if (g_LnxStrgStatus[DevId].IsFormatted) {
|
||||
CHKPNT;
|
||||
MountStatus = FST_STA_OK;
|
||||
} else {
|
||||
CHKPNT;
|
||||
MountStatus = FST_STA_DISK_UNFORMAT;
|
||||
}
|
||||
} else {
|
||||
CHKPNT;
|
||||
MountStatus = MsgId;
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ void GxStrg_Det(UINT32 DevID, DX_HANDLE StrgDXH)
|
|||
(uiStrgCardCurSts != uiStrgCardStatus)) {
|
||||
|
||||
isFormat = g_LnxStrgStatus[DevID].IsFormatted;
|
||||
DBG_DUMP("isFormat = %lu\n", isFormat);
|
||||
DBG_DUMP("DevID=%lu, isFormat = %lu\n", DevID, isFormat);
|
||||
|
||||
switch (uiStrgCardCurSts) {
|
||||
case DET_CARD_INSERTED:
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
struct mntent *ent;
|
||||
|
@ -177,7 +244,7 @@ static INT32 GxStrgLnx_ChkStatus(UINT32 DevId)
|
|||
UINT32 StrgCbVal;
|
||||
BOOL bIsReadOnly = FALSE;
|
||||
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
|
||||
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
|
||||
if(DevId == 0)
|
||||
ret = GxStrgLnx_GetSD1DevByBus(DevPath, sizeof(DevPath));
|
||||
else
|
||||
ret = GxStrgLnx_GetSD2DevByBus(DevPath, sizeof(DevPath));
|
||||
|
||||
if (ret == 0) {
|
||||
//0. if the storage object is set, detect card insert
|
||||
if (g_pCurStrgDXH[DevId]) {
|
||||
|
@ -246,16 +317,16 @@ static INT32 GxStrgLnx_ChkStatus(UINT32 DevId)
|
|||
}
|
||||
|
||||
label_exit:
|
||||
if (StrgCbValPrev != StrgCbVal) {
|
||||
if (StrgCbValPrev[DevId] != StrgCbVal) {
|
||||
g_LnxStrgStatus[DevId].IsInserted = (StrgCbVal == STRG_CB_INSERTED);
|
||||
g_LnxStrgStatus[DevId].IsReadOnly = bIsReadOnly;
|
||||
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_LnxStrgStatus[DevId].IsInserted,
|
||||
g_LnxStrgStatus[DevId].IsReadOnly,
|
||||
g_LnxStrgStatus[DevId].IsFormatted);
|
||||
StrgCbValPrev = StrgCbVal;
|
||||
StrgCbValPrev[DevId] = StrgCbVal;
|
||||
}
|
||||
|
||||
if(g_LnxStrgStatus[DevId].IsInserted && bIsFormatted && !g_LnxStrgStatus[DevId].IsFormatted){
|
||||
|
|
|
@ -926,8 +926,9 @@
|
|||
#define HW_S530 DISABLE
|
||||
#define DCF_DIR_NAME "MEDIA" /* 100MEDIA */
|
||||
#define DCF_FILE_NAME "SYGW" /* SYFW0001.JPG */
|
||||
#define PHOTO_THUMB_PATH "A:\\THUMB\\"
|
||||
#define MOVIE_THUMB_PATH "A:\\THUMB\\"
|
||||
#define PHOTO_THUMB_PATH ":\\THUMB\\"
|
||||
#define MOVIE_THUMB_PATH ":\\THUMB\\"
|
||||
|
||||
#define SF_SD_ROOT "/mnt/sd/"
|
||||
#define SF_SEND_LIST_DIR "/mnt/sd/THUMB/"
|
||||
#define SF_THUMB_SEND_LIST SF_SEND_LIST_DIR"send.list"
|
||||
|
|
|
@ -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[] = {
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
|
@ -751,6 +753,8 @@ EVENT_ENTRY SystemObjCmdMap[] = {
|
|||
{NVTEVT_STRG_REMOVE, System_OnStrgRemove },
|
||||
{NVTEVT_STRG_ATTACH, System_OnStrgAttach },
|
||||
{NVTEVT_STRG_DETACH, System_OnStrgDetach },
|
||||
{NVTEVT_STRG_SET_ACT_DRIVE, System_OnStrgSetActDrive},
|
||||
|
||||
#endif
|
||||
#if(USB_MODE==ENABLE)
|
||||
//Usb device event
|
||||
|
|
|
@ -185,6 +185,23 @@ static BOOL Cmd_user_EventTest(unsigned char argc, char **argv)
|
|||
|
||||
#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_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")
|
||||
#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()
|
||||
|
||||
|
|
|
@ -132,6 +132,26 @@ static FST_FS_TYPE m_GxStrgType = FST_FS_TYPE_UITRON;
|
|||
static void *mp_fwsrv_work_buf = NULL;
|
||||
#endif
|
||||
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
|
||||
|
@ -316,68 +336,53 @@ void System_OnStrgInit_FS(void)
|
|||
#if (FS_MULTI_STRG_FUNC == ENABLE)
|
||||
MEM_RANGE Pool2;
|
||||
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.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;
|
||||
GxStrg_SetConfigEx(PST_DEV_ID, FILE_CFG_BUF, (UINT32)&Pool3);
|
||||
#endif
|
||||
GxStrg_SetConfigEx(STRG_ID_EMMC, FILE_CFG_BUF, (UINT32)&Pool2);
|
||||
#else
|
||||
Pool.size = POOL_SIZE_FILESYS;
|
||||
GxStrg_SetConfigEx(0, FILE_CFG_BUF, (UINT32)&Pool);
|
||||
GxStrg_SetConfigEx(STRG_ID_SD, FILE_CFG_BUF, (UINT32)&Pool);
|
||||
#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)
|
||||
GxStrg_SetConfigEx(0, 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());
|
||||
#endif
|
||||
//#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);
|
||||
GxStrg_SetConfigEx(STRG_ID_SD, FILE_CFG_FS_TYPE, FileSys_GetOPS_Linux()); //for FILE_CFG_FS_TYPE, DevID is don't care
|
||||
|
||||
#if (FS_MULTI_STRG_FUNC == ENABLE)
|
||||
GxStrg_SetConfigEx(STRG_ID_EMMC, FILE_CFG_FS_TYPE, FileSys_GetOPS_Linux());
|
||||
#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;
|
||||
//set the device node of msdc mode for emmc only
|
||||
#if (defined(_EMBMEM_EMMC_) && !defined(__FREERTOS))
|
||||
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.
|
||||
|
||||
#if (FS_MULTI_STRG_FUNC == ENABLE)
|
||||
GxStrg_SetConfigEx(STRG_ID_EMMC, FILE_CFG_SUPPORT_EXFAT, FALSE);
|
||||
#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);
|
||||
#endif
|
||||
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)
|
||||
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
|
||||
|
||||
|
||||
|
@ -385,19 +390,10 @@ void System_OnStrgInit_FS(void)
|
|||
emmc_set_dev_node("/dev/mmcblk1p1"); /* msdc strg obj */
|
||||
strncpy(mount_path, "/mnt/sd2", sizeof(mount_path) - 1);
|
||||
mount_path[sizeof(mount_path) - 1] = '\0';
|
||||
GxStrg_SetConfigEx(1, 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_MOUNT_PATH, (UINT32)mount_path);
|
||||
GxStrg_SetConfigEx(STRG_ID_EMMC, FILE_CFG_STRG_OBJECT, (UINT32)Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_B));
|
||||
#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)
|
||||
{
|
||||
LOGFILE_CFG cfg = {0};
|
||||
|
@ -457,35 +453,23 @@ void System_OnStrgInit_FS(void)
|
|||
|
||||
if (m_GxStrgType == FST_FS_TYPE_UITRON) {
|
||||
#if (FS_MULTI_STRG_FUNC)
|
||||
|
||||
/************************************************
|
||||
* EMMC
|
||||
************************************************/
|
||||
GxStrg_Det(1, Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_B));
|
||||
|
||||
UINT32 uiDxState = 0;
|
||||
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) {
|
||||
Ux_PostEvent(NVTEVT_STRG_REMOVE, 1, 1);
|
||||
Ux_PostEvent(NVTEVT_STRG_REMOVE, 1, STRG_ID_EMMC);
|
||||
} else {
|
||||
Ux_PostEvent(NVTEVT_STRG_INSERT, 1, 1);
|
||||
Ux_PostEvent(NVTEVT_STRG_INSERT, 1, STRG_ID_EMMC);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
#if (USE_DCF == ENABLE)
|
||||
{
|
||||
// init DCF
|
||||
|
||||
// CHAR pFolderName[9] = {0};
|
||||
// CHAR pFileName[5] = {0};
|
||||
// // init DCF FolderID/FileID with RTC data
|
||||
// struct tm tm_cur = hwclock_get_time(TIME_ID_CURRENT);
|
||||
// snprintf(pFolderName, sizeof(pFolderName), "%1d%02d%02d", tm_cur.tm_year % 0x0A, tm_cur.tm_mon, tm_cur.tm_mday);
|
||||
// snprintf(pFileName, sizeof(pFileName), "%02d%02d", tm_cur.tm_hour, tm_cur.tm_min);
|
||||
// //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);
|
||||
|
@ -493,7 +477,7 @@ void System_OnStrgInit_FS(void)
|
|||
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
|
||||
}
|
||||
void System_OnStrgInit_FS2(void)
|
||||
|
@ -559,13 +543,10 @@ static BOOL FileSys_DetBusy(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);
|
||||
|
||||
#if 0 //FS_MULTI_STRG_FUNC
|
||||
GxStrg_Det(1, Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_B));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -739,24 +720,94 @@ int System_umount_storage(char *pMountPath)
|
|||
}
|
||||
#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)
|
||||
{
|
||||
UINT32 stg_id = paramArray[0];
|
||||
UINT32 strg_id = paramArray[0];
|
||||
#if (FSCK_FUNC == ENABLE)
|
||||
int ret_val = 0;
|
||||
char *pMountPath = "/mnt/sd";
|
||||
#endif
|
||||
|
||||
if (m_BootState_Drive[stg_id] != BOOT_CARD_STATE_UNKNOWN) {
|
||||
if (stg_id == 0) {
|
||||
if (m_BootState_Drive[strg_id] != BOOT_CARD_STATE_UNKNOWN) {
|
||||
if (strg_id == 0) {
|
||||
#if(IPCAM_FUNC==DISABLE && SDHOTPLUG_FUNCTION == DISABLE)
|
||||
System_PowerOff(SYS_POWEROFF_NORMAL);
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
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)
|
||||
|
@ -776,73 +827,81 @@ INT32 System_OnStrgInsert(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
|
|||
|
||||
ret_val = System_mount_storage(pMountPath);
|
||||
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);
|
||||
} else {
|
||||
GxStrg_SetStrgMountStatus(stg_id, TRUE);
|
||||
GxStrg_SetStrgMountStatus(strg_id, TRUE);
|
||||
}
|
||||
//SysMain_system("df"); //only for debug, the "/mnt/sd" path must be existed.
|
||||
#endif
|
||||
|
||||
// linux partition as PStore
|
||||
if (stg_id == PST_DEV_ID) {
|
||||
#if defined(_CPU2_LINUX_)
|
||||
if (GxStrg_OpenDevice(stg_id, NULL) != TRUE) {
|
||||
DBG_ERR("Storage mount pstore fail\r\n");
|
||||
}
|
||||
return NVTEVT_CONSUME;
|
||||
#else
|
||||
DBG_FATAL("stg_id cannot be %d.\r\n", PST_DEV_ID);
|
||||
#endif
|
||||
}
|
||||
|
||||
if(strg_id == STRG_ID_SD){
|
||||
DX_HANDLE pStrgDev = (DX_HANDLE)sdio_getStorageObject(STRG_OBJ_FAT1);
|
||||
if (GxStrg_OpenDevice(stg_id, pStrgDev) != TRUE) {
|
||||
if (GxStrg_OpenDevice(strg_id, pStrgDev) != TRUE) {
|
||||
char *pDxName = "unknown";
|
||||
Dx_GetInfo(pStrgDev, DX_INFO_NAME, &pDxName);
|
||||
DBG_ERR("Storage mount %s fail\r\n", pDxName);
|
||||
return NVTEVT_CONSUME;
|
||||
}
|
||||
}
|
||||
else if(strg_id == STRG_ID_EMMC){
|
||||
DX_HANDLE pStrgDev = (DX_HANDLE)emmc_getStorageObject(STRG_OBJ_FAT1);
|
||||
if (GxStrg_OpenDevice(strg_id, pStrgDev) != TRUE) {
|
||||
char *pDxName = "unknown";
|
||||
Dx_GetInfo(pStrgDev, DX_INFO_NAME, &pDxName);
|
||||
DBG_ERR("Storage mount %s fail\r\n", pDxName);
|
||||
return NVTEVT_CONSUME;
|
||||
}
|
||||
}
|
||||
|
||||
#if (USE_DCF == ENABLE)
|
||||
{
|
||||
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 (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));
|
||||
switch(strg_id)
|
||||
{
|
||||
case STRG_ID_SD:
|
||||
dcfParm.WorkbuffAddr = mempool_dcf;
|
||||
break;
|
||||
case 1:
|
||||
// dcfParm.WorkbuffAddr = dma_getCacheAddr(OS_GetMempoolAddr(POOL_ID_DCF_BUFFER)) + POOL_SIZE_DCF_BUFFER;
|
||||
case STRG_ID_EMMC:
|
||||
dcfParm.WorkbuffAddr = mempool_dcf + POOL_SIZE_DCF_BUFFER;
|
||||
break;
|
||||
default:
|
||||
DBG_ERR("unknown stg_id=%d\r\n", stg_id);
|
||||
DBG_ERR("unknown strg_id=%d\r\n", strg_id);
|
||||
dcfParm.WorkbuffAddr = 0;
|
||||
break;
|
||||
}
|
||||
// }
|
||||
#else
|
||||
|
||||
dcfParm.WorkbuffAddr = mempool_dcf;//dma_getCacheAddr(OS_GetMempoolAddr(POOL_ID_DCF_BUFFER));
|
||||
#endif
|
||||
|
||||
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);
|
||||
// DCF_ScanObj();
|
||||
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);
|
||||
/*****************************************************************
|
||||
* 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
|
||||
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);
|
||||
DBG_IND("Card Locked\r\n");
|
||||
} else {
|
||||
|
@ -850,15 +909,24 @@ INT32 System_OnStrgInsert(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
|
|||
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;
|
||||
}
|
||||
|
||||
|
||||
INT32 System_OnStrgRemove(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
|
||||
{
|
||||
UINT32 stg_id = paramArray[0];
|
||||
if (m_BootState_Drive[stg_id] != BOOT_CARD_STATE_UNKNOWN) {
|
||||
if (stg_id == 0) {
|
||||
UINT32 strg_id = paramArray[0];
|
||||
if (m_BootState_Drive[strg_id] != BOOT_CARD_STATE_UNKNOWN) {
|
||||
if (strg_id == 0) {
|
||||
#if (LOGFILE_FUNC==ENABLE)
|
||||
#if HUNTING_CAMERA_MCU == ENABLE
|
||||
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||
|
@ -880,22 +948,25 @@ INT32 System_OnStrgRemove(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
|
|||
#endif
|
||||
#if (USE_DCF == ENABLE)
|
||||
//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
|
||||
System_SetState(SYS_STATE_CARD, CARD_REMOVED);
|
||||
|
||||
GxStrg_CloseDevice(stg_id);
|
||||
GxStrg_CloseDevice(strg_id);
|
||||
#if(IPCAM_FUNC==DISABLE && SDHOTPLUG_FUNCTION == DISABLE)
|
||||
System_PowerOff(SYS_POWEROFF_NORMAL);
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
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 (stg_id==0) {
|
||||
if (strg_id==0) {
|
||||
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";
|
||||
Dx_GetInfo(pStrgDev, DX_INFO_NAME,&pDxName);
|
||||
DBG_ERR("Storage mount %s fail\r\n",pDxName);
|
||||
|
@ -907,12 +978,12 @@ INT32 System_OnStrgRemove(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
|
|||
#else
|
||||
// boot without card, send attach to continue UI flow.
|
||||
// because of UserWaitEvent(NVTEVT_STRG_ATTACH, ¶mNum, paramArray);
|
||||
Ux_PostEvent(NVTEVT_STRG_ATTACH, 2, stg_id, 0xFF);
|
||||
Ux_PostEvent(NVTEVT_STRG_ATTACH, 2, strg_id, 0xFF);
|
||||
#endif
|
||||
}
|
||||
|
||||
DX_HANDLE pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT | m_FsDxTypeMap[stg_id]);
|
||||
if (GxStrg_CloseDevice(stg_id) != TRUE) {
|
||||
DX_HANDLE pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT | m_FsDxTypeMap[strg_id]);
|
||||
if (GxStrg_CloseDevice(strg_id) != TRUE) {
|
||||
char *pDxName = "unknown";
|
||||
Dx_GetInfo(pStrgDev, DX_INFO_NAME, &pDxName);
|
||||
DBG_ERR("Storage mount %s fail\r\n", pDxName);
|
||||
|
@ -977,7 +1048,7 @@ INT32 System_OnStrgAttach(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
|
|||
#endif
|
||||
}
|
||||
|
||||
DBG_WRN("stg_id = %lu\n", paramArray[0]);
|
||||
DBG_WRN("strg_id = %lu result = %d\n", paramArray[0], result);
|
||||
|
||||
switch (result) {
|
||||
case FST_STA_OK:
|
||||
|
@ -989,31 +1060,35 @@ INT32 System_OnStrgAttach(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
|
|||
}
|
||||
}
|
||||
|
||||
//#if (USE_DCF == ENABLE)
|
||||
// if (!UI_GetData(FL_IsCopyToCarding)) {
|
||||
DBG_DUMP("DCF scan\n");
|
||||
DCF_ScanObjEx(0); /* sd card: strg_id = 0, dcf handle = 1 */
|
||||
DCF_ScanObjEx(1);
|
||||
// }
|
||||
//#endif
|
||||
#if (USE_DCF == ENABLE)
|
||||
|
||||
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);
|
||||
|
||||
#endif
|
||||
//FileSys_GetDiskInfo(FST_INFO_DISK_SIZE);
|
||||
System_SetState(SYS_STATE_FS, FS_INIT_OK);
|
||||
|
||||
#if HUNTING_CAMERA_MCU == ENABLE
|
||||
INT32 uiStatus = 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(!(ucAttrib&FST_ATTRIB_HIDDEN)){
|
||||
#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
|
||||
}
|
||||
}
|
||||
else {
|
||||
FileSys_MakeDir(PHOTO_THUMB_PATH);
|
||||
FileSys_MakeDir(tmp);
|
||||
#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
|
||||
}
|
||||
#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)
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,6 +58,8 @@ static UINT32 g_FileSerialNum = 0;
|
|||
static BOOL g_bAllowRawEnc = TRUE;
|
||||
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
|
||||
*********************************************************************************/
|
||||
|
@ -1248,17 +1250,17 @@ static void MovieExe_FileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName)
|
|||
#endif
|
||||
#elif USE_DCF
|
||||
|
||||
UINT32 dcf_path = 1; /* 0:emmc 1:sd */
|
||||
UINT32 dcf_handle = (UINT32) System_Get_DCF_Handle();
|
||||
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");
|
||||
pFileName[0] = '\0';
|
||||
} else {
|
||||
DCF_GetNextIDEx(dcf_path, &nextFolderID,&nextFileID);
|
||||
DCF_MakeObjPathEx(dcf_path, nextFolderID, nextFileID, DCF_FILE_TYPE_MP4, pFileName);
|
||||
DCF_AddDBfileEx(dcf_path, pFileName);
|
||||
DBG_DUMP("%s added to DCF Path%lu\r\n", pFileName, dcf_path);
|
||||
DCF_GetNextIDEx(dcf_handle, &nextFolderID,&nextFileID);
|
||||
DCF_MakeObjPathEx(dcf_handle, nextFolderID, nextFileID, DCF_FILE_TYPE_MP4, pFileName);
|
||||
DCF_AddDBfileEx(dcf_handle, pFileName);
|
||||
DBG_DUMP("%s added to DCF Path%lu\r\n", pFileName, dcf_handle);
|
||||
#if HUNTING_CAMERA_MCU == ENABLE
|
||||
char tmp[NMC_TOTALFILEPATH_MAX_LEN] = {'\0'};
|
||||
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
|
||||
|
||||
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");
|
||||
pFileName[0] = '\0';
|
||||
} else {
|
||||
DCF_GetNextIDEx(dcf_path, &nextFolderID,&nextFileID);
|
||||
DCF_MakeObjPathEx(dcf_path, nextFolderID, nextFileID, DCF_FILE_TYPE_JPG, pFileName);
|
||||
DCF_GetNextIDEx(dcf_handle, &nextFolderID,&nextFileID);
|
||||
DCF_MakeObjPathEx(dcf_handle, nextFolderID, nextFileID, DCF_FILE_TYPE_JPG, pFileName);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -1563,9 +1565,9 @@ static void MovieExe_UserEventCb(UINT32 id, MOVIE_USER_CB_EVENT event_id, UINT32
|
|||
|
||||
|
||||
#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
|
||||
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");
|
||||
#endif
|
||||
|
||||
|
@ -1908,7 +1910,16 @@ INT32 MovieExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
|
|||
|
||||
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);
|
||||
|
||||
Movie_CommPoolInit();
|
||||
|
|
|
@ -52,7 +52,8 @@
|
|||
#define DZOOM_MAX_STEP 6 //Please setting acording the DZoom table
|
||||
|
||||
BOOL _g_bFirstPhoto = TRUE;
|
||||
|
||||
extern DCF_HANDLE System_Get_DCF_Handle(void);
|
||||
extern CHAR System_Get_DCF_Disk_Drive(DCF_HANDLE handle);
|
||||
/**********************************************************************************
|
||||
* 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[4];
|
||||
FileSys_MakeDir(PHOTO_THUMB_PATH);
|
||||
#if SF_IQ_TEST != ENABLE
|
||||
FileSys_SetAttrib(PHOTO_THUMB_PATH, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE);
|
||||
#endif
|
||||
char thumb_dir[128] = {'\0'};
|
||||
|
||||
sprintf(thumb_dir, "%c%s", 'A', PHOTO_THUMB_PATH);
|
||||
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);
|
||||
|
||||
//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");
|
||||
}
|
||||
|
||||
UINT32 dcf_path = 1; /* 0:emmc , 1:sd */
|
||||
UINT32 dcf_handle = (UINT32)System_Get_DCF_Handle();
|
||||
|
||||
FstStatus.Status = ImageApp_Photo_WriteCB(
|
||||
dst_jpg_file.addr,
|
||||
dst_jpg_file.size,
|
||||
HD_CODEC_TYPE_JPEG, dcf_path);
|
||||
HD_CODEC_TYPE_JPEG, dcf_handle);
|
||||
|
||||
{
|
||||
char* file_path = ImageApp_Photo_GetLastWriteFilePath();
|
||||
char tmp[256] = {'\0'};
|
||||
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");
|
||||
|
||||
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);
|
||||
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(
|
||||
(UINT32)queue_ele_in->jpg_combined_addr,
|
||||
queue_ele_in->jpg_combined_size,
|
||||
HD_CODEC_TYPE_JPEG, dcf_path);
|
||||
HD_CODEC_TYPE_JPEG, dcf_handle);
|
||||
|
||||
{
|
||||
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);
|
||||
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
|
||||
|
||||
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");
|
||||
#endif
|
||||
DBG_IND("PHOTO THUMB %s\n", tmp);
|
||||
|
|
|
@ -150,12 +150,6 @@ ER AppInit_ModeUSBMSDC(void)
|
|||
//If project doesn't need the MSDC Vendor command, set this callback function as NULL.
|
||||
MSDCInfo.msdc_check_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);
|
||||
|
||||
|
@ -166,10 +160,6 @@ ER AppInit_ModeUSBMSDC(void)
|
|||
}
|
||||
#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);
|
||||
|
||||
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);
|
||||
#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)
|
||||
|
||||
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.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
|
||||
if (pDxName == NULL || strcmp(pDxName, "Storage_EmbMem5") == 0) {
|
||||
MSDCInfo.msdc_storage_detCB[0] = NULL;
|
||||
|
|
|
@ -33,6 +33,7 @@ typedef enum {
|
|||
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_MOUNT_OK = 0x11010005,
|
||||
NVTEVT_STRG_SET_ACT_DRIVE = 0x11010006,
|
||||
/* INSERT NEW EVENT HRER */
|
||||
NVTEVT_STRG_EVT_END = DEV_STRG_EVENT_BASE + 0x1000 - 1, ///< Max value = 0x11010fff
|
||||
|
||||
|
|
|
@ -102,6 +102,11 @@ static lfqueue_t write_queue = {0};
|
|||
|
||||
//local variable
|
||||
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 UINT32 g_moviefast_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)
|
||||
{
|
||||
//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");
|
||||
pFileName[0] = '\0';
|
||||
} else {
|
||||
DCF_GetNextID(&nextFolderID,&nextFileID);
|
||||
DCF_HANDLE handle = MovieFast_Get_DCF_Handle();
|
||||
DCF_GetNextIDEx(handle, &nextFolderID,&nextFileID);
|
||||
if(DrvGPIO_GetPhotoMovieModeFromMonitor() == DX_HUNTING_MODE_MOVIE2)
|
||||
{
|
||||
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_AddDBfile(pFileName);
|
||||
DCF_MakeObjPathEx(handle, nextFolderID, nextFileID, DCF_FILE_TYPE_MP4, pFileName);
|
||||
DCF_AddDBfileEx(handle, pFileName);
|
||||
DBG_DUMP("%s added to DCF\r\n", pFileName);
|
||||
#if HUNTING_CAMERA_MCU == ENABLE
|
||||
char tmp[NMC_TOTALFILEPATH_MAX_LEN] = {'\0'};
|
||||
|
@ -1198,6 +1214,26 @@ THREAD_RETTYPE MovieFast_InitFileNamingThread(void *arg)
|
|||
DCF_SetDirFreeChars(DCF_DIR_NAME);
|
||||
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_ScanObjEx(g_dcf_hdl2);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if HUNTING_CAMERA_MCU == ENABLE
|
||||
if(TRUE != sf_is_card_full())
|
||||
#endif
|
||||
|
@ -1894,6 +1930,11 @@ static void MovieFast_Close(void)
|
|||
EXIT:
|
||||
|
||||
DCF_Close(g_dcf_hdl);
|
||||
|
||||
#if (FS_MULTI_STRG_FUNC)
|
||||
DCF_Close(g_dcf_hdl2);
|
||||
#endif
|
||||
|
||||
DCF_UnInstallID();
|
||||
|
||||
vos_flag_destroy(MOVIEFAST_FLG_ID);
|
||||
|
|
|
@ -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 PHOTO_FILENAME_CB *g_fpPhotoFastFileNameCB = NULL;
|
||||
static DCF_HANDLE g_dcf_hdl = 0;
|
||||
|
||||
#if (FS_MULTI_STRG_FUNC)
|
||||
static DCF_HANDLE g_dcf_hdl2 = 0;
|
||||
#endif
|
||||
|
||||
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};
|
||||
|
@ -737,12 +741,6 @@ INT32 PhotoFast_FileNaming_Open(void)
|
|||
|
||||
|
||||
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
|
||||
|
@ -761,8 +759,10 @@ INT32 PhotoFast_FileNaming_Close(void)
|
|||
}
|
||||
|
||||
#if (FS_MULTI_STRG_FUNC)
|
||||
if(g_dcf_hdl2 >= 0){
|
||||
DCF_Close(g_dcf_hdl2);
|
||||
g_dcf_hdl2 = -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
DCF_UnInstallID();
|
||||
|
@ -881,23 +881,29 @@ void PhotoFast_FileNaming_SetSortBySN(CHAR *pDelimStr, UINT32 nDelimCount, UINT3
|
|||
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)
|
||||
{
|
||||
FST_FILE fp;
|
||||
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;
|
||||
DCF_HANDLE handle = PhotoFast_Get_DCF_Handle(); /* handle determines which storage would be written */
|
||||
|
||||
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");
|
||||
return FST_STA_NOFREE_SPACE;
|
||||
}
|
||||
|
@ -908,7 +914,7 @@ INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId,
|
|||
else{
|
||||
fileType = DCF_FILE_TYPE_JPG;
|
||||
}
|
||||
DCF_GetNextID(&nextFolderID,&nextFileID);
|
||||
DCF_GetNextIDEx(handle, &nextFolderID,&nextFileID);
|
||||
if(DrvGPIO_GetPhotoMovieModeFromMonitor() == DX_HUNTING_MODE_MOVIE2)
|
||||
{
|
||||
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_AddDBfile(FilePath);
|
||||
DCF_MakeObjPathEx(handle, nextFolderID, nextFileID, fileType, FilePath);
|
||||
DCF_AddDBfileEx(handle, 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");
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "hd_common.h"
|
||||
#include "UIAppPhoto.h"
|
||||
#include <vf_gfx.h>
|
||||
#include "DCF.h"
|
||||
|
||||
#define FLGPHOTOFAST_CHGMODE 0x00000001
|
||||
#define FLGPHOTOFAST_SHUTDOWN 0x00000002
|
||||
|
@ -62,5 +63,6 @@ extern BOOL PhotoFast_SetTriggerFrmCnt(UINT32 cnt); /* trigger vcap frame count
|
|||
UINT32 PhotoFast_GetTriggerFrmCnt(VOID);
|
||||
extern UINT32 PhotoFast_GetTickBufSize(void);
|
||||
ER PhotoFast_Movie_Init(void);
|
||||
DCF_HANDLE PhotoFast_Get_DCF_Handle(void);
|
||||
|
||||
#endif //_UIAPP_PHOTO_H_
|
||||
|
|
|
@ -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)
|
||||
//#if (FS_MULTI_STRG_FUNC == ENABLE)
|
||||
// char *pDxName2 = NULL;
|
||||
// DX_HANDLE pStrgDev2 = 0;
|
||||
// #endif
|
||||
//#endif
|
||||
|
||||
pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT | FS_DX_TYPE_DRIVE_A);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user