kernel/eka/include/rpipe.h
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/include/rpipe.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,240 @@
+// Copyright (c) 2006-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:
+//
+// WARNING: This file contains some APIs which are internal and are subject
+//          to change without notice. Such APIs should therefore not be used
+//          outside the Kernel and Hardware Services package.
+//
+
+
+
+
+
+#ifndef __RPIPE_H__
+#define __RPIPE_H__
+
+#include <e32cmn.h>
+#include <e32ver.h>
+#ifndef __KERNEL_MODE__
+#include <e32std.h>
+#endif
+
+#if defined(DATAPAGING_TEST_ON)
+#define DATAPAGING_TEST(s) s
+#else
+#define DATAPAGING_TEST(s)
+#endif
+
+
+class RPipe: public RBusLogicalChannel
+/**
+RPipe class object represent the user side handle.  It is derived from RBusLogicalChannel 
+which is the base class for handle to the kernel side device driver instance. It encapsulates
+both named and unnamed pipe methods. 
+@internalTechnology
+*/
+    {
+public:
+
+    /**
+    Structure for holding driver capabilities information
+    (Just a version number.)
+    */
+    class TCaps
+        {
+    public:
+        TVersion iVersion;
+        };
+
+
+	/**
+	Enumeration for the modes of opening a pipe.
+	*/
+	enum TMode
+	{
+		EOpenToRead,
+		EOpenToWrite,
+		EOpenToWriteNamedPipeButFailOnNoReaders	
+	};
+	
+	enum TChannelType
+	{
+		EChannelUnset = 0x0,
+		EReadChannel = 0x1,
+		EWriteChannel = 0x2
+	};
+	
+	class TPipeInfo
+        {
+    public:
+        TInt isize;
+        TBuf8<KMaxKernelName> iName;
+     
+        };
+    typedef TPckgBuf<TPipeInfo> TPipeInfoBuf;
+
+
+public:
+
+	/**
+	 Returns the version information of the  DPipe Factory object
+	 */
+    inline static TVersion VersionRequired();
+
+	/**
+	 Returns the name of the DPipe factory object
+	 */
+	inline static const TDesC& Name();
+
+  
+	/**
+	 Support for un-named pipe
+	 */
+	 IMPORT_C static TInt Create( TInt aSize, RPipe& aReader, RPipe& aWriter, TOwnerType aTypeR = EOwnerProcess,  TOwnerType aTypeW = EOwnerProcess);
+	
+	 TInt Create(const TInt sSize,  TOwnerType aType = EOwnerProcess);
+
+	 TInt Open(const RPipe& aWriter, TOwnerType  aType = EOwnerProcess);
+
+
+	/**
+	Support for named pipe
+	*/
+	
+	IMPORT_C static TInt Define( const TDesC& aName, TInt aSize);
+	
+	IMPORT_C static TInt Define( const  TDesC& aName, TInt aSize, const TSecurityPolicy& aPolicy);
+								
+
+	IMPORT_C static TInt Destroy(const TDesC& aName);
+
+	IMPORT_C TInt Open(const TDesC& aName, TMode aMode);
+
+	IMPORT_C TInt Open(TInt aArgumentIndex, TOwnerType aType=EOwnerProcess);
+	
+	IMPORT_C TInt Open(RMessagePtr2 aMessage, TInt aParam, TOwnerType aType=EOwnerProcess);
+	
+	IMPORT_C static TInt Init();
+  	
+	/**
+	 Non-blocking read/write operations
+	 */
+	IMPORT_C TInt Read ( TDes8& aData, TInt aSize);
+
+	IMPORT_C TInt Write( const TDesC8& aBuf, TInt aSize);
+
+	/** 
+	Blocking read/write operations
+	*/
+	IMPORT_C TInt ReadBlocking(TDes8& aData, TInt aSize);
+
+	IMPORT_C TInt WriteBlocking (const TDesC8& aBuf, TInt aSize);
+
+	IMPORT_C TInt Size();
+
+	IMPORT_C void NotifySpaceAvailable( TInt aSize, TRequestStatus&);
+
+    IMPORT_C void NotifyDataAvailable( TRequestStatus&); 
+	
+	IMPORT_C void Wait(const TDesC& aName, TRequestStatus& aStatus);
+	
+	IMPORT_C TInt MaxSize();
+
+
+	IMPORT_C TInt CancelSpaceAvailable();
+
+	IMPORT_C TInt CancelDataAvailable();
+
+	IMPORT_C void CancelWait();
+
+	IMPORT_C void Flush();
+
+	IMPORT_C void Close();    
+	
+	IMPORT_C TInt HandleType()const;
+
+	TInt PipeHandle()const;
+	
+	IMPORT_C void WaitForReader(const TDesC& aName, TRequestStatus& aStatus);
+	
+	IMPORT_C void WaitForWriter(const TDesC& aName, TRequestStatus& aStatus);
+	    
+    /*
+     Enumeration of Request messages.
+    */
+    enum TRequest
+        {
+		EDefineNamedPipe,
+		EOpenToReadNamedPipe,
+		EOpenToWriteNamedPipe,
+		EOpenToWriteButFailOnNoReaderNamedPipe,
+		EDestroyNamedPipe,
+		ECreateUnNamedPipe,
+		EOpenUnNamedPipe,
+		ERead,
+        	EWrite,
+	    	ESize,
+	        EReadBlocking,
+		EWriteBlocking,  	
+		EDataAvailable,
+		EDataAvailableCount,
+		ESpaceAvailable,
+		EWaitNotification,
+		EWaitNotificationCheck,
+		ECancelSpaceAvailable,
+		ECancelDataAvailable,
+		ECancelWaitNotification,
+		EFlushPipe,
+		EClosePipe,
+		EGetPipeInfo
+	   };
+	/*
+     Enumeration of Wait Request.
+    */   
+	enum TWaitRequest
+		{
+		EWaitForReader,
+		EWaitForWriter
+		};
+		
+	private:
+	
+	void Wait(const TDesC& aName, TRequestStatus& aStatus, TInt aChoice);
+	
+	void ReqComplete(TRequestStatus& aState, TInt aval);
+	TInt iHandleType;
+	TInt iSize;
+	TInt iPipeHandle;
+};
+
+
+
+inline TVersion RPipe::VersionRequired()
+{
+	// Just a number 
+    const TInt KMajorVersionNumber=1;
+    const TInt KMinorVersionNumber=0;
+    const TInt KBuildVersionNumber=1;
+    return         
+    TVersion (KMajorVersionNumber, KMinorVersionNumber, KBuildVersionNumber);
+}
+
+inline const TDesC& RPipe::Name()
+{
+	_LIT(KRpipeDevice, "SymbianPipe");
+	return KRpipeDevice;
+}
+
+
+#endif // __RPIPE_H__