/***************************************************************************** Function Name : diag_FsOpenProc Description : 打开或创建文件 Input :VOS_UINT8* pstReq VOS_UINT32 ulCmdId Output : None Return : VOS_UINT32 History : 1.w00182550 2013-1-29 Draft Enact *****************************************************************************/ VOS_UINT32 diag_FsOpenProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_FS_OPEN_REQ* pstFsReq = NULL; DIAG_CMD_FS_OPEN_CNF stFsCnf = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; pstFsReq = (DIAG_CMD_FS_OPEN_REQ*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); /*不支持操作文件的重入操作*/ if (DIAG_FILE_NULL != g_stDiagFileInfo.lFile) { diag_printf("warning: last File import not finished\n"); diag_FsClose(); } /*lint -save -e539*/ diag_fs_log(); /*lint -restore*/ g_stDiagFileInfo.lFile = diag_FsOpen(pstFsReq->szDirectory, (VOS_INT)(pstFsReq->ulMode)); if (g_stDiagFileInfo.lFile < 0) { g_stDiagFileInfo.lFile = DIAG_FILE_NULL; ret = VOS_ERR; } else { /*启动定时器*/ g_stDiagFileInfo.hTimer = VOS_NULL_PTR; ret = VOS_StartRelTimer(&g_stDiagFileInfo.hTimer, diag_GetAgentPid(), DIAG_CMD_FILE_OPS_TIME_OUT_LEN, 0, DIAG_TMR_FILE_OP_TIMEOUT_PARAM,VOS_RELTIMER_NOLOOP, VOS_TIMER_NO_PRECISION); if(ret != ERR_MSP_SUCCESS) { /*lint -save -e717*/ diag_printf("VOS_StartRelTimer fail [%s]\n",__func__); /*lint -restore*/ } diag_fs_log(); } stFsCnf.ulRet = ret; /*打包回复给FW*/ ret = diag_AgentCnfFun((VOS_UINT8*)&stFsCnf,ulCmdId,sizeof(DIAG_CMD_FS_OPEN_CNF)); diag_fs_log(); return ret; }
VOS_INT32 diag_FsOpen(const VOS_CHAR *pcFileName, VOS_INT lFlag) { #if((VOS_OS_VER == VOS_VXWORKS) || (VOS_OS_VER == VOS_RTOSCK)) // VOS_CHAR *pucMode; #endif VOS_INT32 fp = 0; #if(VOS_OS_VER == VOS_LINUX) mm_segment_t old_fs; old_fs = get_fs(); set_fs(KERNEL_DS); #endif #if((VOS_OS_VER == VOS_VXWORKS) || (VOS_OS_VER == VOS_RTOSCK)) #if 0 switch(lFlag) { case (DIAG_FS_CREAT|DIAG_FS_APPEND|DIAG_FS_RDWR): pucMode = "ab+"; break; case (DIAG_FS_CREAT|DIAG_FS_APPEND|DIAG_FS_WRONLY): pucMode = "ab"; break; case (DIAG_FS_CREAT|DIAG_FS_TRUNC|DIAG_FS_RDWR): pucMode = "wb+"; break; case (DIAG_FS_CREAT|DIAG_FS_TRUNC|DIAG_FS_WRONLY): pucMode = "wb"; break; case DIAG_FS_RDWR: pucMode = "rb+"; break; case DIAG_FS_RDONLY: pucMode = "rb"; break; default: return DIAG_FILE_NULL; } #endif #endif #if(VOS_OS_VER == VOS_LINUX) fp = DIAG_FS_OPEN(pcFileName, lFlag,0755); #endif #if((VOS_OS_VER == VOS_VXWORKS) || (VOS_OS_VER == VOS_RTOSCK)) // fp = (VOS_INT32)DIAG_FS_OPEN(pcFileName, lFlag, pucMode); #endif diag_fs_log(); #if(VOS_OS_VER == VOS_LINUX) set_fs(old_fs); #endif return (VOS_INT32)fp; }
VOS_UINT32 diag_FsExportProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { //DIAG_CMD_FS_EXPORT_REQ* pstFsReq = NULL; DIAG_CMD_FS_EXPORT_CNF *pstFsCnf = NULL; VOS_UINT32 ret = ERR_MSP_SUCCESS; VOS_UINT32 ulReadSize = 0; #if(VOS_OS_VER == VOS_LINUX) mm_segment_t old_fs; #endif if (DIAG_FILE_NULL == g_stDiagFileInfo.lFile) { diag_fs_log(); return ERR_MSP_FAILURE; } /*停止定时器*/ VOS_StopRelTimer(&g_stDiagFileInfo.hTimer); diag_fs_log(); pstFsCnf = (DIAG_CMD_FS_EXPORT_CNF*)VOS_MemAlloc(diag_GetAgentPid(), DYNAMIC_MEM_PT, sizeof(DIAG_CMD_FS_EXPORT_CNF)+DIAG_TRANSFER_BLOCK_MAX_SIZE); if (VOS_NULL_PTR == pstFsCnf) { diag_fs_log(); diag_FsClose(); return ERR_MSP_FAILURE; } #if(VOS_OS_VER == VOS_LINUX) old_fs = get_fs(); set_fs(KERNEL_DS); #endif #if(VOS_OS_VER == VOS_LINUX) ulReadSize = (VOS_UINT32)DIAG_FS_READ(g_stDiagFileInfo.lFile,(VOS_CHAR*)pstFsCnf + sizeof(DIAG_CMD_FS_EXPORT_CNF), DIAG_TRANSFER_BLOCK_MAX_SIZE); #else ulReadSize = (VOS_UINT32)DIAG_FS_READ((FILE *)g_stDiagFileInfo.lFile,(VOS_CHAR*)pstFsCnf + sizeof(DIAG_CMD_FS_EXPORT_CNF), DIAG_TRANSFER_BLOCK_MAX_SIZE); #endif diag_fs_log(); #if(VOS_OS_VER == VOS_LINUX) set_fs(old_fs); #endif /*读取文件出现错误*/ if (DIAG_FS_ERROR == (VOS_INT32)ulReadSize) { diag_fs_log(); VOS_MemFree(diag_GetAgentPid(),pstFsCnf); diag_FsClose(); return ERR_MSP_FAILURE; } /*表明已经没有内容可以读取,文件内容全部读完*/ if (0 == ulReadSize) { diag_fs_log(); diag_FsClose(); } else { diag_fs_log(); /*启动定时器*/ g_stDiagFileInfo.hTimer = VOS_NULL_PTR; ret = VOS_StartRelTimer(&g_stDiagFileInfo.hTimer, diag_GetAgentPid(), DIAG_CMD_FILE_OPS_TIME_OUT_LEN, 0, DIAG_TMR_FILE_OP_TIMEOUT_PARAM, VOS_RELTIMER_NOLOOP, VOS_TIMER_NO_PRECISION); if(ret != ERR_MSP_SUCCESS) { diag_printf("VOS_StartRelTimer fail [%s]\n", __func__); } } pstFsCnf->ulRet = ret; pstFsCnf->ulSize = ulReadSize; /*打包回复给FW*/ ret = diag_AgentCnfFun((VOS_UINT8*)pstFsCnf,ulCmdId,sizeof(DIAG_CMD_FS_EXPORT_CNF)+ulReadSize); VOS_MemFree(diag_GetAgentPid(),pstFsCnf); diag_fs_log(); return ret; }
VOS_UINT32 diag_FsImportProc(VOS_UINT8* pstReq,VOS_UINT32 ulCmdId) { DIAG_CMD_FS_IMPORT_REQ* pstFsReq = NULL; DIAG_CMD_FS_IMPORT_CNF stFsCnf = {0}; VOS_UINT32 ret = ERR_MSP_SUCCESS; VOS_INT32 lResult =0; #if(VOS_OS_VER == VOS_LINUX) mm_segment_t old_fs; #endif pstFsReq = (DIAG_CMD_FS_IMPORT_REQ*)(DIAG_OFFSET_HEAD_GET_DATA(pstReq)); if (DIAG_FILE_NULL == g_stDiagFileInfo.lFile) { return ERR_MSP_FAILURE; } diag_fs_log(); /*停止定时器*/ VOS_StopRelTimer(&g_stDiagFileInfo.hTimer); /*写文件完毕,关闭文件*/ if (0 == pstFsReq->ulSize) { diag_fs_log(); diag_FsClose(); /*打包回复给FW*/ stFsCnf.ulRet = ERR_MSP_SUCCESS; ret = diag_AgentCnfFun((VOS_UINT8*)&stFsCnf,ulCmdId,sizeof(DIAG_CMD_FS_IMPORT_CNF)); return ret; } #if(VOS_OS_VER == VOS_LINUX) old_fs = get_fs(); set_fs(KERNEL_DS); #endif #if(VOS_OS_VER == VOS_LINUX) lResult = DIAG_FS_WRITE(g_stDiagFileInfo.lFile, pstFsReq->acContent, pstFsReq->ulSize); #else lResult = DIAG_FS_WRITE((FILE *)g_stDiagFileInfo.lFile, pstFsReq->acContent, pstFsReq->ulSize); #endif diag_fs_log(); #if(VOS_OS_VER == VOS_LINUX) set_fs(old_fs); #endif /*写文件操作失败或者写入长度不正确*/ if ((DIAG_FS_ERROR == lResult)||(lResult != (VOS_INT32)(pstFsReq->ulSize))) { diag_fs_log(); diag_printf("[%s]!,lResult=%d\n",__FUNCTION__,lResult); diag_FsClose(); return VOS_ERR; } /*启动定时器*/ ret = VOS_StartRelTimer(&g_stDiagFileInfo.hTimer, diag_GetAgentPid(),DIAG_CMD_FILE_OPS_TIME_OUT_LEN,0,DIAG_TMR_FILE_OP_TIMEOUT_PARAM,VOS_RELTIMER_NOLOOP, VOS_TIMER_NO_PRECISION); if(ret != ERR_MSP_SUCCESS) { diag_printf("VOS_StartRelTimer fail [%s]\n",__func__); } stFsCnf.ulRet = ret; /*打包回复给FW*/ ret = diag_AgentCnfFun((VOS_UINT8*)&stFsCnf,ulCmdId,sizeof(DIAG_CMD_FS_IMPORT_CNF)); return ret; }