--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/devsound/devsoundpluginsupport/inc/MmfDevSoundCustomInterface.h Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,430 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "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:
+//
+
+/**
+ @publishedPartner
+ @released
+ @file
+*/
+
+#ifndef MMFDEVSOUNDCUSTOMINTERFACE_H
+#define MMFDEVSOUNDCUSTOMINTERFACE_H
+
+// forward reference
+class MMMFDevSoundCustomInterfaceMuxPlugin;
+class MMMFDevSoundCustomInterfaceDeMuxPlugin;
+
+/**
+* structure to hold command, handle pair
+*/
+class TMMFDevSoundCustomInterfaceCommand
+ {
+public:
+ TInt iCommand;
+ TInt iHandle;
+ };
+
+typedef TPckgBuf<TMMFDevSoundCustomInterfaceCommand> TMMFDevSoundCustomInterfaceCommandPackage;
+
+/**
+* structure to hold custom interface data
+*/
+class TMMFDevSoundCustomInterfaceData
+ {
+public:
+ TUid iId;
+ TInt iHandle;
+ MMMFDevSoundCustomInterfaceMuxPlugin* iInterface;
+ };
+
+/**
+* structure to hold custom interface data on server side
+*/
+class TMMFDevSoundCustomInterfaceDeMuxData
+ {
+public:
+ TUid iId;
+ MMMFDevSoundCustomInterfaceDeMuxPlugin* iInterface;
+ };
+
+
+/**
+* mixin for custom command pipeline used by utility to reroute commands
+*/
+class MMMFDevSoundCustomInterfaceChannel
+ {
+public:
+ /**
+ Implements a synchronous custom command
+ @param aUid
+ The UID of the custom command
+ @param aParam1
+ A buffer of data to be supplied to the receiver
+ @param aParam2
+ A buffer of data to be supplied to the receiver
+ @param aOutParam
+ A buffer that will be written into by the receiver
+ and returned to the client
+ @return the result of the custom command
+ */
+ virtual TInt SyncCustomCommand(TUid aUid, const TDesC8& aParam1, const TDesC8& aParam2, TDes8* aOutParam) = 0;
+
+ /**
+ Implements an asynchronous custom command
+ @param aUid
+ The UID of the custom command
+ @param aStatus
+ The request status of the active object that
+ will be called upon the completion of the request
+ @param aParam1
+ A buffer of data to be supplied to the receiver
+ @param aParam2
+ A buffer of data to be supplied to the receiver
+ @param aOutParam
+ A buffer that will be written into by the receiver
+ and returned to the client
+ */
+ virtual void AsyncCustomCommand(TUid aUid, TRequestStatus& aStatus, const TDesC8& aParam1, const TDesC8& aParam2, TDes8* aOutParam) = 0;
+ };
+
+
+/**
+* custom interface API mixin
+*/
+class MMMFDevSoundCustomInterfaceTarget
+ {
+public:
+ /**
+ Obtain a custom interface
+ @param aInterfaceId
+ The UID of the required custom interface
+ @return a pointer to the custom interface
+ */
+ virtual TAny* CustomInterface(TUid aInterfaceId) = 0;
+ };
+
+
+/**
+* the custom interface MUX Mixin class implemented by the mux utility
+*/
+class MMMFDevSoundCustomInterfaceMuxUtility
+ {
+public:
+ /**
+ Attempt to open the slave plugin
+ @param aInterface
+ The UID of the requested slave
+ @param aPackageBuf
+ A buffer that can be used to supply initialisation data
+ @return one of the system-wide error codes
+ */
+ virtual TInt OpenSlave(TUid aInterface, const TDesC8& aPackageBuf) = 0;
+
+ /**
+ Close the slave plugin
+ @param aHandle
+ The handle of the slave to close
+ */
+ virtual void CloseSlave(TInt aHandle) = 0;
+
+ /**
+ Send a synchronous command to the slave
+ @param aHandle
+ The handle of the remote slave plugin
+ @param aCommand
+ The command to send to the slave
+ @param aPackageBuf
+ Buffer of data to send to slave
+ @return the return code from the command
+ */
+ virtual TInt SendSlaveSyncCommand(TInt aHandle, TInt aCommand, const TDesC8& aPackageBuf) = 0;
+
+ /**
+ Send a synchronous command to the slave and obtain a result
+ @param aHandle
+ The handle of the remote slave plugin
+ @param aCommand
+ The command to send to the slave
+ @param aPackageBuf
+ Buffer of data to send to slave
+ @param aResultBuf
+ Buffer to contain the result from the destination.
+ This must be large enough to contain the result.
+ @return the return code from the command
+ */
+ virtual TInt SendSlaveSyncCommandResult(TInt aHandle, TInt aCommand, const TDesC8& aPackageBuf, TDes8& aResultBuf) = 0;
+
+ /**
+ Send an asychronous command to the slave
+ @param aComPackage
+ A package containing the handle of the remote slave and
+ the command to be sent
+ @see TMMFDevSoundCustomInterfaceCommandPackage
+ @param aStatus
+ The request status of the active object that will called
+ upon the completion of the request
+ @param aPackageBuf
+ Buffer of data to send to slave
+ */
+ virtual void SendSlaveAsyncCommand(TMMFDevSoundCustomInterfaceCommandPackage& aComPackage, TRequestStatus& aStatus, const TDesC8& aPackageBuf) = 0;
+
+ /**
+ Send an asychronous command to the slave and obtain a result
+ @param aComPackage
+ A package containing the handle of the remote slave and
+ the command to be sent
+ @see TMMFDevSoundCustomInterfaceCommandPackage
+ @param aStatus
+ The request status of the active object that will be called
+ upon the completion of the request
+ @param aPackageBuf
+ Buffer of data to send to slave
+ @param aResultBuf
+ Buffer to contain the result from the destination.
+ This must be large enough to contain the result.
+ */
+ virtual void SendSlaveAsyncCommandResult(TMMFDevSoundCustomInterfaceCommandPackage& aComPackage, TRequestStatus& aStatus, const TDesC8& aPackageBuf, TDes8& aResultBuf) = 0;
+ };
+
+
+/**
+* mixin implemented by Mux plugin itself
+*/
+class MMMFDevSoundCustomInterfaceMuxPlugin
+ {
+public:
+ /**
+ Attempt to open the interface.
+ @param aInterfaceId
+ The UID of the required interface
+ @return one of the system wide error codes
+ */
+ virtual TInt OpenInterface(TUid aInterfaceId) = 0;
+
+ /**
+ Equivalent to destructor. Called to destroy plugin.
+ */
+ virtual void Release() = 0;
+ /**
+ Pass destructor key.
+ Called on construction so plugin takes responsibility to call REComSession::DestroyedImplementation()
+ @param aDestructorKey
+ The Uid returned by REComSession::CreateImplementationL() or similar
+ */
+ virtual void PassDestructorKey(TUid aDestructorKey) = 0;
+
+ /**
+ Complete construction.
+ Pass additional values from the construction phase, used subsequently by the plugin.
+ @param aCustomUtility
+ The custom interface utility used by the plugin to communicate with the remote
+ server side DeMux plugin
+ */
+ virtual void CompleteConstructL(MMMFDevSoundCustomInterfaceMuxUtility* aCustomUtility) = 0;
+
+ /**
+ Return the custom interface
+ @param aInterfaceId
+ The id of the required custom interface
+ @return the custom interface supported by this plugin
+ */
+ virtual TAny* CustomInterface(TUid aInterfaceId) = 0;
+ };
+
+
+/**
+* the custom interface DEMUX Mixin class implemented by the DeMux interface
+* this is likely to be the DevSound server implementation
+*/
+class MMMFDevSoundCustomInterfaceDeMuxInterface
+ {
+public:
+ /**
+ Open the slave
+ @param aInterface
+ The UID of the requested interface
+ @param aPackageBuf
+ A package of data that can be supplied for initialisation
+ @return the result of the operation
+ */
+ virtual TInt DoOpenSlaveL(TUid aInterface, const TDesC8& aPackageBuf) = 0;
+
+ /**
+ Close the slave
+ @param aHandle
+ The handle of the slave plugin
+ */
+ virtual void DoCloseSlaveL(TInt aHandle) = 0;
+
+ // original RMessage is supplied so that remote demux plugin can extract necessary details
+ // using DeMux utility
+
+ /**
+ Relay the synchronous custom command onto the slave
+ @param aMessage
+ The IPC message to be sent to the slave
+ @return the result of the operation
+ */
+ virtual TInt DoSendSlaveSyncCommandL(const RMmfIpcMessage& aMessage) = 0;
+
+ /**
+ Relay the synchronous custom command onto the slave and obtain a result
+ @param aMessage
+ The IPC message to be sent to the slave
+ @return the result of the operation
+ */
+ virtual TInt DoSendSlaveSyncCommandResultL(const RMmfIpcMessage& aMessage) = 0;
+
+ /**
+ Relay an asynchronous command onto the slave
+ @param aMessage
+ The IPC message to be sent to the slave
+ */
+ virtual void DoSendSlaveAsyncCommandL(const RMmfIpcMessage& aMessage) = 0;
+
+ /**
+ Relay an asynchronous command onto the slave and obtain a result
+ @param aMessage
+ The IPC message to be sent to the slave@param aMessage
+ */
+ virtual void DoSendSlaveAsyncCommandResultL(const RMmfIpcMessage& aMessage) = 0;
+ };
+
+
+/**
+* message data structure for demux utility
+*/
+class TMMFDevSoundCIMessageData
+ {
+public:
+ TInt iCommand;
+ TInt iHandle;
+ };
+
+
+/**
+* mixin class implemented by the demux utility
+*/
+class MMMFDevSoundCustomInterfaceDeMuxUtility
+ {
+public:
+ /**
+ Get all settings at once into a client supplied package
+ @param aMessage
+ The IPC message
+ @param aData
+ Structure containing the command and handle
+ @see TMMFDevSoundCIMessageData
+ */
+ virtual void GetSyncMessageDataL(const RMmfIpcMessage& aMessage, TMMFDevSoundCIMessageData& aData) = 0;
+
+ /**
+ Get all settings at once into a client supplied package
+ from an asynchronous message
+ @param aMessage
+ The IPC message
+ @param aData
+ Structure containing the command and handle
+ @see TMMFDevSoundCIMessageData
+ */
+ virtual void GetAsyncMessageDataL(const RMmfIpcMessage& aMessage, TMMFDevSoundCIMessageData& aData) = 0;
+
+ /**
+ Obtain the input descriptor length from the message
+ @param aMessage
+ The IPC message
+ @return the length of the input descriptor in the message
+ */
+ virtual TInt InputDesLength(const RMmfIpcMessage& aMessage) = 0;
+
+ /**
+ Read the data from the input descriptor into the supplied buffer
+ @param aMessage
+ The IPC message
+ @param aBufToFill
+ The descriptor to copy the data from the input message into
+ */
+ virtual void ReadFromInputDesL(const RMmfIpcMessage& aMessage, TDes8* aBufToFill) = 0;
+
+ /**
+ Write the supplied buffer into the output buffer in the IPC message
+ @param aMessage
+ The IPC message
+ @param aBufToWrite
+ The buffer to write to the output buffer in the supplied IPC message
+ */
+ virtual void WriteToOutputDesL(const RMmfIpcMessage& aMessage, TDesC8& aBufToWrite) = 0;
+
+ /**
+ Complete the supplied IPC message with the supplied error code
+ @param aMessage
+ The IPC message
+ @param aError
+ One of the system wide error codes to complete the message with
+ */
+ virtual void CompleteMessage(const RMmfIpcMessage& aMessage, TInt aError) = 0;
+ };
+
+
+/**
+* mixin implemented by DeMux plugin itself
+*/
+class MMMFDevSoundCustomInterfaceDeMuxPlugin : public MMMFDevSoundCustomInterfaceDeMuxInterface
+ {
+public:
+ /**
+ Attempt to open the interface.
+ @param aInterfaceId
+ The UID of the required interface
+ @return a handle to the remote plugin
+ */
+ virtual TInt OpenInterface(TUid aInterfaceId) = 0;
+
+ /**
+ Equivalent to destructor. Called to destroy plugin.
+ */
+ virtual void Release() = 0;
+ /**
+ Pass destructor key.
+ Called on construction so plugin takes responsibility to call REComSession::DestroyedImplementation()
+ @param aDestructorKey
+ The Uid returned by REComSession::CreateImplementationL() or similar
+ */
+ virtual void PassDestructorKey(TUid aDestructorKey) = 0;
+
+ /**
+ Complete construction.
+ Set the target of the custom interface call
+ @param aDevSoundServer
+ The DevSound to call the custom interface on.
+ */
+ virtual void SetInterfaceTarget(MMMFDevSoundCustomInterfaceTarget* aTarget) = 0;
+
+ /**
+ Complete construction.
+ @param aUtility
+ A pointer to the DeMux utility to use
+ */
+ virtual void CompleteConstructL(MMMFDevSoundCustomInterfaceDeMuxUtility* aUtility) = 0;
+
+ /**
+ Refresh the interfaces if circumstances / other areas of DevSound have changed
+ */
+ virtual void RefreshL() = 0;
+ };
+
+
+
+#endif