VOS_VOID OM_LittleImgRemoveLogFile(VOS_UINT32 ulFileId) { VOS_CHAR acFileName[LOG_FILE_PATH_MAX_LENGTH] = {0}; LOG_FILE_DISK_INFO_STRU stDiskInfo; /* 拼接LOG文件名称 */ VOS_sprintf((VOS_CHAR *)acFileName, "%s_%04d", g_acLogFileName, ulFileId); DRV_FILE_RMFILE(acFileName); /* 更新全局信息 */ g_stLogFileSaveInfo.ulFileMinId++; /* 调用底软接口返回 */ if (DRV_ERROR == DRV_FILE_GET_DISKSPACE( g_acFileSystemRoot, (VOS_UINT*)&stDiskInfo.ulDiskSpace, (VOS_UINT*)&stDiskInfo.ulUsedSpace, (VOS_UINT*)&stDiskInfo.ulValidSpace)) { PS_LOG(WUEPS_PID_OM, 0, PS_PRINT_ERROR, "OM_LittleImgRemoveLogFile: DRV_FILE_GET_DISKSPACE Failed!"); return; } g_stLogFileSaveInfo.ulFSFreeSpace = stDiskInfo.ulValidSpace; return; }
VOS_UINT32 diag_FsSpaceProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_FS_SPACE_REQ* pstFsReq = NULL; DIAG_CMD_FS_SPACE_CNF stFsCnf = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; #if(VOS_OS_VER == VOS_LINUX) mm_segment_t old_fs; old_fs = get_fs(); set_fs(KERNEL_DS); #endif pstFsReq = (DIAG_CMD_FS_SPACE_REQ*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); ret = (VOS_UINT32)DRV_FILE_GET_DISKSPACE((VOS_CHAR*)(pstFsReq->szDirectory),(VOS_UINT*)&stFsCnf.ulDiskSpace, (VOS_UINT*)&stFsCnf.ulUsedSpace,(VOS_UINT*)&stFsCnf.ulValidSpace); stFsCnf.ulRet = ret; #if(VOS_OS_VER == VOS_LINUX) set_fs(old_fs); #endif /*打包回复给FW*/ ret = diag_AgentCnfFun((VOS_UINT8*)&stFsCnf,ulCmdId,sizeof(DIAG_CMD_FS_SPACE_CNF)); return ret; }
VOS_UINT32 OM_LittleImgCreateLogFile(VOS_UINT32 ulFileSize) { VOS_CHAR acFileName[LOG_FILE_PATH_MAX_LENGTH] = {0}; LOG_FILE_DISK_INFO_STRU stDiskInfo; /* 调用底软接口返回 */ if (DRV_ERROR == DRV_FILE_GET_DISKSPACE( g_acFileSystemRoot, (VOS_UINT*)&stDiskInfo.ulDiskSpace, (VOS_UINT*)&stDiskInfo.ulUsedSpace, (VOS_UINT*)&stDiskInfo.ulValidSpace)) { PS_LOG(WUEPS_PID_OM, 0, PS_PRINT_ERROR, "OM_LittleImgRemoveLogFile: DRV_FILE_GET_DISKSPACE Failed!"); return VOS_ERR; } g_stLogFileSaveInfo.ulFSFreeSpace = stDiskInfo.ulValidSpace; /*文件系统已满无法创建LOG文件*/ while ((ulFileSize >= g_stLogFileSaveInfo.ulFSFreeSpace) && (g_stLogFileSaveInfo.ulFileMinId != g_stLogFileSaveInfo.ulFileMaxId)) { /*删除最老的LOG文件*/ OM_LittleImgRemoveLogFile(g_stLogFileSaveInfo.ulFileMinId); } /* 以最大的ID创建文件名称 */ VOS_sprintf((VOS_CHAR *)acFileName, "%s_%04d", g_acLogFileName, g_stLogFileSaveInfo.ulFileMaxId); g_lFileHandle = OM_Open((VOS_CHAR *)acFileName, DRV_O_CREAT|DRV_O_TRUNC|DRV_O_RDWR); if (DRV_FILE_NULL == g_lFileHandle) { g_ulLittleImgLogErr = LOG_OPERATION_OPEN_FILE_FAIL; return VOS_ERR; } /* 更新全局变量信息 */ g_stLogFileSaveInfo.ulFileMaxId++; g_stLogFileSaveInfo.ulCurLogFileSize = 0; return VOS_OK; }
VOS_UINT32 OM_LittleImgInitLogFile(VOS_UINT32 ulFileSize) { LOG_FILE_DISK_INFO_STRU stDiskInfo; /* 创建LOG文件对应的信号量 */ if (VOS_OK != VOS_SmMCreate("FILE", VOS_SEMA4_FIFO, &g_stLogFileSaveInfo.ulSem)) { g_ulLittleImgLogErr = LOG_OPERATION_CREATE_SEM_FAIL; return VOS_ERR; } if (VOS_OK != VOS_SmP(g_stLogFileSaveInfo.ulSem, LOG_SEM_TIMEOUT_VALUE)) { g_ulLittleImgLogErr = LOG_OPERATION_POST_SEM_FAIL; return VOS_ERR; } /* 判断LOG目录是否已经存在 */ if (VOS_OK != DRV_FILE_ACCESS(g_acLogFileSaveDir, 0)) { /* 如果目录不存在则创建LOG目录 */ if(DRV_ERROR == DRV_FILE_MKDIR(g_acLogFileSaveDir)) { g_ulLittleImgLogErr = LOG_OPERATION_MKDIR_FAIL; VOS_SmV(g_stLogFileSaveInfo.ulSem); return VOS_ERR; } } g_stLogFileSaveInfo.ulFileMinId = 1; g_stLogFileSaveInfo.ulFileMaxId = 1; g_stLogFileSaveInfo.ulCurLogFileMaxSize = ulFileSize * LOG_FILE_UNIT_SIZE; /* 调用底软接口返回 */ if (DRV_ERROR == DRV_FILE_GET_DISKSPACE( g_acFileSystemRoot, (VOS_UINT*)&stDiskInfo.ulDiskSpace, (VOS_UINT*)&stDiskInfo.ulUsedSpace, (VOS_UINT*)&stDiskInfo.ulValidSpace)) { PS_LOG(WUEPS_PID_OM, 0, PS_PRINT_ERROR, "OM_LittleImgInitLogFile: DRV_FILE_GET_DISKSPACE Failed!"); return VOS_ERR; } g_stLogFileSaveInfo.ulFSFreeSpace = stDiskInfo.ulValidSpace; /* 如果NV项中文件大小不合法,修改为默认值 */ if (g_stLogFileSaveInfo.ulCurLogFileMaxSize > g_stLogFileSaveInfo.ulFSFreeSpace) { g_stLogFileSaveInfo.ulCurLogFileMaxSize = LOG_FILE_SIZE * LOG_FILE_UNIT_SIZE; } /* 如果默认值大于文件系统大小,返回失败 */ if (g_stLogFileSaveInfo.ulCurLogFileMaxSize > g_stLogFileSaveInfo.ulFSFreeSpace) { g_ulLittleImgLogErr = LOG_OPERATION_LENGTH_TOOBIG; VOS_SmV(g_stLogFileSaveInfo.ulSem); return VOS_ERR; } if (VOS_OK != OM_LittleImgCreateLogFile(g_stLogFileSaveInfo.ulCurLogFileMaxSize)) { LogPrint("\r\n OM_LittleImgInitLogFile: Create Log File Failed.! \r\n"); VOS_SmV(g_stLogFileSaveInfo.ulSem); return VOS_ERR; } g_ulLogFileSaveFlg = LOG_FILE_ENABLE; VOS_SmV(g_stLogFileSaveInfo.ulSem); return VOS_OK; }