accessoryservices/accessoryremotecontrol/tsrc/stub/remcon/src/remconstub.cpp
changeset 0 4e1aa6a622a0
child 21 ccb4f6b3db21
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/accessoryservices/accessoryremotecontrol/tsrc/stub/remcon/src/remconstub.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,474 @@
+/*
+* Copyright (c) 2004 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:
+*
+*/
+
+
+/** @file
+@internalComponent
+*/
+
+#include "remconstub.h"
+#include "remconsourcehandler.h"
+#include <remcon/remconbearerobserver.h>
+#include <remcon/remconconverterplugin.h>
+#include <remconaddress.h>
+
+#include "siftrace.h"
+
+const TInt KBearerUid = 0x102069AA;
+
+/**
+Factory function.
+@return Ownership of a new CRemConStub.
+*/
+CRemConStub* CRemConStub::NewL(TBearerParams& aParams)
+	{
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::NewL() - Enter" ) ) );
+	CRemConStub* self = new(ELeave) CRemConStub(aParams);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(); 
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::NewL() - Return" ) ) );
+	
+	return self;
+	}
+
+/**
+Destructor.
+*/
+CRemConStub::~CRemConStub()
+	{
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::~CRemConStub() - Enter" ) ) );
+	
+	iNewCmdSubscribe->Cancel();	
+	
+	delete iNewCmdSubscribe;
+
+	iNewNotifyCmdSubscribe->Cancel();	
+	delete iNewNotifyCmdSubscribe;
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::~CRemConStub() - Return" ) ) );
+	}
+
+/**
+Constructor.
+*/
+CRemConStub::CRemConStub(TBearerParams& aParams)
+:	CRemConBearerPlugin(aParams)
+	{
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::CRemConBearerPlugin() - Enter" ) ) );
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::CRemConBearerPlugin() - Return" ) ) );
+	
+	}
+
+/**
+2nd-phase construction.
+*/
+void CRemConStub::ConstructL()
+	{
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::ConstructL() - Enter" ) ) );
+	
+	TInt retval(KErrNone);
+	TRemConAddress addr;
+	addr.BearerUid() = Uid();	// implementation UID of this bearer 
+	Observer().ConnectIndicate(addr);
+	//
+	// Construct of Key Event listener. Event is received from remconkeyeventapp
+	//		
+	iNewCmdSubscribe = CRemConPSstubObserver::NewL( *this, KTFRemConTriggerCmdKey );
+	iNewCmdSubscribe->Start();
+
+	//
+	// Construct of notifyCommand Event listener. Event is received from remconkeyeventapp
+	//		
+	iNewNotifyCmdSubscribe = CRemConPSstubObserver::NewL( *this, KTFRemConTriggerNotifyCmdKey );
+	iNewNotifyCmdSubscribe->Start();	
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::ConstructL() - Return" ) ) );
+	}
+
+/**
+RemCon server calls to get a pointer to an object which implements the 
+Bearer API with UID aUid
+*/
+TAny* CRemConStub::GetInterface(TUid aUid)
+	{
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::GetInterface() - Enter" ) ) );
+	
+	TAny* ret = NULL;
+	if ( aUid == TUid::Uid(KRemConBearerInterface1) )
+		{
+		ret = reinterpret_cast<TAny*>(
+			static_cast<MRemConBearerInterface*>(this)
+			);
+		}
+    else if ( aUid == TUid::Uid(KRemConBearerInterface2) )
+        {
+        ret = reinterpret_cast<TAny*>(
+            static_cast<MRemConBearerInterfaceV2*>(this)
+            );
+        }
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::GetInterface() - Return" ) ) );
+	
+	return ret;
+	}
+
+/**
+
+
+*/
+void CRemConStub::ConnectRequest(const TRemConAddress& aAddr)
+	{
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::ConnectRequest() - Enter" ) ) );
+	Observer().ConnectConfirm( aAddr, KErrNone );
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::ConnectRequest() - Return" ) ) );
+	}
+
+/**
+
+
+*/
+void CRemConStub::DisconnectRequest(const TRemConAddress& aAddr)
+	{
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::DisconnectRequest() - Enter" ) ) );
+	Observer().DisconnectConfirm(aAddr, KErrNone);
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::DisconnectRequest() - Return" ) ) );
+	}
+
+/**
+
+
+*/
+TInt CRemConStub::SendResponse(TUid /*aInterfaceUid*/, 
+		TUint aOperationId, 
+		TUint /*aTransactionId*/, // we don't care about this transaction ID
+		RBuf8& /*aData*/, 
+		const TRemConAddress& /*aAddr*/)
+	{
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::SendResponse() - Enter" ) ) );
+	
+	TPhoneCmdHandlerKeyEventBuf cmdDataBuf;
+	cmdDataBuf().iOperationId = aOperationId;
+	TUid ExtAPIUid;
+    
+    ExtAPIUid.iUid = KRemConExtCallHandlingApiUid;
+    
+    if(ExtAPIUid.iUid == iInterfaceUid.iUid)
+       {
+    
+    	switch ( aOperationId  )
+    		{
+    		case ERemConExtAnswerCall:
+    		case ERemConExtEndCall:
+    		case ERemConExtVoiceDial:
+    		case ERemConExtLastNumberRedial:
+    		case ERemConExtDialCall:
+    		case ERemConExt3WaysCalling:
+    		case ERemConExtGenerateDTMF:
+    		case ERemConExtSpeedDial:
+    		case ERemConExtAnswerEnd:
+    			{
+    			(void)iSubcribeToControl.Set(KTFPhoneCmdHandlerProperty, KTFPhoneCmdHandlerKey,cmdDataBuf);
+    			break;    
+    			}
+
+    		default:
+    			
+    			break;
+    		}
+        COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::SendResponse() - Return" ) ) );			
+	    //aData.Close();
+        
+        return KErrNotFound;
+        }
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::SendResponse() - Return" ) ) );			
+	
+	return KErrNone;
+	}
+
+
+TInt CRemConStub::SendCommand(TUid /*aInterfaceUid*/, 
+		TUint /*aOperationId*/, 
+		TUint aTransactionId,  
+		RBuf8& /*aData*/, 
+		const TRemConAddress& /*aAddr*/)
+	{
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::SendCommand() - Enter" ) ) );			
+	TInt ret(KErrNone);
+	
+	// Identifies command - response pairs, needed if response is given 
+	iTransactionId = aTransactionId; 
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::SendCommand() - Return" ) ) );			
+	
+	return ret;
+	}
+
+/**
+
+
+*/
+void CRemConStub::TestCaseCommandReceived(TInt aTFControlKey, TRemConPckgStubBuf& akeyEventBuf )
+	{
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::TestCaseCommandReceived() - Enter" ) ) );			
+	
+	TInt aError(KErrNone);
+	iTransactionId = Observer().NewTransactionId();
+	
+	iData.Zero();
+	// Inform server about command accessory has sent
+	
+	TRemConAddress addr;	 	
+	addr.BearerUid() = Uid();
+	addr.Addr() = KNullDesC8();
+
+    TBool aUseCon = akeyEventBuf().iUseConverter;
+    
+    // Use RemConKeyEventConverter in test case ?
+    if( aUseCon )
+    	{
+
+    	TRemConKeyEventDataBuf aKeyData;			
+    	aKeyData = akeyEventBuf().iKeyEvent;
+    					
+    	aError = Observer().BearerToInterface(TUid::Uid(KBearerUid), 
+    						aKeyData,
+    						aKeyData, 
+    						iInterfaceUid, 
+    						iOperationId,
+    						iMsgType, 
+    						iData);
+    															
+    	// Evaluate results
+    	if ( aError == KErrNone )
+			{
+	   		// Key event was converted to interface API format, now interface UID and
+	   		// operation ID contains the appropriate values defined for this specific key
+	   		// event.
+			   		
+			//iData.Zero();
+			//iData.Append((TInt)akeyEventBuf().iButtonAction);
+					
+			addr.BearerUid();					
+			addr.BearerUid() = Uid();
+			addr.Addr() = KNullDesC8();
+			if ( aTFControlKey == KTFRemConTriggerCmdKey )
+			    {
+			    Observer().NewCommand(addr);
+			    }
+			else if ( aTFControlKey == KTFRemConTriggerNotifyCmdKey )
+			    {
+			    Observer().NewNotifyCommand(addr);
+			    }
+			}
+		else if ( aError == KErrNotSupported )
+			{
+			// The key event wasn't identified by the converter.
+			
+			// Note, iOperation has to be != any RemConExtensionApi command.
+			// This branch is used for following test cases
+						
+			TPhoneCmdHandlerKeyEventBuf cmdDataBuf;
+			cmdDataBuf().iOperationId = -1;
+			(void)iSubcribeToControl.Set(KTFPhoneCmdHandlerProperty, KTFPhoneCmdHandlerKey,cmdDataBuf);
+	    				
+			}
+		else if( aError == KErrGeneral )
+			{
+			// Other error cases
+			}
+        }
+
+	//Converter not used, send command directly to RemCon
+    else
+    	{
+        TUid extensionAPIUid;
+        extensionAPIUid.iUid = KRemConExtCallHandlingApiUid;
+        iInterfaceUid        = extensionAPIUid;
+        iOperationId         = akeyEventBuf().iOperationId;
+        
+       	iData.Copy( akeyEventBuf().iData );
+                   
+	    addr.BearerUid();					
+    	addr.BearerUid() = Uid();
+    	addr.Addr() = KNullDesC8();
+        if ( aTFControlKey == KTFRemConTriggerCmdKey )
+            {
+            Observer().NewCommand(addr);
+            }
+        else if ( aTFControlKey == KTFRemConTriggerNotifyCmdKey )
+            {
+            Observer().NewNotifyCommand(addr);
+            }  			
+        }
+        
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::TestCaseCommandReceived() - Return" ) ) );			
+							
+	}
+
+/**
+Called by RemCon to retrieve a response on a connection. Must only be 
+called as a result of a NewResponse upcall.
+*/
+TInt CRemConStub::GetResponse(TUid& aInterfaceUid, 
+		TUint& aTransactionId, 
+		TUint& aOperationId, 
+		RBuf8& aData, 
+		TRemConAddress& aAddr)
+	{
+
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::GetResponse() - Enter" ) ) );			
+	
+	TRAPD(err, DoGetResponseL(aInterfaceUid, aOperationId, aData, aAddr));
+
+	// The serial bearer only has one incoming message in it at once, so we 
+	// don't need to do any queueing or anything fancy to get the transaction 
+	// ID- it's just the last one RemCon told us.
+	aTransactionId = iTransactionId;
+
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::GetResponse() - Return" ) ) );			
+
+	return err;
+	}
+
+/**
+
+
+*/
+void CRemConStub::DoGetResponseL(TUid& aInterfaceUid, 
+		TUint& aOperationId, 
+		RBuf8& aData, 
+		TRemConAddress& aAddr)
+	{
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::DoGetResponseL() - Enter" ) ) );			
+
+	aInterfaceUid = iInterfaceUid;
+	aOperationId = iOperationId;
+	//ASSERT(aData.MaxLength() == 0);
+	// Pass ownership of this to RemCon.
+	aData.CreateL(iData);	
+
+	aAddr.BearerUid() = Uid();
+	aAddr.Addr() = KNullDesC8();
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::DoGetResponseL() - Return" ) ) );			
+
+	}
+/**
+Called by RemCon to get the command that accesory 
+has sent to terminal ?
+*/
+TInt CRemConStub::GetCommand(TUid& aInterfaceUid, 
+		TUint& aTransactionId, 
+		TUint& aOperationId, 
+		RBuf8& aData, 
+		TRemConAddress& aAddr)
+	{
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::GetCommand() - Enter" ) ) );			
+	
+	//ASSERT(iMsgType == ERemConMessageTypeUndefined );
+	// The message should be a command, unless RemCon is being buggy and 
+	// calling GetCommand at bad times.
+	aInterfaceUid = iInterfaceUid;
+	// The serial bearer only has one incoming message in it at once, so we 
+	// don't need to do any queueing or anything fancy to get the transaction 
+	// ID- it's just the last one RemCon told us.
+	aTransactionId = iTransactionId;
+	aOperationId = iOperationId;
+	// Pass ownership of this to RemCon.
+    
+	aData.CreateL(iData);
+	
+	aAddr.BearerUid() = Uid();
+	aAddr.Addr() = KNullDesC8();
+
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::GetCommand() - Return" ) ) );			
+
+	return KErrNone;
+	}
+
+/**
+
+
+*/
+TSecurityPolicy CRemConStub::SecurityPolicy() const
+	{
+	
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::SecurityPolicy() - Enter" ) ) );			
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::SecurityPolicy() - Return" ) ) );			
+	return TSecurityPolicy(ECapabilityLocalServices);
+	}
+
+/**
+
+
+*/
+void CRemConStub::ClientStatus(TBool aControllerPresent, TBool aTargetPresent)
+	{
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::ClientStatus() - Enter" ) ) );			
+	(void)aControllerPresent;
+	(void)aTargetPresent;
+	COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::ClientStatus() - Return" ) ) );			
+	}
+
+TInt CRemConStub::GetNotifyCommand(TUid& aInterfaceUid, 
+    TUint& aTransactionId, 
+    TUint& aOperationId, 
+    RBuf8& aData, 
+    TRemConAddress& aAddr)
+    {
+    COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::GetNotifyCommand() - Enter" ) ) ); 
+
+    aInterfaceUid = iInterfaceUid;
+
+    aTransactionId = iTransactionId;
+    aOperationId = iOperationId;
+    // Pass ownership of this to RemCon.
+    
+    aData.CreateL(iData);
+    
+    aAddr.BearerUid() = Uid();
+    aAddr.Addr() = KNullDesC8();    
+    COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::GetNotifyCommand() - Return" ) ) ); 
+    return KErrNone;
+    }
+
+void CRemConStub::SendReject(TUid aInterfaceUid, 
+        TUint aOperationId, 
+        TUint aTransactionId, 
+        const TRemConAddress& aAddr)
+    {
+    COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::SendReject() - Enter" ) ) );  
+    (void) aInterfaceUid;
+    (void) aOperationId;
+    (void) aTransactionId;
+    (void) aAddr;
+    COMPONENT_TRACE( ( _L( "REMCONSTUB - CRemConStub::SendReject() - Return" ) ) );        
+    }
+
+//
+// End of file