1.修改升级问题;2.优化代码。文件系统初始化完成后在进行文件操作

This commit is contained in:
payton 2024-01-23 16:49:40 +08:00
parent 2c8300c697
commit 707d92360d
7 changed files with 153 additions and 53 deletions

View File

@ -22,7 +22,9 @@
#if (USE_DCF == ENABLE) #if (USE_DCF == ENABLE)
#include "DCF.h" #include "DCF.h"
#endif #endif
#include "kwrap/flag.h"
#include "kwrap/debug.h"
#include "kwrap/util.h"
#if HUNTING_CAMERA_MCU == ENABLE #if HUNTING_CAMERA_MCU == ENABLE
#include <sf_message_queue.h> #include <sf_message_queue.h>
@ -51,6 +53,49 @@ SF_ST_MMC_DEV *sf_mmc_dev[MMC_DEV_MAX_NUM] = {NULL};
SF_ST_MMC_DEV *pMMCDev = NULL; SF_ST_MMC_DEV *pMMCDev = NULL;
static ID sf_dev_flag_id = 0;
void sf_dev_flag_init(void)
{
ER ret = E_OK;
T_CFLG cflg;
if ((ret |= vos_flag_create(&sf_dev_flag_id, &cflg, "sf_dev_flag_id")) != E_OK)
{
SYS_SLOGE("sf_dev_flag_id fail\r\n");
}
vos_flag_clr(sf_dev_flag_id, (FLGPTN)-1);
}
void sf_dev_flag_set_done(DEV_FLAG_INIT boot_init)
{
vos_flag_set(sf_dev_flag_id, (FLGPTN)(1 << boot_init));
}
void sf_dev_flag_wait_done(DEV_FLAG_INIT boot_init)
{
FLGPTN flgptn;
vos_flag_wait(&flgptn, sf_dev_flag_id, (FLGPTN)(1 << boot_init), TWF_ANDW);
}
int sf_dev_flag_wait_done_timeout(DEV_FLAG_INIT boot_init, int timeout_ms)
{
ER ret = E_OK;
FLGPTN flgptn;
ret = vos_flag_wait_timeout(&flgptn, sf_dev_flag_id, (FLGPTN)(1 << boot_init), TWF_ANDW, vos_util_msec_to_tick(timeout_ms));
if(unlikely(ret != E_OK)){
printf("wait(%lu) init timeout(%ld ms)!\n", boot_init, timeout_ms);
}
return ret;
}
void sf_dev_flag_clear_done(DEV_FLAG_INIT boot_init)
{
//vos_flag_clr(sf_mcu_flag_id, (FLGPTN)(1 << boot_init));
vos_flag_clr(sf_dev_flag_id, (FLGPTN)-1);
}
void SF_SetMMCDev(SF_ST_MMC_DEV *pDev) void SF_SetMMCDev(SF_ST_MMC_DEV *pDev)
{ {
if(pDev == NULL) if(pDev == NULL)
@ -144,6 +189,10 @@ static UINT32 SF_StrgSpaceCheckFull(MMC_DEV_TYPE mmc_dev)
if(diskFree < MIN_FREE_SIZE_MB) /* 30MB*/ if(diskFree < MIN_FREE_SIZE_MB) /* 30MB*/
{ {
ret = 1; ret = 1;
}
else
{
ret = 0;
if(mmc_dev == MMC_DEV_SD){ if(mmc_dev == MMC_DEV_SD){
sf_set_sd_card_full(1); sf_set_sd_card_full(1);
} }
@ -151,10 +200,6 @@ static UINT32 SF_StrgSpaceCheckFull(MMC_DEV_TYPE mmc_dev)
sf_set_emmc_card_full(1); sf_set_emmc_card_full(1);
} }
} }
else
{
ret = 0;
}
if(sf_mmc_dev != NULL) { if(sf_mmc_dev != NULL) {
sf_mmc_dev[mmc_dev]->space_state = ret == 0 ? MMC_DEV_SPACE_STATE_ENOUGH : MMC_DEV_SPACE_STATE_NO_ENOUGH; sf_mmc_dev[mmc_dev]->space_state = ret == 0 ? MMC_DEV_SPACE_STATE_ENOUGH : MMC_DEV_SPACE_STATE_NO_ENOUGH;
@ -315,7 +360,7 @@ SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void)
{ {
if(puiPara->SdLoopSwitch == 1) if(puiPara->SdLoopSwitch == 1)
{ {
workable_dev = MMC_DEV_SD; workable_dev = MMC_DEV_EMMC;
} }
} }
} }
@ -338,7 +383,7 @@ SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void)
{ {
if(puiPara->SdLoopSwitch == 1) if(puiPara->SdLoopSwitch == 1)
{ {
workable_dev = MMC_DEV_SD; workable_dev = MMC_DEV_EMMC;
} }
} }
} }
@ -382,6 +427,7 @@ static void* mmc_monitoring_thread(void *arg)
static MMC_DEV_TYPE current_id = MMC_DEV_NO; static MMC_DEV_TYPE current_id = MMC_DEV_NO;
while(MMCMonitorTskCfg.IsRun) while(MMCMonitorTskCfg.IsRun)
{ {
sf_dev_flag_wait_done_timeout(DEV_FLAG_INIT_FILENAMINGOK, 5000);
pMMCDev = SF_StrgCheckWorkableDev(); pMMCDev = SF_StrgCheckWorkableDev();
if(pMMCDev != NULL) { if(pMMCDev != NULL) {
@ -401,7 +447,7 @@ static void* mmc_monitoring_thread(void *arg)
int sf_mmc_dev_check_start(void) int sf_mmc_dev_check_start(void)
{ {
SF_StrgInit();// 初始化sf_mmc设备Obj SF_StrgInit();// 初始化sf_mmc设备Obj
sf_dev_flag_init();
int ret = pthread_create(&MMCMonitorTskCfg.TskId, NULL, mmc_monitoring_thread, NULL); int ret = pthread_create(&MMCMonitorTskCfg.TskId, NULL, mmc_monitoring_thread, NULL);
if(ret != SF_SUCCESS) if(ret != SF_SUCCESS)
{ {
@ -413,3 +459,34 @@ int sf_mmc_dev_check_start(void)
return 0; return 0;
} }
void sf_file_sys_int_status(void)
{
MLOGD("s\n");
SF_MESSAGE_BUF_S stMessageBuf = {0};
stMessageBuf.arg1 = CMD_SD_FILESYS_INIT_STATUS;
stMessageBuf.cmdId = CMD_SD;
sf_com_message_send_to_app(&stMessageBuf);
sf_thumb_dir();
}
void sf_thumb_dir(void)
{
MLOGD("s\n");
char thumb_dir[128] = {'\0'};
sprintf(thumb_dir, "%c%s", 'A', PHOTO_THUMB_PATH);
FileSys_MakeDir(thumb_dir);
#if SF_IQ_TEST != ENABLE
FileSys_SetAttrib(thumb_dir, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE);
#endif
#if FS_MULTI_STRG_FUNC
sprintf(thumb_dir, "%c%s", 'B', PHOTO_THUMB_PATH);
FileSys_MakeDir(thumb_dir);
#if SF_IQ_TEST != ENABLE
FileSys_SetAttrib(thumb_dir, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE);
#endif
#endif
}

View File

@ -71,6 +71,13 @@ typedef enum
MMC_DEV_LOOP_STATE_OFF = 2, MMC_DEV_LOOP_STATE_OFF = 2,
}MMC_DEV_LOOP_STATE; }MMC_DEV_LOOP_STATE;
typedef enum DEV_FLAG_INIT {
DEV_FLAG_INIT_FILESYSOK = 0x00,
DEV_FLAG_INIT_FILENAMINGOK,
DEV_FLAG_GET,
DEV_FLAG_INIT_MAX_CNT = 32, //flag max bit cnt is 32
} DEV_FLAG_INIT;
typedef struct typedef struct
{ {
MMC_DEV_TYPE dev_type; MMC_DEV_TYPE dev_type;
@ -90,8 +97,8 @@ void SF_SetMMCDev(SF_ST_MMC_DEV *pDev);
SF_ST_MMC_DEV *SF_GetMMCDev(void); SF_ST_MMC_DEV *SF_GetMMCDev(void);
int sf_mmc_dev_check_start(void); int sf_mmc_dev_check_start(void);
int SF_GetMMCDevHandle(MMC_DEV_TYPE dev_type); int SF_GetMMCDevHandle(MMC_DEV_TYPE dev_type);
void sf_dev_flag_set_done(DEV_FLAG_INIT boot_init);
void sf_file_sys_int_status(void);
void sf_thumb_dir(void);
#endif //_SF_SYS_STRG_MNG_H_ #endif //_SF_SYS_STRG_MNG_H_

View File

@ -26,6 +26,7 @@
#include <sf_param_enum.h> #include <sf_param_enum.h>
#include <sf_message_queue.h> #include <sf_message_queue.h>
#include <sf_commMng.h> #include <sf_commMng.h>
#include "SF_SysStrgMng.h"
#endif #endif
#if (LOGFILE_FUNC==ENABLE) #if (LOGFILE_FUNC==ENABLE)
#include "LogFile.h" #include "LogFile.h"
@ -1298,6 +1299,11 @@ void System_WaitFS(void)
TM_BOOT_END("Fs", "WaitAttach"); TM_BOOT_END("Fs", "WaitAttach");
is_fs_ready = TRUE; is_fs_ready = TRUE;
#if HUNTING_CAMERA_MCU == ENABLE
sf_dev_flag_set_done(DEV_FLAG_INIT_FILENAMINGOK);
sf_file_sys_int_status();
#endif
BKG_PostEvent(NVTEVT_BKW_INIT_FILESYS); BKG_PostEvent(NVTEVT_BKW_INIT_FILESYS);
} }

View File

@ -2705,22 +2705,6 @@ INT32 PhotoExe_OnOpen(VControl *pCtrl, UINT32 paramNum, UINT32 *paramArray)
g_photo_ImageRatioSize = IMAGERATIO_SIZE[ImageRatioIdx]; g_photo_ImageRatioSize = IMAGERATIO_SIZE[ImageRatioIdx];
// g_photo_ImageRatioSize = IMAGERATIO_SIZE[4]; // g_photo_ImageRatioSize = IMAGERATIO_SIZE[4];
char thumb_dir[128] = {'\0'};
sprintf(thumb_dir, "%c%s", 'A', PHOTO_THUMB_PATH);
FileSys_MakeDir(thumb_dir);
#if SF_IQ_TEST != ENABLE
FileSys_SetAttrib(thumb_dir, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE);
#endif
#if FS_MULTI_STRG_FUNC
sprintf(thumb_dir, "%c%s", 'B', PHOTO_THUMB_PATH);
FileSys_MakeDir(thumb_dir);
#if SF_IQ_TEST != ENABLE
FileSys_SetAttrib(thumb_dir, FST_ATTRIB_HIDDEN/* | FST_ATTRIB_SYSTEM*/, TRUE);
#endif
#endif
GOIO_Turn_Onoff_IRCUT(1); GOIO_Turn_Onoff_IRCUT(1);

View File

@ -405,6 +405,7 @@ typedef enum sf_MESSAGE_CMD_SD_e
CMD_SD_FULL = 5, CMD_SD_FULL = 5,
CMD_SD_FORMAT = 6, CMD_SD_FORMAT = 6,
CMD_SD_STRG_WORKABLE_DEV = 7, CMD_SD_STRG_WORKABLE_DEV = 7,
CMD_SD_FILESYS_INIT_STATUS = 8,
CMD_SD_SYSTEM_CB_CONFIG = 0xFFFFFFFF, CMD_SD_SYSTEM_CB_CONFIG = 0xFFFFFFFF,
}SF_MESSAGE_CMD_SD_E; }SF_MESSAGE_CMD_SD_E;

View File

@ -604,7 +604,7 @@ static SINT32 sf_app_process_cmd_keyctrl(SF_MESSAGE_BUF_S *pMessageBuf)
static SINT32 sfStrgDevOnActionMount(int dev_id, int result) static SINT32 sfStrgDevOnActionMount(int dev_id, int result)
{ {
SINT16 startup = sf_poweron_type_get(); // SINT16 startup = sf_poweron_type_get();
UINT32 status = 0; UINT32 status = 0;
status = result; status = result;
switch (status) switch (status)
@ -612,32 +612,33 @@ static SINT32 sfStrgDevOnActionMount(int dev_id, int result)
case FST_STA_OK: case FST_STA_OK:
sf_set_card(1); sf_set_card(1);
sf_sd_status_set(SF_SD_OK); sf_sd_status_set(SF_SD_OK);
if(SF_MCU_STARTUP_ONKEY == startup)
{
SF_STORE_ATTR_S storeattrs = {0};
sf_activity_info_get(&storeattrs);
printf("SD free=%dM/%dM\n", storeattrs.SDFree, storeattrs.SDTotalSize);
if (storeattrs.SDFree < 30) /* 30MB */
{
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FULL);
}
else
{
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_NORMAL);
}
}
sf_statistics_param_load(sf_statistics_param_get());
MLOGI("card-%d mount OK\r\n", dev_id + 1);
sf_set_key_fw_update(sf_get_fw_update());//up fw
if(sf_get_mcu_update_flag())//up mcu
{
sf_app_mcu_updata_start();
}
if(dev_id == MMC_DEV_EMMC) if(dev_id == MMC_DEV_EMMC)
{ {
printf("EMMC has Mounted!\r\n"); printf("EMMC has Mounted!\r\n");
sf_strg_dev_register(MMC_DEV_EMMC, MMC_DEV_MOUNT_STATE_MOUNTED);
} }
// if(SF_MCU_STARTUP_ONKEY == startup)
// {
// SF_STORE_ATTR_S storeattrs = {0};
// sf_activity_info_get(&storeattrs);
// printf("SD free=%dM/%dM\n", storeattrs.SDFree, storeattrs.SDTotalSize);
// if (storeattrs.SDFree < 30) /* 30MB */
// {
// sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FULL);
// }
// else
// {
// sf_sys_status_led_set(SF_LED_SYS_STATE_SD_NORMAL);
// }
// }
// sf_statistics_param_load(sf_statistics_param_get());
// MLOGI("card-%d mount OK\r\n", dev_id + 1);
// sf_set_key_fw_update(sf_get_fw_update());//up fw
// if(sf_get_mcu_update_flag())//up mcu
// {
// sf_app_mcu_updata_start();
// }
break; break;
case FST_STA_DISK_UNFORMAT: case FST_STA_DISK_UNFORMAT:
sf_statistics_param_load(sf_statistics_param_get()); sf_statistics_param_load(sf_statistics_param_get());
@ -716,6 +717,7 @@ static SINT32 sfStrgDevEmmcHandler(int cb_evt, int dev_id, int result)
static SINT32 sf_app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf) static SINT32 sf_app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf)
{ {
MLOGD("[dev_id:%d,evt:%d]\n",pMessageBuf->arg2,pMessageBuf->arg1); MLOGD("[dev_id:%d,evt:%d]\n",pMessageBuf->arg2,pMessageBuf->arg1);
SINT16 startup = sf_poweron_type_get();
if(pMessageBuf->arg2 == MMC_DEV_SD) if(pMessageBuf->arg2 == MMC_DEV_SD)
{ {
@ -743,6 +745,29 @@ static SINT32 sf_app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf)
case CMD_SD_STRG_WORKABLE_DEV: case CMD_SD_STRG_WORKABLE_DEV:
sf_strg_dev_register(pMessageBuf->arg2, pMessageBuf->arg3); sf_strg_dev_register(pMessageBuf->arg2, pMessageBuf->arg3);
break; break;
case CMD_SD_FILESYS_INIT_STATUS:
if(SF_MCU_STARTUP_ONKEY == startup)
{
SF_STORE_ATTR_S storeattrs = {0};
sf_activity_info_get(&storeattrs);
printf("SD free=%dM/%dM\n", storeattrs.SDFree, storeattrs.SDTotalSize);
if (storeattrs.SDFree < 30) /* 30MB */
{
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_FULL);
}
else
{
sf_sys_status_led_set(SF_LED_SYS_STATE_SD_NORMAL);
}
}
sf_statistics_param_load(sf_statistics_param_get());
MLOGI("FILESYS mount OK\r\n");
sf_set_key_fw_update(sf_get_fw_update());//up fw
if(sf_get_mcu_update_flag())//up mcu
{
sf_app_mcu_updata_start();
}
break;
default: default:
break; break;
} }

View File

@ -47,8 +47,8 @@
SF_CALLBACK_SD_CMD g_fpSd_Exist_CB = NULL; SF_CALLBACK_SD_CMD g_fpSd_Exist_CB = NULL;
static int formatSD = CMD_FORMAT_SD_ERR; static int formatSD = CMD_FORMAT_SD_ERR;
static BOOL IsCardFull = FALSE; static BOOL IsCardFull = TRUE;
static BOOL IsEmmcFull = FALSE; static BOOL IsEmmcFull = TRUE;
void sf_sd_exist_reg_cb(SF_CALLBACK_SD_CMD fpCB) void sf_sd_exist_reg_cb(SF_CALLBACK_SD_CMD fpCB)
{ {