bluetoothengine/btmac/src/btmonobearer/bmbplugin.cpp
changeset 0 f63038272f30
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btmac/src/btmonobearer/bmbplugin.cpp	Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,308 @@
+/*
+* 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: 
+*       This class implements RemCon bearer pulgin interface.
+*
+*/
+
+
+// INCLUDE FILES
+#include <remcon/remconbearerobserver.h>
+#include <remcon/remconconverterplugin.h>
+#include <remconaddress.h>
+#include <RemConExtensionApi.h>
+#include "atcodec.h"
+#include "bmbserviceuid.h"
+#include "bmbplugin.h"
+#include "debug.h"
+#include "bmbcmdlistener.h"
+#include <remconcoreapi.h>
+
+class SRemConExtCallHandlingOpToCmd
+    {
+    public:
+        TRemConExtCallHandlingApiOperationId ifId;
+        TATId brId;
+        TATType brType;
+    };
+
+const SRemConExtCallHandlingOpToCmd KRemConExtCallHandlingOpToCmd[] =
+    {
+    {ERemConExtAnswerCall,       EATA,    EATActionCmd},
+    {ERemConExtEndCall,          EATCHUP, EATActionCmd},
+    {ERemConExtDialCall,         EATD1,   EATActionCmd},
+    {ERemConExtSpeedDial,        EATD2,   EATActionCmd},
+    {ERemConExtVoiceDial,        EATBVRA, EATWriteCmd},
+    {ERemConExtLastNumberRedial, EATBLDN, EATActionCmd},
+    {ERemConExt3WaysCalling,     EATCHLD, EATWriteCmd},
+    {ERemConExtGenerateDTMF,     EATVTS,  EATWriteCmd},
+    {ERemConExtAnswerEnd,        EATCKPD, EATWriteCmd}
+    };
+
+const TInt KRemConExtCallHandlingOpNum = (sizeof(KRemConExtCallHandlingOpToCmd) / sizeof(SRemConExtCallHandlingOpToCmd));
+
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CBTAspAccConnection::NewL()
+// ---------------------------------------------------------
+//
+CBmbPlugin* CBmbPlugin::NewL(TBearerParams& aParams)
+	{
+	CBmbPlugin* self = new (ELeave) CBmbPlugin(aParams);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+// Destructor
+CBmbPlugin::~CBmbPlugin()
+	{
+	TRACE_FUNC_ENTRY
+	delete iListener;
+	delete iPlayerControlListener;
+	if( iConnIndicated )
+    	{
+        Observer().DisconnectIndicate(iRemConAddress);	
+      	}
+	TRACE_FUNC_EXIT
+	}
+
+TAny* CBmbPlugin::GetInterface(TUid aUid)
+	{
+    TRACE_FUNC_ENTRY
+	TRACE_INFO((_L("aUid = [0x%08X]"), this, aUid))
+	TAny* ret = NULL;
+	if (aUid == TUid::Uid(KRemConBearerInterface1))
+		{
+		ret = reinterpret_cast<TAny*>(
+			static_cast<MRemConBearerInterface*>(this)
+			);
+		}
+	TRACE_INFO((_L("ret = [0x%08X]"), ret))
+	TRACE_FUNC_EXIT
+	return ret;
+	}
+
+TInt CBmbPlugin::GetResponse(
+    TUid& /*aInterfaceUid*/, 
+	TUint& /*aTransactionId*/,
+	TUint& /*aOperationId*/, 
+	RBuf8& /*aData*/,
+	TRemConAddress& /*aAddr*/)
+	{
+	TRACE_FUNC
+	return KErrNotSupported;
+	}
+
+TInt CBmbPlugin::SendCommand(
+    TUid /*aInterfaceUid*/,
+	TUint /*aOperationId*/,
+	TUint /*aTransactionId*/,
+	RBuf8& /*aData*/,
+	const TRemConAddress& /*aAddr*/)
+	{
+    TRACE_FUNC
+    return KErrNotSupported;
+	}
+
+void CBmbPlugin::DataFromRemote(const TDesC8& aATCmd)
+    {
+    TRACE_FUNC_ENTRY
+    if (!iConnIndicated)
+        {
+        iConnIndicated = ETrue;
+        Observer().ConnectIndicate(iRemConAddress);
+        }
+    
+    CATCommand *tmpCmd = NULL;
+    TRAPD(err,  tmpCmd = CATCommand::NewL(aATCmd));
+    if(!err)
+        {
+        TRACE_INFO((_L8("DataFromRemote: %S, Id: %d, type %d"), &aATCmd, tmpCmd->Id(), tmpCmd->Type()));
+        for (TInt i = 0; i < KRemConExtCallHandlingOpNum; i++)
+            {
+            if (KRemConExtCallHandlingOpToCmd[i].brId == tmpCmd->Id() && 
+                tmpCmd->Type() == KRemConExtCallHandlingOpToCmd[i].brType)
+                {
+                iOperationId = (TUint)KRemConExtCallHandlingOpToCmd[i].ifId;
+                break;
+                }
+            }
+    	
+    	iInterfaceUid = TUid::Uid(KRemConExtCallHandlingApiUid);
+    	iTransactionId = Observer().NewTransactionId();
+
+        if (tmpCmd->ParamNum())
+            {
+            TATParam param;
+            tmpCmd->Parameter(0, param);
+            iInData.Copy(param.Des());
+            }
+        else
+            {
+            iInData = KNullDesC8;
+            }
+
+        TRACE_INFO((_L8("  iInterfaceUid 0x%08X, iOperationId %d, iInData '%S'"), 
+            iInterfaceUid, iOperationId, &iInData))
+            
+    	err = Observer().NewCommand(iRemConAddress);
+    	TRACE_INFO((_L("NewCommand return %d"), err))
+        delete tmpCmd;      
+        }
+    if (err)
+        {
+        TPckgBuf<TInt> pckg(err);
+        iListener->HandlingDataCompleted( pckg );
+        }
+    TRACE_FUNC_EXIT
+    }
+
+TInt CBmbPlugin::GetCommand(
+    TUid& aInterfaceUid,
+	TUint& aTransactionId,
+	TUint& aOperationId,
+	RBuf8& aData,
+	TRemConAddress& aAddr)
+	{
+	TRACE_FUNC
+	aInterfaceUid = iInterfaceUid;
+	aTransactionId = iTransactionId;
+    aOperationId = iOperationId;
+    TInt err = aData.Create(iInData);
+    if (err)
+        {
+        TRACE_ERROR((_L("RBuf8::Create err %d"), err))
+        }
+    aAddr = iRemConAddress;
+	return err;
+	}
+
+TInt CBmbPlugin::SendResponse(
+    TUid aInterfaceUid, 
+	TUint aOperationId,
+	TUint /*aTransactionId*/,
+	RBuf8& aData,
+	const TRemConAddress& aAddr)
+	{
+	TRACE_FUNC
+	TRACE_INFO((_L8("interface [0x%08X], op %d"), 
+	    aInterfaceUid, aOperationId))
+	if (aInterfaceUid.iUid == KRemConCoreApiUid)
+	    {
+	    aData.Close();
+	    return KErrNone;
+	    }
+	if (aInterfaceUid.iUid == KRemConExtCallHandlingApiUid && 
+	    iRemConAddress == aAddr && 
+	    iOperationId == aOperationId)
+	    {
+        iListener->HandlingDataCompleted( aData );
+        aData.Close();
+        return KErrNone;
+	    }
+	return KErrNotFound;
+	}
+
+void CBmbPlugin::ConnectRequest(const TRemConAddress& aAddr)
+	{
+	TRACE_FUNC_ENTRY
+	TRACE_INFO((_L8("Request to connect to %S"), &(aAddr.Addr())))
+    Observer().ConnectConfirm(aAddr, KErrNotSupported);
+    TRACE_FUNC_EXIT
+	}
+
+void CBmbPlugin::DisconnectRequest(const TRemConAddress& aAddr)
+	{
+	TRACE_FUNC_ENTRY
+	TRACE_INFO((_L8("Request to disconnect %S"), &(aAddr.Addr())))
+   	Observer().DisconnectConfirm(aAddr, KErrNotSupported);
+	TRACE_FUNC_EXIT
+	}
+
+void CBmbPlugin::ClientStatus(TBool /*aControllerPresent*/, TBool /*aTargetPresent*/)
+	{
+	TRACE_FUNC
+	}
+
+TSecurityPolicy CBmbPlugin::SecurityPolicy() const
+	{
+	return TSecurityPolicy(ECapabilityLocalServices);
+	}
+void CBmbPlugin::Pause()
+    {
+    TRACE_FUNC_ENTRY
+    if (!iConnIndicated)
+        {
+        iConnIndicated = ETrue;
+        Observer().ConnectIndicate(iRemConAddress);
+        }
+    
+    iOperationId = (TUint) ERemConCoreApiPause;
+    iInterfaceUid = TUid::Uid(KRemConCoreApiUid);
+    iTransactionId = Observer().NewTransactionId();
+
+    iInData = _L8("a");
+    iInData[0] = ERemConCoreApiButtonClick;
+
+    TRACE_INFO((_L8("  iInterfaceUid 0x%08X, iOperationId %d"), 
+        iInterfaceUid, iOperationId))
+	iRemConAddress.Addr() = KBTAudioServiceName;
+	TInt err = Observer().NewCommand(iRemConAddress);
+    TRACE_INFO((_L("NewCommand return %d"), err))
+	TRACE_FUNC_EXIT
+    }
+
+void CBmbPlugin::Play()
+    {
+    TRACE_FUNC_ENTRY
+    if (!iConnIndicated)
+        {
+        iConnIndicated = ETrue;
+        Observer().ConnectIndicate(iRemConAddress);
+        }
+    
+    iOperationId = (TUint) ERemConCoreApiPlay;
+    iInterfaceUid = TUid::Uid(KRemConCoreApiUid);
+    iTransactionId = Observer().NewTransactionId();
+
+    iInData = _L8("a");
+    iInData[0] = ERemConCoreApiButtonClick;
+
+    TRACE_INFO((_L8("  iInterfaceUid 0x%08X, iOperationId %d"), 
+        iInterfaceUid, iOperationId))
+	iRemConAddress.Addr() = KBTAudioServiceName;
+	TInt err = Observer().NewCommand(iRemConAddress);
+    TRACE_INFO((_L("NewCommand return %d"), err))
+	TRACE_FUNC_EXIT
+    }
+
+CBmbPlugin::CBmbPlugin(TBearerParams& aParams)
+:	CRemConBearerPlugin(aParams)
+	{
+	}
+
+void CBmbPlugin::ConstructL()
+	{
+	TRACE_FUNC_ENTRY
+    iRemConAddress.BearerUid() = Uid();
+    iListener = CBmbCmdListener::NewL(*this);
+    iPlayerControlListener = CBTAudioPlayerControlListener::NewL(*this);
+    iRemConAddress.Addr() = KBTAudioServiceName;
+    TRACE_FUNC_EXIT
+	}
+
+// End of file