Merge branch 'Branch_S550_Fast_Emmc' of gitlab.sifar.tech:linux-em-group/s530-ntk into Branch_S550_Fast_Emmc
This commit is contained in:
commit
fd81e9b252
|
@ -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 \
|
||||||
|
|
|
@ -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
|
||||||
|
|
326
code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c
Executable file
326
code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c
Executable 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];
|
||||||
|
}
|
||||||
|
}
|
91
code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h
Executable file
91
code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h
Executable 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_
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
1593
code/application/source/cardv/SrcCode/System/SysStrg_Exe.c.bak
Executable file
1593
code/application/source/cardv/SrcCode/System/SysStrg_Exe.c.bak
Executable file
File diff suppressed because it is too large
Load Diff
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Binary file not shown.
|
@ -7,7 +7,7 @@
|
||||||
"add buttons": [
|
"add buttons": [
|
||||||
],
|
],
|
||||||
"animation time": 0,
|
"animation time": 0,
|
||||||
"button's text": "NO,YES,",
|
"button's text": "YES,NO,",
|
||||||
"class": "lv_msgbox",
|
"class": "lv_msgbox",
|
||||||
"click": true,
|
"click": true,
|
||||||
"content": "",
|
"content": "",
|
||||||
|
|
|
@ -1833,7 +1833,7 @@
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 98
|
"y": 98
|
||||||
},
|
},
|
||||||
"hidden": false,
|
"hidden": true,
|
||||||
"locked": false,
|
"locked": false,
|
||||||
"long mode": "Roll",
|
"long mode": "Roll",
|
||||||
"name": "label_sim",
|
"name": "label_sim",
|
||||||
|
@ -1891,7 +1891,7 @@
|
||||||
"x": 0,
|
"x": 0,
|
||||||
"y": 119
|
"y": 119
|
||||||
},
|
},
|
||||||
"hidden": false,
|
"hidden": true,
|
||||||
"locked": false,
|
"locked": false,
|
||||||
"long mode": "Roll",
|
"long mode": "Roll",
|
||||||
"name": "label_line",
|
"name": "label_line",
|
||||||
|
|
|
@ -222,7 +222,7 @@ lv_obj_t* UIFlowMenuCommonConfirm_create(){
|
||||||
lv_obj_set_drag(message_box_1, false);
|
lv_obj_set_drag(message_box_1, false);
|
||||||
lv_obj_set_pos(message_box_1, 55, 53);
|
lv_obj_set_pos(message_box_1, 55, 53);
|
||||||
lv_obj_set_size(message_box_1, 210, 157);
|
lv_obj_set_size(message_box_1, 210, 157);
|
||||||
static const char* message_box_1_LVGLPropertyMsgBoxBtnmatrixButtonsText[] = {"NO","YES","",""};
|
static const char* message_box_1_LVGLPropertyMsgBoxBtnmatrixButtonsText[] = {"YES","NO","",""};
|
||||||
lv_msgbox_add_btns(message_box_1, message_box_1_LVGLPropertyMsgBoxBtnmatrixButtonsText);
|
lv_msgbox_add_btns(message_box_1, message_box_1_LVGLPropertyMsgBoxBtnmatrixButtonsText);
|
||||||
lv_plugin_msgbox_allocate_ext_attr(message_box_1);
|
lv_plugin_msgbox_allocate_ext_attr(message_box_1);
|
||||||
lv_plugin_msgbox_set_font_type(message_box_1, LV_PLUGIN_LANGUAGE_FONT_TYPE_0, LV_MSGBOX_PART_BG);
|
lv_plugin_msgbox_set_font_type(message_box_1, LV_PLUGIN_LANGUAGE_FONT_TYPE_0, LV_MSGBOX_PART_BG);
|
||||||
|
|
|
@ -390,6 +390,7 @@ void UIFlowMenuCommonConfirm_OnOpen(lv_obj_t* obj)
|
||||||
|
|
||||||
|
|
||||||
set_indev_keypad_group(msgbox);
|
set_indev_keypad_group(msgbox);
|
||||||
|
lv_group_send_data(gp, LV_KEY_RIGHT);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -473,7 +474,7 @@ static void UIFlowMenuCommonConfirm_MessageBox_ValueChanged(lv_obj_t* obj, uint3
|
||||||
{
|
{
|
||||||
if(NULL == value)
|
if(NULL == value)
|
||||||
return;
|
return;
|
||||||
if (*value == 1) {
|
if (*value == 0) {
|
||||||
|
|
||||||
// const char* msgbox_text = lv_msgbox_get_text(obj);
|
// const char* msgbox_text = lv_msgbox_get_text(obj);
|
||||||
const char* msgbox_text = lv_label_get_text(Confirm_label);
|
const char* msgbox_text = lv_label_get_text(Confirm_label);
|
||||||
|
|
|
@ -1816,7 +1816,7 @@ lv_obj_t* UIFlowMovie_create(){
|
||||||
STYLE_COLOR_PROP(0xd3, 0x3c, 0x3c, 0x3c) ; lv_style_set_text_sel_color(&label_sim_s0, LV_STATE_DISABLED, color);
|
STYLE_COLOR_PROP(0xd3, 0x3c, 0x3c, 0x3c) ; lv_style_set_text_sel_color(&label_sim_s0, LV_STATE_DISABLED, color);
|
||||||
STYLE_COLOR_PROP(0x3a, 0x00, 0xb4, 0x95) ; lv_style_set_text_sel_bg_color(&label_sim_s0, LV_STATE_DISABLED, color);
|
STYLE_COLOR_PROP(0x3a, 0x00, 0xb4, 0x95) ; lv_style_set_text_sel_bg_color(&label_sim_s0, LV_STATE_DISABLED, color);
|
||||||
lv_obj_t *label_sim = lv_label_create(parent, NULL);
|
lv_obj_t *label_sim = lv_label_create(parent, NULL);
|
||||||
lv_obj_set_hidden(label_sim, false);
|
lv_obj_set_hidden(label_sim, true);
|
||||||
lv_obj_set_click(label_sim, false);
|
lv_obj_set_click(label_sim, false);
|
||||||
lv_obj_set_drag(label_sim, false);
|
lv_obj_set_drag(label_sim, false);
|
||||||
lv_plugin_label_allocate_ext_attr(label_sim);
|
lv_plugin_label_allocate_ext_attr(label_sim);
|
||||||
|
@ -1880,7 +1880,7 @@ lv_obj_t* UIFlowMovie_create(){
|
||||||
STYLE_COLOR_PROP(0xd3, 0x3c, 0x3c, 0x3c) ; lv_style_set_text_sel_color(&label_line_s0, LV_STATE_DISABLED, color);
|
STYLE_COLOR_PROP(0xd3, 0x3c, 0x3c, 0x3c) ; lv_style_set_text_sel_color(&label_line_s0, LV_STATE_DISABLED, color);
|
||||||
STYLE_COLOR_PROP(0x3a, 0x00, 0xb4, 0x95) ; lv_style_set_text_sel_bg_color(&label_line_s0, LV_STATE_DISABLED, color);
|
STYLE_COLOR_PROP(0x3a, 0x00, 0xb4, 0x95) ; lv_style_set_text_sel_bg_color(&label_line_s0, LV_STATE_DISABLED, color);
|
||||||
lv_obj_t *label_line = lv_label_create(parent, NULL);
|
lv_obj_t *label_line = lv_label_create(parent, NULL);
|
||||||
lv_obj_set_hidden(label_line, false);
|
lv_obj_set_hidden(label_line, true);
|
||||||
lv_obj_set_click(label_line, false);
|
lv_obj_set_click(label_line, false);
|
||||||
lv_obj_set_drag(label_line, false);
|
lv_obj_set_drag(label_line, false);
|
||||||
lv_plugin_label_allocate_ext_attr(label_line);
|
lv_plugin_label_allocate_ext_attr(label_line);
|
||||||
|
|
|
@ -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,21 +726,24 @@ 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);
|
||||||
if (cardStatus != CARD_REMOVED)
|
if (cardStatus != CARD_REMOVED)
|
||||||
{
|
{
|
||||||
if (g_SysStrg_Chg)
|
//if (g_SysStrg_Chg)
|
||||||
{
|
//{
|
||||||
static int cnt = 0;
|
//static int cnt = 0;
|
||||||
if(cnt++<3){
|
//if(cnt++<3){
|
||||||
// lv_label_set_text(label_6_scr_uiflowphoto, "wait");
|
// lv_label_set_text(label_6_scr_uiflowphoto, "wait");
|
||||||
}else{
|
//}else{
|
||||||
g_SysStrg_Chg = false;
|
//g_SysStrg_Chg = false;
|
||||||
cnt = 0;
|
//cnt = 0;
|
||||||
}
|
//}
|
||||||
} else if (UIStorageCheck(STORAGE_CHECK_ERROR, NULL) == TRUE)
|
//} else
|
||||||
|
if (UIStorageCheck(STORAGE_CHECK_ERROR, NULL) == TRUE)
|
||||||
{
|
{
|
||||||
// lv_label_set_text(label_6_scr_uiflowphoto, "SD CARD ERROR");
|
// lv_label_set_text(label_6_scr_uiflowphoto, "SD CARD ERROR");
|
||||||
} else if (UIStorageCheck(STORAGE_CHECK_FULL, NULL) == TRUE)
|
} else if (UIStorageCheck(STORAGE_CHECK_FULL, NULL) == TRUE)
|
||||||
|
@ -771,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);
|
||||||
|
@ -1851,6 +1863,16 @@ static void UIFlowPhoto_NVTMSG(lv_obj_t* obj, const LV_USER_EVENT_NVTMSG_DATA* m
|
||||||
sf_show_send_text(obj, msg->paramArray[0]);
|
sf_show_send_text(obj, msg->paramArray[0]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case NVTEVT_STRG_ATTACH:
|
||||||
|
{
|
||||||
|
g_SysStrg_Chg = false;
|
||||||
|
UIStorageCheck(STORAGE_CHECK_FULL, &g_uiFreePicNum);
|
||||||
|
printf("[*x]===================================================================================\n");
|
||||||
|
DBG_DUMP("UI_StorageCheck: g_uiFreePicNum = 0x%ld\r\n", g_uiFreePicNum);
|
||||||
|
lv_label_set_text(label_6_scr_uiflowphoto, Get_FreePicNumString(g_uiFreePicNum));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -542,7 +542,7 @@ static void UIFlowPlay_UpdatePlaytime(BOOL bShow)
|
||||||
{
|
{
|
||||||
UINT32 rec_sec = FlowPB_GetMovPlayTime();
|
UINT32 rec_sec = FlowPB_GetMovPlayTime();
|
||||||
lv_slider_set_value(slider_1_scr_uiflowplay, (rec_sec % 3600) % 60 + 1, LV_ANIM_OFF);
|
lv_slider_set_value(slider_1_scr_uiflowplay, (rec_sec % 3600) % 60 + 1, LV_ANIM_OFF);
|
||||||
lv_label_set_text_fmt(label_playtime_scr_uiflowplay, "%02d:%02d", (rec_sec % 3600) / 60, (rec_sec % 3600) % 60);
|
lv_label_set_text_fmt(label_playtime_scr_uiflowplay, "%02d:%02d", (rec_sec % 3600) / 60, (rec_sec % 3600) % 60 + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static void UIFlowPlay_UpdataBtnContainer(BOOL bShow)
|
static void UIFlowPlay_UpdataBtnContainer(BOOL bShow)
|
||||||
|
@ -1223,7 +1223,7 @@ static void play_video(lv_obj_t *obj)
|
||||||
printf("now play the video.\n");
|
printf("now play the video.\n");
|
||||||
lv_plugin_img_set_src(image_play_scr_uiflowplay, LV_PLUGIN_IMG_ID_SF_PLAY);
|
lv_plugin_img_set_src(image_play_scr_uiflowplay, LV_PLUGIN_IMG_ID_SF_PLAY);
|
||||||
UINT32 u32CurrPbStatus = 0;
|
UINT32 u32CurrPbStatus = 0;
|
||||||
|
FlowPB_SetMovPlayTime(0);
|
||||||
PB_GetParam(PBPRMID_PLAYBACK_STATUS, &u32CurrPbStatus);
|
PB_GetParam(PBPRMID_PLAYBACK_STATUS, &u32CurrPbStatus);
|
||||||
if (u32CurrPbStatus != PB_STA_DONE)
|
if (u32CurrPbStatus != PB_STA_DONE)
|
||||||
{
|
{
|
||||||
|
@ -1270,7 +1270,7 @@ static void play_video(lv_obj_t *obj)
|
||||||
}
|
}
|
||||||
if(PLB_ST_PLAY_MOV == g_PlbData.State)
|
if(PLB_ST_PLAY_MOV == g_PlbData.State)
|
||||||
{
|
{
|
||||||
printf("now stop play the video.\n");
|
printf("now move play\n");
|
||||||
// g_PlbData.State = PLB_ST_FULL;
|
// g_PlbData.State = PLB_ST_FULL;
|
||||||
// lv_plugin_img_set_src(image_play_scr_uiflowplay, LV_PLUGIN_IMG_ID_SF_STOP);
|
// lv_plugin_img_set_src(image_play_scr_uiflowplay, LV_PLUGIN_IMG_ID_SF_STOP);
|
||||||
// lv_label_set_text_fmt(label_playtime_scr_uiflowplay, "%02d:%02d", 0, 0);
|
// lv_label_set_text_fmt(label_playtime_scr_uiflowplay, "%02d:%02d", 0, 0);
|
||||||
|
@ -2026,6 +2026,7 @@ static void UIFlowPlay_Key(lv_obj_t* obj, uint32_t key)
|
||||||
{
|
{
|
||||||
UINT32 uiFileSeq;
|
UINT32 uiFileSeq;
|
||||||
PB_GetParam(PBPRMID_CURR_FILESEQ, &uiFileSeq);
|
PB_GetParam(PBPRMID_CURR_FILESEQ, &uiFileSeq);
|
||||||
|
//FlowPB_SetMovPlayTime(0);
|
||||||
if (0 != uiFileSeq)
|
if (0 != uiFileSeq)
|
||||||
{
|
{
|
||||||
stop_play();
|
stop_play();
|
||||||
|
@ -2037,6 +2038,7 @@ static void UIFlowPlay_Key(lv_obj_t* obj, uint32_t key)
|
||||||
{
|
{
|
||||||
UINT32 uiFileSeq;
|
UINT32 uiFileSeq;
|
||||||
PB_GetParam(PBPRMID_CURR_FILESEQ, &uiFileSeq);
|
PB_GetParam(PBPRMID_CURR_FILESEQ, &uiFileSeq);
|
||||||
|
//FlowPB_SetMovPlayTime(0);
|
||||||
if (0 != uiFileSeq)
|
if (0 != uiFileSeq)
|
||||||
{
|
{
|
||||||
stop_play();
|
stop_play();
|
||||||
|
|
|
@ -327,15 +327,16 @@ void message_box_wrnmsg_OnKey(lv_obj_t* msgbox, uint32_t key)
|
||||||
{
|
{
|
||||||
case LV_USER_KEY_MENU:
|
case LV_USER_KEY_MENU:
|
||||||
// message_box_wrnmsg_OnKeyMenu(msgbox);
|
// message_box_wrnmsg_OnKeyMenu(msgbox);
|
||||||
|
break;
|
||||||
|
//#NT#2023/11/14#Eric - begin
|
||||||
|
//#NT#Support IVOT_N12144_CO-148_A
|
||||||
|
case LV_KEY_ENTER:
|
||||||
|
// UIFlowWrnMsg_CloseScr(NVTEVT_NULL);
|
||||||
if(evt != NVTEVT_NULL){
|
if(evt != NVTEVT_NULL){
|
||||||
UIFlowWrnMsg_CloseScr(evt);
|
UIFlowWrnMsg_CloseScr(evt);
|
||||||
}else{
|
}else{
|
||||||
UIFlowWrnMsg_CloseScr(NVTEVT_NULL);
|
UIFlowWrnMsg_CloseScr(NVTEVT_NULL);
|
||||||
}
|
}
|
||||||
//#NT#2023/11/14#Eric - begin
|
|
||||||
//#NT#Support IVOT_N12144_CO-148_A
|
|
||||||
case LV_KEY_ENTER:
|
|
||||||
// UIFlowWrnMsg_CloseScr(NVTEVT_NULL);
|
|
||||||
break;
|
break;
|
||||||
//#NT#2023/11/14#Eric - end
|
//#NT#2023/11/14#Eric - end
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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())
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
75
rtos/code/driver/na51089/include/sf_sd_common.h
Executable file
75
rtos/code/driver/na51089/include/sf_sd_common.h
Executable 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
|
|
@ -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];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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