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);
|
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_)
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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){
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
@ -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, ¶mNum, paramArray);
|
// 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
|
#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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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_
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user