resourcemgmt/hwresourcesmgr/test/multiclient/common/testcasecontroller.cpp
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/resourcemgmt/hwresourcesmgr/test/multiclient/common/testcasecontroller.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,7174 @@
+// Copyright (c) 2007-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:
+//
+
+#include "testcasecontroller.h"
+#include <centralrepository.h>
+#include <e32debug.h>
+#include <e32math.h> 
+#include <hwrmvibrasdkcrkeys.h>
+#include "TestScheduler.h"
+
+
+const TInt KSDKAPIAllowedTargets(
+		CHWRMExtendedLight::EPrimaryDisplay |
+		CHWRMExtendedLight::EPrimaryKeyboard | 
+		CHWRMExtendedLight::ESecondaryDisplay |
+		CHWRMExtendedLight::ESecondaryKeyboard |
+		CHWRMExtendedLight::ECustomTarget1 |
+		CHWRMExtendedLight::ECustomTarget2 |
+		CHWRMExtendedLight::ECustomTarget3 |
+		CHWRMExtendedLight::ECustomTarget4 
+		);
+		
+const TInt KExtendedAPIAllowedTargets(
+		CHWRMExtendedLight::EPrimaryDisplay |
+		CHWRMExtendedLight::EPrimaryKeyboard | 
+		CHWRMExtendedLight::ESecondaryDisplay |
+		CHWRMExtendedLight::ESecondaryKeyboard |
+		CHWRMExtendedLight::ECustomTarget1 |
+		CHWRMExtendedLight::ECustomTarget2 |
+		CHWRMExtendedLight::ECustomTarget3 |
+		CHWRMExtendedLight::ECustomTarget4 |
+		CHWRMExtendedLight::ECustomTarget5 |
+		CHWRMExtendedLight::ECustomTarget6 |
+		CHWRMExtendedLight::ECustomTarget7 |
+		CHWRMExtendedLight::ECustomTarget8 |
+		CHWRMExtendedLight::ECustomTarget9 |
+		CHWRMExtendedLight::ECustomTarget10 |
+		CHWRMExtendedLight::ECustomTarget11 |
+		CHWRMExtendedLight::ECustomTarget12 |
+		CHWRMExtendedLight::ECustomTarget13 |
+		CHWRMExtendedLight::ECustomTarget14 |
+		CHWRMExtendedLight::ECustomTarget15 |
+		CHWRMExtendedLight::ECustomTarget16 |
+		CHWRMExtendedLight::ECustomTarget17 |
+		CHWRMExtendedLight::ECustomTarget18 |
+		CHWRMExtendedLight::ECustomTarget19 |
+		CHWRMExtendedLight::ECustomTarget20 |
+		CHWRMExtendedLight::ECustomTarget21 |
+		CHWRMExtendedLight::ECustomTarget22 |
+		CHWRMExtendedLight::ECustomTarget23 |
+		CHWRMExtendedLight::ECustomTarget24 |
+		CHWRMExtendedLight::ECustomTarget25 |
+		CHWRMExtendedLight::ECustomTarget26 |
+		CHWRMExtendedLight::ECustomTarget27 		
+		);		
+
+const TInt KEnhancedAPIAllowedTargets = KExtendedAPIAllowedTargets;
+
+//Delay in milliseconds.
+const TUint KHwrmtestsLightMoreDelay = 2000;
+const TUint KHwrmtestsVibraMoreDelay = 2000;
+const TInt KTestCategory = 0x101FB3E7;
+const TUint32 KHWRMColorStatus  = 0x00001000;
+const TUint8 KHWRMRedShift             = 16;
+const TUint8 KHWRMGreenShift           = 8;
+
+
+CHwrmTestCaseController* CHwrmTestCaseController::NewL(MHwrmTestCaseObserver& aObserver)
+	{
+	CHwrmTestCaseController* self = new (ELeave) CHwrmTestCaseController(aObserver);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CHwrmTestCaseController::CHwrmTestCaseController(MHwrmTestCaseObserver& aObserver) :
+	iObserver(aObserver)
+	,iApiType(EHWRMApiTypeNoAPI)
+	{
+	}
+
+void CHwrmTestCaseController::ConstructL()
+	{
+	iSession = CRepository::NewL(KCRUidVibraCtrl);
+	}
+	
+CHwrmTestCaseController::~CHwrmTestCaseController()
+	{
+	delete iSession;
+	delete iMyLight;
+	delete iVibra;
+	delete iMcFramework;
+	}
+
+void CHwrmTestCaseController::SetApiType(THWRMLightTestFAPIType aApiType)
+	{
+	iApiType = aApiType;
+	}
+	
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::RunTestCases
+// Run test cases
+// -----------------------------------------------------------------------------
+//
+void CHwrmTestCaseController::RunBasicTestCases(THWRMLightTestFAPIType aApiType)
+	{
+	SetApiType(aApiType);
+	UpdateSupportedTargets();
+	
+	RunTestCases( EBasicTestIdFirst, EBasicTestIdLast );
+	}
+
+void CHwrmTestCaseController::RunMulticlientTestCases()
+	{
+	if (iMcFramework == NULL)
+		{
+		TRAPD(err,iMcFramework = CMcFramework::NewL());
+		if (err)
+			{
+			_LIT(KErrorMsg,"Failed to instantiate CMcFramework. Aborting multiclient cases");
+			iObserver.LogMessage(KErrorMsg);
+			return;
+			}
+		}
+		
+	RunTestCases( EMulticlientTestIdFirst, EMulticlientTestIdLast );
+	}
+	
+void CHwrmTestCaseController::UpdateSupportedTargets()
+	{
+    if( iApiType == EHWRMApiTypeXAPI )
+    	{
+    	CHWRMExtendedLight* tmpLight = CHWRMExtendedLight::NewL();
+    	iSupportedTargets = tmpLight->SupportedTargets();
+    	delete tmpLight;
+    	}
+    else if( iApiType == EHWRMApiTypeSAPI )
+    	{
+    	CHWRMLight* tmpLight = CHWRMLight::NewL();
+    	iSupportedTargets = tmpLight->SupportedTargets();
+    	delete tmpLight;
+    	}	
+    else if( iApiType == EHWRMApiTypeEAPI )
+    	{
+    	CHWRMEnhancedLight* tmpLight = CHWRMEnhancedLight::NewL();
+    	iSupportedTargets = tmpLight->SupportedTargets();
+    	delete tmpLight;
+    	}	
+	}
+	
+void CHwrmTestCaseController::RunTestCases(TInt aCase)
+	{
+	RunTestCases( aCase, aCase );
+	}
+
+void CHwrmTestCaseController::RunTestCases(TInt aFirst, TInt aLast)
+	{
+ 	_LIT(KLogMessage1,"Running test cases from %d to %d..");
+ 	_LIT(KLogMessage2,"Using API: %d.");
+ 	
+ 	TBuf<256> logMessage;
+ 	logMessage.Format(KLogMessage1,aFirst,aLast);
+ 	iObserver.LogMessage(logMessage);
+ 	
+ 	logMessage.Format(KLogMessage2,iApiType);
+ 	iObserver.LogMessage(logMessage);
+ 	
+	TInt i;
+	
+	for( i = aFirst; i <= aLast; i++ )
+		{
+		iErrCode = 1;
+
+		iObserver.InfoMessage(_L("Executing test case..."));
+		switch(i)
+			{
+			// Basic test cases start
+			case EBasicTestIdFirst:
+				FormatMessageL(EHwrmMessageOpDebug, _L( "Start test case number %d" ), i );
+				iObserver.InfoMessage( _L("Basic tests start...") );
+				break;
+
+			/** 
+			* This case runs LightTest for all targets supported by the device defined in CenRep (10200C8C.txt)
+			* Targets can be removed for this test by defining a mask to targetsToBeSkipped 
+			* * Nokia Core OS *
+			*/
+			case EAllSupportedTargetsLightTest:
+				{
+				//define here targets not to be tested in this case
+				TInt targetsToBeSkipped(0);
+				
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug,_L( "All Supported Targets Test, API Type: SDK Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0002 . \nAll Supported Targets Light Test::SDK Light API used." ) );
+					LightTestAllSupportedSDKTargets( targetsToBeSkipped );
+					
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( "All Supported Targets Test, API Type: Extended Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0002 . \nAll Supported Targets Test::Extended Light API used." ) );
+					LightTestAllSupportedExtendedTargets( targetsToBeSkipped );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( "All Targets Test, API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0002 .\nAll Targets Test, API Type not determined. Skipping test..." ) );
+					}
+				
+				break;
+				}
+
+			/** 
+			* This case runs LightTest for all possible targets
+			*/
+			case EAllTargetsLightTest:
+				{
+				
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Test, API Type: SDK Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0003 . \nAll Targets Light Test::SDK Light API used." ) );
+					LightTargetTest( KSDKAPIAllowedTargets );
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Test, API Type: Extended Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0003 .\nAll Targets Light Test::Extended Light API used." ) );
+					LightTargetTest( KExtendedAPIAllowedTargets );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Test, API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0003 . \nAll Targets Light Test, API Type not determined. Skipping test..." ) );
+					}
+									
+				break;
+				}
+
+			// Possibility to test just one target. Main use could be System Target testing
+			// Expected result is passed to LogResult function as 3rd parameter
+			case ESingleTargetLightTest1:
+				{
+				
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightTargetTestSDK( CHWRMLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0004 . HWRM [LightOnWithSingleTarget] System target" ), iErrCode, KErrNone );  				
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightTargetTestExtended( CHWRMExtendedLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0004 . HWRM [LightOnWithSingleTarget] System target " ), iErrCode, KErrNone );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( "HWRM [LightOnWithSingleTarget], API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0004 . HWRM [LightOnWithSingleTarget]t, API Type not determined. Skipping test..." ) );
+					}
+				break;  
+				}
+
+            // In order to pass, this case needs EPrimaryDisplay to be supported
+            // Expected result is passed to LogResult function as 3rd parameter
+			case ECombinedTargetsLightTest1:
+				{
+				iErrCode = KErrNone;
+				
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					CHWRMLight* myLight = CHWRMLight::NewLC();
+					TRAP( iErrCode, myLight->LightOnL( CHWRMLight::EPrimaryDisplay | CHWRMLight::ESystemTarget ) );
+					if( iErrCode == KErrNone )
+					    {
+					    iErrCode = GetLightStatusForSystemTarget( myLight, CHWRMLight::ELightOn );
+					    }
+					LogResult( _L( "\n @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0005 . HWRM [LightOnWithCombinedTargets] PrimaryDisplay | SystemTarget " ), iErrCode );
+					LogResult( _L( "\nHWRM [LightOnWithCombinedTargets] PrimaryDisplay | SystemTarget " ), iErrCode, KErrNone );					
+					CleanupStack::PopAndDestroy( myLight );
+					}
+				else if( iApiType == EHWRMApiTypeXAPI ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					CHWRMExtendedLight* myLight = CHWRMExtendedLight::NewLC();
+					TRAP( iErrCode, myLight->LightOnL( CHWRMExtendedLight::EPrimaryDisplay | CHWRMExtendedLight::ESystemTarget ) );
+					if( iErrCode == KErrNone )
+					    {
+					    iErrCode = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightOn );
+					    }
+					LogResult( _L( "\n @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0005 . HWRM [LightOnWithCombinedTargets] PrimaryDisplay | SystemTarget " ), iErrCode, KErrNone );					
+					CleanupStack::PopAndDestroy( myLight );
+					}
+				else if( iApiType == EHWRMApiTypeEAPI ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					CHWRMEnhancedLight* myLight = CHWRMEnhancedLight::NewLC();
+					TRAP( iErrCode, myLight->LightOnL( CHWRMExtendedLight::EPrimaryDisplay | CHWRMExtendedLight::ESystemTarget ) );
+					if( iErrCode == KErrNone )
+					    {
+					    iErrCode = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightOn );
+					    }
+					LogResult( _L( "\n @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0005 . HWRM [LightOnWithCombinedTargets] PrimaryDisplay | SystemTarget " ), iErrCode, KErrNone );					
+					CleanupStack::PopAndDestroy( myLight );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Combined Targets Test, API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0005 . Combined Targets Test, API Type not determined. Skipping test..." ) );
+					}  				
+				break;
+				}
+
+            //In order to pass, this case needs EPrimaryDisplayAndKeyboard and ECustomTarget1 to be supported 
+			// Expected result is passed to LogResult function as 3rd parameter
+			case ECombinedTargetsLightTest2:
+				{
+				iErrCode = KErrNone;
+				
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					CHWRMLight* myLight = CHWRMLight::NewLC();
+					TRAP( iErrCode, myLight->LightOnL( CHWRMLight::EPrimaryDisplayAndKeyboard | CHWRMLight::ECustomTarget1 ) );
+				    LogResult( _L( "\n @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0006 . HWRM [LightOnWithCombinedTargets] PrimaryDisplayAndKeyboard | ECustomTarget1  " ), iErrCode, KErrNotSupported );					
+					CleanupStack::PopAndDestroy( myLight );
+					}
+				else if( iApiType == EHWRMApiTypeXAPI ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					CHWRMExtendedLight* myLight = CHWRMExtendedLight::NewLC();
+					TRAP( iErrCode, myLight->LightOnL( CHWRMExtendedLight::EPrimaryDisplayAndKeyboard | CHWRMExtendedLight::ECustomTarget1 ) );
+					LogResult( _L( "\n @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0006 . HWRM [LightOnWithCombinedTargets] PrimaryDisplayAndKeyboard | ECustomTarget1 " ), iErrCode, KErrNotSupported );					
+					CleanupStack::PopAndDestroy( myLight );
+					}
+				else if( iApiType == EHWRMApiTypeEAPI ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					CHWRMEnhancedLight* myLight = CHWRMEnhancedLight::NewLC();
+					TRAP( iErrCode, myLight->LightOnL( CHWRMExtendedLight::EPrimaryDisplayAndKeyboard | CHWRMExtendedLight::ECustomTarget1 ) );
+					LogResult( _L( "\n @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0006 . HWRM [LightOnWithCombinedTargets] PrimaryDisplayAndKeyboard | ECustomTarget1 " ), iErrCode, KErrNotSupported );					
+					CleanupStack::PopAndDestroy( myLight );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Combined Targets Test, API Type not determined. Skipping test..." ) );
+					LogResult(_L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0006 .Combined Targets Test, API Type not determined. Skipping test..." ) );
+					}  				
+				break;
+				}
+			
+			/** 
+			* This case runs LightOnDurationTest for all possible targets
+			*/
+			case EAllTargetsLightOnDurationTest:
+				{			
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light on Duration Test, API Type: SDK Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0007 . All Targets Light on Duration Test::SDK Light API used." ) );
+					LightOnDurationTest( KSDKAPIAllowedTargets );
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light on Duration Test, API Type: Extended Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0007 .All Targets Light on Duration Test::Extended Light API used." ) );
+					LightOnDurationTest( KExtendedAPIAllowedTargets );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light on Duration Test, API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0007 . All Targets Light on Duration Test, API Type not determined. Skipping test..." ) );
+					}
+									
+				break;
+				}
+			
+			//possibility to test just one target. Main use could be System Target testing	
+			case ESingleTargetLightOnDurationTest1:
+				{
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightOnDurationTestSDK( CHWRMLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0008 . HWRM [LightOnDurationWithSingleTarget] System target" ), iErrCode );  				
+					}
+				else if( iApiType == EHWRMApiTypeXAPI ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightOnDurationTestExtended( CHWRMExtendedLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0008 . HWRM [LightOnDurationWithSingleTarget] System target " ), iErrCode );
+					}
+				else if( iApiType == EHWRMApiTypeEAPI ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightOnDurationTestEnhanced( CHWRMExtendedLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0008 . HWRM [LightOnDurationWithSingleTarget] System target " ), iErrCode );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " LightOnDurationWithSingleTarget, API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0008 . LightOnDurationWithSingleTarget, API Type not determined. Skipping test..." ) );
+					}
+				break;  
+				}
+	
+	        /** 
+			* This case runs LightOffDurationTest for all possible targets
+			*/
+			case EAllTargetsLightOffDurationTest:
+				{			
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Off Duration Test, API Type: SDK Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0009 . All Targets Light Off Duration Test::SDK Light API used." ) );
+					LightOffDurationTest( KSDKAPIAllowedTargets );
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeXAPI) ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Off Duration Test, API Type: Extended Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0009 . All Targets Light Off Duration Test::Extended Light API used." ) );
+					LightOffDurationTest( KExtendedAPIAllowedTargets );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Off Duration Test, API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0009 . All Targets Light Off Duration Test, API Type not determined. Skipping test..." ) );
+					}
+									
+				break;
+				}
+
+			//possibility to test just one target. Main use could be System Target testing	
+			case ESingleTargetLightOffDurationTest1:
+				{
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightOffDurationTestSDK( CHWRMLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0010 . HWRM [LightOffDurationWithSingleTarget] System target" ), iErrCode );  				
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightOffDurationTestExtended( CHWRMExtendedLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0010 . HWRM [LightOffDurationWithSingleTarget] System target " ), iErrCode );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " LightOffDurationWithSingleTarget, API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0010 . LightOffDurationWithSingleTarget, API Type not determined. Skipping test..." ) );
+					}
+				break;  
+				}
+
+
+			/** 
+			* This case runs LightIntensityTest for all possible targets
+			*/
+			case EAllTargetsLightIntensityTest:
+				{			
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Intensity Test, API Type: SDK Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0011 . All Targets Light Intensity Test::SDK Light API used." ) );
+					LightIntensityTest( KSDKAPIAllowedTargets );
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Intensity Test, API Type: Extended Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0011 . All Targets Light Intensity Test::Extended Light API used." ) );
+					LightIntensityTest( KExtendedAPIAllowedTargets );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Intensity Test, API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0011 . All Targets Light Intensity Test, API Type not determined. Skipping test..." ) );
+					}
+									
+				break;
+				}
+				
+				
+			//possibility to test just one target. Main use could be System Target testing
+			case ESingleTargetLightIntensityTest1:
+				{
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightIntensityTestSDK( CHWRMLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0012 . HWRM [LightIntensityWithSingleTarget] System target" ), iErrCode );  				
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightIntensityTestExtended( CHWRMExtendedLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0012 . HWRM [LightIntensityWithSingleTarget] System target " ), iErrCode );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " LightIntensityWithSingleTarget, API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0012 .LightIntensityWithSingleTarget, API Type not determined. Skipping test..." ) );
+					}
+				break;
+				}
+
+			/** 
+			* This case runs LightBlinkTest for all possible targets
+			*/
+			case EAllTargetsLightBlinkTest:
+				{			
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Blink Test, API Type: SDK Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0013 .All Targets Light Blink Test::SDK Light API used." ) );
+					LightBlinkTest( KSDKAPIAllowedTargets );
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Blink Test, API Type: Extended Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0013 .All Targets Light Blink Test::Extended Light API used." ) );
+					LightBlinkTest( KExtendedAPIAllowedTargets );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Blink Test, API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0013 .All Targets Light Blink Test, API Type not determined. Skipping test..." ) );
+					}
+									
+				break;
+				}
+
+			//possibility to test just one target. Main use could be System Target testing
+			case ESingleTargetLightBlinkTest1:
+				{
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightBlinkTestSDK( CHWRMLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0014 .HWRM [LightBlinkWithSingleTarget] System target" ), iErrCode );  				
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightBlinkTestExtended( CHWRMExtendedLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0014 .HWRM [LightBlinkWithSingleTarget] System target " ), iErrCode );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " LightBlinkWithSingleTarget, API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0014 .LightBlinkWithSingleTarget, API Type not determined. Skipping test..." ) );
+					}
+				break;
+				}
+
+			/** 
+			* This case runs LightBlinkDurationTest for all possible targets
+			*/
+			case EAllTargetsLightBlinkDurationTest:
+				{			
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Blink Duration Test, API Type: SDK Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0015 .All Targets Light Blink Duration Test::SDK Light API used." ) );
+					LightBlinkDurationTest( KSDKAPIAllowedTargets );
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Blink Duration Test, API Type: Extended Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0015 .All Targets Light Blink Duration Test::Extended Light API used." ) );
+					LightBlinkDurationTest( KExtendedAPIAllowedTargets );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Blink Duration Test, API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0015 .All Targets Light Blink Duration Test, API Type not determined. Skipping test..." ) );
+					}
+									
+				break;
+				}
+
+			//possibility to test just one target. Main use could be System Target testing
+			case ESingleTargetLightBlinkDurationTest1:
+				{
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightBlinkDurationTestSDK( CHWRMLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0016 .HWRM [LightBlinkDurationWithSingleTarget] System target" ), iErrCode );  				
+					}
+				else if( iApiType == EHWRMApiTypeXAPI ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightBlinkDurationTestExtended( CHWRMExtendedLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0016 .HWRM [LightBlinkDurationWithSingleTarget] System target " ), iErrCode );
+					}
+				else if( iApiType == EHWRMApiTypeEAPI ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightBlinkDurationTestEnhanced( CHWRMExtendedLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0016 .HWRM [LightBlinkDurationWithSingleTarget] System target " ), iErrCode );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " LightBlinkDurationWithSingleTarget, API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0016 .LightBlinkDurationWithSingleTarget, API Type not determined. Skipping test..." ) );
+					}
+				break;
+				}
+
+			/** 
+			* This case runs LightBlinkOnOffTest for all possible targets
+			*/	
+			case EAllTargetsLightBlinkOnOffTest:
+				{			
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Blink On/Off Test, API Type: SDK Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0017 .All Targets Light Blink On/Off Test::SDK Light API used." ) );
+					LightBlinkOnOffTest( KSDKAPIAllowedTargets );
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Blink On/Off Testt, API Type: Extended Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0017 .All Targets Light Blink On/Off Test::Extended Light API used." ) );
+					LightBlinkOnOffTest( KExtendedAPIAllowedTargets );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Blink On/Off Test, API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0017 .All Targets Light Blink On/Off Test, API Type not determined. Skipping test..." ) );
+					}
+									
+				break;
+				}
+			
+			//possibility to test just one target. Main use could be System Target testing
+			case ESingleTargetLightBlinkOnOffTest1:
+				{
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightBlinkOnOffTestSDK( CHWRMLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0018 .HWRM [LightBlinkOnOffWithSingleTarget] System target" ), iErrCode );  				
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightBlinkOnOffTestExtended( CHWRMExtendedLight::ESystemTarget );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0018 .HWRM [LightBlinkOnOffWithSingleTarget] System target " ), iErrCode );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " LightBlinkOnOffWithSingleTarget, API Type not determined. Skipping test..." ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0018 .LightBlinkOnOffWithSingleTarget, API Type not determined. Skipping test..." ) );
+					}
+				break;
+				}
+
+			/** 
+			* This case runs LightOnDurationRGBTest for all possible targets
+			*/
+			case EAllTargetsLightOnDurationRGBTest:
+				{			
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light on Duration RGB Test, API Type: SDK Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0018A . All Targets Light on Duration RGB Test::SDK Light API used." ) );
+					LightOnDurationTest( KSDKAPIAllowedTargets, ETrue, 0xFF, 0, 0 );
+					}
+				else if( iApiType == EHWRMApiTypeEAPI ) // Enhanced Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light on Duration RGB Test, API Type: Enhanced Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0018A .All Targets Light on Duration RGB Test::Enhanced Light API used." ) );
+					LightOnDurationTest( KEnhancedAPIAllowedTargets, ETrue, 0, 0xff, 0 );
+					}									
+				break;
+				}
+			
+			//possibility to test just one target. Main use could be System Target testing	
+			case EAllTargetsLightOnDurationRGBTest1:
+				{
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightOnDurationTestSDK( CHWRMLight::ESystemTarget, ETrue, 0, 0, 0xff );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-00018B . HWRM [LightOnDurationWithSingleTarget] System target" ), iErrCode );  				
+					}
+				else if( iApiType == EHWRMApiTypeEAPI ) // Enhanced Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightOnDurationTestEnhanced( CHWRMExtendedLight::ESystemTarget, ETrue, 0xff, 0, 0 );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-00018B . HWRM [LightOnDurationWithSingleTarget] System target " ), iErrCode );
+					}
+				break;  
+				}
+	
+			/** 
+			* This case runs LightBlinkDurationRGBTest for all possible targets
+			*/
+			case EAllTargetsLightBlinkDurationRGBTest:
+				{			
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Blink Duration RGB Test, API Type: SDK Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0018C . All Targets Light Blink Duration RGB Test::SDK Light API used." ) );
+					LightBlinkDurationTest( KSDKAPIAllowedTargets, ETrue, 0, 0xff, 0 );
+					}
+				else if( iApiType == EHWRMApiTypeEAPI ) // Enhanced Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " All Targets Light Blink Duration RGB Test, API Type: Enhanced Light API" ) );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0018C .All Targets Light Blink Duration RGB Test::Enhanced Light API used." ) );
+					LightBlinkDurationTest( KEnhancedAPIAllowedTargets, ETrue, 0, 0, 0xff);
+					}									
+				break;
+				}
+			
+			//possibility to test just one target. Main use could be System Target testing	
+			case EAllTargetsLightBlinkDurationRGBTest1:
+				{
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightBlinkDurationTestSDK( CHWRMLight::ESystemTarget, ETrue, 0xff, 0, 0);
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-00018D . HWRM [LightOnDurationWithSingleTarget] System target" ), iErrCode );				
+					}
+				else if( iApiType == EHWRMApiTypeEAPI ) // Enhanced Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightBlinkDurationTestEnhanced( CHWRMExtendedLight::ESystemTarget, ETrue, 0, 0xff, 0 );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-00018D . HWRM [LightOnDurationWithSingleTarget] System target " ), iErrCode );
+					}
+				break;	
+				}
+			
+			
+			/** 
+			* This case runs LightTests(On/Off/Blink) for multiple hardcoded targets
+			*/	
+			case ELightDifferentTargetsTest:
+				{
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightWithDifferentTargetsSDK( );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0019 .HWRM [LightWithDifferentTargets]" ), iErrCode, KErrNone );  				
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightWithDifferentTargetsExtended();
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0019 .HWRM [LightWithDifferentTargets]" ), iErrCode, KErrNone );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " LightWithDifferentTargets, API Type not determined. Skipping test..." ) );
+					LogResult( _L(" @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0019 .LightWithDifferentTargets, API Type not determined. Skipping test..." ) );
+					}
+				break;
+				}
+
+			/** 
+			* This case runs LightTests(On/Off/Blink) for multiple hardcoded targets with
+			* invalid duration
+			*/	
+			case ELightInvalidDurationTest:
+				{
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightWithInvalidDurationSDK( );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0020 .HWRM [LightWithInvalidDuration]" ), iErrCode, KErrNone );  				
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) ) // Extended Light API
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+					iErrCode = LightWithInvalidDurationExtended();
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0020 .HWRM [LightWithInvalidDuration]" ), iErrCode, KErrNone );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " LightWithInvalidDuration, API Type not determined. Skipping test %d..." ) ,i );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0020 .LightWithInvalidDuration, API Type not determined. Skipping test..." ) );
+					}
+				break;
+				}
+			
+
+			case ELightIntensityTest2:
+				{
+				FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+				if( iApiType == EHWRMApiTypeSAPI ) // SDK Light API
+					{
+					iErrCode = LightIntensitySDK( );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-SDKAPI-L-0021 .HWRM [LightWithIntensity]" ), iErrCode, KErrNone );  				
+					}
+				else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) ) // Extended Light API
+					{
+					iErrCode = LightIntensityExtended();
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-EXTAPI-L-0021 .HWRM [LightWithIntensity]" ), iErrCode, KErrNone );
+					}
+				else // No API selected, skip the test
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L( " LightWithIntensity, API Type not determined. Skipping test %d..." ), i );
+					LogResult( _L( " @SYMTestCaseID:DEVSRVS-HWRMMC-NOAPI-L-0021 .LightWithIntensity, API Type not determined. Skipping test..." ) );
+					}
+				break;
+				}
+
+
+			case EBasicTestIdLast:
+				iObserver.InfoMessage( _L("Basic tests end...") );
+				break;
+				
+			// End of Basic test cases
+
+
+			
+			// Multiclient cases start
+
+			case EMulticlientTestIdFirst:
+				FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+				iObserver.InfoMessage( _L("Multiclient tests start...") );
+				iErrCode = Verify_MCFramework_M();
+				if (iErrCode != KErrNone)
+				{
+					iMcFramework->StepExecuted(KErrGeneral);
+				}
+				
+				LogResult(_L(" @SYMTestCaseID:DEVSRVS-HWRMMC-L-0023 .HWRM [Verify_MCFramework_M] "), iErrCode);
+				break;
+
+			case EMCPrimaryDisplayLight:
+				FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+				iErrCode = MC_Primary_display_light_M();
+				if (iErrCode != KErrNone)
+				{
+					iMcFramework->StepExecuted(KErrGeneral);
+				}
+				LogResult(_L(" @SYMTestCaseID:DEVSRVS-HWRMMC-L-0024 .HWRM [MC_Primary_display_light_M] "), iErrCode);				
+				break;
+
+			case EMCDisplayOnKbBlink:
+				FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+				iErrCode = MC_Display_on_and_keyboard_blink_M();
+				if (iErrCode != KErrNone)
+				{
+					iMcFramework->StepExecuted(KErrGeneral);
+				}
+				LogResult(_L(" @SYMTestCaseID:DEVSRVS-HWRMMC-L-0025 .HWRM [MC_Display_on_and_keyboard_blink_M] "), iErrCode);				
+				break;
+
+			case EMCDisplayOnKbReserved:
+				FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+				iErrCode = MC_Display_on_and_keyboard_reserved_M();
+				if (iErrCode != KErrNone)
+				{
+					iMcFramework->StepExecuted(KErrGeneral);
+				}				
+				LogResult(_L(" @SYMTestCaseID:DEVSRVS-HWRMMC-L-0026 .HWRM [MC_Display_on_and_keyboard_reserved_M] "), iErrCode);
+				break;
+
+			case EMCDisplayAndKbBlink:
+				FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+				iErrCode = MC_Display_and_keyboard_blink_M();
+				if (iErrCode != KErrNone)
+				{
+					iMcFramework->StepExecuted(KErrGeneral);
+				}
+				LogResult(_L(" @SYMTestCaseID:DEVSRVS-HWRMMC-L-0027 .HWRM [MC_Display_and_keyboard_blink_M] "), iErrCode);
+				break;
+
+			case EMCDisplayRGBColor:
+				FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+				iErrCode = MC_Display_RGB_M();
+				if (iErrCode != KErrNone)
+				{
+					iMcFramework->StepExecuted(KErrGeneral);
+				}
+				LogResult(_L(" @SYMTestCaseID:DEVSRVS-HWRMMC-L-0027A .HWRM [MC_Display_RGB_M1] "), iErrCode);
+				break;
+
+			case EMCVibraBasicUsage:
+				FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+				iErrCode = MC_Vibra_Basic_Usage_M();
+				if (iErrCode != KErrNone)
+				{
+					iMcFramework->StepExecuted(KErrGeneral);
+				}
+				LogResult(_L(" @SYMTestCaseID:DEVSRVS-HWRMMC-V-0028 .HWRM [MC_Vibra_Basic_Usage_M] "), iErrCode);
+				break;															
+
+			case EMCCombinedLightAndVibra1:
+				FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+				iErrCode = MC_Combined_light_and_vibra_usage_M();
+				if (iErrCode != KErrNone)
+				{
+					iMcFramework->StepExecuted(KErrGeneral);
+				}
+				LogResult(_L(" @SYMTestCaseID:DEVSRVS-HWRMMC-LV-0029 .HWRM [MC_Combined_light_and_vibra_usage_M] "), iErrCode);
+				break;		
+
+			case EMCCombinedLightAndVibra2:
+				FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+				iErrCode = MC_Combined_light_and_vibra_usage_2_M();
+				if (iErrCode != KErrNone)
+				{
+					iMcFramework->StepExecuted(KErrGeneral);
+				}
+				LogResult(_L(" @SYMTestCaseID:DEVSRVS-HWRMMC-LV-0030 .HWRM [MC_Combined_light_and_vibra_usage_2_M] "), iErrCode);				
+				break;		
+				
+			case EMCFmTxBasicUsage:
+				FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+				iErrCode = MC_FmTx_Basic_Usage_M();
+				if (iErrCode != KErrNone)
+				{
+					iMcFramework->StepExecuted(KErrGeneral);
+				}
+				LogResult(_L(" @SYMTestCaseID:DEVSRVS-HWRMMC-F-0031 .HWRM [MC_FmTx_Basic_Usage_M] "), iErrCode);
+				break;			
+			
+			case EMulticlientTestIdLast:
+				FormatMessageL(EHwrmMessageOpDebug, _L( " Start test case number %d" ), i );
+				iMcFramework->StopMultiClientTestInSlave( );
+				break;				
+
+			// End of Multiclient cases
+					
+			
+			// Repeat invalid parameters
+			// Expected to return KErrArgument
+			case ERepeatInvalidParamsTest:
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Start test case %d [%d]"), i, iErrCode);
+				iErrCode = RunRepeatedlyInvalidValues();
+				FormatMessageL(EHwrmMessageOpDebug,_L(" End test case %d [%d]"), i, iErrCode );
+				LogResult(_L(" @SYMTestCaseID:DEVSRVS-HWRMMC-LV-0034 .HWRM [Repeated Invalid Values] "), iErrCode, KErrArgument);				
+				break;
+				
+			// Vibra test (30 min)	
+			case EMaliciousVibraTest:
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Start test case %d [%d]"), i, iErrCode);
+				iErrCode = MaliciousVibra();
+				FormatMessageL(EHwrmMessageOpDebug,_L(" End test case %d [%d]"), i, iErrCode);
+				LogResult(_L(" @SYMTestCaseID:DEVSRVS-HWRMMC-V-0035 .HWRM [Malicious Vibra Usage] "), iErrCode);	
+				break;
+			
+			// Wait charging notify (5 min) 	
+			case EWaitForChargingNotify:
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Start test case %d [%d]"), i, iErrCode);
+				iErrCode = ChargingNotify();
+				FormatMessageL(EHwrmMessageOpDebug,_L(" End test case %d [%d]"), i, iErrCode);
+				LogResult(_L(" @SYMTestCaseID:DEVSRVS-HWRMMC-V-0036 .HWRM [Wait Charging Notify] "), iErrCode);
+				
+				break;
+												
+			default:
+				break;
+			
+
+			}
+	
+		
+		CTestScheduler::StartAndStopL(2000); // Short delay after each test case
+							
+		//iErrCode set to 1 in the beginning. If not changed, no case has been executed
+		if( !iErrCode )
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" End test case %d, error code [%d]"), i, iErrCode);
+			FormatMessageL(EHwrmMessageOpDebug,_L(""));
+			FormatMessageL(EHwrmMessageOpDebug,_L("#############################################################"));
+			FormatMessageL(EHwrmMessageOpDebug,_L(""));
+		
+			if(iErrCode == KErrNone)
+				{
+				iObserver.InfoMessage(_L("Test case PASSED"));	
+				}
+			else
+				{
+				iObserver.InfoMessage(_L("Test case FAILED"));
+				}			
+			}
+		
+		}
+		
+	}
+
+
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::TargetSupported
+// -----------------------------------------------------------------------------
+//
+TBool CHwrmTestCaseController::TargetSupported( TInt aTarget )
+	{
+    return( iSupportedTargets & aTarget);  
+	}
+
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightTestAllSupportedTargets
+// This method 
+//  -runs LightTest for all targets supported by the device defined in CenRep (10200C8C.txt)
+//   Targets can be removed for this test by defining a mask to targetsToBeSkipped 
+//  -logs results
+// -----------------------------------------------------------------------------
+//
+void CHwrmTestCaseController::LightTestAllSupportedSDKTargets( TInt aTargetsToBeSkipped )
+{
+		
+	TBuf<100> msg( KNullDesC );	
+
+	_LIT( KMessageText, "HWRM [All supported targets test]: target 0x%x" );
+		
+	TInt counter(0);
+	
+	TInt testTargets(0);
+	
+	testTargets = iSupportedTargets & ( ~aTargetsToBeSkipped );
+		
+	//loop through supported targets mask and execute LightTargetTest if current target is supported
+	while( testTargets )
+		{
+		
+		TInt currentTarget = ( 1 << counter );
+		
+		if( testTargets & 1 ) 
+			{							
+			FormatMessageL(EHwrmMessageOpDebug, _L( " All Supported Targets Test, target 0x%x" ), currentTarget );
+			iErrCode = LightTargetTestSDK( currentTarget );
+			msg.Format( KMessageText,  currentTarget );
+			LogResult( msg, iErrCode );
+			}
+		else
+		 	{
+		 	FormatMessageL(EHwrmMessageOpDebug, _L( " All Supported Targets Test, target 0x%x SKIPPED. Target not supported" ), (TInt)currentTarget );
+		 	msg.Format( KMessageText,  currentTarget );
+		 	msg.Append(_L(" - SKIPPED. Target not supported" ) );
+			LogResult( msg );
+		 	}
+			
+			
+			counter++;
+			
+			//remove tested target from the mask 
+			testTargets >>= 1;
+		
+		}	
+}
+
+void CHwrmTestCaseController::LightTestAllSupportedExtendedTargets( TInt aTargetsToBeSkipped )
+{
+		
+	TBuf<100> msg( KNullDesC );	
+
+	_LIT( KMessageText, "HWRM [All supported targets test]: target 0x%x" );
+		
+	TInt counter(0);
+	
+	TInt testTargets(0);
+	
+	testTargets = iSupportedTargets & ( ~aTargetsToBeSkipped );
+		
+	//loop through supported targets mask and execute LightTargetTest if current target is supported
+	while( testTargets )
+		{
+		
+		TInt currentTarget = ( 1 << counter );
+		
+		if( testTargets & 1 ) 
+			{							
+			FormatMessageL(EHwrmMessageOpDebug, _L( " All Supported Targets Test, target 0x%x" ), currentTarget );
+			iErrCode = LightTargetTestExtended( currentTarget );
+			msg.Format( KMessageText,  currentTarget );
+			LogResult( msg, iErrCode );
+			}
+		else
+		 	{
+		 	FormatMessageL(EHwrmMessageOpDebug, _L( " All Supported Targets Test, target 0x%x SKIPPED. Target not supported" ), (TInt)currentTarget );
+		 	msg.Format( KMessageText, currentTarget );
+		 	msg.Append(_L(" - SKIPPED. Target not supported" ) );
+			LogResult( msg );
+		 	}
+			
+			
+			counter++;
+			
+			//remove tested target from the mask 
+			testTargets >>= 1;
+		
+		}	
+}
+
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::TestLightOn
+// This method 
+// - call LightOnL method with given parameters
+// - Run 100ms delay
+// - Print parameters to log 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::TestLightOn(TInt aTarget, TInt aDur, TInt aIntens, TBool aFadeIn)
+{
+	TInt errorStatus(KErrNone);			
+	TRAP(errorStatus, iMyLight->LightOnL(aTarget, aDur, aIntens, aFadeIn));
+	CTestScheduler::StartAndStopL(100);
+	FormatMessageL(EHwrmMessageOpDebug,_L(" LightONL ->error:%d"), errorStatus);
+	return errorStatus;
+}
+
+TInt CHwrmTestCaseController::TestLightOn(TInt aTarget)
+{
+	TInt errorStatus(KErrNone);			
+	TRAP(errorStatus, iMyLight->LightOnL(aTarget));
+	CTestScheduler::StartAndStopL(100);
+	FormatMessageL(EHwrmMessageOpDebug,_L(" LightONL ->error:%d"), errorStatus);
+	return errorStatus;
+}
+
+TInt CHwrmTestCaseController::TestLightOnColor(TInt aTarget, TInt aDur, THWRMLightColor& aColor)
+{
+	TInt errorStatus(KErrNone);			
+	TRAP(errorStatus, iMyLight->LightOnL(aTarget, aDur, aColor));
+	CTestScheduler::StartAndStopL(100);
+	FormatMessageL(EHwrmMessageOpDebug,_L(" LightONL ->error:%d"), errorStatus);
+	return errorStatus;
+}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::TestLightOff
+// This method 
+// - call LightOffL method with given parameters
+// - Run 100ms delay
+// - Print parameters to log 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::TestLightOff(TInt aTarget, TInt aDuration, TBool aFadeOut)
+{
+	TInt errorStatus(KErrNone);			
+	TRAP(errorStatus, iMyLight->LightOffL(aTarget, aDuration, aFadeOut));
+	CTestScheduler::StartAndStopL(100);
+	FormatMessageL(EHwrmMessageOpDebug,_L(" LightOffL ->error:%d"), errorStatus);
+	return errorStatus;
+}
+
+TInt CHwrmTestCaseController::TestLightOff(TInt aTarget)
+{
+	TInt errorStatus(KErrNone);			
+	TRAP(errorStatus, iMyLight->LightOffL(aTarget));
+	CTestScheduler::StartAndStopL(100);
+	FormatMessageL(EHwrmMessageOpDebug,_L(" LightOffL ->error:%d"), errorStatus);
+	return errorStatus;
+}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::TestLightBlink
+// This method 
+// - call LightBlinkL method with given parameters
+// - Run 100ms delay
+// - Print parameters to log 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::TestLightBlink(TInt aTarget, 
+		                         		  TInt aDuration, 
+		                         		  TInt aOnDuration, 
+		                         		  TInt aOffDuration, 
+		                         		  TInt aIntensity)
+{
+	TInt errorStatus(KErrNone);			
+	TRAP(errorStatus, iMyLight->LightBlinkL(aTarget, aDuration, aOnDuration, aOffDuration, aIntensity));
+	CTestScheduler::StartAndStopL(100);
+	FormatMessageL(EHwrmMessageOpDebug,_L(" LightBlinkL ->error:%d"), errorStatus);
+	return errorStatus;
+}
+
+TInt CHwrmTestCaseController::TestLightBlink(TInt aTarget, 
+		                         		  TInt aDuration)
+{
+	TInt errorStatus(KErrNone);			
+	TRAP(errorStatus, iMyLight->LightBlinkL(aTarget, aDuration));
+	CTestScheduler::StartAndStopL(100);
+	FormatMessageL(EHwrmMessageOpDebug,_L(" LightBlinkL ->error:%d"), errorStatus);
+	return errorStatus;
+}
+
+TInt CHwrmTestCaseController::TestLightBlink(TInt aTarget)
+{
+	TInt errorStatus(KErrNone);			
+	TRAP(errorStatus, iMyLight->LightBlinkL(aTarget));
+	CTestScheduler::StartAndStopL(100);
+	FormatMessageL(EHwrmMessageOpDebug,_L(" LightBlinkL ->error:%d"), errorStatus);
+	return errorStatus;
+}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::RunTestVibra
+// This method 
+// - call LightBlinkL method with given parameters
+// - Run 100ms delay
+// - Print parameters to log 
+// -----------------------------------------------------------------------------
+//
+
+TInt CHwrmTestCaseController::RunTestVibra( TInt howLong, TInt whatIntensity)
+{
+	TInt errorStatus(KErrNone);	
+	TRAP(errorStatus, iVibra->StartVibraL(howLong, whatIntensity));
+	CTestScheduler::StartAndStopL(100);
+	return errorStatus;
+}
+
+TInt CHwrmTestCaseController::RunTestVibra( TInt howLong )
+{
+	TInt errorStatus(KErrNone);	
+	TRAP(errorStatus, iVibra->StartVibraL(howLong));
+	CTestScheduler::StartAndStopL(100);
+	return errorStatus;
+}
+
+
+TInt CHwrmTestCaseController::StopTestVibra()
+{
+	TInt errorStatus(KErrNone);		
+	TRAP(errorStatus, iVibra->StopVibraL());
+	CTestScheduler::StartAndStopL(100);
+	return errorStatus; 
+}
+
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::RunTestFmTx
+// This method 
+// - call EnableL method with given parameters
+// - Run 100ms delay
+// - Print parameters to log 
+// -----------------------------------------------------------------------------
+//
+
+TInt CHwrmTestCaseController::RunTestFmTx( TInt aFrequency )
+{
+	TInt errorStatus(KErrNone);	
+	TRAP(errorStatus, iFmTx->EnableL(aFrequency));
+	CTestScheduler::StartAndStopL(100);
+	FormatMessageL(EHwrmMessageOpDebug,_L(" EnableL ->error:%d"), errorStatus);
+	return errorStatus;
+}
+
+
+TInt CHwrmTestCaseController::StopTestFmTx()
+{
+	TInt errorStatus(KErrNone);		
+	TRAP(errorStatus, iFmTx->DisableL());
+	CTestScheduler::StartAndStopL(100);
+	FormatMessageL(EHwrmMessageOpDebug,_L(" DisableL ->error:%d"), errorStatus);
+	return errorStatus; 
+}
+
+TInt CHwrmTestCaseController::Verify_RGBColorValue(THWRMLightColor& aColor)
+{
+    TInt colorval;
+
+    RProperty::Get( TUid::Uid( KTestCategory ), KHWRMColorStatus, colorval );
+
+    if(((colorval>>KHWRMRedShift)    & 0xFF) != aColor.iRed)
+        {
+        FormatMessageL(EHwrmMessageOpDebug,_L("Red value not correct. Expected=0x%x, Received=0x%x"), ((colorval>>KHWRMRedShift)    & 0xFF), aColor.iRed);
+        return KErrArgument;
+        }
+    if(((colorval>>KHWRMGreenShift)  & 0xFF) != aColor.iGreen)
+        {
+        FormatMessageL(EHwrmMessageOpDebug,_L("Green value not correct. Expected=0x%x, Received=0x%x"), ((colorval>>KHWRMGreenShift)  & 0xFF), aColor.iGreen);
+        return KErrArgument;
+        }
+     if((colorval & 0xFF) != aColor.iBlue)
+        {
+        FormatMessageL(EHwrmMessageOpDebug,_L("Blue value not correct. Expected=0x%x, Received=0x%x"), (colorval & 0xFF), aColor.iBlue);
+        return KErrArgument;
+        }
+	return KErrNone;
+}
+
+/*******************************************************************************/
+/* M U L T I C L I E N T	C A S E S			                               */
+//
+//
+TInt CHwrmTestCaseController::MC_Display_RGB_S()
+{
+	TInt mcResult;
+	mcResult = KErrNone;
+    FormatMessageL(EHwrmMessageOpDebug,_L("MC_Display_RGB_S()"));
+    iObserver.InfoMessage(_L("MC_Display_RGB_S"));
+    CHWRMLight::TLightStatus currStatus;
+
+	TRAP( mcResult, iMyLight = CHWRMLight::NewL(this) );
+
+	if( mcResult == KErrNone )
+		{
+		//Reserve Primary display, Restore current state after reservation, Don't force CoeEnv "on" */
+		TRAP(mcResult, iMyLight->ReserveLightL(CHWRMLight::EPrimaryDisplay, ETrue, ETrue));
+
+		if( mcResult == KErrNone )
+			{
+			THWRMLightColor red;
+			red.iRed = 0xff;
+			red.iGreen = 0;
+			red.iBlue = 0;
+
+			TRAP( mcResult, iMyLight->SetLightColorL(CHWRMLight::EPrimaryDisplay, red));
+
+			if( mcResult == KErrNone )
+				{
+					mcResult = Verify_RGBColorValue(red);
+
+					if( mcResult == KErrNone )
+						{
+						THWRMLightColor green;
+						green.iRed = 0;
+						green.iGreen = 0xff;
+						green.iBlue = 0;
+						mcResult = TestLightOnColor(CHWRMLight::EPrimaryDisplay, 10000, green);
+
+						if( mcResult == KErrNone)
+							{
+							currStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+
+							if( currStatus == CHWRMLight::ELightOn )
+								{								
+								CTestScheduler::StartAndStopL(5000);
+
+								mcResult = Verify_RGBColorValue(green);
+
+								if( mcResult == KErrNone )
+									{
+									CTestScheduler::StartAndStopL(8000);
+
+									mcResult = Verify_RGBColorValue(red); // base state color
+
+									if( mcResult == KErrNone )
+										{
+										iMyLight->ReleaseLight(CHWRMLight::EPrimaryDisplay);
+										iMcFramework->StepExecuted(KErrNone);
+										mcResult = KErrNone;
+										}
+									}
+								}
+							else
+								{
+								FormatMessageL(EHwrmMessageOpDebug,_L(" Expected light status failed. error [%d]"), mcResult);
+								FormatMessageL(EHwrmMessageOpLog, _L("Expected light status failed. error [%d]"), mcResult);
+								}
+							}
+						}
+					else
+						{
+						FormatMessageL(EHwrmMessageOpDebug,_L(" Verify_RGBColorValue returned error [%d]"), mcResult);
+						FormatMessageL(EHwrmMessageOpLog, _L("Verify_RGBColorValue returned error [%d]"), mcResult);
+						}
+					
+				}
+			else
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" SetLightColorL returned error [%d]"), mcResult);
+				FormatMessageL(EHwrmMessageOpLog, _L("SetLightColorL returned error [%d]"), mcResult);
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" ReserveLightL returned error [%d]"), mcResult);
+			FormatMessageL(EHwrmMessageOpLog, _L("ReserveLightL returned error [%d]"), mcResult);
+			}
+		}
+
+	delete iMyLight;
+	return mcResult;
+	
+}
+
+TInt CHwrmTestCaseController::MC_Display_RGB_M()
+	{
+	TInt mcResult;
+	mcResult = KErrNone;
+    FormatMessageL(EHwrmMessageOpDebug,_L("MC_Display_RGB_M()"));
+    iObserver.InfoMessage(_L("MC_Display_RGB_M"));
+    CHWRMLight::TLightStatus currStatus;
+
+	TRAP( mcResult, iMyLight = CHWRMLight::NewL(this) );
+
+	if( mcResult == KErrNone )
+		{
+		//Reserve Primary display, Restore current state after reservation, Don't force CoeEnv "on" */
+		TRAP(mcResult, iMyLight->ReserveLightL(CHWRMLight::EPrimaryDisplay, ETrue, EFalse));
+
+		if( mcResult == KErrNone )
+			{
+			THWRMLightColor blue;
+			blue.iRed = 0;
+			blue.iGreen = 0;
+			blue.iBlue = 0xff;
+
+			TRAP( mcResult, iMyLight->SetLightColorL(CHWRMLight::EPrimaryDisplay, blue));
+
+			if( mcResult == KErrNone )
+				{
+					mcResult = Verify_RGBColorValue(blue);
+
+					if( mcResult == KErrNone )
+						{
+						mcResult = TestLightOff(CHWRMLight::EPrimaryDisplay);
+
+						if( mcResult == KErrNone)
+							{
+							currStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+
+							if( currStatus == CHWRMLight::ELightOff )
+								{
+								mcResult = iMcFramework->StartTestCaseInSlave(EMultiClientCase14);
+
+								if( mcResult == KErrNone )
+									{
+
+									mcResult = Verify_RGBColorValue(blue);
+
+									if( mcResult == KErrNone )
+										{
+
+										iMyLight->ReleaseLight(CHWRMLight::EPrimaryDisplay);
+										
+										iMcFramework->StepExecuted(KErrNone);
+										mcResult = KErrNone;
+										}
+
+									}
+								}
+							else
+								{
+								FormatMessageL(EHwrmMessageOpDebug,_L(" Expected light status failed. error [%d]"), mcResult);
+								FormatMessageL(EHwrmMessageOpLog, _L("Expected light status failed. error [%d]"), mcResult);
+								}
+							}
+						}
+					else
+						{
+						FormatMessageL(EHwrmMessageOpDebug,_L(" Verify_RGBColorValue returned error [%d]"), mcResult);
+						FormatMessageL(EHwrmMessageOpLog, _L("Verify_RGBColorValue returned error [%d]"), mcResult);
+						}
+					
+				}
+			else
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" SetLightColorL returned error [%d]"), mcResult);
+				FormatMessageL(EHwrmMessageOpLog, _L("SetLightColorL returned error [%d]"), mcResult);
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" ReserveLightL returned error [%d]"), mcResult);
+			FormatMessageL(EHwrmMessageOpLog, _L("ReserveLightL returned error [%d]"), mcResult);
+			}
+		}
+
+	delete iMyLight;
+	return mcResult;
+	
+	}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MC_Primary_display_light_M
+// Light usage with two applications / This application is on front
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::MC_Primary_display_light_M()
+    {
+	TInt mcResult;
+	mcResult = KErrNone;
+    FormatMessageL(EHwrmMessageOpDebug,_L("MC_Primary_display_light_M()"));
+    iObserver.InfoMessage(_L("MC_Primary_display_light_M"));
+    CHWRMLight::TLightStatus currStatus;
+    //CHWRMLight::TLightStatus origStatus;    
+    
+    TRAP(mcResult, iMyLight = CHWRMLight::NewL(this));	
+	
+	if(mcResult == KErrNone)
+	{
+		
+	  //Reserve Primary display, Restore current state after reservation, Don't force CoeEnv "on" */
+	  TRAP(mcResult, iMyLight->ReserveLightL(CHWRMLight::EPrimaryDisplay, ETrue, EFalse));
+	  
+	  if (mcResult == KErrNone)
+	  {
+	  	//CTestScheduler::StartAndStopL(1000);
+	  	
+	  	//origStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	  	
+	  	//FormatMessageL(EHwrmMessageOpDebug,_L(" Light reserved while Status:%d"),origStatus);
+	  	/********************/
+	  	/* L I G H T  O F F */
+	  	/********************/
+	  	
+	  	mcResult = TestLightOff(CHWRMLight::EPrimaryDisplay);
+	  	
+	  	if(mcResult == KErrNone)
+	  	{
+	  		/* Setting light off succeeded */
+	  		
+	  		currStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	  		if (currStatus == CHWRMLight::ELightOff)
+	  		{	
+	  			/*****************/
+	  			/* Step executed */
+	  			/*****************/
+	  			
+	  			mcResult = iMcFramework->StartTestCaseInSlave(EMultiClientCase1);
+	  			
+	  			/* Peer (background application) does following:	
+	  			 * --------------------------------------------------
+	  			 * - Reserve Primary display with higher priority 
+	  			 * - Set Primary Display light blinking for 10 seconds 
+	  			 */
+	  			
+	  			if (mcResult == KErrNone)
+	  			{
+	  				// check light status
+	  				currStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	  				
+	  				if(currStatus == CHWRMLight::ELightBlink)
+	  				{
+	  					/******************/
+	  					/* L I G H T  O N */
+	  					/******************/
+	  					mcResult = TestLightOn(CHWRMLight::EPrimaryDisplay, 5000, 75, ETrue);	
+	  					
+	  					if(mcResult == KErrNone) /* Reserved for Slave!!! */
+	  					{  						
+	  						// check light status
+	  						currStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	  						
+	  						if(currStatus == CHWRMLight::ELightBlink)
+	  						{
+	  							/*****************/
+	  							/* Step executed */
+	  							/*****************/
+	  							iMcFramework->StepExecuted(KErrNone);
+	  							mcResult = iMcFramework->WaitNextTestStep();
+	  							
+	  							/* SLAVE (background application) does following:
+	  							 * --------------------------------------------------
+	  							 * - Idle 10 seconds 
+	  							 * - Release primary display light reservation
+	  							 * - End test case execution
+	  							 */
+	  							
+	  							if (mcResult == KErrNone)
+	  							{
+	  								/* Light reservation has returned back to this application */
+	  								
+	  								currStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	  								
+	  								if(currStatus == CHWRMLight::ELightOff)
+	  								{
+	  									/* Light status should now be OFF because it was the original setting before peer application reserved it */
+
+	  									/******************/
+	  									/* L I G H T  O N */
+	  									/******************/	  									
+	  									mcResult = TestLightOn(CHWRMLight::EPrimaryDisplay, 5000, 100, ETrue);
+	  									
+	  									if (mcResult == KErrNone)
+	  									{
+	  										/* Light on succeeded */
+	  										currStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	  										if (currStatus == CHWRMLight::ELightOn)
+	  										{
+	  											CTestScheduler::StartAndStopL(5000);						
+	  											
+	  											currStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);	
+	  											if(currStatus == CHWRMLight::ELightOff)
+	  											{
+	  												/*****************/
+	  												/* Release light */
+	  												/*****************/
+	  												iMyLight->ReleaseLight(CHWRMLight::EPrimaryDisplay);	
+	  												
+  													mcResult = KErrNone;	
+
+	  											}
+	  											else
+	  											{
+	  												FormatMessageL(EHwrmMessageOpDebug,_L(" wrong light status %d expected ELightOff"), currStatus);
+	  												//iObserver.LogMessage(_L(" Wrong light status [%d]. Expected [ELightOff]"), currStatus);
+	  												FormatMessageL(EHwrmMessageOpLog, _L("Wrong light status [%d]. Expected [ELightOff]"), currStatus);
+	  												mcResult = KErrGeneral;
+	  											}
+	  										}
+	  										else
+	  										{
+	  											// Wrong status
+	  											FormatMessageL(EHwrmMessageOpDebug,_L(" wrong light status %d expected ELightOn"), currStatus);
+	  											FormatMessageL(EHwrmMessageOpLog, _L("Wrong light status [%d]. Expected [ELightOn]"), currStatus);
+	  											mcResult = KErrGeneral;
+	  										}
+	  									}
+	  									else
+	  									{
+	  										FormatMessageL(EHwrmMessageOpDebug,_L(" error:%d"), mcResult);
+	  										FormatMessageL(EHwrmMessageOpLog, _L("TestLightOn returned error [%d]"), mcResult);
+	  										mcResult = KErrGeneral;
+	  									}		
+	  								}
+	  								else
+	  								{
+	  									FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong light status [%d]. Expected [ELightOff]"), currStatus);
+	  									FormatMessageL(EHwrmMessageOpLog, _L("Wrong light status [%d]. Expected [ELightOff]"), currStatus);
+	  									mcResult = KErrGeneral;
+	  								}
+	  								
+	  							}
+	  							else
+	  							{
+	  								// Error happened peer. End test, report result and clean situation
+	  								// Peer should clean itself and be ready for next test case
+	  								FormatMessageL(EHwrmMessageOpDebug,_L(" peer error:%d"), mcResult);
+	  								FormatMessageL(EHwrmMessageOpLog, _L("error from peer [%d]"), mcResult);
+	  							}
+	  							
+	  						}
+	  						else
+	  						{
+	  							FormatMessageL(EHwrmMessageOpDebug,_L(" wrong light status [%d]. Expected [ELightBlink]"), currStatus);
+	  							FormatMessageL(EHwrmMessageOpLog, _L("wrong light status [%d]. Expected [ELightBlink]"), currStatus);
+	  							mcResult = KErrGeneral;
+	  						}
+	  					}
+	  					else
+	  					{
+	  						FormatMessageL(EHwrmMessageOpDebug,_L(" TestLightOn returned wrong error:%d"), mcResult);
+	  						FormatMessageL(EHwrmMessageOpLog, _L("TestLightOn returned wrong error [%d]"), mcResult);
+	  						mcResult = KErrGeneral;
+	  					}
+	  				}
+	  				else
+	  				{
+	  					FormatMessageL(EHwrmMessageOpDebug,_L(" wrong light status [%d]. Expected [ELightBlink]"), currStatus);
+	  					FormatMessageL(EHwrmMessageOpLog, _L("wrong light status [%d]. Expected [ELightBlink]"), currStatus);
+	  					mcResult = KErrGeneral;
+	  				}
+	  			}
+	  			else
+	  			{
+	  				// Error happened peer. End test, report result and clean situation
+	  				// Peer should clean itself and be ready for next test case
+	  				FormatMessageL(EHwrmMessageOpDebug,_L(" peer returned error: [%d]"), mcResult);
+	  				FormatMessageL(EHwrmMessageOpLog, _L("peer returned error: [%d]"), mcResult);				
+	  			}
+	  		}
+	  		else
+	  		{
+	  			FormatMessageL(EHwrmMessageOpDebug,_L(" wrong light status [%d]. Expected [ELightOff]"), currStatus);
+	  			FormatMessageL(EHwrmMessageOpLog, _L("wrong light status [%d], Expected [ELightOff]"), currStatus);
+	  			mcResult = KErrGeneral;
+	  		}
+	  	}
+	  	else
+	  	{
+	  		FormatMessageL(EHwrmMessageOpDebug,_L(" TestLightOff returned error [%d]"), mcResult);
+	  		FormatMessageL(EHwrmMessageOpLog, _L("TestLightOff returned error [%d]"), mcResult);	
+	  		mcResult = KErrGeneral;
+	  	}
+	  }
+	  else
+	  {
+	  	FormatMessageL(EHwrmMessageOpDebug,_L(" ReserveLightL returned error [%d]"), mcResult);
+	  	FormatMessageL(EHwrmMessageOpLog, _L("ReserveLightL returned error [%d]"), mcResult);
+	  }
+	  
+	  // Q: Mitä tapahtuu jos light-instanssi tuhotaan vapauttamatta targettia?
+	}
+	
+    delete iMyLight;    	
+    return mcResult;
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MC_Display_on_and_keyboard_blink_M()
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::MC_Display_on_and_keyboard_blink_M()
+    {
+	TInt mcResult;
+	mcResult = KErrNone;
+	      
+	iObserver.InfoMessage(_L("MC_Display_on_and_keyboard_blink_M"));
+    FormatMessageL(EHwrmMessageOpDebug,_L("MC_Display_on_and_keyboard_blink_M()"));
+
+    CHWRMLight::TLightStatus keybStatus;
+    CHWRMLight::TLightStatus dispStatus;    
+    //CHWRMLight::TLightStatus origDispStatus;
+    
+    TRAP(mcResult, iMyLight = CHWRMLight::NewL(this));
+    
+    if(mcResult == KErrNone)
+    {
+        
+	    /*****************/
+	    /* Step executed */
+	    /*****************/
+	    
+	    TInt mcResult = iMcFramework->StartTestCaseInSlave(EMultiClientCase2);
+	    
+	    if (mcResult == KErrNone)
+	    {
+	    	/* Step executed succesfully by peer */
+	    	
+	    	/* Query keyboard status */
+	    	keybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+	    	dispStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	    	
+	    	if (keybStatus == CHWRMLight::ELightBlink)
+	    	{
+		    	/* OK Keyboard status is Blink (set in peer application) */
+		    	
+		    	/* Reserve Primary Display light */
+		    	TRAP(mcResult, iMyLight->ReserveLightL(CHWRMLight::EPrimaryDisplay, ETrue, ETrue));
+		    	
+		    	if ( mcResult == KErrNone)
+		    	{	
+			    	/*******************/
+			    	/* L I G H T   ON  */
+			    	/*******************/
+			    	mcResult = TestLightOn(CHWRMLight::EPrimaryDisplay, 5000, 1, ETrue);
+			    	
+			    	/* Check light status */
+			    	dispStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+			    	keybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+			    	
+			    	if (mcResult == KErrNone && dispStatus == CHWRMLight::ELightOn && keybStatus == CHWRMLight::ELightBlink)
+			    		{
+				    	/* Pause 5s */
+				    	CTestScheduler::StartAndStopL(5000);
+				    	
+				    	/* Release primary display light reservation */
+				    	iMyLight->ReleaseLight(CHWRMLight::EPrimaryDisplay);
+
+						/*****************/
+						/* Step executed */
+						/*****************/
+						iMcFramework->StepExecuted(KErrNone);    		
+			    		
+			    		mcResult = iMcFramework->WaitNextTestStep();
+			    			    		
+			    		if (mcResult != KErrNone)
+			    			{			    			
+			    			FormatMessageL(EHwrmMessageOpDebug,_L("peer returned error [%d]"), mcResult);
+			    			FormatMessageL(EHwrmMessageOpLog, _L("Slave returned error: [%d]"), mcResult);
+			    			}
+			    		//*************************
+			    		// else -> Case passed OK
+			    		//*************************		    			
+			    		}
+			    	else
+			    		{
+			    		/* Light status was wrong or setting of light failed */
+			    		FormatMessageL(EHwrmMessageOpDebug,_L(" display status:%d Keyboard status:%d, Error:%d"), dispStatus, keybStatus, mcResult);
+			    		FormatMessageL(EHwrmMessageOpLog, _L("display status:%d Keyboard status:%d, Error:%d"),dispStatus, keybStatus, mcResult);
+			    		mcResult = KErrGeneral;
+			    		}
+		    		}
+		    	else
+		    		{
+		    		FormatMessageL(EHwrmMessageOpDebug,_L(" reservation failed. Error:%d"), mcResult);
+		    		FormatMessageL(EHwrmMessageOpLog, _L("reservation failed. Error:%d"), mcResult);
+		    		}	
+	    	}
+	    	else
+	    	{
+	    		// Wrong keyboard status
+	    		FormatMessageL(EHwrmMessageOpDebug,_L(" wrong keyboard status:%d"),keybStatus);
+	    		FormatMessageL(EHwrmMessageOpLog, _L("wrong keyboard status:%d"),keybStatus);
+	    		mcResult = KErrGeneral;
+	    	}
+	    }
+    }
+    delete iMyLight;    	
+    return mcResult;
+        
+    }
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::
+// 
+// -----------------------------------------------------------------------------
+//
+
+TInt CHwrmTestCaseController::MC_Display_on_and_keyboard_reserved_M()
+    {
+  	TInt mcResult;
+	mcResult = KErrNone;  
+    iObserver.InfoMessage(_L("MC_Display_on_and_keyboard_reserved_M"));
+    FormatMessageL(EHwrmMessageOpDebug,_L("MC_Display_on_and_keyboard_reserved_M()"));
+    //CHWRMLight::TLightStatus currStatus;    
+    CHWRMLight::TLightStatus displayStatus;
+    CHWRMLight::TLightStatus keybStatus;    
+    CHWRMLight::TLightStatus originalKStatus;
+    CHWRMLight::TLightStatus originalDStatus;
+    
+    TRAP(mcResult, iMyLight = CHWRMLight::NewL(this));	
+	
+	if(mcResult == KErrNone)
+	{
+        
+	  //Reserve Primary display and keyboard
+ 	  TRAP(mcResult, iMyLight->ReserveLightL(CHWRMLight::EPrimaryDisplayAndKeyboard, ETrue, EFalse));
+	  
+	  if (mcResult == KErrNone)
+	  {
+		
+		CTestScheduler::StartAndStopL(1000);
+		
+    	// Valojen statusten kysely testin alussa:
+    	originalDStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+    	originalKStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);	
+	
+	  	mcResult = iMcFramework->StartTestCaseInSlave(EMultiClientCase3);
+	  	
+	  	if (mcResult == KErrNone)
+	  	{
+	  		// Tarkista että valojen statukset ei ole muuttuneet alkutilanteesta
+	      	displayStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	      	keybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);		
+	  		
+	  		if(displayStatus == originalDStatus && keybStatus == originalKStatus)
+	  		{
+	  				
+	  			mcResult = TestLightOn(CHWRMLight::EPrimaryDisplayAndKeyboard);
+	  			
+	  			displayStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	  			keybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);						
+	  			
+	  			if(mcResult == KErrNone &&  displayStatus == CHWRMLight::ELightOn && keybStatus == CHWRMLight::ELightOn)
+	  			{
+	  				CTestScheduler::StartAndStopL(5000);
+	  				
+	  				mcResult = TestLightOff(CHWRMLight::EPrimaryDisplay);
+	  				
+	  				displayStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	  				keybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);	
+	  				
+	  				if (mcResult == KErrNone && displayStatus == CHWRMLight::ELightOff && keybStatus == CHWRMLight::ELightOn)
+	  				{
+	  					/*****************************/
+	  					/* Test executed succesfully */
+	  					/*****************************/
+	  					mcResult = KErrNone;
+	  				}
+	  				else
+	  				{
+	  					// Wrong status or error
+	  					FormatMessageL(EHwrmMessageOpDebug,_L(" light off failed. Error:%d, Display status:[%d] Keyboard status:[%d]"),mcResult, displayStatus, keybStatus);
+	  					FormatMessageL(EHwrmMessageOpLog, _L("light off failed. Error:%d, Display status:[%d] Keyboard status:[%d]"), mcResult, displayStatus, keybStatus);
+	  					mcResult = KErrGeneral;
+	  				}			
+	  			}
+	  			else
+	  			{
+	  				FormatMessageL(EHwrmMessageOpDebug,_L(" light on failed. Error:%d, Display status:[%d] Keyboard status:[%d]"), mcResult, displayStatus, keybStatus);
+	  				FormatMessageL(EHwrmMessageOpLog, _L("light on failed. Error:%d, Display status:[%d] Keyboard status:[%d]"), mcResult, displayStatus, keybStatus);	
+	  				mcResult = KErrGeneral;
+	  			}	
+	  		}
+	  		else
+	  		{			
+	  			FormatMessageL(EHwrmMessageOpDebug,_L(" original light status did not remain. Display:%d,%d, Keyboard:%d,%d"),displayStatus,originalDStatus, keybStatus, originalKStatus);	
+	  			FormatMessageL(EHwrmMessageOpLog, _L("original light status did not remain. Display:%d,%d, Keyboard:%d,%d"),displayStatus,originalDStatus, keybStatus, originalKStatus);	
+	  			mcResult = KErrGeneral;
+	  		}			
+	  	}
+	  	else
+	  	{
+	  		// Testi feilasi tausta-aplikaatiossa
+	  		FormatMessageL(EHwrmMessageOpDebug,_L(" execution failed peer. Error:%d"), mcResult);
+	  		FormatMessageL(EHwrmMessageOpLog, _L("execution failed peer. Error:%d"), mcResult);
+	  		mcResult = KErrGeneral;
+	  	}
+	  	
+	  	iMyLight->ReleaseLight(CHWRMLight::EPrimaryDisplayAndKeyboard);
+	  }	
+	  else
+	  {
+	  	FormatMessageL(EHwrmMessageOpDebug,_L(" reservation failed. Error:%d"), mcResult);
+	  	FormatMessageL(EHwrmMessageOpLog, _L("reservation failed. Error:%d"), mcResult);
+	  	mcResult = KErrGeneral;
+	  }
+    
+	}
+    delete iMyLight;    	
+    return mcResult;
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MC_Display_and_keyboard_blink_M()
+// 
+// -----------------------------------------------------------------------------
+//
+
+TInt CHwrmTestCaseController::MC_Display_and_keyboard_blink_M()
+    {
+	TInt mcResult;
+	mcResult = KErrNone;
+	
+    iObserver.InfoMessage(_L("MC_Display_and_keyboard_blink_M"));
+    FormatMessageL(EHwrmMessageOpDebug,_L("MC_Display_and_keyboard_blink_M()"));
+    CHWRMLight::TLightStatus displayStatus;
+    CHWRMLight::TLightStatus keybStatus;    
+    //CHWRMLight::TLightStatus origDispStatus;
+    //CHWRMLight::TLightStatus origKeybStatus;    
+    
+    TRAP(mcResult, iMyLight = CHWRMLight::NewL(this));	
+	
+	if(mcResult == KErrNone)
+	{
+    
+	  //Reserve Primary display and keyboard
+ 	  TRAP(mcResult, iMyLight->ReserveLightL(CHWRMLight::EPrimaryDisplayAndKeyboard, ETrue, EFalse));
+    
+	  //origDispStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	  //origKeybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);			
+    
+	  if (mcResult == KErrNone)
+	  {
+	  	/*****************/
+	  	/* Step executed */
+	  	/*****************/
+	  	
+	  	mcResult = iMcFramework->StartTestCaseInSlave(EMultiClientCase4);
+	  	
+	  	if (mcResult == KErrNone)
+	  	{
+	  		/************************/
+	  		/* L I G H T  B L I N K */
+	  		/************************/
+	  		
+	  		mcResult = TestLightBlink(CHWRMLight::EPrimaryDisplayAndKeyboard, 5000, 1000, 1000, 66);
+	  		
+	  		displayStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	      	keybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);			
+	  		
+	  		if (mcResult == KErrNone && displayStatus == CHWRMLight::ELightBlink && keybStatus == CHWRMLight::ELightBlink)
+	  		{
+	  			
+	  			CTestScheduler::StartAndStopL(5000);
+	  			
+	  			mcResult = TestLightOn(CHWRMLight::EPrimaryDisplayAndKeyboard);
+	  			
+	  			displayStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	      		keybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);					
+    
+	  			if( displayStatus == CHWRMLight::ELightOn && keybStatus == CHWRMLight::ELightOn )
+	  			{
+	  				/*****************/
+	  				/* Step executed */
+	  				/*****************/
+	  				iMcFramework->StepExecuted(KErrNone);    		
+	  			    		
+	  			    mcResult = iMcFramework->WaitNextTestStep();
+	  			    
+	  			    if (mcResult != KErrNone)
+	  			    {
+	  			    	// Tapaus feilasi toisessa aplikaatiossa	
+	  			    	FormatMessageL(EHwrmMessageOpDebug,_L(" test execution failed in peer application. Error:%d"), mcResult);
+	  			    	FormatMessageL(EHwrmMessageOpLog, _L("test execution failed in peer application. Error:%d"), mcResult);
+	  			    }					
+	  			}
+	  			else
+	  			{
+	  				FormatMessageL(EHwrmMessageOpDebug,_L(" wrong light status. Display:%d Keyboard:%d"), displayStatus, keybStatus);
+	  				FormatMessageL(EHwrmMessageOpLog, _L("wrong light status. Display:%d Keyboard:%d"), displayStatus, keybStatus);
+	  				mcResult = KErrGeneral;
+	  			}			
+	  		}
+	  		else
+	  		{
+	  			FormatMessageL(EHwrmMessageOpDebug,_L(" light blink failed Display:%d Keyboard:%d Error:%d"), displayStatus, keybStatus, mcResult);
+	  			FormatMessageL(EHwrmMessageOpLog, _L("light blink failed Display:%d Keyboard:%d Error:%d"), displayStatus, keybStatus, mcResult);
+	  			mcResult = KErrGeneral;
+	  		}			
+	  	}
+	  	else 
+	  	{
+	  		FormatMessageL(EHwrmMessageOpDebug,_L(" test failed in peer application. Error:%d"), mcResult);
+	  		FormatMessageL(EHwrmMessageOpLog, _L("test failed in peer application. Error:%d"), mcResult);
+	  	}
+	  	
+	  	iMyLight->ReleaseLight(CHWRMLight::EPrimaryDisplayAndKeyboard);
+	  		
+	  }
+	}
+    delete iMyLight;    	
+    return mcResult;
+    }
+        
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::Verify_MCFramework_M
+// Master side test case to verify McFramework functionality 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::Verify_MCFramework_M()
+{
+	
+	TInt mcResult;
+	mcResult = KErrNone;
+	iObserver.InfoMessage(_L("Verify_MCFramework_M"));
+	FormatMessageL(EHwrmMessageOpDebug,_L("Verify_MCFramework_M() starting"));
+	iObserver.InfoMessage(_L("Verify_MCFramework_M"));
+	
+	CTestScheduler::StartAndStopL(1000);
+	
+	mcResult = iMcFramework->StartTestCaseInSlave(EMultiClientCase6); 
+	/* <- Käynnistää testin uosritukset taustalla ja jää odottamaan vastausta (stepin tulosta) */
+	
+	CTestScheduler::StartAndStopL(1000); // ootellaan sekunti
+	
+	iMcFramework->StepExecuted(KErrNone);  // käynnistää suorituksen taustalla
+	mcResult = iMcFramework->WaitNextTestStep(); // menee odottamaan stepin tulosta
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L("Verify_MCFramework_M() done"));
+	
+	return mcResult;
+
+}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MC_Vibra_Basic_Usage_M
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::MC_Vibra_Basic_Usage_M()
+{
+	TInt mcResult;
+	mcResult = KErrNone;
+	
+    iObserver.InfoMessage(_L("MC_Vibra_Basic_Usage_M"));
+    FormatMessageL(EHwrmMessageOpDebug,_L("MC_Vibra_Basic_Usage_M()"));
+    // CRepository* iSession;
+    CHWRMVibra::TVibraStatus vibraStatus;
+    
+    // iSession = CRepository::NewL(KCRUidVibraCtrl);
+    
+    TRAP(mcResult, iVibra = CHWRMVibra::NewL());
+    if(mcResult == KErrNone)
+    {
+    	
+	    iSession->Set(KVibraCtrlProfileVibraEnabled, 1);
+	    
+	    /* Reserve Vibra */
+	    TRAP(mcResult, iVibra->ReserveVibraL(ETrue, EFalse));
+	    
+	    if (mcResult == KErrNone)
+	    {
+	    	/*****************/
+	    	/* Step executed */
+	    	/*****************/
+
+	    	mcResult = iMcFramework->StartTestCaseInSlave(EMultiClientCase5);
+	    	
+	    	if (mcResult == KErrNone)
+	    	{
+	    		/******************/
+	    		/* V I B R A  O N */
+	    		/******************/
+	    		
+	    		mcResult = RunTestVibra(5000); // Run vibra 5s
+	    		if (mcResult == KErrNone)
+	    		{
+	    			// Vibra start OK
+	    			CTestScheduler::StartAndStopL(100);
+	    			// Check status
+	    			vibraStatus = iVibra->VibraStatus();
+	    			/* Should be stopped because vibra is reserved to another application */
+	    			if(vibraStatus == CHWRMVibra::EVibraStatusStopped) 
+	    			{
+	    				CTestScheduler::StartAndStopL(5000);
+	    				
+	    				// Check status
+	    				vibraStatus = iVibra->VibraStatus();
+						if(vibraStatus == CHWRMVibra::EVibraStatusStopped)
+	    				{
+	    					/*****************/
+	    					/* Step executed */
+	    					/*****************/
+	    					iMcFramework->StepExecuted(KErrNone);
+		    				mcResult = iMcFramework->WaitNextTestStep(); 
+							
+							if( mcResult == KErrNone)
+							{
+								
+								CTestScheduler::StartAndStopL(500);
+								
+								vibraStatus = iVibra->VibraStatus();
+								if(vibraStatus == CHWRMVibra::EVibraStatusOn)
+			    				{
+			    					/*****************/
+			    					/* Step executed */
+			    					/*****************/
+			    					iMcFramework->StepExecuted(KErrNone);
+				    				mcResult = iMcFramework->WaitNextTestStep(); 		    					
+									
+									if( mcResult == KErrNone)
+									{
+										// Test succeeded peer
+										// Vibra is no longer suspended
+
+							    		/******************/
+							    		/* V I B R A  O N */
+							    		/******************/
+							    		mcResult = RunTestVibra(5000); // Run vibra 5s
+							    		if (mcResult == KErrNone)
+							    		{
+							    			CTestScheduler::StartAndStopL(100);
+							    			
+							    			vibraStatus = iVibra->VibraStatus();
+							    			
+							    			if(vibraStatus != CHWRMVibra::EVibraStatusOn)
+							    			{
+							    				// wrong status
+							    				FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong vibra status (%d), expected ON"),vibraStatus);
+							    				mcResult = KErrGeneral;
+							    			}
+							    		}
+										else
+										{
+											// Vibra start failed 
+											FormatMessageL(EHwrmMessageOpDebug,_L(" Vibra start failed. Error(%d)"),mcResult);
+										}
+									}
+									else
+									{
+										// Test failed peer
+										FormatMessageL(EHwrmMessageOpDebug,_L(" Test failed peer. Reason(%d)"),mcResult);	
+									}
+			    					
+			    				}
+			    				else
+			    				{
+			    					// wrong status
+			    					FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong vibra status (%d), expected ON "), vibraStatus);
+			    					mcResult = KErrGeneral;
+			    				}
+							}
+							else
+							{
+								// step failed peer
+								FormatMessageL(EHwrmMessageOpDebug,_L(" Test failed @ peer. Reason(%d)"),mcResult);
+							}
+		    				
+	    				}
+	    				else
+	    				{
+	    					// wrong vibra status
+	    					FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong vibra status (%d), expected STOPPED"),vibraStatus);
+	    					mcResult = KErrGeneral;
+	    				}	    			
+	    			}
+	    			else
+	    			{
+	    				// wrong status
+	    				FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong vibra status (%d), expected ON"),vibraStatus);
+	    				mcResult = KErrGeneral;
+	    			}			
+	    		}
+	    		else
+	    		{
+	    			// Start vibra failed
+	    			FormatMessageL(EHwrmMessageOpDebug,_L(" Vibra start failed. Reason(%d)"),mcResult);
+	    		}
+	    	}
+	    	else
+	    	{
+	    		FormatMessageL(EHwrmMessageOpDebug,_L(" Test failed @ peer. Reason(%d)"),mcResult);   	
+	    	}
+	    	
+	    	iVibra->ReleaseVibra();
+	    	
+	    }
+	    else
+	    {
+	    	// Varaus epäonnistui
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" Reservation failed"), mcResult);
+	    }
+
+    }
+	    
+    delete iVibra; iVibra = NULL;
+    return mcResult;
+    
+}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MC_Combined_light_and_vibra_usage_M
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::MC_Combined_light_and_vibra_usage_M()
+{
+	TInt mcResult;
+	mcResult = KErrNone;	
+	iObserver.InfoMessage(_L("MC_Combined_light_and_vibra_usage_M"));   
+    // CRepository* iSession;
+    CHWRMVibra::TVibraStatus vibraStatus;
+    CHWRMLight::TLightStatus displayStatus;
+    CHWRMLight::TLightStatus keybStatus;    
+    
+    // iSession = CRepository::NewL(KCRUidVibraCtrl);
+    iSession->Set(KVibraCtrlProfileVibraEnabled, 1);
+    
+    TRAP(mcResult, iVibra = CHWRMVibra::NewL());    
+    {
+    	//
+    	// OG 13/03/07
+    	if (mcResult != KErrNone)
+    		{
+    		return mcResult;
+    		}
+    	//
+    		
+	    TRAP(mcResult, iMyLight = CHWRMLight::NewL(this));
+		if(mcResult == KErrNone)
+		{
+	    
+			//Reserve Primary display and keyboard
+		 	TRAP(mcResult, iMyLight->ReserveLightL(CHWRMLight::EPrimaryDisplayAndKeyboard, ETrue, EFalse));
+			//origDispStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+			//origKeybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);	    
+		    
+		    /* Reserve Vibra */
+		    TRAP(mcResult, iVibra->ReserveVibraL(ETrue, EFalse));    
+		    if (mcResult == KErrNone)
+		    {
+		    	TRAP(mcResult, iMyLight->ReserveLightL(CHWRMLight::EPrimaryDisplayAndKeyboard, ETrue, ETrue));	
+		    	
+		    	if (mcResult == KErrNone)
+		    	{		
+		    		/******************/
+		    		/* V I B R A  O N */
+		    		/******************/
+		    		
+		    		mcResult = RunTestVibra(0,75);
+		    		
+		    		if (mcResult == KErrNone)
+		    		{	
+		    			vibraStatus = iVibra->VibraStatus();
+		    			
+		    			if (vibraStatus == CHWRMVibra::EVibraStatusOn )
+		    			{			
+			    			/************************/
+			    			/* L I G H T  B L I N K */
+			    			/************************/
+			    			mcResult = TestLightBlink(CHWRMLight::EPrimaryDisplayAndKeyboard);
+			    			
+			    			if(mcResult == KErrNone)
+			    			{
+			    				
+			    				displayStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+			      				keybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);		
+			    				
+			    				if( displayStatus == CHWRMLight::ELightBlink && keybStatus == CHWRMLight::ELightBlink)
+			    				{
+			    				
+				    				CTestScheduler::StartAndStopL(2000);		
+				    				/*****************/
+				    				/* Step executed */
+				    				/*****************/
+				    				mcResult = iMcFramework->StartTestCaseInSlave(EMultiClientCase7);
+				    				
+				    				if (mcResult == KErrNone)
+				    				{
+				    					
+				    					if(vibraStatus == CHWRMVibra::EVibraStatusOn)
+				    					{
+					    					/**********************/
+					    					/* S T O P  V I B R A */
+					    					/**********************/
+					    					mcResult = StopTestVibra();
+					    					
+					    					vibraStatus = iVibra->VibraStatus();				
+						    				displayStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+			      							keybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);	
+
+					    					if(vibraStatus == CHWRMVibra::EVibraStatusStopped &&
+					    					   displayStatus == CHWRMLight::ELightBlink &&
+					    					   keybStatus == CHWRMLight::ELightBlink)
+					    					{
+						    					if(mcResult == KErrNone)
+						    					{
+						    						/********************/
+						    						/* L I G H T  O F F */
+						    						/********************/	
+						    						mcResult = TestLightOff(CHWRMLight::EPrimaryDisplayAndKeyboard);
+						    										    						
+						    						if(mcResult == KErrNone)
+						    						{
+						    							displayStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+			      										keybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);						    						
+						    						
+						    							if(displayStatus==CHWRMLight::ELightOff && keybStatus==CHWRMLight::ELightOff)
+						    							{
+						    								
+						    							}
+						    							else
+						    							{
+						    								// wrong light status
+						    								FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong light status(%d)(%d) Expected(OFF)(OFF)"),displayStatus, keybStatus);
+						    								mcResult = KErrGeneral;
+						    							}
+						    						}
+						    						else
+						    						{
+						    							//light off epäonnistui
+						    							FormatMessageL(EHwrmMessageOpDebug,_L(" Set light off failed. Error(%d)"),mcResult);
+						    						}		
+						    						
+						    					}
+						    					else
+						    					{
+						    						//vibra stop epäonnistui
+						    						FormatMessageL(EHwrmMessageOpDebug,_L(" Vibra stop failed. Error(%d)"),mcResult);
+						    					}
+					    					}
+					    					else
+					    					{
+					    						// wrong vibra or light status
+					    						FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong status(%d)(%d)(%d) Expected(Stopped)(Blink)(Blink)"),vibraStatus, displayStatus, keybStatus);
+					    						mcResult = KErrGeneral;
+					    					}
+				    					}
+				    					else
+				    					{
+				    						// wrong vibra status
+				    						FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong vibra status(%d) Expected(ON)"),vibraStatus); 	
+				    						mcResult = KErrGeneral;
+				    					}
+				    				}
+				    				else
+				    				{
+				    					//suoritus epäonnistui
+				    					FormatMessageL(EHwrmMessageOpDebug,_L(" Test case failed peer. Error(%d)"),mcResult);
+				    				} 								
+			    				}
+			    				else
+			    				{
+			    					// wrong light status
+			    					FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong light status(%d)(%d) Expected(BLINK)(BLINK)"),displayStatus, keybStatus);
+			    					mcResult = KErrGeneral;
+			    				}
+			    			}	
+			    			else
+			    			{
+			    				//blink epäonnistui
+			    				FormatMessageL(EHwrmMessageOpDebug,_L(" TestLightBlink failed. Error(%d)"),mcResult);
+			    			}
+		    			}
+		    			else
+		    			{
+		    				// Väärä vibra status
+		    				FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong vibra status(%d) Expected ON"),vibraStatus);
+		    				mcResult = KErrGeneral;
+		    			}
+		    		}
+		    		else
+		    		{
+		    			//vibra start epäonnistui
+		    			FormatMessageL(EHwrmMessageOpDebug,_L(" Vibra start failed. Error(%d)"),mcResult);
+		    		}
+		    		
+		    		iMyLight->ReleaseLight(CHWRMLight::EPrimaryDisplayAndKeyboard);
+		    	}
+		    	else
+		    	{
+		    		//valon varaus epäonnistui
+		    		FormatMessageL(EHwrmMessageOpDebug,_L(" Light reservation failed. Error(%d)"),mcResult);
+		    	}
+		    	
+		    	iVibra->ReleaseVibra();
+		    }
+		    else
+		    {
+		    	//vibran varaus epäonnistui
+		    	FormatMessageL(EHwrmMessageOpDebug,_L(" Vibra reservation failed. Error(%d)"),mcResult);
+		    }
+		}
+		
+    }
+    
+    delete iVibra; iVibra = NULL;
+    delete iMyLight; iMyLight = NULL;
+    return mcResult;
+
+}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MC_Combined_light_and_vibra_usage_2_M
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::MC_Combined_light_and_vibra_usage_2_M()
+{
+	TInt mcResult;
+	mcResult = KErrNone;	
+	iObserver.InfoMessage(_L("MC_Combined_light_and_vibra_usage_2_M"));  
+    // CRepository* iSession;
+    CHWRMVibra::TVibraStatus vibraStatus;
+    CHWRMLight::TLightStatus displayStatus;
+    CHWRMLight::TLightStatus keybStatus;    
+    
+    // iSession = CRepository::NewL(KCRUidVibraCtrl);
+    iSession->Set(KVibraCtrlProfileVibraEnabled, 1);
+    
+    TRAP(mcResult, iVibra = CHWRMVibra::NewL());
+    //
+    // OG 13/03/07
+    if (mcResult != KErrNone)
+    	{
+    	return mcResult;
+    	}
+    //
+    
+ 
+    
+    TRAP(mcResult, iMyLight = CHWRMLight::NewL(this));
+	if (mcResult == KErrNone)
+	{
+		
+		/******************/
+		/* V I B R A  O N */
+		/******************/
+		mcResult = RunTestVibra(5000,-75);	    
+	    
+	    if (mcResult == KErrNone)
+	    {
+	    	/************************/
+	    	/* L I G H T  B L I N K */
+	    	/************************/
+	    	mcResult = TestLightBlink(CHWRMLight::EPrimaryDisplayAndKeyboard);
+	    	
+	    	if (mcResult == KErrNone)
+	    	{
+	    		vibraStatus = iVibra->VibraStatus();
+	    		displayStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+				keybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+	    		
+	    		if (displayStatus == CHWRMLight::ELightBlink && keybStatus == CHWRMLight::ELightBlink && vibraStatus == CHWRMVibra::EVibraStatusOn)
+	    		{
+	    			/*****************/
+	    			/* Step executed */
+	    			/*****************/
+		    		mcResult = iMcFramework->StartTestCaseInSlave(EMultiClientCase8);
+		    		
+		    		if (mcResult == KErrNone)
+		    		{
+			    		// Check light		
+		    			displayStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+						keybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+						
+		    			if (displayStatus != CHWRMLight::ELightOff || keybStatus != CHWRMLight::ELightOff )
+		    			{
+		    				// Wrong status
+		    				FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong status (%d)(%d) Expected(OFF)(OFF)"),displayStatus, keybStatus);
+		    				mcResult = KErrGeneral;
+		    			}	
+		    		}
+		    		else
+		    		{
+		    			// failed peer
+		    			FormatMessageL(EHwrmMessageOpDebug,_L(" Failed in peer application. Error(%d)"),mcResult);
+		    		}	    		
+	    		}
+	    		else
+	    		{
+	    			// wrong status
+				    FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong status(%d)(%d)(%d) Expected(ON)(BLINK)(BLINK)"),vibraStatus, displayStatus, keybStatus);
+				    mcResult = KErrGeneral;    			
+	    		}
+	    	}
+	    	else
+	    	{
+	    		// light blink failed
+	    		FormatMessageL(EHwrmMessageOpDebug,_L(" Blink light failed. Error(%d)"),mcResult);
+	    	}    		
+	    }
+	    else
+	    {
+	    	// Start vibra failed
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" Start vibra failed. Error(%d)"),mcResult);
+	    }
+	}
+    
+    
+    delete iVibra; iVibra = NULL;
+    delete iMyLight; iMyLight = NULL;
+    return mcResult;	
+	
+}
+
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MC_FmTx_Basic_Usage_M
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::MC_FmTx_Basic_Usage_M()
+	{
+	TInt mcResult;
+	mcResult = KErrNone;
+	
+    iObserver.InfoMessage(_L("MC_FmTx_Basic_Usage_M"));
+    FormatMessageL(EHwrmMessageOpDebug,_L("MC_FmTx_Basic_Usage_M()"));
+    TFmTxState fmTxState;
+    TInt fmTxFrequency;
+    
+    TRAP(mcResult, iFmTx = CHWRMFmTx::NewL(this));
+    if(mcResult == KErrNone)
+    	{    		    
+    	//Reserve FmTx, Don't force CoeEnv "on" 	
+	    TRAP(mcResult, iFmTx->ReserveL(EFalse)); 
+	    
+	    if (mcResult == KErrNone)
+	    	{
+	    	mcResult = StopTestFmTx();
+		  	/********************/
+		  	/* F M T X    O F F */
+		  	/********************/
+	    	
+		    if (mcResult == KErrNone)
+			    {		    
+			    /* Disabling FmTx succeeded */
+			    fmTxState = iFmTx->Status();
+			    
+			    if( fmTxState == EFmTxStateOff)
+			    	{
+			    	/*****************/
+			    	/* Step executed */
+			    	/*****************/
+		
+			    	mcResult = iMcFramework->StartTestCaseInSlave(EMultiClientCase9);
+			    	
+		  			/* Peer (background application) does following:	
+		  			 * --------------------------------------------------
+		  			 * - Reserve FmTx with higher priority 
+		  			 * - Enable FmTx with Frequency 89900 KHz
+		  			 */
+			    	
+			    	if (mcResult == KErrNone)
+			    		{
+			    		fmTxState = iFmTx->Status();
+			    		fmTxFrequency = iFmTx->Frequency();
+			    		
+			    		if( (fmTxState == EFmTxStateInactive 
+			    		     || fmTxState == EFmTxStateActive)
+			    		    && fmTxFrequency == 89900)
+			    			{			    		
+				    		/******************/
+				    		/* F M T X   O N  */
+				    		/******************/
+			    			
+				    		// try to set in another frequency (88100 KHZ)
+				    		mcResult = RunTestFmTx(88100); 
+				    		
+				    		if (mcResult == KErrInUse ) /* Reserved for Slave!!! */
+				    			{
+				    			// check FmTx status
+				    			fmTxState = iFmTx->Status();
+				    			
+				    			fmTxFrequency = iFmTx->Frequency();
+				    			
+				    			/* Should be Active or Inactive with frequency 89900 because fmtx is reserved to another application */
+				    			if (fmTxState == EFmTxStateInactive 
+				    				|| fmTxState == EFmTxStateActive)				    																	
+				    				{
+				    				if (fmTxFrequency == 89900)
+					    				{					    				
+						    			// Attemt to disable the FmTx
+						    			mcResult = StopTestFmTx();					    				
+						    				
+						    			if ( mcResult == KErrInUse ) /* Reserved for Slave!!! */
+						    				{
+								    		// check FmTx status
+									    	fmTxState = iFmTx->Status();
+									    		
+									    	fmTxFrequency = iFmTx->Frequency();
+						    			
+									    	if( (fmTxState == EFmTxStateInactive 
+									    		   || fmTxState == EFmTxStateActive)
+									   			 && fmTxFrequency == 89900)
+						    					{	
+					  							/*****************/
+					  							/* Step executed */
+					  							/*****************/
+		
+						    					iMcFramework->StepExecuted(KErrNone);
+							    				mcResult = iMcFramework->WaitNextTestStep(); 
+							    					
+					  							/* SLAVE (background application) does following:
+					  							 * --------------------------------------------------
+					  							 * - Release primary display light reservation
+					  							 * - End test case execution
+					  							 */							    				
+												
+												if( mcResult == KErrNone)
+													{
+													/* FmTx reservation has returned back to this application */
+													
+													fmTxState = iFmTx->Status();
+													fmTxFrequency = iFmTx->Frequency();
+													
+													if( ( fmTxState == EFmTxStateInactive 
+														  || fmTxState == EFmTxStateActive)
+														&& fmTxFrequency == 89900)
+														{
+
+														mcResult = RunTestFmTx(88100);
+														
+														/***********************/
+														/* F M T X (88100 KHz) */
+														/***********************/				
+														
+														if( mcResult == KErrNone)
+															{
+															mcResult = StopTestFmTx();
+															
+															/********************/
+															/* F M T X    O F F */
+															/********************/															    	
+															
+															if( mcResult == KErrNone)
+																{					
+																fmTxState = iFmTx->Status();
+																fmTxFrequency = iFmTx->Frequency();
+																
+																if( fmTxState != EFmTxStateOff 
+																	|| fmTxFrequency != 88100)
+													    			{													    			
+													    			// wrong status
+													    			FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong FmTx status (%d), expected EFmTxStateInactive OR EFmTxStateActive"), fmTxState);
+													    			mcResult = KErrGeneral;													    			
+													    			}
+																}
+															else
+																{
+																// FmTx disable failed
+																FormatMessageL(EHwrmMessageOpDebug,_L(" FmTx disable failed. Reason(%d)"),mcResult);																
+																}											
+															}														
+														else
+															{
+															// Test failed peer
+															FormatMessageL(EHwrmMessageOpDebug,_L(" FmTx enable(88100 KHz) failed. Reason(%d)"),mcResult);	
+															}								    					
+								    					}
+								    				else
+								    					{
+								    					// wrong status
+								    					FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong FmTx status (%d) Or frequency(%d), expected EFmTxStateInactive OR EFmTxStateActive and 89900"),fmTxState, fmTxFrequency);
+								    					mcResult = KErrGeneral;
+								    					}
+													}
+												else
+													{
+													// step failed peer
+													FormatMessageL(EHwrmMessageOpDebug,_L(" Test failed @ peer. Reason(%d)"),mcResult);
+													}							    					  			
+							    				}
+						    				else
+						    					{
+						    					// wrong status
+						    					FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong FmTx status (%d) Or frequency(%d), expected EFmTxStateInactive OR EFmTxStateActive and 89900"),fmTxState, fmTxFrequency);
+						    					mcResult = KErrGeneral;
+						    					}
+						    				}
+						    			else
+						    				{
+						    				// wrong status
+						    				FormatMessageL(EHwrmMessageOpDebug,_L(" FmTx disable did not leave with KErrInUse. Reason(%d)"),mcResult);
+						    				mcResult = KErrGeneral;
+						    				}
+					    				}			
+				    			    else
+				    			    	{
+				    			    	FormatMessageL(EHwrmMessageOpDebug,_L(" FmTx disable failed. Reason(%d)"),mcResult);
+				    			    	}
+				    				}
+				    			else
+				    				{
+				    				// wrong status
+				    				FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong FmTx status (%d), expected ON"),fmTxState);
+				    				mcResult = KErrGeneral;
+				    				}			
+				    			}
+				    		else
+				    			{
+				    			// Start FmTx failed
+				    			FormatMessageL(EHwrmMessageOpDebug,_L(" FmTx enable did not leave with KErrInUse. Reason(%d)"),mcResult);
+				    			}
+			    			}
+			    		else
+			    			{
+			    			// wrong status ot frequency
+			    			FormatMessageL(EHwrmMessageOpDebug,_L(" Wrong FmTx status (%d) OR frequency (%d), expected ON and 89900"),fmTxState, fmTxFrequency);
+			    			mcResult = KErrGeneral;
+			    			}		
+			    		}			    		
+			    	else
+			    		{
+			    		FormatMessageL(EHwrmMessageOpDebug,_L(" Test failed @ peer. Reason(%d)"),mcResult);   	
+			    		}
+			    	}
+			    else
+			    	{
+			    	FormatMessageL(EHwrmMessageOpDebug,_L(" FmTx disable failed. Reason(%d)"),mcResult);
+			    	}
+			    }
+		    else
+		   		{		    			    	
+		   		FormatMessageL(EHwrmMessageOpDebug,_L(" FmTx enable failed. Reason(%d)"),mcResult);   	
+		   		}
+			    
+	    	iFmTx->Release();
+	    	
+	    	}
+	    else
+	    	{
+	    	// Varaus epäonnistui
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" Reservation failed"), mcResult);
+	    	}
+
+    	}
+	    
+    delete iFmTx; 
+    iFmTx = NULL;
+    return mcResult;
+    
+	}
+
+/*******************************************************************************/
+/* S E C U R I T Y 	/ S P E C I A L		C A S E S                              */
+//
+// These cases might require some special arrangements, manual testing etc...
+//
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MaliciousVibra
+//
+// Run  vibra 5 seconds in 6 seconds periods VERY LONG time
+// WARNING! This is MALICIOS vibra usage. It might not be good for phones
+// health to run vibra this long.
+//
+// Powerstate notifications are printed to trace. Also dislay light blinks every
+// time when notifications is received
+//  
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::MaliciousVibra()
+{
+	TInt mcResult;
+	mcResult = KErrNone;
+	
+	iObserver.InfoMessage(_L("MaliciousVibra"));    
+    // CRepository* iSession;
+    TInt i;
+    CTestCasePropertyWatch* iBatteryLevelWatch;
+    CTestCasePropertyWatch* iBatteryStatusWatch;
+    CTestCasePropertyWatch* iChargingStatusWatch;    
+    
+    iBatteryLevelWatch = CTestCasePropertyWatch::NewL(EPSBatteryLevel);
+    CleanupStack::PushL( iBatteryLevelWatch );
+    iBatteryStatusWatch = CTestCasePropertyWatch::NewL(EPSBatteryStatus);
+    CleanupStack::PushL( iBatteryStatusWatch );
+    iChargingStatusWatch = CTestCasePropertyWatch::NewL(EPSChargingStatus);
+    CleanupStack::PushL( iChargingStatusWatch );
+    
+    // iSession = CRepository::NewL(KCRUidVibraCtrl);
+    iSession->Set(KVibraCtrlProfileVibraEnabled, 1);
+    
+    TRAP(mcResult, iVibra = CHWRMVibra::NewL());    
+    if(mcResult == KErrNone)
+    {
+    
+	    TRAP(mcResult, iMyLight = CHWRMLight::NewL(this));
+		if (mcResult == KErrNone)
+		{
+			for(i=0;i<300;i++)
+			{	
+				TRAP(mcResult, iVibra->StartVibraL(5000, 99));
+                
+                if (mcResult == KErrLocked)
+                {
+                //Wait for vibra to cool off.
+                FormatMessageL(EHwrmMessageOpDebug,_L(" Vibra Locked. Wait for more time "));
+                CTestScheduler::StartAndStopL(KHwrmtestsVibraMoreDelay);
+                TRAP(mcResult, iVibra->StartVibraL(5000, 99));
+                }
+
+			    if (mcResult == KErrNone)
+			    {
+	   				iObserver.InfoMessage(_L("*  "));
+	   				CTestScheduler::StartAndStopL(2000);	    		
+	    			iObserver.InfoMessage(_L(" * "));
+	    			CTestScheduler::StartAndStopL(2000);
+	    			iObserver.InfoMessage(_L("  *"));
+	    			CTestScheduler::StartAndStopL(2000);	
+			    }
+                else
+			    {
+			    	// Start vibra failed
+			    	FormatMessageL(EHwrmMessageOpDebug,_L(" Start vibra failed. Error(%d) Loop(%d)"),mcResult, i);
+			    	break;
+			    }
+			    
+			    if(iBatteryLevelWatch->iStatusReceived)
+			    {
+			    	FormatMessageL(EHwrmMessageOpDebug,_L(" BatteryLevel changed ->%d"),iBatteryLevelWatch->iKeyResult);
+			    	iBatteryLevelWatch->Start();		
+			    	mcResult = TestLightBlink(CHWRMLight::EPrimaryDisplayAndKeyboard);
+			    }
+
+			    if(iBatteryStatusWatch->iStatusReceived)
+			    {
+			    	FormatMessageL(EHwrmMessageOpDebug,_L(" BatteryStatus changed ->%d"),iBatteryStatusWatch->iKeyResult);
+			    	iBatteryStatusWatch->Start();
+			    	mcResult = TestLightBlink(CHWRMLight::EPrimaryDisplayAndKeyboard);
+			    }
+
+			    if(iChargingStatusWatch->iStatusReceived)
+			    {
+			    	FormatMessageL(EHwrmMessageOpDebug,_L(" ChargingStatus changed ->%d"),iChargingStatusWatch->iKeyResult);
+			    	iChargingStatusWatch->Start();
+			    	mcResult = TestLightBlink(CHWRMLight::EPrimaryDisplayAndKeyboard);
+			    }			    			    
+			}
+		}		
+    }
+    else
+    {
+    	FormatMessageL(EHwrmMessageOpDebug,_L(" CHWRMVibra::NewL() Returned:%d"),mcResult);	
+    }
+	CleanupStack::PopAndDestroy(3);
+    delete iVibra; iVibra = NULL;
+    return mcResult;	
+	
+}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::ChargingNotify
+//
+// Test case will wait 5 minutes for chargingStatus notification(s)
+// Test is passed if at least one notification is received
+// Notification should be received when charger is connected to phone
+// Number of notifications is stored in counter that is printed to trace
+//  
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::ChargingNotify()
+{
+	TInt mcResult;
+	mcResult = KErrNone;
+	
+    iObserver.InfoMessage(_L("ChargingNotify"));   
+    TInt i,j = 0;
+    CTestCasePropertyWatch* iChargingStatusWatch;    
+    
+    iChargingStatusWatch = CTestCasePropertyWatch::NewL(EPSChargingStatus);
+    CleanupStack::PushL( iChargingStatusWatch );
+    
+	for(i=0;i<100;i++)
+	{	
+	   	iObserver.InfoMessage(_L("*  "));
+	   	CTestScheduler::StartAndStopL(500);	    		
+	    iObserver.InfoMessage(_L(" * "));
+	    CTestScheduler::StartAndStopL(500);
+	    iObserver.InfoMessage(_L("  *"));
+	    CTestScheduler::StartAndStopL(500);
+	    
+	    if(iChargingStatusWatch->iStatusReceived)
+	    {
+	    	j++;
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" ChargingStatus changed ->%d"),iChargingStatusWatch->iKeyResult);
+	    	iChargingStatusWatch->Start();
+	    	mcResult = KErrNone;
+	    	break;
+	    }			    			    
+	}
+    
+    FormatMessageL(EHwrmMessageOpDebug,_L(" ChargingStatus changed %d times"),j);
+    
+    delete iVibra;
+    iVibra = NULL;
+    CleanupStack::PopAndDestroy( iChargingStatusWatch );
+    
+    return mcResult;	
+	
+}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::RunRepeatedlyInvalidValues
+// 
+// Tests unsupported values in quite fast loop. Returned test result is always PASS,
+// Test purpose is to crash client/server/phone.
+// 
+// -----------------------------------------------------------------------------
+
+TInt CHwrmTestCaseController::RunRepeatedlyInvalidValues()
+{
+
+	TInt mcResult;
+	mcResult = KErrNone;
+	
+    iObserver.InfoMessage(_L("RunRepeatedlyInvalidValues"));   
+    // CRepository* iSession;
+    TInt i,iRandIntensity, iTargets;
+    TInt64 iSeed;
+    
+    // iSession = CRepository::NewL(KCRUidVibraCtrl);
+    iSession->Set(KVibraCtrlProfileVibraEnabled, 1);
+    iSeed = 100;
+    
+    TRAP(mcResult, iVibra = CHWRMVibra::NewL());    
+    if(mcResult == KErrNone)
+    {
+    
+	    TRAP(mcResult, iMyLight = CHWRMLight::NewL(this));
+		if (mcResult == KErrNone)
+		{
+			
+			for(i=0;i<300;i++)
+			{	
+				TRAP(mcResult, iVibra->StartVibraL(5000, KMaxTInt));
+				
+				iTargets = iMyLight->SupportedTargets();
+								
+		    	mcResult = TestLightBlink(iTargets, KMaxTInt);
+		    	
+				mcResult = TestLightOn(10, KMaxTInt, KMaxTInt, ETrue);	    	
+		    	
+		    	mcResult = TestLightBlink(9, KMaxTInt, KMaxTInt, KMaxTInt, KMaxTInt);
+		    	
+		    	mcResult = TestLightOn(0, -400, KMaxTInt, ETrue);
+		    	
+		    	iRandIntensity = Math::Rand(iSeed);
+		    	
+		    	TRAP(mcResult, iVibra->StartVibraL(5000, iRandIntensity));
+		    	iObserver.InfoMessage(_L("*  "));
+		    	CTestScheduler::StartAndStopL(200);	    		
+			    iObserver.InfoMessage(_L(" * "));
+			    CTestScheduler::StartAndStopL(200);
+			    iObserver.InfoMessage(_L("  *"));
+			    CTestScheduler::StartAndStopL(200);
+			}
+		}		
+    }
+
+    delete iVibra;
+    iVibra = NULL;
+    
+    return mcResult;	
+	
+}
+
+
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LogResult
+// Write test case result to log file
+// -----------------------------------------------------------------------------
+//
+
+void CHwrmTestCaseController::LogResult( const TDesC& aText )
+	{
+	iObserver.LogMessage(aText);
+	}
+	
+void CHwrmTestCaseController::LogResult(const TDesC& aTestCase, TInt aErrorCode)
+	{
+	TBuf16<256> caseName;
+	caseName.Append(aTestCase);
+	
+	if(aErrorCode == KErrNone)
+		{				
+    	FormatMessageL(EHwrmMessageOpDebug,_L(" SUCCESS : %S "), &caseName);	
+	    FormatMessageL(EHwrmMessageOpLog, _L(" SUCCESS : %S "), &caseName);	
+		}
+	else
+		{				
+		FormatMessageL(EHwrmMessageOpDebug,_L(" FAIL : %S  \nRTEST: Checkpoint-fail \n"), &caseName);	
+    	FormatMessageL(EHwrmMessageOpLog, _L(" FAIL : %S  \nRTEST: Checkpoint-fail \n"), &caseName);
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Test case returned with error [%d]"), aErrorCode);	
+		FormatMessageL(EHwrmMessageOpLog, _L("Test case returned with error [%d]"), aErrorCode);		
+		}
+	
+//	iErrCode = KErrNone;	
+	}
+
+// TODO: PASS RESULT (PASS OR FAIL) AS PARAMETER TO THE OBSERVER FOR MORE FLEXIBLE FORMATTING
+void CHwrmTestCaseController::LogResult(const TDesC& aTestCase, TInt aErrorCode, TInt aExpected)
+	{
+	TBuf16<256> caseName;
+	caseName.Append(aTestCase);
+	
+	if( aErrorCode == aExpected )
+		{	
+		FormatMessageL(EHwrmMessageOpDebug, _L( " SUCCESS : %S " ), &caseName );	
+		FormatMessageL(EHwrmMessageOpLog, _L( " SUCCESS : %S : (Returned: %d, expected: %d)"), &caseName, aErrorCode, aExpected );
+		}	
+	else
+		{
+	    FormatMessageL(EHwrmMessageOpDebug, _L( " FAIL : %S  \nRTEST: Checkpoint-fail \n" ), &caseName );	
+		FormatMessageL(EHwrmMessageOpLog, _L( " FAIL : %S  : (Returned: %d, expected: %d) \nRTEST: Checkpoint-fail \n" ), &caseName, aErrorCode, aExpected );		
+		FormatMessageL(EHwrmMessageOpDebug, _L( " Test case returned with error [%d]" ), aErrorCode );	
+		FormatMessageL(EHwrmMessageOpLog,  _L( "Test case returned unexpected error code [%d] (expected %d)" ), aErrorCode, aExpected );		
+		}
+	
+//	iErrCode = KErrNone;
+	}
+
+
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightStatusChanged
+// 
+// -----------------------------------------------------------------------------
+//
+void CHwrmTestCaseController::LightStatusChanged( TInt aTarget, CHWRMLight::TLightStatus aStatus)
+{
+	
+	//iObserver.LogMessage(_L(""));
+	//iMyTarget = aTarget;
+	iMyStatus = aStatus;
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Light state changed for target: 0x%x"), aTarget);
+        
+    switch ( aStatus )
+        {
+        case CHWRMLight::ELightOn:
+            TEST_TRACE(_L(" Light state changed: ELightOn"));
+           
+            break;
+        case CHWRMLight::ELightOff:
+            TEST_TRACE(_L(" Light state changed: ELightOff"));
+           
+            break;
+        case CHWRMLight::ELightBlink:
+            TEST_TRACE(_L(" Light state changed: ELightBlink"));
+           
+            break;
+        case CHWRMLight::ELightStatusUnknown:
+            TEST_TRACE(_L(" Light state changed: ELightStatusUnknown"));
+           
+            break;
+        default:
+            TEST_TRACE(_L(" Light state changed: UNDEFINED !!!"));
+           
+            break;
+        }
+}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::VibraStatusChanged
+// 
+// -----------------------------------------------------------------------------
+//
+void CHwrmTestCaseController::VibraStatusChanged( CHWRMVibra::TVibraStatus aStatus)
+	{
+	iVibraStatus = aStatus;
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Vibra status changed to %d"), aStatus);
+        
+    switch ( aStatus )
+        {
+        case CHWRMVibra::EVibraStatusNotAllowed:
+            TEST_TRACE(_L(" Vibra status changed: EVibraStatusNotAllowed"));
+           
+            break;
+        case CHWRMVibra::EVibraStatusStopped:
+            TEST_TRACE(_L(" Vibra status changed: EVibraStatusStopped"));
+           
+            break;
+        case CHWRMVibra::EVibraStatusOn:
+            TEST_TRACE(_L(" Vibra status changed: EVibraStatusOn"));
+           
+            break;
+        case CHWRMVibra::EVibraStatusUnknown:
+            TEST_TRACE(_L(" Vibra status changed: EVibraStatusUnknown"));
+           
+            break;
+        default:
+            TEST_TRACE(_L(" Vibra status changed: UNDEFINED !!!"));
+           
+            break;
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::VibraModeChanged
+// 
+// -----------------------------------------------------------------------------
+//
+void CHwrmTestCaseController::VibraModeChanged( CHWRMVibra::TVibraModeState aStatus)
+	{
+	iVibraMode = aStatus;
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Vibra mode changed to %d"), aStatus);
+        
+    switch ( aStatus )
+        {
+        case CHWRMVibra::EVibraModeUnknown:
+            TEST_TRACE(_L(" Vibra mode changed: EVibraModeUnknown"));
+           
+            break;
+        case CHWRMVibra::EVibraModeON:
+            TEST_TRACE(_L(" Vibra mode changed: EVibraModeON"));
+           
+            break;
+        case CHWRMVibra::EVibraModeOFF:
+            TEST_TRACE(_L(" Vibra mode changed: EVibraModeOFF"));
+           
+            break;
+        default:
+            TEST_TRACE(_L(" Vibra mode changed: UNDEFINED !!!"));
+           
+            break;
+        }
+	}  
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::FmTxStatusChanged
+// 
+// -----------------------------------------------------------------------------
+//
+void CHwrmTestCaseController::FmTxStatusChanged(TFmTxState aStatus)
+	{
+	FormatMessageL(EHwrmMessageOpDebug,_L("FmTx State Changed to %d "), aStatus);
+	iFmTxState = aStatus;
+	
+	switch (aStatus)
+        {
+    case EFmTxStateUnknown:
+    	TEST_TRACE(_L("FmTx state changed: EFmTxStateUnknown"));
+        break;
+    case EFmTxStateOff:
+    	TEST_TRACE(_L("FmTx state changed: EFmTxStateOff"));
+        break;
+    case EFmTxStateActive:
+    	TEST_TRACE(_L("FmTx state changed: EFmTxStateActive"));
+        break;
+    case EFmTxStateInactive:
+    	TEST_TRACE(_L("FmTx state changed: EFmTxStateInactive"));
+        break;
+    case EFmTxStatePowerSaveInactivity:
+    	TEST_TRACE(_L("FmTx state changed: EFmTxStatePowerSaveInactivity"));
+    	break;
+    case EFmTxStatePowerSaveAccessory:
+    	TEST_TRACE(_L("FmTx state changed: EFmTxStatePowerSaveAccessory"));
+		break;
+    case EFmTxStateScanning:
+    	TEST_TRACE(_L("FmTx state changed: EFmTxStateScanning"));
+		break;
+    default:
+    	TEST_TRACE(_L("FmTx state changed: UNDEFINED !"));
+        break;
+        }
+	}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::FmTxFrequencyChanged
+// 
+// -----------------------------------------------------------------------------
+//
+void CHwrmTestCaseController::FmTxFrequencyChanged(TInt aFrequency)
+ 	{
+ 	FormatMessageL(EHwrmMessageOpDebug,_L("FmTx Frequency Changed. New Frequency = %d "), aFrequency);
+ 	}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::GetStatusForSystemTarget
+// Check light status for SystemTarget
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::GetLightStatusForSystemTarget( CHWRMLight* aLight, CHWRMLight::TLightStatus aStatus )
+	{
+	
+	TInt mask(0);
+	
+	mask = aLight->SupportedTargets();
+
+	
+	if( ( mask & CHWRMLight::EPrimaryDisplay ) && 
+		( aLight->LightStatus( CHWRMLight::EPrimaryDisplay ) != aStatus ) )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" GetLightStatusForSystemTarget::EPrimaryDisplay. Status doesn't match"));
+		return KErrGeneral;
+		}	
+	
+	if( ( mask & CHWRMLight::EPrimaryKeyboard ) && 
+		( aLight->LightStatus( CHWRMLight::EPrimaryKeyboard ) != aStatus  ) )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" GetLightStatusForSystemTarget::EPrimaryKeyboard. Status doesn't match"));
+		return KErrGeneral;
+		}
+	
+	if( ( mask & CHWRMLight::ESecondaryDisplay ) && 
+		( aLight->LightStatus( CHWRMLight::ESecondaryDisplay ) != aStatus ) )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" GetLightStatusForSystemTarget::ESecondaryDisplay. Status doesn't match"));
+		return KErrGeneral;
+		}
+	
+	if( ( mask & CHWRMLight::ESecondaryKeyboard ) && 
+		( aLight->LightStatus( CHWRMLight::ESecondaryKeyboard ) != aStatus ) )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" GetLightStatusForSystemTarget::ESecondaryKeyboard. Status doesn't match"));
+		return KErrGeneral;
+		}
+
+	return KErrNone;
+	
+	}
+
+TInt CHwrmTestCaseController::GetLightStatusForSystemTarget( CHWRMExtendedLight* aLight, CHWRMExtendedLight::TLightStatus aStatus )
+	{
+	
+	TInt mask(0);
+	
+	mask = aLight->SupportedTargets();
+
+	
+	if( ( mask & CHWRMExtendedLight::EPrimaryDisplay ) && 
+		( aLight->LightStatus( CHWRMExtendedLight::EPrimaryDisplay ) != aStatus ) )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" GetLightStatusForSystemTarget::EPrimaryDisplay. Status doesn't match"));
+		return KErrGeneral;
+		}	
+	
+	if( ( mask & CHWRMExtendedLight::EPrimaryKeyboard ) && 
+		( aLight->LightStatus( CHWRMExtendedLight::EPrimaryKeyboard ) != aStatus  ) )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" GetLightStatusForSystemTarget::EPrimaryKeyboard. Status doesn't match"));
+		return KErrGeneral;
+		}
+	
+	if( ( mask & CHWRMExtendedLight::ESecondaryDisplay ) && 
+		( aLight->LightStatus( CHWRMExtendedLight::ESecondaryDisplay ) != aStatus ) )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" GetLightStatusForSystemTarget::ESecondaryDisplay. Status doesn't match"));
+		return KErrGeneral;
+		}
+	
+	if( ( mask & CHWRMExtendedLight::ESecondaryKeyboard ) && 
+		( aLight->LightStatus( CHWRMExtendedLight::ESecondaryKeyboard ) != aStatus ) )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" GetLightStatusForSystemTarget::ESecondaryKeyboard. Status doesn't match"));
+		return KErrGeneral;
+		}
+
+	return KErrNone;
+	
+	}
+
+
+	
+//------------------------------ TEST CASES-------------------------------------
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::SDKLightTargetTest
+// Call Light Target Test for multiple targets depending on selected API
+// -----------------------------------------------------------------------------
+//
+void CHwrmTestCaseController::LightTargetTest( TInt aTargetMask )
+	{
+	TInt currentTarget(1);
+	TInt err( KErrNone );
+	TInt expectedResult( KErrNone );
+	
+	TBuf<100> msg( KNullDesC );
+	
+	_LIT( KSupportedMessageText, "HWRM [Light target test]: Target 0x%x supported"  );	
+	_LIT( KNotSupportedMessageText, "HWRM [Light target test]: Target 0x%x not supported"  );		
+
+	//loop through all possible targets
+	for( TInt i = 0; i < 31; i++ )
+		{
+		//if current target is not included in the given mask, or not defined in CenRep, KErrNot Supported is expected
+		if( ( aTargetMask & currentTarget ) & iSupportedTargets )
+			{
+			expectedResult = KErrNone;
+			msg.Format( KSupportedMessageText, currentTarget );
+			}
+		else
+			{
+			expectedResult = KErrNotSupported;
+			msg.Format( KNotSupportedMessageText, currentTarget );
+			}
+		
+		if( iApiType == EHWRMApiTypeSAPI  )
+			{
+			err = LightTargetTestSDK( currentTarget );
+			}
+		else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) )
+			{
+			err = LightTargetTestExtended( currentTarget );
+			}
+		
+		LogResult( msg, err, expectedResult );
+
+		// shift the target ready for next loop
+        currentTarget <<= 1;
+		}
+	}
+
+	
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightTargetTest
+// Set primary display on and off
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightTargetTestSDK( TInt aTarget)
+    {
+    iObserver.InfoMessage(_L("LightTargetTest"));
+    FormatMessageL(EHwrmMessageOpDebug, _L( " Test case: HWRM SDK [LightOnWithTarget] 0x%x" ), aTarget );
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMLight* myLight = CHWRMLight::NewLC();
+		
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off"));
+	TRAP(errVal, myLight->LightOffL( aTarget ) );	
+	CTestScheduler::StartAndStopL(100);
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+
+ 	//set light on for default intensity and infinite duration
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on"));
+
+	TRAP(errVal, myLight->LightOnL( aTarget ) );
+	CTestScheduler::StartAndStopL(100);
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOnL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+
+	/*Light status can be checked for one target only. If System Target is included in current target, 
+	  GetLightStatusForSystemTarget is called to check light status */
+	if( aTarget & CHWRMLight::ESystemTarget )
+		{
+		errVal = GetLightStatusForSystemTarget( myLight, CHWRMLight::ELightOn );
+		if( errVal == KErrNone )
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off for default intensity and infinite duration"));
+	    	TRAP(errVal, myLight->LightOffL( aTarget ));
+	    	CTestScheduler::StartAndStopL(100);
+	    	if ( errVal != KErrNone ) 
+	    		{
+	    		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+	    		}
+	    	}
+	    else
+	    	{
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not ok"));
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" Target light status: 0x%x"), iMyStatus);
+	    	errVal = KErrGeneral;
+	    	}
+		}
+	else
+		{
+		if((myLight->LightStatus( aTarget ) == CHWRMLight::ELightOn))
+	    	{
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off for default intensity and infinite duration"));
+	    	TRAP(errVal, myLight->LightOffL( aTarget ));
+	    	CTestScheduler::StartAndStopL(100);
+	    	
+	    	if (errVal != KErrNone) 
+	    		{
+	    		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+	    		}
+	    	
+	    	}
+	    else
+	    	{
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not ok"));
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" Target light status: 0x%x"), iMyStatus);
+	    	errVal = KErrGeneral;
+	    	}
+		
+		}
+	
+	//delete light instance	
+    CleanupStack::PopAndDestroy( myLight );  
+    
+    return errVal;
+    
+    }
+
+
+TInt CHwrmTestCaseController::LightTargetTestExtended( TInt aTarget)
+    {
+    iObserver.InfoMessage(_L("LightTargetTest"));
+    FormatMessageL(EHwrmMessageOpDebug, _L( " Test case: HWRM Extended [LightOnWithTarget] 0x%x" ), aTarget );
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMExtendedLight* myLight = NULL;
+
+	if ( iApiType == EHWRMApiTypeEAPI )
+    	{
+		myLight = CHWRMEnhancedLight::NewLC();
+    	}
+	else
+		{
+    	myLight = CHWRMExtendedLight::NewLC();
+		}
+		
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off"));
+	TRAP(errVal, myLight->LightOffL( aTarget ) );	
+	CTestScheduler::StartAndStopL(100);
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+
+ 	//set light on for default intensity and infinite duration
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on"));
+
+	TRAP(errVal, myLight->LightOnL( aTarget ) );
+	CTestScheduler::StartAndStopL(100);
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOnL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+
+	/*Light status can be checked for one target only. If System Target is included in current target, 
+	  GetLightStatusForSystemTarget is called to check light status */
+	if( aTarget & CHWRMExtendedLight::ESystemTarget )
+		{
+		
+		errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightOn );
+		
+		if( errVal == KErrNone )
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off for default intensity and infinite duration"));
+	    	TRAP(errVal, myLight->LightOffL( aTarget ));
+	    	CTestScheduler::StartAndStopL(100);
+	    	if ( errVal != KErrNone ) 
+	    		{
+	    		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+	    		}
+	    	}
+	    else
+	    	{
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not ok"));
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" Target light status: 0x%x"), iMyStatus);
+	    	errVal = KErrGeneral;
+	    	}
+		}
+	else
+		{
+		if((myLight->LightStatus( aTarget ) == CHWRMExtendedLight::ELightOn))
+	    	{
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off for default intensity and infinite duration"));
+	    	TRAP(errVal, myLight->LightOffL( aTarget ));
+	    	CTestScheduler::StartAndStopL(100);
+	    	
+	    	if (errVal != KErrNone) 
+	    		{
+	    		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+	    		}
+	    	
+	    	}
+	    else
+	    	{
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not ok"));
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" Target light status: 0x%x"), iMyStatus);
+	    	errVal = KErrGeneral;
+	    	}
+		
+		}
+	
+	//delete light instance	
+    CleanupStack::PopAndDestroy( myLight );
+    
+    return errVal;
+    
+    }
+
+	
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightOnDurationTest
+// Call Light Target Test for multiple targets depending on selected API
+// -----------------------------------------------------------------------------
+//
+void CHwrmTestCaseController::LightOnDurationTest( TInt aTargetMask, TBool aIsRGBTest, TInt aRed, TInt aGreen, TInt aBlue )
+	{
+	TInt currentTarget(1);
+	TInt err( KErrNone );
+	TInt expectedResult( KErrNone );
+	
+	TBuf<100> msg( KNullDesC );
+	
+	_LIT( KSupportedMessageText, "HWRM [Light duration test]: Target 0x%x supported"  );	
+	_LIT( KNotSupportedMessageText, "HWRM [Light duration test]: Target 0x%x not supported"  );		
+
+	//loop through all possible targets
+	for( TInt i = 0; i < 31; i++ )
+		{
+		//if current target is not included in the given mask, or not defined in CenRep, KErrNot Supported is expected
+		if( ( aTargetMask & currentTarget ) & iSupportedTargets )
+			{
+			expectedResult = KErrNone;
+			msg.Format( KSupportedMessageText, currentTarget );
+			}
+		else
+			{
+			expectedResult = KErrNotSupported;
+			msg.Format( KNotSupportedMessageText, currentTarget );
+			}
+		
+		
+		if( iApiType == EHWRMApiTypeSAPI  )
+			{
+			err = LightOnDurationTestSDK( currentTarget, aIsRGBTest, aRed, aGreen, aBlue );
+			}
+		else if( iApiType == EHWRMApiTypeXAPI )
+			{
+			err = LightOnDurationTestExtended( currentTarget );
+			}
+		else if( iApiType == EHWRMApiTypeEAPI )
+			{
+			err = LightOnDurationTestEnhanced( currentTarget, aIsRGBTest, aRed, aGreen, aBlue );
+			}
+			
+			
+		LogResult( msg, err, expectedResult );
+
+		// shift the target ready for next loop
+        currentTarget <<= 1;
+		}
+	}
+	
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightOnDurationTestSDK
+// Set target lights on for specified duration.
+// -----------------------------------------------------------------------------
+//
+
+TInt CHwrmTestCaseController::LightOnDurationTestSDK( TInt aTarget, TBool aIsRGBTest, TInt aRed, TInt aGreen, TInt aBlue )
+    {
+    iObserver.InfoMessage(_L("LightOnDurationTest"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Test case: HWRM SDK [LightOnWithDuration], 0x%x"), aTarget);
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMLight* myLight = CHWRMLight::NewLC();
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set target lights off"));
+	//if light are on, set off for infinite duration
+	TRAP(errVal, myLight->LightOffL( aTarget ));
+	CTestScheduler::StartAndStopL(100);	
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}	
+
+	if( aIsRGBTest )
+		{
+		TRAP(errVal, myLight->SetLightDefaultColorL( aTarget ));
+		if(errVal != KErrNone)
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->SetLightColorL() failed [%d]"), errVal);
+			CleanupStack::PopAndDestroy( myLight );
+			return errVal;
+			}	
+		}
+
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set target lights on"));
+	
+	//set light on for default intensity and 3 seconds
+	if ( aIsRGBTest )
+		{
+		THWRMLightColor aRGBValue;
+		aRGBValue.iRed = aRed;
+		aRGBValue.iGreen = aGreen;
+		aRGBValue.iBlue = aBlue;
+		TRAP(errVal, myLight->LightOnL( aTarget, 3000, aRGBValue));
+		}
+	else
+		{
+		TRAP(errVal, myLight->LightOnL( aTarget, 3000));
+		}
+	CTestScheduler::StartAndStopL(100);
+
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOnL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+		
+	
+		
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Check target light status"));
+	/*Light status can be checked for one target only. If System Target is included in current target, 
+	  GetLightStatusForSystemTarget is called to check light status */
+	if( aTarget & CHWRMLight::ESystemTarget )
+		{
+		//check that display lights are on
+		errVal = GetLightStatusForSystemTarget( myLight, CHWRMLight::ELightOn );
+		if( errVal == KErrNone )
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" ELightOn"));
+			//wait for light on duration to expire
+			CTestScheduler::StartAndStopL(3100);
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Check display light status"));
+			//lights should be off
+			errVal = GetLightStatusForSystemTarget( myLight, CHWRMLight::ELightOff );
+            if(errVal != KErrNone)
+                {
+                //All targets might not be reset, so wait for some more time.
+                FormatMessageL(EHwrmMessageOpDebug,_L(" Wait for more time"));
+                CTestScheduler::StartAndStopL(KHwrmtestsLightMoreDelay);
+                errVal = GetLightStatusForSystemTarget( myLight, CHWRMLight::ELightOff );
+                }
+			if( errVal != KErrNone )
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;				
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;
+			}
+		}
+	else
+		{
+		//check that display lights are on
+		if (myLight->LightStatus( aTarget ) == CHWRMLight::ELightOn)
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" ELightOn"));
+			//wait for light on duration to expire
+			CTestScheduler::StartAndStopL(3100);
+			
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Check display light status"));
+			//lights should be off
+			if (myLight->LightStatus( aTarget ) != CHWRMLight::ELightOff)
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;					
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;
+			}
+		}
+	//delete light instance
+    CleanupStack::PopAndDestroy( myLight );	
+    
+    return errVal;
+        
+    }
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightOnDurationTestExtended
+// Set target lights on for specified duration.
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightOnDurationTestExtended( TInt aTarget )
+    {
+    iObserver.InfoMessage(_L("LightOnDurationTest"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Test case: HWRM Extended [LightOnWithDuration], 0x%x"), aTarget);
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMExtendedLight* myLight = CHWRMExtendedLight::NewLC();
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set target lights off"));
+	//if light are on, set off for infinite duration
+	TRAP(errVal, myLight->LightOffL( aTarget ));
+	CTestScheduler::StartAndStopL(100);	
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}	
+
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set target lights on"));
+	
+	//set light on for default intensity and 3 seconds
+	TRAP(errVal, myLight->LightOnL( aTarget, 3000));
+	CTestScheduler::StartAndStopL(100);
+
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOnL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+		
+	
+		
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Check target light status"));
+	/*Light status can be checked for one target only. If System Target is included in current target, 
+	  GetLightStatusForSystemTarget is called to check light status */
+	if( aTarget & CHWRMExtendedLight::ESystemTarget )
+		{
+		//check that display lights are on
+		errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightOn );
+		if( errVal == KErrNone )
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" ELightOn"));
+			//wait for light on duration to expire
+			CTestScheduler::StartAndStopL(3100);
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Check display light status"));
+			//lights should be off
+			errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightOff );
+            
+            if(errVal != KErrNone)
+                {
+                //All targets might not be reset, so wait for some more time.
+                FormatMessageL(EHwrmMessageOpDebug,_L(" Wait for more time"));
+                CTestScheduler::StartAndStopL(KHwrmtestsLightMoreDelay);
+                errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightOff );
+                }
+            
+			if( errVal != KErrNone )
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;				
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;
+			}
+		}
+	else
+		{
+		//check that display lights are on
+		if (myLight->LightStatus( aTarget ) == CHWRMExtendedLight::ELightOn)
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" ELightOn"));
+			//wait for light on duration to expire
+			CTestScheduler::StartAndStopL(3100);
+			
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Check display light status"));
+			//lights should be off
+			if (myLight->LightStatus( aTarget ) != CHWRMExtendedLight::ELightOff)
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;					
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;
+			}
+		}
+	//delete light instance
+    CleanupStack::PopAndDestroy( myLight );	
+    
+    return errVal;
+    }
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightOnDurationTestEnhanced
+// Set target lights on for specified duration.
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightOnDurationTestEnhanced( TInt aTarget, TBool aIsRGBTest, TInt aRed, TInt aGreen, TInt aBlue )
+    {
+    iObserver.InfoMessage(_L("LightOnDurationTest"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Test case: HWRM Enhanced [LightOnWithDuration], 0x%x"), aTarget);
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMEnhancedLight* myLight = CHWRMEnhancedLight::NewLC();
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set target lights off"));
+	//if light are on, set off for infinite duration
+	TRAP(errVal, myLight->LightOffL( aTarget ));
+	CTestScheduler::StartAndStopL(100);	
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}	
+
+	if ( aIsRGBTest )
+		{
+		TRAP(errVal, myLight->SetLightDefaultColorL( aTarget ));
+		CTestScheduler::StartAndStopL(100);	
+		if(errVal != KErrNone)
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->SetLightColorL() failed [%d]"), errVal);
+			CleanupStack::PopAndDestroy( myLight );
+			return errVal;
+			}	
+		}
+
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set target lights on"));
+	
+	//set light on for default intensity and 3 seconds
+	if ( aIsRGBTest )
+		{
+		THWRMLightColor aRGBValue;
+		aRGBValue.iRed = aRed;
+		aRGBValue.iGreen = aGreen;
+		aRGBValue.iBlue = aBlue;
+		TRAP(errVal, myLight->LightOnL( aTarget, 3000, aRGBValue));
+		}
+	else
+		{
+		TRAP(errVal, myLight->LightOnL( aTarget, 3000));
+		}
+	CTestScheduler::StartAndStopL(100);
+
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOnL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+		
+	
+		
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Check target light status"));
+	/*Light status can be checked for one target only. If System Target is included in current target, 
+	  GetLightStatusForSystemTarget is called to check light status */
+	if( aTarget & CHWRMExtendedLight::ESystemTarget )
+		{
+		//check that display lights are on
+		errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightOn );
+		if( errVal == KErrNone )
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" ELightOn"));
+			//wait for light on duration to expire
+			CTestScheduler::StartAndStopL(3100);
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Check display light status"));
+			//lights should be off
+			errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightOff );
+            
+            if(errVal != KErrNone)
+                {
+                //All targets might not be reset, so wait for some more time.
+                FormatMessageL(EHwrmMessageOpDebug,_L(" Wait for more time"));
+                CTestScheduler::StartAndStopL(KHwrmtestsLightMoreDelay);
+                errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightOff );
+                }
+            
+			if( errVal != KErrNone )
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;				
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;
+			}
+		}
+	else
+		{
+		//check that display lights are on
+		if (myLight->LightStatus( aTarget ) == CHWRMExtendedLight::ELightOn)
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" ELightOn"));
+			//wait for light on duration to expire
+			CTestScheduler::StartAndStopL(3100);
+			
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Check display light status"));
+			//lights should be off
+			if (myLight->LightStatus( aTarget ) != CHWRMExtendedLight::ELightOff)
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;					
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;
+			}
+		}
+	//delete light instance
+    CleanupStack::PopAndDestroy( myLight );	
+    
+    return errVal;
+    }
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightOffDurationTest
+// Call Light Off Duration Test for multiple targets depending on selected API
+// -----------------------------------------------------------------------------
+//
+void CHwrmTestCaseController::LightOffDurationTest( TInt aTargetMask )
+	{
+	TInt currentTarget(1);
+	TInt err( KErrNone );
+	TInt expectedResult( KErrNone );
+	
+	TBuf<100> msg( KNullDesC );
+	
+	_LIT( KSupportedMessageText, "HWRM [Light Off duration test]: Target 0x%x supported"  );	
+	_LIT( KNotSupportedMessageText, "HWRM [Light Off duration test]: Target 0x%x not supported"  );		
+
+	//loop through all possible targets
+	for( TInt i = 0; i < 31; i++ )
+		{
+		//if current target is not included in the given mask, or not defined in CenRep, KErrNot Supported is expected
+		if( ( aTargetMask & currentTarget ) & iSupportedTargets )
+			{
+			expectedResult = KErrNone;
+			msg.Format( KSupportedMessageText, currentTarget );
+			}
+		else
+			{
+			expectedResult = KErrNotSupported;
+			msg.Format( KNotSupportedMessageText, currentTarget );
+			}
+		
+		
+		if( iApiType == EHWRMApiTypeSAPI  )
+			{
+			err = LightOffDurationTestSDK( currentTarget );
+			}
+		else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) )
+			{
+			err = LightOffDurationTestExtended( currentTarget );
+			}
+			
+			
+		LogResult( msg, err, expectedResult );
+
+		// shift the target ready for next loop
+        currentTarget <<= 1;
+		}
+	}
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightOffDurationTestSDK
+// Set target lights on and set lights off for 3 seconds
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightOffDurationTestSDK( TInt aTarget )
+    {
+    iObserver.InfoMessage(_L("LightOffDurationTest"));
+    FormatMessageL(EHwrmMessageOpDebug,_L( " Test case: HWRM SDK [LightOffWithDuration], 0x%x"), aTarget );
+    TInt errVal = KErrNone;
+    //create light instance
+    CHWRMLight* myLight = CHWRMLight::NewLC();
+   
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set target (0x%x) lights on"), aTarget);
+	//Set target light on for infinite duration
+	TRAP(errVal, myLight->LightOnL( aTarget ));	
+	CTestScheduler::StartAndStopL(100);	
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOnL (0x%x) failed [%d]"), aTarget, errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+		
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set target (0x%x) lights off"), aTarget);
+	//set light off for default intensity and 3 seconds
+	TRAP(errVal, myLight->LightOffL( aTarget, 3000));
+	CTestScheduler::StartAndStopL(100);
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL (0x%x) failed [%d]"), aTarget, errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+	
+	/*Light status can be checked for one target only. If System Target is included in current target, 
+	  GetLightStatusForSystemTarget is called to check light status */
+	if( aTarget & CHWRMLight::ESystemTarget )
+		{
+		//check that display lights are off
+		errVal = GetLightStatusForSystemTarget( myLight, CHWRMLight::ELightOff );
+		
+		if( errVal == KErrNone )
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" ELightOff (0x%x)"), aTarget);
+			CTestScheduler::StartAndStopL(3100);
+			
+			//should be back on baseline (lights on)
+			errVal = GetLightStatusForSystemTarget( myLight, CHWRMLight::ELightOn );
+            
+            if(errVal != KErrNone)
+                {
+                //All targets might not be reset, so wait for some more time.
+                FormatMessageL(EHwrmMessageOpDebug,_L(" Wait for more time"));
+                CTestScheduler::StartAndStopL(KHwrmtestsLightMoreDelay);
+                errVal = GetLightStatusForSystemTarget( myLight, CHWRMLight::ELightOn );
+                }
+	    	if ( errVal != KErrNone ) 
+	    		{
+	    		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;
+				}
+	    	}
+	    else
+	    	{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;
+	    	}
+		}
+	else
+		{
+		//check that display lights are off
+		if (myLight->LightStatus( aTarget ) == CHWRMLight::ELightOff)
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" ELightOff (0x%x)"), aTarget);
+			CTestScheduler::StartAndStopL(3100);
+			
+			//should be back on baseline (lights on)	
+			if(myLight->LightStatus( aTarget ) != CHWRMLight::ELightOn)
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;	
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;			
+			}
+    	}
+    //delete light instance
+    CleanupStack::PopAndDestroy( myLight );
+    
+    return errVal;
+        
+	}
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightOffDurationTestExtended
+// Set target lights on and set lights off for 3 seconds
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightOffDurationTestExtended( TInt aTarget )
+    {      
+    iObserver.InfoMessage(_L("LightOffDurationTest"));
+    FormatMessageL(EHwrmMessageOpDebug,_L( " Test case: HWRM Extended [LightOffWithDuration], 0x%x"), aTarget );
+    TInt errVal = KErrNone;
+    //create light instance
+    CHWRMExtendedLight* myLight = NULL;
+
+	if ( iApiType == EHWRMApiTypeEAPI )
+    	{
+		myLight = CHWRMEnhancedLight::NewLC();
+    	}
+	else
+		{
+    	myLight = CHWRMExtendedLight::NewLC();
+		}
+   
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set target (0x%x) lights on"), aTarget);
+	//Set target light on for infinite duration
+	TRAP(errVal, myLight->LightOnL( aTarget ));	
+	CTestScheduler::StartAndStopL(100);	
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOnL (0x%x) failed [%d]"), aTarget, errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+		
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set target (0x%x) lights off"), aTarget);
+	//set light off for default intensity and 3 seconds
+	TRAP(errVal, myLight->LightOffL( aTarget, 3000));
+	CTestScheduler::StartAndStopL(100);
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL (0x%x) failed [%d]"), aTarget, errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+	
+	/*Light status can be checked for one target only. If System Target is included in current target, 
+	  GetLightStatusForSystemTarget is called to check light status */
+	if( aTarget & CHWRMExtendedLight::ESystemTarget )
+		{
+		//check that display lights are off
+		errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightOff );
+		
+		if( errVal == KErrNone )
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" ELightOff (0x%x)"), aTarget);
+			CTestScheduler::StartAndStopL(3100);
+			
+			//should be back on baseline (lights on)
+			errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightOn );
+            
+            if(errVal != KErrNone)
+                {
+                //All targets might not be reset, so wait for some more time.
+                FormatMessageL(EHwrmMessageOpDebug,_L(" Wait for more time"));
+                CTestScheduler::StartAndStopL(KHwrmtestsLightMoreDelay);
+                errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightOn );    
+                }
+	    	if ( errVal != KErrNone ) 
+	    		{
+	    		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;
+				}
+	    	}
+	    else
+	    	{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;
+	    	}
+		}
+	else
+		{
+		//check that display lights are off
+		if (myLight->LightStatus( aTarget ) == CHWRMExtendedLight::ELightOff)
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" ELightOff (0x%x)"), aTarget);
+			CTestScheduler::StartAndStopL(3100);
+			
+			//should be back on baseline (lights on)	
+			if(myLight->LightStatus( aTarget ) != CHWRMExtendedLight::ELightOn)
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;	
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target:(0x%x"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;			
+			}
+    	}
+    //delete light instance
+    CleanupStack::PopAndDestroy( myLight );
+    
+    return errVal;
+
+	}
+
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightIntensityTest
+// Call LightIntensityTest for multiple targets depending on selected API
+// -----------------------------------------------------------------------------
+//
+void CHwrmTestCaseController::LightIntensityTest( TInt aTargetMask )
+	{
+	TInt currentTarget(1);
+	TInt err( KErrNone );
+	TInt expectedResult( KErrNone );
+	
+	TBuf<100> msg( KNullDesC );
+	
+	_LIT( KSupportedMessageText, "HWRM [Light intensity test]: Target 0x%x supported"  );	
+	_LIT( KNotSupportedMessageText, "HWRM [Light intensity test]: Target 0x%x not supported"  );		
+
+	//loop through all possible targets
+	for( TInt i = 0; i < 31; i++ )
+		{
+		//if current target is not included in the given mask, or not defined in CenRep, KErrNot Supported is expected
+		if( ( aTargetMask & currentTarget ) & iSupportedTargets )
+			{
+			expectedResult = KErrNone;
+			msg.Format( KSupportedMessageText, currentTarget );
+			}
+		else
+			{
+			expectedResult = KErrNotSupported;
+			msg.Format( KNotSupportedMessageText, currentTarget );
+			}
+		
+		
+		if( iApiType == EHWRMApiTypeSAPI  )
+			{
+			err = LightIntensityTestSDK( currentTarget );
+			}
+		else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) )
+			{
+			err = LightIntensityTestExtended( currentTarget );
+			}
+			
+			
+		LogResult( msg, err, expectedResult );
+
+		// shift the target ready for next loop
+        currentTarget <<= 1;
+		}
+	}
+  
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightIntensityTest
+// Set target lights on and with different intensity levels.
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightIntensityTestSDK( TInt aTarget )
+    {
+    iObserver.InfoMessage(_L("LightIntensityTest"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" HWRM SDK [LightOnWithIntensity]"));
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMLight* myLight = CHWRMLight::NewLC();
+	
+	//set lights off for infinite duration
+	TRAP(errVal, myLight->LightOffL( aTarget ));
+	CTestScheduler::StartAndStopL(100);	
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+
+	//set lights on with different intensity values
+	for(TInt i=0; i<=100; i+=10)
+		{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on with %d intensity"), i);
+			//set light on 
+			TRAP(errVal, myLight->LightOnL( aTarget, 2000, i, ETrue));
+			CTestScheduler::StartAndStopL(100);
+			if(errVal != KErrNone)
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOnL() failed [%d]"), errVal );
+				CleanupStack::PopAndDestroy( myLight );
+				return errVal;
+				}
+				
+			//set timer to wait the duration 
+			CTestScheduler::StartAndStopL(2100);
+			
+			
+		if( aTarget & CHWRMLight::ESystemTarget )
+			{
+			//check that display lights are off
+			errVal = GetLightStatusForSystemTarget( myLight, CHWRMLight::ELightOff );
+            
+            if(errVal != KErrNone)
+                {
+                //All targets might not be reset, so wait for some more time.
+                FormatMessageL(EHwrmMessageOpDebug,_L(" Wait for more time"));
+                CTestScheduler::StartAndStopL(KHwrmtestsLightMoreDelay);
+                errVal = GetLightStatusForSystemTarget( myLight, CHWRMLight::ELightOff );
+                }
+            
+			if( errVal != KErrNone )
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target(0x%x"), aTarget);
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;
+				}
+			}
+		else
+			{
+			//check that display lights are off again
+			if(myLight->LightStatus( aTarget ) != CHWRMLight::ELightOff)
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target(0x%x"), aTarget);
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;	
+				}
+			}
+		}
+
+	//delete light instance
+    CleanupStack::PopAndDestroy( myLight );	
+    
+    return errVal;
+   
+    }
+
+TInt CHwrmTestCaseController::LightIntensityTestExtended( TInt aTarget )
+    {
+    iObserver.InfoMessage(_L("LightIntensityTest"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" HWRM Extended [LightOnWithIntensity]"));
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMExtendedLight* myLight = NULL;
+
+	if ( iApiType == EHWRMApiTypeEAPI )
+    	{
+		myLight = CHWRMEnhancedLight::NewLC();
+    	}
+	else
+		{
+    	myLight = CHWRMExtendedLight::NewLC();
+		}
+	
+	//set lights off for infinite duration
+	TRAP(errVal, myLight->LightOffL( aTarget ));
+	CTestScheduler::StartAndStopL(100);	
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+
+	//set lights on with different intensity values
+	for(TInt i=0; i<=100; i+=10)
+		{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on with %d intensity"), i);
+			//set light on 
+			TRAP(errVal, myLight->LightOnL( aTarget, 2000, i, ETrue));
+			CTestScheduler::StartAndStopL(100);
+			if(errVal != KErrNone)
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOnL() failed [%d]"), errVal );
+				CleanupStack::PopAndDestroy( myLight );
+				return errVal;
+				}
+				
+			//set timer to wait the duration 
+			CTestScheduler::StartAndStopL(2100);
+			
+			
+		if( aTarget & CHWRMExtendedLight::ESystemTarget )
+			{
+			//check that display lights are off
+			errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightOff );
+            
+            if(errVal != KErrNone)
+                {
+                //All targets might not be reset, so wait for some more time.
+                FormatMessageL(EHwrmMessageOpDebug,_L(" Wait for more time"));
+                CTestScheduler::StartAndStopL(KHwrmtestsLightMoreDelay);
+                errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightOff );
+                }
+            
+			if( errVal != KErrNone )
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target(0x%x"), aTarget);
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;
+				}
+			}
+		else
+			{
+			//check that display lights are off again
+			if(myLight->LightStatus( aTarget ) != CHWRMExtendedLight::ELightOff)
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK, target(0x%x"), aTarget);
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;	
+				}
+			}
+		}
+
+	//delete light instance
+    CleanupStack::PopAndDestroy( myLight );	
+    
+    return errVal;
+    }
+
+
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightBlinkTest
+// Call LightBlinkTest for multiple targets depending on selected API
+// -----------------------------------------------------------------------------
+//
+void CHwrmTestCaseController::LightBlinkTest( TInt aTargetMask )
+	{
+	TInt currentTarget(1);
+	TInt err( KErrNone );
+	TInt expectedResult( KErrNone );
+	
+	TBuf<100> msg( KNullDesC );
+	
+	_LIT( KSupportedMessageText, "HWRM [Light blink test]: Target 0x%x supported"  );	
+	_LIT( KNotSupportedMessageText, "HWRM [Light blink test]: Target 0x%x not supported"  );		
+
+	//loop through all possible targets
+	for( TInt i = 0; i < 31; i++ )
+		{
+		//if current target is not included in the given mask, or not defined in CenRep, KErrNot Supported is expected
+		if( ( aTargetMask & currentTarget ) & iSupportedTargets )
+			{
+			expectedResult = KErrNone;
+			msg.Format( KSupportedMessageText, currentTarget );
+			}
+		else
+			{
+			expectedResult = KErrNotSupported;
+			msg.Format( KNotSupportedMessageText, currentTarget );
+			}
+		
+		
+		if( iApiType == EHWRMApiTypeSAPI  )
+			{
+			err = LightBlinkTestSDK( currentTarget );
+			}
+		else if( iApiType == EHWRMApiTypeXAPI || (iApiType == EHWRMApiTypeEAPI) )
+			{
+			err = LightBlinkTestExtended( currentTarget );
+			}
+			
+		LogResult( msg, err, expectedResult );
+
+		// shift the target ready for next loop
+        currentTarget <<= 1;
+		}
+	}
+
+    
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightBlinkTestSDK
+// Set target lights blink for infinite duration
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightBlinkTestSDK( TInt aTarget )
+    {
+    iObserver.InfoMessage(_L("LightBlinkTest"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Test case: HWRM SDK [LightBlinkTest] target:0x%x"), aTarget );
+    
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMLight* myLight = CHWRMLight::NewLC();
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights to blink"));
+	
+	//set lights to blink 
+	TRAP(errVal, myLight->LightBlinkL( aTarget ));
+	
+	CTestScheduler::StartAndStopL(100);	
+	
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightBlinkL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+	
+	
+	if( aTarget & CHWRMLight::ESystemTarget )
+		{
+		//check that display lights are blinking
+		errVal = GetLightStatusForSystemTarget( myLight, CHWRMLight::ELightBlink );
+	
+		
+		if( errVal == KErrNone )
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off"));
+		
+			//set lights off for 3 sec
+			TRAP(errVal, myLight->LightOffL( aTarget, 3000));
+		
+			CTestScheduler::StartAndStopL( 100 );	
+		
+			if(errVal != KErrNone)
+				{
+				FormatMessageL(EHwrmMessageOpDebug, _L(" iMyLight->LightOffL() (0x%x) failed [%d]"), aTarget, errVal );
+				CleanupStack::PopAndDestroy( myLight );
+				return errVal;
+				}
+			
+			//wait 3+ seconds 
+			CTestScheduler::StartAndStopL( 3100 );
+			
+			//check that lights are blinking again...
+			errVal = GetLightStatusForSystemTarget( myLight, CHWRMLight::ELightBlink );
+            
+            if(errVal != KErrNone)
+                {
+                //All targets might not be reset, so wait for some more time.
+                FormatMessageL(EHwrmMessageOpDebug,_L(" Wait for more time"));
+                CTestScheduler::StartAndStopL(KHwrmtestsLightMoreDelay);
+                errVal = GetLightStatusForSystemTarget( myLight, CHWRMLight::ELightBlink );
+                }
+			
+			if( errVal != KErrNone )	
+				{
+				FormatMessageL(EHwrmMessageOpDebug, _L(" Light status not OK, target: 0x%x"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug, _L(" Display light status: 0x%x"), iMyStatus );		
+				errVal = KErrGeneral;
+				}	
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug, _L(" Light status not OK, target: 0x%x"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug, _L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;
+			}
+		}
+		else
+			{
+			if( myLight->LightStatus( aTarget ) == CHWRMLight::ELightBlink)
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off"));
+			
+				//set lights off for 3 sec
+				TRAP(errVal, myLight->LightOffL( aTarget, 3000));
+			
+				CTestScheduler::StartAndStopL( 100 );	
+			
+				if(errVal != KErrNone)
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L(" iMyLight->LightOffL() failed [%d]"), errVal );
+					CleanupStack::PopAndDestroy( myLight );
+					return errVal;
+					}
+				
+				//wait 3+ seconds
+				CTestScheduler::StartAndStopL( 3100 );
+				
+				//check that lights are blinking again...
+				if( myLight->LightStatus( aTarget ) != CHWRMLight::ELightBlink )	
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L(" Light status not OK, target: 0x%x"), aTarget );
+					FormatMessageL(EHwrmMessageOpDebug, _L(" Display light status: 0x%x"), iMyStatus );		
+					errVal = KErrGeneral;
+					}
+				}
+			else
+				{
+				FormatMessageL(EHwrmMessageOpDebug, _L(" Light status not OK, target: 0x%x"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug, _L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;
+				}
+			}
+			
+	//delete light instance
+	CleanupStack::PopAndDestroy( myLight );
+	
+    return errVal;
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightBlinkTestExtended
+// Set target lights blink for infinite duration
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightBlinkTestExtended( TInt aTarget )
+    {
+
+    iObserver.InfoMessage(_L("LightBlinkTest"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Test case: HWRM Extended [LightBlinkTest] target:0x%x"), aTarget );
+    
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMExtendedLight* myLight = NULL;
+
+	if ( iApiType == EHWRMApiTypeEAPI )
+    	{
+		myLight = CHWRMEnhancedLight::NewLC();
+    	}
+	else
+		{
+    	myLight = CHWRMExtendedLight::NewLC();
+		}
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights to blink"));
+	
+	//set lights to blink 
+	TRAP(errVal, myLight->LightBlinkL( aTarget ));
+	
+	CTestScheduler::StartAndStopL(100);	
+	
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightBlinkL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+	
+	
+	if( aTarget & CHWRMExtendedLight::ESystemTarget )
+		{
+		//check that display lights are blinking
+		errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightBlink );
+	
+		
+		if( errVal == KErrNone )
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off"));
+		
+			//set lights off for 3 sec
+			TRAP(errVal, myLight->LightOffL( aTarget, 3000));
+		
+			CTestScheduler::StartAndStopL( 100 );	
+		
+			if(errVal != KErrNone)
+				{
+				FormatMessageL(EHwrmMessageOpDebug, _L(" iMyLight->LightOffL() (0x%x) failed [%d]"), aTarget, errVal );
+				CleanupStack::PopAndDestroy( myLight );
+				return errVal;
+				}
+			
+			//wait 3+ seconds 
+			CTestScheduler::StartAndStopL( 3100 ); 
+			
+			//check that lights are blinking again...
+			errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightBlink );
+            
+            if(errVal != KErrNone)
+                {
+                //All targets might not be reset, so wait for some more time.
+                FormatMessageL(EHwrmMessageOpDebug,_L(" Wait for more time"));
+                CTestScheduler::StartAndStopL(KHwrmtestsLightMoreDelay);
+                errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightBlink );
+                }
+			
+			if( errVal != KErrNone )	
+				{
+				FormatMessageL(EHwrmMessageOpDebug, _L(" Light status not OK, target: 0x%x"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug, _L(" Display light status: 0x%x"), iMyStatus );		
+				errVal = KErrGeneral;
+				}	
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug, _L(" Light status not OK, target: 0x%x"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug, _L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;
+			}
+		}
+		else
+			{
+			if( myLight->LightStatus( aTarget ) == CHWRMExtendedLight::ELightBlink)
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off"));
+			
+				//set lights off for 3 sec
+				TRAP(errVal, myLight->LightOffL( aTarget, 3000));
+			
+				CTestScheduler::StartAndStopL( 100 );	
+			
+				if(errVal != KErrNone)
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L(" iMyLight->LightOffL() failed [%d]"), errVal );
+					CleanupStack::PopAndDestroy( myLight );
+					return errVal;
+					}
+				
+				//wait 3+ seconds
+				CTestScheduler::StartAndStopL( 3100 );
+				
+				//check that lights are blinking again...
+				if( myLight->LightStatus( aTarget ) != CHWRMExtendedLight::ELightBlink )	
+					{
+					FormatMessageL(EHwrmMessageOpDebug, _L(" Light status not OK, target: 0x%x"), aTarget );
+					FormatMessageL(EHwrmMessageOpDebug, _L(" Display light status: 0x%x"), iMyStatus );		
+					errVal = KErrGeneral;
+					}
+				}
+			else
+				{
+				FormatMessageL(EHwrmMessageOpDebug, _L(" Light status not OK, target: 0x%x"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug, _L(" Display light status: 0x%x"), iMyStatus);
+				errVal = KErrGeneral;
+				}
+			}
+			
+	//delete light instance
+	CleanupStack::PopAndDestroy( myLight );
+	
+    return errVal;   
+    }
+    
+    
+    
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightBlinkDurationTest
+// Call LightBlinkTest for multiple targets depending on selected API
+// -----------------------------------------------------------------------------
+//
+void CHwrmTestCaseController::LightBlinkDurationTest( TInt aTargetMask, TBool aIsRGBTest, TInt aRed, TInt aGreen, TInt aBlue )
+	{
+	TInt currentTarget(1);
+	TInt err( KErrNone );
+	TInt expectedResult( KErrNone );
+	
+	TBuf<100> msg( KNullDesC );
+	
+	_LIT( KSupportedMessageText, "HWRM [Light blink duration test]: Target 0x%x supported"  );	
+	_LIT( KNotSupportedMessageText, "HWRM [Light blink duration test]: Target 0x%x not supported"  );		
+
+	//loop through all possible targets
+	for( TInt i = 0; i < 31; i++ )
+		{
+		//if current target is not included in the given mask, or not defined in CenRep, KErrNot Supported is expected
+		if( ( aTargetMask & currentTarget ) & iSupportedTargets )
+			{
+			expectedResult = KErrNone;
+			msg.Format( KSupportedMessageText, currentTarget );
+			}
+		else
+			{
+			expectedResult = KErrNotSupported;
+			msg.Format( KNotSupportedMessageText, currentTarget );
+			}
+		
+		
+		if( iApiType == EHWRMApiTypeSAPI  )
+			{
+			err = LightBlinkDurationTestSDK( currentTarget, aIsRGBTest, aRed, aGreen, aBlue );
+			}
+		else if( iApiType == EHWRMApiTypeXAPI )
+			{
+			err = LightBlinkDurationTestExtended( currentTarget );
+			}
+		else if( iApiType == EHWRMApiTypeEAPI )
+			{
+			err = LightBlinkDurationTestEnhanced( currentTarget, aIsRGBTest, aRed, aGreen, aBlue );
+			}
+			
+			
+		LogResult( msg, err, expectedResult );
+
+		// shift the target ready for next loop
+        currentTarget <<= 1;
+		}
+	}    
+      
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightBlinkDurationTestSDK
+// Set target lights to blink for defined duration
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightBlinkDurationTestSDK( TInt aTarget, TBool aIsRGBTest, TInt aRed, TInt aGreen, TInt aBlue )
+    {
+    
+    //define duration for lights to blink
+    TInt duration( 4000 );
+    
+   	iObserver.InfoMessage(_L("LightBlinkDurationTest"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Test case: HWRM SDK [LightBlinkWithDuration], target: 0x%x"), aTarget );
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMLight* myLight = CHWRMLight::NewLC();
+    
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off"));
+	TRAP(errVal, myLight->LightOffL( aTarget ));
+	CTestScheduler::StartAndStopL(100);
+	
+	if(errVal != KErrNone)
+	{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+	}
+
+	if ( aIsRGBTest )
+		{
+		TRAP(errVal, myLight->SetLightDefaultColorL( aTarget ));
+		
+		if(errVal != KErrNone)
+		{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->SetLightDefaultColorL() failed [%d]"), errVal);
+			CleanupStack::PopAndDestroy( myLight );
+			return errVal;
+		}
+		}
+    	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights to blink"));
+	
+	//set lights to blink for <duration> seconds
+	if ( aIsRGBTest )
+		{
+		THWRMLightColor aRGBValue;
+		aRGBValue.iRed = aRed;
+		aRGBValue.iGreen = aGreen;
+		aRGBValue.iBlue = aBlue;
+		TRAP(errVal, myLight->LightBlinkL( aTarget, duration, aRGBValue));
+		}
+	else
+		{
+		TRAP(errVal, myLight->LightBlinkL( aTarget, duration ));
+		}
+	
+	CTestScheduler::StartAndStopL(100);	
+	
+	if(errVal != KErrNone)
+		{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightBlinkL() failed [%d]"), errVal);
+			CleanupStack::PopAndDestroy( myLight );
+			return errVal;
+		}
+		
+	
+	CHWRMLight::TLightStatus expectedStatus( CHWRMLight::ELightBlink );
+		
+	if( aTarget & CHWRMLight::ESystemTarget )
+		{
+		//check that display lights are blinking
+		errVal = GetLightStatusForSystemTarget( myLight, expectedStatus );
+		
+		if( errVal == KErrNone )
+			{
+			CTestScheduler::StartAndStopL( duration + 100 );
+			
+			//check that target lights are off again
+			expectedStatus = CHWRMLight::ELightOff;
+			
+			errVal = GetLightStatusForSystemTarget( myLight, expectedStatus );
+            
+            if(errVal != KErrNone)
+                {
+                //All targets might not be reset, so wait for some more time.
+                FormatMessageL(EHwrmMessageOpDebug,_L(" Wait for more time"));
+                CTestScheduler::StartAndStopL(KHwrmtestsLightMoreDelay);
+                errVal = GetLightStatusForSystemTarget( myLight, expectedStatus );
+                }
+			
+			if( errVal != KErrNone )
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status (0x%x)no OK"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x, expected: 0x%x"), iMyStatus, expectedStatus );
+				errVal = KErrGeneral;				
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status (0x%x) not OK"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x, expected: 0x%x"), iMyStatus, expectedStatus);
+			errVal = KErrGeneral;	
+			}
+		}
+	else
+		{
+		
+		if( myLight->LightStatus( aTarget ) == expectedStatus )
+			{
+			CTestScheduler::StartAndStopL( duration + 100 );
+			
+			//check that target lights are off again
+			expectedStatus = CHWRMLight::ELightOff;
+			
+			if(myLight->LightStatus( aTarget ) != expectedStatus)
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status no OK"));
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x, expected: 0x%x"), iMyStatus, expectedStatus );
+				errVal = KErrGeneral;				
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status (0x%x) not OK"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x, expected: 0x%x"), iMyStatus, expectedStatus);
+			errVal = KErrGeneral;
+			}
+		}
+		
+		
+	//delete light instance
+    CleanupStack::PopAndDestroy( myLight );
+    return errVal;
+    
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightBlinkDurationTestExtended
+// Set target lights to blink for defined duration
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightBlinkDurationTestExtended( TInt aTarget )
+    {
+
+    //define duration for lights to blink
+    TInt duration( 4000 );
+    
+   	iObserver.InfoMessage(_L("LightBlinkDurationTest"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Test case: HWRM Extended [LightBlinkWithDuration], target: 0x%x"), aTarget );
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMExtendedLight* myLight = CHWRMExtendedLight::NewLC();
+    
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off"));
+	TRAP(errVal, myLight->LightOffL( aTarget ));
+	CTestScheduler::StartAndStopL(100);
+	
+	if(errVal != KErrNone)
+	{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+	}
+    	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights to blink"));
+	
+	//set lights to blink for <duration> seconds
+	TRAP(errVal, myLight->LightBlinkL( aTarget, duration ));
+	
+	CTestScheduler::StartAndStopL(100);	
+	
+	if(errVal != KErrNone)
+		{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightBlinkL() failed [%d]"), errVal);
+			CleanupStack::PopAndDestroy( myLight );
+			return errVal;
+		}
+		
+	
+	CHWRMExtendedLight::TLightStatus expectedStatus( CHWRMExtendedLight::ELightBlink );
+		
+	if( aTarget & CHWRMExtendedLight::ESystemTarget )
+		{
+		//check that display lights are blinking
+		errVal = GetLightStatusForSystemTarget( myLight, expectedStatus );
+		
+		if( errVal == KErrNone )
+			{
+			CTestScheduler::StartAndStopL( duration + 100 );
+			
+			//check that target lights are off again
+			expectedStatus = CHWRMExtendedLight::ELightOff;
+			
+			errVal = GetLightStatusForSystemTarget( myLight, expectedStatus );
+            
+            if(errVal != KErrNone)
+                {
+                //All targets might not be reset, so wait for some more time.
+                FormatMessageL(EHwrmMessageOpDebug,_L(" Wait for more time"));
+                CTestScheduler::StartAndStopL(KHwrmtestsLightMoreDelay);
+                errVal = GetLightStatusForSystemTarget( myLight, expectedStatus );
+                }
+			
+			if( errVal != KErrNone )
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status (0x%x)no OK"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x, expected: 0x%x"), iMyStatus, expectedStatus );
+				errVal = KErrGeneral;				
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status (0x%x) not OK"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x, expected: 0x%x"), iMyStatus, expectedStatus);
+			errVal = KErrGeneral;	
+			}
+		}
+	else
+		{
+		
+		if( myLight->LightStatus( aTarget ) == expectedStatus )
+			{
+			CTestScheduler::StartAndStopL( duration + 100 );
+			
+			//check that target lights are off again
+			expectedStatus = CHWRMExtendedLight::ELightOff;
+			
+			if(myLight->LightStatus( aTarget ) != expectedStatus)
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status no OK"));
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x, expected: 0x%x"), iMyStatus, expectedStatus );
+				errVal = KErrGeneral;				
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status (0x%x) not OK"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x, expected: 0x%x"), iMyStatus, expectedStatus);
+			errVal = KErrGeneral;
+			}
+		}
+		
+		
+	//delete light instance
+    CleanupStack::PopAndDestroy( myLight );
+    return errVal;
+    
+    }
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightBlinkDurationTestEnhanced
+// Set target lights to blink for defined duration
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightBlinkDurationTestEnhanced( TInt aTarget, TBool aIsRGBTest, TInt aRed, TInt aGreen, TInt aBlue )
+    {
+
+    //define duration for lights to blink
+    TInt duration( 4000 );
+    
+   	iObserver.InfoMessage(_L("LightBlinkDurationTest"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Test case: HWRM Extended [LightBlinkWithDuration], target: 0x%x"), aTarget );
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMEnhancedLight* myLight = CHWRMEnhancedLight::NewLC();
+    
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off"));
+	TRAP(errVal, myLight->LightOffL( aTarget ));
+	CTestScheduler::StartAndStopL(100);
+	
+	if(errVal != KErrNone)
+	{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+	}
+
+
+	if ( aIsRGBTest )
+		{
+		TRAP(errVal, myLight->SetLightDefaultColorL( aTarget ));
+		
+		if(errVal != KErrNone)
+		{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->SetLightDefaultColorL() failed [%d]"), errVal);
+			CleanupStack::PopAndDestroy( myLight );
+			return errVal;
+		}
+		}
+			
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights to blink"));
+	
+	//set lights to blink for <duration> seconds
+	if ( aIsRGBTest )
+		{
+		THWRMLightColor aRGBValue;
+		aRGBValue.iRed = aRed;
+		aRGBValue.iGreen = aGreen;
+		aRGBValue.iBlue = aBlue;
+		TRAP(errVal, myLight->LightBlinkL( aTarget, duration, aRGBValue));
+		}
+	else
+		{
+		TRAP(errVal, myLight->LightBlinkL( aTarget, duration ));
+		}
+	
+	CTestScheduler::StartAndStopL(100);	
+	
+	if(errVal != KErrNone)
+		{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightBlinkL() failed [%d]"), errVal);
+			CleanupStack::PopAndDestroy( myLight );
+			return errVal;
+		}
+		
+	
+	CHWRMExtendedLight::TLightStatus expectedStatus( CHWRMExtendedLight::ELightBlink );
+		
+	if( aTarget & CHWRMExtendedLight::ESystemTarget )
+		{
+		//check that display lights are blinking
+		errVal = GetLightStatusForSystemTarget( myLight, expectedStatus );
+		
+		if( errVal == KErrNone )
+			{
+			CTestScheduler::StartAndStopL( duration + 100 );
+			
+			//check that target lights are off again
+			expectedStatus = CHWRMExtendedLight::ELightOff;
+			
+			errVal = GetLightStatusForSystemTarget( myLight, expectedStatus );
+            
+            if(errVal != KErrNone)
+                {
+                //All targets might not be reset, so wait for some more time.
+                FormatMessageL(EHwrmMessageOpDebug,_L(" Wait for more time"));
+                CTestScheduler::StartAndStopL(KHwrmtestsLightMoreDelay);
+                errVal = GetLightStatusForSystemTarget( myLight, expectedStatus );
+                }
+			
+			if( errVal != KErrNone )
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status (0x%x)no OK"), aTarget );
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x, expected: 0x%x"), iMyStatus, expectedStatus );
+				errVal = KErrGeneral;				
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status (0x%x) not OK"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x, expected: 0x%x"), iMyStatus, expectedStatus);
+			errVal = KErrGeneral;	
+			}
+		}
+	else
+		{
+		
+		if( myLight->LightStatus( aTarget ) == expectedStatus )
+			{
+			CTestScheduler::StartAndStopL( duration + 100 );
+			
+			//check that target lights are off again
+			expectedStatus = CHWRMExtendedLight::ELightOff;
+			
+			if(myLight->LightStatus( aTarget ) != expectedStatus)
+				{
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Light status no OK"));
+				FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x, expected: 0x%x"), iMyStatus, expectedStatus );
+				errVal = KErrGeneral;				
+				}
+			}
+		else
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status (0x%x) not OK"), aTarget );
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x, expected: 0x%x"), iMyStatus, expectedStatus);
+			errVal = KErrGeneral;
+			}
+		}
+		
+		
+	//delete light instance
+    CleanupStack::PopAndDestroy( myLight );
+    return errVal;
+    
+    }
+
+
+
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightBlinkDurationTest
+// Call LightBlinkTest for multiple targets depending on selected API
+// -----------------------------------------------------------------------------
+//
+void CHwrmTestCaseController::LightBlinkOnOffTest( TInt aTargetMask )
+	{
+	TInt currentTarget(1);
+	TInt err( KErrNone );
+	TInt expectedResult( KErrNone );
+	
+	TBuf<100> msg( KNullDesC );
+	
+	_LIT( KSupportedMessageText, "HWRM [Light blink on/off test]: Target 0x%x supported"  );	
+	_LIT( KNotSupportedMessageText, "HWRM [Light blink on/off test]: Target 0x%x not supported"  );		
+
+	//loop through all possible targets
+	for( TInt i = 0; i < 31; i++ )
+		{
+		//if current target is not included in the given mask, or not defined in CenRep, KErrNot Supported is expected
+		if( ( aTargetMask & currentTarget ) & iSupportedTargets )
+			{
+			expectedResult = KErrNone;
+			msg.Format( KSupportedMessageText, currentTarget );
+			}
+		else
+			{
+			expectedResult = KErrNotSupported;
+			msg.Format( KNotSupportedMessageText, currentTarget );
+			}
+		
+		
+		if( iApiType == EHWRMApiTypeSAPI  )
+			{
+			err = LightBlinkOnOffTestSDK( currentTarget );
+			}
+		else if( (iApiType == EHWRMApiTypeXAPI) || (iApiType == EHWRMApiTypeEAPI) )
+			{
+			err = LightBlinkOnOffTestExtended( currentTarget );
+			}
+			
+			
+		LogResult( msg, err, expectedResult );
+
+		// shift the target ready for next loop
+        currentTarget <<= 1;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightBlinkOnOffTestSDK
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightBlinkOnOffTestSDK( TInt aTarget )
+    {
+    iObserver.InfoMessage(_L("LightBlinkOnOff"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Test case: HWRM SDK [LightBlinkOnOff], target: 0x%x"), aTarget );
+    
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMLight* myLight = CHWRMLight::NewLC();
+    
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Check light status"));
+    
+	if( aTarget & CHWRMLight::ESystemTarget )
+		{
+		errVal = GetLightStatusForSystemTarget( myLight, CHWRMLight::ELightOff );
+		if( errVal != KErrNone )
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off"));
+	    	TRAP(errVal, myLight->LightOffL( aTarget ));
+	    	CTestScheduler::StartAndStopL(100);
+	    	
+	    	if(errVal != KErrNone)
+	    		{
+	    		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+	    		CleanupStack::PopAndDestroy( myLight );
+	    		return errVal;	
+	    		}
+	    	
+			}
+		
+		}
+	else
+		{
+	    if(myLight->LightStatus( aTarget ) != CHWRMLight::ELightOff)
+	    	{
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off"));
+	    	TRAP(errVal, myLight->LightOffL( aTarget ));
+	    	CTestScheduler::StartAndStopL(100);
+	    	
+	    	if(errVal != KErrNone)
+	    		{
+	    		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+	    		CleanupStack::PopAndDestroy( myLight );
+	    		return errVal;	
+	    		}
+	    	}
+		}
+    	
+    	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights to blink"));
+
+	//set lights to blink for 5 sec
+	TRAP(errVal, myLight->LightBlinkL( aTarget, 5000, 500, 300, 100));
+
+	CTestScheduler::StartAndStopL(100);
+
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightBlinkL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+
+
+	//check that target lights are blinking
+	if( aTarget & CHWRMLight::ESystemTarget )
+		{
+		errVal = GetLightStatusForSystemTarget( myLight, CHWRMLight::ELightBlink );
+		
+		if(errVal != KErrNone )
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not Ok"));
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;
+			//wait before returning
+			CTestScheduler::StartAndStopL(5000);		
+			}
+		}
+	else
+		{
+		if(myLight->LightStatus( aTarget ) != CHWRMLight::ELightBlink)
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not Ok"));
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;
+			//wait before returning
+			CTestScheduler::StartAndStopL(5000);		
+			}
+		}
+
+	// delete light instance	
+    CleanupStack::PopAndDestroy( myLight );
+    return errVal;        
+    }
+  
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightBlinkOnOffTestExtended
+// 
+// -----------------------------------------------------------------------------
+//   
+ TInt CHwrmTestCaseController::LightBlinkOnOffTestExtended( TInt aTarget )
+    {
+    iObserver.InfoMessage(_L("LightBlinkOnOff"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Test case: HWRM Extended [LightBlinkOnOff], target: 0x%x"), aTarget );
+    
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMExtendedLight* myLight = NULL;
+
+	if ( iApiType == EHWRMApiTypeEAPI )
+    	{
+		myLight = CHWRMEnhancedLight::NewLC();
+    	}
+	else
+		{
+    	myLight = CHWRMExtendedLight::NewLC();
+		}
+    
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Check light status"));
+    
+	if( aTarget & CHWRMExtendedLight::ESystemTarget )
+		{
+		errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightOff );
+		if( errVal != KErrNone )
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off"));
+	    	TRAP(errVal, myLight->LightOffL( aTarget ));
+	    	CTestScheduler::StartAndStopL(100);
+	    	
+	    	if(errVal != KErrNone)
+	    		{
+	    		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+	    		CleanupStack::PopAndDestroy( myLight );
+	    		return errVal;	
+	    		}
+			}
+		}
+	else
+		{
+	    if(myLight->LightStatus( aTarget ) != CHWRMExtendedLight::ELightOff)
+	    	{
+	    	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off"));
+	    	TRAP(errVal, myLight->LightOffL( aTarget ));
+	    	CTestScheduler::StartAndStopL(100);
+	    	
+	    	if(errVal != KErrNone)
+	    		{
+	    		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightOffL() failed [%d]"), errVal);
+	    		CleanupStack::PopAndDestroy( myLight );
+	    		return errVal;	
+	    		}
+	    	}
+		}
+    	
+    	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights to blink"));
+
+	//set lights to blink for 5 sec
+	TRAP(errVal, myLight->LightBlinkL( aTarget, 5000, 500, 300, 100));
+
+	CTestScheduler::StartAndStopL(100);
+
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" iMyLight->LightBlinkL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+
+
+	//check that target lights are blinking
+	if( aTarget & CHWRMExtendedLight::ESystemTarget )
+		{
+		errVal = GetLightStatusForSystemTarget( myLight, CHWRMExtendedLight::ELightBlink );
+		
+		if(errVal != KErrNone )
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not Ok"));
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;
+			//wait before returning
+			CTestScheduler::StartAndStopL(5000);		
+			}
+		}
+	else
+		{
+		if( myLight->LightStatus( aTarget ) != CHWRMExtendedLight::ELightBlink)
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not Ok"));
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), iMyStatus);
+			errVal = KErrGeneral;
+			//wait before returning
+			CTestScheduler::StartAndStopL(5000);		
+			}
+		}
+		
+	// delete light instance	
+    CleanupStack::PopAndDestroy( myLight );
+    return errVal;
+        
+    }
+   
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightWithDifferentTargetsSDK
+// Set primary display lights off and on with different targets
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightWithDifferentTargetsSDK( )
+    {
+    iObserver.InfoMessage( _L( "LightWithDifferentTargetsSDK" ) );
+    FormatMessageL(EHwrmMessageOpDebug, _L( " Test case: HWRM SDK [LightWithDifferentTargets]" ) );
+    
+    TInt errVal( KErrNone );
+    CHWRMLight::TLightStatus myStatus;
+      
+    //create light instance
+    CHWRMLight* myLight = CHWRMLight::NewLC();
+    
+    //set lights off
+   	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off for primary display and keyboard"));
+   	TRAP( errVal, myLight->LightOffL( CHWRMLight::EPrimaryDisplayAndKeyboard ) );
+	CTestScheduler::StartAndStopL(100);
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" myLight->LightOffL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+
+    //set lights on
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary display and keyboard"));
+	//set lights on for 3 sec
+	TRAP(errVal, myLight->LightOnL(CHWRMLight::EPrimaryDisplayAndKeyboard, 3000));
+	CTestScheduler::StartAndStopL(100);
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" myLight->LightOnL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+		
+	//check that display lights are on
+	myStatus = myLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	if(myStatus != CHWRMLight::ELightOn)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+		FormatMessageL(EHwrmMessageOpDebug, _L( "LightWithDifferentTargetsSDK # Display Light status not OK!!! Status: 0x%x" ), myStatus );
+		CleanupStack::PopAndDestroy( myLight );	
+    	return KErrGeneral;
+		}
+
+	//check that keyboard lights are on
+	myStatus = myLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+	if(myStatus != CHWRMLight::ELightOn)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+		FormatMessageL(EHwrmMessageOpDebug,_L("LightWithDifferentTargetsSDK # Keyboard Light status not OK!!! Status:0x%x"), myStatus);
+		CleanupStack::PopAndDestroy( myLight ); 	
+    	return KErrGeneral;
+		}
+	
+	//wait that lights are off again		
+	CTestScheduler::StartAndStopL(3100);
+    
+    //set lights on for primary keyboard
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary keyboard"));
+	TRAP(errVal, myLight->LightOnL(CHWRMLight::EPrimaryKeyboard, 5000));
+	CTestScheduler::StartAndStopL(1000);
+	if (errVal != KErrNone)
+	    {
+		FormatMessageL(EHwrmMessageOpDebug,_L(" myLight->LightOnL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight ); 	
+    	return KErrGeneral;		
+	    }
+	
+	//check that keyboard lights are on
+	myStatus = myLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+	
+	if( myStatus == CHWRMLight::ELightOn )
+		{
+		//set lights to blink
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights to blink for primary keyboard"));
+		TRAP(errVal, myLight->LightBlinkL(CHWRMLight::EPrimaryKeyboard, 5000));
+		CTestScheduler::StartAndStopL(1000);
+		//check light status
+		myStatus = myLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+		if(myStatus != CHWRMLight::ELightBlink)
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+			FormatMessageL(EHwrmMessageOpDebug,_L("LightWithDifferentTargetsSDK # Keyboard light status: 0x%x"), myStatus);
+			errVal = KErrGeneral;
+			}
+		else
+		    {
+		    errVal = KErrNone;
+		    }
+		CTestScheduler::StartAndStopL(4100);	
+			
+		}
+	else
+		{
+		FormatMessageL(EHwrmMessageOpDebug, _L( " Light status not OK" ) );
+		FormatMessageL(EHwrmMessageOpDebug, _L( " Keyboard light status: 0x%x" ), myStatus );
+		errVal = KErrGeneral;
+		}
+   
+    CleanupStack::PopAndDestroy( myLight ); 
+     	
+    return errVal;   
+    }
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightWithDifferentTargetsExtended
+// Set primary display lights off and on with different targets
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightWithDifferentTargetsExtended( )
+    {
+    iObserver.InfoMessage( _L( "LightWithDifferentTargetsExtended" ) );
+    FormatMessageL(EHwrmMessageOpDebug, _L( " Test case: HWRM Extended [LightWithDifferentTargets]" ) );
+    
+    TInt errVal( KErrNone );
+    CHWRMExtendedLight::TLightStatus myStatus;
+      
+	  //create light instance
+	  CHWRMExtendedLight* myLight = NULL;
+	  
+	  if ( iApiType == EHWRMApiTypeEAPI )
+		  {
+		  myLight = CHWRMEnhancedLight::NewLC();
+		  }
+	  else
+		  {
+		  myLight = CHWRMExtendedLight::NewLC();
+		  }
+    
+    //set lights off
+   	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off for primary display and keyboard"));
+   	TRAP( errVal, myLight->LightOffL( CHWRMExtendedLight::EPrimaryDisplayAndKeyboard ) );
+	CTestScheduler::StartAndStopL(100);
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" myLight->LightOffL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+
+    //set lights on
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary display and keyboard"));
+	//set lights on for 3 sec
+	TRAP(errVal, myLight->LightOnL(CHWRMExtendedLight::EPrimaryDisplayAndKeyboard, 3000));
+	CTestScheduler::StartAndStopL(100);
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" myLight->LightOnL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight );
+		return errVal;
+		}
+		
+	//check that display lights are on
+	myStatus = myLight->LightStatus(CHWRMExtendedLight::EPrimaryDisplay);
+	if(myStatus != CHWRMExtendedLight::ELightOn)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+		FormatMessageL(EHwrmMessageOpDebug, _L( "LightWithDifferentTargetsExtended # Display Light status not OK!!! Status: 0x%x" ), myStatus );
+		CleanupStack::PopAndDestroy( myLight );	
+    	return KErrGeneral;
+		}
+
+	//check that keyboard lights are on
+	myStatus = myLight->LightStatus(CHWRMExtendedLight::EPrimaryKeyboard);
+	if(myStatus != CHWRMExtendedLight::ELightOn)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+		FormatMessageL(EHwrmMessageOpDebug,_L("LightWithDifferentTargetsExtended # Keyboard Light status not OK!!! Status:0x%x"), myStatus);
+		CleanupStack::PopAndDestroy( myLight ); 	
+    	return KErrGeneral;
+		}
+	
+	//wait that lights are off again		
+	CTestScheduler::StartAndStopL(3100);
+    
+    //set lights on for primary keyboard
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary keyboard"));
+	TRAP(errVal, myLight->LightOnL(CHWRMExtendedLight::EPrimaryKeyboard, 5000));
+	CTestScheduler::StartAndStopL(1000);
+	if (errVal != KErrNone)
+	    {
+		FormatMessageL(EHwrmMessageOpDebug,_L(" myLight->LightOnL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight ); 	
+    	return KErrGeneral;		
+	    }
+	
+	//check that keyboard lights are on
+	myStatus = myLight->LightStatus(CHWRMExtendedLight::EPrimaryKeyboard);
+	
+	if( myStatus == CHWRMExtendedLight::ELightOn )
+		{
+		//set lights to blink
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights to blink for primary keyboard"));
+		TRAP(errVal, myLight->LightBlinkL(CHWRMExtendedLight::EPrimaryKeyboard, 5000));
+		CTestScheduler::StartAndStopL(1000);
+		//check light status
+		myStatus = myLight->LightStatus(CHWRMExtendedLight::EPrimaryKeyboard);
+		if(myStatus != CHWRMExtendedLight::ELightBlink)
+			{
+			FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+			FormatMessageL(EHwrmMessageOpDebug,_L("LightWithDifferentTargetsSDK # Keyboard light status: 0x%x"), myStatus);
+			errVal = KErrGeneral;
+			}
+		else
+		    {
+		    errVal = KErrNone;
+		    }
+		CTestScheduler::StartAndStopL(4100);	
+			
+		}
+	else
+		{
+		FormatMessageL(EHwrmMessageOpDebug, _L( " Light status not OK" ) );
+		FormatMessageL(EHwrmMessageOpDebug, _L( " Keyboard light status: 0x%x" ), myStatus );
+		errVal = KErrGeneral;
+		}
+   
+    CleanupStack::PopAndDestroy( myLight ); 
+     	
+    return errVal;
+    }
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightWithInvalidDurationSDK()
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightWithInvalidDurationSDK( )
+    {
+    iObserver.InfoMessage(_L("LightWithInvalidDurationSDK"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Test case: HWRM SDK [LightWithInvalidDuration]"));
+    
+    CHWRMLight::TLightStatus myStatus;
+    TInt retVal1(KErrNone);
+    TInt retVal2(KErrNone);
+    TInt retVal3(KErrNone);
+    TInt retVal4(KErrNone);
+    TInt maxDuration(KHWRMLightMaxDuration);
+    TInt infDuration(KHWRMInfiniteDuration);
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMLight* myLight = CHWRMLight::NewLC();
+    
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off for primary display and keyboard"));
+    //Set lights off for infinite duration
+   	TRAP(errVal, myLight->LightOffL(CHWRMLight::EPrimaryDisplayAndKeyboard));
+   	CTestScheduler::StartAndStopL(100);
+
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary display and keyboard"));
+	//set lights on for too long duration KHWRMLightMaxDuration+1 //KErrArgument
+	TRAP(retVal1, myLight->LightOnL(CHWRMLight::EPrimaryDisplayAndKeyboard, (maxDuration+1)));
+	CTestScheduler::StartAndStopL(100);
+
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary display and keyboard"));	
+	//set lights on for infinite duration KHWRMInfiniteDuration//KErrArgument
+	TRAP(retVal2, myLight->LightOnL(CHWRMLight::EPrimaryDisplayAndKeyboard, (infDuration-1)));
+	CTestScheduler::StartAndStopL(100);
+
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary display and keyboard"));	
+	myLight->LightOnL(CHWRMLight::EPrimaryDisplayAndKeyboard, KHWRMInfiniteDuration);
+	CTestScheduler::StartAndStopL(100);
+	
+	//check light status for primary display
+	myStatus = myLight->LightStatus( CHWRMLight::EPrimaryDisplay );				
+	if( myStatus != CHWRMLight::ELightOn )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Primary display light status: 0x%x"), myStatus);
+		CleanupStack::PopAndDestroy( myLight );
+		return KErrGeneral;
+		}
+	//check light status for primary keyboard
+	myStatus = myLight->LightStatus( CHWRMLight::EPrimaryKeyboard );				
+	if( myStatus != CHWRMLight::ELightOn )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Primary keyboard light status: 0x%x"), myStatus);
+		CleanupStack::PopAndDestroy( myLight );
+		return KErrGeneral;
+		}
+		
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off for primary display and keyboard"));
+	//set lights off for too long duration KHWRMInfiniteDuration-1 //KErrArgument
+	TRAP(retVal3, myLight->LightOffL(CHWRMLight::EPrimaryDisplayAndKeyboard, (infDuration-1)));
+	CTestScheduler::StartAndStopL(100);
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off for primary display and keyboard"));
+	//set lights off for too long duration KHWRMLightMaxDuration+1 //KErrArgument
+	TRAP(retVal4, myLight->LightOffL(CHWRMLight::EPrimaryDisplayAndKeyboard, (maxDuration+1)));
+	CTestScheduler::StartAndStopL(100);
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" ret1[%d], ret2[%d], ret3[%d], ret4[%d]"), retVal1, retVal2, retVal3, retVal4);		
+	
+	if (retVal1 != KErrArgument || retVal2 != KErrArgument || retVal3 != KErrArgument || retVal4 != KErrArgument)		
+		{	
+		errVal = KErrGeneral;	
+		}
+	else
+		{			
+		errVal = KErrNone;   
+		}
+	  
+    CleanupStack::PopAndDestroy( myLight );
+     	
+    return errVal;	
+    
+    }
+    
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightWithInvalidDurationExtended()
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightWithInvalidDurationExtended()
+    {
+    iObserver.InfoMessage(_L("LightWithInvalidDurationExtended"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Test case: HWRM Extended [LightWithInvalidDuration]"));
+    
+    CHWRMExtendedLight::TLightStatus myStatus;
+    TInt retVal1(KErrNone);
+    TInt retVal2(KErrNone);
+    TInt retVal3(KErrNone);
+    TInt retVal4(KErrNone);
+    TInt maxDuration(KHWRMLightMaxDuration);
+    TInt infDuration(KHWRMInfiniteDuration);
+    TInt errVal = KErrNone;
+    
+    //create light instance
+    CHWRMExtendedLight* myLight = NULL;
+
+	if ( iApiType == EHWRMApiTypeEAPI )
+    	{
+		myLight = CHWRMEnhancedLight::NewLC();
+    	}
+	else
+		{
+    	myLight = CHWRMExtendedLight::NewLC();
+		}
+    
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off for primary display and keyboard"));
+    //Set lights off for infinite duration
+   	TRAP(errVal, myLight->LightOffL(CHWRMExtendedLight::EPrimaryDisplayAndKeyboard));
+   	CTestScheduler::StartAndStopL(100);
+
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary display and keyboard"));
+	//set lights on for too long duration KHWRMLightMaxDuration+1 //KErrArgument
+	TRAP(retVal1, myLight->LightOnL(CHWRMExtendedLight::EPrimaryDisplayAndKeyboard, (maxDuration+1)));
+	CTestScheduler::StartAndStopL(100);
+
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary display and keyboard"));	
+	//set lights on for infinite duration KHWRMInfiniteDuration//KErrArgument
+	TRAP(retVal2, myLight->LightOnL(CHWRMExtendedLight::EPrimaryDisplayAndKeyboard, (infDuration-1)));
+	CTestScheduler::StartAndStopL(100);
+
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary display and keyboard"));	
+	myLight->LightOnL(CHWRMExtendedLight::EPrimaryDisplayAndKeyboard, KHWRMInfiniteDuration);
+	CTestScheduler::StartAndStopL(100);
+	
+	//check light status for primary display
+	myStatus = myLight->LightStatus( CHWRMExtendedLight::EPrimaryDisplay );				
+	if( myStatus != CHWRMExtendedLight::ELightOn )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Primary display light status: 0x%x"), myStatus);
+		CleanupStack::PopAndDestroy( myLight );
+		return KErrGeneral;
+		}
+	//check light status for primary keyboard
+	myStatus = myLight->LightStatus( CHWRMExtendedLight::EPrimaryKeyboard );				
+	if( myStatus != CHWRMExtendedLight::ELightOn )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Primary keyboard light status: 0x%x"), myStatus);
+		CleanupStack::PopAndDestroy( myLight );
+		return KErrGeneral;
+		}
+		
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off for primary display and keyboard"));
+	//set lights off for too long duration KHWRMInfiniteDuration-1 //KErrArgument
+	TRAP(retVal3, myLight->LightOffL(CHWRMExtendedLight::EPrimaryDisplayAndKeyboard, (infDuration-1)));
+	CTestScheduler::StartAndStopL(100);
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off for primary display and keyboard"));
+	//set lights off for too long duration KHWRMLightMaxDuration+1 //KErrArgument
+	TRAP(retVal4, myLight->LightOffL(CHWRMExtendedLight::EPrimaryDisplayAndKeyboard, (maxDuration+1)));
+	CTestScheduler::StartAndStopL(100);
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" ret1[%d], ret2[%d], ret3[%d], ret4[%d]"), retVal1, retVal2, retVal3, retVal4);		
+	
+	if (retVal1 != KErrArgument || retVal2 != KErrArgument || retVal3 != KErrArgument || retVal4 != KErrArgument)		
+		{	
+		errVal = KErrGeneral;	
+		}
+	else
+		{			
+		errVal = KErrNone;   
+		}
+	  
+    CleanupStack::PopAndDestroy( myLight );
+     	
+    return errVal;	
+    }
+    
+   
+    
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightIntensitySDK()
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightIntensitySDK( )
+    {
+    //iObserver.InfoMessage(_L("LightIntensity"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Test case: HWRM SDK [LightWithIntensity]"));
+    
+    CHWRMLight::TLightStatus myStatus;
+    TInt defIntensity( KHWRMDefaultIntensity );
+    TInt maxIntensity( KHWRMLightMaxIntensity );
+    TInt minIntensity( KHWRMLightMinIntensity );
+    
+    TInt errVal( KErrNone );
+    
+    //create light instance
+    CHWRMLight* myLight = CHWRMLight::NewLC();
+    
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off for primary display and keyboard"));
+    //Set lights off for infinite duration
+   	TRAP(errVal, myLight->LightOffL(CHWRMLight::EPrimaryDisplayAndKeyboard));
+   	CTestScheduler::StartAndStopL(100);
+
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary display"));
+	
+	TRAP( errVal, myLight->LightOnL( CHWRMLight::EPrimaryDisplay, 2000, defIntensity, ETrue ) );
+	CTestScheduler::StartAndStopL(100);
+	if( errVal != KErrNone )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" myLight->LightOnL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight ); 	
+    	return errVal;	
+		}
+
+    myStatus = myLight->LightStatus( CHWRMLight::EPrimaryDisplay );		
+	if ( myStatus != CHWRMLight::ELightOn )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), myStatus);
+		CleanupStack::PopAndDestroy( myLight ); 	
+		return KErrGeneral;
+		}
+	
+	CTestScheduler::StartAndStopL(2000);
+	
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary keyboard"));	
+	
+	TRAP( errVal, myLight->LightOnL( CHWRMLight::EPrimaryKeyboard, 2000, maxIntensity, ETrue ) );
+	CTestScheduler::StartAndStopL(100);
+	
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" myLight->LightOnL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight ); 	
+    	return errVal;		
+		}
+
+    myStatus = myLight->LightStatus( CHWRMLight::EPrimaryKeyboard );		
+	if(myStatus != CHWRMLight::ELightOn)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Keyboard light status: 0x%x"), myStatus);
+		CleanupStack::PopAndDestroy( myLight ); 	
+		return KErrGeneral;
+		}
+	
+	//wait that lights are off
+	CTestScheduler::StartAndStopL(2000);
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary display"));	
+	
+	TRAP(errVal, myLight->LightOnL(CHWRMLight::EPrimaryDisplay, 2000, minIntensity, ETrue));
+	CTestScheduler::StartAndStopL(100);
+	
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" myLight->LightOnL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight ); 	
+    	return errVal;	
+		}
+
+    myStatus = myLight->LightStatus( CHWRMLight::EPrimaryDisplay );	
+	if( myStatus != CHWRMLight::ELightOn )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), myStatus);
+		CleanupStack::PopAndDestroy( myLight ); 	
+		return KErrGeneral;
+		}
+		
+	CTestScheduler::StartAndStopL(2000);
+		
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for keyboard display (-100)")); //KErrArgument	
+	
+	TRAP(errVal, myLight->LightOnL(CHWRMLight::EPrimaryDisplay, 2000, -100, ETrue));
+	CTestScheduler::StartAndStopL(100);
+	if( errVal == KErrArgument )
+	    {
+		errVal = KErrNone;
+	    }
+			
+    CleanupStack::PopAndDestroy( myLight ); 
+     	
+    return errVal;	
+ 
+    }
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightIntensityExtended()
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::LightIntensityExtended( )
+    {
+    iObserver.InfoMessage(_L("LightIntensityExtended"));
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Test case: HWRM Extended [LightWithIntensity]"));
+    
+    CHWRMExtendedLight::TLightStatus myStatus;
+    TInt defIntensity( KHWRMDefaultIntensity );
+    TInt maxIntensity( KHWRMLightMaxIntensity );
+    TInt minIntensity( KHWRMLightMinIntensity );
+    
+    TInt errVal( KErrNone );
+    
+    //create light instance
+    CHWRMExtendedLight* myLight = NULL;
+
+	if ( iApiType == EHWRMApiTypeEAPI )
+    	{
+		myLight = CHWRMEnhancedLight::NewLC();
+    	}
+	else
+		{
+    	myLight = CHWRMExtendedLight::NewLC();
+		}
+    
+    FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights off for primary display and keyboard"));
+    //Set lights off for infinite duration
+   	TRAP(errVal, myLight->LightOffL(CHWRMExtendedLight::EPrimaryDisplayAndKeyboard));
+   	CTestScheduler::StartAndStopL(100);
+
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary display"));
+	
+	TRAP( errVal, myLight->LightOnL( CHWRMExtendedLight::EPrimaryDisplay, 2000, defIntensity, ETrue ) );
+	CTestScheduler::StartAndStopL(100);
+	if( errVal != KErrNone )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" myLight->LightOnL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight ); 	
+    	return errVal;	
+		}
+
+    myStatus = myLight->LightStatus( CHWRMExtendedLight::EPrimaryDisplay );		
+	if ( myStatus != CHWRMExtendedLight::ELightOn )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), myStatus);
+		CleanupStack::PopAndDestroy( myLight ); 	
+		return KErrGeneral;
+		}
+	
+	CTestScheduler::StartAndStopL(2000);
+	
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary keyboard"));	
+	
+	TRAP( errVal, myLight->LightOnL( CHWRMExtendedLight::EPrimaryKeyboard, 2000, maxIntensity, ETrue ) );
+	CTestScheduler::StartAndStopL(100);
+	
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" myLight->LightOnL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight ); 	
+    	return errVal;		
+		}
+
+    myStatus = myLight->LightStatus( CHWRMExtendedLight::EPrimaryKeyboard );		
+	if(myStatus != CHWRMExtendedLight::ELightOn)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Keyboard light status: 0x%x"), myStatus);
+		CleanupStack::PopAndDestroy( myLight ); 	
+		return KErrGeneral;
+		}
+	
+	//wait that lights are off
+	CTestScheduler::StartAndStopL(2000);
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for primary display"));	
+	
+	TRAP(errVal, myLight->LightOnL(CHWRMExtendedLight::EPrimaryDisplay, 2000, minIntensity, ETrue));
+	CTestScheduler::StartAndStopL(100);
+	
+	if(errVal != KErrNone)
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" myLight->LightOnL() failed [%d]"), errVal);
+		CleanupStack::PopAndDestroy( myLight ); 	
+    	return errVal;	
+		}
+
+    myStatus = myLight->LightStatus( CHWRMExtendedLight::EPrimaryDisplay );	
+	if( myStatus != CHWRMExtendedLight::ELightOn )
+		{
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Light status not OK"));
+		FormatMessageL(EHwrmMessageOpDebug,_L(" Display light status: 0x%x"), myStatus);
+		CleanupStack::PopAndDestroy( myLight ); 	
+		return KErrGeneral;
+		}
+		
+	CTestScheduler::StartAndStopL(2000);
+		
+	FormatMessageL(EHwrmMessageOpDebug,_L(" Set lights on for keyboard display (-100)")); //KErrArgument	
+	
+	TRAP(errVal, myLight->LightOnL(CHWRMExtendedLight::EPrimaryDisplay, 2000, -100, ETrue));
+	CTestScheduler::StartAndStopL(100);
+	if( errVal == KErrArgument )
+	    {
+		errVal = KErrNone;
+	    }
+			
+    CleanupStack::PopAndDestroy( myLight ); 
+     	
+    return errVal;	
+    }
+    
+    
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::LightWithInvalidTarget
+// 
+// -----------------------------------------------------------------------------
+//
+/*TInt CHwrmTestCaseController::LightWithInvalidTarget( )
+    {
+    iObserver.InfoMessage(_L("LightWithInvalidTarget"));
+    TInt retVal1(0), retVal2(0);
+    CHWRMLight::TLightTarget invalidTarget = 20; 
+    
+    errVal = KErrNone;
+    //create light instance
+    iMyLight = CHWRMLight::NewL(this);
+    
+    //Set lights off for infinite duration
+   	iMyLight->LightOffL(CHWRMLight::EPrimaryDisplayAndKeyboard);
+	
+	//try to set lights on for invalid target //KErrNotSupported
+	TRAP(retVal1, iMyLight->LightOnL(invalidTarget, KHWRMLightMaxDuration));
+		
+	iMyLight->LightOnL(CHWRMLight::EPrimaryDisplayAndKeyboard, KHWRMInfiniteDuration);
+	CTestScheduler::StartAndStopL(1000);
+		
+	if(iMyStatus != ELightOn)
+		{
+			delete iMyLight;
+			return (errVal = KErrGeneral);
+		}
+		
+	//try to set lights off for invalid target //KErrNotSupported
+	TRAP(retVal2, iMyLight->LightOffL(invalidTarget, KHWRMInfiniteDuration);
+			
+	if (retVal1 == KErrNotSupported && retVal2 == KErrNotSupported)		
+		{
+			errVal = KErrNone;	
+		}
+	else
+		{
+			errVal = KErrGeneral;	
+		}
+	  
+    delete iMyLight; 	
+    return errVal;	    
+    
+    }*/
+
+void CHwrmTestCaseController::FormatMessageL(THwrmMessageOp aOp, const TDesC& aMessage)
+	{
+	SendMessage(aOp,aMessage);
+	}
+
+void CHwrmTestCaseController::FormatMessageL(THwrmMessageOp aOp, const TDesC& aMessage, TInt aArg1)
+	{
+	HBufC* message = HBufC::NewLC(aMessage.Length() + 10);
+	message->Des().Format(aMessage,aArg1);
+	SendMessage(aOp,*message);
+	CleanupStack::PopAndDestroy(message);
+	}
+
+void CHwrmTestCaseController::FormatMessageL(THwrmMessageOp aOp, const TDesC& aMessage, TInt aArg1, TInt aArg2)
+	{
+	HBufC* message = HBufC::NewLC(aMessage.Length() + 20);
+	message->Des().Format(aMessage,aArg1,aArg2);
+	SendMessage(aOp,*message);
+	CleanupStack::PopAndDestroy(message);
+	}
+
+void CHwrmTestCaseController::FormatMessageL(THwrmMessageOp aOp, const TDesC& aMessage, TInt aArg1, TInt aArg2, TInt aArg3)
+	{
+	HBufC* message = HBufC::NewLC(aMessage.Length() + 30);
+	message->Des().Format(aMessage,aArg1,aArg2,aArg3);
+	SendMessage(aOp,*message);
+	CleanupStack::PopAndDestroy(message);
+	}
+
+void CHwrmTestCaseController::FormatMessageL(THwrmMessageOp aOp, const TDesC& aMessage, TInt aArg1, TInt aArg2, TInt aArg3, TInt aArg4)
+	{
+	HBufC* message = HBufC::NewLC(aMessage.Length() + 40);
+	message->Des().Format(aMessage,aArg1,aArg2,aArg3,aArg4);
+	SendMessage(aOp,*message);
+	CleanupStack::PopAndDestroy(message);
+	}
+
+void CHwrmTestCaseController::FormatMessageL(THwrmMessageOp aOp, const TDesC& aMessage, const TDesC* aArg1)
+	{
+	HBufC* message = HBufC::NewLC(aMessage.Length() + aArg1->Length() + 10);
+	message->Des().Format(aMessage,aArg1);
+	SendMessage(aOp,*message);
+	CleanupStack::PopAndDestroy(message);
+	}
+
+void CHwrmTestCaseController::FormatMessageL(THwrmMessageOp aOp, const TDesC& aMessage, const TDesC* aArg1, TInt aArg2, TInt aArg3)
+	{
+	HBufC* message = HBufC::NewLC(aMessage.Length() + aArg1->Length() + 20);
+	message->Des().Format(aMessage,aArg1,aArg2,aArg3);
+	SendMessage(aOp,*message);
+	CleanupStack::PopAndDestroy(message);
+	}
+
+// NOTE: this is not very elegant, but it's just test code... improve in future if needed
+void CHwrmTestCaseController::SendMessage(THwrmMessageOp aOp, const TDesC& aMessage)
+	{
+	switch(aOp)
+		{
+	case EHwrmMessageOpInfo:
+		iObserver.InfoMessage(aMessage);
+		break;
+	case EHwrmMessageOpLog:
+		iObserver.LogMessage(aMessage);
+		break;
+	case EHwrmMessageOpDebug:
+		iObserver.DebugMessage(aMessage);
+		break;
+	default:
+		break;	
+		}	
+	}
+	
+//
+//
+//
+
+/* TeK -> */
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::RunSlaveMode
+//
+// This method is called when application is started in SLAVE-mode
+// 
+// -----------------------------------------------------------------------------
+//
+void CHwrmTestCaseController::RunSlaveMode()
+{
+	if (iMcFramework == NULL)
+		{
+		TRAPD(err,iMcFramework = CMcFramework::NewL());
+		if (err)
+			{
+			_LIT(KErrorMsg,"Failed to instantiate CMcFramework. Aborting multiclient cases (slave mode)");
+			iObserver.LogMessage(KErrorMsg);
+			return;
+			}
+		}
+		
+	TInt tcase = 0;
+	TInt recStat = KErrNone;	  
+	
+	while (tcase != EHWRMQuitTest)
+	{
+		tcase = iMcFramework->WaitTestToStart();
+		
+		if (tcase != EHWRMQuitTest)
+		{
+			switch(tcase)
+			{
+				case (EMultiClientCase1):
+					recStat = MC_Primary_display_light_S();
+					iMcFramework->StepExecuted(recStat);					
+					break;
+				case (EMultiClientCase2):
+					recStat = MC_Display_on_and_keyboard_blink_S();
+					iMcFramework->StepExecuted(recStat);					
+					break;
+				case (EMultiClientCase3):
+					recStat = MC_Display_on_and_keyboard_reserved_S();	
+					iMcFramework->StepExecuted(recStat);					
+					break;
+				case (EMultiClientCase4):
+					recStat = MC_Display_and_keyboard_blink_S();
+					iMcFramework->StepExecuted(recStat);
+					break;
+				case (EMultiClientCase5):
+					recStat = MC_Vibra_Basic_Usage_S();
+					iMcFramework->StepExecuted(recStat);
+					break;
+				case (EMultiClientCase6):
+					recStat = Verify_MCFramework_S();
+					iMcFramework->StepExecuted(recStat);
+					break;
+				case (EMultiClientCase7):
+					recStat = MC_Combined_light_and_vibra_usage_S();
+					iMcFramework->StepExecuted(recStat);
+					break;
+				case (EMultiClientCase8):
+					recStat = MC_Combined_light_and_vibra_usage_2_S();
+					iMcFramework->StepExecuted(recStat);
+					break;
+				case (EMultiClientCase9):
+					recStat = MC_FmTx_Basic_Usage_S();
+					iMcFramework->StepExecuted(recStat);
+					break;		
+				case (EMultiClientCase14):
+					recStat = MC_Display_RGB_S();
+					iMcFramework->StepExecuted(recStat);
+					break;		
+				default:
+					iMcFramework->StepExecuted(KErrGeneral);	
+			}
+		}
+				
+	}
+}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::Verify_MCFramework_S
+// Slave side test case to verify McFramework functionality 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::Verify_MCFramework_S()
+{
+	
+	FormatMessageL(EHwrmMessageOpDebug,_L("Verify_MCFramework_S() starting"));
+
+	CTestScheduler::StartAndStopL(1000); // Testin suoritusta
+
+	iMcFramework->StepExecuted(KErrNone); // palautetaan testistepin tulos
+	TInt execStep = iMcFramework->WaitNextTestStep(); // mennään odottamaan seuraavaa steppiä
+	
+	CTestScheduler::StartAndStopL(1000); // Testin suoritus jatkuu
+	
+	//iMcFramework->StepExecuted(KErrNone); last step execution is reported in RunSlaveMode()
+		  								
+	FormatMessageL(EHwrmMessageOpDebug,_L("Verify_MCFramework_S() done"));
+	
+	return KErrNone;
+
+}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MC_Primary_display_light_S
+// Light usage with two applications / This application is on the background
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::MC_Primary_display_light_S()
+    {
+    
+    FormatMessageL(EHwrmMessageOpDebug,_L("MC_Primary_display_light_S()"));
+    TInt iErrVal = KErrNone;
+    CHWRMLight::TLightStatus currStatus;
+    CHWRMLight::TLightStatus origStatus;
+       
+    //create light instance
+    TRAP(iErrVal, iMyLight = CHWRMLight::NewL(this));	    
+    
+    if (iErrVal == KErrNone)
+    {
+    
+	    origStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	    
+	    //reserve light, Restore state after release = True, Force CoeNoeEnvOn = True
+		TRAP(iErrVal, iMyLight->ReserveLightL(CHWRMLight::EPrimaryDisplay, ETrue, ETrue));
+		
+		if (iErrVal == KErrNone)
+		{
+			// Reservation was OK
+			
+			// Set primary display light blinking
+			iErrVal = TestLightBlink(CHWRMLight::EPrimaryDisplay, 10000, 1000, 1000, 100);
+			
+			if (iErrVal == KErrNone)
+			{
+				// Check light status
+				currStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);	
+					
+				if (currStatus == CHWRMLight::ELightBlink )
+				{
+					/* Light status is OK */
+					
+					iMcFramework->StepExecuted(KErrNone);
+					iErrVal = iMcFramework->WaitNextTestStep();
+					
+					if (iErrVal == KErrNone)
+					{			
+						/* Test execution was OK in peer-application */
+						
+						/* Check current light status */
+						currStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+						
+						if (currStatus == CHWRMLight::ELightBlink)
+						{
+							/* OK, light is still blinking */
+							
+							/* Wait 10 seconds */
+							CTestScheduler::StartAndStopL(10000);
+							
+							// Release light, then status should return in state as it was before reservation
+							iMyLight->ReleaseLight(CHWRMLight::EPrimaryDisplay);
+							
+							CTestScheduler::StartAndStopL(2000);
+							/* Check light status */
+							currStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);			
+							
+							if(currStatus == origStatus)
+							{
+								/* OK, light is not blinking anymore */
+								iErrVal = KErrNone;	
+								//iMcFramework->StepExecuted(KErrNone); last step execution is reported in RunSlaveMode()
+							}
+							else
+							{
+								FormatMessageL(EHwrmMessageOpDebug,_L("Wrong light status %d. Expected original: %d"), currStatus, origStatus);
+								iErrVal = KErrGeneral; 
+							}
+							
+						}
+						else
+						{
+							// wrong light status
+							FormatMessageL(EHwrmMessageOpDebug,_L("Wrong light status:%d. Expected [Blink]"), currStatus);
+							iErrVal = KErrGeneral; 
+						}
+					}
+					else
+					{
+						// execution failed in peer-application
+						FormatMessageL(EHwrmMessageOpDebug,_L("Execution failed peer. Error:%d"), iErrVal); 	
+					}
+				}
+				else
+				{
+					FormatMessageL(EHwrmMessageOpDebug,_L("Wrong light status [%d]. Expected [Blink]"), currStatus);
+					iErrVal = KErrGeneral; 
+				}			
+			}
+			else
+			{
+				// Set light blinking failed
+				FormatMessageL(EHwrmMessageOpDebug,_L("Set light blink Error:%d"),iErrVal);
+			}
+		}
+		else
+		{
+			FormatMessageL(EHwrmMessageOpDebug,_L("ReserveLightL returned error %d"), iErrVal);	
+		}
+    }
+    delete iMyLight;    	
+    return iErrVal;
+    
+    }
+    
+    
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MC_Display_on_and_keyboard_blink_S
+// Light usage with two applications
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::MC_Display_on_and_keyboard_blink_S()
+    {
+    FormatMessageL(EHwrmMessageOpDebug,_L("MC_Display_on_and_keyboard_blink_S()"));
+    TInt iErrVal = KErrNone;
+    CHWRMLight::TLightStatus currKeybStatus;
+    CHWRMLight::TLightStatus currDispStatus;    
+    CHWRMLight::TLightStatus origKeybStatus;
+    CHWRMLight::TLightStatus origDispStatus;   
+        
+    TRAP(iErrVal, iMyLight = CHWRMLight::NewL(this));	    
+    
+    if (iErrVal == KErrNone)
+    {
+    
+	    origKeybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+        if(origKeybStatus == CHWRMLight::ELightStatusUnknown)
+            {
+            origKeybStatus = CHWRMLight::ELightOff;
+            }
+        
+	    origDispStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);        
+        if(origDispStatus == CHWRMLight::ELightStatusUnknown)
+            {
+            origDispStatus = CHWRMLight::ELightOff;
+            }
+	    
+	    //reserve light
+		TRAP(iErrVal, iMyLight->ReserveLightL(CHWRMLight::EPrimaryKeyboard, ETrue, ETrue));
+		
+		if (iErrVal == KErrNone)
+		{
+			iErrVal = TestLightBlink(CHWRMLight::EPrimaryKeyboard, 10000, 1000, 1000, 100);
+			
+			if (iErrVal == KErrNone)
+			{
+				currKeybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+				currDispStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+				
+				if(currKeybStatus == CHWRMLight::ELightBlink && currDispStatus == origDispStatus)
+				{
+					/* Step executed succesfully */
+					
+					iMcFramework->StepExecuted(KErrNone);
+					iErrVal = iMcFramework->WaitNextTestStep();			
+				
+					if (iErrVal == KErrNone)
+					{
+						
+						currKeybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+						currDispStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);					
+						
+						if(currKeybStatus == CHWRMLight::ELightBlink /*&& currDispStatus == CHWRMLight::ELightOn*/) //SELVITÄ ONKO OK?
+						{
+									
+							CTestScheduler::StartAndStopL(5000);
+							
+							iMyLight->ReleaseLight(CHWRMLight::EPrimaryKeyboard); // Muutos 22.6. TeK
+												
+							currKeybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+							currDispStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);									
+							
+							if(currKeybStatus == origKeybStatus /*&& currDispStatus == origDispStatus*/)
+							{				
+								
+								//iMcFramework->StepExecuted(KErrNone); last step execution is reported in RunSlaveMode()
+								iErrVal = KErrNone;
+							}
+							else
+							{
+								FormatMessageL(EHwrmMessageOpDebug,_L("Wrong status Display:%d, Keyboard:%d"),currDispStatus, currKeybStatus);
+								iErrVal = KErrGeneral;
+							}
+							
+							
+						}
+						else
+						{
+							FormatMessageL(EHwrmMessageOpDebug,_L("H\xd6\xd6\xd6Wrong status. Expected:%d, received:%d"),CHWRMLight::ELightBlink, currKeybStatus);
+							iErrVal = KErrGeneral;
+						}
+						
+					}
+					else
+					{
+						// testi feilasi masterissa
+						FormatMessageL(EHwrmMessageOpDebug,_L("Error from peer application:%d"),iErrVal);
+					}	
+				}
+				else
+				{
+					// väärä status
+					FormatMessageL(EHwrmMessageOpDebug,_L("Wrong status! Display:%d, Keyboard:%d"),currDispStatus, currKeybStatus);
+					iErrVal = KErrGeneral;
+				}		
+			}
+			else
+			{
+				// Blink failed
+				FormatMessageL(EHwrmMessageOpDebug,_L("Set keyboard light blink failed:%d"),iErrVal);
+			}		
+		}
+		else
+		{
+			// valon varaus epäonnistui
+			FormatMessageL(EHwrmMessageOpDebug,_L("Light reservation failed"),iErrVal);
+		}
+    }
+    
+    delete iMyLight;    	
+    return iErrVal;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MC_Display_on_and_keyboard_reserved_S
+// Light usage with two applications
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::MC_Display_on_and_keyboard_reserved_S()
+    {
+    FormatMessageL(EHwrmMessageOpDebug,_L("MC_Display_on_and_keyboard_reserved_S()"));
+    TInt iErrVal = KErrNone;
+    CHWRMLight::TLightStatus currKeyStatus;    
+    CHWRMLight::TLightStatus currDispStatus;
+    CHWRMLight::TLightStatus origKeybStatus;
+    CHWRMLight::TLightStatus origDispStatus;
+    
+    TRAP(iErrVal, iMyLight = CHWRMLight::NewL(this));	    
+    
+    if (iErrVal == KErrNone)
+    {
+    
+		origKeybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+	    origDispStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	    
+	    //reserve light
+	    TRAP(iErrVal, iMyLight->ReserveLightL(CHWRMLight::EPrimaryDisplayAndKeyboard, ETrue, EFalse));
+	    
+	    if(iErrVal != KErrNone /*== KErrNotReady*/)
+	    {
+	    	// Reservation cannot succeed because trying to reserve while on background
+	    	
+	    	iErrVal = TestLightBlink(CHWRMLight::EPrimaryDisplayAndKeyboard);
+	    	
+	    	if(iErrVal != KErrNone /*== KErrInUse*/ )
+	    	{
+	    		// Cannot set light because foreground application has reserved display and keyboard
+	    		
+				currKeyStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+	    		currDispStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	    		
+	    		if ( origKeybStatus == currKeyStatus && origDispStatus == currDispStatus ) 
+	    		{
+	    			// Status has not changed -> OK
+	    			
+		    		CTestScheduler::StartAndStopL(2000);
+		    		iMyLight->ReleaseLight(CHWRMLight::EPrimaryDisplayAndKeyboard);
+	    			//iMcFramework->StepExecuted(KErrNone); last step execution is reported in RunSlaveMode()			
+	    			iErrVal = KErrNone;
+	    		}
+	    		else
+	    		{
+	    			// Status has changed -> error
+	    			FormatMessageL(EHwrmMessageOpDebug,_L("Unexpected status change :From:%d,%d To:%d,%d"),origKeybStatus, origDispStatus, currKeyStatus, currDispStatus);
+	    			iErrVal = KErrGeneral;	
+	    		}
+	    	}
+	    	else
+	    	{
+	    		// Test blink antoi väärän errorin
+	    		FormatMessageL(EHwrmMessageOpDebug,_L("Wrong error from peer application:%d"),iErrVal);	
+	    		
+	    	}	
+	    }
+	    else
+	    {
+	    	// varaus epäonnistui
+	    	FormatMessageL(EHwrmMessageOpDebug,_L("Reservation failed reason:%d"),iErrVal);
+	    }
+    }
+    
+    delete iMyLight;    	
+    return iErrVal;
+    }
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MC_Display_and_keyboard_blink_S
+// Light usage with two applications
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::MC_Display_and_keyboard_blink_S()
+	{
+    FormatMessageL(EHwrmMessageOpDebug,_L("MC_Display_and_keyboard_blink_S()"));
+    TInt iErrVal = KErrNone;
+    CHWRMLight::TLightStatus currKeyStatus(CHWRMLight::ELightBlink);    
+    CHWRMLight::TLightStatus currDispStatus(CHWRMLight::ELightBlink);
+    CHWRMLight::TLightStatus origKeyStatus;    
+    CHWRMLight::TLightStatus origDispStatus;
+    
+    TRAP(iErrVal, iMyLight = CHWRMLight::NewL(this));	    
+    
+    if (iErrVal == KErrNone)
+    {
+		
+		CTestScheduler::StartAndStopL(1000);
+		
+	    origKeyStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+	    origDispStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	    
+	    //reserve light
+	    TRAP(iErrVal, iMyLight->ReserveLightL(CHWRMLight::EPrimaryDisplayAndKeyboard, ETrue, EFalse));
+	    
+	    if(iErrVal == KErrNotReady) // was KErrone
+	    {
+	    	iErrVal = TestLightOn(CHWRMLight::EPrimaryDisplayAndKeyboard, 5000, 75, EFalse);
+	    	
+	    	if(iErrVal == KErrInUse)
+	    	{
+	    		CTestScheduler::StartAndStopL(2000);
+	    		
+	    		// Tarkista valo
+	    		currKeyStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+	    		currDispStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	    		
+	    		/* Light should be same as at the beginning */
+	    		
+	    		if (origKeyStatus == currKeyStatus && origDispStatus == currDispStatus)
+	    		{
+		    		iMcFramework->StepExecuted(KErrNone);
+		    		
+		    		iErrVal = iMcFramework->WaitNextTestStep();
+		    		
+		    		if (iErrVal == KErrNone)
+		    		{
+		    			// Light status should be now ON
+		    		
+		    			currKeyStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+	    				currDispStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+	    				
+	    				if (currKeyStatus == CHWRMLight::ELightOn && currDispStatus == CHWRMLight::ELightOn)
+	    				{
+	    					// status is OK
+		    				iMyLight->ReleaseLight(CHWRMLight::EPrimaryDisplayAndKeyboard);
+		    				//iMcFramework->StepExecuted(KErrNone); last step execution is reported in RunSlaveMode()
+		    				iErrVal = KErrNone;	    				
+	    				}
+	    				else
+	    				{
+	    					// Display status has not restóred to original values
+	    					FormatMessageL(EHwrmMessageOpDebug,_L("Unexpected status. Keyboard:%d Display:%d"),currKeyStatus, currDispStatus);
+	    					iErrVal = KErrGeneral;
+	    					
+	    				}
+		    		
+		    		}
+		    		else
+		    		{
+		    		    // Test failed peer
+		    		    FormatMessageL(EHwrmMessageOpDebug,_L("Test failed failed peer:%d"),iErrVal);
+		    		}    			
+	    		}
+	    		else
+	    		{
+	    			// light status has changed for some reason???
+	    			// it should not because this client is not allowed to do changes in light
+	    			// and client that has reserved light has not ordered any change in light  
+	    			FormatMessageL(EHwrmMessageOpDebug,_L("Unexpected status. Keyboard:%d Display:%d"),currKeyStatus, currDispStatus);  			
+	    			iErrVal = KErrGeneral;
+	    		}
+	    	}
+	    	else
+	    	{
+	    		// Light on epäonnistui
+	    		FormatMessageL(EHwrmMessageOpDebug,_L("Unexpected status. Keyboard:%d Display:%d"),currKeyStatus, currDispStatus); 	
+	    		iErrVal = KErrGeneral;
+	    	}	
+	    }
+	    else
+	    {
+	    	// varaus epäonnistui
+	    	FormatMessageL(EHwrmMessageOpDebug,_L("Reservation failed:%d"),iErrVal);
+	    }
+    }
+    
+    delete iMyLight;    	
+    return iErrVal;
+	}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MC_Vibra_Basic_Usage_S
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::MC_Vibra_Basic_Usage_S()
+{
+    
+    FormatMessageL(EHwrmMessageOpDebug,_L("MC_Vibra_Basic_Usage_S()"));
+    TInt iErrVal = KErrNone;
+    CHWRMVibra::TVibraStatus vibraStatus;
+
+    TRAP(iErrVal, iVibra = CHWRMVibra::NewL());
+
+    if (iErrVal == KErrNone)
+    {
+	    /*****************/
+	    /* Reserve Vibra */
+	    /*****************/
+	    TRAP(iErrVal, iVibra->ReserveVibraL(ETrue, ETrue));
+	    
+	    if (iErrVal == KErrNone)
+	    {   	
+	    	/*************************/
+	    	/* S T A R T   V I B R A */
+	    	/*************************/
+	    	iErrVal = RunTestVibra(2000); // Run vibra 2s
+	    	
+	    	if (iErrVal == KErrNone)
+	    	{	    	
+	    		vibraStatus = iVibra->VibraStatus();
+	    			    			
+	    		if(vibraStatus == CHWRMVibra::EVibraStatusOn /* || vibraStatus == CHWRMVibra::EVibraStatusUnknown*/)
+	    		{
+	    			CTestScheduler::StartAndStopL(2000);	
+	 				
+	 				vibraStatus = iVibra->VibraStatus();
+	 				
+	 				if(vibraStatus == CHWRMVibra::EVibraStatusStopped)
+	 				{
+	 					/*****************/
+	 					/* Step executed */
+	 					/*****************/
+		    			iMcFramework->StepExecuted(KErrNone);
+		    			iErrVal = iMcFramework->WaitNextTestStep(); 					
+
+	    				/*************************/
+	    				/* S T A R T   V I B R A */
+	    				/*************************/
+			    		iErrVal = RunTestVibra(5000); // Run vibra 5s
+			    		if (iErrVal == KErrNone)
+			    		{
+			    			// Vibra start OK
+			    			// Check status
+			    			vibraStatus = iVibra->VibraStatus();
+			    			if(vibraStatus == CHWRMVibra::EVibraStatusOn)
+			    			{
+	 							/*****************/
+	 							/* Step executed */
+	 							/*****************/
+			    				iMcFramework->StepExecuted(KErrNone);
+				    			iErrVal = iMcFramework->WaitNextTestStep(); 
+				    			
+				    			if (iErrVal == KErrNone)
+				    			{
+				    				// Check status
+									vibraStatus = iVibra->VibraStatus();
+			    					
+			    					if(vibraStatus == CHWRMVibra::EVibraStatusOn)
+			    					{
+			    						//OK
+			    						CTestScheduler::StartAndStopL(5000);
+			    						
+			    						vibraStatus = iVibra->VibraStatus();
+			    						if(vibraStatus == CHWRMVibra::EVibraStatusStopped)
+			    						{
+			    							// Test is over --> release resources
+	 										/*****************/
+	 										/* Step executed */
+	 										/*****************/
+			    							//iMcFramework->StepExecuted(KErrNone); last step execution is reported in RunSlaveMode()
+			    									
+			    							iErrVal = KErrNone;
+			    						}
+			    						else
+			    						{
+			    							// Wrong vibra status
+			    							FormatMessageL(EHwrmMessageOpDebug,_L("Wrong vibra status5 (%d), expected STOPPED"),vibraStatus);				
+			    							iErrVal = KErrGeneral;
+			    						}
+			    					}
+			    					else
+			    					{
+			    						// Wrong status
+			    						FormatMessageL(EHwrmMessageOpDebug,_L("Wrong vibra status4 (%d), expected ON"),vibraStatus);
+			    						iErrVal = KErrGeneral;
+			    					}
+				    			}
+				    			else
+				    			{
+				    				// test failed in master
+				    				FormatMessageL(EHwrmMessageOpDebug,_L("Error from peer (%d)"),iErrVal);
+				    			}
+				    			
+			    			}
+			    			else
+			    			{	
+			    				// wrong status
+			    				FormatMessageL(EHwrmMessageOpDebug,_L("Wrong vibra status3 (%d), expected ON"),vibraStatus);
+			    				iErrVal = KErrGeneral;
+			    			}
+			    			
+			    		}
+			    		else
+			    		{
+			    			// Start vibra failed
+			    			FormatMessageL(EHwrmMessageOpDebug,_L("Vibra start failed (%d)"),iErrVal);	
+			    			
+			    		}			
+	 				}
+	 				else
+	 				{
+	 					// Wrong status
+	 					FormatMessageL(EHwrmMessageOpDebug,_L("Wrong vibra status2 (%d), expected STOPPED"),vibraStatus);
+	 					iErrVal = KErrGeneral;
+	 				}
+	    		}
+	    		else
+	    		{
+	    			// Wrong vibra status
+	    			FormatMessageL(EHwrmMessageOpDebug,_L("Wrong vibra status1 (%d), expected ON"),vibraStatus);
+	    			iErrVal = KErrGeneral;	
+	    		}
+	    	}
+	    	else
+	    	{
+	    		FormatMessageL(EHwrmMessageOpDebug,_L("Vibra start failed (%d)"),iErrVal);
+	    
+	    	}
+	    	
+	    	/*****************/
+	    	/* Release vibra */
+	    	/*****************/
+	    	iVibra->ReleaseVibra();	
+	    }
+	    else
+	    {
+	    	// Reserve failed
+	    	FormatMessageL(EHwrmMessageOpDebug,_L("Vibra reservation failed (%d)"),iErrVal);
+	    	
+	    }
+    }
+    delete iVibra; iVibra = NULL;
+    return iErrVal;
+    
+}
+
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MC_Combined_light_and_vibra_usage_S
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::MC_Combined_light_and_vibra_usage_S()
+{
+
+    TInt iErrVal = KErrNone;
+    
+    // CRepository* iSession;
+	CHWRMVibra::TVibraStatus vibraStatus;
+
+    // iSession = CRepository::NewL(KCRUidVibraCtrl);
+    iSession->Set(KVibraCtrlProfileVibraEnabled, 1);
+    
+    TRAP(iErrVal, iVibra = CHWRMVibra::NewL());
+    
+    if (iErrVal == KErrNone)
+    {
+	    // Check status
+	    vibraStatus = iVibra->VibraStatus();
+	    
+	    if(vibraStatus == CHWRMVibra::EVibraStatusOn)
+	    {
+	      /*************************/
+	      /* S T A R T   V I B R A */
+	      /*************************/
+	      iErrVal = RunTestVibra(2000);
+	      
+	      if(iErrVal == KErrInUse)
+	      {
+	      	/* Error is expected because another application has reserved vibra */
+	      	
+	      	CTestScheduler::StartAndStopL(2000);
+	      	
+	      	// Check status
+	      	vibraStatus = iVibra->VibraStatus();
+	      	
+	      	if(vibraStatus == CHWRMVibra::EVibraStatusOn)
+	      	{
+	 			/*****************/
+	 			/* Step executed */
+	 			/*****************/
+	      		//iMcFramework->StepExecuted(KErrNone); last step execution is reported in RunSlaveMode()
+	      		iErrVal = KErrNone;	
+	      	}
+	      	else
+	      	{
+	      	  FormatMessageL(EHwrmMessageOpDebug,_L("Wrong vibra status (%d)"),vibraStatus);
+	      	  iErrVal = KErrGeneral;
+	      	}
+	      	
+	      }
+	      else
+	      {
+	      	// Wrong status
+	      	FormatMessageL(EHwrmMessageOpDebug,_L("Wrong status(%d). Expected KErrInUse"),iErrVal);
+	      }
+	    }
+	    else
+	    {
+	      FormatMessageL(EHwrmMessageOpDebug,_L("Wrong vibra status (%d)"),vibraStatus);  
+	      iErrVal = KErrGeneral;
+	    }
+    }
+    delete iVibra; iVibra = NULL;
+
+    return iErrVal;
+
+}
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MC_Combined_light_and_vibra_usage_2_S
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::MC_Combined_light_and_vibra_usage_2_S()
+{
+    TInt iErrVal = KErrNone;   
+    // CRepository* iSession;
+    CHWRMVibra::TVibraStatus vibraStatus;
+    CHWRMLight::TLightStatus dispStatus;
+    CHWRMLight::TLightStatus keybStatus;    
+    //CHWRMLight::TLightStatus origDispStatus;
+    //CHWRMLight::TLightStatus origKeybStatus;
+
+    // iSession = CRepository::NewL(KCRUidVibraCtrl);
+    iSession->Set(KVibraCtrlProfileVibraEnabled, 1);
+    
+    TRAP(iErrVal, iVibra = CHWRMVibra::NewL());
+    if(iErrVal == KErrNone)
+    {
+    
+	    TRAP(iErrVal, iMyLight = CHWRMLight::NewL(this));
+		
+		if(iErrVal == KErrNone)
+		{
+		
+			//Reserve Primary display and keyboard
+
+			//origDispStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+			//origKeybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+			vibraStatus = iVibra->VibraStatus();
+			
+			TRAP(iErrVal, iVibra->ReserveVibraL(ETrue, ETrue));
+		    
+		    if (iErrVal == KErrNone)
+		    {	
+				TRAP(iErrVal, iMyLight->ReserveLightL(CHWRMLight::EPrimaryDisplayAndKeyboard, ETrue, ETrue));
+			
+				if(iErrVal == KErrNone)
+				{
+					CTestScheduler::StartAndStopL(5000);
+					
+					/*******************/
+					/* L I G H T   O N */
+					/*******************/
+					
+					iErrVal = TestLightOn(CHWRMLight::EPrimaryDisplayAndKeyboard);
+					
+					if (iErrVal == KErrNone)
+					{
+						keybStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryKeyboard);
+		    			dispStatus = iMyLight->LightStatus(CHWRMLight::EPrimaryDisplay);
+		    			
+		    			if (keybStatus == CHWRMLight::ELightOn && dispStatus == CHWRMLight::ELightOn)
+		    			{
+		    				CTestScheduler::StartAndStopL(5000);
+		    				
+		    				/*******************/
+		    				/* V I B R A   O N */
+		    				/*******************/
+		    				
+		    				iErrVal = RunTestVibra(5000,75);
+		    				
+		    				if(iErrVal == KErrNone)
+		    				{
+		    					vibraStatus = iVibra->VibraStatus();
+		    					
+		    					if (vibraStatus == CHWRMVibra::EVibraStatusOn)
+		    					{
+		    						CTestScheduler::StartAndStopL(5000);
+		    						
+		    						vibraStatus = iVibra->VibraStatus();
+		    						
+		    						if(vibraStatus == CHWRMVibra::EVibraStatusStopped)
+		    						{
+		    							
+		    							/*****************/
+		    							/* Release vibra */
+		    							/*****************/
+		    							iVibra->ReleaseVibra();
+		    							
+		    							/*****************/
+		    							/* Release light */
+		    							/*****************/
+		    							iMyLight->ReleaseLight(CHWRMLight::EPrimaryDisplayAndKeyboard);	    							
+		    							
+		    							/*****************/
+		    							/* Step executed */
+		    							/*****************/							    							
+		    							//iMcFramework->StepExecuted(KErrNone); last step execution is reported in RunSlaveMode()
+		    							
+		    							iErrVal = KErrNone;
+		    						}
+		    						else
+		    						{
+		    							// Wrong vibra status
+		    							FormatMessageL(EHwrmMessageOpDebug,_L("Wrong status(%d). Expected EVibraStatusStopped"), vibraStatus);
+		    							iErrVal = KErrGeneral;
+		    						}	
+		    					}
+		    					else
+		    					{
+		    						// wrong vibra status
+		    						FormatMessageL(EHwrmMessageOpDebug,_L("Wrong status(%d). Expected EVibraStatusOn"), vibraStatus);
+		    						iErrVal = KErrGeneral;
+		    					}    							
+		    				}
+		    				else
+		    				{
+		    					// start vibra failed
+		    					FormatMessageL(EHwrmMessageOpDebug,_L("Vibra start failed(%d)."), iErrVal);
+		    				}
+		    			}
+		    			else
+		    			{
+		    				// wrong status
+		    				FormatMessageL(EHwrmMessageOpDebug,_L("Wrong status keyboard(%d) display(%d)"), keybStatus, dispStatus);
+		    				iErrVal = KErrGeneral;
+		    			}
+					}
+					else
+					{
+						// Set light on failed
+						FormatMessageL(EHwrmMessageOpDebug,_L("Light on failed(%d)"), iErrVal);
+					}
+				}
+				else
+				{
+					// Reserve light failed
+					FormatMessageL(EHwrmMessageOpDebug,_L("Reserve light failed(%d)"), iErrVal);		
+				}
+		    }
+		    else
+		    {
+		    	// Reserve vibra failed
+		    	FormatMessageL(EHwrmMessageOpDebug,_L("Reserve vibra failed(%d)"), iErrVal);
+		    }
+		}
+    }
+    delete iVibra; iVibra = NULL;
+    delete iMyLight; iMyLight = NULL;
+    return iErrVal;	
+	
+}
+
+
+// -----------------------------------------------------------------------------
+// CHwrmTestCaseController::MC_FmTx_Basic_Usage_S
+// 
+// -----------------------------------------------------------------------------
+//
+TInt CHwrmTestCaseController::MC_FmTx_Basic_Usage_S()
+{    
+    FormatMessageL(EHwrmMessageOpDebug,_L("MC_FmTx_Basic_Usage_S()"));
+    TInt iErrVal = KErrNone;
+    TFmTxState fmTxState;
+
+    TRAP(iErrVal, iFmTx = CHWRMFmTx::NewL(this));
+
+    if (iErrVal == KErrNone)
+    	{	    
+    	//Reserve FmTx, Don't force CoeEnv "on" 
+	    TRAP(iErrVal, iFmTx->ReserveL(ETrue));
+	    
+	    if (iErrVal == KErrNone)
+	    	{   
+			// Reservation was OK
+	    	
+	    	// Enable FmTx
+	    	iErrVal = RunTestFmTx(89900); //89900 KHz
+	    		    	
+	    	if (iErrVal == KErrNone)
+	    		{	    	
+				// Check FmTx status
+	    		fmTxState = iFmTx->Status();
+	    			    			
+	    		if(fmTxState == EFmTxStateActive || fmTxState == EFmTxStateInactive)
+	    			{
+	    			/* FmTx status is OK */
+	    			
+	    			iMcFramework->StepExecuted(KErrNone);
+	    			iErrVal = iMcFramework->WaitNextTestStep(); 					
+
+		    		if (iErrVal == KErrNone)
+		    			{
+		    			/* Test execution was OK in peer-application */
+		    			
+		    			/* Check current FmTx status */
+		    			fmTxState = iFmTx->Status();
+		    			
+		    			if( fmTxState == EFmTxStateInactive
+		    			   || fmTxState == EFmTxStateActive)
+		    				{
+		    				/* OK, status is Active or Inactive */
+		    				/*****************/
+		    				/* Step executed */
+		    				/*****************/
+		    				iFmTx->Release();		    				
+			    			
+		    				}
+		    			else
+		    				{	
+		    				// wrong status
+		    				FormatMessageL(EHwrmMessageOpDebug,_L("Wrong FmTx status2 (%d), expected ON"),fmTxState);
+		    				iErrVal = KErrGeneral;
+		    				}
+		    			
+		    			}
+		    		else
+		    			{
+		    			// Start FmTx failed
+		    			FormatMessageL(EHwrmMessageOpDebug,_L("FmTx enable failed (%d)"),iErrVal);			    			
+		    			}			
+ 					}
+	    		else
+	    			{
+	    			// Wrong FmTx status
+	    			FormatMessageL(EHwrmMessageOpDebug,_L("Wrong FmTx status1 (%d), expected ON"),fmTxState);
+	    			iErrVal = KErrGeneral;	
+	    			}
+	    		}
+	    	else
+	    		{
+	    		FormatMessageL(EHwrmMessageOpDebug,_L("FmTx enable failed (%d)"),iErrVal);	    
+	    		}
+	    	}
+	    else
+	    	{
+	    	// Reserve failed
+	    	FormatMessageL(EHwrmMessageOpDebug,_L("FmTx reservation failed (%d)"),iErrVal);
+	    	
+	    	}
+    	}
+    delete iFmTx; 
+    iFmTx = NULL;
+    return iErrVal;
+    
+	}