EMMC和SD卡切换逻辑代码实现
This commit is contained in:
parent
c924d94dc7
commit
85230bb460
82
code/application/source/sf_app/code/include/sf_mmc_dev.h
Executable file
82
code/application/source/sf_app/code/include/sf_mmc_dev.h
Executable file
|
@ -0,0 +1,82 @@
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* 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_MMC_DEV_H_
|
||||||
|
#define _SF_MMC_DEV_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_NODE_STATE node;
|
||||||
|
MMC_DEV_MOUNT_STATE moumted_state;
|
||||||
|
MMC_DEV_SPACE_STATE space_state;
|
||||||
|
MMC_DEV_LOOP_STATE loop_state;
|
||||||
|
}SF_ST_MMC_DEV;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -596,6 +596,9 @@ static SINT32 sf_app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf)
|
||||||
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("[%d,%s]\n",pMessageBuf->arg1,app_process_SD_getstatusstring(pMessageBuf->arg1));
|
||||||
|
|
||||||
|
sf_mmc_dev_register(pMessageBuf);
|
||||||
|
|
||||||
switch(pMessageBuf->arg1)
|
switch(pMessageBuf->arg1)
|
||||||
{
|
{
|
||||||
case CMD_SD_STRG_CB_UNKNOWN:
|
case CMD_SD_STRG_CB_UNKNOWN:
|
||||||
|
|
277
code/application/source/sf_app/code/source/storeMng/sf_mmc_dev.c
Executable file
277
code/application/source/sf_app/code/source/storeMng/sf_mmc_dev.c
Executable file
|
@ -0,0 +1,277 @@
|
||||||
|
#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_fileMng.h"
|
||||||
|
#include "sf_storeMng.h"
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int event;
|
||||||
|
int dev_id;
|
||||||
|
int mounted_status;
|
||||||
|
}STRG_CB_PARAM;
|
||||||
|
|
||||||
|
|
||||||
|
static SF_ST_MMC_DEV sf_mmc_dev[SF_ST_MMC_DEV] = {0};
|
||||||
|
|
||||||
|
SINT32 sf_mmc_dev_space_check_full(const char *mountPath, SF_STORE_ATTR_S *pstoreattrs)
|
||||||
|
{
|
||||||
|
SF_COMM_CHECK_POINTER(pstoreattrs,SF_FAILURE);
|
||||||
|
|
||||||
|
SINT32 fd = -1;
|
||||||
|
UINT32 Isfull = 0;
|
||||||
|
fd = open(mountPath, O_RDONLY,0);
|
||||||
|
if(fd >= 0)
|
||||||
|
{
|
||||||
|
struct statfs diskInfo;
|
||||||
|
statfs(mountPath, &diskInfo);
|
||||||
|
|
||||||
|
if(diskInfo.f_bsize > 1024)
|
||||||
|
{
|
||||||
|
pstoreattrs->SDTotalSize = (diskInfo.f_blocks * (diskInfo.f_bsize >> 10)) >> 10 ; //blocks * 4096 / 1024 /1024 = MB
|
||||||
|
pstoreattrs->SDFree = (diskInfo.f_bavail * (diskInfo.f_bsize >> 10)) >> 10 ;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pstoreattrs->SDTotalSize = (diskInfo.f_blocks * diskInfo.f_bsize) >> 10 ; //blocks * 4096 / 1024 /1024 = MB
|
||||||
|
pstoreattrs->SDFree = (diskInfo.f_bavail * diskInfo.f_bsize) >> 10 ;
|
||||||
|
}
|
||||||
|
close(fd);
|
||||||
|
|
||||||
|
if(pstoreattrs->SDTotalSize > 0)
|
||||||
|
pstoreattrs->SDStatus = 0; //SD card SUCESS
|
||||||
|
else
|
||||||
|
pstoreattrs->SDStatus = 2; //SD card ERROR
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pstoreattrs->SDStatus = 1; //SD card not insert
|
||||||
|
pstoreattrs->SDFree = 0;
|
||||||
|
pstoreattrs->SDTotalSize = 0;
|
||||||
|
return SF_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
MLOGD("SDStatus = %d,SDFree = %d MB,SDTotalSize = %d MB\n", pstoreattrs->SDStatus, pstoreattrs->SDFree,pstoreattrs->SDTotalSize);
|
||||||
|
|
||||||
|
if(pstoreattrs.SDStatus != 0)
|
||||||
|
return pstoreattrs.SDStatus;
|
||||||
|
|
||||||
|
Isfull = (pstoreattrs.SDFree <= SD_WARNING_SPACE)?1:0;
|
||||||
|
return Isfull;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int sf_mmc_dev_node_check(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)
|
||||||
|
{
|
||||||
|
HAL_MMC_LOG("no found %s\n", devName);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sf_mmc_dev_register(SF_MESSAGE_BUF_S *pMessageBuf)
|
||||||
|
{
|
||||||
|
STRG_CB_PARAM strg_cb_param;
|
||||||
|
|
||||||
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
strg_cb_param.event = pMessageBuf->arg1;
|
||||||
|
strg_cb_param.dev_id = pMessageBuf->arg2;
|
||||||
|
strg_cb_param.mounted_status = pMessageBuf->arg3;
|
||||||
|
|
||||||
|
if(strg_cb_param.dev_id == MMC_DEV_SD)
|
||||||
|
{
|
||||||
|
if(strg_cb_param.event == CMD_SD_STRG_CB_INSERTED)
|
||||||
|
{
|
||||||
|
sf_mmc_dev[MMC_DEV_SD].node == MMC_DEV_NODE_STATE_EXIST;
|
||||||
|
}
|
||||||
|
else if(strg_cb_param.event == CMD_SD_STRG_CB_REMOVED)
|
||||||
|
{
|
||||||
|
sf_mmc_dev[MMC_DEV_SD].node == MMC_DEV_NODE_STATE_NO_EXIST;
|
||||||
|
}
|
||||||
|
else if(strg_cb_param.event == CMD_SD_STRG_CB_MOUNT_FINISH)
|
||||||
|
{
|
||||||
|
sf_mmc_dev[MMC_DEV_SD].moumted_state = MMC_DEV_MOUNT_STATE_MOUNTED;
|
||||||
|
}
|
||||||
|
else if(strg_cb_param.event == CMD_SD_STRG_CB_UNMOUNT_FINISH)
|
||||||
|
{
|
||||||
|
sf_mmc_dev[MMC_DEV_SD].moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT32 isfull = sf_mmc_dev_space_check_full(SD_MOUNT_ROOT);
|
||||||
|
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(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(strg_cb_param.dev_id == MMC_DEV_EMMC)
|
||||||
|
{
|
||||||
|
if(sf_mmc_dev_node_check(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(strg_cb_param.event == CMD_SD_STRG_CB_MOUNT_FINISH)
|
||||||
|
{
|
||||||
|
sf_mmc_dev[MMC_DEV_EMMC].moumted_state = MMC_DEV_MOUNT_STATE_MOUNTED;
|
||||||
|
}
|
||||||
|
else if(strg_cb_param.event == CMD_SD_STRG_CB_UNMOUNT_FINISH)
|
||||||
|
{
|
||||||
|
sf_mmc_dev[MMC_DEV_EMMC].moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
UINT32 isfull = sf_mmc_dev_space_check_full(EMMC_MOUNT_ROOT);
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MMC_DEV_TYPE sf_mmc_check_workable_dev(void)
|
||||||
|
{
|
||||||
|
MMC_DEV_TYPE workable_dev = MMC_DEV_NO;
|
||||||
|
|
||||||
|
if(sf_mmc_dev[MMC_DEV_EMMC].node == MMC_DEV_NODE_STATE_NO_EXIST) //EMMC节点不存在
|
||||||
|
{
|
||||||
|
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 if(sf_mmc_dev[MMC_DEV_SD].node == MMC_DEV_NODE_STATE_NO_EXIST) //SD节点不存在
|
||||||
|
{
|
||||||
|
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 //MMC节点都存在
|
||||||
|
{
|
||||||
|
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_SD].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_EMMC;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return workable_dev;
|
||||||
|
}
|
|
@ -105,18 +105,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_rtos_mmc_dev_register(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);
|
//fastboot_set_done(BOOT_INIT_FILESYSOK);
|
||||||
}
|
//}
|
||||||
else
|
//else
|
||||||
{
|
//{
|
||||||
fastboot_set_done(BOOT_INIT_FILESYSOK);
|
|
||||||
// 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,10 +141,11 @@ 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_rtos_mmc_dev_register(1, ret);
|
||||||
// FileSys_SetParamEx('B', FST_PARM_UPDATE_FSINFO , TRUE);
|
// FileSys_SetParamEx('B', FST_PARM_UPDATE_FSINFO , TRUE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//fastboot_set_done(BOOT_INIT_FILESYSOK);
|
fastboot_set_done(BOOT_INIT_FILESYSOK);
|
||||||
DBG_WRN("filesys_init e\r\n");
|
DBG_WRN("filesys_init e\r\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -102,6 +102,7 @@ static lfqueue_t write_queue = {0};
|
||||||
|
|
||||||
//local variable
|
//local variable
|
||||||
static DCF_HANDLE g_dcf_hdl = 0;
|
static DCF_HANDLE g_dcf_hdl = 0;
|
||||||
|
static DCF_HANDLE g_dcf_hdl2 = 0;
|
||||||
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;
|
||||||
|
@ -119,6 +120,11 @@ static VOS_TICK g_vprc_trigger_frm_time= 0;
|
||||||
static UINT32 g_vprc_trigger_frm_count= 0;
|
static UINT32 g_vprc_trigger_frm_count= 0;
|
||||||
|
|
||||||
UINT32 Movie2_nextFolderID = 0, Movie2_nextFileID = 0;
|
UINT32 Movie2_nextFolderID = 0, Movie2_nextFileID = 0;
|
||||||
|
|
||||||
|
#if FS_MULTI_STRG_FUNC
|
||||||
|
CHAR FilePath2[NMC_TOTALFILEPATH_MAX_LEN];
|
||||||
|
#endif
|
||||||
|
|
||||||
//local function
|
//local function
|
||||||
static void MovieFast_OnRecStart(void);
|
static void MovieFast_OnRecStart(void);
|
||||||
static void MovieFast_OnRecStop(void);
|
static void MovieFast_OnRecStop(void);
|
||||||
|
@ -308,6 +314,7 @@ static void MovieFast_ShutDown(void)
|
||||||
fastboot_msg_en(ENABLE);
|
fastboot_msg_en(ENABLE);
|
||||||
#endif
|
#endif
|
||||||
sf_file_thumb_cfg_sava();
|
sf_file_thumb_cfg_sava();
|
||||||
|
printf("%s %d\n", __FUNCTION__, __LINE__);
|
||||||
sf_para_print();
|
sf_para_print();
|
||||||
#if (LOGFILE_FUNC==ENABLE)
|
#if (LOGFILE_FUNC==ENABLE)
|
||||||
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
UIMenuStoreInfo *puiPara = sf_ui_para_get();
|
||||||
|
@ -859,6 +866,8 @@ static void MovieFast_FileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName)
|
||||||
//3. If the working mode is normal and it is cyclic recording, please judge the DirID and FileID by yourself before enering next new file recording.
|
//3. If the working mode is normal and it is cyclic recording, please judge the DirID and FileID by yourself before enering next new file recording.
|
||||||
UINT32 nextFolderID = 0, nextFileID = 0;
|
UINT32 nextFolderID = 0, nextFileID = 0;
|
||||||
UINT32 max_cnt = 0;
|
UINT32 max_cnt = 0;
|
||||||
|
|
||||||
|
|
||||||
if (DCF_GetDBInfo(DCF_INFO_IS_9999)) {
|
if (DCF_GetDBInfo(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';
|
||||||
|
@ -903,6 +912,20 @@ static void MovieFast_FileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName)
|
||||||
DCF_MakeObjPath(nextFolderID, nextFileID, DCF_FILE_TYPE_MP4, pFileName);
|
DCF_MakeObjPath(nextFolderID, nextFileID, DCF_FILE_TYPE_MP4, pFileName);
|
||||||
DCF_AddDBfile(pFileName);
|
DCF_AddDBfile(pFileName);
|
||||||
DBG_DUMP("%s added to DCF\r\n", pFileName);
|
DBG_DUMP("%s added to DCF\r\n", pFileName);
|
||||||
|
|
||||||
|
#if FS_MULTI_STRG_FUNC
|
||||||
|
printf("%s %d\n", __FUNCTION__, __LINE__);
|
||||||
|
if (DCF_GetDBInfoEx(g_dcf_hdl2, DCF_INFO_IS_9999)) {
|
||||||
|
printf("Exceed max dcf file!\r\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//DCF_GetNextIDEx(g_dcf_hdl2, &nextFolderID,&nextFileID);
|
||||||
|
DCF_MakeObjPathEx(g_dcf_hdl2, nextFolderID, nextFileID, DCF_FILE_TYPE_MP4, FilePath2);
|
||||||
|
DCF_AddDBfileEx(g_dcf_hdl2, FilePath2);
|
||||||
|
printf("%s added to DCF2\r\n", FilePath2);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#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%03ld%04ld.JPG", nextFolderID, nextFileID);
|
sprintf(tmp, "S%03ld%04ld.JPG", nextFolderID, nextFileID);
|
||||||
|
@ -992,10 +1015,14 @@ static void MovieFast_WriteFile_Task(void* arg)
|
||||||
{
|
{
|
||||||
lfqueue_t* queue = (lfqueue_t*)arg;
|
lfqueue_t* queue = (lfqueue_t*)arg;
|
||||||
MOVIEFAST_WRITE_QUEUE_PARAM* param;
|
MOVIEFAST_WRITE_QUEUE_PARAM* param;
|
||||||
|
INT32 rt;
|
||||||
|
|
||||||
|
printf("%s %d\n", __FUNCTION__, __LINE__);
|
||||||
fastboot_wait_done(BOOT_INIT_FILESYSOK);
|
fastboot_wait_done(BOOT_INIT_FILESYSOK);
|
||||||
#if HUNTING_CAMERA_MCU == ENABLE
|
#if HUNTING_CAMERA_MCU == ENABLE
|
||||||
if(TRUE == sf_is_card_full())
|
//if(TRUE == sf_is_card_full())
|
||||||
|
MMC_DEV_TYPE mmc_dev = sf_rtos_mmc_check_workable_dev();
|
||||||
|
if(mmc_dev == MMC_DEV_NO)
|
||||||
{
|
{
|
||||||
DBG_ERR("ERR card full\r\n");
|
DBG_ERR("ERR card full\r\n");
|
||||||
//return ;
|
//return ;
|
||||||
|
@ -1012,26 +1039,71 @@ static void MovieFast_WriteFile_Task(void* arg)
|
||||||
if(param->va){
|
if(param->va){
|
||||||
DBG_DUMP("Write %s\n", param->path);
|
DBG_DUMP("Write %s\n", param->path);
|
||||||
#if HUNTING_CAMERA_MCU == ENABLE
|
#if HUNTING_CAMERA_MCU == ENABLE
|
||||||
if(TRUE != sf_is_card_full())
|
//if(TRUE != sf_is_card_full())
|
||||||
|
if(mmc_dev == MMC_DEV_SD)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
FST_FILE fp = FileSys_OpenFile(param->path, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
|
FST_FILE fp = FileSys_OpenFile(param->path, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
|
||||||
FileSys_WriteFile(fp, (UINT8*)param->va, ¶m->size, 0, NULL);
|
FileSys_WriteFile(fp, (UINT8*)param->va, ¶m->size, 0, NULL);
|
||||||
FileSys_CloseFile(fp);
|
FileSys_CloseFile(fp);
|
||||||
}
|
}
|
||||||
|
#if FS_MULTI_STRG_FUNC
|
||||||
|
if(mmc_dev == MMC_DEV_EMMC)
|
||||||
|
{
|
||||||
|
DBG_WRN("write %s\n", FilePath2);
|
||||||
|
FST_FILE fp = FileSys_OpenFile(FilePath2, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
|
||||||
|
if ((fp != NULL)) {
|
||||||
|
rt = FileSys_WriteFile(fp, (UINT8*)param->va, ¶m->size, 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\r\n", (UINT8*)param->va, ¶m->size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG_ERR("FileSys_OpenFile fail\r\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
free(param->va);
|
free(param->va);
|
||||||
}
|
}
|
||||||
else if(param->frame.phy_addr[0]){
|
else if(param->frame.phy_addr[0]){
|
||||||
DBG_DUMP("Write %s\n", param->path);
|
DBG_DUMP("Write %s\n", param->path);
|
||||||
#if HUNTING_CAMERA_MCU == ENABLE
|
#if HUNTING_CAMERA_MCU == ENABLE
|
||||||
if(TRUE != sf_is_card_full())
|
//if(TRUE != sf_is_card_full())
|
||||||
|
if(mmc_dev == MMC_DEV_SD)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
FST_FILE fp = FileSys_OpenFile(param->path, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
|
FST_FILE fp = FileSys_OpenFile(param->path, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
|
||||||
FileSys_WriteFile(fp, (UINT8*)param->frame.phy_addr[0], ¶m->size, 0, NULL);
|
FileSys_WriteFile(fp, (UINT8*)param->frame.phy_addr[0], ¶m->size, 0, NULL);
|
||||||
FileSys_CloseFile(fp);
|
FileSys_CloseFile(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if FS_MULTI_STRG_FUNC
|
||||||
|
if(mmc_dev == MMC_DEV_EMMC)
|
||||||
|
{
|
||||||
|
DBG_WRN("write %s\n", FilePath2);
|
||||||
|
FST_FILE fp = FileSys_OpenFile(FilePath2, FST_OPEN_ALWAYS | FST_OPEN_WRITE);
|
||||||
|
if ((fp != NULL)) {
|
||||||
|
rt = FileSys_WriteFile(fp, (UINT8*)param->frame.phy_addr[0], ¶m->size, 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\r\n", (UINT8*)param->frame.phy_addr[0], ¶m->size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DBG_ERR("FileSys_OpenFile fail\r\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
hd_videoproc_release_out_buf(param->vprc_path_id, ¶m->frame);
|
hd_videoproc_release_out_buf(param->vprc_path_id, ¶m->frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1198,6 +1270,31 @@ 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");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
printf("DCF_ScanObjEx emmc handle=%d\n", g_dcf_hdl2);
|
||||||
|
// DCF_SetParm(DCF_PRMID_REMOVE_DUPLICATE_FOLDER, TRUE);
|
||||||
|
// DCF_SetParm(DCF_PRMID_REMOVE_DUPLICATE_FILE, TRUE);
|
||||||
|
// DCF_SetParm(DCF_PRMID_SET_VALID_FILE_FMT, DCF_FILE_TYPE_JPG|DCF_FILE_TYPE_MP4|DCF_FILE_TYPE_MOV);
|
||||||
|
// DCF_SetParm(DCF_PRMID_SET_DEP_FILE_FMT, DCF_FILE_TYPE_JPG|DCF_FILE_TYPE_WAV|DCF_FILE_TYPE_MPO);
|
||||||
|
// DCF_SetDirFreeChars(DCF_DIR_NAME);
|
||||||
|
// DCF_SetFileFreeChars(DCF_FILE_TYPE_ANYFORMAT, DCF_FILE_NAME);
|
||||||
|
DCF_ScanObjEx(g_dcf_hdl2);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#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 +1991,12 @@ static void MovieFast_Close(void)
|
||||||
EXIT:
|
EXIT:
|
||||||
|
|
||||||
DCF_Close(g_dcf_hdl);
|
DCF_Close(g_dcf_hdl);
|
||||||
|
g_dcf_hdl = -1;
|
||||||
|
|
||||||
|
#if (FS_MULTI_STRG_FUNC)
|
||||||
|
DCF_Close(g_dcf_hdl2);
|
||||||
|
g_dcf_hdl2 = -1;
|
||||||
|
#endif
|
||||||
DCF_UnInstallID();
|
DCF_UnInstallID();
|
||||||
|
|
||||||
vos_flag_destroy(MOVIEFAST_FLG_ID);
|
vos_flag_destroy(MOVIEFAST_FLG_ID);
|
||||||
|
|
|
@ -938,7 +938,7 @@ INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId,
|
||||||
DBG_DUMP("%s added to DCF\r\n", FilePath);
|
DBG_DUMP("%s added to DCF\r\n", FilePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0//FS_MULTI_STRG_FUNC
|
#if FS_MULTI_STRG_FUNC
|
||||||
|
|
||||||
if (DCF_GetDBInfoEx(g_dcf_hdl2, DCF_INFO_IS_9999)) {
|
if (DCF_GetDBInfoEx(g_dcf_hdl2, DCF_INFO_IS_9999)) {
|
||||||
DBG_ERR("Exceed max dcf file!\r\n");
|
DBG_ERR("Exceed max dcf file!\r\n");
|
||||||
|
@ -973,7 +973,9 @@ INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId,
|
||||||
//sprintf(tmp, "W%03ld%04ld.JPG", nextFolderID, nextFileID);
|
//sprintf(tmp, "W%03ld%04ld.JPG", nextFolderID, nextFileID);
|
||||||
strncpy(g_photo_fast_write_file_Path, tmp, sizeof(g_photo_fast_write_file_Path) - 1);
|
strncpy(g_photo_fast_write_file_Path, tmp, sizeof(g_photo_fast_write_file_Path) - 1);
|
||||||
DBG_IND("last send file:%s\r\n", tmp);
|
DBG_IND("last send file:%s\r\n", tmp);
|
||||||
if(TRUE == sf_is_card_full())
|
//if(TRUE == sf_is_card_full())
|
||||||
|
MMC_DEV_TYPE mmc_dev = sf_rtos_mmc_check_workable_dev();
|
||||||
|
if(mmc_dev == MMC_DEV_NO)
|
||||||
{
|
{
|
||||||
DBG_ERR("ERR Addr=0x%x,Size=0x%x,Fmt=%d card full\r\n", Addr, Size, Fmt);
|
DBG_ERR("ERR Addr=0x%x,Size=0x%x,Fmt=%d card full\r\n", Addr, Size, Fmt);
|
||||||
rt =FST_STA_ERROR;
|
rt =FST_STA_ERROR;
|
||||||
|
@ -988,7 +990,9 @@ INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId,
|
||||||
|
|
||||||
open_flag = FST_CREATE_ALWAYS | FST_OPEN_WRITE;
|
open_flag = FST_CREATE_ALWAYS | FST_OPEN_WRITE;
|
||||||
|
|
||||||
if ((fp = FileSys_OpenFile(FilePath, open_flag)) != NULL) {
|
if(mmc_dev == MMC_DEV_SD)
|
||||||
|
{
|
||||||
|
if ((fp = FileSys_OpenFile(FilePath, open_flag)) != NULL) {
|
||||||
Length = Size;
|
Length = Size;
|
||||||
|
|
||||||
rt = FileSys_WriteFile(fp, (UINT8 *)Addr, &Length, 0, NULL);
|
rt = FileSys_WriteFile(fp, (UINT8 *)Addr, &Length, 0, NULL);
|
||||||
|
@ -1000,34 +1004,34 @@ INT32 PhotoFast_WriteFile(UINT32 Addr, UINT32 Size, UINT32 Fmt, UINT32 uiPathId,
|
||||||
} else {
|
} else {
|
||||||
DBG_ERR("Addr=0x%x,Size=0x%x,Fmt=%d\r\n", Addr, Size, Fmt);
|
DBG_ERR("Addr=0x%x,Size=0x%x,Fmt=%d\r\n", Addr, Size, Fmt);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
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
|
#if FS_MULTI_STRG_FUNC
|
||||||
|
if(mmc_dev == MMC_DEV_EMMC)
|
||||||
|
{
|
||||||
|
DBG_WRN("write %s\n", FilePath2);
|
||||||
|
if ((fp = FileSys_OpenFile(FilePath2, open_flag)) != NULL) {
|
||||||
|
Length = Size;
|
||||||
|
|
||||||
DBG_WRN("write %s\n", FilePath2);
|
rt = FileSys_WriteFile(fp, (UINT8 *)Addr, &Length, 0, NULL);
|
||||||
if ((fp = FileSys_OpenFile(FilePath2, open_flag)) != NULL) {
|
FileSys_FlushFile(fp);
|
||||||
Length = Size;
|
FileSys_CloseFile(fp);
|
||||||
|
if (rt == FST_STA_OK) {
|
||||||
rt = FileSys_WriteFile(fp, (UINT8 *)Addr, &Length, 0, NULL);
|
// DCF_AddDBfile(FilePath);
|
||||||
FileSys_FlushFile(fp);
|
// DBG_DUMP("%s added to DCF\r\n", FilePath);
|
||||||
FileSys_CloseFile(fp);
|
} else {
|
||||||
if (rt == FST_STA_OK) {
|
DBG_ERR("Addr=0x%x,Size=0x%x,Fmt=%d\r\n", Addr, Size, Fmt);
|
||||||
// DCF_AddDBfile(FilePath);
|
}
|
||||||
// DBG_DUMP("%s added to DCF\r\n", FilePath);
|
}else{
|
||||||
} else {
|
DBG_ERR("FileSys_OpenFile fail\r\n");
|
||||||
DBG_ERR("Addr=0x%x,Size=0x%x,Fmt=%d\r\n", Addr, Size, Fmt);
|
rt =FST_STA_ERROR;
|
||||||
}
|
}
|
||||||
}else{
|
|
||||||
DBG_ERR("FileSys_OpenFile fail\r\n");
|
|
||||||
rt =FST_STA_ERROR;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
return rt;
|
return rt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
66
rtos/code/driver/na51089/include/sf_sd_common.h
Executable file
66
rtos/code/driver/na51089/include/sf_sd_common.h
Executable file
|
@ -0,0 +1,66 @@
|
||||||
|
/**************************************************************************
|
||||||
|
*
|
||||||
|
* 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_
|
||||||
|
|
||||||
|
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_NODE_STATE node;
|
||||||
|
MMC_DEV_MOUNT_STATE moumted_state;
|
||||||
|
MMC_DEV_SPACE_STATE space_state;
|
||||||
|
//MMC_DEV_LOOP_STATE loop_state;
|
||||||
|
}SF_RTOS_ST_MMC_DEV;
|
||||||
|
|
||||||
|
#endif
|
|
@ -90,6 +90,49 @@ UINT32 sf_check_card_full(void)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static UINT32 sf_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_GetDiskInfo(FST_INFO_FREE_SPACE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
diskFree = FileSys_GetEMMCDiskInfo(FST_INFO_FREE_SPACE);
|
||||||
|
}
|
||||||
|
|
||||||
|
diskFree = diskFree/1024/1024;
|
||||||
|
|
||||||
|
if(diskFree < 30) /* 30MB */
|
||||||
|
{
|
||||||
|
ret = TRUE;
|
||||||
|
//if(0 == puiPara->SdLoopSwitch)
|
||||||
|
{
|
||||||
|
IsCardFull = TRUE;
|
||||||
|
}
|
||||||
|
//printf("%s:%d sd card is full diskFree=%lu",__FUNCTION__,__LINE__,diskFree);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = FALSE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("[%s:%d]sd card diskFree=%lluM\n", __FUNCTION__, __LINE__, diskFree);
|
||||||
|
|
||||||
|
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 +153,84 @@ BOOL sf_in_card_exist(void)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int sf_rtos_mmc_dev_register(int devid, int mounted_state)
|
||||||
|
{
|
||||||
|
if(mounted_state == FST_STA_OK)
|
||||||
|
{
|
||||||
|
sf_mmc_dev[devid].moumted_state = MMC_DEV_MOUNT_STATE_MOUNTED;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sf_mmc_dev[devid].moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
int isfull = sf_mmc_dev_space_check_full(devid);
|
||||||
|
if(isfull)
|
||||||
|
{
|
||||||
|
sf_mmc_dev[devid].space_state = MMC_DEV_SPACE_STATE_ENOUGH;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
sf_mmc_dev[devid].space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MMC_DEV_TYPE sf_rtos_mmc_check_workable_dev(void)
|
||||||
|
{
|
||||||
|
MMC_DEV_TYPE workable_dev = MMC_DEV_NO;
|
||||||
|
|
||||||
|
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_SD].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_EMMC;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return workable_dev;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user