sl@0: // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include "MmfDevSoundCIMuxUtility.h" sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: sl@0: CMMFDevSoundCIMuxUtility* CMMFDevSoundCIMuxUtility::NewL(MMMFDevSoundCustomInterfaceChannel* aCustomChannel) sl@0: { sl@0: CMMFDevSoundCIMuxUtility* self = new (ELeave) CMMFDevSoundCIMuxUtility(aCustomChannel); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: void CMMFDevSoundCIMuxUtility::ConstructL() sl@0: { sl@0: // nothing needed in this implementation sl@0: } sl@0: sl@0: CMMFDevSoundCIMuxUtility::~CMMFDevSoundCIMuxUtility() sl@0: { sl@0: sl@0: } sl@0: sl@0: const TInt KMuxTempBufferSize = 20; sl@0: sl@0: // create a custom interface Mux implementation sl@0: MMMFDevSoundCustomInterfaceMuxPlugin* CMMFDevSoundCIMuxUtility::CreateCustomInterfaceMuxL(TUid aInterfaceId) sl@0: { sl@0: // The Uid of the plugin will be the match string sl@0: TInt uidAsInteger = aInterfaceId.iUid; sl@0: TBuf8 tempBuffer; sl@0: tempBuffer.Num(uidAsInteger, EHex); // has value sl@0: TUid interfaceUid = {KUidDevSoundCustomInterfaceMux}; sl@0: sl@0: TUid destructorKey; sl@0: MMMFDevSoundCustomInterfaceMuxPlugin* self = sl@0: static_cast sl@0: (MmPluginUtils::CreateImplementationL(interfaceUid, destructorKey, tempBuffer, KRomOnlyResolverUid)); sl@0: sl@0: // pass the destructor key so class can destroy itself sl@0: self->PassDestructorKey(destructorKey); sl@0: CleanupReleasePushL(*self); sl@0: sl@0: // attempt to construct the plugin sl@0: self->CompleteConstructL(this); sl@0: CleanupStack::Pop(); // self sl@0: sl@0: return self; sl@0: } sl@0: sl@0: sl@0: // from MMMFDevSoundCustomInterfaceMux interface sl@0: TInt CMMFDevSoundCIMuxUtility::OpenSlave(TUid aInterface, const TDesC8& aPackageBuf) sl@0: { sl@0: // 1. send openslave custom command to remote side sl@0: // 2. devsoundsession intercepts this custom command sl@0: // and creates / opens interface sl@0: // open packet = command, interface, inBuff sl@0: TUid commandId(KNullUid); sl@0: commandId.iUid = EMMFDevSoundCustomCommandCIOpenSlave; sl@0: TPckgBuf idBuffer(aInterface); sl@0: sl@0: return iCustomChannel->SyncCustomCommand(commandId, idBuffer, aPackageBuf, NULL); sl@0: } sl@0: sl@0: void CMMFDevSoundCIMuxUtility::CloseSlave(TInt aHandle) sl@0: { sl@0: // 1. send closeslave custom command to remote side sl@0: // 2. demuxplugin removes its handle for this interface sl@0: TUid commandId(KNullUid); sl@0: commandId.iUid = EMMFDevSoundCustomCommandCICloseSlave; sl@0: TPckgBuf handleBuffer(aHandle); sl@0: sl@0: iCustomChannel->SyncCustomCommand(commandId, handleBuffer, KNullDesC8, NULL); sl@0: } sl@0: sl@0: sl@0: TInt CMMFDevSoundCIMuxUtility::SendSlaveSyncCommand(TInt aHandle, TInt aCommand, const TDesC8& aPackageBuf) sl@0: { sl@0: TUid commandId(KNullUid); sl@0: commandId.iUid = EMMFDevSoundCustomCommandCISendSlaveSyncCommand; sl@0: sl@0: TMMFDevSoundCustomInterfaceCommand commandPair; sl@0: commandPair.iCommand = aCommand; sl@0: commandPair.iHandle = aHandle; sl@0: TPckgBuf comBuffer(commandPair); sl@0: sl@0: return iCustomChannel->SyncCustomCommand(commandId, comBuffer, aPackageBuf, NULL); sl@0: } sl@0: sl@0: TInt CMMFDevSoundCIMuxUtility::SendSlaveSyncCommandResult(TInt aHandle, TInt aCommand, const TDesC8& aPackageBuf, TDes8& aResultBuf) sl@0: { sl@0: TUid commandId(KNullUid); sl@0: commandId.iUid = EMMFDevSoundCustomCommandCISendSlaveSyncCommandResult; sl@0: sl@0: TMMFDevSoundCustomInterfaceCommand commandPair; sl@0: commandPair.iCommand = aCommand; sl@0: commandPair.iHandle = aHandle; sl@0: TPckgBuf comBuffer(commandPair); sl@0: sl@0: return iCustomChannel->SyncCustomCommand(commandId, comBuffer, aPackageBuf, &aResultBuf); sl@0: } sl@0: sl@0: void CMMFDevSoundCIMuxUtility::SendSlaveAsyncCommand(TMMFDevSoundCustomInterfaceCommandPackage& aComPackage, TRequestStatus& aStatus, const TDesC8& aPackageBuf) sl@0: { sl@0: TUid commandId(KNullUid); sl@0: commandId.iUid = EMMFDevSoundCustomCommandCISendSlaveAsyncCommand; sl@0: sl@0: // command and handle comes from client with asynchronous commands sl@0: sl@0: iCustomChannel->AsyncCustomCommand(commandId, aStatus, aComPackage, aPackageBuf, NULL); sl@0: } sl@0: sl@0: void CMMFDevSoundCIMuxUtility::SendSlaveAsyncCommandResult(TMMFDevSoundCustomInterfaceCommandPackage& aComPackage, TRequestStatus& aStatus, const TDesC8& aPackageBuf, TDes8& aResultBuf) sl@0: { sl@0: TUid commandId(KNullUid); sl@0: commandId.iUid = EMMFDevSoundCustomCommandCISendSlaveAsyncCommandResult; sl@0: sl@0: // command and handle comes from client with asynchronous commands sl@0: sl@0: iCustomChannel->AsyncCustomCommand(commandId, aStatus, aComPackage, aPackageBuf, &aResultBuf); sl@0: } sl@0: sl@0: CMMFDevSoundCIMuxUtility::CMMFDevSoundCIMuxUtility(MMMFDevSoundCustomInterfaceChannel* aCustomChannel) sl@0: : iCustomChannel(aCustomChannel) sl@0: { sl@0: } sl@0: