⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fs31fwrite.c

📁 我今天开始上传5份TI、NXP、MTK的手机开发全套资料。希望对大家有很大的帮助
💻 C
字号:
#ifdef FSS_FTR#define ACCESS_RIGHTS_INTERNAL_FS#define FS31FWRITE_C#include "Fs.h"#undef  FILE_NUMBER#define FILE_NUMBER 31 #undef PROCEDURE_NUMBER #define PROCEDURE_NUMBER 1void Fs31_01Fwrite( void * pp_Param ){  s32 vl_NewFileSize;  s32 vl_SizeToWrite, vl_WritenSize;#ifdef SYNCHRONOUS_FILE_SYSTEM_FTR  u8 vl_NoDelayFlag;  t_ProcessIdentity vl_ProcessIdentity;#endif  register t_FsCmdFWrite * pl_Param = ( t_FsCmdFWrite *) pp_Param;  register t_fsFILE * pl_Stream = pl_Param->p_Stream;/* #ifdef FS_DEBUG  */   /* Verify if  vp_Stream point on a stream if not OK enter an exception */   MC_FS_CO_VERIFY_IF_IS_FILE_OF_ENTITY( pl_Param, pl_Stream );   if ( MC_FS_STATUS(pl_Param) != FS_OK ) return;/* #endif */    /* Verify if file would open in write */    if ( pl_Stream->s_OpenMode.v_WriteEnabled == FALSE )    {	/* Err -> File not open for write */	MC_FS_STATUS(pl_Param) = FS_EBADF;	return;    }    /* If size of the elements < 0 or number of elements < 0 return no write to made */    if ( ( pl_Param->v_ElementSize < 0 ) || ( pl_Param->v_NumberOfElements < 0 ) )    {	/* Input parameters are uncoherent */	MC_FS_STATUS(pl_Param) = FS_EINVAL;	return;    }    /* Calculate size to read and verify if != 0 */    vl_SizeToWrite = pl_Param->v_ElementSize * pl_Param->v_NumberOfElements;    if ( vl_SizeToWrite == 0 )    {	/* Nothing to write return 0 elements writen */ 	pl_Param->v_NumbOfElementsWritten = 0;	return;    }#ifdef SYNCHRONOUS_FILE_SYSTEM_FTR         /* Copy the NoDelayFlag */    vl_NoDelayFlag = pl_Param->v_NoDelayFlag;        /* Get the tranmitter process ID */    vl_ProcessIdentity =	    pl_Param->s_FssMsgHeader.s_KernelMsgHeader.s_Transmitter;        /* Set the error 'Delay' if erase is on going */    if ( (v_FssNoDelay) && (vl_NoDelayFlag))    {	MC_FS_STATUS(pl_Param) = FS_ERR_DELAY_OPER;	Fs87_33StoreProcessNumber( vl_ProcessIdentity );	return;    }#endif    /* Is file in the appropriate state or if in write state is position at end of file */    if ( ( pl_Stream->v_StreamState == FS_SSTATE_IN_WRITE )				|| 	 ( pl_Stream->v_StreamState == FS_SSTATE_READ_OR_WRITE )				||	 (  ( pl_Stream->v_StreamState == FS_SSTATE_IN_READ ) 					&& 	    ( pl_Stream->v_FilePosition >= pl_Stream->v_FileSize)	 )       )    {	/* File enter write state */	pl_Stream->v_StreamState = FS_SSTATE_IN_WRITE;    }    else     {	/* We make like we are at end of file set number of elements readen to 0 */ 	pl_Param->v_NumbOfElementsWritten = 0;	/* Set an incoherent command order error */	MC_FS_STATUS(pl_Param) = FS_ERR_INCOHERENT_CMD_ORDER;	return;    }    /* Note that an operation would executed on the file */    pl_Stream->v_OperationExecuted = TRUE;    /* Set the interlayer table pointer on new volume */    MC_FS_LL_SET_NEW_VOL(MC_FS_VD_GET_VOL_PTR_OF_FILE( pl_Stream ));    /* If file was opened in append mode write is to made at end of file, so force file position 		at end of file regardless of current position */    if ( pl_Stream->s_OpenMode.v_OpenAppend == TRUE ) 			pl_Stream->v_FilePosition = pl_Stream->v_FileSize;    /* Calculate new file size */    if ( pl_Stream->v_FilePosition + vl_SizeToWrite > pl_Stream->v_FileSize )			vl_NewFileSize = pl_Stream->v_FilePosition + vl_SizeToWrite;    else vl_NewFileSize = pl_Stream->v_FileSize;    	    /* Write it in the IO buffer ( write only the totality of the size or if not enough 		place write nothing */#ifdef SYNCHRONOUS_FILE_SYSTEM_FTR    vl_WritenSize = MC_FS_BF_WRITE_DATA( pl_Stream, ( ascii *) (pl_Param->p_SrceBuff), vl_SizeToWrite,						 vl_NewFileSize, vl_NoDelayFlag, &MC_FS_STATUS(pl_Param));#else    vl_WritenSize = MC_FS_BF_WRITE_DATA( pl_Stream, ( ascii *) (pl_Param->p_SrceBuff), vl_SizeToWrite,						 vl_NewFileSize, &MC_FS_STATUS(pl_Param));#endif /* SYNCHRONOUS_FILE_SYSTEM_FTR */    if ( vl_WritenSize != 0)    {    	/* Update file size */	pl_Stream->v_FileSize = vl_NewFileSize;	/* Updates file position */    	pl_Stream->v_FilePosition += vl_WritenSize;	/* Updates number of elements writen */	pl_Param->v_NumbOfElementsWritten = pl_Param->v_NumberOfElements;    }    else    {	pl_Param->v_NumbOfElementsWritten = 0;#ifdef SYNCHRONOUS_FILE_SYSTEM_FTR		/* Store the process id if Delay error is occured */    	if ( pl_Param->s_FssMsgHeader.v_ErrNumber == FS_ERR_DELAY_OPER)	    Fs87_33StoreProcessNumber( vl_ProcessIdentity );#endif    }}#undef PROCEDURE_NUMBER #define PROCEDURE_NUMBER 2u32 Fs31_02ProcessFWrite( u8 vp_Behaviour,  const void * pp_Buff, t_fs_size_t vp_ElementSize,					 t_fs_size_t vp_NumberOfElements, t_fsFILE * pp_Stream){   /* Reserve message space */   t_FsCmdFWrite * pl_FWrite = (t_FsCmdFWrite * ) MC_FS_GET_MEMORY(sizeof(t_FsCmdFWrite));    /* Fill message with input parameters */    pl_FWrite->p_Stream = pp_Stream;    pl_FWrite->p_SrceBuff = pp_Buff;    pl_FWrite->v_ElementSize = vp_ElementSize;    pl_FWrite->v_NumberOfElements = vp_NumberOfElements;#ifdef SYNCHRONOUS_FILE_SYSTEM_FTR    pl_FWrite->v_NoDelayFlag      = FALSE;   /* Delay error is not expected						if erase is ongoing */#endif        /* Send message by setting operation and return command identifier */    return( MC_FS_MA_SEND_CMD_MSG_TO_FS(vp_Behaviour, (void*)pl_FWrite,FS_CMD_FWRITE_REQ));}#endif /* FSS_FTR */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -