accessoryservices/accessoryremotecontrol/tsrc/remcontestcontrol/remcontestcontrolplugin/src/remconcontrol.cpp
changeset 0 4e1aa6a622a0
child 21 ccb4f6b3db21
equal deleted inserted replaced
-1:000000000000 0:4e1aa6a622a0
       
     1 /*
       
     2 * Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  This module contains the implementation of CTFFactory class 
       
    15 *	             member functions.
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 // INCLUDE FILES
       
    21 #include "siftrace.h"
       
    22 #include "remconcontrol.h"
       
    23 #include "remconcontroltestcase.h"
       
    24 #include "ctffactory.h"
       
    25 #include "tftypes.h"
       
    26 #include "accremconpstypes.h"
       
    27 
       
    28 DECLARE_TRACE_ASSERT
       
    29 
       
    30 
       
    31 _LIT_SECURITY_POLICY_PASS( KWritePolicy );
       
    32 _LIT_SECURITY_POLICY_PASS( KReadPolicy );
       
    33 
       
    34 static TTFRemConkeyEvent MapRemConToTfKey( TRemConCoreApiOperationId aOperationId )
       
    35     {
       
    36     if ( aOperationId == ERemConCoreApiVolumeUp ) return ETFRemConEvent_VolumeUp;
       
    37     if ( aOperationId == ERemConCoreApiVolumeDown ) return ETFRemConEvent_VolumeDown;
       
    38     if ( aOperationId == ERemConCoreApiStop ) return ETFRemConEvent_CodeStop;
       
    39     if ( aOperationId == ERemConCoreApiFastForward ) return ETFRemConEvent_CodeForward;
       
    40     if ( aOperationId == ERemConCoreApiRewind ) return ETFRemConEvent_CodeBack;
       
    41     if ( aOperationId == ERemConCoreApiForward ) return ETFRemConEvent_CodeForward;
       
    42     if ( aOperationId == ERemConCoreApiBackward ) return ETFRemConEvent_CodeBack;
       
    43     if ( aOperationId == ERemConCoreApiPausePlayFunction ) return  ETFRemConEvent_CoreApiPlaybackSpeedX1; //event not used in real implementation
       
    44     if ( aOperationId == ERemConCoreApiMute )return ETFRemConEvent_Mute;
       
    45 
       
    46     return ETFRemConEvent_None;
       
    47     }
       
    48 
       
    49 
       
    50 MRemConControl* GetRemConControl( void )
       
    51     {
       
    52     CTFStub* stub = CTFFactory::Stub( KTFStubTypeRemConControl );
       
    53     return STATIC_CAST( CRemConControl*, stub );
       
    54     }
       
    55 
       
    56 MRemConControl::MRemConControl( void )
       
    57     {
       
    58     }
       
    59     
       
    60     
       
    61 MRemConControl::~MRemConControl( void )
       
    62     {
       
    63     }
       
    64 
       
    65 
       
    66 CRemConControl::CRemConControl( void )
       
    67 : CTFRemoteStub( KTFStubTypeRemConControl )
       
    68     {
       
    69     
       
    70     iKeyEvent  = ETFRemConEvent_None;
       
    71     iParameter = 0; 
       
    72     iError     = 0;   
       
    73     
       
    74     iTargetInterfaceSelector = NULL; 
       
    75     iPocTarget               = NULL;
       
    76     iCoreTarget              = NULL;
       
    77     iSyncTarget              = NULL;    
       
    78     iCallTarget = NULL;
       
    79     		
       
    80     }
       
    81     
       
    82 //lint -e1740 Pointer not directly deleted by destructor
       
    83 CRemConControl::~CRemConControl( void )
       
    84     {
       
    85     Finalize();
       
    86     COMPONENT_TRACE( ( _L( "CRemConControl::~CRemConControl()" ) ) );
       
    87     }
       
    88 //lint +e1740    
       
    89 
       
    90 
       
    91 void CRemConControl::InitializeL( void )
       
    92     {
       
    93     
       
    94     TInt retval = KErrNone;
       
    95     retval = RProperty::Define(KTFRemConTestProperty, KTFRemConTriggerCmdKey, RProperty::EByteArray, KReadPolicy, KWritePolicy);    
       
    96 	if(retval != KErrAlreadyExists)
       
    97     	User::LeaveIfError(retval);           
       
    98 	
       
    99     retval = RProperty::Define(KTFRemConTestProperty, KTFRemConTriggerNotifyCmdKey, RProperty::EByteArray, KReadPolicy, KWritePolicy);    
       
   100 	if(retval != KErrAlreadyExists)
       
   101     	User::LeaveIfError(retval);       	
       
   102 	
       
   103     User::LeaveIfError(iSubscribe.Attach(KTFRemConTestProperty, KTFRemConTriggerCmdKey));       
       
   104     	
       
   105 	TInt retval1 = KErrNone;
       
   106     retval1 = RProperty::Define(KPSUidCtsyCallInformation, KCTsyCallState, RProperty::EInt, KReadPolicy, KWritePolicy);    
       
   107 	if(retval1 != KErrAlreadyExists)
       
   108 		User::LeaveIfError(retval);           
       
   109     
       
   110     if ( iCmdReceiverFromStub == NULL)
       
   111         {
       
   112         iCmdReceiverFromStub = CRemConPSPCHObserver::NewL();
       
   113 	    iCmdReceiverFromStub->Start();    
       
   114         }
       
   115 
       
   116     retval = RProperty::Define(KTFRemConTestProperty, KTFRemConClientKey, RProperty::EByteArray, KReadPolicy, KWritePolicy);    
       
   117     
       
   118     if( retval != KErrAlreadyExists )
       
   119         {
       
   120         User::LeaveIfError(retval);
       
   121         }
       
   122     
       
   123     COMPONENT_TRACE( ( _L( "CRemConControl::InitializeL - return" ) ) );
       
   124     }
       
   125 
       
   126 void CRemConControl::SwapToNormalHandlerL( void )
       
   127     {
       
   128 		
       
   129 	 if(iTargetInterfaceSelector == NULL)
       
   130          {
       
   131 	     iTargetInterfaceSelector  = CRemConInterfaceSelector::NewL();
       
   132          
       
   133          if(iPocTarget == NULL)
       
   134              {
       
   135              iPocTarget = CRemConPoc::NewL(iTargetInterfaceSelector);
       
   136              }
       
   137         				
       
   138          if(iSyncTarget == NULL)
       
   139              {
       
   140         	 iSyncTarget = CRemConSync::NewL(iTargetInterfaceSelector);
       
   141         	 }
       
   142          
       
   143          if(iCallTarget == NULL)
       
   144              {
       
   145              iCallTarget = CRemConCall::NewL(iTargetInterfaceSelector);
       
   146              }
       
   147 
       
   148          if(iCoreTarget == NULL)
       
   149             {
       
   150             iCoreTarget = CRemConCore::NewL(iTargetInterfaceSelector);
       
   151             }
       
   152         
       
   153          if( !iTargetInterfaceSelector->ControllerOpened() )
       
   154             {
       
   155             iTargetInterfaceSelector->OpenControllerL();
       
   156             }
       
   157             if( !iTargetInterfaceSelector->TargetOpened() )
       
   158             {
       
   159             iTargetInterfaceSelector->OpenTargetL();		 
       
   160             }
       
   161         }
       
   162     }
       
   163 
       
   164 void CRemConControl::Finalize( void )
       
   165     {
       
   166     COMPONENT_TRACE( ( _L( "CRemConControl::Finalize()" ) ) );
       
   167     
       
   168        if ( iPocTarget != NULL )
       
   169     		{
       
   170     		delete iPocTarget;
       
   171     		iPocTarget = NULL;
       
   172     		}
       
   173     		
       
   174 		if ( iCoreTarget != NULL )
       
   175     		{
       
   176     		delete iCoreTarget;
       
   177     		iCoreTarget = NULL;
       
   178     		}
       
   179 		
       
   180 		if ( iSyncTarget != NULL )
       
   181     		{
       
   182     		delete iSyncTarget;
       
   183     		iSyncTarget = NULL;
       
   184     		}
       
   185 		
       
   186 		if ( iCallTarget != NULL )
       
   187 		    {
       
   188 		    delete iCallTarget;
       
   189 		    iCallTarget = NULL;
       
   190 		    }
       
   191 	
       
   192         if ( iCmdReceiverFromStub != NULL)
       
   193     	    {
       
   194     	    iCmdReceiverFromStub->Cancel();
       
   195     		delete iCmdReceiverFromStub;
       
   196     		iCmdReceiverFromStub = NULL;
       
   197     		}    	    			    
       
   198 
       
   199         if ( iTargetInterfaceSelector != NULL )
       
   200 	    	{
       
   201 	    	delete iTargetInterfaceSelector;
       
   202 	    	iTargetInterfaceSelector = NULL;
       
   203 	    	}
       
   204         
       
   205         if ( iAudioClientProc.Handle() )
       
   206             {
       
   207             iAudioClientProc.Kill( KErrNone );
       
   208             }
       
   209         
       
   210         //Just increase test coverage!
       
   211 	    User::After(1000000);
       
   212 	    
       
   213 	    COMPONENT_TRACE( ( _L( "CRemConControl::Finalize() - Success" ) ) );
       
   214 	    }
       
   215 
       
   216 void CRemConControl::DeleteInstances( void )
       
   217     {
       
   218     COMPONENT_TRACE( ( _L( "CRemConControl::Finalize()" ) ) );
       
   219 		
       
   220 		if ( iPocTarget != NULL )
       
   221     		{
       
   222     		delete iPocTarget;
       
   223     		iPocTarget = NULL;
       
   224     		}
       
   225     		
       
   226 		if ( iCoreTarget != NULL )
       
   227     		{
       
   228     		delete iCoreTarget;
       
   229     		iCoreTarget = NULL;
       
   230     		}
       
   231 		
       
   232 		if ( iSyncTarget != NULL )
       
   233     		{
       
   234     		delete iSyncTarget;
       
   235     		iSyncTarget = NULL;
       
   236     		}
       
   237 		
       
   238 		if( iCallTarget != NULL )
       
   239 		    {
       
   240 		    delete iCallTarget;
       
   241 		    iCallTarget = NULL;
       
   242 		    }
       
   243 	    }
       
   244 
       
   245 
       
   246 // This method calls API of module under test.
       
   247 void CRemConControl::CallApiFunctionL( TRemConControlTestCaseState& aParameter )
       
   248     {
       
   249     //COMPONENT_TRACE( ( _L( "CRemConControl::CallApiFunctionL(%d, %d, %d)" ), aParameter.iDosFunction, aParameter.iArg1, aParameter.iArg2 ) );
       
   250     
       
   251     TInt retval = KTFErrRemConEventMissing;
       
   252     switch ( aParameter.iFunction )
       
   253         {
       
   254 
       
   255        	case ETFRemConEvent_NormalHandler:
       
   256             	{
       
   257             	    SwapToNormalHandlerL();
       
   258     				retval = KErrNone;
       
   259     			break;
       
   260             	}
       
   261             	                           
       
   262     	case ETFRemConEvent_CmdHandler:
       
   263             	{            	 
       
   264     				retval = KErrNone;
       
   265     			break;
       
   266             	}
       
   267         
       
   268         case ETFRemCon_Subscribe:
       
   269         	{
       
   270         	
       
   271 		    	TPckgBuf<TRemConStubPSData> keyDatabuf;		
       
   272 		    	TRemConStubPSData psData;
       
   273 				psData.iKeyEvent     = aParameter.iKeyEvents;
       
   274 				psData.iOperationId  = aParameter.iArg1;
       
   275 				psData.iData.Copy( aParameter.iArg2 );
       
   276 				psData.iUseConverter = aParameter.iUseConverter;
       
   277 				keyDatabuf = psData;
       
   278 	    		retval = iSubscribe.Set(KTFRemConTestProperty, KTFRemConTriggerCmdKey,keyDatabuf);
       
   279 	    		retval = KErrNone;
       
   280     
       
   281 	  		break;
       
   282         	}         
       
   283         	
       
   284         case ETFRemCon_NotifyCommandSubscribe:
       
   285         	{
       
   286 		    	TPckgBuf<TRemConStubPSData> keyDatabuf;		
       
   287 		    	TRemConStubPSData psData;
       
   288 				psData.iKeyEvent     = aParameter.iKeyEvents;
       
   289 				psData.iOperationId  = aParameter.iArg1;
       
   290 				psData.iData.Copy( aParameter.iArg2 );
       
   291 				psData.iUseConverter = aParameter.iUseConverter;
       
   292 				keyDatabuf = psData;
       
   293 	    		retval = RProperty::Set(KTFRemConTestProperty, KTFRemConTriggerNotifyCmdKey,keyDatabuf);
       
   294 	    		retval = KErrNone;
       
   295     
       
   296 	  		break;
       
   297         	}             
       
   298 		case ETFRemCon_PocButtonDownResponse:
       
   299         	{
       
   300 				iPocTarget->APOCButtonDownResponse();
       
   301 				retval = KErrNone;
       
   302 			break;
       
   303         	}
       
   304 
       
   305 		case ETFRemCon_PocButtonUpResponse:
       
   306         	{
       
   307 				iPocTarget->APOCButtonUpResponse();
       
   308 				retval = KErrNone;
       
   309 			break;
       
   310         	}
       
   311 		case ETFRemCon_SyncButtonResponse:
       
   312         	{
       
   313         		iSyncTarget->SynchronizeResponse();				
       
   314         		retval = KErrNone;				
       
   315 			break;
       
   316         	}
       
   317        	
       
   318        	case ETFRemCon_AddressOutgoingCommand:
       
   319         	{
       
   320         		iCoreTarget->Play();				
       
   321         		retval = KErrNone;				
       
   322 			break;
       
   323         	}
       
   324 
       
   325        	case ETFRemCon_PermitOutgoingCommand:
       
   326         	{        	
       
   327         		iCoreTarget->Stop();				
       
   328         		retval = KErrNone;				
       
   329 			break;
       
   330         	}
       
   331        	
       
   332        	case ETFRemCon_CancelOutgoingCommand:
       
   333         	{        	
       
   334         		iCoreTarget->Cancel();				        		
       
   335         		retval = KErrNone;				
       
   336 			break;
       
   337         	}
       
   338 
       
   339        	case ETFRemConEvent_CheckEvent:
       
   340         	{   
       
   341         	    retval = KErrNone;
       
   342         	           	
       
   343         		if( aParameter.iExpectedKeyEvent != iKeyEvent )
       
   344         		    {
       
   345         		    retval = KErrNotFound;
       
   346         		    }
       
   347                 
       
   348                 if( aParameter.iArg1 != iParameter )
       
   349                     {
       
   350                     retval = KErrArgument;
       
   351                     }
       
   352                 
       
   353                 ResetEventResult();                    
       
   354                 
       
   355 			break;
       
   356         	}
       
   357 
       
   358         case ETFRemConEvent_CheckResponse:
       
   359         	{        	
       
   360         		retval = KErrNone;
       
   361         	           	
       
   362         		if( aParameter.iExpectedKeyEvent != iKeyEvent )
       
   363         		    {
       
   364         		    retval = KErrNotFound;
       
   365         		    }
       
   366                 
       
   367                 if( aParameter.iArg1 != iParameter )
       
   368                     {
       
   369                     retval = KErrArgument;
       
   370                     }
       
   371                 
       
   372                 if( iError != KErrNone )    
       
   373                     {
       
   374                     retval = iError;
       
   375                     }
       
   376 
       
   377                 ResetEventResult();                    
       
   378                 
       
   379 			break;
       
   380         	}
       
   381         case ETFRemConEvent_CheckOutgoingCommandResponse:
       
   382         	{        	
       
   383         		retval = KErrNone;
       
   384         	           	
       
   385         		if( aParameter.iExpectedKeyEvent != iKeyEvent && iKeyEvent != ETFRemConEvent_CoreApiPlaybackSpeedX1 )
       
   386         		    {
       
   387         		    retval = KErrNotFound;
       
   388         		    }
       
   389                 
       
   390                 if( aParameter.iArg1 != iParameter && iParameter != ERemConCoreApiButtonClick )
       
   391                     {
       
   392                     retval = KErrArgument;
       
   393                     }
       
   394                 
       
   395                 if( iError != KErrNone )    
       
   396                     {
       
   397                     retval = iError;
       
   398                     }
       
   399 
       
   400                 ResetEventResult();                    
       
   401                 
       
   402 			break;
       
   403         	}
       
   404         	
       
   405         case ETFRemConEvent_CheckCmdSource:
       
   406             {
       
   407             TRemConExtCmdSource source;
       
   408             retval = KErrNone;
       
   409             
       
   410             iPocTarget->GetCommandSourceInfo( source );
       
   411             
       
   412             switch( source )
       
   413                 {
       
   414                 case ERemConExtCmdSourceBluetooth:
       
   415                     {
       
   416                     COMPONENT_TRACE( ( _L( "CRemConControl::CallApiFunctionL() ETFRemConEvent_CheckCmdSource - Bluetooth" ) ) );
       
   417                     break;
       
   418                     }
       
   419                 case ERemConExtCmdSourceWired:
       
   420                     {
       
   421                     COMPONENT_TRACE( ( _L( "CRemConControl::CallApiFunctionL() ETFRemConEvent_CheckCmdSource - Wired" ) ) );
       
   422                     break;
       
   423                     }
       
   424                 default:
       
   425                     {
       
   426                     COMPONENT_TRACE( ( _L( "CRemConControl::CallApiFunctionL() ETFRemConEvent_CheckCmdSource - UnKnown" ) ) );
       
   427                     break;
       
   428                     }
       
   429                 }
       
   430             if( aParameter.iArg1 != source )
       
   431                 {
       
   432                 retval = KErrGeneral;
       
   433                 }
       
   434                 
       
   435             // For coverage
       
   436             if( retval == KErrNone )
       
   437             {
       
   438             	iCallTarget->GetCommandSourceInfo( source );
       
   439 	            if( source != ERemConExtCmdSourceUnKnown )
       
   440 	              {
       
   441 	              retval = KErrGeneral;
       
   442 	              }
       
   443             }
       
   444               
       
   445             if( retval == KErrNone )
       
   446             {
       
   447 	            iSyncTarget->GetCommandSourceInfo( source );
       
   448 	            if( source != ERemConExtCmdSourceUnKnown )
       
   449 	              {
       
   450 	              retval = KErrGeneral;
       
   451 	              }
       
   452             }
       
   453             
       
   454             break;
       
   455             }
       
   456             
       
   457         	case ETFRemConEvent_SetCallState:
       
   458         	{        	
       
   459         		retval = iSubscribe.Set(KPSUidCtsyCallInformation, KCTsyCallState, aParameter.iArg1);
       
   460         		retval = KErrNone;				
       
   461 			break;
       
   462         	}
       
   463         	
       
   464         case ETFRemConEvent_LoadPCH_NoAccFW:
       
   465         	{
       
   466         	if( !iTargetInterfaceSelector )
       
   467         		{
       
   468         		iTargetInterfaceSelector = CRemConInterfaceSelector::NewL();
       
   469         		}        	        		
       
   470         	retval = KErrNone;
       
   471         	}
       
   472         	break;                
       
   473 
       
   474         case ETFRemCon_LaunchAudioClient:
       
   475             // reset return channel
       
   476             TRemConClientKeyDataBuf keyDatabuf;     
       
   477             TRemConClientKeyData keyData;
       
   478             keyData.iOperationId = ERemConCoreApiSelect; // if not changed by audio client maps to ETRemConEvent_None 
       
   479             keyData.iButtonAct = ERemConCoreApiButtonPress; 
       
   480             keyDatabuf = keyData;
       
   481             
       
   482             retval = RProperty::Set( KTFRemConTestProperty, KTFRemConClientKey, keyDatabuf );
       
   483             
       
   484             if ( retval == KErrNone )
       
   485                 {
       
   486                 retval = iAudioClientProc.Create( _L("audioclientstub.exe"), KNullDesC );
       
   487                 
       
   488                 // wait for start
       
   489                 if ( retval == KErrNone )
       
   490                     {
       
   491                     TRequestStatus status;
       
   492                     iAudioClientProc.Rendezvous( status );
       
   493                     iAudioClientProc.Resume();
       
   494                     User::WaitForRequest( status );
       
   495                     retval = status.Int();
       
   496                     }
       
   497                 }
       
   498             break;
       
   499             
       
   500         case ETFRemCon_CloseAudioClient:
       
   501             if ( iAudioClientProc.Handle() )
       
   502                 {
       
   503                 iAudioClientProc.Kill( KErrNone );
       
   504                 retval = KErrNone;
       
   505                 }
       
   506             break;
       
   507 
       
   508         case ETFRemCon_CheckClientKey:
       
   509             TRemConClientKeyDataBuf keyDataBuf;
       
   510             retval = RProperty::Get( KTFRemConTestProperty, KTFRemConClientKey, keyDataBuf );
       
   511             if ( retval == KErrNone )
       
   512                 {
       
   513                 if ( aParameter.iExpectedKeyEvent != MapRemConToTfKey( keyDataBuf().iOperationId ) )
       
   514                     {
       
   515                     retval = KErrNotFound;
       
   516                     }
       
   517                 
       
   518                 if( aParameter.iArg1 != keyDataBuf().iButtonAct )
       
   519                     {
       
   520                     retval = KErrArgument;
       
   521                     }
       
   522                 
       
   523                 }
       
   524             break;
       
   525             
       
   526         default:
       
   527 	        //TRACE_ASSERT_FALSE();
       
   528             break;
       
   529         }
       
   530     User::LeaveIfError( retval );
       
   531     }
       
   532 
       
   533 
       
   534 void CRemConControl::ResetEventResult()
       
   535     {
       
   536     //Reset values   
       
   537     iKeyEvent  = ETFRemConEvent_None;
       
   538     iParameter = 0; 
       
   539     iError     = 0;   
       
   540     }
       
   541 // This method is used by DsyTest to ask the current test case id. Call from 
       
   542 // DsyTest to this method is delivered by SAA test framework's client server.
       
   543 void CRemConControl::ProcessMessageAndCompleteL( const RMessage2& aMessage )
       
   544     {    
       
   545     aMessage.Complete( KErrNone );
       
   546     }
       
   547 
       
   548 // This method can be called by SAA test framework when the method above is 
       
   549 // completed. 
       
   550 void CRemConControl::MessageCompleteL( TInt /*aResult*/ )
       
   551     {
       
   552     }
       
   553 
       
   554 void CRemConControl::NotifyKeyEvent( TInt aEvent, TInt aParameter ) 
       
   555 {
       
   556 	COMPONENT_TRACE( ( _L( "REMCONTESTCONTROL -  CRemConControl::NotifyKeyEvent( %d, %d )" ), aEvent, aParameter ) );
       
   557 	
       
   558 	iKeyEvent      = aEvent; 
       
   559 	iParameter     = aParameter;
       
   560 
       
   561     COMPONENT_TRACE( ( _L( "REMCONTESTCONTROL - CRemConControl::NotifyKeyEvent - return" ) ) );   	
       
   562 }
       
   563 
       
   564 void CRemConControl::CompleteKeyEventResponse( TInt aEvent, TInt aParam, TInt aError ) 
       
   565 {
       
   566 	COMPONENT_TRACE( ( _L( "REMCONTESTCONTROL -  CRemConControl::CompleteKeyEventResponse( %d, %d, %d )" ), aEvent, aParam, aError ) );
       
   567 	
       
   568     iKeyEvent      = aEvent; 
       
   569 	iParameter     = aParam;
       
   570 	iError         = aError;
       
   571 
       
   572     COMPONENT_TRACE( ( _L( "REMCONTESTCONTROL - CRemConControl::NotifyKeyEvent - return" ) ) );   	
       
   573 }
       
   574 
       
   575