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

This commit is contained in:
xiehongyan 2023-12-28 15:44:12 +08:00
commit 7d3e70dd47
27 changed files with 2789 additions and 175 deletions

View File

@ -118,6 +118,7 @@ SRC = \
./SrcCode/System/SysAudio_Exe.c \ ./SrcCode/System/SysAudio_Exe.c \
./SrcCode/System/SysStrg_CB.c \ ./SrcCode/System/SysStrg_CB.c \
./SrcCode/System/SysStrg_Exe.c \ ./SrcCode/System/SysStrg_Exe.c \
./SrcCode/System/SF_SysStrgMng.c \
./SrcCode/System/SysSensor_Exe.c \ ./SrcCode/System/SysSensor_Exe.c \
./SrcCode/System/SysFW_Upgrade_Strg_Obj.c \ ./SrcCode/System/SysFW_Upgrade_Strg_Obj.c \
./SrcCode/System/SysFW_Upgrade.c \ ./SrcCode/System/SysFW_Upgrade.c \

View File

@ -830,7 +830,7 @@
// 2. enable FS_DX_TYPE_DRIVE_B as DX_TYPE_CARD2 // 2. enable FS_DX_TYPE_DRIVE_B as DX_TYPE_CARD2
// 3. enable FS_MULTI_STRG_FUNC // 3. enable FS_MULTI_STRG_FUNC
// 4. NETWORK = NETWORK_NONE (Both uITRON and eCos) // 4. NETWORK = NETWORK_NONE (Both uITRON and eCos)
#define FS_MULTI_STRG_FUNC DISABLE #define FS_MULTI_STRG_FUNC ENABLE
//MULTI_DRIVE //MULTI_DRIVE
#if defined(_EMBMEM_EMMC_) && (FS_MULTI_STRG_FUNC==DISABLE) #if defined(_EMBMEM_EMMC_) && (FS_MULTI_STRG_FUNC==DISABLE)
#define FS_DX_TYPE_DRIVE_A USER_DX_TYPE_EMBMEM_FAT #define FS_DX_TYPE_DRIVE_A USER_DX_TYPE_EMBMEM_FAT

View File

