修复动态拼接存储路径死机问题

This commit is contained in:
sober.song 2024-01-04 13:39:07 +08:00
parent 04ffffa004
commit 13ebddc03b
5 changed files with 31 additions and 26 deletions

View File

@ -70,6 +70,8 @@ void SF_StrgInit(void) {
sf_mmc_dev[i]->space_state = MMC_DEV_SPACE_STATE_ENOUGH;
sf_mmc_dev[i]->loop_state = MMC_DEV_LOOP_STATE_OFF;
}
pMMCDev = (SF_ST_MMC_DEV *)malloc(sizeof(SF_ST_MMC_DEV));
}
void SF_StrgUnInit(void)
@ -342,32 +344,37 @@ SF_ST_MMC_DEV *SF_StrgCheckWorkableDev(void)
}
}
#if 1
static int sfStrgOnActionSendCurrentDev(SF_ST_MMC_DEV *pMMCDev)
{
SF_MESSAGE_BUF_S stMessageBuf = {0};
stMessageBuf.s32Wait = SF_SYS_STRG_DEV_MSG;
stMessageBuf.arg1 = pMMCDev->dev_type;
stMessageBuf.arg2 = pMMCDev->node;
stMessageBuf.arg1 = SF_SYS_STRG_DEV_MSG;
stMessageBuf.arg2 = pMMCDev->dev_type;
stMessageBuf.arg3 = pMMCDev->moumted_state;
stMessageBuf.cmdId = CMD_SD;
sf_com_message_send_to_app(&stMessageBuf);
MLOGD("sf sys strg update current dev!\n");
return 0;
}
#endif
static void* mmc_monitoring_thread(void *arg)
{
static MMC_DEV_TYPE current_dev = MMC_DEV_NO;
static MMC_DEV_TYPE current_id = MMC_DEV_NO;
while(MMCMonitorTskCfg.IsRun)
{
pMMCDev = SF_StrgCheckWorkableDev();
if(current_dev != pMMCDev->dev_type)
{
current_dev = pMMCDev->dev_type;
sfStrgOnActionSendCurrentDev(pMMCDev);
if(pMMCDev != NULL) {
if(current_id != pMMCDev->dev_type)
{
current_id = pMMCDev->dev_type;
MLOGD("mmc monitor dev has changed!, %d\n", pMMCDev->dev_type);
sfStrgOnActionSendCurrentDev(pMMCDev);
}
}
sf_sleep_ms(1000);
sf_sleep_ms(5000);
}
return NULL;
}

View File

@ -80,14 +80,13 @@ typedef enum
typedef struct
{
MMC_DEV_TYPE dev_type;
MMC_DEV_NODE_STATE node;
MMC_DEV_MOUNT_STATE moumted_state;
}SF_STRG_DEV;
void sf_strg_dev_init(void);
void sf_strg_dev_uninit(void);
void sf_strg_dev_register(SF_MESSAGE_BUF_S *pMessageBuf);
void sf_strg_dev_register(SINT32 dev_id, SINT32 mounted);
MMC_DEV_TYPE sf_get_strg_dev(void);
char *sf_root_path_strcat(char *path_name);
char *sf_get_root_path(void);

View File

@ -260,9 +260,6 @@ int main(int argc, char *argv[])
stMessageBuf.arg2 = SF_KEY_PIN_AOTU_MODE_POWOFF;//auto mode powoff
sf_com_message_send_to_cardv(&stMessageBuf);
}*/
//init stroage_dev struct
sf_strg_dev_uninit();
ftp_manager_uninit();
sf_share_mem_file_deinit();

View File

@ -706,15 +706,15 @@ static SINT32 sfStrgDevEmmcHandler(SF_MESSAGE_BUF_S *pMessageBuf)
static SINT32 sf_app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf)
{
MLOGD("[dev_id:%d,evt:%s]\n",pMessageBuf->arg2,app_process_SD_getstatusstring(pMessageBuf->arg1));
MLOGD("[dev_id:%d,evt:%d]\n",pMessageBuf->arg2,pMessageBuf->arg1);
if(pMessageBuf->arg2 == MMC_DEV_SD)
//if(pMessageBuf->arg2 == MMC_DEV_SD)
{
sfStrgDevSdHandler(pMessageBuf);
//sfStrgDevSdHandler(pMessageBuf);
}
else if(pMessageBuf->arg2 == MMC_DEV_EMMC)
//else if(pMessageBuf->arg2 == MMC_DEV_EMMC)
{
sfStrgDevEmmcHandler(pMessageBuf);
//sfStrgDevEmmcHandler(pMessageBuf);
}
switch(pMessageBuf->arg1)
@ -732,7 +732,7 @@ static SINT32 sf_app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf)
sf_set_card_statu(pMessageBuf->arg2);
break;
case CMD_SD_STRG_WORKABLE_DEV:
sf_strg_dev_register(pMessageBuf);
sf_strg_dev_register(pMessageBuf->arg2, pMessageBuf->arg3);
break;
default:
break;

View File

@ -42,8 +42,8 @@ void sf_strg_dev_init(void)
{
sf_strg_dev = (SF_STRG_DEV *)malloc(sizeof(SF_STRG_DEV));
sf_strg_dev->dev_type = MMC_DEV_NO;
sf_strg_dev->node = MMC_DEV_NODE_STATE_NO;
sf_strg_dev->moumted_state = MMC_DEV_MOUNT_STATE_NO;
MLOGD("sf_app strg dev init success!\n");
}
void sf_strg_dev_uninit(void)
@ -52,11 +52,10 @@ void sf_strg_dev_uninit(void)
sf_strg_dev = NULL;
}
void sf_strg_dev_register(SF_MESSAGE_BUF_S *pMessageBuf)
void sf_strg_dev_register(SINT32 dev_id, SINT32 mounted)
{
sf_strg_dev->dev_type = pMessageBuf->arg1;
sf_strg_dev->node = pMessageBuf->arg2;
sf_strg_dev->moumted_state = pMessageBuf->arg3;
sf_strg_dev->dev_type = dev_id;
sf_strg_dev->moumted_state = mounted;
}
MMC_DEV_TYPE sf_get_strg_dev(void)
@ -112,6 +111,7 @@ char *sf_get_root_path(void)
mmc_dev = sf_get_strg_dev();
if (mmc_dev == MMC_DEV_NO)
{
MLOGE("get strg dev no!\n");
return NULL;
}
@ -125,6 +125,7 @@ char *sf_get_root_path(void)
strg_path = (char *)malloc(strlen(SF_EMMC_ROOT) + 1);
strcpy(strg_path, SF_EMMC_ROOT);
}
MLOGD("strg_path: %s\n", strg_path);
return strg_path;
}
@ -143,6 +144,7 @@ char *sf_root_path_strcat(char *path_name)
strcat(tmp, path_name);
free(strg_path); // 释放内存
MLOGD("root path: %s\n", tmp);
return tmp;
}