diff --git a/code/application/source/cardv/Makefile b/code/application/source/cardv/Makefile index b7ad8541b..9c39f8166 100755 --- a/code/application/source/cardv/Makefile +++ b/code/application/source/cardv/Makefile @@ -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 \ diff --git a/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c new file mode 100755 index 000000000..4df6c7828 --- /dev/null +++ b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.c @@ -0,0 +1,320 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "DCF.h" +#include "sf_type.h" +#include "sf_log.h" + +#include "SF_SysStrgMng.h" +#include +#include +#include + +typedef struct +{ + int event; + int dev_id; + int mounted_status; +}STRG_CB_PARAM; + +static 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]->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_GetDiskInfo(FST_INFO_FREE_SPACE); + } + else + { + diskFree = FileSys_GetEMMCDiskInfo(FST_INFO_FREE_SPACE); + } + + diskFree = diskFree/1024/1024; + + if(diskFree < 30) /* 30MB */ + { + ret = TRUE; + } + else + { + ret = FALSE; + } + 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; + } + + UINT32 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(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; + } + + UINT32 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; + } + + 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"); + 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++) + { + 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) + { + MLOGD("dcf_handle = %d\n", sf_mmc_dev[workable_dev]->dcf_handle); + return sf_mmc_dev[workable_dev]; + } + else + return NULL; +} diff --git a/code/application/source/sf_app/code/include/sf_mmc_dev.h b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h similarity index 83% rename from code/application/source/sf_app/code/include/sf_mmc_dev.h rename to code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h index 67d3ba384..6ab9f6c96 100755 --- a/code/application/source/sf_app/code/include/sf_mmc_dev.h +++ b/code/application/source/cardv/SrcCode/System/SF_SysStrgMng.h @@ -17,8 +17,8 @@ * Ver: 1.0.0 2023.12.23 * Description: Creat **************************************************************************/ -#ifndef _SF_MMC_DEV_H_ -#define _SF_MMC_DEV_H_ +#ifndef _SF_SYS_STRG_MNG_H_ +#define _SF_SYS_STRG_MNG_H_ #include "sf_type.h" #include "sf_param_common.h" @@ -74,9 +74,16 @@ typedef struct 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; -MMC_DEV_TYPE sf_mmc_check_workable_dev(void); -#endif +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_ diff --git a/code/application/source/cardv/SrcCode/System/SysStrg_CB.c b/code/application/source/cardv/SrcCode/System/SysStrg_CB.c index 35e2b2872..83e77adef 100755 --- a/code/application/source/cardv/SrcCode/System/SysStrg_CB.c +++ b/code/application/source/cardv/SrcCode/System/SysStrg_CB.c @@ -42,6 +42,7 @@ #include #include #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 diff --git a/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c b/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c index 7472f7f4b..22418d3ce 100644 --- a/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c +++ b/code/application/source/cardv/SrcCode/System/SysStrg_Exe.c @@ -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 @@ -525,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) @@ -733,7 +740,6 @@ INT32 System_Set_Storage_Act_Drive(char drive) { DCF_HANDLE act_handle = -1; - for(int i=0 ; idcf_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) @@ -798,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) @@ -843,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"; @@ -894,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"); } } /************************************************ @@ -1033,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 @@ -1094,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 @@ -1188,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) diff --git a/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_Exe.c b/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_Exe.c index 46809a47c..00f002dee 100755 --- a/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_Exe.c +++ b/code/application/source/cardv/SrcCode/UIApp/Movie/UIAppMovie_Exe.c @@ -37,6 +37,9 @@ #endif #include "vendor_videoout.h" #include "IOCfg.h" +#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 /////////////////////////////////////////////////////////////////////////////// @@ -1218,7 +1221,6 @@ BOOL MovieExe_CheckSNFull(void) static void MovieExe_FileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName) { - #if USE_FILEDB static struct tm CurDateTime = {0}; @@ -1251,6 +1253,9 @@ static void MovieExe_FileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName) #elif USE_DCF UINT32 dcf_handle = (UINT32) System_Get_DCF_Handle(); + + DBG_DUMP("System_Get_DCF_Handle, dcf_handle: %d\n", dcf_handle); + UINT32 nextFolderID = 0, nextFileID = 0; if (DCF_GetDBInfoEx(dcf_handle, DCF_INFO_IS_9999)) { @@ -1260,7 +1265,7 @@ static void MovieExe_FileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName) DCF_GetNextIDEx(dcf_handle, &nextFolderID,&nextFileID); DCF_MakeObjPathEx(dcf_handle, nextFolderID, nextFileID, DCF_FILE_TYPE_MP4, pFileName); DCF_AddDBfileEx(dcf_handle, pFileName); - DBG_DUMP("%s added to DCF Path%lu\r\n", pFileName, dcf_handle); + DBG_WRN("0000 %s added to DCF Path%lu\r\n", pFileName, dcf_handle); #if HUNTING_CAMERA_MCU == ENABLE char tmp[NMC_TOTALFILEPATH_MAX_LEN] = {'\0'}; sprintf(tmp, "S%03d%04d.JPG", nextFolderID, nextFileID); @@ -1279,8 +1284,6 @@ static void MovieExe_FileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName) snprintf(thumb_current_path_clone, sizeof(thumb_current_path_clone), "%s", pFileName); } #endif - - } #endif @@ -1321,7 +1324,8 @@ static void MovieExe_RawEncodeFileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName) #elif USE_DCF UINT32 nextFolderID = 0, nextFileID = 0; - UINT32 dcf_handle = (UINT32) System_Get_DCF_Handle(); + + UINT32 dcf_handle = (UINT32) System_Get_DCF_Handle(); if (DCF_GetDBInfoEx(dcf_handle, DCF_INFO_IS_9999)) { DBG_ERR("Exceed max dcf file!\r\n"); @@ -1329,6 +1333,7 @@ static void MovieExe_RawEncodeFileNamingCB(MOVIE_CFG_REC_ID id, char *pFileName) } else { DCF_GetNextIDEx(dcf_handle, &nextFolderID,&nextFileID); DCF_MakeObjPathEx(dcf_handle, nextFolderID, nextFileID, DCF_FILE_TYPE_JPG, pFileName); + DBG_WRN("1111 %s added to DCF Path%lu\r\n", pFileName, dcf_handle); } #endif diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonItem/MenuQR.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonItem/MenuQR.c index 17adf2d29..acb903f0e 100644 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonItem/MenuQR.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonItem/MenuQR.c @@ -782,7 +782,7 @@ void show_qr_picture_page(lv_obj_t* obj) lv_obj_set_drag(QRImage, false); lv_obj_set_pos(QRImage, 210, 141); lv_obj_set_size(QRImage, 32, 32); - lv_img_set_src(QRImage, &sf_qr_page); + //lv_img_set_src(QRImage, &sf_qr_page); if(NULL != qr){ lv_obj_set_hidden(qr, false); diff --git a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonOption/UIFlowMenuCommonOptionEventCallback.c b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonOption/UIFlowMenuCommonOptionEventCallback.c index 874fb5998..68cdbe142 100755 --- a/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonOption/UIFlowMenuCommonOptionEventCallback.c +++ b/code/application/source/cardv/SrcCode/UIWnd/LVGL_SPORTCAM/UIFlowLVGL/UIFlowMenuCommonOption/UIFlowMenuCommonOptionEventCallback.c @@ -26,7 +26,7 @@ static int isSetting = 0; //static TM_MENU *g_pOptionMenu = 0; UINT16 PrevOption = 0; -UINT16 s_SelOption = 0; +UINT16 s_SelOption = 100; UINT16 OptionEN_Num = 0; UINT16 enableIndex[30] = {}; @@ -150,6 +150,7 @@ static int is_message_item(lv_obj_t* obj) case IDM_OPERATING_TIME: break; case IDM_FORMAT_SD: + break; { printf("[is_message_item]IDM_FORMAT_SD\n"); UIFlowMenuCommonConfirmAPI_Open(itemID); @@ -216,12 +217,13 @@ static void LV_MenuCommonOption_UpdateContent(TM_MENU *pMenu) UINT32 i; // UINT16 startIndex = 0; UINT16 itemIndex = 0; + UINT16 itemIconId = 0; #if 1 UINT16 SelOption = 0; UINT32 Selindex = 0; BOOL ui_hidden = true; #endif - + UIMenuStoreInfo *puiPara = sf_ui_para_get(); pPage = &pMenu->pPages[pMenu->SelPage]; pItem = &pPage->pItems[pPage->SelItem]; #if 0 @@ -354,32 +356,459 @@ static void LV_MenuCommonOption_UpdateContent(TM_MENU *pMenu) lv_plugin_menu_set_item_hidden(menu_option, i, true); ui_hidden = true; }else{ + itemIconId = pOption->IconId; + ui_hidden = true; printf("\033[33m[LV_MenuCommonOption_UpdateContent] 3 \033[0m\n"); lv_plugin_menu_set_item_string_id(menu_option, i, LV_PLUGIN_MENU_ITEM_VISIBLE_STATE_NUM, pOption->TextId); - lv_plugin_menu_set_item_img_id(menu_option, i, LV_PLUGIN_MENU_ITEM_STATE_DISABLED, pOption->IconId); - lv_plugin_menu_set_item_hidden(menu_option, i, false); - ui_hidden = true; - if(enableIndex[i+(Selindex * OPTION_PAGE_NUM)] == SelOption){ - printf("\033[33m[LV_MenuCommonOption_UpdateContent] 4 %d %d \033[0m\n", i, Selindex); - s_SelOption = i + (Selindex * OPTION_PAGE_NUM); - lv_plugin_menu_select_item(menu_option, i); - ui_hidden = false; - } - } + + printf("[LV_MenuCommonOption_UpdateContent]s_SelOption: %d\n", s_SelOption); + if (IDM_FORMAT_SD == pItem->ItemId) { + if (0 == SelOption && i == 0) { + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED;//√ + lv_obj_set_pos(image_option1_scr_uiflowmenucommonoption, 272, 0); + ui_hidden = false; + } else if (1 == SelOption && i == 1) { + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED;//√ + lv_obj_set_pos(image_option2_scr_uiflowmenucommonoption, 272, 0); + ui_hidden = false; + } else if (0 == SelOption && i == 1) { + itemIconId = LV_PLUGIN_IMG_ID_SF_NEXT1;//> + lv_obj_set_pos(image_option2_scr_uiflowmenucommonoption, 288, 0); + ui_hidden = false; + } else if (1 == SelOption && i == 0) { + itemIconId = LV_PLUGIN_IMG_ID_SF_NEXT1;//> + lv_obj_set_pos(image_option1_scr_uiflowmenucommonoption, 288, 0); + ui_hidden = false; + } + } else if (s_SelOption == 100){//first init page add select icon + if (enableIndex[i+(Selindex * OPTION_PAGE_NUM)] == SelOption) + { + s_SelOption = i + (Selindex * OPTION_PAGE_NUM); + switch (pItem->ItemId) { + case IDM_DELAY:{} + case IDM_OPERATING_TIME:{} + case IDM_DATE_AND_TIME:{} + case IDM_MAX_NUM_DAY:{} + case IDM_PASSWORD:{} + case IDM_CAMERA_NAME: + { + if (i == 1) + { + printf("[LV_MenuCommonOption_UpdateContent]first init black > √\n"); + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED_NEXT2;//black > √ + lv_obj_set_pos(image_option2_scr_uiflowmenucommonoption, 259, 0); + } + else if (i==0){ + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED;//√ + lv_obj_set_pos(image_option1_scr_uiflowmenucommonoption, 272, 0); + } + else{ + printf("[LV_MenuCommonOption_UpdateContent]first init √\n"); + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED;//√ + lv_obj_set_pos(image_option2_scr_uiflowmenucommonoption, 272, 0); + } + break; + } + case IDM_SEND_TYPE:{ + if(i == 1) + { + printf("[LV_MenuCommonOption_UpdateContent]first init IDM_SEND_TYPE black > √\n"); + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED_NEXT2;//black > √ + lv_obj_set_pos(image_option2_scr_uiflowmenucommonoption, 259, 0); + } + else if (i == 0){ + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED;//√ + lv_obj_set_pos(image_option1_scr_uiflowmenucommonoption, 272, 0); + } + else if (i == 2) + { + printf("[LV_MenuCommonOption_UpdateContent]first init IDM_SEND_TYPE black > √\n"); + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED_NEXT2;//black > √ + lv_obj_set_pos(image_option3_scr_uiflowmenucommonoption, 259, 0); + } + else if (i == 3) + { + printf("[LV_MenuCommonOption_UpdateContent]first init IDM_SEND_TYPE black > √\n"); + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED_NEXT2;//black > √ + lv_obj_set_pos(image_option4_scr_uiflowmenucommonoption, 259, 0); + } + break; + } + default: + { + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED;//√ + if(i == 1) + { + lv_obj_set_pos(image_option2_scr_uiflowmenucommonoption, 272, 0); + } + else if (i == 0){ + lv_obj_set_pos(image_option1_scr_uiflowmenucommonoption, 272, 0); + } + else if (i == 2) + { + lv_obj_set_pos(image_option3_scr_uiflowmenucommonoption, 272, 0); + } + else if (i == 3) + { + lv_obj_set_pos(image_option4_scr_uiflowmenucommonoption, 272, 0); + } + + + } + } + ui_hidden = false; + } + else if (enableIndex[i+(Selindex * OPTION_PAGE_NUM)] != SelOption && i == 1) + { + printf("[LV_MenuCommonOption_UpdateContent]first init white >\n"); + switch (pItem->ItemId) { + case IDM_DELAY:{} + case IDM_OPERATING_TIME:{} + case IDM_DATE_AND_TIME:{} + case IDM_MAX_NUM_DAY:{} + case IDM_PASSWORD:{} + case IDM_SEND_TYPE:{} + case IDM_CAMERA_NAME: + { + itemIconId = LV_PLUGIN_IMG_ID_SF_NEXT1;//white > + lv_obj_set_pos(image_option2_scr_uiflowmenucommonoption, 288, 0); + ui_hidden = false; + break; + } + } - DBG_DUMP("%s ui_hidden=%d\r\n", __func__,ui_hidden); - if(i==0){ + } + else if(enableIndex[i+(Selindex * OPTION_PAGE_NUM)] != SelOption && i > 1) + { + if (pItem->ItemId == IDM_SEND_TYPE) + { + printf("[LV_MenuCommonOption_UpdateContent]first init IDM_SEND_TYPE white >\n"); + itemIconId = LV_PLUGIN_IMG_ID_SF_NEXT1;//white > + if (i == 2) + { + lv_obj_set_pos(image_option3_scr_uiflowmenucommonoption, 288, 0); + } + else if (i == 3) + { + lv_obj_set_pos(image_option4_scr_uiflowmenucommonoption, 288, 0); + } + ui_hidden = false; + } + } + + if (pItem->ItemId == IDM_BATTERY_TYPE && s_SelOption < 3) + { + if (puiPara->BatteryType == SF_BATT_LI_PACK){ + printf("[LV_MenuCommonOption_UpdateContent]first init change battery to lith\n"); + if (i < 1) + { + lv_plugin_menu_set_item_state(menu_option, 0, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + if (i < 2) + { + lv_plugin_menu_set_item_state(menu_option, 1, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + if (i < 3) + { + lv_plugin_menu_set_item_state(menu_option, 2, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + lv_obj_set_state(label_option4_scr_uiflowmenucommonoption, LV_STATE_DEFAULT); + ui_hidden = true; + lv_plugin_menu_select_item(menu_option, 3); + s_SelOption = 3; + SelOption = 3; + SysSetFlag(pItem->SysFlag,3); + } + else + { + printf("[LV_MenuCommonOption_UpdateContent]first init is not lith\n"); + lv_plugin_menu_set_item_state(menu_option, 3, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + + } + else if (pItem->ItemId == IDM_BATTERY_TYPE && s_SelOption == 3) + { + if (puiPara->BatteryType == SF_BATT_LI_PACK) + { + printf("[LV_MenuCommonOption_UpdateContent]first init and is lith\n"); + if (i < 1) + { + lv_plugin_menu_set_item_state(menu_option, 0, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + if (i < 2) + { + lv_plugin_menu_set_item_state(menu_option, 1, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + if (i < 3) + { + lv_plugin_menu_set_item_state(menu_option, 2, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + lv_obj_set_state(label_option4_scr_uiflowmenucommonoption, LV_STATE_DEFAULT); + } + else + { + printf("[LV_MenuCommonOption_UpdateContent]first init change battery\n"); + lv_plugin_menu_set_item_state(menu_option, 3, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + ui_hidden = true; + lv_plugin_menu_select_item(menu_option, 0); + s_SelOption = 0; + SelOption = 0; + SysSetFlag(pItem->SysFlag,0); + lv_obj_set_hidden(image_option1_scr_uiflowmenucommonoption, true); + } + + } + } + else{ + if (pItem->ItemId == IDM_SEND_TYPE){ + if (i == s_SelOption) + { + switch(i) + { + case 0: + { + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED;//√ + lv_obj_set_pos(image_option1_scr_uiflowmenucommonoption, 272, 0); + break; + } + case 1: + { + lv_obj_set_pos(image_option2_scr_uiflowmenucommonoption, 259, 0); + break; + } + case 2: + { + lv_obj_set_pos(image_option3_scr_uiflowmenucommonoption, 259, 0); + break; + } + case 3: + { + lv_obj_set_pos(image_option4_scr_uiflowmenucommonoption, 259, 0); + break; + } + default: + { + break; + } + } + + if (i >= 1 && enableIndex[i+(Selindex * OPTION_PAGE_NUM)] == SelOption) + { + printf("[LV_MenuCommonOption_UpdateContent]IDM_SEND_TYPE add black √ > \n"); + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED_NEXT2;//black > √ + } + else if (i >= 1 && enableIndex[i+(Selindex * OPTION_PAGE_NUM)] != SelOption) + { + printf("[LV_MenuCommonOption_UpdateContent]IDM_SEND_TYPE add white √ > \n"); + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED_NEXT1;//white > √ + } + ui_hidden = false; + } + else{ + switch(i) + { + case 0: + { + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED;//√ + lv_obj_set_pos(image_option1_scr_uiflowmenucommonoption, 272, 0); + break; + } + case 1: + { + printf("[LV_MenuCommonOption_UpdateContent]set 1 option \n"); + lv_obj_set_pos(image_option2_scr_uiflowmenucommonoption, 288, 0); + break; + } + case 2: + { + printf("[LV_MenuCommonOption_UpdateContent]set 2 option \n"); + lv_obj_set_pos(image_option3_scr_uiflowmenucommonoption, 288, 0); + break; + } + case 3: + { + printf("[LV_MenuCommonOption_UpdateContent]set 3 option \n"); + lv_obj_set_pos(image_option4_scr_uiflowmenucommonoption, 288, 0); + break; + } + default: + { + break; + } + } + if (i >= 1 && enableIndex[i+(Selindex * OPTION_PAGE_NUM)] == SelOption) + { + printf("[LV_MenuCommonOption_UpdateContent]IDM_SEND_TYPE add black > \n"); + itemIconId = LV_PLUGIN_IMG_ID_SF_NEXT2;//black > + ui_hidden = false; + } + else if (i >= 1 && enableIndex[i+(Selindex * OPTION_PAGE_NUM)] != SelOption) + { + printf("[LV_MenuCommonOption_UpdateContent]IDM_SEND_TYPE add white > \n"); + itemIconId = LV_PLUGIN_IMG_ID_SF_NEXT1;//white > + ui_hidden = false; + } + } + } + else if (i == 1) + { + //printf("[LV_MenuCommonOption_UpdateContent] add > icon\n"); + switch (pItem->ItemId) { + case IDM_DELAY:{} + case IDM_OPERATING_TIME:{} + case IDM_DATE_AND_TIME:{} + case IDM_MAX_NUM_DAY:{} + case IDM_PASSWORD:{} + case IDM_CAMERA_NAME: + { + if (s_SelOption == 0 && enableIndex[i+(Selindex * OPTION_PAGE_NUM)] == SelOption){ + printf("[LV_MenuCommonOption_UpdateContent] add black > \n"); + itemIconId = LV_PLUGIN_IMG_ID_SF_NEXT2;//black > + lv_obj_set_pos(image_option2_scr_uiflowmenucommonoption, 288, 0); + } + else if (s_SelOption == 0 && enableIndex[i+(Selindex * OPTION_PAGE_NUM)] != SelOption){ + printf("[LV_MenuCommonOption_UpdateContent] add white > \n"); + itemIconId = LV_PLUGIN_IMG_ID_SF_NEXT1;//white > + lv_obj_set_pos(image_option2_scr_uiflowmenucommonoption, 288, 0); + } + else if (s_SelOption == 1 && enableIndex[i+(Selindex * OPTION_PAGE_NUM)] == SelOption){ + printf("[LV_MenuCommonOption_UpdateContent] add black √ > \n"); + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED_NEXT2;//black > √ + lv_obj_set_pos(image_option2_scr_uiflowmenucommonoption, 259, 0); + } + else{ + printf("[LV_MenuCommonOption_UpdateContent] add white √ > \n"); + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED_NEXT1;//white > √ + lv_obj_set_pos(image_option2_scr_uiflowmenucommonoption, 259, 0); + } + ui_hidden = false; + break; + } + default: + { + printf("[LV_MenuCommonOption_UpdateContent] add √ \n"); + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED;//√ + lv_obj_set_pos(image_option2_scr_uiflowmenucommonoption, 272, 0); + if (s_SelOption == 1) + { + ui_hidden = false; + } + break; + } + } + + } + else if (i == s_SelOption) + { + itemIconId = LV_PLUGIN_IMG_ID_SF_LIST_SELECTED;//√ + if (i == 2) + { + lv_obj_set_pos(image_option3_scr_uiflowmenucommonoption, 272, 0); + } + else if (i == 3) + { + lv_obj_set_pos(image_option4_scr_uiflowmenucommonoption, 272, 0); + } + ui_hidden = false; + } + + if (pItem->ItemId == IDM_BATTERY_TYPE && s_SelOption < 3) + { + + if (puiPara->BatteryType == SF_BATT_LI_PACK){ + if (i < 1) + { + lv_plugin_menu_set_item_state(menu_option, 0, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + if (i < 2) + { + lv_plugin_menu_set_item_state(menu_option, 1, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + if (i < 3) + { + lv_plugin_menu_set_item_state(menu_option, 2, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + lv_obj_set_state(label_option4_scr_uiflowmenucommonoption, LV_STATE_DEFAULT); + ui_hidden = true; + lv_plugin_menu_select_item(menu_option, 3); + s_SelOption = 3; + SelOption = 3; + SysSetFlag(pItem->SysFlag,3); + } + else + { + printf("[LV_MenuCommonOption_UpdateContent]is not lith\n"); + lv_plugin_menu_set_item_state(menu_option, 3, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + + } + else if (pItem->ItemId == IDM_BATTERY_TYPE && s_SelOption == 3) + { + + if (puiPara->BatteryType == SF_BATT_LI_PACK) + { + printf("[LV_MenuCommonOption_UpdateContent]is lith\n"); + if (i < 1) + { + lv_plugin_menu_set_item_state(menu_option, 0, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + if (i < 2) + { + lv_plugin_menu_set_item_state(menu_option, 1, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + if (i < 3) + { + lv_plugin_menu_set_item_state(menu_option, 2, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + lv_obj_set_state(label_option4_scr_uiflowmenucommonoption, LV_STATE_DEFAULT); + lv_plugin_menu_select_item(menu_option, 3); + } + else + { + printf("[LV_MenuCommonOption_UpdateContent]change battery\n"); + lv_plugin_menu_set_item_state(menu_option, 3, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + ui_hidden = true; + lv_plugin_menu_select_item(menu_option, 0); + s_SelOption = 0; + SelOption = 0; + SysSetFlag(pItem->SysFlag,0); + lv_obj_set_hidden(image_option1_scr_uiflowmenucommonoption, true); + } + + } + } + + + lv_plugin_menu_set_item_img_id(menu_option, i, LV_PLUGIN_MENU_ITEM_VISIBLE_STATE_NUM, itemIconId); + lv_plugin_menu_set_item_hidden(menu_option, i, false); + + if (enableIndex[i+(Selindex * OPTION_PAGE_NUM)] == SelOption){ + lv_plugin_menu_select_item(menu_option, i); + } + + } + + DBG_DUMP("%s ui_hidden %d=%d\r\n", __func__,i,ui_hidden); + if (i==0) + { lv_obj_set_hidden(image_option1_scr_uiflowmenucommonoption, ui_hidden); - }else if(i == 1){ + } + else if (i == 1) + { lv_obj_set_hidden(image_option2_scr_uiflowmenucommonoption, ui_hidden); - }else if(i == 2){ + } + else if (i == 2) + { lv_obj_set_hidden(image_option3_scr_uiflowmenucommonoption, ui_hidden); - }else if(i == 3){ + } + else if (i == 3) + { lv_obj_set_hidden(image_option4_scr_uiflowmenucommonoption, ui_hidden); - }else if(i == 4){ + } + else if (i == 4) + { lv_obj_set_hidden(image_option5_scr_uiflowmenucommonoption, ui_hidden); } - } #else itemIndex = PAGE * (1 + (SelOption / PAGE)); @@ -428,6 +857,7 @@ static void LV_MenuOption_OnOpen(lv_obj_t* obj, TM_MENU *data) TM_ITEM* pItem; //TM_OPTION *pOption; UINT16 SelOption = 0; + UIMenuStoreInfo *puiPara = sf_ui_para_get(); pPage = &pMenu->pPages[pMenu->SelPage]; // pPage->SelItem = 0; @@ -462,7 +892,18 @@ static void LV_MenuOption_OnOpen(lv_obj_t* obj, TM_MENU *data) // lv_obj_set_hidden(container_main_menu_scr_uiflowmenucommonoption, true); // } LV_MenuCommonOption_UpdateContent(pMenu); - + if (pItem->ItemId == IDM_BATTERY_TYPE) + { + if(puiPara->BatteryType == SF_BATT_LI_PACK) + { + lv_plugin_menu_set_item_state(menu_option, 0, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + lv_plugin_menu_set_item_state(menu_option, 1, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + lv_plugin_menu_set_item_state(menu_option, 2, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + else{ + lv_plugin_menu_set_item_state(menu_option, 3, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + } lv_plugin_menu_select_item(menu_option, SelOption); } @@ -473,6 +914,7 @@ static void LV_MenuOption_OnNext(lv_obj_t* obj) TM_PAGE *pPage; TM_ITEM *pItem; UINT16 SelOption = 0; + UIMenuStoreInfo *puiPara = sf_ui_para_get(); pPage = &pMenu->pPages[pMenu->SelPage]; pItem = &pPage->pItems[pPage->SelItem]; @@ -481,18 +923,40 @@ static void LV_MenuOption_OnNext(lv_obj_t* obj) // DBG_DUMP("%s SelItem=%d\r\n", __func__,pPage->SelItem); // DBG_DUMP("%s Count=%d\r\n", __func__,pItem->Count); // DBG_DUMP("%s SelOption=%d\r\n", __func__,SelOption); - SelOption++; + + SelOption++; + if (pItem->ItemId == IDM_BATTERY_TYPE) + { + if(puiPara->BatteryType == SF_BATT_LI_PACK) + { + SelOption = 3; + SysSetFlag(pItem->SysFlag, SelOption); + lv_plugin_menu_set_item_state(menu_option, 0, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + lv_plugin_menu_set_item_state(menu_option, 1, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + lv_plugin_menu_set_item_state(menu_option, 2, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + else{ + if (SelOption >= 3) + { + SelOption = 0; + } + SysSetFlag(pItem->SysFlag, SelOption); + LV_MenuCommonOption_UpdateContent(pMenu); + lv_plugin_menu_set_item_state(menu_option, 3, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + return; + } if (SelOption >= pItem->Count){ // Close current UI Window now //SysSetFlag(pItem->SysFlag, PrevOption); //lv_plugin_scr_close(obj, NULL); SelOption = 0; - SysSetFlag(pItem->SysFlag, SelOption); - lv_plugin_menu_select_item(menu_option, SelOption); +// lv_plugin_menu_select_item(menu_option, SelOption); }else{ - SysSetFlag(pItem->SysFlag, SelOption); - lv_plugin_menu_select_next_item(menu_option); +// lv_plugin_menu_select_next_item(menu_option); } + SysSetFlag(pItem->SysFlag, SelOption); + LV_MenuCommonOption_UpdateContent(pMenu); // DBG_DUMP("%s flag=%d\r\n", __func__,SysGetFlag(pItem->SysFlag)); } @@ -502,23 +966,50 @@ static void LV_MenuOption_OnPrev(lv_obj_t* obj) TM_PAGE *pPage; TM_ITEM *pItem; UINT16 SelOption = 0; + UIMenuStoreInfo *puiPara = sf_ui_para_get(); pPage = &pMenu->pPages[pMenu->SelPage]; pItem = &pPage->pItems[pPage->SelItem]; SelOption = SysGetFlag(pItem->SysFlag); + + if (pItem->ItemId == IDM_BATTERY_TYPE) + { + if(puiPara->BatteryType == SF_BATT_LI_PACK) + { + SelOption = 3; + SysSetFlag(pItem->SysFlag, SelOption); + lv_plugin_menu_set_item_state(menu_option, 0, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + lv_plugin_menu_set_item_state(menu_option, 1, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + lv_plugin_menu_set_item_state(menu_option, 2, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + else{ + if (SelOption == 0) + { + SelOption = (pItem->Count - 2); + } + else + { + SelOption--; + } + SysSetFlag(pItem->SysFlag, SelOption); + LV_MenuCommonOption_UpdateContent(pMenu); + lv_plugin_menu_set_item_state(menu_option, 3, LV_PLUGIN_MENU_ITEM_STATE_DISABLED); + } + return; + } + if (SelOption == 0) { // Close current UI Window now //SysSetFlag(pItem->SysFlag, PrevOption); //lv_plugin_scr_close(obj, NULL); SelOption = (pItem->Count - 1); - SysSetFlag(pItem->SysFlag, SelOption); - lv_plugin_menu_select_item(menu_option, SelOption); +// lv_plugin_menu_select_item(menu_option, SelOption); } else { SelOption--; - SysSetFlag(pItem->SysFlag, SelOption); -// LV_MenuCommonOption_UpdateContent(pMenu); - lv_plugin_menu_select_prev_item(menu_option); +// lv_plugin_menu_select_prev_item(menu_option); } + SysSetFlag(pItem->SysFlag, SelOption); + LV_MenuCommonOption_UpdateContent(pMenu); // DBG_DUMP("%s flag=%d\r\n", __func__,SysGetFlag(pItem->SysFlag)); } @@ -602,13 +1093,15 @@ static void LV_MenuOption_OnSelected(lv_obj_t* obj) pItem->ItemId == IDM_OPERATING_TIME || pItem->ItemId == IDM_DATE_AND_TIME || pItem->ItemId == IDM_MAX_NUM_DAY || - pItem->ItemId == IDM_SEND_TYPE) + pItem->ItemId == IDM_SEND_TYPE || + pItem->ItemId == IDM_FORMAT_SD) && (pOption->TextId == IDS_CAMERA_NAME_ON || pOption->TextId == IDS_DATE_AND_TIME_MANUAL || pOption->TextId == IDS_SEND_TYPE_ONCE_DAY || pOption->TextId == IDS_SEND_TYPE_TWICE_DAY || pOption->TextId == IDS_SEND_TYPE_4_TIMES_DAY || - pOption->TextId == IDS_MAX_NUM_DAY_NUMBER)) + pOption->TextId == IDS_MAX_NUM_DAY_NUMBER || + pItem->ItemId == IDM_FORMAT_SD)) { lv_obj_set_hidden(container_main_menu_scr_uiflowmenucommonoption, true); isSetting = 1; @@ -633,8 +1126,22 @@ static void LV_MenuOption_OnSelected(lv_obj_t* obj) show_MaxNum_page(obj); break; case IDM_SEND_TYPE: - show_send_time_page(obj, SelOption); - break; + show_send_time_page(obj, SelOption); + break; + case IDM_FORMAT_SD: + if (0 == SelOption) + { + printf("format emmc.\n"); + //UIFlowMenuCommonConfirmAPI_Open(IDM_FORMAT_EMMC); + break; + } + if (1 == SelOption) + { + printf("format sd card.\n"); + UIFlowMenuCommonConfirmAPI_Open(IDM_FORMAT_SD); + break; + } + break; default: break; } @@ -796,7 +1303,7 @@ static void CommondOptionCloseSencondPage(lv_obj_t* obj, uint32_t* key) pPage = &pMenu->pPages[pMenu->SelPage]; pItem = &pPage->pItems[pPage->SelItem]; UINT16 itemID = pItem->ItemId; - printf("\033[33m[UIFlowMenuCommonOptionEventCallback]LV_USER_EVENT_KEY_RELEASE key:%d\033[0m\n", *key); + printf("\033[33m[CommondOptionCloseSencondPage]LV_USER_EVENT_KEY_RELEASE key:%d\033[0m\n", *key); /* handle key event */ switch(itemID) { @@ -860,6 +1367,7 @@ static void CommondOptionCloseSencondPage(lv_obj_t* obj, uint32_t* key) } break; case IDM_FORMAT_SD: + break; case IDM_DATE_AND_TIME: if(isSetting) { @@ -917,15 +1425,49 @@ static void CommondOptionKeyCallback(lv_obj_t* obj, uint32_t* key) pPage = &pMenu->pPages[pMenu->SelPage]; pItem = &pPage->pItems[pPage->SelItem]; UINT16 itemID = pItem->ItemId; - printf("\033[33m[UIFlowMenuCommonOptionEventCallback]LV_USER_EVENT_KEY_RELEASE key:%d\033[0m\n", *key); + printf("\033[33m[CommondOptionKeyCallback]LV_USER_EVENT_KEY_RELEASE key:%d\033[0m\n", *key); /* handle key event */ + switch(*key) + { + case LV_USER_KEY_NEXT: + case LV_USER_KEY_DOWN: + { + //printf("[CommondOptionKeyCallback]>>>DOWN\n"); + break; + } + + case LV_USER_KEY_PREV: + case LV_USER_KEY_UP: + { + //printf("[CommondOptionKeyCallback]>>>UP\n"); + break; + } + + case LV_KEY_LEFT: + { + //printf("[CommondOptionKeyCallback]>>>LEFT\n"); + break; + } + + case LV_KEY_RIGHT: + { + //printf("[CommondOptionKeyCallback]>>>RIGHT\n"); + break; + } + case LV_KEY_ENTER: + { + //printf("[CommondOptionKeyCallback]>>>ENTER\n"); + break; + } + } + switch(itemID) { case IDM_NETWORK_SELECTION: Option_Network_Selection_Key(obj, *key); break; case IDM_QR_PICTURE: - UIFlowMenuCommonOption_Key(obj, *key); + //Option_qr_picture_Key(obj, *key); break; case IDM_PASSWORD: if(isSetting) @@ -981,6 +1523,8 @@ static void CommondOptionKeyCallback(lv_obj_t* obj, uint32_t* key) } break; case IDM_FORMAT_SD: + UIFlowMenuCommonOption_Key(obj, *key); + break; case IDM_DATE_AND_TIME: if(isSetting) { @@ -1054,6 +1598,7 @@ void UIFlowMenuCommonOptionEventCallback(lv_obj_t* obj, lv_event_t event) uint32_t key = LV_KEY_ENTER; CommondOptionCloseSencondPage(obj, &key); isSetting = 0; + s_SelOption = 100; UIFlowMenuCommonOption_ScrClose(obj); break; } diff --git a/code/application/source/mem/mem.c b/code/application/source/mem/mem.c index a3f811ee3..0ba91ca30 100755 --- a/code/application/source/mem/mem.c +++ b/code/application/source/mem/mem.c @@ -17,7 +17,7 @@ #define DBG_WRN(fmtstr, args...) printf("\033[33m%s(): \033[0m" fmtstr,__func__, ##args) #define DBG_ERR(fmtstr, args...) printf("\033[31m%s(): \033[0m" fmtstr,__func__, ##args) -#if 1 +#if 0 #define DBG_IND(fmtstr, args...) #else #define DBG_IND(fmtstr, args...) printf("%s(): " fmtstr, \ diff --git a/code/application/source/sf_app/Makefile b/code/application/source/sf_app/Makefile index 877ed739e..0ee1de076 100755 --- a/code/application/source/sf_app/Makefile +++ b/code/application/source/sf_app/Makefile @@ -298,7 +298,6 @@ SRC = \ ./code/source/qrcodeMng/sf_qrcode.c \ ./code/source/qrcodeMng/split.c \ ./code/source/storeMng/sf_storeMng.c \ - ./code/source/storeMng/sf_mmc_dev.c \ ./code/source/ttyusb/sf_hal_ttyusb.c \ ./code/source/4gMng/sf_4g_lpa.c \ ./code/source/4gMng/sf_4G_sms_lpa_cmd.c \ diff --git a/code/application/source/sf_app/code/source/app/sf_common.c b/code/application/source/sf_app/code/source/app/sf_common.c index 0dd30706d..fd8048023 100755 --- a/code/application/source/sf_app/code/source/app/sf_common.c +++ b/code/application/source/sf_app/code/source/app/sf_common.c @@ -596,8 +596,6 @@ static SINT32 sf_app_process_cmd_SD(SF_MESSAGE_BUF_S *pMessageBuf) SINT16 startup = sf_poweron_type_get(); MLOGD("[dev_id:%d,evt:%s]\n",pMessageBuf->arg2,app_process_SD_getstatusstring(pMessageBuf->arg1)); - - sf_mmc_dev_register(pMessageBuf); switch(pMessageBuf->arg1) { diff --git a/code/application/source/sf_app/code/source/storeMng/sf_mmc_dev.c b/code/application/source/sf_app/code/source/storeMng/sf_mmc_dev.c deleted file mode 100755 index 335881f79..000000000 --- a/code/application/source/sf_app/code/source/storeMng/sf_mmc_dev.c +++ /dev/null @@ -1,299 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "DCF.h" -#include "sf_type.h" -#include "sf_log.h" -#include "sf_fileMng.h" -#include "sf_storeMng.h" - -#include "sf_mmc_dev.h" -#include - -typedef struct -{ - int event; - int dev_id; - int mounted_status; -}STRG_CB_PARAM; - -static SF_ST_MMC_DEV sf_mmc_dev[MMC_DEV_MAX_NUM] = {0}; - -SINT32 sf_mmc_dev_space_check_full(const char *mountPath) -{ - SF_STORE_ATTR_S *pstoreattrs = NULL; - //SF_COMM_CHECK_POINTER(pstoreattrs,SF_FAILURE); - SINT32 fd = -1; - UINT32 Isfull = 0; - fd = open(mountPath, O_RDONLY,0); - if(fd >= 0) - { - struct statfs diskInfo; - statfs(mountPath, &diskInfo); - - if(diskInfo.f_bsize > 1024) - { - pstoreattrs->SDTotalSize = (diskInfo.f_blocks * (diskInfo.f_bsize >> 10)) >> 10 ; //blocks * 4096 / 1024 /1024 = MB - pstoreattrs->SDFree = (diskInfo.f_bavail * (diskInfo.f_bsize >> 10)) >> 10 ; - } - else - { - pstoreattrs->SDTotalSize = (diskInfo.f_blocks * diskInfo.f_bsize) >> 10 ; //blocks * 4096 / 1024 /1024 = MB - pstoreattrs->SDFree = (diskInfo.f_bavail * diskInfo.f_bsize) >> 10 ; - } - close(fd); - - if(pstoreattrs->SDTotalSize > 0) - pstoreattrs->SDStatus = 0; //SD card SUCESS - else - pstoreattrs->SDStatus = 2; //SD card ERROR - } - else - { - pstoreattrs->SDStatus = 1; //SD card not insert - pstoreattrs->SDFree = 0; - pstoreattrs->SDTotalSize = 0; - return SF_FAILURE; - } - - MLOGD("SDStatus = %d,SDFree = %d MB,SDTotalSize = %d MB\n", pstoreattrs->SDStatus, pstoreattrs->SDFree,pstoreattrs->SDTotalSize); - - if(pstoreattrs->SDStatus != 0) - return pstoreattrs->SDStatus; - - Isfull = (pstoreattrs->SDFree <= SD_WARNING_SPACE)?1:0; - return Isfull; - -} - - -static int sf_mmc_dev_node_check(const char *devName) -{ - int tryCnt = 200; - int ret = access(devName, F_OK); - while (ret != 0 && tryCnt--) - { - usleep(10*1000); - ret = access(devName, F_OK); - } - - if (tryCnt < 0) - { - printf("no found %s\n", devName); - return -1; - } - return ret; -} - -void sf_mmc_dev_register(SF_MESSAGE_BUF_S *pMessageBuf) -{ - STRG_CB_PARAM strg_cb_param; - - UIMenuStoreInfo *puiPara = sf_app_ui_para_get(); - strg_cb_param.event = pMessageBuf->arg1; - strg_cb_param.dev_id = pMessageBuf->arg2; - strg_cb_param.mounted_status = pMessageBuf->arg3; - - MLOGD("[dev_id:%d, evt:%d]\n",strg_cb_param.dev_id, strg_cb_param.event); - - if(strg_cb_param.dev_id == MMC_DEV_SD) - { - if(strg_cb_param.event == CMD_SD_STRG_CB_INSERTED) - { - sf_mmc_dev[MMC_DEV_SD].node == MMC_DEV_NODE_STATE_EXIST; - } - else if(strg_cb_param.event == CMD_SD_STRG_CB_REMOVED) - { - sf_mmc_dev[MMC_DEV_SD].node == MMC_DEV_NODE_STATE_NO_EXIST; - } - else if(strg_cb_param.event == CMD_SD_STRG_CB_MOUNT_FINISH) - { - sf_mmc_dev[MMC_DEV_SD].moumted_state = MMC_DEV_MOUNT_STATE_MOUNTED; - } - else if(strg_cb_param.event == CMD_SD_STRG_CB_UNMOUNT_FINISH) - { - sf_mmc_dev[MMC_DEV_SD].moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED; - } - - UINT32 isfull = sf_mmc_dev_space_check_full(SD_MOUNT_ROOT); - if(isfull == 1) - { - sf_mmc_dev[MMC_DEV_SD].space_state == MMC_DEV_SPACE_STATE_NO_ENOUGH; - } - else if(isfull == 0) - { - sf_mmc_dev[MMC_DEV_SD].space_state == MMC_DEV_SPACE_STATE_ENOUGH; - } - - if(puiPara->SdLoopSwitch == 1) - { - sf_mmc_dev[MMC_DEV_SD].loop_state == MMC_DEV_LOOP_STATE_ON; - } - else if(puiPara->SdLoopSwitch == 0) - { - sf_mmc_dev[MMC_DEV_SD].loop_state == MMC_DEV_LOOP_STATE_OFF; - } - - } - else if(strg_cb_param.dev_id == MMC_DEV_EMMC) - { - if(sf_mmc_dev_node_check(EMMC_DEVICE_NAME) == 0) - { - sf_mmc_dev[MMC_DEV_EMMC].node == MMC_DEV_NODE_STATE_EXIST; - } - else - { - sf_mmc_dev[MMC_DEV_EMMC].node == MMC_DEV_NODE_STATE_NO_EXIST; - } - - if(strg_cb_param.event == CMD_SD_STRG_CB_MOUNT_FINISH) - { - sf_mmc_dev[MMC_DEV_EMMC].moumted_state = MMC_DEV_MOUNT_STATE_MOUNTED; - } - else if(strg_cb_param.event == CMD_SD_STRG_CB_UNMOUNT_FINISH) - { - sf_mmc_dev[MMC_DEV_EMMC].moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED; - } - - UINT32 isfull = sf_mmc_dev_space_check_full(EMMC_MOUNT_ROOT); - if(isfull == 1) - { - sf_mmc_dev[MMC_DEV_EMMC].space_state == MMC_DEV_SPACE_STATE_NO_ENOUGH; - } - else if(isfull == 0) - { - sf_mmc_dev[MMC_DEV_EMMC].space_state == MMC_DEV_SPACE_STATE_ENOUGH; - } - - if(puiPara->SdLoopSwitch == 1) - { - sf_mmc_dev[MMC_DEV_EMMC].loop_state == MMC_DEV_LOOP_STATE_ON; - } - else if(puiPara->SdLoopSwitch == 0) - { - sf_mmc_dev[MMC_DEV_EMMC].loop_state == MMC_DEV_LOOP_STATE_OFF; - } - } -} - -MMC_DEV_TYPE sf_mmc_check_workable_dev(void) -{ - MMC_DEV_TYPE workable_dev = MMC_DEV_NO; - MLOGD("sf mmc check workable dev start!!!\n"); - 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_EMMC].moumted_state == MMC_DEV_MOUNT_STATE_MOUNTED) - { - if(sf_mmc_dev[MMC_DEV_EMMC].space_state == MMC_DEV_SPACE_STATE_ENOUGH) - { - workable_dev = MMC_DEV_EMMC; - } - else if(sf_mmc_dev[MMC_DEV_EMMC].space_state == MMC_DEV_SPACE_STATE_NO_ENOUGH) - { - if(sf_mmc_dev[MMC_DEV_EMMC].loop_state == MMC_DEV_LOOP_STATE_ON) - { - workable_dev = MMC_DEV_EMMC; - } - } - } - } - else if(sf_mmc_dev[MMC_DEV_SD].node == MMC_DEV_NODE_STATE_NO_EXIST) //SD节点不存在 - { - if(sf_mmc_dev[MMC_DEV_SD].moumted_state == MMC_DEV_MOUNT_STATE_MOUNTED) - { - if(sf_mmc_dev[MMC_DEV_SD].space_state == MMC_DEV_SPACE_STATE_ENOUGH) - { - workable_dev = MMC_DEV_SD; - } - else if(sf_mmc_dev[MMC_DEV_SD].space_state == MMC_DEV_SPACE_STATE_NO_ENOUGH) - { - if(sf_mmc_dev[MMC_DEV_SD].loop_state == MMC_DEV_LOOP_STATE_ON) - { - workable_dev = MMC_DEV_SD; - } - } - } - } - else //MMC节点都存在 - { - if((sf_mmc_dev[MMC_DEV_SD].moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED) && - (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_SD].loop_state == MMC_DEV_LOOP_STATE_ON) - { - workable_dev = MMC_DEV_EMMC; - } - } - } - else if(sf_mmc_dev[MMC_DEV_EMMC].moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED) - { - if(sf_mmc_dev[MMC_DEV_SD].space_state == MMC_DEV_SPACE_STATE_ENOUGH) - { - workable_dev = MMC_DEV_SD; - } - else - { - if(sf_mmc_dev[MMC_DEV_SD].loop_state == MMC_DEV_LOOP_STATE_ON) - { - workable_dev = MMC_DEV_SD; - } - } - } - else - { - if(sf_mmc_dev[MMC_DEV_EMMC].space_state == MMC_DEV_SPACE_STATE_ENOUGH && - sf_mmc_dev[MMC_DEV_SD].space_state == MMC_DEV_SPACE_STATE_ENOUGH) - { - workable_dev = MMC_DEV_EMMC; - } - else if(sf_mmc_dev[MMC_DEV_EMMC].space_state == MMC_DEV_SPACE_STATE_ENOUGH) - { - workable_dev = MMC_DEV_EMMC; - } - else if(sf_mmc_dev[MMC_DEV_SD].space_state == MMC_DEV_SPACE_STATE_ENOUGH) - { - workable_dev = MMC_DEV_SD; - } - else - { - if(sf_mmc_dev[MMC_DEV_SD].loop_state == MMC_DEV_LOOP_STATE_ON) - { - workable_dev = MMC_DEV_EMMC; - } - } - } - } - MLOGD("sf mmc check workable dev end, dev_id = %d!!!\n", workable_dev); - 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); - } - - return workable_dev; -} diff --git a/code/lib/include/FileSysTsk.h b/code/lib/include/FileSysTsk.h index 777487a35..dd9c3e874 100644 --- a/code/lib/include/FileSysTsk.h +++ b/code/lib/include/FileSysTsk.h @@ -1715,6 +1715,9 @@ 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 FileSys_GetEMMCDiskInfo(parm1) FileSys_GetDiskInfoEx('B', parm1) + + #define fs_getcwd FileSys_GetCwd #define fs_setcwd FileSys_SetCwd #define fs_dir_getParent FileSys_GetParentDir diff --git a/code/lib/source/sifar/Makefile b/code/lib/source/sifar/Makefile index 12a051898..6f2ab65bf 100755 --- a/code/lib/source/sifar/Makefile +++ b/code/lib/source/sifar/Makefile @@ -84,7 +84,6 @@ SRC = \ $(APP_DIR)/source/sf_app/code/source/qrcodeMng/sf_base64.c \ $(APP_DIR)/source/sf_app/code/source/paramMng/sf_param_common.c \ $(APP_DIR)/source/sf_app/code/source/commMng/sf_message_queue.c \ - $(APP_DIR)/source/sf_app/code/source/storeMng/sf_mmc_dev.c \ $(APP_DIR)/source/sf_app/code/source/commMng/sf_share_mem.c \ $(APP_DIR)/source/sf_app/code/source/fileMng/sf_fileMng.c \ $(APP_DIR)/source/sf_app/code/source/wifi/sf_data_transfer.c \ diff --git a/rtos/code/application/source/cardv/SrcCode/System/sys_filesys.c b/rtos/code/application/source/cardv/SrcCode/System/sys_filesys.c index 76e08e3e4..6511fedcf 100755 --- a/rtos/code/application/source/cardv/SrcCode/System/sys_filesys.c +++ b/rtos/code/application/source/cardv/SrcCode/System/sys_filesys.c @@ -107,7 +107,7 @@ static void card_insert_job(void) FileSys_WaitFinishEx('A'); FileSys_SetParamEx('A', FST_PARM_UPDATE_FSINFO , TRUE); - sf_rtos_mmc_dev_register(0, ret); + SF_RtosStrgRegister(0, ret); #if HUNTING_CAMERA_MCU == ENABLE //if(TRUE == sf_check_card_full()) //{ @@ -142,7 +142,7 @@ static void card_insert_job(void) } // call the function to wait init finish FileSys_WaitFinishEx('B'); - sf_rtos_mmc_dev_register(1, ret); + SF_RtosStrgRegister(1, ret); // FileSys_SetParamEx('B', FST_PARM_UPDATE_FSINFO , TRUE); #endif @@ -163,6 +163,7 @@ static void sys_detect_card_task(void) #if defined(_EMBMEM_EMMC_) THREAD_ENTRY(); + SF_RtosStrgInit(); card_insert_job(); THREAD_RETURN(0); @@ -195,7 +196,7 @@ static void sys_detect_card_task(void) vTaskDelay(pdMS_TO_TICKS(1000)); } - + SF_RtosStrgUnInit(); THREAD_RETURN(0); #endif } diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c index c2079f0a6..e0472d576 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/MovieFast/MovieFast.c @@ -64,6 +64,7 @@ #endif #include "IOCfg.h" #include +#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) @@ -1233,6 +1242,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()) diff --git a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c index 5484fb608..149595b58 100644 --- a/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c +++ b/rtos/code/application/source/cardv/SrcCode/UIApp/PhotoFast/PhotoFast.c @@ -42,6 +42,8 @@ #include #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) diff --git a/rtos/code/driver/na51089/include/sf_sd_common.h b/rtos/code/driver/na51089/include/sf_sd_common.h index 53e57b379..89838456f 100755 --- a/rtos/code/driver/na51089/include/sf_sd_common.h +++ b/rtos/code/driver/na51089/include/sf_sd_common.h @@ -63,8 +63,13 @@ typedef struct 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; -int sf_rtos_mmc_dev_register(int devid, int mounted_state); -MMC_DEV_TYPE sf_rtos_mmc_check_workable_dev(void); +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 \ No newline at end of file diff --git a/rtos/code/driver/na51089/source/mcu/sf_sd_common.c b/rtos/code/driver/na51089/source/mcu/sf_sd_common.c index 6238d2d1e..43b8c7263 100755 --- a/rtos/code/driver/na51089/source/mcu/sf_sd_common.c +++ b/rtos/code/driver/na51089/source/mcu/sf_sd_common.c @@ -49,14 +49,12 @@ static BOOL IsCardFull = FALSE; SF_CALLBACK_SD_CMD g_fpSd_Exist_CB = NULL; extern BOOL DrvCARD_DetStrgCard(void); -static SF_RTOS_ST_MMC_DEV sf_mmc_dev[MMC_DEV_MAX_NUM] = {0}; - +static SF_RTOS_ST_MMC_DEV *sf_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) @@ -94,6 +92,56 @@ UINT32 sf_check_card_full(void) return ret; } + +void sf_sd_exist_reg_cb(SF_CALLBACK_SD_CMD fpCB) +{ + g_fpSd_Exist_CB = fpCB; +} + +BOOL sf_in_card_exist(void) +{ + return DrvCARD_DetStrgCard(); + /* + if(g_fpSd_Exist_CB) + { + return g_fpSd_Exist_CB(); + } + else + { + return FALSE; + }*/ + +} + +void SF_RtosStrgInit(void) +{ + for(int i = 0; i < MMC_DEV_MAX_NUM; i++) + { + sf_mmc_dev[i] = (SF_RTOS_ST_MMC_DEV *)malloc(sizeof(SF_RTOS_ST_MMC_DEV)); + if(sf_mmc_dev[i] == NULL) { + // 处理内存分配失败的情况 + } + sf_mmc_dev[i]->dcf_handle = -1; + //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; + } + DBG_WRN("SF_RtosStrgInit!\n"); +} + +void SF_RtosStrgUnInit(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; + } + } + DBG_WRN("SF_RtosStrgUnInit!\n"); +} + static UINT32 sf_mmc_dev_space_check_full(MMC_DEV_TYPE mmc_dev) { UINT64 diskFree = 0; @@ -119,99 +167,79 @@ static UINT32 sf_mmc_dev_space_check_full(MMC_DEV_TYPE mmc_dev) if(diskFree < 30) /* 30MB */ { - ret = TRUE; - //if(0 == puiPara->SdLoopSwitch) - { - IsCardFull = TRUE; - } - //printf("%s:%d sd card is full diskFree=%lu",__FUNCTION__,__LINE__,diskFree); + ret = TRUE; + IsCardFull = TRUE; } else { - ret = FALSE; - + ret = FALSE; } - - printf("[%s:%d]sd card diskFree=%lluM\n", __FUNCTION__, __LINE__, diskFree); - + DBG_WRN("[%s:%d]sd card diskFree=%lluM\n", __FUNCTION__, __LINE__, diskFree); return ret; } -void sf_sd_exist_reg_cb(SF_CALLBACK_SD_CMD fpCB) -{ - g_fpSd_Exist_CB = fpCB; -} - -BOOL sf_in_card_exist(void) -{ - return DrvCARD_DetStrgCard(); - /* - if(g_fpSd_Exist_CB) - { - return g_fpSd_Exist_CB(); - } - else - { - return FALSE; - }*/ - -} - -int sf_rtos_mmc_dev_register(int devid, int mounted_state) +int SF_RtosStrgRegister(int devid, int mounted_state) { if(mounted_state == FST_STA_OK) { - sf_mmc_dev[devid].moumted_state = MMC_DEV_MOUNT_STATE_MOUNTED; + sf_mmc_dev[devid]->moumted_state = MMC_DEV_MOUNT_STATE_MOUNTED; } else { - sf_mmc_dev[devid].moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED; + sf_mmc_dev[devid]->moumted_state = MMC_DEV_MOUNT_STATE_UNMOUNTED; } int isfull = sf_mmc_dev_space_check_full(devid); if(isfull) { - sf_mmc_dev[devid].space_state = MMC_DEV_SPACE_STATE_ENOUGH; + sf_mmc_dev[devid]->space_state = MMC_DEV_SPACE_STATE_ENOUGH; } else{ - sf_mmc_dev[devid].space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH; + sf_mmc_dev[devid]->space_state = MMC_DEV_SPACE_STATE_NO_ENOUGH; } - + DBG_WRN("devid = %d, state = %d\n", devid, mounted_state); return 0; } -MMC_DEV_TYPE sf_rtos_mmc_check_workable_dev(void) +void SF_RtosStrgSetDcfHandle(UINT32 strg_id, UINT32 handle) +{ + sf_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; - 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)) + 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) + 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) + if(sf_mmc_dev[MMC_DEV_EMMC]->space_state == MMC_DEV_SPACE_STATE_ENOUGH) { workable_dev = MMC_DEV_EMMC; } else { - //if(sf_mmc_dev[MMC_DEV_SD].loop_state == MMC_DEV_LOOP_STATE_ON) + //if(sf_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON) { //workable_dev = MMC_DEV_EMMC; } } } - else if(sf_mmc_dev[MMC_DEV_EMMC].moumted_state == MMC_DEV_MOUNT_STATE_UNMOUNTED) + 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) + 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) + //if(sf_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON) { //workable_dev = MMC_DEV_SD; } @@ -219,29 +247,42 @@ MMC_DEV_TYPE sf_rtos_mmc_check_workable_dev(void) } 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) + 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) + 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) + 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) + //if(sf_mmc_dev[MMC_DEV_SD]->loop_state == MMC_DEV_LOOP_STATE_ON) { //workable_dev = MMC_DEV_EMMC; } } } - return workable_dev; + DBG_WRN("dev_id = %d!!!\n", workable_dev); + for(int i = 0; i < 2; i++) + { + DBG_WRN("mount:%d, space:%d\n", + sf_mmc_dev[i]->moumted_state, sf_mmc_dev[i]->space_state); + } + + if(workable_dev != MMC_DEV_NO) + { + DBG_WRN("dcf_handle = %d\n", sf_mmc_dev[workable_dev]->dcf_handle); + return sf_mmc_dev[workable_dev]; + } + else + return NULL; }