@ -0,0 +1,326 @@
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/vfs.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <ctype.h>
#include <dirent.h>
#include <memory.h>
#include "DCF.h"
#include "sf_type.h"
#include "sf_log.h"
#include "SF_SysStrgMng.h"
#include <sf_param_common.h>
#include <sf_param_struct.h>
#include <FileSysTsk.h>
typedef struct
{
int event;
int dev_id;
int mounted_status;
}STRG_CB_PARAM;
SF_ST_MMC_DEV *sf_mmc_dev[MMC_DEV_MAX_NUM] = {NULL};
void SF_StrgInit(void)
{
for(int i = 0; i < MMC_DEV_MAX_NUM; i++)
{
sf_mmc_dev[i] = (SF_ST_MMC_DEV *)malloc(sizeof(SF_ST_MMC_DEV));
if(sf_mmc_dev[i] == NULL) {
// 处理内存分配失败的情况
}
sf_mmc_dev[i]->dcf_handle = -1;
sf_mmc_dev[i]->dev_type = MMC_DEV_NO;
sf_mmc_dev[i]->node = MMC_DEV_NODE_STATE_NO;
sf_mmc_dev[i]->moumted_state = MMC_DEV_MOUNT_STATE_NO;
sf_mmc_dev[i]->space_state = MMC_DEV_SPACE_STATE_NO;
sf_mmc_dev[i]->loop_state = MMC_DEV_LOOP_STATE_NO;
}
}
void SF_StrgUnInit(void)
{
for(int i = 0; i < MMC_DEV_MAX_NUM; i++)
{
if(sf_mmc_dev[i] != NULL) {
free(sf_mmc_dev[i]);
sf_mmc_dev[i] = NULL;
}
}
}
void SF_StrgSetDcfHandle(UINT32 strg_id, UINT32 handle)
{
sf_mmc_dev[strg_id]->dcf_handle = handle;
}
static UINT32 SF_StrgSpaceCheckFull(MMC_DEV_TYPE mmc_dev)
{
UINT64 diskFree = 0;
UINT32 ret = 0;
/*check disk free size*/
if(mmc_dev == MMC_DEV_SD)
{
diskFree = FileSys_GetDiskInfoEx('A', FST_INFO_FREE_SPACE);
}
else
{
diskFree = FileSys_GetDiskInfoEx('B', FST_INFO_FREE_SPACE);
}
diskFree = diskFree/1024/1024;
if(diskFree < 30) /* 30MB */
{
ret = 1;
}
else
{
ret = 0;
}
MLOGD("[%s:%d]sd card diskFree=%lluM\n", __FUNCTION__, __LINE__, diskFree);
return ret;
}
static int SF_StrgNodeCheck(const char *devName)
{
int tryCnt = 200;
int ret = access(devName, F_OK);
while (ret != 0 && tryCnt--)
{
usleep(10*1000);
ret = access(devName, F_OK);
}
if (tryCnt < 0)
{
printf("no found %s\n", devName);
return -1;
}
return ret;
}
void SF_StrgRegister(SF_MESSAGE_BUF_S *pMessageBuf)
{
MLOGD("[dev_id:%d, evt:%d]\n",pMessageBuf->arg2, pMessageBuf->arg1);
UIMenuStoreInfo *puiPara = sf_ui_para_get();
if(pMessageBuf->arg2 == MMC_DEV_SD)
{
if(pMessageBuf->arg1 == CMD_SD_STRG_CB_INSERTED)
{
sf_mmc_dev[MMC_DEV_SD]->node = MMC_DEV_NODE_STATE_EXIST;
}
else if(pMessageBuf->arg1 == CMD_SD_STRG_CB_REMOVED)
{
sf_mmc_dev[MMC_DEV_SD]->node = MMC_DEV_NODE_STATE_NO_EXIST;
}
else if(pMessageBuf->arg1 == CMD_SD_STRG_CB_MOUNT_FINISH)
{
sf_mmc_dev[MMC_DEV_SD]->moumted_state = MMC_DEV_MOUNT_STATE_MOUNTED;
}
else if(pMessageBuf->arg1 == CMD_SD_STRG_CB_UNMOUNT_FINISH)
{
sf_mmc_dev[MMC_DEV_SD]->moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED;
}
if(puiPara->SdLoopSwitch == 1)
{
sf_mmc_dev[MMC_DEV_SD]->loop_state = MMC_DEV_LOOP_STATE_ON;
}
else if(puiPara->SdLoopSwitch == 0)
{
sf_mmc_dev[MMC_DEV_SD]->loop_state = MMC_DEV_LOOP_STATE_OFF;
}
}
else if(pMessageBuf->arg2 == MMC_DEV_EMMC)
{
if(SF_StrgNodeCheck(EMMC_DEVICE_NAME) == 0)
{
sf_mmc_dev[MMC_DEV_EMMC]->node = MMC_DEV_NODE_STATE_EXIST;
}
else
{
sf_mmc_dev[MMC_DEV_EMMC]->node = MMC_DEV_NODE_STATE_NO_EXIST;
}
if(pMessageBuf->arg1 == CMD_SD_STRG_CB_MOUNT_FINISH)
{
sf_mmc_dev[MMC_DEV_EMMC]->moumted_state = MMC_DEV_MOUNT_STATE_MOUNTED;
}
else if(pMessageBuf->arg1 == CMD_SD_STRG_CB_UNMOUNT_FINISH)
{
sf_mmc_dev[MMC_DEV_EMMC]->moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED;
}
if(puiPara->SdLoopSwitch == 1)
{
sf_mmc_dev[MMC_DEV_EMMC]->loop_state = MMC_DEV_LOOP_STATE_ON;
}
else if(puiPara->SdLoopSwitch == 0)
{
sf_mmc_dev[MMC_DEV_EMMC]->loop_state = MMC_DEV_LOOP_STATE_OFF;
}
}
for(int i = 0; i < 2; i++)
{
MLOGD("node:%d, mount:%d, space:%d, loop:%d\n",
sf_mmc_dev[i]->node, sf_mmc_dev[i]->moumted_state,
sf_mmc_dev[i]->space_state, sf_mmc_dev[i]->loop_state);
}
}
SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void)
{
MMC_DEV_TYPE workable_dev = MMC_DEV_NO;
//MLOGD("sf mmc check workable dev start!!!\n");
UINT32 isfull = 0;
isfull = SF_StrgSpaceCheckFull(MMC_DEV_EMMC);
if(isfull == 1)
{
sf_mmc_dev[MMC_DEV_EMMC]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH;
}
else if(isfull == 0)
{
sf_mmc_dev[MMC_DEV_EMMC]->space_state = MMC_DEV_SPACE_STATE_ENOUGH;
}
isfull = SF_StrgSpaceCheckFull(MMC_DEV_SD);
if(isfull == 1)
{
sf_mmc_dev[MMC_DEV_SD]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH;
}
else if(isfull == 0)
{
sf_mmc_dev[MMC_DEV_SD]->space_state = MMC_DEV_SPACE_STATE_ENOUGH;
}
if((sf_mmc_dev[MMC_DEV_SD]->node == MMC_DEV_NODE_STATE_NO_EXIST) &&
(sf_mmc_dev[MMC_DEV_EMMC]->node == MMC_DEV_NODE_STATE_NO_EXIST))
{
workable_dev = MMC_DEV_NO;
}
else if(sf_mmc_dev[MMC_DEV_EMMC]->node == MMC_DEV_NODE_STATE_NO_EXIST) //EMMC节点不存在
{
if(sf_mmc_dev[MMC_DEV_SD]->moumted_state == MMC_DEV_MOUNT_STATE_MOUNTED)
{
if(sf_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
{
workable_dev = MMC_DEV_SD;
}
else if(sf_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_NO_ENOUGH)
{
if(sf_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON)
{
workable_dev = MMC_DEV_SD;
}
}
}
}
else if(sf_mmc_dev[MMC_DEV_SD]->node == MMC_DEV_NODE_STATE_NO_EXIST) //SD节点不存在
{
if(sf_mmc_dev[MMC_DEV_EMMC]->moumted_state == MMC_DEV_MOUNT_STATE_MOUNTED)
{
if(sf_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
{
workable_dev = MMC_DEV_EMMC;
}
else if(sf_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_NO_ENOUGH)
{
if(sf_mmc_dev[MMC_DEV_EMMC]->loop_state == MMC_DEV_LOOP_STATE_ON)
{
workable_dev = MMC_DEV_EMMC;
}
}
}
}
else //MMC节点都存在
{
if((sf_mmc_dev[MMC_DEV_SD]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED) &&
(sf_mmc_dev[MMC_DEV_EMMC]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED))
{
workable_dev = MMC_DEV_NO;
}
else if(sf_mmc_dev[MMC_DEV_SD]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED)
{
if(sf_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
{
workable_dev = MMC_DEV_EMMC;
}
else
{
if(sf_mmc_dev[MMC_DEV_EMMC]->loop_state == MMC_DEV_LOOP_STATE_ON)
{
workable_dev = MMC_DEV_EMMC;
}
}
}
else if(sf_mmc_dev[MMC_DEV_EMMC]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED)
{
if(sf_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
{
workable_dev = MMC_DEV_SD;
}
else
{
if(sf_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON)
{
workable_dev = MMC_DEV_SD;
}
}
}
else
{
if(sf_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_ENOUGH &&
sf_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
{
workable_dev = MMC_DEV_EMMC;
}
else if(sf_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
{
workable_dev = MMC_DEV_EMMC;
}
else if(sf_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
{
workable_dev = MMC_DEV_SD;
}
else
{
if(sf_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON)
{
workable_dev = MMC_DEV_SD;
}
}
}
}
//MLOGD("sf mmc check workable dev end, dev_id = %d!!!\n", workable_dev);
for(int i = 0; i < 2; i++)
{
sf_mmc_dev[i]->dev_type = workable_dev;
//MLOGD("node:%d, mount:%d, space:%d, loop:%d\n",
//sf_mmc_dev[i]->node, sf_mmc_dev[i]->moumted_state,
//sf_mmc_dev[i]->space_state, sf_mmc_dev[i]->loop_state);
}
if(workable_dev == MMC_DEV_NO)
{
return NULL;
}
else
{
return sf_mmc_dev[workable_dev];
}
}

View File

@ -0,0 +1,91 @@
/**************************************************************************
*
* Copyright (c) 2015-2021 by WuYuan Technology, Inc.
*
* This software is copyrighted by and is the property of SiFar
* Technology, Inc.. All rights are reserved by SiFar Technology, Inc..
* This software may only be used in accordance with the corresponding
* license agreement. Any unauthorized use, duplication, distribution,
* or disclosure of this software is expressly forbidden.
*
* This Copyright notice MUST not be removed or modified without prior
* written consent of SiFar Technology, Inc..
*
* WuYuan Technology, Inc. reserves the right to modify this software without notice.
*
* Author: Sober
* Ver: 1.0.0 2023.12.23
* Description: Creat
**************************************************************************/
#ifndef _SF_SYS_STRG_MNG_H_
#define _SF_SYS_STRG_MNG_H_
#include "sf_type.h"
#include "sf_param_common.h"
#define MMC_DEV_MAX_NUM (2)
#define SD_NODES_NAME "/dev/mmcblk0"
#define SD_DEVICE_NAME "/dev/mmcblk0p1"
#define SD_MOUNT_ROOT "/mnt/sd"
#define EMMC_NODES_NAME "/dev/mmcblk1"
#define EMMC_DEVICE_NAME "/dev/mmcblk1p1"
#define EMMC_MOUNT_ROOT "/mnt/sd2"
typedef enum
{
MMC_DEV_SD = 0,
MMC_DEV_EMMC = 1,
MMC_DEV_NO = 2,
}MMC_DEV_TYPE;
typedef enum
{
MMC_DEV_NODE_STATE_NO = 0,
MMC_DEV_NODE_STATE_EXIST = 1,
MMC_DEV_NODE_STATE_NO_EXIST = 2,
}MMC_DEV_NODE_STATE;
typedef enum
{
MMC_DEV_MOUNT_STATE_NO = 0,
MMC_DEV_MOUNT_STATE_MOUNTED = 1,
MMC_DEV_MOUNT_STATE_UNMOUNTED = 2,
}MMC_DEV_MOUNT_STATE;
typedef enum
{
MMC_DEV_SPACE_STATE_NO = 0,
MMC_DEV_SPACE_STATE_ENOUGH = 1,
MMC_DEV_SPACE_STATE_NO_ENOUGH = 2,
}MMC_DEV_SPACE_STATE;
typedef enum
{
MMC_DEV_LOOP_STATE_NO = 0,
MMC_DEV_LOOP_STATE_ON = 1,
MMC_DEV_LOOP_STATE_OFF = 2,
}MMC_DEV_LOOP_STATE;
typedef struct
{
MMC_DEV_TYPE dev_type;
MMC_DEV_NODE_STATE node;
MMC_DEV_MOUNT_STATE moumted_state;
MMC_DEV_SPACE_STATE space_state;
MMC_DEV_LOOP_STATE loop_state;
int dcf_handle;
}SF_ST_MMC_DEV;
void SF_StrgInit(void);
void SF_StrgUnInit(void);
void SF_StrgSetDcfHandle(UINT32 strg_id, UINT32 handle);
void SF_StrgRegister(SF_MESSAGE_BUF_S *pMessageBuf);
SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void);
#endif //_SF_SYS_STRG_MNG_H_

View File

@ -42,6 +42,7 @@
#include <sf_message_queue.h> #include <sf_message_queue.h>
#include <sf_param_struct.h> #include <sf_param_struct.h>
#include "sf_sd_common.h" #include "sf_sd_common.h"
#include "SF_SysStrgMng.h"
#endif #endif
void Strg_CB(UINT32 event, UINT32 param1, UINT32 param2); void Strg_CB(UINT32 event, UINT32 param1, UINT32 param2);
@ -53,6 +54,7 @@ void Strg_CB(UINT32 event, UINT32 param1, UINT32 param2)
SF_MESSAGE_BUF_S stMessageBuf = {0}; SF_MESSAGE_BUF_S stMessageBuf = {0};
#endif #endif
DBG_IND("Strg_CB: strg_id = %d, status = %d\n", param1, param2);
switch (event) { switch (event) {
// part-1 // part-1
case SYSTEM_CB_CONFIG: case SYSTEM_CB_CONFIG:
@ -175,6 +177,8 @@ void Strg_CB(UINT32 event, UINT32 param1, UINT32 param2)
stMessageBuf.arg3 = param2; stMessageBuf.arg3 = param2;
stMessageBuf.cmdId = CMD_SD; stMessageBuf.cmdId = CMD_SD;
sf_com_message_send_to_app(&stMessageBuf); sf_com_message_send_to_app(&stMessageBuf);
printf("strg_cb send MOUNT! dev_id = %d\n", param1);
SF_StrgRegister(&stMessageBuf);
} }
#endif #endif

View File

@ -83,6 +83,8 @@
#include "userlog.h" #include "userlog.h"
#endif #endif
//#include "wdt.h" //#include "wdt.h"
#include "SF_SysStrgMng.h"
#if defined(_EMBMEM_SPI_NOR_) #if defined(_EMBMEM_SPI_NOR_)
#define MAX_BLK_PER_SEC 128 #define MAX_BLK_PER_SEC 128
@ -329,6 +331,7 @@ static UINT32 gLogFile_Buff2_Size = sizeof(gLogFile_Buff2);
void System_OnStrgInit_FS(void) void System_OnStrgInit_FS(void)
{ {
CHAR mount_path[KFS_LONGNAME_PATH_MAX_LENG] = {0}; CHAR mount_path[KFS_LONGNAME_PATH_MAX_LENG] = {0};
TM_BOOT_BEGIN("sdio", "init_fs"); TM_BOOT_BEGIN("sdio", "init_fs");
{ {
MEM_RANGE Pool; MEM_RANGE Pool;
@ -346,6 +349,8 @@ void System_OnStrgInit_FS(void)
#endif #endif
} }
SF_StrgInit();// 初始化sf_mmc设备Obj
#if !defined(__FREERTOS) #if !defined(__FREERTOS)
GxStrg_SetConfigEx(STRG_ID_SD, 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
@ -420,7 +425,6 @@ void System_OnStrgInit_FS(void)
cfg.LogBuffSize2 = gLogFile_Buff2_Size; cfg.LogBuffSize2 = gLogFile_Buff2_Size;
#endif #endif
LogFile_Config(&cfg); LogFile_Config(&cfg);
DBG_DUMP("LogFile_Config ...\n");
} }
#endif #endif
@ -526,6 +530,8 @@ void System_OnStrgExit_FS(void)
#endif #endif
#endif #endif
SF_StrgUnInit();// 反初始化sf_mmc设备Obj
// unmount file system // unmount file system
GxStrg_CloseDevice(0); GxStrg_CloseDevice(0);
#if (FS_MULTI_STRG_FUNC) #if (FS_MULTI_STRG_FUNC)
@ -734,7 +740,6 @@ INT32 System_Set_Storage_Act_Drive(char drive)
{ {
DCF_HANDLE act_handle = -1; DCF_HANDLE act_handle = -1;
for(int i=0 ; i<STRG_NUM ; i++) for(int i=0 ; i<STRG_NUM ; i++)
{ {
if(drive == g_strg_mapping_table[i].drive){ if(drive == g_strg_mapping_table[i].drive){
@ -749,17 +754,20 @@ INT32 System_Set_Storage_Act_Drive(char drive)
} }
g_dcf_hdl_act = act_handle; g_dcf_hdl_act = act_handle;
DBG_WRN("DCF_ACT_HANDLE, %d\n", act_handle);
return E_OK; return E_OK;
} }
DCF_HANDLE System_Get_DCF_Handle(void) DCF_HANDLE System_Get_DCF_Handle(void)
{ {
if(g_dcf_hdl_act == -1){ SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev();
DBG_WRN("g_dcf_hdl_act is not set\n"); if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return -1;
} }
DBG_WRN("DCF_GET_HANDLE, %d\n", mmc_dev->dcf_handle);
return g_dcf_hdl_act; return mmc_dev->dcf_handle;
} }
CHAR System_Get_DCF_Disk_Drive(DCF_HANDLE handle) CHAR System_Get_DCF_Disk_Drive(DCF_HANDLE handle)
@ -799,6 +807,8 @@ INT32 System_OnStrgInsert(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
char *pMountPath = "/mnt/sd"; char *pMountPath = "/mnt/sd";
#endif #endif
DBG_DUMP("System_OnStrgInsert: strg_id = %d\n", strg_id);
if (m_BootState_Drive[strg_id] != BOOT_CARD_STATE_UNKNOWN) { if (m_BootState_Drive[strg_id] != BOOT_CARD_STATE_UNKNOWN) {
if (strg_id == 0) { if (strg_id == 0) {
#if(IPCAM_FUNC==DISABLE && SDHOTPLUG_FUNCTION == DISABLE) #if(IPCAM_FUNC==DISABLE && SDHOTPLUG_FUNCTION == DISABLE)
@ -844,7 +854,8 @@ INT32 System_OnStrgInsert(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
return NVTEVT_CONSUME; return NVTEVT_CONSUME;
} }
} }
else if(strg_id == STRG_ID_EMMC){ else if(strg_id == STRG_ID_EMMC)
{
DX_HANDLE pStrgDev = (DX_HANDLE)emmc_getStorageObject(STRG_OBJ_FAT1); DX_HANDLE pStrgDev = (DX_HANDLE)emmc_getStorageObject(STRG_OBJ_FAT1);
if (GxStrg_OpenDevice(strg_id, pStrgDev) != TRUE) { if (GxStrg_OpenDevice(strg_id, pStrgDev) != TRUE) {
char *pDxName = "unknown"; char *pDxName = "unknown";
@ -895,18 +906,24 @@ INT32 System_OnStrgInsert(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
* init dcf act handle with sd card * init dcf act handle with sd card
*****************************************************************/ *****************************************************************/
if(strg_id == STRG_ID_SD){ if(strg_id == STRG_ID_SD){
DBG_WRN("sd act\n");
System_Set_Storage_Act_Drive(g_strg_mapping_table[strg_id].drive); System_Set_Storage_Act_Drive(g_strg_mapping_table[strg_id].drive);
} }
else if(strg_id == STRG_ID_EMMC){
DBG_WRN("emmc act\n");
System_Set_Storage_Act_Drive(g_strg_mapping_table[strg_id].drive);
}
SF_StrgSetDcfHandle(strg_id, g_strg_mapping_table[strg_id].dcf_hdl); //获取mmc设备dcf_handle
} }
#endif #endif
if(strg_id == STRG_ID_SD){ if(strg_id == STRG_ID_SD){
if (GxStrg_GetDeviceCtrl(strg_id, CARD_READONLY)) { 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_WRN("Card Locked\r\n");
} else { } else {
System_SetState(SYS_STATE_CARD, CARD_INSERTED); System_SetState(SYS_STATE_CARD, CARD_INSERTED);
DBG_IND("Card inserted\r\n"); DBG_WRN("Card inserted\r\n");
} }
} }
/************************************************ /************************************************
@ -1034,6 +1051,7 @@ INT32 System_OnStrgAttach(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
////////////////////////////////////////////////// //////////////////////////////////////////////////
#endif #endif
//DBG_IND("System_OnStrgAttach: strg_id = %d\n", strg_id);
if (m_GxStrgType == FST_FS_TYPE_LINUX) { if (m_GxStrgType == FST_FS_TYPE_LINUX) {
//Do Nothing //Do Nothing
} else { //m_GxStrgType == FST_FS_TYPE_UITRON } else { //m_GxStrgType == FST_FS_TYPE_UITRON
@ -1095,10 +1113,12 @@ INT32 System_OnStrgAttach(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
if((CMD_FORMAT_SD_STA != sf_get_card_statu())){ if((CMD_FORMAT_SD_STA != sf_get_card_statu())){
stMessageBuf.arg1 = STRG_CB_MOUNT_FINISH; stMessageBuf.arg1 = STRG_CB_MOUNT_FINISH;
stMessageBuf.arg2 = result; stMessageBuf.arg2 = strg_id;//result;
stMessageBuf.arg3 = FST_STA_OK; stMessageBuf.arg3 = FST_STA_OK;
stMessageBuf.cmdId = CMD_SD; stMessageBuf.cmdId = CMD_SD;
sf_com_message_send_to_app(&stMessageBuf); sf_com_message_send_to_app(&stMessageBuf);
SF_StrgRegister(&stMessageBuf);
printf("System_OnStrgAttach send MOUNT! dev_id = %d\n", strg_id);
Ux_PostEvent(NVTEVT_STRG_MOUNT_OK, 0); Ux_PostEvent(NVTEVT_STRG_MOUNT_OK, 0);
} }
#endif #endif
@ -1140,7 +1160,7 @@ INT32 System_OnStrgAttach(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
logOpenParm.maxFileNum = maxFileNum; logOpenParm.maxFileNum = maxFileNum;
logOpenParm.maxFileSize = maxFileSize; logOpenParm.maxFileSize = maxFileSize;
logOpenParm.isPreAllocAllFiles = FALSE; logOpenParm.isPreAllocAllFiles = TRUE;
#if defined(__FREERTOS) #if defined(__FREERTOS)
logOpenParm.isSaveLastTimeSysErrLog = wdt_getResetNum()>0 ? TRUE : FALSE; logOpenParm.isSaveLastTimeSysErrLog = wdt_getResetNum()>0 ? TRUE : FALSE;
#else //defined(__LINUX_USER__) #else //defined(__LINUX_USER__)
@ -1189,8 +1209,11 @@ INT32 System_OnStrgAttach(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
if((FS_DISK_ERROR == System_GetState(SYS_STATE_FS))){ if((FS_DISK_ERROR == System_GetState(SYS_STATE_FS))){
stMessageBuf.arg1 = CMD_SD_STRG_CB_UNMOUNT_FINISH; stMessageBuf.arg1 = CMD_SD_STRG_CB_UNMOUNT_FINISH;
stMessageBuf.arg2 = strg_id;
stMessageBuf.cmdId = CMD_SD; stMessageBuf.cmdId = CMD_SD;
sf_com_message_send_to_app(&stMessageBuf); sf_com_message_send_to_app(&stMessageBuf);
SF_StrgRegister(&stMessageBuf);
printf("System_OnStrgAttach send UNMOUNT! dev_id = %d\n", strg_id);
} }
#endif #endif
#if (POWERON_FAST_BOOT == ENABLE) #if (POWERON_FAST_BOOT == ENABLE)

File diff suppressed because it is too large Load Diff

View File

@ -26,6 +26,7 @@
#include "UIApp/Network/EthCamAppCmd.h" #include "UIApp/Network/EthCamAppCmd.h"
#if (USE_DCF == ENABLE) #if (USE_DCF == ENABLE)
#include "DCF.h" #include "DCF.h"
#endif #endif
#include "Utility/SwTimer.h" #include "Utility/SwTimer.h"
@ -861,9 +862,103 @@ UINT32 BackgroundFormat(void)
UINT32 BackgroundFormatEmmc(void) UINT32 BackgroundFormatEmmc(void)
{ {
printf(" BackgroundFormatEmmc\n "); int ret;
return TRUE; DBG_FUNC_BEGIN("\r\n");
#if HUNTING_CAMERA_MCU == ENABLE
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FORMAT_START);
//sf_sys_status_led_set(SF_LED_SYS_STATE_EXIT_GO_TO_PIR);
#endif
//DX_HANDLE pStrgDev = Dx_GetObject(DX_CLASS_STORAGE_EXT|DX_TYPE_CARD1);
//UINT32 hStrgObj = Dx_Getcaps(pStrgDev, STORAGE_CAPS_HANDLE, 0);
//ret = FileSys_FormatDisk((HNVT_STRG)hStrgObj, FALSE);
FS_HANDLE pStrgDXH = (FS_HANDLE)Dx_GetObject(DX_CLASS_STORAGE_EXT | DX_TYPE_CARD1);
//FS_HANDLE pStrgDXH = (FS_HANDLE)sdio_getStorageObject(STRG_OBJ_FAT1);
DBG_FUNC("pStrgDXH=0x%08X\r\n",pStrgDXH);
//#NT#2016/05/30#Lincy Lin -begin
//#NT#Support logfile function
#if (LOGFILE_FUNC==ENABLE)
#if HUNTING_CAMERA_MCU == ENABLE
UIMenuStoreInfo *puiPara = sf_ui_para_get();
if (puiPara->DebugMode)
{
LogFile_Suspend();
LogFile_Complete();
} }
#else
LogFile_Suspend();
LogFile_Complete();
#endif
#endif
//#NT#2016/05/30#Lincy Lin -end
ret = FileSys_FormatAndLabel('B', pStrgDXH, FALSE, NULL);
DBG_FUNC("Call FileSys_FormatDisk() ret=%d\r\n", ret);
if (ret == FST_STA_OK) {
// reset file ID (for FileDB)
#if USE_FILEDB
if (UI_GetData(FL_IsUseFileDB)) {
Ux_SendEvent(&UISetupObjCtrl, NVTEVT_FILEID_RESET, 0);
}
#endif
#if (USE_DCF == ENABLE)
//reset next id 100 , 1
DCF_SetNextID(MIN_DCF_DIR_NUM, MIN_DCF_FILE_NUM);
UI_SetData(FL_DCF_DIR_ID, MIN_DCF_DIR_NUM);
UI_SetData(FL_DCF_FILE_ID, MIN_DCF_FILE_NUM);
UI_SetData(FL_IsDCIMReadOnly, FALSE);
#endif
#if (PLAY_MODE==ENABLE)
if (System_GetState(SYS_STATE_CURRMODE) == PRIMARY_MODE_PLAYBACK) {
UIPlay_PlaySingle(PB_SINGLE_CURR);
}
#endif
//#NT#2016/05/30#Lincy Lin -begin
//#NT#Support logfile function
#if (LOGFILE_FUNC==ENABLE)
#if HUNTING_CAMERA_MCU == ENABLE
if (puiPara->DebugMode)
{
LogFile_ReOpen();
}
#else
LogFile_ReOpen();
#endif
#endif
//#NT#2016/05/30#Lincy Lin -end
// vos_util_delay_ms(1000);
SysMain_system("sync");
#if HUNTING_CAMERA_MCU == ENABLE
//vos_util_delay_ms(1000);
// sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FORMAT_SUCCESS);
// if(sf_get_pir_statu_flag()){
// vos_util_delay_ms(3000);
// }
#endif
}
else
{
#if HUNTING_CAMERA_MCU == ENABLE
// sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FORMAT_FAIL);
// if(sf_get_pir_statu_flag()){
// vos_util_delay_ms(3000);
// }
#endif
}
MovieExe_ResetFileSN();
#if HUNTING_CAMERA_MCU == ENABLE
// sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FORMAT_EXIT);
// if(sf_get_pir_statu_flag()){
// vos_util_delay_ms(1000);
// }
sf_set_card_statu(ret);
#endif
DBG_FUNC_END("\r\n");
return (UINT32)ret;
}
UINT32 BackgroundFormatCard(void) UINT32 BackgroundFormatCard(void)
{ {
int ret; int ret;

View File

@ -39,6 +39,8 @@
#if (USE_DCF == ENABLE) #if (USE_DCF == ENABLE)
#include "DCF.h" #include "DCF.h"
#endif #endif
#include "SF_SysStrgMng.h"
#define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER #define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
@ -690,7 +692,7 @@ UINT32 PhotoExe_GetExpectSize_RhoBRCrtl(UINT32 ImgIdx, BOOL bPrimaryOnly)
UINT32 PhotoExe_GetFreePicNum(void) UINT32 PhotoExe_GetFreePicNum(void)
{ {
UINT64 uiFreeSpace; UINT64 uiFreeSpace = 0;
UINT32 uiMaxImageSize; UINT32 uiMaxImageSize;
UINT32 freeImgNum; UINT32 freeImgNum;
// UINT32 reserveSize = 0x80000; // 500KB // UINT32 reserveSize = 0x80000; // 500KB
@ -698,10 +700,24 @@ UINT32 PhotoExe_GetFreePicNum(void)
UINT32 CaptureSize; UINT32 CaptureSize;
UINT32 size; UINT32 size;
SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
#if (FILESIZE_ALIGN_FUNC) #if (FILESIZE_ALIGN_FUNC)
reserveSize += FS_ALIGN_RESERVED_SIZE; reserveSize += FS_ALIGN_RESERVED_SIZE;
#endif #endif
uiFreeSpace = FileSys_GetDiskInfo(FST_INFO_FREE_SPACE); if(mmc_dev->dev_type == MMC_DEV_SD)
{
uiFreeSpace = FileSys_GetDiskInfoEx('A', FST_INFO_FREE_SPACE);
}
else if(mmc_dev->dev_type == MMC_DEV_EMMC)
{
uiFreeSpace = FileSys_GetDiskInfoEx('B', FST_INFO_FREE_SPACE);
}
//DBG_IND("[cap]Free Space = %d KB\r\n", uiFreeSpace / 1024); //DBG_IND("[cap]Free Space = %d KB\r\n", uiFreeSpace / 1024);

View File

@ -37,6 +37,8 @@
#define __DBGLVL__ 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER #define __DBGLVL__ 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
#define __DBGFLT__ "*" //*=All, [mark]=CustomClass #define __DBGFLT__ "*" //*=All, [mark]=CustomClass
#include <kwrap/debug.h> #include <kwrap/debug.h>
#include "SF_SysStrgMng.h"
void UIStorageCheck_AllSize(UINT64 *uiTotal, UINT64 *uiRemain) void UIStorageCheck_AllSize(UINT64 *uiTotal, UINT64 *uiRemain)
{ {
@ -56,6 +58,12 @@ void UIStorageCheck_ResetFileReachMax(void)
//#NT#Add check for folder attribute //#NT#Add check for folder attribute
static BOOL check_CurrDir_writable(void) static BOOL check_CurrDir_writable(void)
{ {
SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
UINT32 useFileDB = 0; UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB); useFileDB = UI_GetData(FL_IsUseFileDB);
@ -66,9 +74,9 @@ static BOOL check_CurrDir_writable(void)
UINT32 CurrDirID; UINT32 CurrDirID;
SDCFDIRINFO dirinfo = {0}; SDCFDIRINFO dirinfo = {0};
CurrDirID = DCF_GetDBInfo(DCF_INFO_CUR_DIR_ID); CurrDirID = DCF_GetDBInfoEx(mmc_dev->dcf_handle, DCF_INFO_CUR_DIR_ID);
if (CurrDirID) { if (CurrDirID) {
if (DCF_GetDirInfo(CurrDirID, &dirinfo)) { if (DCF_GetDirInfoEx(mmc_dev->dcf_handle, CurrDirID, &dirinfo)) {
if (M_IsReadOnly(dirinfo.ucAttrib)) { if (M_IsReadOnly(dirinfo.ucAttrib)) {
DBG_IND("DCF folder %d is READONLY.\r\n", CurrDirID); DBG_IND("DCF folder %d is READONLY.\r\n", CurrDirID);
return FALSE; return FALSE;
@ -90,18 +98,32 @@ static BOOL check_CurrDir_writable(void)
BOOL UIStorageCheck_DCIMWritable(void) BOOL UIStorageCheck_DCIMWritable(void)
{ {
SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
UINT32 useFileDB = 0; UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB); useFileDB = UI_GetData(FL_IsUseFileDB);
if (useFileDB) { if (useFileDB) {
return TRUE; return TRUE;
} else { } else {
char DCIM_DIR[9] = "A:\\DCIM";
INT32 uiStatus = 0; INT32 uiStatus = 0;
UINT8 ucAttrib = 0; UINT8 ucAttrib = 0;
BOOL ret = FALSE; BOOL ret = FALSE;
if(mmc_dev->dev_type == MMC_DEV_SD)
{
uiStatus = FileSys_GetAttrib("A:\\DCIM", &ucAttrib);
}
else
{
uiStatus = FileSys_GetAttrib("B:\\DCIM", &ucAttrib);
}
uiStatus = FileSys_GetAttrib(DCIM_DIR, &ucAttrib);
if (uiStatus == FST_STA_OK) { if (uiStatus == FST_STA_OK) {
if (ucAttrib & FS_ATTRIB_DIRECTORY) { if (ucAttrib & FS_ATTRIB_DIRECTORY) {
if (System_GetState(SYS_STATE_CARD) == CARD_REMOVED) { if (System_GetState(SYS_STATE_CARD) == CARD_REMOVED) {
@ -127,21 +149,8 @@ BOOL UIStorageCheck_DCIMWritable(void)
} }
} }
BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount) static BOOL UIStrgCheckFolderFull(DCF_HANDLE DcfHandle)
{ {
#if (PHOTO_MODE==ENABLE)
UINT32 uiCountTmp = 0;
#endif
UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB);
DBG_IND("UI_StorageCheck: Check item = 0x%x\r\n", uiCheckItem);
switch (uiCheckItem) {
case STORAGE_CHECK_FOLDER_FULL:
if (useFileDB) {
return FALSE;
} else {
#if (USE_DCF == ENABLE) #if (USE_DCF == ENABLE)
BOOL bIsFileReachMax = FALSE; BOOL bIsFileReachMax = FALSE;
UINT32 DCF_DirId = 0, DCF_FileId = 0; UINT32 DCF_DirId = 0, DCF_FileId = 0;
@ -152,14 +161,12 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
return TRUE; return TRUE;
} }
bIsFileReachMax = FALSE; bIsFileReachMax = FALSE;
//#NT#2011/03/28#Lincy Lin -begin
//#NT#fix delete the 9999th file in 999 folder cause capture not save ret = DCF_GetNextIDEx(DcfHandle, &DCF_DirId, &DCF_FileId);
ret = DCF_GetNextID(&DCF_DirId, &DCF_FileId);
if (ret && DCF_DirId == 0 && DCF_FileId == 0) { if (ret && DCF_DirId == 0 && DCF_FileId == 0) {
bIsFileReachMax = TRUE; bIsFileReachMax = TRUE;
DBG_IND("Next dir_id =%d, file_id = %d \r\n", DCF_DirId, DCF_FileId); DBG_IND("Next dir_id =%d, file_id = %d \r\n", DCF_DirId, DCF_FileId);
} else if (ret && DCF_GetDBInfo(DCF_INFO_IS_9999) == TRUE) } else if (ret && DCF_GetDBInfoEx(DcfHandle, DCF_INFO_IS_9999) == TRUE)
//#NT#2011/03/28#Lincy Lin -end
{ {
bIsFileReachMax = TRUE; bIsFileReachMax = TRUE;
} }
@ -168,8 +175,12 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
return FALSE; return FALSE;
#endif #endif
} }
break;
case STORAGE_CHECK_FULL: static BOOL UIStrgCheckFull(UINT32 *pFreeCount)
{
#if (PHOTO_MODE==ENABLE)
UINT32 uiCountTmp = 0;
#endif
#if (PHOTO_MODE==ENABLE) #if (PHOTO_MODE==ENABLE)
uiCountTmp = PhotoExe_GetFreePicNum(); uiCountTmp = PhotoExe_GetFreePicNum();
DBG_IND("uiCountTmp = %d, pFreeCount=%d\r\n",uiCountTmp,pFreeCount); DBG_IND("uiCountTmp = %d, pFreeCount=%d\r\n",uiCountTmp,pFreeCount);
@ -184,18 +195,19 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
#else #else
return FALSE; return FALSE;
#endif #endif
break;
case STORAGE_CHECK_LOCKED:
if (System_GetState(SYS_STATE_CARD) == CARD_LOCKED) {
DBG_ERR("UIStorageCheck: %d Card locked\r\n", System_GetState(SYS_STATE_CARD));
return TRUE;
} else {
return FALSE;
} }
break;
case STORAGE_CHECK_ERROR: static BOOL UIStrgCheckErr(MMC_DEV_TYPE dev_id)
FileSys_WaitFinish(); {
if(dev_id == MMC_DEV_SD)
{
FileSys_WaitFinishEx('A');
}
else if(dev_id == MMC_DEV_EMMC)
{
FileSys_WaitFinishEx('B');
}
if (System_GetState(SYS_STATE_FS) == FS_DISK_ERROR if (System_GetState(SYS_STATE_FS) == FS_DISK_ERROR
|| System_GetState(SYS_STATE_FS) == FS_UNKNOWN_FORMAT || System_GetState(SYS_STATE_FS) == FS_UNKNOWN_FORMAT
|| System_GetState(SYS_STATE_FS) == FS_UNFORMATTED || System_GetState(SYS_STATE_FS) == FS_UNFORMATTED
@ -210,6 +222,43 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
} else { } else {
return FALSE; return FALSE;
} }
}
BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
{
SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB);
DBG_IND("UI_StorageCheck: Check item = 0x%x\r\n", uiCheckItem);
switch (uiCheckItem) {
case STORAGE_CHECK_FOLDER_FULL:
if (useFileDB) {
return FALSE;
} else {
UIStrgCheckFolderFull(mmc_dev->dcf_handle);
}
break;
case STORAGE_CHECK_FULL:
UIStrgCheckFull(pFreeCount);
break;
case STORAGE_CHECK_LOCKED:
if (System_GetState(SYS_STATE_CARD) == CARD_LOCKED) {
DBG_ERR("UIStorageCheck: %d Card locked\r\n", System_GetState(SYS_STATE_CARD));
return TRUE;
} else {
return FALSE;
}
break;
case STORAGE_CHECK_ERROR:
UIStrgCheckErr(mmc_dev->dev_type);
break; break;
case STORAGE_CHECK_DCIM_READONLY: case STORAGE_CHECK_DCIM_READONLY:
if ((UIStorageCheck_DCIMWritable() == FALSE) if ((UIStorageCheck_DCIMWritable() == FALSE)

View File

@ -22,6 +22,7 @@
#include "sf_common.h" #include "sf_common.h"
#if (USE_DCF == ENABLE) #if (USE_DCF == ENABLE)
#include "DCF.h" #include "DCF.h"
#include "SF_SysStrgMng.h"
#endif #endif
#if HUNTING_CAMERA_MCU == ENABLE #if HUNTING_CAMERA_MCU == ENABLE
#include <sf_inc.h> #include <sf_inc.h>
@ -673,6 +674,12 @@ static void update_camera_message(void)
UIMenuStoreInfo *puiPara = sf_ui_para_get(); UIMenuStoreInfo *puiPara = sf_ui_para_get();
// if((puiPara->CamMode == SF_CAM_MODE_PHOTO) || (puiPara->CamMode == SF_CAM_MODE_PHOTO_VIDEO)) // if((puiPara->CamMode == SF_CAM_MODE_PHOTO) || (puiPara->CamMode == SF_CAM_MODE_PHOTO_VIDEO))
SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
}
switch (puiPara->ImgSize) switch (puiPara->ImgSize)
{ {
case PHOTO_SIZE_40M: case PHOTO_SIZE_40M:
@ -719,6 +726,8 @@ static void update_camera_message(void)
default: default:
break; break;
} }
#if 1
if (System_GetState(SYS_STATE_FS) == FS_INIT_OK) if (System_GetState(SYS_STATE_FS) == FS_INIT_OK)
{ {
UINT32 cardStatus = System_GetState(SYS_STATE_CARD); UINT32 cardStatus = System_GetState(SYS_STATE_CARD);
@ -772,6 +781,8 @@ static void update_camera_message(void)
set_warning_label_text(label_6_scr_uiflowphoto); set_warning_label_text(label_6_scr_uiflowphoto);
lv_label_set_text(label_6_scr_uiflowphoto, "No SD Card"); lv_label_set_text(label_6_scr_uiflowphoto, "No SD Card");
} }
#endif
} }
extern int is_menu_screen_luck(void); extern int is_menu_screen_luck(void);

View File

@ -595,7 +595,8 @@ static SINT32 sf_app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf)
UINT32 status; UINT32 status;
SINT16 startup = sf_poweron_type_get(); SINT16 startup = sf_poweron_type_get();
MLOGD("[%d,%s]\n",pMessageBuf->arg1,app_process_SD_getstatusstring(pMessageBuf->arg1)); MLOGD("[dev_id:%d,evt:%s]\n",pMessageBuf->arg2,app_process_SD_getstatusstring(pMessageBuf->arg1));
switch(pMessageBuf->arg1) switch(pMessageBuf->arg1)
{ {
case CMD_SD_STRG_CB_UNKNOWN: case CMD_SD_STRG_CB_UNKNOWN:

View File

@ -1715,6 +1715,7 @@ extern int FileSys_SearchFileRewind(FS_SEARCH_HDL pSearch);
#define FileSys_RegisterCB(parm1) FileSys_RegisterCBEx('A', parm1) #define FileSys_RegisterCB(parm1) FileSys_RegisterCBEx('A', parm1)
#define FileSys_Benchmark(parm1,parm2,parm3) FileSys_BenchmarkEx('A', parm1,parm2,parm3) #define FileSys_Benchmark(parm1,parm2,parm3) FileSys_BenchmarkEx('A', parm1,parm2,parm3)
#define fs_getcwd FileSys_GetCwd #define fs_getcwd FileSys_GetCwd
#define fs_setcwd FileSys_SetCwd #define fs_setcwd FileSys_SetCwd
#define fs_dir_getParent FileSys_GetParentDir #define fs_dir_getParent FileSys_GetParentDir

View File

@ -43,6 +43,7 @@
#include <io/gpio.h> #include <io/gpio.h>
#include "UIInfo/UIInfo.h" #include "UIInfo/UIInfo.h"
#include <FileSysTsk.h> #include <FileSysTsk.h>
#include "sf_sd_common.h"
SF_CALLBACK_SD_CMD g_fpSd_Exist_CB = NULL; SF_CALLBACK_SD_CMD g_fpSd_Exist_CB = NULL;
static int formatSD = CMD_FORMAT_SD_ERR; static int formatSD = CMD_FORMAT_SD_ERR;

View File

@ -948,8 +948,8 @@
#define SF_BASE_VERSION "7MR5RCwDC05" #define SF_BASE_VERSION "7MR5RCwDC05"
#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_SEND_LIST_DIR "/mnt/sd/THUMB" #define SF_SEND_LIST_DIR "/mnt/sd/THUMB"
#define SF_THUMB_SEND_LIST PHOTO_THUMB_PATH"send.list" #define SF_THUMB_SEND_LIST PHOTO_THUMB_PATH"send.list"
#define SF_THUMB_SEND_AUTO PHOTO_THUMB_PATH"auto.list" #define SF_THUMB_SEND_AUTO PHOTO_THUMB_PATH"auto.list"

View File

@ -21,6 +21,7 @@
#if (HUNTING_CAMERA_MODEL == ENABLE) #if (HUNTING_CAMERA_MODEL == ENABLE)
#include "IOCfg.h" #include "IOCfg.h"
#include "sf_sd_common.h"
#define GPIO_CARD_INSERT_LEVEL (FALSE) // low active #define GPIO_CARD_INSERT_LEVEL (FALSE) // low active
#define MAX_OPENED_FILE_NUM 10 #define MAX_OPENED_FILE_NUM 10
@ -105,18 +106,20 @@ static void card_insert_job(void)
// call the function to wait init finish // call the function to wait init finish
FileSys_WaitFinishEx('A'); FileSys_WaitFinishEx('A');
FileSys_SetParamEx('A', FST_PARM_UPDATE_FSINFO , TRUE); FileSys_SetParamEx('A', FST_PARM_UPDATE_FSINFO , TRUE);
SF_RtosStrgRegister(0, ret);
#if HUNTING_CAMERA_MCU == ENABLE #if HUNTING_CAMERA_MCU == ENABLE
if(TRUE == sf_check_card_full()) //if(TRUE == sf_check_card_full())
{ //{
DBG_WRN("ERR card full\r\n"); //DBG_WRN("ERR card full\r\n");
fastboot_set_done(BOOT_INIT_FILESYSOK);
}
else
{
fastboot_set_done(BOOT_INIT_FILESYSOK); fastboot_set_done(BOOT_INIT_FILESYSOK);
//}
//else
//{
// sf_log_confg(); // sf_log_confg();
// sf_log_open(); // sf_log_open();
} //}
#endif #endif
#if FS_MULTI_STRG_FUNC #if FS_MULTI_STRG_FUNC
@ -139,6 +142,7 @@ static void card_insert_job(void)
} }
// call the function to wait init finish // call the function to wait init finish
FileSys_WaitFinishEx('B'); FileSys_WaitFinishEx('B');
SF_RtosStrgRegister(1, ret);
// FileSys_SetParamEx('B', FST_PARM_UPDATE_FSINFO , TRUE); // FileSys_SetParamEx('B', FST_PARM_UPDATE_FSINFO , TRUE);
#endif #endif
@ -159,6 +163,7 @@ static void sys_detect_card_task(void)
#if defined(_EMBMEM_EMMC_) #if defined(_EMBMEM_EMMC_)
THREAD_ENTRY(); THREAD_ENTRY();
SF_RtosStrgInit();
card_insert_job(); card_insert_job();
THREAD_RETURN(0); THREAD_RETURN(0);
@ -191,7 +196,7 @@ static void sys_detect_card_task(void)
vTaskDelay(pdMS_TO_TICKS(1000)); vTaskDelay(pdMS_TO_TICKS(1000));
} }
SF_RtosStrgUnInit();
THREAD_RETURN(0); THREAD_RETURN(0);
#endif #endif
} }

View File

@ -64,6 +64,7 @@
#endif #endif
#include "IOCfg.h" #include "IOCfg.h"
#include <kwrap/cmdsys.h> #include <kwrap/cmdsys.h>
#include "sf_sd_common.h"
/** /**
Flags for control Flags for control
*/ */
@ -859,12 +860,20 @@ static void MovieFast_OnRecStop(void)
static DCF_HANDLE MovieFast_Get_DCF_Handle(void) static DCF_HANDLE MovieFast_Get_DCF_Handle(void)
{ {
#if (FS_MULTI_STRG_FUNC) //#if (FS_MULTI_STRG_FUNC)
/* check free space here */ /* check free space here */
return g_dcf_hdl2; //return g_dcf_hdl2;
#else //#else
return g_dcf_hdl; //return g_dcf_hdl;
#endif //#endif
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return -1;
}
DBG_WRN("photofast DCF_GET_HANDLE, %d\n", mmc_dev->dcf_handle);
return mmc_dev->dcf_handle;
} }
static void MovieFast_FileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName) static void MovieFast_FileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName)
@ -1118,9 +1127,24 @@ static void MovieFast_UserEventCb(UINT32 id, MOVIE_USER_CB_EVENT event_id, UINT3
char tmp[256] = {'\0'}; char tmp[256] = {'\0'};
#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 */ SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
}
else
{
if(mmc_dev->dev_type == MMC_DEV_SD)
{
snprintf(tmp, sizeof(tmp), "%c%s%s", 'A', MOVIE_THUMB_PATH, thumb_current_path); /* DCF 8.3 naming rule */
}
else
{
snprintf(tmp, sizeof(tmp), "%c%s%s", 'B', 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), "%s%s", 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");
@ -1233,6 +1257,8 @@ THREAD_RETTYPE MovieFast_InitFileNamingThread(void *arg)
} }
#endif #endif
SF_RtosStrgSetDcfHandle(MMC_DEV_SD, g_dcf_hdl);
SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl2);
#if HUNTING_CAMERA_MCU == ENABLE #if HUNTING_CAMERA_MCU == ENABLE
if(TRUE != sf_is_card_full()) if(TRUE != sf_is_card_full())

View File

@ -27,6 +27,8 @@
#include "UIApp/AppDisp_PipView.h" #include "UIApp/AppDisp_PipView.h"
#include <vf_gfx.h> #include <vf_gfx.h>
#include "vendor_videocapture.h" #include "vendor_videocapture.h"
#include "sf_sd_common.h"
#define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER #define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
@ -615,17 +617,31 @@ UINT32 PhotoExe_GetExpectSize_RhoBRCrtl(UINT32 ImgIdx, BOOL bPrimaryOnly)
UINT32 PhotoExe_GetFreePicNum(void) UINT32 PhotoExe_GetFreePicNum(void)
{ {
UINT64 uiFreeSpace; UINT64 uiFreeSpace = 0;
UINT32 uiMaxImageSize; UINT32 uiMaxImageSize;
UINT32 freeImgNum; UINT32 freeImgNum;
UINT32 reserveSize = 0x80000; // 500KB UINT32 reserveSize = 0x80000; // 500KB
UINT32 CaptureSize; UINT32 CaptureSize;
UINT32 size; UINT32 size;
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
#if (FILESIZE_ALIGN_FUNC) #if (FILESIZE_ALIGN_FUNC)
reserveSize += FS_ALIGN_RESERVED_SIZE; reserveSize += FS_ALIGN_RESERVED_SIZE;
#endif #endif
uiFreeSpace = FileSys_GetDiskInfo(FST_INFO_FREE_SPACE); if(mmc_dev->dev_type == MMC_DEV_SD)
{
uiFreeSpace = FileSys_GetDiskInfoEx('A', FST_INFO_FREE_SPACE);
}
else if(mmc_dev->dev_type == MMC_DEV_EMMC)
{
uiFreeSpace = FileSys_GetDiskInfoEx('B', FST_INFO_FREE_SPACE);
}
DBG_IND("[cap]Free Space = %d KB\r\n", uiFreeSpace / 1024); DBG_IND("[cap]Free Space = %d KB\r\n", uiFreeSpace / 1024);
@ -659,7 +675,6 @@ UINT32 PhotoExe_GetFreePicNum(void)
return freeImgNum; return freeImgNum;
} }
void PhotoExe_GetDispCord(URECT *dispCord) void PhotoExe_GetDispCord(URECT *dispCord)
{ {
UINT32 ImageRatioIdx = 0; UINT32 ImageRatioIdx = 0;

View File

@ -30,6 +30,8 @@
#include "FileSysTsk.h" #include "FileSysTsk.h"
#include "PlaybackTsk.h" #include "PlaybackTsk.h"
#include "DCF.h" #include "DCF.h"
#include "sf_sd_common.h"
#define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER #define THIS_DBGLVL 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
@ -46,16 +48,22 @@ void UIStorageCheck_AllSize(UINT64 *uiTotal, UINT64 *uiRemain)
(*uiRemain) /= (1024 * 1024); (*uiRemain) /= (1024 * 1024);
} }
static BOOL bIsFileReachMax = FALSE; static BOOL bIsFileReachMax = FALSE;
void UIStorageCheck_ResetFileReachMax(void) void UIStorageCheck_ResetFileReachMax(void)
{ {
bIsFileReachMax = FALSE; bIsFileReachMax = FALSE;
} }
//#NT#2009/12/30#Ben Wang -begin
//#NT#Add check for folder attribute
static BOOL check_CurrDir_writable(void) static BOOL check_CurrDir_writable(void)
{ {
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
UINT32 useFileDB = 0; UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB); useFileDB = UI_GetData(FL_IsUseFileDB);
@ -66,9 +74,9 @@ static BOOL check_CurrDir_writable(void)
UINT32 CurrDirID; UINT32 CurrDirID;
SDCFDIRINFO dirinfo = {0}; SDCFDIRINFO dirinfo = {0};
CurrDirID = DCF_GetDBInfo(DCF_INFO_CUR_DIR_ID); CurrDirID = DCF_GetDBInfoEx(mmc_dev->dcf_handle, DCF_INFO_CUR_DIR_ID);
if (CurrDirID) { if (CurrDirID) {
if (DCF_GetDirInfo(CurrDirID, &dirinfo)) { if (DCF_GetDirInfoEx(mmc_dev->dcf_handle, CurrDirID, &dirinfo)) {
if (M_IsReadOnly(dirinfo.ucAttrib)) { if (M_IsReadOnly(dirinfo.ucAttrib)) {
DBG_IND("DCF folder %d is READONLY.\r\n", CurrDirID); DBG_IND("DCF folder %d is READONLY.\r\n", CurrDirID);
return FALSE; return FALSE;
@ -88,20 +96,34 @@ static BOOL check_CurrDir_writable(void)
} }
} }
BOOL UIStorageCheck_DCIMWritable(void) BOOL UIStorageCheck_DCIMWritable(void)
{ {
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
UINT32 useFileDB = 0; UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB); useFileDB = UI_GetData(FL_IsUseFileDB);
if (useFileDB) { if (useFileDB) {
return TRUE; return TRUE;
} else { } else {
char DCIM_DIR[9] = "A:\\DCIM";
INT32 uiStatus = 0; INT32 uiStatus = 0;
UINT8 ucAttrib = 0; UINT8 ucAttrib = 0;
BOOL ret = FALSE; BOOL ret = FALSE;
if(mmc_dev->dev_type == MMC_DEV_SD)
{
uiStatus = FileSys_GetAttrib("A:\\DCIM", &ucAttrib);
}
else
{
uiStatus = FileSys_GetAttrib("B:\\DCIM", &ucAttrib);
}
uiStatus = FileSys_GetAttrib(DCIM_DIR, &ucAttrib);
if (uiStatus == FST_STA_OK) { if (uiStatus == FST_STA_OK) {
if (ucAttrib & FS_ATTRIB_DIRECTORY) { if (ucAttrib & FS_ATTRIB_DIRECTORY) {
if (System_GetState(SYS_STATE_CARD) == CARD_REMOVED) { if (System_GetState(SYS_STATE_CARD) == CARD_REMOVED) {
@ -127,21 +149,8 @@ BOOL UIStorageCheck_DCIMWritable(void)
} }
} }
BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount) static BOOL UIStrgCheckFolderFull(DCF_HANDLE DcfHandle)
{ {
#if (PHOTO_MODE==ENABLE)
UINT32 uiCountTmp = 0;
#endif
UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB);
DBG_IND("UI_StorageCheck: Check item = 0x%x\r\n", uiCheckItem);
switch (uiCheckItem) {
case STORAGE_CHECK_FOLDER_FULL:
if (useFileDB) {
return FALSE;
} else {
#if (USE_DCF == ENABLE) #if (USE_DCF == ENABLE)
BOOL bIsFileReachMax = FALSE; BOOL bIsFileReachMax = FALSE;
UINT32 DCF_DirId = 0, DCF_FileId = 0; UINT32 DCF_DirId = 0, DCF_FileId = 0;
@ -152,14 +161,12 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
return TRUE; return TRUE;
} }
bIsFileReachMax = FALSE; bIsFileReachMax = FALSE;
//#NT#2011/03/28#Lincy Lin -begin
//#NT#fix delete the 9999th file in 999 folder cause capture not save ret = DCF_GetNextIDEx(DcfHandle, &DCF_DirId, &DCF_FileId);
ret = DCF_GetNextID(&DCF_DirId, &DCF_FileId);
if (ret && DCF_DirId == 0 && DCF_FileId == 0) { if (ret && DCF_DirId == 0 && DCF_FileId == 0) {
bIsFileReachMax = TRUE; bIsFileReachMax = TRUE;
DBG_IND("Next dir_id =%d, file_id = %d \r\n", DCF_DirId, DCF_FileId); DBG_IND("Next dir_id =%d, file_id = %d \r\n", DCF_DirId, DCF_FileId);
} else if (ret && DCF_GetDBInfo(DCF_INFO_IS_9999) == TRUE) } else if (ret && DCF_GetDBInfoEx(DcfHandle, DCF_INFO_IS_9999) == TRUE)
//#NT#2011/03/28#Lincy Lin -end
{ {
bIsFileReachMax = TRUE; bIsFileReachMax = TRUE;
} }
@ -168,8 +175,12 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
return FALSE; return FALSE;
#endif #endif
} }
break;
case STORAGE_CHECK_FULL: static BOOL UIStrgCheckFull(UINT32 *pFreeCount)
{
#if (PHOTO_MODE==ENABLE)
UINT32 uiCountTmp = 0;
#endif
#if (PHOTO_MODE==ENABLE) #if (PHOTO_MODE==ENABLE)
uiCountTmp = PhotoExe_GetFreePicNum(); uiCountTmp = PhotoExe_GetFreePicNum();
DBG_IND("uiCountTmp = %d, pFreeCount=%d\r\n",uiCountTmp,pFreeCount); DBG_IND("uiCountTmp = %d, pFreeCount=%d\r\n",uiCountTmp,pFreeCount);
@ -184,18 +195,19 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
#else #else
return FALSE; return FALSE;
#endif #endif
break;
case STORAGE_CHECK_LOCKED:
if (System_GetState(SYS_STATE_CARD) == CARD_LOCKED) {
DBG_ERR("UIStorageCheck: %d Card locked\r\n", System_GetState(SYS_STATE_CARD));
return TRUE;
} else {
return FALSE;
} }
break;
case STORAGE_CHECK_ERROR: static BOOL UIStrgCheckErr(MMC_DEV_TYPE dev_id)
FileSys_WaitFinish(); {
if(dev_id == MMC_DEV_SD)
{
FileSys_WaitFinishEx('A');
}
else if(dev_id == MMC_DEV_EMMC)
{
FileSys_WaitFinishEx('B');
}
if (System_GetState(SYS_STATE_FS) == FS_DISK_ERROR if (System_GetState(SYS_STATE_FS) == FS_DISK_ERROR
|| System_GetState(SYS_STATE_FS) == FS_UNKNOWN_FORMAT || System_GetState(SYS_STATE_FS) == FS_UNKNOWN_FORMAT
|| System_GetState(SYS_STATE_FS) == FS_UNFORMATTED || System_GetState(SYS_STATE_FS) == FS_UNFORMATTED
@ -210,6 +222,43 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
} else { } else {
return FALSE; return FALSE;
} }
}
BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
{
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return FALSE;
}
UINT32 useFileDB = 0;
useFileDB = UI_GetData(FL_IsUseFileDB);
DBG_IND("UI_StorageCheck: Check item = 0x%x\r\n", uiCheckItem);
switch (uiCheckItem) {
case STORAGE_CHECK_FOLDER_FULL:
if (useFileDB) {
return FALSE;
} else {
UIStrgCheckFolderFull(mmc_dev->dcf_handle);
}
break;
case STORAGE_CHECK_FULL:
UIStrgCheckFull(pFreeCount);
break;
case STORAGE_CHECK_LOCKED:
if (System_GetState(SYS_STATE_CARD) == CARD_LOCKED) {
DBG_ERR("UIStorageCheck: %d Card locked\r\n", System_GetState(SYS_STATE_CARD));
return TRUE;
} else {
return FALSE;
}
break;
case STORAGE_CHECK_ERROR:
UIStrgCheckErr(mmc_dev->dev_type);
break; break;
case STORAGE_CHECK_DCIM_READONLY: case STORAGE_CHECK_DCIM_READONLY:
if ((UIStorageCheck_DCIMWritable() == FALSE) if ((UIStorageCheck_DCIMWritable() == FALSE)

View File

@ -42,6 +42,8 @@
#include <sf_mcu.h> #include <sf_mcu.h>
#include "sf_led.h" #include "sf_led.h"
#endif #endif
#include "sf_sd_common.h"
#if POWERON_FAST_SLICE_ENC == ENABLE #if POWERON_FAST_SLICE_ENC == ENABLE
#include "PhotoFastSliceEncode.h" #include "PhotoFastSliceEncode.h"
@ -739,9 +741,10 @@ INT32 PhotoFast_FileNaming_Open(void)
DBG_ERR("get dcf handle error!\n"); DBG_ERR("get dcf handle error!\n");
} }
DBG_WRN("DCF_ScanObjEx emmc handle=%d\n", g_dcf_hdl2); DBG_WRN("DCF_ScanObjEx emmc handle=%d\n", g_dcf_hdl2);
DCF_ScanObjEx(g_dcf_hdl2); DCF_ScanObjEx(g_dcf_hdl2);
SF_RtosStrgSetDcfHandle(MMC_DEV_SD, g_dcf_hdl);
SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl2);
} }
#endif #endif
@ -767,6 +770,8 @@ INT32 PhotoFast_FileNaming_Close(void)
DCF_UnInstallID(); DCF_UnInstallID();
} }
SF_RtosStrgSetDcfHandle(MMC_DEV_SD, g_dcf_hdl);
SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl2);
return 0; return 0;
} }
@ -883,12 +888,20 @@ void PhotoFast_FileNaming_SetSortBySN(CHAR *pDelimStr, UINT32 nDelimCount, UINT3
DCF_HANDLE PhotoFast_Get_DCF_Handle() DCF_HANDLE PhotoFast_Get_DCF_Handle()
{ {
#if (FS_MULTI_STRG_FUNC) //#if (FS_MULTI_STRG_FUNC)
/* check free space here */ /* check free space here */
return g_dcf_hdl2; //return g_dcf_hdl2;
#else //#else
return g_dcf_hdl; //return g_dcf_hdl;
#endif //#endif
SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
return -1;
}
DBG_WRN("photofast DCF_GET_HANDLE, %d\n", mmc_dev->dcf_handle);
return mmc_dev->dcf_handle;
} }
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)

View File

@ -21,6 +21,7 @@
#include "sys_usrmem.h" #include "sys_usrmem.h"
#if HUNTING_CAMERA_MCU == ENABLE #if HUNTING_CAMERA_MCU == ENABLE
#include <sf_mcu.h> #include <sf_mcu.h>
#include "sf_sd_common.h"
#endif #endif
#define VDO_YUV_BUFSIZE(w, h, pxlfmt) ALIGN_CEIL_4(((w) * (h) * HD_VIDEO_PXLFMT_BPP(pxlfmt)) / 8) #define VDO_YUV_BUFSIZE(w, h, pxlfmt) ALIGN_CEIL_4(((w) * (h) * HD_VIDEO_PXLFMT_BPP(pxlfmt)) / 8)
@ -2384,7 +2385,22 @@ INT32 PhotoFast_SliceEncode_CB3(void* user_data)
#endif #endif
#if HUNTING_CAMERA_MCU == ENABLE #if HUNTING_CAMERA_MCU == ENABLE
snprintf(tmp, sizeof(tmp), "%s%s", PHOTO_THUMB_PATH, file_path); /* DCF 8.3 naming rule */ SF_RTOS_ST_MMC_DEV *mmc_dev = SF_RtosStrgCheckWorkableDev();
if(mmc_dev->dcf_handle < 0)
{
DBG_ERR("No MMC_Dev Can use!\n");
}
else
{
if(mmc_dev->dev_type == MMC_DEV_SD)
{
snprintf(tmp, sizeof(tmp), "%c%s%s", 'A', PHOTO_THUMB_PATH, file_path); /* DCF 8.3 naming rule */
}
else
{
snprintf(tmp, sizeof(tmp), "%c%s%s", 'B', PHOTO_THUMB_PATH, file_path); /* DCF 8.3 naming rule */
}
}
#else #else
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), "%s%s", PHOTO_THUMB_PATH, file_path + length - 12); /* DCF 8.3 naming rule */

View File

@ -0,0 +1,75 @@
/**************************************************************************
*
* Copyright (c) 2015-2021 by WuYuan Technology, Inc.
*
* This software is copyrighted by and is the property of SiFar
* Technology, Inc.. All rights are reserved by SiFar Technology, Inc..
* This software may only be used in accordance with the corresponding
* license agreement. Any unauthorized use, duplication, distribution,
* or disclosure of this software is expressly forbidden.
*
* This Copyright notice MUST not be removed or modified without prior
* written consent of SiFar Technology, Inc..
*
* WuYuan Technology, Inc. reserves the right to modify this software without notice.
*
* Author: Sober
* Ver: 1.0.0 2023.12.23
* Description: Creat
**************************************************************************/
#ifndef _SF_SD_COMM_H_
#define _SF_SD_COMM_H_
#define MMC_DEV_MAX_NUM (2)
typedef enum
{
MMC_DEV_SD = 0,
MMC_DEV_EMMC = 1,
MMC_DEV_NO = 2,
}MMC_DEV_TYPE;
typedef enum
{
MMC_DEV_NODE_STATE_NO = 0,
MMC_DEV_NODE_STATE_EXIST = 1,
MMC_DEV_NODE_STATE_NO_EXIST = 2,
}MMC_DEV_NODE_STATE;
typedef enum
{
MMC_DEV_MOUNT_STATE_NO = 0,
MMC_DEV_MOUNT_STATE_MOUNTED = 1,
MMC_DEV_MOUNT_STATE_UNMOUNTED = 2,
}MMC_DEV_MOUNT_STATE;
typedef enum
{
MMC_DEV_SPACE_STATE_NO = 0,
MMC_DEV_SPACE_STATE_ENOUGH = 1,
MMC_DEV_SPACE_STATE_NO_ENOUGH = 2,
}MMC_DEV_SPACE_STATE;
typedef enum
{
MMC_DEV_LOOP_STATE_NO = 0,
MMC_DEV_LOOP_STATE_ON = 1,
MMC_DEV_LOOP_STATE_OFF = 2,
}MMC_DEV_LOOP_STATE;
typedef struct
{
MMC_DEV_TYPE dev_type;
MMC_DEV_MOUNT_STATE moumted_state;
MMC_DEV_SPACE_STATE space_state;
MMC_DEV_LOOP_STATE loop_state;
int dcf_handle;
}SF_RTOS_ST_MMC_DEV;
void SF_RtosStrgInit(void);
void SF_RtosStrgUnInit(void);
int SF_RtosStrgRegister(int devid, int mounted_state);
void SF_RtosStrgSetDcfHandle(UINT32 strg_id, UINT32 handle);
SF_RTOS_ST_MMC_DEV *SF_RtosStrgCheckWorkableDev(void);
#endif

View File

@ -43,16 +43,18 @@
//#include <io/gpio.h> //#include <io/gpio.h>
#include "UIInfo/UIInfo.h" #include "UIInfo/UIInfo.h"
#include <FileSysTsk.h> #include <FileSysTsk.h>
#include "sf_sd_common.h"
static BOOL IsCardFull = FALSE; static BOOL IsCardFull = FALSE;
SF_CALLBACK_SD_CMD g_fpSd_Exist_CB = NULL; SF_CALLBACK_SD_CMD g_fpSd_Exist_CB = NULL;
extern BOOL DrvCARD_DetStrgCard(void); extern BOOL DrvCARD_DetStrgCard(void);
SF_RTOS_ST_MMC_DEV *sf_rtos_mmc_dev[MMC_DEV_MAX_NUM] = {NULL};
BOOL sf_is_card_full(void) BOOL sf_is_card_full(void)
{ {
//printf("[%s]:%d IsCardFull:%d\n", __FUNCTION__, __LINE__, IsCardFull); //printf("[%s]:%d IsCardFull:%d\n", __FUNCTION__, __LINE__, IsCardFull);
return IsCardFull; return IsCardFull;
} }
UINT32 sf_check_card_full(void) UINT32 sf_check_card_full(void)
@ -90,6 +92,7 @@ UINT32 sf_check_card_full(void)
return ret; return ret;
} }
void sf_sd_exist_reg_cb(SF_CALLBACK_SD_CMD fpCB) void sf_sd_exist_reg_cb(SF_CALLBACK_SD_CMD fpCB)
{ {
g_fpSd_Exist_CB = fpCB; g_fpSd_Exist_CB = fpCB;
@ -110,6 +113,202 @@ BOOL sf_in_card_exist(void)
} }
void SF_RtosStrgInit(void)
{
for(int i = 0; i < MMC_DEV_MAX_NUM; i++)
{
sf_rtos_mmc_dev[i] = (SF_RTOS_ST_MMC_DEV *)malloc(sizeof(SF_RTOS_ST_MMC_DEV));
if(sf_rtos_mmc_dev[i] == NULL) {
// 处理内存分配失败的情况
}
sf_rtos_mmc_dev[i]->dcf_handle = -1;
sf_rtos_mmc_dev[i]->dev_type = MMC_DEV_NO;
//sf_rtos_mmc_dev[i]->node = MMC_DEV_NODE_STATE_NO;
sf_rtos_mmc_dev[i]->moumted_state = MMC_DEV_MOUNT_STATE_NO;
sf_rtos_mmc_dev[i]->space_state = MMC_DEV_SPACE_STATE_NO;
//sf_rtos_mmc_dev[i]->loop_state = MMC_DEV_LOOP_STATE_NO;
}
DBG_WRN("SF_RtosStrgInit!\n");
}
void SF_RtosStrgUnInit(void)
{
for(int i = 0; i < MMC_DEV_MAX_NUM; i++)
{
if(sf_rtos_mmc_dev[i] != NULL) {
free(sf_rtos_mmc_dev[i]);
sf_rtos_mmc_dev[i] = NULL;
}
}
DBG_WRN("SF_RtosStrgUnInit!\n");
}
static UINT32 sf_rtos_mmc_dev_space_check_full(MMC_DEV_TYPE mmc_dev)
{
UINT64 diskFree = 0;
UINT32 ret = 0;
//UIMenuStoreInfo *puiPara = sf_ui_para_get();
if(!sf_in_card_exist())
{
return 1;
}
/*check disk free size*/
if(mmc_dev == MMC_DEV_SD)
{
diskFree = FileSys_GetDiskInfoEx('A', FST_INFO_FREE_SPACE);
}
else
{
diskFree = FileSys_GetDiskInfoEx('B', FST_INFO_FREE_SPACE);
}
diskFree = diskFree/1024/1024;
if(diskFree < 30) /* 30MB */
{
ret = 1;
}
else
{
ret = 0;
}
DBG_WRN("[%d]sd card diskFree=%lluM, ret = %d\n", __LINE__, diskFree, ret);
return ret;
}
int SF_RtosStrgRegister(int devid, int mounted_state)
{
UIMenuStoreInfo *puiPara = sf_ui_para_get();
if(mounted_state == FST_STA_OK)
{
sf_rtos_mmc_dev[devid]->moumted_state = MMC_DEV_MOUNT_STATE_MOUNTED;
}
else
{
sf_rtos_mmc_dev[devid]->moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED;
}
if(puiPara->SdLoopSwitch == 1)
{
sf_rtos_mmc_dev[devid]->loop_state = MMC_DEV_LOOP_STATE_ON;
}
else
sf_rtos_mmc_dev[devid]->loop_state = MMC_DEV_LOOP_STATE_OFF;
DBG_WRN("devid = %d, state = %d\n", devid, mounted_state);
return 0;
}
void SF_RtosStrgSetDcfHandle(UINT32 strg_id, UINT32 handle)
{
sf_rtos_mmc_dev[strg_id]->dcf_handle = handle;
DBG_WRN("strg_id = %d, handle = %d\n", strg_id, handle);
}
SF_RTOS_ST_MMC_DEV *SF_RtosStrgCheckWorkableDev(void)
{
MMC_DEV_TYPE workable_dev = MMC_DEV_NO;
UINT32 isfull = 0;
isfull = sf_rtos_mmc_dev_space_check_full(MMC_DEV_SD);
if(isfull == 1)
{
sf_rtos_mmc_dev[MMC_DEV_SD]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH;
}
else if(isfull == 0)
{
sf_rtos_mmc_dev[MMC_DEV_SD]->space_state = MMC_DEV_SPACE_STATE_ENOUGH;
}
isfull = sf_rtos_mmc_dev_space_check_full(MMC_DEV_EMMC);
if(isfull == 1)
{
sf_rtos_mmc_dev[MMC_DEV_EMMC]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH;
}
else if(isfull == 0)
{
sf_rtos_mmc_dev[MMC_DEV_EMMC]->space_state = MMC_DEV_SPACE_STATE_ENOUGH;
}
if((sf_rtos_mmc_dev[MMC_DEV_SD]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED) &&
(sf_rtos_mmc_dev[MMC_DEV_EMMC]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED))
{
workable_dev = MMC_DEV_NO;
}
else if(sf_rtos_mmc_dev[MMC_DEV_SD]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED)
{
if(sf_rtos_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
{
workable_dev = MMC_DEV_EMMC;
}
else
{
if(sf_rtos_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON)
{
workable_dev = MMC_DEV_EMMC;
}
}
}
else if(sf_rtos_mmc_dev[MMC_DEV_EMMC]->moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED)
{
if(sf_rtos_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
{
workable_dev = MMC_DEV_SD;
}
else
{
if(sf_rtos_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON)
{
workable_dev = MMC_DEV_SD;
}
}
}
else
{
if(sf_rtos_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_ENOUGH &&
sf_rtos_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
{
workable_dev = MMC_DEV_EMMC;
}
else if(sf_rtos_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
{
workable_dev = MMC_DEV_EMMC;
}
else if(sf_rtos_mmc_dev[MMC_DEV_SD]->space_state == MMC_DEV_SPACE_STATE_ENOUGH)
{
workable_dev = MMC_DEV_SD;
}
else
{
if(sf_rtos_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON)
{
workable_dev = MMC_DEV_EMMC;
}
}
}
DBG_WRN("dev_id = %d!!!\n", workable_dev);
for(int i = 0; i < 2; i++)
{
sf_rtos_mmc_dev[i]->dev_type = workable_dev;
DBG_WRN("mount:%d, space:%d\n", sf_rtos_mmc_dev[i]->moumted_state,
sf_rtos_mmc_dev[i]->space_state);
}
if(workable_dev == MMC_DEV_NO)
{
return NULL;
}
else
{
return sf_rtos_mmc_dev[workable_dev];
}
}

View File

@ -1722,5 +1722,9 @@ extern int FileSys_SearchFileRewind(FS_SEARCH_HDL pSearch);
#define fs_SearchFile FileSys_SearchFile #define fs_SearchFile FileSys_SearchFile
#define fs_SearchFileClose FileSys_SearchFileClose #define fs_SearchFileClose FileSys_SearchFileClose
#define fs_SearchFileRewind FileSys_SearchFileRewind #define fs_SearchFileRewind FileSys_SearchFileRewind
#define FileSys_GetEMMCDiskInfo(parm1) FileSys_GetDiskInfoEx('B', parm1)
//@} //@}
#endif #endif