williamr@4: // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@4: // All rights reserved. williamr@4: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@4: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@4: // williamr@4: // Initial Contributors: williamr@4: // Nokia Corporation - initial contribution. williamr@4: // williamr@4: // Contributors: williamr@4: // williamr@4: // Description: williamr@4: // include\mmf\common\mmfipc.h williamr@4: // Thin interface layer to use either V1 or V2 IPC calls as appropriate williamr@4: // williamr@4: // williamr@4: williamr@4: #ifndef __MMF_COMMON_MMFIPC_SERVER_H__ williamr@4: #define __MMF_COMMON_MMFIPC_SERVER_H__ williamr@4: williamr@4: #include williamr@4: #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: #include williamr@4: #endif williamr@4: williamr@4: // The following declarations are used instead of the native ones on the particular system variant: williamr@4: // RMmfIpcMessage replaces RMessage or RMessage2 williamr@4: // CMmfIpcServer replaces CServer or CServer2 williamr@4: // CMmfIpcSession replaces CSharableSession or CSession2 williamr@4: // They are used internally to the MMF component to provide configurability for the particular subsystem williamr@4: williamr@4: #ifdef __MMF_USE_IPC_V2__ williamr@4: williamr@4: //typedef RMessage2 RMmfIpcMessage; williamr@4: williamr@4: class CMmfIpcServer; // forward declaration williamr@4: williamr@4: /** williamr@4: * derive CMmfIpcSession from CSession2 so we can bridge the differences to old CSharableSession williamr@4: * williamr@4: * @internalTechnology williamr@4: */ williamr@4: williamr@4: class CMmfIpcSession : public CSession2 williamr@4: { williamr@4: protected: williamr@4: virtual void CreateL(const CMmfIpcServer& aServer); williamr@4: CMmfIpcSession() {} williamr@4: // from CSession2 williamr@4: void CreateL(); williamr@4: }; williamr@4: williamr@4: /* williamr@4: * derive CMmfIpcServer from CServer2 so we can bridge difference to old CServer williamr@4: * williamr@4: * @internalTechnology williamr@4: */ williamr@4: williamr@4: class CMmfIpcServer : public CServer2 williamr@4: { williamr@4: protected: williamr@4: virtual CMmfIpcSession* NewSessionL(const TVersion& aVersion) const=0; williamr@4: CMmfIpcServer(TInt aPriority,TServerType aType=EUnsharableSessions); williamr@4: private: williamr@4: // derived from CServer2 williamr@4: CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const; williamr@4: }; williamr@4: williamr@4: #else // __MMF_USE_IPC_V2__ williamr@4: williamr@4: // otherwise always use V1 williamr@4: //typedef RMessage RMmfIpcMessage; williamr@4: typedef CServer CMmfIpcServer; williamr@4: typedef CSharableSession CMmfIpcSession; williamr@4: williamr@4: #endif // __MMF_USE_IPC_V2__ williamr@4: williamr@4: #if defined(__VC32__) williamr@4: #pragma warning( disable : 4097 ) // typedef-name used as synonym for class-name williamr@4: #endif williamr@4: williamr@4: williamr@4: /** williamr@4: * Adapt RMessage calls between IPC variants williamr@4: * williamr@4: * @internalTechnology williamr@4: */ williamr@4: williamr@4: class MmfMessageUtil williamr@4: { williamr@4: public: williamr@4: static TInt Read(const RMmfIpcMessage& aMessage, TInt aParam, TDes8& aResult); williamr@4: static TInt Write(const RMmfIpcMessage& aMessage, TInt aParam, const TDesC8& aValue); williamr@4: static void ReadL(const RMmfIpcMessage& aMessage, TInt aParam, TDes8& aResult); williamr@4: static void WriteL(const RMmfIpcMessage& aMessage, TInt aParam, const TDesC8& aValue); williamr@4: }; williamr@4: williamr@4: #include williamr@4: williamr@4: #endif // __MMF_COMMON_MMFIPC_SERVER_H__