long sl_FsWrite(long FileHdl, unsigned long Offset, unsigned char* pData, unsigned long Len) { _SlFsWriteMsg_u Msg; _SlCmdExt_t ExtCtrl; unsigned short ChunkLen; _SlReturnVal_t RetVal; long RetCount = 0; ExtCtrl.RxPayloadLen = 0; ExtCtrl.pRxPayload = NULL; ChunkLen = (unsigned short)sl_min(MAX_NVMEM_CHUNK_SIZE,Len); ExtCtrl.TxPayloadLen = ChunkLen; ExtCtrl.pTxPayload = (UINT8 *)(pData); Msg.Cmd.Offset = Offset; Msg.Cmd.Len = ChunkLen; Msg.Cmd.FileHandle = FileHdl; do { RetVal = _SlDrvCmdOp((_SlCmdCtrl_t *)&_SlFsWriteCmdCtrl, &Msg, &ExtCtrl); if(SL_OS_RET_CODE_OK == RetVal) { if( Msg.Rsp.status < 0) { if( RetCount > 0) { return RetCount; } else { return Msg.Rsp.status; } } RetCount += (long)Msg.Rsp.status; Len -= ChunkLen; Offset += ChunkLen; Msg.Cmd.Offset = Offset; ExtCtrl.pTxPayload += ChunkLen; ChunkLen = (unsigned short)sl_min(MAX_NVMEM_CHUNK_SIZE,Len); ExtCtrl.TxPayloadLen = ChunkLen; Msg.Cmd.Len = ChunkLen; Msg.Cmd.FileHandle = FileHdl; } else { return RetVal; } }while(ChunkLen > 0); return (long)RetCount; }
_i32 sl_FsWrite(_i32 FileHdl, _u32 Offset, _u8* pData, _u32 Len) { _SlFsWriteMsg_u Msg; _SlCmdExt_t ExtCtrl; _u16 ChunkLen; _SlReturnVal_t RetVal; _i32 RetCount = 0; ExtCtrl.RxPayloadLen = 0; ExtCtrl.pRxPayload = NULL; ChunkLen = (_u16)sl_min(MAX_NVMEM_CHUNK_SIZE,Len); ExtCtrl.TxPayloadLen = ChunkLen; ExtCtrl.pTxPayload = (_u8 *)(pData); Msg.Cmd.Offset = Offset; Msg.Cmd.Len = ChunkLen; Msg.Cmd.FileHandle = FileHdl; do { RetVal = _SlDrvCmdOp((_SlCmdCtrl_t *)&_SlFsWriteCmdCtrl, &Msg, &ExtCtrl); if(SL_OS_RET_CODE_OK == RetVal) { if( Msg.Rsp.status < 0) { if( RetCount > 0) { return RetCount; } else { return Msg.Rsp.status; } } RetCount += (_i32)Msg.Rsp.status; Len -= ChunkLen; Offset += ChunkLen; Msg.Cmd.Offset = Offset; ExtCtrl.pTxPayload += ChunkLen; ChunkLen = (_u16)sl_min(MAX_NVMEM_CHUNK_SIZE,Len); ExtCtrl.TxPayloadLen = ChunkLen; Msg.Cmd.Len = ChunkLen; Msg.Cmd.FileHandle = FileHdl; } else { return RetVal; } } while(ChunkLen > 0); return (_i32)RetCount; }