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/SysStrg_CB.c \
 | 
			
		||||
	./SrcCode/System/SysStrg_Exe.c \
 | 
			
		||||
	./SrcCode/System/SF_SysStrgMng.c \
 | 
			
		||||
	./SrcCode/System/SysSensor_Exe.c \
 | 
			
		||||
	./SrcCode/System/SysFW_Upgrade_Strg_Obj.c \
 | 
			
		||||
	./SrcCode/System/SysFW_Upgrade.c \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -178,4 +178,4 @@ void GxStrg_SetStrgMountStatus(UINT32 DevID, BOOL bMountOK)
 | 
			
		|||
    } else {
 | 
			
		||||
        g_LnxStrgStatus[DevID].IsFormatted = FALSE;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -346,4 +346,4 @@ INT32 GxStrgLnx_Det(UINT32 DevId)
 | 
			
		|||
	} else {
 | 
			
		||||
		return DET_CARD_REMOVED;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -830,7 +830,7 @@
 | 
			
		|||
// 2. enable FS_DX_TYPE_DRIVE_B as DX_TYPE_CARD2
 | 
			
		||||
// 3. enable FS_MULTI_STRG_FUNC
 | 
			
		||||
// 4. NETWORK = NETWORK_NONE (Both uITRON and eCos)
 | 
			
		||||
#define FS_MULTI_STRG_FUNC              DISABLE
 | 
			
		||||
#define FS_MULTI_STRG_FUNC              ENABLE
 | 
			
		||||
//MULTI_DRIVE
 | 
			
		||||
#if defined(_EMBMEM_EMMC_) && (FS_MULTI_STRG_FUNC==DISABLE)
 | 
			
		||||
#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_param_struct.h>
 | 
			
		||||
#include "sf_sd_common.h"
 | 
			
		||||
#include "SF_SysStrgMng.h"
 | 
			
		||||
#endif
 | 
			
		||||
void Strg_CB(UINT32 event, UINT32 param1, UINT32 param2);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -52,7 +53,8 @@ void Strg_CB(UINT32 event, UINT32 param1, UINT32 param2)
 | 
			
		|||
#if HUNTING_CAMERA_MCU == ENABLE	
 | 
			
		||||
    SF_MESSAGE_BUF_S stMessageBuf = {0};
 | 
			
		||||
#endif
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
	DBG_IND("Strg_CB: strg_id = %d, status = %d\n", param1, param2);
 | 
			
		||||
	switch (event) {
 | 
			
		||||
// part-1
 | 
			
		||||
	case SYSTEM_CB_CONFIG:
 | 
			
		||||
| 
						 | 
				
			
			@ -175,6 +177,8 @@ void Strg_CB(UINT32 event, UINT32 param1, UINT32 param2)
 | 
			
		|||
        stMessageBuf.arg3 = param2;
 | 
			
		||||
        stMessageBuf.cmdId = CMD_SD;
 | 
			
		||||
        sf_com_message_send_to_app(&stMessageBuf);
 | 
			
		||||
		printf("strg_cb send MOUNT! dev_id = %d\n", param1);
 | 
			
		||||
		SF_StrgRegister(&stMessageBuf);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
	
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -83,6 +83,8 @@
 | 
			
		|||
#include "userlog.h"
 | 
			
		||||
#endif
 | 
			
		||||
//#include "wdt.h"
 | 
			
		||||
#include "SF_SysStrgMng.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if defined(_EMBMEM_SPI_NOR_)
 | 
			
		||||
#define MAX_BLK_PER_SEC         128
 | 
			
		||||
| 
						 | 
				
			
			@ -329,6 +331,7 @@ static UINT32 gLogFile_Buff2_Size = sizeof(gLogFile_Buff2);
 | 
			
		|||
void System_OnStrgInit_FS(void)
 | 
			
		||||
{
 | 
			
		||||
	CHAR mount_path[KFS_LONGNAME_PATH_MAX_LENG] = {0};
 | 
			
		||||
	
 | 
			
		||||
	TM_BOOT_BEGIN("sdio", "init_fs");
 | 
			
		||||
	{
 | 
			
		||||
		MEM_RANGE Pool;
 | 
			
		||||
| 
						 | 
				
			
			@ -346,6 +349,8 @@ void System_OnStrgInit_FS(void)
 | 
			
		|||
#endif
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	SF_StrgInit();// 初始化sf_mmc设备Obj
 | 
			
		||||
 | 
			
		||||
#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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -420,7 +425,6 @@ void System_OnStrgInit_FS(void)
 | 
			
		|||
		cfg.LogBuffSize2 = gLogFile_Buff2_Size;
 | 
			
		||||
		#endif
 | 
			
		||||
		LogFile_Config(&cfg);
 | 
			
		||||
        DBG_DUMP("LogFile_Config ...\n");
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -526,6 +530,8 @@ void System_OnStrgExit_FS(void)
 | 
			
		|||
    #endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	SF_StrgUnInit();// 反初始化sf_mmc设备Obj
 | 
			
		||||
	// unmount file system
 | 
			
		||||
	GxStrg_CloseDevice(0);
 | 
			
		||||
#if (FS_MULTI_STRG_FUNC)
 | 
			
		||||
| 
						 | 
				
			
			@ -734,7 +740,6 @@ INT32 System_Set_Storage_Act_Drive(char drive)
 | 
			
		|||
{
 | 
			
		||||
	DCF_HANDLE act_handle = -1;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	for(int i=0  ; i<STRG_NUM ; i++)
 | 
			
		||||
	{
 | 
			
		||||
		if(drive == g_strg_mapping_table[i].drive){
 | 
			
		||||
| 
						 | 
				
			
			@ -749,17 +754,20 @@ INT32 System_Set_Storage_Act_Drive(char drive)
 | 
			
		|||
	}
 | 
			
		||||
 | 
			
		||||
	g_dcf_hdl_act = act_handle;
 | 
			
		||||
 | 
			
		||||
	DBG_WRN("DCF_ACT_HANDLE, %d\n", act_handle);
 | 
			
		||||
	return E_OK;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
DCF_HANDLE System_Get_DCF_Handle(void)
 | 
			
		||||
{
 | 
			
		||||
	if(g_dcf_hdl_act == -1){
 | 
			
		||||
		DBG_WRN("g_dcf_hdl_act is not set\n");
 | 
			
		||||
	SF_ST_MMC_DEV *mmc_dev = SF_StrgCheckWorkableDev();
 | 
			
		||||
	if(mmc_dev->dcf_handle < 0)
 | 
			
		||||
	{
 | 
			
		||||
		DBG_ERR("No MMC_Dev Can use!\n");
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return g_dcf_hdl_act;
 | 
			
		||||
	DBG_WRN("DCF_GET_HANDLE, %d\n", mmc_dev->dcf_handle);
 | 
			
		||||
	return mmc_dev->dcf_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";
 | 
			
		||||
    #endif
 | 
			
		||||
 | 
			
		||||
	DBG_DUMP("System_OnStrgInsert: strg_id = %d\n", strg_id);
 | 
			
		||||
 | 
			
		||||
	if (m_BootState_Drive[strg_id] != BOOT_CARD_STATE_UNKNOWN) {
 | 
			
		||||
		if (strg_id == 0) {
 | 
			
		||||
#if(IPCAM_FUNC==DISABLE && SDHOTPLUG_FUNCTION == DISABLE)
 | 
			
		||||
| 
						 | 
				
			
			@ -844,7 +854,8 @@ INT32 System_OnStrgInsert(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
 | 
			
		|||
			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);
 | 
			
		||||
		if (GxStrg_OpenDevice(strg_id, pStrgDev) != TRUE) {
 | 
			
		||||
			char *pDxName = "unknown";
 | 
			
		||||
| 
						 | 
				
			
			@ -895,18 +906,24 @@ INT32 System_OnStrgInsert(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
 | 
			
		|||
		 * init dcf act handle with sd card
 | 
			
		||||
		 *****************************************************************/
 | 
			
		||||
		if(strg_id == STRG_ID_SD){
 | 
			
		||||
			DBG_WRN("sd act\n");
 | 
			
		||||
			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
 | 
			
		||||
 | 
			
		||||
	if(strg_id == STRG_ID_SD){
 | 
			
		||||
		if (GxStrg_GetDeviceCtrl(strg_id, CARD_READONLY)) {
 | 
			
		||||
			System_SetState(SYS_STATE_CARD, CARD_LOCKED);
 | 
			
		||||
			DBG_IND("Card Locked\r\n");
 | 
			
		||||
			DBG_WRN("Card Locked\r\n");
 | 
			
		||||
		} else {
 | 
			
		||||
			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
 | 
			
		||||
 | 
			
		||||
	//DBG_IND("System_OnStrgAttach: strg_id = %d\n", strg_id);
 | 
			
		||||
	if (m_GxStrgType == FST_FS_TYPE_LINUX) {
 | 
			
		||||
		//Do Nothing
 | 
			
		||||
	} 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())){
 | 
			
		||||
                stMessageBuf.arg1 = STRG_CB_MOUNT_FINISH;
 | 
			
		||||
                stMessageBuf.arg2 = result;
 | 
			
		||||
                stMessageBuf.arg2 = strg_id;//result;
 | 
			
		||||
                stMessageBuf.arg3 = FST_STA_OK;
 | 
			
		||||
                stMessageBuf.cmdId = CMD_SD;
 | 
			
		||||
                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);
 | 
			
		||||
            }
 | 
			
		||||
        #endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1140,7 +1160,7 @@ INT32 System_OnStrgAttach(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
 | 
			
		|||
 | 
			
		||||
			logOpenParm.maxFileNum = maxFileNum;
 | 
			
		||||
			logOpenParm.maxFileSize = maxFileSize;
 | 
			
		||||
			logOpenParm.isPreAllocAllFiles = FALSE;
 | 
			
		||||
			logOpenParm.isPreAllocAllFiles = TRUE;
 | 
			
		||||
			#if defined(__FREERTOS)
 | 
			
		||||
			logOpenParm.isSaveLastTimeSysErrLog  = wdt_getResetNum()>0 ? TRUE : FALSE;
 | 
			
		||||
			#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))){
 | 
			
		||||
            stMessageBuf.arg1 = CMD_SD_STRG_CB_UNMOUNT_FINISH;
 | 
			
		||||
			stMessageBuf.arg2 = strg_id;
 | 
			
		||||
            stMessageBuf.cmdId = CMD_SD;
 | 
			
		||||
            sf_com_message_send_to_app(&stMessageBuf);
 | 
			
		||||
			SF_StrgRegister(&stMessageBuf);
 | 
			
		||||
			printf("System_OnStrgAttach send UNMOUNT! dev_id = %d\n", strg_id);
 | 
			
		||||
        }
 | 
			
		||||
    #endif
 | 
			
		||||
#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"
 | 
			
		||||
#if (USE_DCF == ENABLE)
 | 
			
		||||
#include "DCF.h"
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
#include "Utility/SwTimer.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -861,9 +862,103 @@ UINT32 BackgroundFormat(void)
 | 
			
		|||
 | 
			
		||||
UINT32 BackgroundFormatEmmc(void)
 | 
			
		||||
{
 | 
			
		||||
	printf(" BackgroundFormatEmmc\n ");
 | 
			
		||||
	return TRUE;
 | 
			
		||||
	int ret;
 | 
			
		||||
	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)
 | 
			
		||||
{
 | 
			
		||||
	int ret;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,6 +39,8 @@
 | 
			
		|||
#if (USE_DCF == ENABLE)
 | 
			
		||||
#include "DCF.h"
 | 
			
		||||
#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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -690,7 +692,7 @@ UINT32 PhotoExe_GetExpectSize_RhoBRCrtl(UINT32 ImgIdx, BOOL bPrimaryOnly)
 | 
			
		|||
UINT32 PhotoExe_GetFreePicNum(void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	UINT64              uiFreeSpace;
 | 
			
		||||
	UINT64              uiFreeSpace = 0;
 | 
			
		||||
	UINT32              uiMaxImageSize;
 | 
			
		||||
	UINT32              freeImgNum;
 | 
			
		||||
	// UINT32              reserveSize = 0x80000; //  500KB
 | 
			
		||||
| 
						 | 
				
			
			@ -698,10 +700,24 @@ UINT32 PhotoExe_GetFreePicNum(void)
 | 
			
		|||
	UINT32              CaptureSize;
 | 
			
		||||
	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)
 | 
			
		||||
	reserveSize += FS_ALIGN_RESERVED_SIZE;
 | 
			
		||||
#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);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 __DBGFLT__          "*" //*=All, [mark]=CustomClass
 | 
			
		||||
#include <kwrap/debug.h>
 | 
			
		||||
#include "SF_SysStrgMng.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void UIStorageCheck_AllSize(UINT64 *uiTotal, UINT64 *uiRemain)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -56,6 +58,12 @@ void UIStorageCheck_ResetFileReachMax(void)
 | 
			
		|||
//#NT#Add check for folder attribute
 | 
			
		||||
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;
 | 
			
		||||
	useFileDB = UI_GetData(FL_IsUseFileDB);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -66,9 +74,9 @@ static BOOL check_CurrDir_writable(void)
 | 
			
		|||
		UINT32 CurrDirID;
 | 
			
		||||
		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 (DCF_GetDirInfo(CurrDirID, &dirinfo)) {
 | 
			
		||||
			if (DCF_GetDirInfoEx(mmc_dev->dcf_handle, CurrDirID, &dirinfo)) {
 | 
			
		||||
				if (M_IsReadOnly(dirinfo.ucAttrib)) {
 | 
			
		||||
					DBG_IND("DCF folder %d is READONLY.\r\n", CurrDirID);
 | 
			
		||||
					return FALSE;
 | 
			
		||||
| 
						 | 
				
			
			@ -90,18 +98,32 @@ static BOOL check_CurrDir_writable(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;
 | 
			
		||||
	useFileDB = UI_GetData(FL_IsUseFileDB);
 | 
			
		||||
	if (useFileDB) {
 | 
			
		||||
		return TRUE;
 | 
			
		||||
	} else {
 | 
			
		||||
		char   DCIM_DIR[9] = "A:\\DCIM";
 | 
			
		||||
 | 
			
		||||
		INT32 uiStatus = 0;
 | 
			
		||||
		UINT8  ucAttrib = 0;
 | 
			
		||||
		BOOL   ret = FALSE;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		uiStatus = FileSys_GetAttrib(DCIM_DIR, &ucAttrib);
 | 
			
		||||
		if(mmc_dev->dev_type == MMC_DEV_SD)
 | 
			
		||||
		{
 | 
			
		||||
			uiStatus = FileSys_GetAttrib("A:\\DCIM", &ucAttrib);
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			uiStatus = FileSys_GetAttrib("B:\\DCIM", &ucAttrib);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		if (uiStatus == FST_STA_OK) {
 | 
			
		||||
			if (ucAttrib & FS_ATTRIB_DIRECTORY) {
 | 
			
		||||
				if (System_GetState(SYS_STATE_CARD)  == CARD_REMOVED) {
 | 
			
		||||
| 
						 | 
				
			
			@ -127,11 +149,90 @@ BOOL UIStorageCheck_DCIMWritable(void)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
 | 
			
		||||
static BOOL UIStrgCheckFolderFull(DCF_HANDLE DcfHandle)
 | 
			
		||||
{
 | 
			
		||||
#if (USE_DCF == ENABLE)
 | 
			
		||||
	BOOL   bIsFileReachMax = FALSE;
 | 
			
		||||
	UINT32     DCF_DirId = 0, DCF_FileId = 0;
 | 
			
		||||
	BOOL   ret;
 | 
			
		||||
 | 
			
		||||
	if (System_GetState(SYS_STATE_FS) == FS_NUM_FULL) {
 | 
			
		||||
		DBG_ERR("UI_Validate_Storage: DIR:999 is existing!\r\n");
 | 
			
		||||
		return TRUE;
 | 
			
		||||
	}
 | 
			
		||||
	bIsFileReachMax = FALSE;
 | 
			
		||||
 | 
			
		||||
	ret = DCF_GetNextIDEx(DcfHandle, &DCF_DirId, &DCF_FileId);
 | 
			
		||||
	if (ret && DCF_DirId == 0 && DCF_FileId == 0) {
 | 
			
		||||
		bIsFileReachMax = TRUE;
 | 
			
		||||
		DBG_IND("Next dir_id   =%d,   file_id = %d \r\n", DCF_DirId, DCF_FileId);
 | 
			
		||||
	} else if (ret && DCF_GetDBInfoEx(DcfHandle, DCF_INFO_IS_9999) == TRUE)
 | 
			
		||||
	{
 | 
			
		||||
		bIsFileReachMax = TRUE;
 | 
			
		||||
	}
 | 
			
		||||
		return bIsFileReachMax;
 | 
			
		||||
#else
 | 
			
		||||
        return FALSE;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static BOOL UIStrgCheckFull(UINT32 *pFreeCount)
 | 
			
		||||
{
 | 
			
		||||
#if (PHOTO_MODE==ENABLE)
 | 
			
		||||
	UINT32 uiCountTmp = 0;
 | 
			
		||||
#endif
 | 
			
		||||
#if (PHOTO_MODE==ENABLE)
 | 
			
		||||
	uiCountTmp = PhotoExe_GetFreePicNum();
 | 
			
		||||
	DBG_IND("uiCountTmp = %d, pFreeCount=%d\r\n",uiCountTmp,pFreeCount);
 | 
			
		||||
	if (pFreeCount) {
 | 
			
		||||
		*pFreeCount = uiCountTmp;
 | 
			
		||||
	}
 | 
			
		||||
	if (uiCountTmp == 0) {
 | 
			
		||||
		return TRUE;
 | 
			
		||||
	} else {
 | 
			
		||||
		return FALSE;
 | 
			
		||||
	}
 | 
			
		||||
#else
 | 
			
		||||
	return FALSE;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static BOOL UIStrgCheckErr(MMC_DEV_TYPE dev_id)
 | 
			
		||||
{
 | 
			
		||||
	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
 | 
			
		||||
		|| System_GetState(SYS_STATE_FS) == FS_UNKNOWN_FORMAT
 | 
			
		||||
		|| System_GetState(SYS_STATE_FS) == FS_UNFORMATTED
 | 
			
		||||
		//#NT#2016/12/06#Niven Cho -begin
 | 
			
		||||
		//#NT#MULTI_DRIVE
 | 
			
		||||
		|| System_GetState(SYS_STATE_CARD)  == CARD_REMOVED)
 | 
			
		||||
		//#NT#2016/12/06#Niven Cho -end
 | 
			
		||||
		//|| UIStorageCheck_Error() )
 | 
			
		||||
	{
 | 
			
		||||
		DBG_ERR("UIStorageCheck: %d Card Error\r\n", System_GetState(SYS_STATE_FS));
 | 
			
		||||
		return TRUE;
 | 
			
		||||
	} else {
 | 
			
		||||
		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);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -142,49 +243,11 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
 | 
			
		|||
		if (useFileDB) {
 | 
			
		||||
			return FALSE;
 | 
			
		||||
		} else {
 | 
			
		||||
#if (USE_DCF == ENABLE)
 | 
			
		||||
			BOOL   bIsFileReachMax = FALSE;
 | 
			
		||||
			UINT32     DCF_DirId = 0, DCF_FileId = 0;
 | 
			
		||||
			BOOL   ret;
 | 
			
		||||
 | 
			
		||||
			if (System_GetState(SYS_STATE_FS) == FS_NUM_FULL) {
 | 
			
		||||
				DBG_ERR("UI_Validate_Storage: DIR:999 is existing!\r\n");
 | 
			
		||||
				return TRUE;
 | 
			
		||||
			}
 | 
			
		||||
			bIsFileReachMax = FALSE;
 | 
			
		||||
			//#NT#2011/03/28#Lincy Lin -begin
 | 
			
		||||
			//#NT#fix delete the 9999th file in 999 folder cause capture not save
 | 
			
		||||
			ret = DCF_GetNextID(&DCF_DirId, &DCF_FileId);
 | 
			
		||||
			if (ret && DCF_DirId == 0 && DCF_FileId == 0) {
 | 
			
		||||
				bIsFileReachMax = TRUE;
 | 
			
		||||
				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)
 | 
			
		||||
				//#NT#2011/03/28#Lincy Lin -end
 | 
			
		||||
			{
 | 
			
		||||
				bIsFileReachMax = TRUE;
 | 
			
		||||
			}
 | 
			
		||||
			return bIsFileReachMax;
 | 
			
		||||
#else
 | 
			
		||||
            return FALSE;
 | 
			
		||||
#endif
 | 
			
		||||
			UIStrgCheckFolderFull(mmc_dev->dcf_handle);
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case STORAGE_CHECK_FULL:
 | 
			
		||||
#if (PHOTO_MODE==ENABLE)
 | 
			
		||||
		uiCountTmp = PhotoExe_GetFreePicNum();
 | 
			
		||||
		DBG_IND("uiCountTmp = %d, pFreeCount=%d\r\n",uiCountTmp,pFreeCount);
 | 
			
		||||
		if (pFreeCount) {
 | 
			
		||||
			*pFreeCount = uiCountTmp;
 | 
			
		||||
		}
 | 
			
		||||
		if (uiCountTmp == 0) {
 | 
			
		||||
			return TRUE;
 | 
			
		||||
		} else {
 | 
			
		||||
			return FALSE;
 | 
			
		||||
		}
 | 
			
		||||
#else
 | 
			
		||||
		return FALSE;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		UIStrgCheckFull(pFreeCount);
 | 
			
		||||
		break;
 | 
			
		||||
	case STORAGE_CHECK_LOCKED:
 | 
			
		||||
		if (System_GetState(SYS_STATE_CARD)  == CARD_LOCKED) {
 | 
			
		||||
| 
						 | 
				
			
			@ -195,21 +258,7 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
 | 
			
		|||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case STORAGE_CHECK_ERROR:
 | 
			
		||||
		FileSys_WaitFinish();
 | 
			
		||||
		if (System_GetState(SYS_STATE_FS) == FS_DISK_ERROR
 | 
			
		||||
			|| System_GetState(SYS_STATE_FS) == FS_UNKNOWN_FORMAT
 | 
			
		||||
			|| System_GetState(SYS_STATE_FS) == FS_UNFORMATTED
 | 
			
		||||
			//#NT#2016/12/06#Niven Cho -begin
 | 
			
		||||
			//#NT#MULTI_DRIVE
 | 
			
		||||
			|| System_GetState(SYS_STATE_CARD)  == CARD_REMOVED)
 | 
			
		||||
			//#NT#2016/12/06#Niven Cho -end
 | 
			
		||||
			//|| UIStorageCheck_Error() )
 | 
			
		||||
		{
 | 
			
		||||
			DBG_ERR("UIStorageCheck: %d Card Error\r\n", System_GetState(SYS_STATE_FS));
 | 
			
		||||
			return TRUE;
 | 
			
		||||
		} else {
 | 
			
		||||
			return FALSE;
 | 
			
		||||
		}
 | 
			
		||||
		UIStrgCheckErr(mmc_dev->dev_type);
 | 
			
		||||
		break;
 | 
			
		||||
	case STORAGE_CHECK_DCIM_READONLY:
 | 
			
		||||
		if ((UIStorageCheck_DCIMWritable() == FALSE)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -7,7 +7,7 @@
 | 
			
		|||
            "add buttons": [
 | 
			
		||||
            ],
 | 
			
		||||
            "animation time": 0,
 | 
			
		||||
            "button's text": "NO,YES,",
 | 
			
		||||
            "button's text": "YES,NO,",
 | 
			
		||||
            "class": "lv_msgbox",
 | 
			
		||||
            "click": true,
 | 
			
		||||
            "content": "",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1833,7 +1833,7 @@
 | 
			
		|||
                "x": 0,
 | 
			
		||||
                "y": 98
 | 
			
		||||
            },
 | 
			
		||||
            "hidden": false,
 | 
			
		||||
            "hidden": true,
 | 
			
		||||
            "locked": false,
 | 
			
		||||
            "long mode": "Roll",
 | 
			
		||||
            "name": "label_sim",
 | 
			
		||||
| 
						 | 
				
			
			@ -1891,7 +1891,7 @@
 | 
			
		|||
                "x": 0,
 | 
			
		||||
                "y": 119
 | 
			
		||||
            },
 | 
			
		||||
            "hidden": false,
 | 
			
		||||
            "hidden": true,
 | 
			
		||||
            "locked": false,
 | 
			
		||||
            "long mode": "Roll",
 | 
			
		||||
            "name": "label_line",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -222,7 +222,7 @@ lv_obj_t* UIFlowMenuCommonConfirm_create(){
 | 
			
		|||
	lv_obj_set_drag(message_box_1, false);
 | 
			
		||||
	lv_obj_set_pos(message_box_1, 55, 53);
 | 
			
		||||
	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_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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -390,6 +390,7 @@ void UIFlowMenuCommonConfirm_OnOpen(lv_obj_t* obj)
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
	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)
 | 
			
		||||
		return;
 | 
			
		||||
	if (*value == 1) {
 | 
			
		||||
	if (*value == 0) {
 | 
			
		||||
 | 
			
		||||
		// const char* msgbox_text = lv_msgbox_get_text(obj);
 | 
			
		||||
		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(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_set_hidden(label_sim, false);
 | 
			
		||||
	lv_obj_set_hidden(label_sim, true);
 | 
			
		||||
	lv_obj_set_click(label_sim, false);
 | 
			
		||||
	lv_obj_set_drag(label_sim, false);
 | 
			
		||||
	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(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_set_hidden(label_line, false);
 | 
			
		||||
	lv_obj_set_hidden(label_line, true);
 | 
			
		||||
	lv_obj_set_click(label_line, false);
 | 
			
		||||
	lv_obj_set_drag(label_line, false);
 | 
			
		||||
	lv_plugin_label_allocate_ext_attr(label_line);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,6 +22,7 @@
 | 
			
		|||
#include "sf_common.h"
 | 
			
		||||
#if (USE_DCF == ENABLE)
 | 
			
		||||
#include "DCF.h"
 | 
			
		||||
#include "SF_SysStrgMng.h"
 | 
			
		||||
#endif
 | 
			
		||||
#if HUNTING_CAMERA_MCU == ENABLE
 | 
			
		||||
#include <sf_inc.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -673,6 +674,12 @@ static void update_camera_message(void)
 | 
			
		|||
	UIMenuStoreInfo *puiPara = sf_ui_para_get();
 | 
			
		||||
	// 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)
 | 
			
		||||
    {
 | 
			
		||||
        case PHOTO_SIZE_40M:
 | 
			
		||||
| 
						 | 
				
			
			@ -719,21 +726,24 @@ static void update_camera_message(void)
 | 
			
		|||
        default:
 | 
			
		||||
            break;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	#if 1
 | 
			
		||||
	if (System_GetState(SYS_STATE_FS) == FS_INIT_OK)
 | 
			
		||||
	{
 | 
			
		||||
		UINT32 cardStatus = System_GetState(SYS_STATE_CARD);
 | 
			
		||||
		if (cardStatus != CARD_REMOVED)
 | 
			
		||||
		{
 | 
			
		||||
			if (g_SysStrg_Chg)
 | 
			
		||||
			{
 | 
			
		||||
				static int cnt = 0;
 | 
			
		||||
				if(cnt++<3){
 | 
			
		||||
			//if (g_SysStrg_Chg)
 | 
			
		||||
			//{
 | 
			
		||||
				//static int cnt = 0;
 | 
			
		||||
				//if(cnt++<3){
 | 
			
		||||
					// lv_label_set_text(label_6_scr_uiflowphoto, "wait");
 | 
			
		||||
				}else{
 | 
			
		||||
					g_SysStrg_Chg = false;
 | 
			
		||||
					cnt = 0;
 | 
			
		||||
				}
 | 
			
		||||
			} else if (UIStorageCheck(STORAGE_CHECK_ERROR, NULL) == TRUE)
 | 
			
		||||
				//}else{
 | 
			
		||||
					//g_SysStrg_Chg = false;
 | 
			
		||||
					//cnt = 0;
 | 
			
		||||
				//}
 | 
			
		||||
			//} else 
 | 
			
		||||
			if (UIStorageCheck(STORAGE_CHECK_ERROR, NULL) == TRUE)
 | 
			
		||||
			{
 | 
			
		||||
				// lv_label_set_text(label_6_scr_uiflowphoto, "SD CARD ERROR");
 | 
			
		||||
			} 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);
 | 
			
		||||
		lv_label_set_text(label_6_scr_uiflowphoto, "No SD Card");
 | 
			
		||||
	}
 | 
			
		||||
	#endif
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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]);
 | 
			
		||||
		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:
 | 
			
		||||
		break;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -542,7 +542,7 @@ static void UIFlowPlay_UpdatePlaytime(BOOL bShow)
 | 
			
		|||
    {
 | 
			
		||||
        UINT32 rec_sec = FlowPB_GetMovPlayTime();
 | 
			
		||||
	    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)
 | 
			
		||||
| 
						 | 
				
			
			@ -1223,7 +1223,7 @@ static void play_video(lv_obj_t *obj)
 | 
			
		|||
            printf("now play the video.\n");
 | 
			
		||||
	        lv_plugin_img_set_src(image_play_scr_uiflowplay, LV_PLUGIN_IMG_ID_SF_PLAY);
 | 
			
		||||
            UINT32 u32CurrPbStatus = 0;
 | 
			
		||||
 | 
			
		||||
            FlowPB_SetMovPlayTime(0);
 | 
			
		||||
            PB_GetParam(PBPRMID_PLAYBACK_STATUS, &u32CurrPbStatus);
 | 
			
		||||
            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)
 | 
			
		||||
        {
 | 
			
		||||
            printf("now stop play the video.\n");
 | 
			
		||||
            printf("now move play\n");
 | 
			
		||||
            // g_PlbData.State        = PLB_ST_FULL;
 | 
			
		||||
	        // 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);
 | 
			
		||||
| 
						 | 
				
			
			@ -2026,6 +2026,7 @@ static void UIFlowPlay_Key(lv_obj_t* obj, uint32_t key)
 | 
			
		|||
    {
 | 
			
		||||
    UINT32 uiFileSeq;
 | 
			
		||||
    PB_GetParam(PBPRMID_CURR_FILESEQ, &uiFileSeq);
 | 
			
		||||
    //FlowPB_SetMovPlayTime(0);
 | 
			
		||||
    if (0 != uiFileSeq)
 | 
			
		||||
    {
 | 
			
		||||
        stop_play();
 | 
			
		||||
| 
						 | 
				
			
			@ -2037,6 +2038,7 @@ static void UIFlowPlay_Key(lv_obj_t* obj, uint32_t key)
 | 
			
		|||
    {
 | 
			
		||||
    UINT32 uiFileSeq;
 | 
			
		||||
    PB_GetParam(PBPRMID_CURR_FILESEQ, &uiFileSeq);
 | 
			
		||||
    //FlowPB_SetMovPlayTime(0);
 | 
			
		||||
    if (0 != uiFileSeq)
 | 
			
		||||
    {
 | 
			
		||||
        stop_play();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -327,15 +327,16 @@ void message_box_wrnmsg_OnKey(lv_obj_t* msgbox, uint32_t key)
 | 
			
		|||
	{
 | 
			
		||||
	case LV_USER_KEY_MENU:
 | 
			
		||||
		// 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){
 | 
			
		||||
            UIFlowWrnMsg_CloseScr(evt);
 | 
			
		||||
        }else{
 | 
			
		||||
            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;
 | 
			
		||||
	//#NT#2023/11/14#Eric - end
 | 
			
		||||
	default:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -595,7 +595,8 @@ static SINT32 sf_app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf)
 | 
			
		|||
	UINT32 status;
 | 
			
		||||
    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)
 | 
			
		||||
	{
 | 
			
		||||
        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_Benchmark(parm1,parm2,parm3) FileSys_BenchmarkEx('A', parm1,parm2,parm3)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define fs_getcwd FileSys_GetCwd
 | 
			
		||||
#define fs_setcwd FileSys_SetCwd
 | 
			
		||||
#define fs_dir_getParent FileSys_GetParentDir
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,6 +43,7 @@
 | 
			
		|||
#include <io/gpio.h>
 | 
			
		||||
#include "UIInfo/UIInfo.h"
 | 
			
		||||
#include <FileSysTsk.h>
 | 
			
		||||
#include "sf_sd_common.h"
 | 
			
		||||
 | 
			
		||||
SF_CALLBACK_SD_CMD g_fpSd_Exist_CB = NULL;
 | 
			
		||||
static int formatSD = CMD_FORMAT_SD_ERR;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -948,8 +948,8 @@
 | 
			
		|||
#define SF_BASE_VERSION				"7MR5RCwDC05"
 | 
			
		||||
#define DCF_DIR_NAME					"MEDIA"   /* 100MEDIA */
 | 
			
		||||
#define DCF_FILE_NAME					"SYGW"    /* SYFW0001.JPG */
 | 
			
		||||
#define PHOTO_THUMB_PATH 				"A:\\THUMB\\"
 | 
			
		||||
#define MOVIE_THUMB_PATH				"A:\\THUMB\\"
 | 
			
		||||
#define PHOTO_THUMB_PATH 				":\\THUMB\\"
 | 
			
		||||
#define MOVIE_THUMB_PATH				":\\THUMB\\"
 | 
			
		||||
#define SF_SEND_LIST_DIR					"/mnt/sd/THUMB"
 | 
			
		||||
#define SF_THUMB_SEND_LIST             PHOTO_THUMB_PATH"send.list"
 | 
			
		||||
#define SF_THUMB_SEND_AUTO             PHOTO_THUMB_PATH"auto.list"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,6 +21,7 @@
 | 
			
		|||
#if (HUNTING_CAMERA_MODEL == ENABLE)
 | 
			
		||||
 | 
			
		||||
#include "IOCfg.h"
 | 
			
		||||
#include "sf_sd_common.h"
 | 
			
		||||
 | 
			
		||||
#define GPIO_CARD_INSERT_LEVEL			(FALSE)		// low active
 | 
			
		||||
#define MAX_OPENED_FILE_NUM 10
 | 
			
		||||
| 
						 | 
				
			
			@ -105,18 +106,20 @@ static void card_insert_job(void)
 | 
			
		|||
	// call the function to wait init finish
 | 
			
		||||
	FileSys_WaitFinishEx('A');
 | 
			
		||||
    FileSys_SetParamEx('A', FST_PARM_UPDATE_FSINFO , TRUE);
 | 
			
		||||
 | 
			
		||||
	SF_RtosStrgRegister(0, ret);
 | 
			
		||||
#if HUNTING_CAMERA_MCU == ENABLE
 | 
			
		||||
    if(TRUE == sf_check_card_full())
 | 
			
		||||
    {
 | 
			
		||||
    	DBG_WRN("ERR card full\r\n");
 | 
			
		||||
        fastboot_set_done(BOOT_INIT_FILESYSOK);
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
    //if(TRUE == sf_check_card_full())
 | 
			
		||||
    //{
 | 
			
		||||
    	//DBG_WRN("ERR card full\r\n");
 | 
			
		||||
        fastboot_set_done(BOOT_INIT_FILESYSOK);
 | 
			
		||||
    //}
 | 
			
		||||
    //else
 | 
			
		||||
    //{
 | 
			
		||||
        
 | 
			
		||||
        // sf_log_confg();
 | 
			
		||||
        // sf_log_open();
 | 
			
		||||
    }
 | 
			
		||||
    //}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if	FS_MULTI_STRG_FUNC
 | 
			
		||||
| 
						 | 
				
			
			@ -139,6 +142,7 @@ static void card_insert_job(void)
 | 
			
		|||
	}
 | 
			
		||||
	// call the function to wait init finish
 | 
			
		||||
	FileSys_WaitFinishEx('B');
 | 
			
		||||
	SF_RtosStrgRegister(1, ret);
 | 
			
		||||
//    FileSys_SetParamEx('B', FST_PARM_UPDATE_FSINFO , TRUE);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -159,6 +163,7 @@ static void sys_detect_card_task(void)
 | 
			
		|||
#if defined(_EMBMEM_EMMC_)
 | 
			
		||||
	THREAD_ENTRY();
 | 
			
		||||
 | 
			
		||||
	SF_RtosStrgInit();
 | 
			
		||||
	card_insert_job();
 | 
			
		||||
 | 
			
		||||
	THREAD_RETURN(0);
 | 
			
		||||
| 
						 | 
				
			
			@ -191,7 +196,7 @@ static void sys_detect_card_task(void)
 | 
			
		|||
 | 
			
		||||
		vTaskDelay(pdMS_TO_TICKS(1000));
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	SF_RtosStrgUnInit();
 | 
			
		||||
	THREAD_RETURN(0);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -64,6 +64,7 @@
 | 
			
		|||
#endif
 | 
			
		||||
#include "IOCfg.h"
 | 
			
		||||
#include <kwrap/cmdsys.h>
 | 
			
		||||
#include "sf_sd_common.h"
 | 
			
		||||
/**
 | 
			
		||||
	Flags for control
 | 
			
		||||
*/
 | 
			
		||||
| 
						 | 
				
			
			@ -859,12 +860,20 @@ static void MovieFast_OnRecStop(void)
 | 
			
		|||
 | 
			
		||||
static DCF_HANDLE MovieFast_Get_DCF_Handle(void)
 | 
			
		||||
{
 | 
			
		||||
#if	(FS_MULTI_STRG_FUNC)
 | 
			
		||||
//#if	(FS_MULTI_STRG_FUNC)
 | 
			
		||||
	/* check free space here */
 | 
			
		||||
	return g_dcf_hdl2;
 | 
			
		||||
#else
 | 
			
		||||
	return g_dcf_hdl;
 | 
			
		||||
#endif
 | 
			
		||||
	//return g_dcf_hdl2;
 | 
			
		||||
//#else
 | 
			
		||||
	//return g_dcf_hdl;
 | 
			
		||||
//#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)
 | 
			
		||||
| 
						 | 
				
			
			@ -1118,9 +1127,24 @@ static void MovieFast_UserEventCb(UINT32 id, MOVIE_USER_CB_EVENT event_id, UINT3
 | 
			
		|||
 | 
			
		||||
					char tmp[256] = {'\0'};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                    #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
 | 
			
		||||
					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");
 | 
			
		||||
| 
						 | 
				
			
			@ -1233,6 +1257,8 @@ THREAD_RETTYPE MovieFast_InitFileNamingThread(void *arg)
 | 
			
		|||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		SF_RtosStrgSetDcfHandle(MMC_DEV_SD,  g_dcf_hdl);
 | 
			
		||||
		SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl2);
 | 
			
		||||
 | 
			
		||||
        #if HUNTING_CAMERA_MCU == ENABLE
 | 
			
		||||
        if(TRUE != sf_is_card_full())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,6 +27,8 @@
 | 
			
		|||
#include "UIApp/AppDisp_PipView.h"
 | 
			
		||||
#include <vf_gfx.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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -615,17 +617,31 @@ UINT32 PhotoExe_GetExpectSize_RhoBRCrtl(UINT32 ImgIdx, BOOL bPrimaryOnly)
 | 
			
		|||
UINT32 PhotoExe_GetFreePicNum(void)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
	UINT64              uiFreeSpace;
 | 
			
		||||
	UINT64              uiFreeSpace = 0;
 | 
			
		||||
	UINT32              uiMaxImageSize;
 | 
			
		||||
	UINT32              freeImgNum;
 | 
			
		||||
	UINT32              reserveSize = 0x80000; //  500KB
 | 
			
		||||
	UINT32              CaptureSize;
 | 
			
		||||
	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)
 | 
			
		||||
	reserveSize += FS_ALIGN_RESERVED_SIZE;
 | 
			
		||||
#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);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -659,7 +675,6 @@ UINT32 PhotoExe_GetFreePicNum(void)
 | 
			
		|||
	return freeImgNum;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void PhotoExe_GetDispCord(URECT *dispCord)
 | 
			
		||||
{
 | 
			
		||||
	UINT32 ImageRatioIdx = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,8 @@
 | 
			
		|||
#include "FileSysTsk.h"
 | 
			
		||||
#include "PlaybackTsk.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
 | 
			
		||||
///////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
| 
						 | 
				
			
			@ -46,16 +48,22 @@ void UIStorageCheck_AllSize(UINT64 *uiTotal, UINT64 *uiRemain)
 | 
			
		|||
	(*uiRemain) /= (1024 * 1024);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static BOOL bIsFileReachMax = FALSE;
 | 
			
		||||
 | 
			
		||||
void UIStorageCheck_ResetFileReachMax(void)
 | 
			
		||||
{
 | 
			
		||||
	bIsFileReachMax = FALSE;
 | 
			
		||||
}
 | 
			
		||||
//#NT#2009/12/30#Ben Wang -begin
 | 
			
		||||
//#NT#Add check for folder attribute
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
	useFileDB = UI_GetData(FL_IsUseFileDB);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -66,9 +74,9 @@ static BOOL check_CurrDir_writable(void)
 | 
			
		|||
		UINT32 CurrDirID;
 | 
			
		||||
		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 (DCF_GetDirInfo(CurrDirID, &dirinfo)) {
 | 
			
		||||
			if (DCF_GetDirInfoEx(mmc_dev->dcf_handle, CurrDirID, &dirinfo)) {
 | 
			
		||||
				if (M_IsReadOnly(dirinfo.ucAttrib)) {
 | 
			
		||||
					DBG_IND("DCF folder %d is READONLY.\r\n", CurrDirID);
 | 
			
		||||
					return FALSE;
 | 
			
		||||
| 
						 | 
				
			
			@ -88,20 +96,34 @@ static BOOL check_CurrDir_writable(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;
 | 
			
		||||
	useFileDB = UI_GetData(FL_IsUseFileDB);
 | 
			
		||||
	if (useFileDB) {
 | 
			
		||||
		return TRUE;
 | 
			
		||||
	} else {
 | 
			
		||||
		char   DCIM_DIR[9] = "A:\\DCIM";
 | 
			
		||||
	} else {		
 | 
			
		||||
		INT32 uiStatus = 0;
 | 
			
		||||
		UINT8  ucAttrib = 0;
 | 
			
		||||
		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 (ucAttrib & FS_ATTRIB_DIRECTORY) {
 | 
			
		||||
				if (System_GetState(SYS_STATE_CARD)  == CARD_REMOVED) {
 | 
			
		||||
| 
						 | 
				
			
			@ -127,11 +149,90 @@ BOOL UIStorageCheck_DCIMWritable(void)
 | 
			
		|||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
 | 
			
		||||
static BOOL UIStrgCheckFolderFull(DCF_HANDLE DcfHandle)
 | 
			
		||||
{
 | 
			
		||||
#if (USE_DCF == ENABLE)
 | 
			
		||||
	BOOL   bIsFileReachMax = FALSE;
 | 
			
		||||
	UINT32     DCF_DirId = 0, DCF_FileId = 0;
 | 
			
		||||
	BOOL   ret;
 | 
			
		||||
 | 
			
		||||
	if (System_GetState(SYS_STATE_FS) == FS_NUM_FULL) {
 | 
			
		||||
		DBG_ERR("UI_Validate_Storage: DIR:999 is existing!\r\n");
 | 
			
		||||
		return TRUE;
 | 
			
		||||
	}
 | 
			
		||||
	bIsFileReachMax = FALSE;
 | 
			
		||||
 | 
			
		||||
	ret = DCF_GetNextIDEx(DcfHandle, &DCF_DirId, &DCF_FileId);
 | 
			
		||||
	if (ret && DCF_DirId == 0 && DCF_FileId == 0) {
 | 
			
		||||
		bIsFileReachMax = TRUE;
 | 
			
		||||
		DBG_IND("Next dir_id   =%d,   file_id = %d \r\n", DCF_DirId, DCF_FileId);
 | 
			
		||||
	} else if (ret && DCF_GetDBInfoEx(DcfHandle, DCF_INFO_IS_9999) == TRUE)
 | 
			
		||||
	{
 | 
			
		||||
		bIsFileReachMax = TRUE;
 | 
			
		||||
	}
 | 
			
		||||
		return bIsFileReachMax;
 | 
			
		||||
#else
 | 
			
		||||
        return FALSE;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static BOOL UIStrgCheckFull(UINT32 *pFreeCount)
 | 
			
		||||
{
 | 
			
		||||
#if (PHOTO_MODE==ENABLE)
 | 
			
		||||
	UINT32 uiCountTmp = 0;
 | 
			
		||||
#endif
 | 
			
		||||
#if (PHOTO_MODE==ENABLE)
 | 
			
		||||
	uiCountTmp = PhotoExe_GetFreePicNum();
 | 
			
		||||
	DBG_IND("uiCountTmp = %d, pFreeCount=%d\r\n",uiCountTmp,pFreeCount);
 | 
			
		||||
	if (pFreeCount) {
 | 
			
		||||
		*pFreeCount = uiCountTmp;
 | 
			
		||||
	}
 | 
			
		||||
	if (uiCountTmp == 0) {
 | 
			
		||||
		return TRUE;
 | 
			
		||||
	} else {
 | 
			
		||||
		return FALSE;
 | 
			
		||||
	}
 | 
			
		||||
#else
 | 
			
		||||
	return FALSE;
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static BOOL UIStrgCheckErr(MMC_DEV_TYPE dev_id)
 | 
			
		||||
{
 | 
			
		||||
	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
 | 
			
		||||
		|| System_GetState(SYS_STATE_FS) == FS_UNKNOWN_FORMAT
 | 
			
		||||
		|| System_GetState(SYS_STATE_FS) == FS_UNFORMATTED
 | 
			
		||||
		//#NT#2016/12/06#Niven Cho -begin
 | 
			
		||||
		//#NT#MULTI_DRIVE
 | 
			
		||||
		|| System_GetState(SYS_STATE_CARD)  == CARD_REMOVED)
 | 
			
		||||
		//#NT#2016/12/06#Niven Cho -end
 | 
			
		||||
		//|| UIStorageCheck_Error() )
 | 
			
		||||
	{
 | 
			
		||||
		DBG_ERR("UIStorageCheck: %d Card Error\r\n", System_GetState(SYS_STATE_FS));
 | 
			
		||||
		return TRUE;
 | 
			
		||||
	} else {
 | 
			
		||||
		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);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -142,49 +243,11 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
 | 
			
		|||
		if (useFileDB) {
 | 
			
		||||
			return FALSE;
 | 
			
		||||
		} else {
 | 
			
		||||
#if (USE_DCF == ENABLE)
 | 
			
		||||
			BOOL   bIsFileReachMax = FALSE;
 | 
			
		||||
			UINT32     DCF_DirId = 0, DCF_FileId = 0;
 | 
			
		||||
			BOOL   ret;
 | 
			
		||||
 | 
			
		||||
			if (System_GetState(SYS_STATE_FS) == FS_NUM_FULL) {
 | 
			
		||||
				DBG_ERR("UI_Validate_Storage: DIR:999 is existing!\r\n");
 | 
			
		||||
				return TRUE;
 | 
			
		||||
			}
 | 
			
		||||
			bIsFileReachMax = FALSE;
 | 
			
		||||
			//#NT#2011/03/28#Lincy Lin -begin
 | 
			
		||||
			//#NT#fix delete the 9999th file in 999 folder cause capture not save
 | 
			
		||||
			ret = DCF_GetNextID(&DCF_DirId, &DCF_FileId);
 | 
			
		||||
			if (ret && DCF_DirId == 0 && DCF_FileId == 0) {
 | 
			
		||||
				bIsFileReachMax = TRUE;
 | 
			
		||||
				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)
 | 
			
		||||
				//#NT#2011/03/28#Lincy Lin -end
 | 
			
		||||
			{
 | 
			
		||||
				bIsFileReachMax = TRUE;
 | 
			
		||||
			}
 | 
			
		||||
			return bIsFileReachMax;
 | 
			
		||||
#else
 | 
			
		||||
            return FALSE;
 | 
			
		||||
#endif
 | 
			
		||||
			UIStrgCheckFolderFull(mmc_dev->dcf_handle);
 | 
			
		||||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case STORAGE_CHECK_FULL:
 | 
			
		||||
#if (PHOTO_MODE==ENABLE)
 | 
			
		||||
		uiCountTmp = PhotoExe_GetFreePicNum();
 | 
			
		||||
		DBG_IND("uiCountTmp = %d, pFreeCount=%d\r\n",uiCountTmp,pFreeCount);
 | 
			
		||||
		if (pFreeCount) {
 | 
			
		||||
			*pFreeCount = uiCountTmp;
 | 
			
		||||
		}
 | 
			
		||||
		if (uiCountTmp == 0) {
 | 
			
		||||
			return TRUE;
 | 
			
		||||
		} else {
 | 
			
		||||
			return FALSE;
 | 
			
		||||
		}
 | 
			
		||||
#else
 | 
			
		||||
		return FALSE;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		UIStrgCheckFull(pFreeCount);
 | 
			
		||||
		break;
 | 
			
		||||
	case STORAGE_CHECK_LOCKED:
 | 
			
		||||
		if (System_GetState(SYS_STATE_CARD)  == CARD_LOCKED) {
 | 
			
		||||
| 
						 | 
				
			
			@ -195,21 +258,7 @@ BOOL UIStorageCheck(UINT32 uiCheckItem, UINT32 *pFreeCount)
 | 
			
		|||
		}
 | 
			
		||||
		break;
 | 
			
		||||
	case STORAGE_CHECK_ERROR:
 | 
			
		||||
		FileSys_WaitFinish();
 | 
			
		||||
		if (System_GetState(SYS_STATE_FS) == FS_DISK_ERROR
 | 
			
		||||
			|| System_GetState(SYS_STATE_FS) == FS_UNKNOWN_FORMAT
 | 
			
		||||
			|| System_GetState(SYS_STATE_FS) == FS_UNFORMATTED
 | 
			
		||||
			//#NT#2016/12/06#Niven Cho -begin
 | 
			
		||||
			//#NT#MULTI_DRIVE
 | 
			
		||||
			|| System_GetState(SYS_STATE_CARD)  == CARD_REMOVED)
 | 
			
		||||
			//#NT#2016/12/06#Niven Cho -end
 | 
			
		||||
			//|| UIStorageCheck_Error() )
 | 
			
		||||
		{
 | 
			
		||||
			DBG_ERR("UIStorageCheck: %d Card Error\r\n", System_GetState(SYS_STATE_FS));
 | 
			
		||||
			return TRUE;
 | 
			
		||||
		} else {
 | 
			
		||||
			return FALSE;
 | 
			
		||||
		}
 | 
			
		||||
		UIStrgCheckErr(mmc_dev->dev_type);
 | 
			
		||||
		break;
 | 
			
		||||
	case STORAGE_CHECK_DCIM_READONLY:
 | 
			
		||||
		if ((UIStorageCheck_DCIMWritable() == FALSE)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,6 +42,8 @@
 | 
			
		|||
#include <sf_mcu.h>
 | 
			
		||||
#include "sf_led.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "sf_sd_common.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#if POWERON_FAST_SLICE_ENC == ENABLE
 | 
			
		||||
	#include "PhotoFastSliceEncode.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -739,9 +741,10 @@ INT32 PhotoFast_FileNaming_Open(void)
 | 
			
		|||
			DBG_ERR("get dcf handle error!\n");
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		DBG_WRN("DCF_ScanObjEx emmc handle=%d\n", 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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -767,6 +770,8 @@ INT32 PhotoFast_FileNaming_Close(void)
 | 
			
		|||
 | 
			
		||||
		DCF_UnInstallID();
 | 
			
		||||
	}
 | 
			
		||||
	SF_RtosStrgSetDcfHandle(MMC_DEV_SD,  g_dcf_hdl);
 | 
			
		||||
	SF_RtosStrgSetDcfHandle(MMC_DEV_EMMC, g_dcf_hdl2);
 | 
			
		||||
	
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -883,12 +888,20 @@ void PhotoFast_FileNaming_SetSortBySN(CHAR *pDelimStr, UINT32 nDelimCount, UINT3
 | 
			
		|||
 | 
			
		||||
DCF_HANDLE PhotoFast_Get_DCF_Handle()
 | 
			
		||||
{
 | 
			
		||||
#if	(FS_MULTI_STRG_FUNC)
 | 
			
		||||
//#if	(FS_MULTI_STRG_FUNC)
 | 
			
		||||
	/* check free space here */
 | 
			
		||||
	return g_dcf_hdl2;
 | 
			
		||||
#else
 | 
			
		||||
	return g_dcf_hdl;
 | 
			
		||||
#endif
 | 
			
		||||
	//return g_dcf_hdl2;
 | 
			
		||||
//#else
 | 
			
		||||
	//return g_dcf_hdl;
 | 
			
		||||
//#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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,6 +21,7 @@
 | 
			
		|||
#include "sys_usrmem.h"
 | 
			
		||||
#if HUNTING_CAMERA_MCU == ENABLE
 | 
			
		||||
#include <sf_mcu.h>
 | 
			
		||||
#include "sf_sd_common.h"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#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
 | 
			
		||||
 | 
			
		||||
    #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
 | 
			
		||||
                UINT32 length = strlen(file_path);
 | 
			
		||||
                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 "UIInfo/UIInfo.h"
 | 
			
		||||
#include <FileSysTsk.h>
 | 
			
		||||
#include "sf_sd_common.h"
 | 
			
		||||
 | 
			
		||||
static BOOL IsCardFull = FALSE;
 | 
			
		||||
SF_CALLBACK_SD_CMD g_fpSd_Exist_CB = NULL;
 | 
			
		||||
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)
 | 
			
		||||
{
 | 
			
		||||
	//printf("[%s]:%d IsCardFull:%d\n", __FUNCTION__, __LINE__, IsCardFull);
 | 
			
		||||
	return IsCardFull;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
UINT32 sf_check_card_full(void)
 | 
			
		||||
| 
						 | 
				
			
			@ -90,6 +92,7 @@ UINT32 sf_check_card_full(void)
 | 
			
		|||
    return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void sf_sd_exist_reg_cb(SF_CALLBACK_SD_CMD 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_SearchFileClose FileSys_SearchFileClose
 | 
			
		||||
#define fs_SearchFileRewind FileSys_SearchFileRewind
 | 
			
		||||
 | 
			
		||||
#define FileSys_GetEMMCDiskInfo(parm1) FileSys_GetDiskInfoEx('B', parm1)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//@}
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user