userlibandfileserver/fileserver/sfsrv/cl_fmt.cpp
changeset 9 96e5fb8b040d
child 43 c1f20ce4abcf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/userlibandfileserver/fileserver/sfsrv/cl_fmt.cpp	Thu Dec 17 09:24:54 2009 +0200
@@ -0,0 +1,195 @@
+// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// f32\sfsrv\cl_fmt.cpp
+// 
+//
+
+#include "cl_std.h"
+
+
+
+
+EXPORT_C TInt RFormat::Open(RFs& aFs,const TDesC& aName,TUint aFormatMode,TInt& aCount)
+/**
+Opens a device for formatting.
+
+The device may be formatted either at high or low density.
+
+Devices which support read-only media may not be formatted. This includes
+the ROM on drive Z:. All files on the drive must be closed otherwise
+an error is returned.
+
+@param aFs          The file server session. Must be connected.
+@param aName        The drive to be formatted, specified as a drive letter
+                    followed by a colon.
+@param aFormatMode  The format mode. See TFormatMode.
+@param aCount       On successful return, contains the number of tracks which
+                    remain to be formatted. This value is passed to the first
+                    iteration of Next(), which then decrements the value on
+                    this and subsequent calls to Next().
+                    
+@return KErrNone, if successful, otherwise one of the other system wide error
+        codes.
+
+@see TFormatMode
+
+@capability DiskAdmin
+
+*/
+	{
+	TRACEMULT3(UTF::EBorder, UTraceModuleEfsrv::EFormat1Open, MODULEUID, aFs.Handle(), aName, aFormatMode);
+
+	TPtr8 c((TUint8*)&aCount,sizeof(TUint),sizeof(TUint));
+	TInt r = CreateSubSession(aFs,EFsFormatOpen,TIpcArgs(&aName,aFormatMode,&c));
+
+	TRACERET3(UTF::EBorder, UTraceModuleEfsrv::EFormatOpen1Return, MODULEUID, r, SubSessionHandle(), aCount);
+	return r;
+	}
+
+
+EXPORT_C TInt RFormat::Open(RFs& aFs,const TDesC& aName,TUint aFormatMode,TInt& aCount,const TDesC8& aInfo)
+/**
+Opens a device for formatting. User can specify new format parameters by anInfo.
+
+The device may be formatted either at high or low density.
+
+Devices which support read-only media may not be formatted. This includes
+the ROM on drive Z:. All files on the drive must be closed otherwise
+an error is returned.
+
+@param aFs          The file server session. Must be connected.
+@param aName        The drive to be formatted, specified as a drive letter
+                    followed by a colon.
+@param aFormatMode  The format mode. See TFormatMode.
+@param aCount       On successful return, contains the number of tracks which
+                    remain to be formatted. This value is passed to the first
+                    iteration of Next(), which then decrements the value on
+                    this and subsequent calls to Next().
+@param anInfo       Special format information specified by user.
+                    
+@return KErrNone, if successful, otherwise one of the other system wide error
+        codes.
+
+@see TFormatMode
+
+@capability DiskAdmin
+*/
+	{
+	TRACEMULT4(UTF::EBorder, UTraceModuleEfsrv::EFormat2Open, MODULEUID, aFs.Handle(), aName, aFormatMode, TUint(&aInfo));
+
+	TInt size = sizeof(TUint)+aInfo.Length();
+	TUint8* buf = new TUint8[size];
+
+	TInt r;
+	if (!buf)
+		{
+	    r = KErrNoMemory;
+		}
+	else
+		{
+		TPtr8 c(buf, size);
+		c.Append((TUint8*)&aCount, sizeof(TUint));
+		c.Append(aInfo);
+		r = CreateSubSession(aFs,EFsFormatOpen,TIpcArgs(&aName,aFormatMode,&c));
+		aCount = *(TInt*)(&c[0]);
+		delete[] buf;
+		}
+
+	TRACERET3(UTF::EBorder, UTraceModuleEfsrv::EFormatOpen2Return, MODULEUID, r, SubSessionHandle(), aCount);
+	return r;
+	}
+
+
+
+EXPORT_C void RFormat::Close()
+/**
+Closes the Format subsession.
+
+Any open files are closed when the file server session is closed.
+
+Close() is guaranteed to return, and provides no indication whether
+it completed successfully or not.
+*/
+	{
+	TRACE2(UTF::EBorder, UTraceModuleEfsrv::EFormatClose, MODULEUID, Session().Handle(), SubSessionHandle());
+
+	CloseSubSession(EFsFormatSubClose);
+	
+	TRACE0(UTF::EBorder, UTraceModuleEfsrv::EFormatCloseReturn, MODULEUID);
+	}
+
+
+
+EXPORT_C TInt RFormat::Next(TInt& aStep)
+/**
+Executes the next format step.
+
+This is a synchronous function, which returns when the formatting step
+is complete.
+
+@param aStep The step number. On return, it is decremented to indicate what
+			 stage the formatting has reached. Before the first call to this
+			 function, this value is seeded with the number of tracks remaining
+			 to be formatted as returned by RFormat::Open().
+			 The function should be called repeatedly until aStep reaches zero.
+			 
+@return KErrNone, if successful, otherwise one of the other system wide error codes.
+
+@see RFormat::Open
+
+@capability DiskAdmin
+
+*/
+	{
+	TRACE2(UTF::EBorder, UTraceModuleEfsrv::EFormatNext1, MODULEUID, Session().Handle(), SubSessionHandle());
+
+	TPckg<TInt> e(aStep);
+	TInt r = SendReceive(EFsFormatNext,TIpcArgs(&e));
+
+	TRACERET2(UTF::EBorder, UTraceModuleEfsrv::EFormatNext1Return, MODULEUID, r, aStep);
+	return r;
+	}
+
+
+
+
+EXPORT_C void RFormat::Next(TPckgBuf<TInt>& aStep,TRequestStatus& aStatus)
+/**
+Executes the next format step.
+
+This is an asynchronous function.
+
+@param aStep The step number. On return, it is decremented to indicate what
+			 stage the formatting has reached. Before the first call to this
+			 function, this value is seeded with the number of tracks remaining
+			 to be formatted as returned by RFormat::Open().
+			 The function should be called repeatedly until aStep reaches zero.
+			 
+@param aStatus The request status. On request completion, contains a completion
+			   code:
+			   KErrNone, if successful, otherwise one of the other system-wide
+               error codes.
+
+@see RFormat::Open
+
+@capability DiskAdmin
+
+*/
+	{
+	TRACE3(UTF::EBorder, UTraceModuleEfsrv::EFormatNext2, MODULEUID, Session().Handle(), SubSessionHandle(), &aStatus);
+
+	SendReceive(EFsFormatNext,TIpcArgs(&aStep),aStatus);
+
+	TRACE0(UTF::EBorder, UTraceModuleEfsrv::EFormatNext2Return, MODULEUID);
+	}