/*
* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Symbian Foundation License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/

#include "T_DataWsSession.h"
#include "T_GraphicsUtil.h"
#include "T_DataWindowGroup.h"

//	EPOC Includes
#include <apgtask.h>
#include <w32std.h>
#include <gdi.h>

/*@{*/
_LIT(KDataClassname,							"RWsSession");

///	Fields
_LIT(KFldCheckWithStore,						"checkwithstore");
_LIT(KFldExpected,								"expected");
_LIT(KFldKeyCode,								"keycode");
_LIT(KFldModifier,								"modifier");
_LIT(KFldModifierMask,							"modifiermask");
_LIT(KFldModifiers,								"modifiers");
_LIT(KFldNullPointer,							"nullpointer");
_LIT(KFldOffset,								"offset");
_LIT(KFldRepeats,								"repeats");
_LIT(KFldStdScanCode,							"stdscancode");
_LIT(KFldType,									"type");
_LIT(KFldStore,									"store");
_LIT(KFldPos,									"pos");
_LIT(KFldDeviceNumber,							"devicenumber");
_LIT(KFldTip,									"tip");
_LIT(KFldIdentifier,							"identifier");
_LIT(KFldSpriteMember,							"spritemember");
_LIT(KFldSpriteFlags,							"spriteflags");
_LIT(KFldAlignment,								"alignment");
_LIT(KFldWindowGroup,							"windowgroup");

///	Parameters

_LIT(KLogMessage,	 							"logMessage");
_LIT(KLogCommand,	 							"logCommand");
_LIT(KTPoint,	 								"point");
_LIT(KInputWGId,			  					"inputWGId");
_LIT(KBGColour,									"bgcolour");
_LIT(KInputCursorNumber,						"inputcursornumber");
_LIT(KComputeMode,								"computemode");
_LIT(KInputScrnNo,	  							"inputscreenno");
_LIT(KDefDisplayMode,	  						"defDisplayMode");
_LIT(KDefModeMaxNumColor,	  					"defModeMaxNumColor");
_LIT(KDefModeMaxNumGray,	  					"defModeMaxNumGray");
_LIT(KWindowGroupIdentifier,					"wgIdentifier");
_LIT(KInputDefaultCursorNumber,					"defaultsyscurnum");
_LIT(KUseRfs,									"userfs");
_LIT(KExpectedHeapCount,    					"heapCount");
_LIT(KExpectPtrCursorMode,    					"expectptrcurmode");
_LIT(KExpectBgColour,							"expectbgcolour");
_LIT(KExpectedDiff,								"expected_diff");
_LIT(KSetBuffer,			  					"setbuffer");
_LIT(KSetMaxBuffer,			  					"setmaxbuffer");
_LIT(KSetFocusScreen,		  					"setfocusscreen");
_LIT(KSetEventOffOn,							"seteventoffon");
_LIT(KWTreeNodeObj,								"treenodeobj");
_LIT(KExpectShadowVector,						"expectshdwvet");
_LIT(KAutoFlushState,		  					"newFlushstate");
_LIT(KExpectFlushState,		  					"expectedFlushstate");
_LIT(KVersionBuild,			  					"build");
_LIT(KVersionMajor,			  					"major");
_LIT(KVersionMinor,			  					"minor");
_LIT(KWGUseArray,			  					"usearray");
_LIT(KWGListPriority,							"priority");
_LIT(KWGGivenPriority,							"givenwgpriority");
_LIT(KWGSpecifieScrnNo,							"specifiescrnno");
_LIT(KWGScreenNumber,							"screennum");
_LIT(KWGOrdinalId,								"identifier");
_LIT(KWGOrdinalPosition,						"position");
_LIT(KWGOrdinalPriority,						"wgid");
_LIT(KWGinquiredId,								"inquiredwgid");
_LIT(KFindWGPreId,								"prewgid");
_LIT(KMatchWGString,							"matchwgname");
_LIT(KThreadId,									"threadid");
_LIT(KRequestEvent,								"requestevent");
_LIT(KRequestRedraw,							"requestRedraw");
_LIT(KPKPriorityKey,							"prioritykey");
_LIT(KSetHotKey,								"hotkey");
_LIT(KClsHotKey,								"clshotkey");
_LIT(KRestoreDefHotKey,							"restoredefhk");
_LIT(KSetKeyCode,								"keycode");
_LIT(KDblClickInterval,							"maxinterval");
_LIT(KDblClickDistance,							"maxdistance");
_LIT(KExpectedDblMaxInitialTime,				"expecteddblmaxinittime");
_LIT(KExpectedDblDistance,						"expecteddblmaxdistance");
_LIT(KSetKBRepRateInterval,						"kbreprateinterval");
_LIT(KSetKBRepRateTime,							"kbrepratetime");
_LIT(KWGGetExpectedKBInitialTime,				"expectedkbinittime");
_LIT(KWGGetExpectedKBRepeatTime,				"expectedkbRepeattime");
_LIT(KSetSysFading,								"sysfadonoff");
_LIT(KSetblackMapFading,						"blackmapfading");
_LIT(KSetwhiteMapFading,						"whitemapfading");
_LIT(KSetDefblackMapFading,						"defblackmapfading");
_LIT(KSetDefwhiteMapFading,						"defwhitemapfading");
_LIT(KSetShadowVec,								"shadowvector");
_LIT(KSetScrnSizeMode,							"screensizemode");
_LIT(KSetPtrCurPosValue,						"ptrcurpos");
_LIT(KPtrCurPosArea,							"ptrcurarea");
_LIT(KSetPtrCurMode,							"pointercurmode");
_LIT(KSetCltCurMode,							"cltcurmode");
_LIT(KInputPermanentModifier,					"inputpermanmodif");
_LIT(KInputPermanentModifierState,				"inputpermanmodifstate");

//Commands
_LIT(KCmdnew,									"new");
_LIT(KCmdConnect,								"Connect");
_LIT(KCmdClose,									"Close");
_LIT(KCmdVersion,								"Version");
_LIT(KCmdSetHotKey,								"SetHotKey");
_LIT(KCmdClearHotKeys,							"ClearHotKeys");
_LIT(KCmdRestoreDefaultHotKey,					"RestoreDefaultHotKey");
_LIT(KCmdEventReady,							"EventReady");
_LIT(KCmdEventReadyCancel,						"EventReadyCancel");
_LIT(KCmdGetEvent,								"GetEvent");
_LIT(KCmdPurgePointerEvents,					"PurgePointerEvents");
_LIT(KCmdRedrawReady,							"RedrawReady");
_LIT(KCmdRedrawReadyCancel,						"RedrawReadyCancel");
_LIT(KCmdGetRedraw,								"GetRedraw");
_LIT(KCmdPriorityKeyReady,						"PriorityKeyReady");
_LIT(KCmdPriorityKeyReadyCancel,				"PriorityKeyReadyCancel");
_LIT(KCmdGetPriorityKey,						"GetPriorityKey");
_LIT(KCmdFlush,									"Flush");
_LIT(KCmdSetAutoFlush,							"SetAutoFlush");
_LIT(KCmdSetKeyboardRepeatRate,					"SetKeyboardRepeatRate");
_LIT(KCmdGetKeyboardRepeatRate,					"GetKeyboardRepeatRate");
_LIT(KCmdGetDoubleClickSettings,				"GetDoubleClickSettings");
_LIT(KCmdSetDoubleClick,						"SetDoubleClick");
_LIT(KCmdNumWindowGroups,						"NumWindowGroups");
_LIT(KCmdWindowGroupList,						"WindowGroupList");
_LIT(KCmdGetFocusWindowGroup,					"GetFocusWindowGroup");
_LIT(KCmdGetDefaultOwningWindow,				"GetDefaultOwningWindow");
_LIT(KCmdSetWindowGroupOrdinalPosition,			"SetWindowGroupOrdinalPosition");
_LIT(KCmdGetWindowGroupClientThreadId,			"GetWindowGroupClientThreadId");
_LIT(KCmdGetWindowGroupHandle,					"GetWindowGroupHandle");
_LIT(KCmdGetWindowGroupOrdinalPriority,			"GetWindowGroupOrdinalPriority");
_LIT(KCmdGetWindowGroupNameFromIdentifier,		"GetWindowGroupNameFromIdentifier");
_LIT(KCmdFindWindowGroupIdentifier,				"FindWindowGroupIdentifier");
_LIT(KCmdFetchMessage,							"FetchMessage");
_LIT(KCmdSetShadowVector,						"SetShadowVector");
_LIT(KCmdShadowVector,							"ShadowVector");
_LIT(KCmdSetBackgroundColor,					"SetBackgroundColor");
_LIT(KCmdGetBackgroundColor,					"GetBackgroundColor");
_LIT(KCmdSetSystemPointerCursor,				"SetSystemPointerCursor");
_LIT(KCmdClearSystemPointerCursor,				"ClearSystemPointerCursor");
_LIT(KCmdClaimSystemPointerCursorList,			"ClaimSystemPointerCursorList");
_LIT(KCmdFreeSystemPointerCursorList,			"FreeSystemPointerCursorList");
_LIT(KCmdSetCustomTextCursor,					"SetCustomTextCursor");
_LIT(KCmdResourceCount,							"ResourceCount");
_LIT(KCmdPasswordEntered,						"PasswordEntered");
_LIT(KCmdComputeMode,							"ComputeMode");
_LIT(KCmdHeapCount,								"HeapCount");
_LIT(KCmdSetModifierState,						"SetModifierState");
_LIT(KCmdGetModifierState,						"GetModifierState");
_LIT(KCmdRequestOffEvents,						"RequestOffEvents");
_LIT(KCmdGetDefModeMaxNumColors,				"GetDefModeMaxNumColors");
_LIT(KCmdGetColorModeList,						"GetColorModeList");
_LIT(KCmdSetPointerCursorArea,					"SetPointerCursorArea");
_LIT(KCmdPointerCursorArea,						"PointerCursorArea");
_LIT(KCmdSetPointerCursorMode,					"SetPointerCursorMode");
_LIT(KCmdSetClientCursorMode,					"SetClientCursorMode");
_LIT(KCmdPointerCursorMode,						"PointerCursorMode");
_LIT(KCmdSetDefaultSystemPointerCursor,			"SetDefaultSystemPointerCursor");
_LIT(KCmdClearDefaultSystemPointerCursor,		"ClearDefaultSystemPointerCursor");
_LIT(KCmdSetPointerCursorPosition,				"SetPointerCursorPosition");
_LIT(KCmdPointerCursorPosition,					"PointerCursorPosition");
_LIT(KCmdSetDefaultFadingParameters,			"SetDefaultFadingParameters");
_LIT(KCmdPrepareForSwitchOff,					"PrepareForSwitchOff");
_LIT(KCmdSetBufferSizeL,						"SetBufferSizeL");
_LIT(KCmdSetMaxBufferSizeL,						"SetMaxBufferSizeL");
_LIT(KCmdSetSystemFaded,						"SetSystemFaded");
_LIT(KCmdSetFocusScreen,						"SetFocusScreen");
_LIT(KCmdGetFocusScreen,						"GetFocusScreen");
_LIT(KCmdClearAllRedrawStores,					"ClearAllRedrawStores");
_LIT(KCmdLogCommand,							"LogCommand");
_LIT(KCmdLogMessage,							"LogMessage");
_LIT(KCmdNumberOfScreens,						"NumberOfScreens");
_LIT(KCmdSimulateRawEvent,						"SimulateRawEvent");
_LIT(KCmdSimulateKeyEvent,						"SimulateKeyEvent");

///	Logging
_LIT(KLogError,									"Error=%d");
_LIT(KLogMissingParameter,						"Missing parameter '%S'");
_LIT(KLogNotExpectedValue,						"Not expected value");

//constants 
const TInt  KGroupNameMaxSize =100;

/*@}*/

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CT_DataWsSession* CT_DataWsSession::NewL()
	{
	CT_DataWsSession*    ret=new (ELeave) CT_DataWsSession();
	CleanupStack::PushL(ret);
	ret->ConstructL();
	CleanupStack::Pop(ret);
	return ret;
	}

CT_DataWsSession::CT_DataWsSession()
:	CDataWrapperBase()
,	iWsSession(NULL)
,	iResourceCount(0)
,	iNumWinGroup(0)
,	iColorModeCount(0)
,	iWindowGroupIdentifier(0)
,	iActiveEventReady(NULL)
,	iActivePriorityKeyReady(NULL)
,	iActiveRedrawReady(NULL)
	{
	}

void CT_DataWsSession::ConstructL()
	{
	iActiveEventReady=CActiveCallback::NewL(*this);
	iActivePriorityKeyReady=CActiveCallback::NewL(*this);
	iActiveRedrawReady=CActiveCallback::NewL(*this);
	}

CT_DataWsSession::~CT_DataWsSession()
	{
	DestroyData();
	delete iActiveRedrawReady;
	iActiveRedrawReady=NULL;
	delete iActivePriorityKeyReady;
	iActivePriorityKeyReady=NULL;
	delete iActiveEventReady;
	iActiveEventReady=NULL;
	}

void CT_DataWsSession::SetObjectL(TAny* aAny)
	{
	DestroyData();
	iWsSession = static_cast<RWsSession*> (aAny);
	}

void CT_DataWsSession::DisownObjectL()
	{
	iWsSession = NULL;
	}

void CT_DataWsSession::DestroyData()
	{
	delete iWsSession;
	iWsSession=NULL;
	}

MWsClientClass* CT_DataWsSession::GetClientClass() const
	{
	return iWsSession;
	}


/**
* Process a command read from the ini file
*
* @param aCommand			the command to process
* @param aSection			the entry in the ini file requiring the command to be processed
* @param aAsyncErrorIndex	index of command. used for async calls
*
* @return ETrue if the command is processed
*/
TBool CT_DataWsSession::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
	{
	TBool	ret = ETrue;

	if ( aCommand==KCmdnew || aCommand==KDataClassname )
		{
		DoCmdnew();
		}
	else if ( aCommand==KCmdConnect )
		{
		DoCmdConnectL(aSection);
		}
	else if ( aCommand==KCmdClose )
		{
		DoCmdClose();
		}
	else if ( aCommand==KCmdVersion )
		{
		DoCmdVersion(aSection);
		}
	else if ( aCommand==KCmdSetHotKey )
		{
		DoCmdSetHotKey(aSection);
		}
	else if ( aCommand==KCmdClearHotKeys )
		{
		DoCmdClearHotKeys(aSection);
		}
	else if ( aCommand==KCmdRestoreDefaultHotKey )
		{
		DoCmdRestoreDefaultHotKey(aSection);
		}
	else if ( aCommand==KCmdEventReady )
		{
		DoCmdEventReady(aSection, aAsyncErrorIndex);
		}
	else if ( aCommand==KCmdEventReadyCancel )
		{
		DoCmdEventReadyCancel();
		}
	else if ( aCommand==KCmdGetEvent )
		{
		DoCmdGetEventL(aSection);
		}
	else if ( aCommand==KCmdPurgePointerEvents )
		{
		DoCmdPurgePointerEvents();
		}
	else if ( aCommand==KCmdRedrawReady )
		{
		DoCmdRedrawReady(aSection, aAsyncErrorIndex);
		}
	else if ( aCommand==KCmdRedrawReadyCancel )
		{
		DoCmdRedrawReadyCancel();
		}
	else if ( aCommand==KCmdGetRedraw )
		{
		DoCmdGetRedrawL(aSection);
		}
	else if ( aCommand==KCmdPriorityKeyReady )
		{
		DoCmdPriorityKeyReady(aSection, aAsyncErrorIndex);
		}
	else if ( aCommand==KCmdPriorityKeyReadyCancel )
		{
		DoCmdPriorityKeyReadyCancel();
		}
	else if ( aCommand==KCmdGetPriorityKey )
		{
		DoCmdGetPriorityKeyL(aSection);
		}
	else if ( aCommand==KCmdFlush )
		{
		DoCmdFlush();
		}
	else if ( aCommand==KCmdSetAutoFlush )
		{
		DoCmdSetAutoFlush(aSection);
		}
	else if ( aCommand==KCmdSetKeyboardRepeatRate )
		{
		DoCmdSetKeyboardRepeatRate(aSection);
		}
	else if ( aCommand==KCmdGetKeyboardRepeatRate )
		{
		DoCmdGetKeyboardRepeatRate(aSection);
		}
	else if ( aCommand==KCmdGetDoubleClickSettings )
		{
		DoCmdGetDoubleClickSettings(aSection);
		}
	else if ( aCommand==KCmdSetDoubleClick )
		{
		DoCmdSetDoubleClick(aSection);
		}
	else if ( aCommand==KCmdNumWindowGroups )
		{
		DoCmdNumWindowGroups(aSection);
		}
	else if ( aCommand==KCmdWindowGroupList )
		{
		DoCmdWindowGroupListL(aSection);
		}
	else if ( aCommand==KCmdGetFocusWindowGroup )
		{
		DoCmdGetFocusWindowGroup(aSection);
		}
	else if ( aCommand==KCmdGetDefaultOwningWindow )
		{
		DoCmdGetDefaultOwningWindow(aSection);
		}
	else if ( aCommand==KCmdSetWindowGroupOrdinalPosition )
		{
		DoCmdSetWindowGroupOrdinalPosition(aSection);
		}
	else if ( aCommand==KCmdGetWindowGroupClientThreadId )
		{
		DoCmdGetWindowGroupClientThreadId(aSection);
		}
	else if ( aCommand==KCmdGetWindowGroupHandle )
		{
		DoCmdGetWindowGroupHandle(aSection);
		}
	else if ( aCommand==KCmdGetWindowGroupOrdinalPriority )
		{
		DoCmdGetWindowGroupOrdinalPriority(aSection);
		}
	else if ( aCommand==KCmdGetWindowGroupNameFromIdentifier )
		{
		DoCmdGetWindowGroupNameFromIdentifier(aSection);
		}
	else if ( aCommand==KCmdFindWindowGroupIdentifier )
		{
		DoCmdFindWindowGroupIdentifier(aSection);
		}
	else if ( aCommand==KCmdFetchMessage )
		{
		DoCmdFetchMessage(aSection);
		}
	else if ( aCommand==KCmdSetShadowVector )
		{
		DoCmdSetShadowVector(aSection);
		}
	else if ( aCommand==KCmdShadowVector )
		{
		DoCmdShadowVector(aSection);
		}
	else if ( aCommand==KCmdSetBackgroundColor )
		{
		DoCmdSetBackgroundColor(aSection);
		}
	else if ( aCommand==KCmdGetBackgroundColor )
		{
		DoCmdGetBackgroundColor(aSection);
		}
	else if ( aCommand==KCmdSetSystemPointerCursor )
		{
		DoCmdSetSystemPointerCursor(aSection);
		}
	else if ( aCommand==KCmdClearSystemPointerCursor )
		{
		DoCmdClearSystemPointerCursor(aSection);
		}
	else if ( aCommand==KCmdClaimSystemPointerCursorList )
		{
		DoCmdClaimSystemPointerCursorList();
		}
	else if ( aCommand==KCmdFreeSystemPointerCursorList )
		{
		DoCmdFreeSystemPointerCursorList();
		}
	else if ( aCommand==KCmdSetCustomTextCursor )
		{
		DoCmdSetCustomTextCursorL(aSection);
		}
	else if ( aCommand==KCmdResourceCount )
		{
		DoCmdResourceCount(aSection);
		}
	else if ( aCommand==KCmdPasswordEntered )
		{
		DoCmdPasswordEntered();
		}
	else if ( aCommand==KCmdComputeMode )
		{
		DoCmdComputeMode(aSection);
		}
	else if ( aCommand==KCmdHeapCount )
		{
		DoCmdHeapCount(aSection);
		}
	else if ( aCommand==KCmdSetModifierState )
		{
		DoCmdSetModifierState(aSection);
		}
	else if ( aCommand==KCmdGetModifierState )
		{
		DoCmdGetModifierState(aSection);
		}
	else if ( aCommand==KCmdRequestOffEvents )
		{
		DoCmdRequestOffEventsL(aSection);
		}
	else if ( aCommand==KCmdGetDefModeMaxNumColors )
		{
		DoCmdGetDefModeMaxNumColors(aSection);
		}
	else if ( aCommand==KCmdGetColorModeList )
		{
		DoCmdGetColorModeListL(aSection);
		}
	else if ( aCommand==KCmdSetPointerCursorArea )
		{
		DoCmdSetPointerCursorArea(aSection);
		}
	else if ( aCommand==KCmdPointerCursorArea )
		{
		DoCmdPointerCursorArea(aSection);
		}
	else if ( aCommand==KCmdSetPointerCursorMode )
		{
		DoCmdSetPointerCursorMode(aSection);
		}
	else if ( aCommand==KCmdSetClientCursorMode )
		{
		DoCmdSetClientCursorMode(aSection);
		}
	else if ( aCommand==KCmdPointerCursorMode )
		{
		DoCmdPointerCursorMode(aSection);
		}
	else if ( aCommand==KCmdSetDefaultSystemPointerCursor )
		{
		DoCmdSetDefaultSystemPointerCursor(aSection);
		}
	else if ( aCommand==KCmdClearDefaultSystemPointerCursor )
		{
		DoCmdClearDefaultSystemPointerCursor();
		}
	else if ( aCommand==KCmdSetPointerCursorPosition )
		{
		DoCmdSetPointerCursorPosition(aSection);
		}
	else if ( aCommand==KCmdPointerCursorPosition )
		{
		DoCmdPointerCursorPosition(aSection);
		}
	else if ( aCommand==KCmdSetDefaultFadingParameters )
		{
		DoCmdSetDefaultFadingParameters(aSection);
		}
	else if ( aCommand==KCmdPrepareForSwitchOff )
		{
		DoCmdPrepareForSwitchOff();
		}
	else if ( aCommand==KCmdSetBufferSizeL )
		{
		DoCmdSetBufferSizeL(aSection);
		}
	else if ( aCommand==KCmdSetMaxBufferSizeL )
		{
		DoCmdSetMaxBufferSizeL(aSection);
		}
	else if ( aCommand==KCmdSetSystemFaded )
		{
		DoCmdSetSystemFaded(aSection);
		}
	else if ( aCommand==KCmdSetFocusScreen )
		{
		DoCmdSetFocusScreen(aSection);
		}
	else if ( aCommand==KCmdGetFocusScreen )
		{
		DoCmdGetFocusScreen(aSection);
		}
	else if ( aCommand==KCmdClearAllRedrawStores )
		{
		DoCmdClearAllRedrawStores();
		}
	else if ( aCommand==KCmdLogCommand )
		{
		DoCmdLogCommand(aSection);
		}
	else if ( aCommand==KCmdLogMessage )
		{
		DoCmdLogMessage(aSection);
		}
	else if ( aCommand==KCmdNumberOfScreens )
		{
		DoCmdNumberOfScreens(aSection);
		}
	else if ( aCommand==KCmdSimulateRawEvent )
		{
		DoCmdSimulateRawEvent(aSection);
		}
	else if ( aCommand==KCmdSimulateKeyEvent )
		{
		DoCmdSimulateKeyEvent(aSection);
		}
	else
		{
		ret=CT_DataWsClientClass::DoCommandL(*this, aCommand, aSection, aAsyncErrorIndex);
		}

	return ret;
	}


void CT_DataWsSession::DoCmdnew()
	{
	INFO_PRINTF1(_L("Session is going to create"));
	TRAPD(err,	iWsSession = new (ELeave) RWsSession());
	if ( err!=KErrNone )
		{
		ERR_PRINTF2(KLogError, err);
		SetError(err);
		}
	}

void CT_DataWsSession::DoCmdConnectL(const TDesC& aSection)
	{
	TBool	useRfs=EFalse;
	GetBoolFromConfig(aSection, KUseRfs(), useRfs);

	TInt	err=KErrNone;
	if ( useRfs )
		{
		INFO_PRINTF1(_L("RWsSession::Connect(RFs&) call"));
		err=iWsSession->Connect(FileServer());
		}
	else
		{
		INFO_PRINTF1(_L("RWsSession::Connect() call"));
		err=iWsSession->Connect();
		}
	if ( err!=KErrNone )
		{
		ERR_PRINTF2(KLogError, err);
		SetError(err);
		}
	}

void CT_DataWsSession::DoCmdClose()
	{
	INFO_PRINTF1(_L("RWsSession::Close() call"));
	iWsSession->Close();
	}

void CT_DataWsSession::DoCmdVersion(const TDesC& aSection)
	{
	INFO_PRINTF1(_L("WsSession::Version() call"));

	TVersion		version		= iWsSession->Version();

	INFO_PRINTF2(_L("Version build : %d"), (TInt)version.iBuild);
	INFO_PRINTF2(_L("Version major : %d"), (TInt)version.iMajor);
	INFO_PRINTF2(_L("Version minor : %d"), (TInt)version.iMinor);
	TInt	intTemp;
	if ( GetIntFromConfig(aSection, KVersionBuild(), intTemp) )
		{
		if ( intTemp != version.iBuild )
			{
			ERR_PRINTF1(_L("Build does not match expected build"));
			SetBlockResult(EFail);
			}
		}

	if ( GetIntFromConfig(aSection, KVersionMajor(), intTemp) )
		{
		if ( intTemp != version.iMajor )
			{
			ERR_PRINTF1(_L("Major does not match expected major"));
			SetBlockResult(EFail);
			}
		}

	if ( GetIntFromConfig(aSection, KVersionMinor(), intTemp) )
		{
		if ( intTemp != version.iMinor )
			{
			ERR_PRINTF1(_L("Minor does not match expected minor"));
			SetBlockResult(EFail);
			}
		}

	if (version.Name() == _L("") && version.iBuild == 0 && version.iMajor == 0 && version.iMinor == 0)
		{
		ERR_PRINTF1(_L("Some version fields are not set!"));
		SetBlockResult(EFail);
		}
	}

void CT_DataWsSession::DoCmdSetHotKey(const TDesC& aSection)
	{
	TBool	dataOk=ETrue;

	THotKey	hotKey;
	
	TInt	err=KErrNone;
	
	if ( !CT_GraphicsUtil::ReadHotKey(*this, aSection, KSetHotKey(), hotKey) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KSetHotKey());
		SetBlockResult(EFail);
		}

	TKeyCode	keyCode;
	if ( !CT_GraphicsUtil::ReadKeyCode(*this, aSection, KSetKeyCode(), keyCode) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KSetKeyCode());
		SetBlockResult(EFail);
		}

	TUint	modifierMask=EModifierAlt | EModifierCtrl | EModifierShift | EModifierFunc | EModifierCapsLock;
	CT_GraphicsUtil::ReadEventModifier(*this, aSection, KFldModifierMask, modifierMask);
	TUint	modifier=EModifierAlt | EModifierCtrl | EModifierShift | EModifierFunc | EModifierCapsLock;
	CT_GraphicsUtil::ReadEventModifier(*this, aSection, KFldModifier, modifier);
	if ( dataOk )
		{
		err = iWsSession->SetHotKey(hotKey, keyCode, modifierMask, modifier);
		}
	if ( err!=KErrNone )
		{
		ERR_PRINTF2(KLogError, err);
		SetError(err);
		}
	}

void CT_DataWsSession::DoCmdClearHotKeys(const TDesC& aSection)
	{
	THotKey	hotKey;
	
	TInt	err=KErrNone;
	
	if ( !CT_GraphicsUtil::ReadHotKey(*this, aSection, KClsHotKey(), hotKey) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KClsHotKey());
		SetBlockResult(EFail);
		}
	else
		{
		err = iWsSession->ClearHotKeys(hotKey);
		}
	
	if ( err!=KErrNone )
		{
		ERR_PRINTF2(KLogError, err);
		SetError(err);
		}
	}

void CT_DataWsSession::DoCmdRestoreDefaultHotKey(const TDesC& aSection)
	{
	THotKey	hotKey;
	
	TInt	err=KErrNone;
	
	if ( !CT_GraphicsUtil::ReadHotKey(*this, aSection, KRestoreDefHotKey(), hotKey) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KRestoreDefHotKey());
		SetBlockResult(EFail);
		}
	else
		{
		err = iWsSession->RestoreDefaultHotKey(hotKey);
		}
	
	if ( err!=KErrNone )
		{
		ERR_PRINTF2(KLogError, err);
		SetError(err);
		}
	}

void CT_DataWsSession::DoCmdEventReady(const TDesC& aSection, TInt aAsyncErrorIndex)
	{
	CActive::TPriority	priority=CActive::EPriorityHigh;
	CT_GraphicsUtil::ReadPriority(*this, aSection, KRequestEvent(), priority);

	iActiveEventReady->SetPriority(priority);
	INFO_PRINTF1(_L("RWsSession::EventReady() call"));
	iWsSession->EventReady(&iActiveEventReady->iStatus);
	iActiveEventReady->Activate(aAsyncErrorIndex);
	IncOutstanding();
	}

void CT_DataWsSession::DoCmdEventReadyCancel()
	{
	iWsSession->EventReadyCancel();
	}

void CT_DataWsSession::DoCmdGetEventL(const TDesC& aSection)
	{
	TWsEvent	event;

	iWsSession->GetEvent(event);
	INFO_PRINTF1(_L("RWsSession::GetEvent() call"));

	TWsEvent*	store=NULL;
	if ( CT_GraphicsUtil::GetWsEventL(*this, aSection, KFldStore(), store) )
		{
		*store=event;
		}
	}

void CT_DataWsSession::DoCmdPurgePointerEvents()
	{
	// Execute command and log parameters
	INFO_PRINTF3(_L("execute %S::%S()"), &KDataClassname, &KCmdPurgePointerEvents);
	iWsSession->PurgePointerEvents();
	}

void CT_DataWsSession::DoCmdRedrawReady(const TDesC& aSection, TInt aAsyncErrorIndex)
	{
	CActive::TPriority	priority=CActive::EPriorityHigh;
	CT_GraphicsUtil::ReadPriority(*this, aSection, KRequestRedraw(), priority);

	iActiveRedrawReady->SetPriority(priority);
	INFO_PRINTF1(_L("RWsSession::RedrawReady() call"));
	iWsSession->RedrawReady(&iActiveRedrawReady->iStatus);
	iActiveRedrawReady->Activate(aAsyncErrorIndex);
	IncOutstanding();
	}

void CT_DataWsSession::DoCmdRedrawReadyCancel()
	{
	INFO_PRINTF1(_L("RWsSession::RedrawReadyCancel() call"));
	iWsSession->RedrawReadyCancel();
	}

void CT_DataWsSession::DoCmdGetRedrawL(const TDesC& aSection)
	{
	TWsRedrawEvent 	redrawEvent;

	iWsSession->GetRedraw(redrawEvent);
	INFO_PRINTF1(_L("RWsSession::GetRedraw() call"));

	TWsRedrawEvent*	store=NULL;
	if ( CT_GraphicsUtil::GetWsRedrawEventL(*this, aSection, KFldStore(), store) )
		{
		*store=redrawEvent;
		}
	}

void CT_DataWsSession::DoCmdPriorityKeyReady(const TDesC& aSection, TInt aAsyncErrorIndex)
	{
	CActive::TPriority	priority=CActive::EPriorityHigh;
	CT_GraphicsUtil::ReadPriority(*this, aSection, KPKPriorityKey(), priority);

	iActivePriorityKeyReady->SetPriority(priority);
	INFO_PRINTF1(_L("RWsSession::PriorityKeyReady() call"));
	iWsSession->PriorityKeyReady(&iActivePriorityKeyReady->iStatus);
	iActivePriorityKeyReady->Activate(aAsyncErrorIndex);
	IncOutstanding();
	}


void CT_DataWsSession::DoCmdPriorityKeyReadyCancel()
	{
	INFO_PRINTF1(_L("RWsSession::PriorityKeyReadyCancel() call"));
	iWsSession->PriorityKeyReadyCancel();
	}

void CT_DataWsSession::DoCmdGetPriorityKeyL(const TDesC& aSection)
	{
	TWsPriorityKeyEvent  	event;

	iWsSession->GetPriorityKey(event);
	INFO_PRINTF1(_L("RWsSession::GetPriorityKey() call"));

	TWsPriorityKeyEvent *	store=NULL;
	if ( CT_GraphicsUtil::GetWsPriorityKeyEventL(*this, aSection, KFldStore(), store) )
		{
		*store=event;
		}
	}

void CT_DataWsSession::DoCmdFlush()
	{
	INFO_PRINTF1(_L("RWsSession::Flush() call"));
	iWsSession->Flush();
	}

void CT_DataWsSession::DoCmdSetAutoFlush(const TDesC& aSection)
	{
	TBool	actualFlushstate;
	TBool	setFlushState=EFalse;
	TBool	expectedFlush=EFalse;

	if ( !GetBoolFromConfig(aSection, KAutoFlushState(), setFlushState) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KAutoFlushState());
		SetBlockResult(EFail);
		}
	else
		{
		actualFlushstate = iWsSession->SetAutoFlush(setFlushState);
		INFO_PRINTF2(_L("Flush State: %d"),actualFlushstate);
		
		if ( !GetBoolFromConfig(aSection, KExpectFlushState(), expectedFlush) )
			{
			ERR_PRINTF2(KLogMissingParameter, &KExpectFlushState());
			SetBlockResult(EFail);
			}
		else
			{
			if ( actualFlushstate!=expectedFlush)
				{
				ERR_PRINTF1(_L("SetAutoFlush is not as expected!"));
				SetBlockResult(EFail);
				}
			}
		}
	}

void CT_DataWsSession::DoCmdSetKeyboardRepeatRate(const TDesC& aSection)
	{
    TInt	setInputInterval=iKeyboardRepeateRateInitialTime.Int();
    GetIntFromConfig(aSection, KSetKBRepRateInterval(), setInputInterval);

	TInt	setInputTime=iKeyboardRepeateRateTime.Int();
	GetIntFromConfig(aSection, KSetKBRepRateTime(), setInputTime);

	TTimeIntervalMicroSeconds32 changeInitialTime(setInputInterval);
	TTimeIntervalMicroSeconds32 changeTime(setInputTime);
	iWsSession->SetKeyboardRepeatRate(changeInitialTime, changeTime);
	}

void CT_DataWsSession::DoCmdGetKeyboardRepeatRate(const TDesC& aSection)
	{
	TTimeIntervalMicroSeconds32	actualInitialTime;
	TTimeIntervalMicroSeconds32	actualTime;
	iWsSession->GetKeyboardRepeatRate(actualInitialTime, actualTime);
	INFO_PRINTF2(_L("actual Interval Time: %d"), actualInitialTime.Int());
	INFO_PRINTF2(_L("actual Time: %d"), actualTime.Int());

	TInt	expectInitialTime;
	if(	GetIntFromConfig(aSection, KWGGetExpectedKBInitialTime(), expectInitialTime))
		{
		if ( actualInitialTime.Int()!=expectInitialTime )
			{
			ERR_PRINTF1(_L("GetKeyboardRepeatRate is not as expected!"));
			SetBlockResult(EFail);
			}
		}

	TInt	expectTime;
	if ( GetIntFromConfig(aSection, KWGGetExpectedKBRepeatTime(), expectTime) )
		{
		if ( actualTime.Int()!=expectTime)
			{
			ERR_PRINTF1(_L("GetKeyboardRepeatRate is not as expected!"));
			SetBlockResult(EFail);
			}
		}

	TBool	checkWithStore=FALSE;
	GetBoolFromConfig(aSection, KFldCheckWithStore(), checkWithStore);
	if ( checkWithStore )
		{
		if ( iKeyboardRepeateRateInitialTime!=actualInitialTime )
			{
			ERR_PRINTF1(_L("GetKeyboardRepeatRate is not as expected!"));
			SetBlockResult(EFail);
			}
		if ( iKeyboardRepeateRateTime!=actualTime )
			{
			ERR_PRINTF1(_L("GetKeyboardRepeatRate is not as expected!"));
			SetBlockResult(EFail);
			}
		}

	TBool	store=FALSE;
	GetBoolFromConfig(aSection, KFldStore(), store);
	if ( store )
		{
		iKeyboardRepeateRateInitialTime=actualInitialTime;
		iKeyboardRepeateRateTime=actualTime;
		}
	}

void CT_DataWsSession::DoCmdSetDoubleClick(const TDesC& aSection)
	{
	TBool	dataOk=ETrue;
    TInt	setMaxInputInterval;
    if ( !GetIntFromConfig(aSection, KDblClickInterval(), setMaxInputInterval) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KDblClickInterval());
		SetBlockResult(EFail);
		}

	TInt	setMaxDistance;
	if ( !GetIntFromConfig(aSection, KDblClickDistance(), setMaxDistance) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KDblClickDistance());
		SetBlockResult(EFail);
		}

	if ( dataOk )
		{
		TTimeIntervalMicroSeconds32	changeMaxIntervalTime(setMaxInputInterval);
		iWsSession->SetDoubleClick(changeMaxIntervalTime, setMaxDistance);
		}
	}

void CT_DataWsSession::DoCmdGetDoubleClickSettings(const TDesC& aSection)
	{
	TTimeIntervalMicroSeconds32	actualMaxIntervalValue;
	TInt						actualMaxDistanceValue;
	iWsSession->GetDoubleClickSettings(actualMaxIntervalValue, actualMaxDistanceValue);
	INFO_PRINTF2(_L("Maximum interval: %d"), actualMaxIntervalValue.Int());
	INFO_PRINTF2(_L("Maximum distance : %d"), actualMaxDistanceValue);

	TInt	expectMaxIntervalValue;
	if ( !GetIntFromConfig(aSection, KExpectedDblMaxInitialTime(), expectMaxIntervalValue))
		{
		ERR_PRINTF2(KLogMissingParameter, &KExpectedDblMaxInitialTime());
		SetBlockResult(EFail);
		}
	else
		{
		if ( actualMaxIntervalValue.Int()!=expectMaxIntervalValue )
			{
			ERR_PRINTF1(KLogNotExpectedValue);
			SetBlockResult(EFail);
			}
		}

	TInt	expectMaxDistanceValue;
	if ( !GetIntFromConfig(aSection, KExpectedDblDistance(), expectMaxDistanceValue))
		{
		ERR_PRINTF2(KLogMissingParameter, &KExpectedDblDistance());
		SetBlockResult(EFail);
		}
	else
		{
		if ( actualMaxDistanceValue!=expectMaxDistanceValue)
			{
			ERR_PRINTF1(KLogNotExpectedValue);
			SetBlockResult(EFail);
			}
		}
	}

void CT_DataWsSession::DoCmdNumWindowGroups(const TDesC& aSection)
	{
	TBool	dataOk=ETrue;
	TInt	previousCount=iNumWinGroup;

#if defined(SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS)
	TInt	priority;
	if ( GetIntFromConfig(aSection, KWGGivenPriority(), priority) )
		{
		TInt	screenNumber=0;
		if ( !GetIntFromConfig(aSection, KWGSpecifieScrnNo(), screenNumber) )
			{
			iNumWinGroup=iWsSession->NumWindowGroups(priority);
			INFO_PRINTF2(_L("NumWindowGroups(TInt aPriority):%d"), iNumWinGroup);
			}
		else
			{
			iNumWinGroup=iWsSession->NumWindowGroups(screenNumber, priority);
			INFO_PRINTF2(_L("NumWindowGroups(TInt aScreenNumber, TInt aPriority):%d"), iNumWinGroup);
			}
		}
	else
#endif
		{
		iNumWinGroup=iWsSession->NumWindowGroups();
		INFO_PRINTF2(_L("NumWindowGroups():%d"), iNumWinGroup);
		}

	if ( dataOk )
		{
		TInt	difference=0;
		if ( GetIntFromConfig(aSection, KExpectedDiff(), difference) )
			{
			if ( (iNumWinGroup-previousCount)!=difference )
				{
				ERR_PRINTF2(_L("Previous count:%d"), previousCount);
				ERR_PRINTF1(KLogNotExpectedValue);
				SetBlockResult(EFail);
				}
			}
		}
	}

void CT_DataWsSession::DoCmdWindowGroupListL(const TDesC& aSection)
	{
	INFO_PRINTF2(_L("iNumWinGroup:%d"), iNumWinGroup);
	RArray<RWsSession::TWindowGroupChainInfo>	numWGListRArray(1);
	CArrayFixFlat<TInt>*						numWGListCArray=new (ELeave) CArrayFixFlat<TInt>(iNumWinGroup);
	CleanupStack::PushL(numWGListCArray);
	CleanupClosePushL(numWGListRArray);

	//True:CArrayFixFlat  Flase:RArray
	TInt	priority;
#if defined(SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS)
	TBool	hasPriority=CT_GraphicsUtil::ReadPriorities(*this, aSection, KWGListPriority(), priority);
#else
	TBool	hasPriority=GetIntFromConfig(aSection, KWGListPriority(), priority);
#endif

	TBool	useClassArray;
	if ( !GetBoolFromConfig(aSection, KWGUseArray(), useClassArray) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KWGUseArray());
		SetBlockResult(EFail);
		}
	else
		{
		TInt	err=KErrNone;
		INFO_PRINTF2(_L("Use Class array:%d"), useClassArray);
		
		if ( useClassArray )
			{
			if(	hasPriority )
				{
#if defined(SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS)
				TInt	theScrnNum;
				if(	GetIntFromConfig(aSection, KWGScreenNumber(), theScrnNum))
					{
					INFO_PRINTF1(_L("WindowGroupList(CArrayFixFlat< TInt >*, TInt, TInt)"));
					err=iWsSession->WindowGroupList(numWGListCArray, theScrnNum, priority);
					}
				else
#endif
					{
					INFO_PRINTF1(_L("WindowGroupList(TInt, CArrayFixFlat<TInt>*)"));
					err=iWsSession->WindowGroupList(priority, numWGListCArray);
					}
				}
			else
				{
				INFO_PRINTF1(_L("WindowGroupList(CArrayFixFlat<TInt>*)"));
				err=iWsSession->WindowGroupList(numWGListCArray);
				}
			}
		else
			{
			if ( hasPriority )
				{
				INFO_PRINTF1(_L("WindowGroupList(TInt, RArray<RWsSession::TWindowGroupChainInfo>*)"));
				err=iWsSession->WindowGroupList(priority, &numWGListRArray);
				}
			else
				{
				INFO_PRINTF1(_L("WindowGroupList(RArray<RWsSession::TWindowGroupChainInfo>)"));
				err=iWsSession->WindowGroupList(&numWGListRArray);
				}
			}

		if ( err!=KErrNone )
			{
			ERR_PRINTF2(KLogError, err);
			SetError(err);
			}
		else
			{
			if ( useClassArray )
				{
				TInt	actual=0;
				INFO_PRINTF2(_L("numWGListCArray:%d"), numWGListCArray->Count());
				for ( TInt index=0; index<numWGListCArray->Count(); ++index )
					{
					// Gets a list of identifiers of all window groups in all window server sessions
					actual=(*numWGListCArray)[index];
					INFO_PRINTF3(_L("CArrayFixFlat[%d]= :%d"), index, actual);
					}
				}
			else
				{
				RWsSession::TWindowGroupChainInfo	actual;
				INFO_PRINTF2(_L("numWGListRArray:%d"), numWGListRArray.Count());
				for ( TInt index=0; index<numWGListRArray.Count(); ++index )
					{
					// Gets a list of identifiers of all window groups in all window server sessions
					actual=numWGListRArray[index];
					INFO_PRINTF4(_L("RArray{%d] iId:%d iParentId:%d"), index, actual.iId, actual.iParentId);
					}
				}
			}
		}

	CleanupStack::PopAndDestroy(2, numWGListCArray);
	}

void CT_DataWsSession::DoCmdGetFocusWindowGroup(const TDesC& aSection)
	{
	TInt	actual=0;

#if defined(SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS)
	TInt	theScrnNum=0;
	if ( GetIntFromConfig(aSection, KWGScreenNumber(), theScrnNum) )
		{
		INFO_PRINTF1(_L("RWsSession::GetFocusWindowGroup(TInt aScreenNumber)  call"));
		actual=iWsSession->GetFocusWindowGroup(theScrnNum);
		}
	else
#endif
		{
		INFO_PRINTF1(_L("RWsSession::GetFocusWindowGroup() call"));
		actual=iWsSession->GetFocusWindowGroup();
		}
	INFO_PRINTF2(_L("Window Group Identifier:%d"), actual);

	TInt 	expected=0;
	if ( GetIntFromConfig(aSection, KFldExpected(), expected) )
		{
		if ( actual!=expected )
			{
			ERR_PRINTF1(_L("Window group identifier is not as expected!"));
			SetBlockResult(EFail);
			}
		}
	}

void CT_DataWsSession::DoCmdGetDefaultOwningWindow(const TDesC& aSection)
	{
	TInt	actual=0;
	TBool	dataOk=ETrue;

	TInt	theScrnNum=0;
	if(	GetIntFromConfig(aSection, KWGScreenNumber(), theScrnNum))
		{
#if defined(SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS)
		INFO_PRINTF1(_L("RWsSession::GetDefaultOwningWindow(TInt aScreenNumber)  call"));
		actual=iWsSession->GetDefaultOwningWindow(theScrnNum);
#else
		dataOk=EFalse;
		ERR_PRINTF1(_L("SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS Not Supported"));
		SetBlockResult(EFail);
#endif
		}
	else
		{
		INFO_PRINTF1(_L("RWsSession::GetDefaultOwningWindow()  call"));
		actual=iWsSession->GetDefaultOwningWindow();
		}

	if ( dataOk )
		{
		INFO_PRINTF2(_L("default owning window:%d"), actual);

		TInt	expected=0;
		if ( !GetIntFromConfig(aSection, KFldExpected(), expected) )
			{
			ERR_PRINTF2(KLogMissingParameter, &KFldExpected());
			SetBlockResult(EFail);
			}
		else
			{
			if ( actual!=expected)
				{
				ERR_PRINTF1(_L("Default Owning Window is not as expected!"));
				SetBlockResult(EFail);
				}
			}
		}
	}

void CT_DataWsSession::DoCmdSetWindowGroupOrdinalPosition(const TDesC& aSection)
	{
	TBool	dataOk=ETrue;

	TInt		 inputWGId;
	if ( !GetIntFromConfig(aSection, KWGOrdinalId(), inputWGId) )
		{
		TPtrC		 objectName;
		if ( GetStringFromConfig(aSection, KFldWindowGroup(), objectName) )
			 {
			 INFO_PRINTF1(_L("Get CT_DataWindowGroup's wrapper. "));
			 CDataWrapperBase* wrapper = NULL;
			 wrapper = static_cast<CDataWrapperBase*>(GetDataWrapperL(objectName));
			 if(wrapper)
				 {
				 inputWGId=wrapper->GetIdentifier();
				 INFO_PRINTF2(_L("Window group's identifier is: %d"), inputWGId);
				 }
			 else
				 {
				 dataOk=EFalse;
				 ERR_PRINTF1(_L("Window group's wrapper pointer is NULL"));
				 SetBlockResult(EFail);
				 }
			 }
		else
			 {
			 dataOk=EFalse;
			 ERR_PRINTF2(KLogMissingParameter, &KWGOrdinalId());
			 SetBlockResult(EFail);
			 }
		}
   	
	TInt	inputWGOrdinalPos;
	if ( !GetIntFromConfig(aSection, KWGOrdinalPosition(), inputWGOrdinalPos) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KWGOrdinalPosition());
		SetBlockResult(EFail);
		}

	if ( dataOk )
		{
		TInt	err=iWsSession->SetWindowGroupOrdinalPosition(inputWGId, inputWGOrdinalPos);

		if ( err!=KErrNone )
			{
			ERR_PRINTF2(KLogError, err);
			SetError(err);
			}
		}
	}

void CT_DataWsSession::DoCmdGetWindowGroupClientThreadId(const TDesC& aSection)
	{
	TInt	inputWindowGroupIdentifier=0;
	if ( !GetIntFromConfig(aSection, KWindowGroupIdentifier(), inputWindowGroupIdentifier) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KWindowGroupIdentifier());
		SetBlockResult(EFail);
		}
	else
		{
		TThreadId	threadId;
		TInt		err=iWsSession->GetWindowGroupClientThreadId(inputWindowGroupIdentifier, threadId);
		TUint64		actual=threadId.Id();
		INFO_PRINTF1(_L("RWsSession::GetWindowGroupClientThreadId"));
		INFO_PRINTF2(_L("actual ThreadId:%d"), actual);
		if ( err!=KErrNone )
			{
			ERR_PRINTF2(KLogError, err);
			SetError(err);
			}
		}
	}

void CT_DataWsSession::DoCmdGetWindowGroupHandle(const TDesC& aSection)
    {
	TInt	inputWGId=0;
	if ( !GetIntFromConfig(aSection, KInputWGId(), inputWGId) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KInputWGId());
		SetBlockResult(EFail);
		}
	else
		{
		TInt	actual=iWsSession->GetWindowGroupHandle(inputWGId);
		INFO_PRINTF2(_L("Window group handle :%d"), actual);
		}
    }

void CT_DataWsSession::DoCmdGetWindowGroupOrdinalPriority(const TDesC& aSection)
    {
	TInt	inputWGId=0;
	if ( !GetIntFromConfig(aSection, KWGOrdinalPriority(), inputWGId))
		{
		ERR_PRINTF2(KLogMissingParameter, &KWGOrdinalPriority());
		SetBlockResult(EFail);
		}
	else
		{
		TInt	actual=iWsSession->GetWindowGroupOrdinalPriority(inputWGId);
		INFO_PRINTF2(_L("Window Group Ordinal Priority:%d"), actual);
		
		TInt	expected;
		if ( GetIntFromConfig(aSection, KFldExpected(), expected) )
			{
			if ( actual!=expected )
				{
				ERR_PRINTF1(KLogNotExpectedValue);
				SetBlockResult(EFail);
				}
			}
		}
    }

void CT_DataWsSession::DoCmdGetWindowGroupNameFromIdentifier(const TDesC& aSection)
	{
	TInt 	inquiredWGId=0;
	TInt	rtnStatus;

	if ( !GetIntFromConfig(aSection, KWGinquiredId(), inquiredWGId) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KWGinquiredId());
		SetBlockResult(EFail);
		}
	else
		{
		TBuf<KGroupNameMaxSize> storeAWindowName;
		INFO_PRINTF2(_L("Window Group inquired Id:%d"),inquiredWGId);
		rtnStatus= iWsSession->GetWindowGroupNameFromIdentifier(inquiredWGId, storeAWindowName);
		INFO_PRINTF2(_L("return status:%d"),rtnStatus);

		if (rtnStatus==KErrNone)
			{
			INFO_PRINTF2(_L("the length of  buffer:%d"),storeAWindowName.Length());
			INFO_PRINTF1(_L("the name of window group:"));
			INFO_PRINTF1(storeAWindowName);
			}
		else
			{
			ERR_PRINTF1(_L("GetWindowGroupNameFromIdentifier function is fail!"));
			SetBlockResult(EFail);
			}
		}
	}

void CT_DataWsSession::DoCmdFindWindowGroupIdentifier(const TDesC& aSection)
	{
	TInt	previousId=iWindowGroupIdentifier;
	GetIntFromConfig(aSection, KFindWGPreId(), previousId);
	INFO_PRINTF2(_L("previous window group id:%d"), previousId);

	TInt	nextId;
	TPtrC	matchString;
	if ( GetStringFromConfig(aSection, KMatchWGString(), matchString) )
		{
		TInt	offset=0;
		GetIntFromConfig(aSection, KFldOffset(), offset);
		nextId=iWsSession->FindWindowGroupIdentifier(previousId, matchString, offset);
		}
	else
		{
		RThread		proc;
		TThreadId	threadId=proc.Id();

		TInt	id;
		if ( GetIntFromConfig(aSection, KThreadId(), id) )
			{
			threadId=id;
			}
		nextId=iWsSession->FindWindowGroupIdentifier(previousId, threadId);
		}

	if ( nextId<0 )
		{
		ERR_PRINTF1(_L("failed to find Window group name function !"));
		SetError(nextId);
		}
	else
		{
		iWindowGroupIdentifier=nextId;
		}
	}

void CT_DataWsSession::DoCmdFetchMessage(const TDesC& aSection)
	{
	TUid		uid;
	TPtr8		params(NULL,0);
	TWsEvent	event;
	TInt		err=iWsSession->FetchMessage(uid, params, event);
    TInt expected;
	if ( GetIntFromConfig(aSection, KFldExpected(), expected) )
		{
		if ( err!=expected )
			{
			ERR_PRINTF2(KLogError, err);
			SetBlockResult(EFail);
			}
		}
	}

void CT_DataWsSession::DoCmdSetShadowVector(const TDesC& aSection)
	{
	// Get test data for command input parameter(s)
	TPoint	setPtShdwVet;
	if ( !GetPointFromConfig(aSection, KSetShadowVec(), setPtShdwVet) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KSetShadowVec());
		SetBlockResult(EFail);
		}
	else
		{
		// Execute command and log parameters
		INFO_PRINTF1(_L("execute SetShadowVector(const TPoint &aVector)"));
		iWsSession->SetShadowVector(setPtShdwVet);
		}
    }

void CT_DataWsSession::DoCmdShadowVector(const TDesC& aSection)
	{
	// Get test data for command input parameter(s)
	TPoint	actual=iWsSession->ShadowVector();
	INFO_PRINTF3(_L("execute ShadowVector() x=%d y=%d"), actual.iX, actual.iY);

	TPoint	expected;
	if ( !GetPointFromConfig(aSection, KExpectShadowVector(), expected) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KExpectShadowVector());
		SetBlockResult(EFail);
		}
	else
		{
		if ( actual!=expected )
			{
			ERR_PRINTF1(_L("The current value of the shadow vector is not as expected!"));
			SetBlockResult(EFail);
			}
		}
    }

void CT_DataWsSession::DoCmdSetBackgroundColor(const TDesC& aSection)
	{
	TRgb	datColour;
	if ( !GetRgbFromConfig(aSection, KBGColour, datColour) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KBGColour());
		SetBlockResult(EFail);
		}
	else
		{
		// Execute command and log parameters
		INFO_PRINTF1(_L("execute SetColor(TRgb)"));
		iWsSession->SetBackgroundColor(datColour);
		}
	}

void CT_DataWsSession::DoCmdGetBackgroundColor(const TDesC& aSection)
	{
	// Get test data for command input parameter(s)
	TRgb	actualBgColour=iWsSession->GetBackgroundColor();

	TRgb	expectBgColour;
	if ( !GetRgbFromConfig(aSection, KExpectBgColour(), expectBgColour) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KExpectBgColour());
		SetBlockResult(EFail);
		}
	else
		{
		if ( actualBgColour!=expectBgColour )
			{
			ERR_PRINTF1(_L("The current value of the shadow vector is not as expected!"));
			SetBlockResult(EFail);
			}
		}
	}

void CT_DataWsSession::DoCmdSetSystemPointerCursor(const TDesC& aSection)
    {
    RWsPointerCursor	sysPointerCursor=RWsPointerCursor(*iWsSession);

	INFO_PRINTF1(_L("RWsSession::SetSystemPointerCursor() call"));
	TInt	inputCursorNumber=0;
	if ( !GetIntFromConfig(aSection, KInputCursorNumber(), inputCursorNumber) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KExpectBgColour());
		SetBlockResult(EFail);
		}
	else
		{
		INFO_PRINTF2(_L("CursorNumber:%d"),inputCursorNumber);
		TInt	err=iWsSession->SetSystemPointerCursor(sysPointerCursor,inputCursorNumber);
		if ( err!=KErrNone )
			{
			ERR_PRINTF2(KLogError, err);
			SetError(err);
			}
		}
	}

void CT_DataWsSession::DoCmdClearSystemPointerCursor(const TDesC& aSection)
	{
	TInt	inputCursorNumber=0;

	if ( !GetIntFromConfig(aSection, KInputCursorNumber(), inputCursorNumber) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KInputCursorNumber());
		SetBlockResult(EFail);
		}
	else
		{
		INFO_PRINTF2(_L("CursorNumber:%d"),inputCursorNumber);
		INFO_PRINTF1(_L("RWsSession::ClearSystemPointerCursor"));
		iWsSession->ClearSystemPointerCursor(inputCursorNumber);
		}
	}

void CT_DataWsSession::DoCmdClaimSystemPointerCursorList()
	{
	INFO_PRINTF1(_L("RWsSession::ClaimSystemPointerCursorList() call"));
	TInt	err=iWsSession->ClaimSystemPointerCursorList();

	if ( err!=KErrNone )
		{
		ERR_PRINTF2(KLogError, err);
		SetError(err);
		}
	}

void CT_DataWsSession::DoCmdFreeSystemPointerCursorList()
	{
	INFO_PRINTF1(_L("RWsSession::FreeSystemPointerCursorList() call"));
	iWsSession->FreeSystemPointerCursorList();
	}

void CT_DataWsSession::DoCmdSetCustomTextCursorL(const TDesC& aSection)
	{
	TBool	dataOk=ETrue;

	TInt	identifier;
	if ( !GetIntFromConfig(aSection, KFldIdentifier(), identifier) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KFldIdentifier);
		SetBlockResult(EFail);
		}

	CArrayFixFlat<TSpriteMember>*	spriteMember = new (ELeave) CArrayFixFlat<TSpriteMember>(1);
	if ( !CT_GraphicsUtil::GetSpriteMemberListL(*this, aSection, KFldSpriteMember, *spriteMember) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KFldSpriteMember);
		SetBlockResult(EFail);
		}
	TArray<TSpriteMember>	spriteArray = spriteMember->Array();

	TSpriteFlags	spriteFlags;
	if ( !CT_GraphicsUtil::ReadSpriteFlags(*this, aSection, KFldSpriteFlags, spriteFlags) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KFldSpriteFlags);
		SetBlockResult(EFail);
		}

	RWsSession::TCustomTextCursorAlignment	alignment;
	if ( !CT_GraphicsUtil::ReadCustomTextCursorAlignment(*this, aSection, KFldAlignment, alignment) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KFldAlignment);
		SetBlockResult(EFail);
		}

	if ( dataOk )
		{
		INFO_PRINTF1(_L("SetCustomTextCursor(TInt, TArray< TSpriteMember >, TUint, TCustomTextCursorAlignment)"));
		TInt	err=iWsSession->SetCustomTextCursor(identifier, spriteArray, (TUint)spriteFlags, alignment);

		if ( err!=KErrNone )
			{
			ERR_PRINTF2(KLogError, err);
			SetError(err);
			}
		}
	}

void CT_DataWsSession::DoCmdResourceCount(const TDesC& aSection)
	{
	TInt	resourceCount=iWsSession->ResourceCount();
	INFO_PRINTF2(_L("RWsSession::ResourceCount() %d"), resourceCount);

	// get expected difference from parameters
	TInt	expectedDifference;
	if ( GetIntFromConfig(aSection, KExpectedDiff(), expectedDifference) )
		{
		TInt	actualDifference=resourceCount-iResourceCount;
		if ( actualDifference != expectedDifference )
			{
			ERR_PRINTF3(_L("Resource count difference is not as expected! expected: %d, actual: %d"), expectedDifference, actualDifference);
			SetBlockResult(EFail);
			}
		}
	iResourceCount = resourceCount;
	}

void CT_DataWsSession::DoCmdPasswordEntered()
	{
	INFO_PRINTF1(_L("RWsSession::PasswordEntered() call"));
	iWsSession->PasswordEntered();
	}

void CT_DataWsSession::DoCmdComputeMode(const TDesC& aSection)
	{
	RWsSession::TComputeMode	mode;

	INFO_PRINTF1(_L("RWsSession::ComputeMode() call"));
	if ( !CT_GraphicsUtil::ReadComputeMode(*this, aSection, KComputeMode(), mode) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KComputeMode());
		SetBlockResult(EFail);
		}
	else
		{
		iWsSession->ComputeMode(mode);
		}
	}


void CT_DataWsSession::DoCmdHeapCount(const TDesC& aSection)
	{
	TInt	expectedCount;
	TInt	heapCount;

	if ( !GetIntFromConfig(aSection, KExpectedHeapCount(), expectedCount) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KExpectedHeapCount());
		SetBlockResult(EFail);
		}
	else
		{
		INFO_PRINTF2(_L("expected count: %d"), expectedCount);
		INFO_PRINTF1(_L("RWsSession::HeapCount() call"));
		heapCount=iWsSession->HeapCount();
		INFO_PRINTF2(_L("RWsSession::HeapCount(): %d"), heapCount);
		if ( expectedCount > heapCount )
			{
			ERR_PRINTF3(_L("Heap count is lower than expected! expected: %d, actual: %d"), expectedCount, heapCount);
			SetBlockResult(EFail);
			}
		}
	}

void CT_DataWsSession::DoCmdSetModifierState(const TDesC& aSection)
	{
	TBool	dataOk=ETrue;

	TEventModifier	eventModifier;
	if ( !CT_GraphicsUtil::ReadEventModifier(*this, aSection, KInputPermanentModifier(), eventModifier) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KInputPermanentModifier());
		SetBlockResult(EFail);
		}

	TModifierState	modifierState;
	if(	!CT_GraphicsUtil::ReadModifierState(*this, aSection, KInputPermanentModifierState(), modifierState) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KInputPermanentModifierState());
		SetBlockResult(EFail);
		}

	if ( dataOk )
		{
		INFO_PRINTF1(_L("RWsSession::SetModifierState"));
		TInt	err = iWsSession->SetModifierState(eventModifier, modifierState);
		if ( err!=KErrNone )
			{
			ERR_PRINTF2(KLogError, err);
			SetError(err);
			}
		}
	}

void CT_DataWsSession::DoCmdGetModifierState(const TDesC& aSection)
    {
	TInt	actual=iWsSession->GetModifierState();
	INFO_PRINTF2(_L("GetModifierState:%d"), actual);

	TUint 	expected=0;
	if ( CT_GraphicsUtil::ReadEventModifier(*this, aSection, KFldExpected(), expected) )
		{
		if ( actual!=(TInt)expected )
			{
			ERR_PRINTF1(_L("ModifierState is not as expected!"));
			SetBlockResult(EFail);
			}
		}
	}

void CT_DataWsSession::DoCmdRequestOffEventsL(const TDesC& aSection)
	{
	TBool 	eventOffOn;
	if ( !GetBoolFromConfig(aSection, KSetEventOffOn(), eventOffOn) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KSetEventOffOn());
		SetBlockResult(EFail);
		}
	else
		{
		RWindowTreeNode*	treeNodeObj=NULL;
		TPtrC 	treeNodeObjectName;
		if ( GetStringFromConfig(aSection, KWTreeNodeObj(), treeNodeObjectName) )
			{
			treeNodeObj = static_cast<RWindowTreeNode*>(GetDataObjectL(treeNodeObjectName));
			}

		INFO_PRINTF1(_L("RWsSession::RequestOffEvents(TBool, RWindowTreeNode*) call"));
		TInt	err=iWsSession->RequestOffEvents(eventOffOn, treeNodeObj);
		if ( err!=KErrNone )
			{
			ERR_PRINTF2(KLogError, err);
			SetError(err);
			}
		}
	}

void CT_DataWsSession::DoCmdGetDefModeMaxNumColors(const TDesC& aSection)
	{
	TInt	colors;
	TInt	grays;

	INFO_PRINTF1(_L("RWsSession::GetDefModeMaxNumColors(TInt &aColor, TInt &aGray) call"));
		
	TDisplayMode	displayMode;
#if defined(SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS)
	TInt			theScrnNum=0;
	if ( GetIntFromConfig(aSection, KWGScreenNumber(), theScrnNum) )
		{
		displayMode=iWsSession->GetDefModeMaxNumColors(theScrnNum, colors, grays);
		}
	else
#endif
		{
		displayMode=iWsSession->GetDefModeMaxNumColors(colors, grays);
		}
	INFO_PRINTF4(_L("RWsSession::GetDefModeMaxNumColors() DisplayMode:%d Colors:%d Grays:%d"), displayMode, colors, grays);

	TDisplayMode	expectedDisplayMode;
	if ( CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDefDisplayMode(), expectedDisplayMode) )
		{
		if ( expectedDisplayMode!=displayMode )
			{
			ERR_PRINTF1(KLogNotExpectedValue);
			SetBlockResult(EFail);
			}
		}
	TInt	expected=0;
	if ( GetIntFromConfig(aSection, KDefModeMaxNumColor(), expected) )
		{
		if ( expected!=colors )
			{
			ERR_PRINTF1(KLogNotExpectedValue);
			SetBlockResult(EFail);
			}
		}
	if ( GetIntFromConfig(aSection, KDefModeMaxNumGray(), expected) )
		{
		if ( expected!=grays )
			{
			ERR_PRINTF1(KLogNotExpectedValue);
			SetBlockResult(EFail);
			}
		}
	}

void CT_DataWsSession::DoCmdGetColorModeListL(const TDesC& aSection)
	{
	TBool	nullPointer=EFalse;
	GetBoolFromConfig(aSection, KFldNullPointer(), nullPointer);

	CArrayFixFlat<TInt>*	modeList=NULL;
	if ( !nullPointer )
		{
		modeList=new (ELeave) CArrayFixFlat<TInt>(iColorModeCount);
		}
	CleanupStack::PushL(modeList);

	TBool	dataOk=ETrue;
	TInt	err=KErrNone;
#if defined(SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS)
	TInt	inputScreenNo=0;
	if ( GetIntFromConfig(aSection, KInputScrnNo(), inputScreenNo))
		{
		INFO_PRINTF1(_L("RWsSession::GetColorModeList(TInt aScreenNumber, CArrayFixFlat< TInt > *aModeList) call"));
		err=iWsSession->GetColorModeList(inputScreenNo, modeList);
		}
	else
#endif
		{
		INFO_PRINTF1(_L("RWsSession::GetColorModeList(CArrayFixFlat< TInt > *aModeList) call"));
		err=iWsSession->GetColorModeList(modeList);
		}

	if ( err<KErrNone )
		{
		ERR_PRINTF2(KLogError, err);
		SetError(err);
		}
	else
		{
		if ( dataOk )
			{
			if ( nullPointer )
				{
				iColorModeCount=err;
				}
			else
				{
				INFO_PRINTF2(_L("Color Mode List array count:%d"), modeList->Count());
				for ( TInt index=0; index<modeList->Count(); ++index )
					{
					INFO_PRINTF2(_L("Content of Color Mode List:%d"), (*modeList)[index]);
					}
				}
			}
		}

	CleanupStack::PopAndDestroy(modeList);
	}

void CT_DataWsSession::DoCmdSetPointerCursorArea(const TDesC& aSection)
	{
	// Get test data for command input parameter(s)
	TRect	setRectArea;
	if ( !GetRectFromConfig(aSection, KPtrCurPosArea, setRectArea) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KPtrCurPosArea());
		SetBlockResult(EFail);
		}
	else
		{
		// Execute command and log parameters
		INFO_PRINTF1(_L("execute SetPointerCursorPosition(TPoint)"));
		
		TInt	setScrnSizeMode;
		if ( !GetIntFromConfig(aSection, KSetScrnSizeMode, setScrnSizeMode) )
			{
			iWsSession->SetPointerCursorArea(setRectArea);
			}
		else
			{
			iWsSession->SetPointerCursorArea(setScrnSizeMode,setRectArea);
			}
		}
	}

void CT_DataWsSession::DoCmdPointerCursorArea(const TDesC& aSection)
	{
	// Get test data for command input parameter(s)
	TRect	actual;
	TInt	theScreenSizeMode=0;
	if ( !GetIntFromConfig(aSection, KSetScrnSizeMode, theScreenSizeMode) )
		{
		actual=iWsSession->PointerCursorArea();
		LogRect(_L("PointerCursorArea()"), actual);
		}
	else
		{
		actual=iWsSession->PointerCursorArea(theScreenSizeMode);
		LogRect(_L("PointerCursorArea(TInt)"), actual);
		}

	TRect	expected;
	if ( !GetRectFromConfig(aSection, KPtrCurPosArea, expected) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KPtrCurPosArea);
		SetBlockResult(EFail);
		}
	else
		{
		if ( actual!=expected )
			{
			ERR_PRINTF1(KLogNotExpectedValue);
			SetBlockResult(EFail);
			}
		}
	}


void CT_DataWsSession::DoCmdSetPointerCursorMode(const TDesC& aSection)
	{
	TPointerCursorMode  mode;
	if ( !CT_GraphicsUtil::ReadPointerCursorMode(*this, aSection, KSetPtrCurMode(), mode) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KSetPtrCurMode());
		SetBlockResult(EFail);
		}
	else
		{
		iWsSession->SetPointerCursorMode(mode);
		}
	}

void CT_DataWsSession::DoCmdSetClientCursorMode(const TDesC& aSection)
	{
	TPointerCursorMode  mode;
	if ( !CT_GraphicsUtil::ReadPointerCursorMode(*this, aSection, KSetCltCurMode(), mode) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KSetCltCurMode());
		SetBlockResult(EFail);
		}
	else
		{
		iWsSession->SetClientCursorMode(mode);
		}
	}

void CT_DataWsSession::DoCmdPointerCursorMode(const TDesC& aSection)
    {
	INFO_PRINTF1(_L("RWsSession::PointerCursorMode() call"));
	TPointerCursorMode	actual=iWsSession->PointerCursorMode();
	INFO_PRINTF2(_L("actual Pointer Cursor Mode:%d"), actual);

	TPointerCursorMode  expected;
	if ( !CT_GraphicsUtil::ReadPointerCursorMode(*this, aSection, KFldExpected(), expected) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KExpectPtrCursorMode());
		SetBlockResult(EFail);
		}
	else
		{
		if ( actual!=expected )
			{
			ERR_PRINTF1(_L("Pointer cursor mode is not as expected!"));
			SetBlockResult(EFail);
			}
		}
	}

void CT_DataWsSession::DoCmdSetDefaultSystemPointerCursor(const TDesC& aSection)
	{
	TInt	inputDefCursorNumber=0;
	INFO_PRINTF1(_L("RWsSession::SetDefaultSystemPointerCursor() call"));

	if ( !GetIntFromConfig(aSection, KInputDefaultCursorNumber(), inputDefCursorNumber))
		{
		ERR_PRINTF2(KLogMissingParameter, &KInputDefaultCursorNumber());
		SetBlockResult(EFail);
		}
	else
		{
		iWsSession->SetDefaultSystemPointerCursor(inputDefCursorNumber);
		}
	}

void CT_DataWsSession::DoCmdClearDefaultSystemPointerCursor()
	{
	INFO_PRINTF1(_L("RWsSession::ClearDefaultSystemPointerCursor() call"));
	iWsSession->ClearDefaultSystemPointerCursor();
	}

void CT_DataWsSession::DoCmdSetPointerCursorPosition(const TDesC& aSection)
	{
	// Get test data for command input parameter(s)
	TPoint	ptrCurPost;
	if ( !GetPointFromConfig(aSection, KSetPtrCurPosValue, ptrCurPost) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KSetPtrCurPosValue);
		SetBlockResult(EFail);
		}
	else
		{
		// Execute command and log parameters
		INFO_PRINTF1(_L("execute SetPointerCursorPosition(TPoint)"));
		iWsSession->SetPointerCursorPosition(ptrCurPost);
		}
	}

void CT_DataWsSession::DoCmdPointerCursorPosition(const TDesC& aSection)
	{
	// Get test data for command input parameter(s)
	TPoint	actualPtrCurPost=iWsSession->PointerCursorPosition();

	TPoint	expectPtrCurPost;
	if ( !GetPointFromConfig(aSection, KTPoint, expectPtrCurPost) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KTPoint);
		SetBlockResult(EFail);
		}
	else
		{
		// Execute command and log parameters
		INFO_PRINTF1(_L("execute SetPointerCursorPosition(TPoint)"));
		if ((expectPtrCurPost.iX!=expectPtrCurPost.iX)||(expectPtrCurPost.iY!=expectPtrCurPost.iY))
				{
				ERR_PRINTF1(_L("The cursor position is not as expected!"));
				SetBlockResult(EFail);
				}
		}
	}

void CT_DataWsSession::DoCmdSetDefaultFadingParameters(const TDesC& aSection)
	{
	TBool dataOk=ETrue;
	TInt	setBlackMap;
	TInt	setWhiteMap;
	
	if ( !GetIntFromConfig(aSection, KSetDefblackMapFading(), setBlackMap) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KSetDefblackMapFading);
		SetBlockResult(EFail);
		}

	if ( !GetIntFromConfig(aSection, KSetDefwhiteMapFading(), setWhiteMap) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KSetDefwhiteMapFading);
		SetBlockResult(EFail);
		}

	if ( dataOk )
		{
		iWsSession->SetDefaultFadingParameters(setBlackMap, setWhiteMap);
		}
	}

void CT_DataWsSession::DoCmdPrepareForSwitchOff()
	{
	INFO_PRINTF1(_L("RWsSession::PrepareForSwitchOff() call"));
	iWsSession->PrepareForSwitchOff();
	}


void CT_DataWsSession::DoCmdSetBufferSizeL(const TDesC& aSection)
	{
	TInt	theBuffersize;

	if ( !GetIntFromConfig(aSection, KSetBuffer(), theBuffersize) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KSetBuffer);
		SetBlockResult(EFail);
		}
	else
		{
		iWsSession->SetBufferSizeL(theBuffersize);
		INFO_PRINTF1(_L("RWsSession::SetBufferSizeL"));
		}
	}

void CT_DataWsSession::DoCmdSetMaxBufferSizeL(const TDesC& aSection)
	{
	TInt	theMaxBuffersize;

	if ( !GetIntFromConfig(aSection, KSetMaxBuffer(), theMaxBuffersize) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KSetBuffer);
		SetBlockResult(EFail);
		}
	else
		{
		iWsSession->SetMaxBufferSizeL(theMaxBuffersize);
		INFO_PRINTF1(_L("RWsSession::SetMaxBufferSizeL"));
		}
	}

void CT_DataWsSession::DoCmdSetSystemFaded(const TDesC& aSection)
	{
	TBool 	systemFadOffOn;
	TInt	blackMap;
	TInt	whiteMap;

	if ( !GetBoolFromConfig(aSection, KSetSysFading(), systemFadOffOn) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KSetSysFading());
		SetBlockResult(EFail);
		}
	else
		{
		INFO_PRINTF2(_L("the status of fad window :%d"),systemFadOffOn);
		if(	GetIntFromConfig(aSection, KSetblackMapFading(), blackMap))
			{
			if ( !GetIntFromConfig(aSection, KSetwhiteMapFading(), whiteMap) )
				{
				ERR_PRINTF2(KLogMissingParameter, &KSetwhiteMapFading);
				SetBlockResult(EFail);
				}
			else
				{
				iWsSession->SetSystemFaded(systemFadOffOn,blackMap,whiteMap);
				INFO_PRINTF1(_L("RWsSession::SetSystemFaded"));
				}
			}
		else
			{
			iWsSession->SetSystemFaded(systemFadOffOn);
			INFO_PRINTF1(_L("RWsSession::SetSystemFaded"));
			}
		}
	}

void CT_DataWsSession::DoCmdSetFocusScreen(const TDesC& aSection)
    {
	TInt	theScreenNo;
	if ( !GetIntFromConfig(aSection, KSetFocusScreen(), theScreenNo) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KSetFocusScreen());
		SetBlockResult(EFail);
		}
	else
		{
		iWsSession->SetFocusScreen(theScreenNo);
		INFO_PRINTF1(_L("RWsSession::SetFocusScreen"));
		}
	}

void CT_DataWsSession::DoCmdGetFocusScreen(const TDesC& aSection)
	{
	TInt 	actual=iWsSession->GetFocusScreen();
	INFO_PRINTF2(_L("RWsSession::GetFocusScreen()=%d"), actual);

	TInt	expected;
	if ( !GetIntFromConfig(aSection, KFldExpected(), expected) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KFldExpected());
		SetBlockResult(EFail);
		}
	else
		{
		if ( actual!=expected )
			{
			ERR_PRINTF1(_L("GetFocusScreen is not as expected!"));
			SetBlockResult(EFail);
			}
		}
	}

void CT_DataWsSession::DoCmdClearAllRedrawStores()
	{
	INFO_PRINTF1(_L("RWsSession::ClearAllRedrawStores() call"));
	iWsSession->ClearAllRedrawStores();
	}


void CT_DataWsSession::DoCmdLogCommand(const TDesC& aSection)
	{
	RWsSession::TLoggingCommand	inputCommand;
	if ( !CT_GraphicsUtil::ReadLoggingCommand(*this, aSection, KLogCommand(), inputCommand) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KLogCommand());
		SetBlockResult(EFail);
		}
	else
		{
		INFO_PRINTF1(_L("RWsSession::LogCommand() call"));
		iWsSession->LogCommand(inputCommand);
		}
	}


void CT_DataWsSession::DoCmdLogMessage(const TDesC& aSection)
    {
	TPtrC	theMessage;

	if ( !GetStringFromConfig(aSection, KLogMessage(), theMessage) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KLogMessage());
		SetBlockResult(EFail);
		}
	else
		{
		INFO_PRINTF1(_L("RWsSession::LogMessage() call"));
		iWsSession->LogMessage(theMessage);
		}
	}

#if defined(SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS)
void CT_DataWsSession::DoCmdNumberOfScreens(const TDesC& aSection)
	{
	TInt    actual=iWsSession->NumberOfScreens();
	INFO_PRINTF2(_L("NumberOfScreens:%d"), actual);

	TInt	expected=0;
	if ( !GetIntFromConfig(aSection, KFldExpected(), expected) )
		{
		ERR_PRINTF2(KLogMissingParameter, &KFldExpected());
		SetBlockResult(EFail);
		}
	else
		{
		if ( actual!=expected )
			{
			ERR_PRINTF1(_L("NumberOfScreens is not as expected!"));
			SetBlockResult(EFail);
			}
		}
	}
#else
void CT_DataWsSession::DoCmdNumberOfScreens(const TDesC& /*aSection*/)
	{
	ERR_PRINTF1(_L("SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS Not Supported"));
	SetBlockResult(EFail);
	}
#endif

void CT_DataWsSession::DoCmdSimulateRawEvent(const TDesC& aSection)
	{
	TBool		dataOk=ETrue;
	TRawEvent	event;

	TRawEvent::TType	type=TRawEvent::ENone;
	if ( !CT_GraphicsUtil::ReadType(*this, aSection, KFldType(), type) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(_L("Missing parameter %S"), &KFldType());
		SetBlockResult(EFail);
		}
	else
		{
		event.Set(type);
		}

	TStdScanCode	stdScanCode;
	if ( CT_GraphicsUtil::ReadStdScanCode(*this, aSection, KFldStdScanCode(), stdScanCode) )
		{
		event.Set(type, stdScanCode);
		}

	TInt	deviceNumber;
	if ( GetIntFromConfig(aSection, KFldDeviceNumber, deviceNumber) )
		{
		event.SetDeviceNumber(deviceNumber);
		}

	TPoint	pointerPos(0,0);
	if ( GetPointFromConfig(aSection, KFldPos, pointerPos) )
		{
		event.Set(type, pointerPos.iX, pointerPos.iY);
		}

	TBool	tip;
	if ( GetBoolFromConfig(aSection, KFldTip, tip) )
		{
		event.SetTip(tip);
		}

	if ( dataOk )
		{
		INFO_PRINTF1(_L("RWsSession::SimulateRawEvent(TRawEvent) call"));
		iWsSession->SimulateRawEvent(event);
		}
	}

void CT_DataWsSession::DoCmdSimulateKeyEvent(const TDesC& aSection)
	{
	TBool	dataOk=ETrue;

	TKeyCode	keyCode;
	if ( !CT_GraphicsUtil::ReadKeyCode(*this, aSection, KFldKeyCode(), keyCode) )
		{
		dataOk=EFalse;
		ERR_PRINTF2(KLogMissingParameter, &KFldKeyCode());
		SetBlockResult(EFail);
		}

	TUint	modifiers=0;
	CT_GraphicsUtil::ReadEventModifier(*this, aSection, KFldModifiers(), modifiers);

	TInt	repeats=0;
	GetIntFromConfig(aSection, KFldRepeats(), repeats);

	if ( dataOk )
		{
		TKeyEvent	event;

		event.iCode=keyCode;
		event.iScanCode=keyCode;
		event.iModifiers=modifiers;
		event.iRepeats=repeats;
		INFO_PRINTF1(_L("RWsSession::SimulateKeyEvent(TKeyEvent) call"));
		iWsSession->SimulateKeyEvent(event);
		}
	}

/**
 Virtual RunL - Called on completion of an asynchronous command
 @see MTPActiveCallback
 @param aActive Active Object that RunL has been called on
 @pre N/A
 @post N/A
 @leave system wide error code
*/
void CT_DataWsSession::RunL(CActive* aActive, const TInt aIndex)
	{
	if ( aActive==iActiveEventReady )
		{
		RunEventReady(aIndex);
		}
	else if ( aActive==iActivePriorityKeyReady )
		{
		RunPriorityKeyReady(aIndex);
		}
	else if ( aActive==iActiveRedrawReady )
		{
		RunRedrawReady(aIndex);
		}
	else
		{
		ERR_PRINTF1(_L("Stray signal"));
		SetBlockResult(EFail);
		}
	DecOutstanding();
	}

/**
 Virtual DoCancel - Request to cancel the asynchronous command
 @see - MTPActiveCallback
 @param aActive Active Object that DoCancel has been called on
 @pre - N/A
 @post - N/A
 @leave system wide error code
*/
void CT_DataWsSession::DoCancel(CActive* aActive, const TInt aIndex)
	{
	if ( aActive==iActiveEventReady )
		{
		DoCancelEventReady(aIndex);
		}
	else if ( aActive==iActivePriorityKeyReady )
		{
		DoCancelPriorityKeyReady(aIndex);
		}
	else if ( aActive==iActiveRedrawReady )
		{
		DoCancelRedrawReady(aIndex);
		}
	else
		{
		ERR_PRINTF1(_L("Stray signal"));
		SetBlockResult(EFail);
		}
	DecOutstanding();
	}

void CT_DataWsSession::RunEventReady(const TInt aIndex)
	{
	TInt	err=iActiveEventReady->iStatus.Int();
	INFO_PRINTF2(_L("RunEventReady %d"), err);
	if ( err!=KErrNone )
		{
		ERR_PRINTF2(_L("RunL Error %d"), err);
		SetAsyncError(aIndex, err);
		}
	}

void CT_DataWsSession::DoCancelEventReady(const TInt /*aIndex*/)
	{
	}

void CT_DataWsSession::RunPriorityKeyReady(const TInt aIndex)
	{
	TInt	err=iActivePriorityKeyReady->iStatus.Int();
	INFO_PRINTF2(_L("RunPriorityKeyReady %d"), err);
	if ( err!=KErrNone )
		{
		ERR_PRINTF2(_L("RunL Error %d"), err);
		SetAsyncError(aIndex, err);
		}
	}

void CT_DataWsSession::DoCancelPriorityKeyReady(const TInt /*aIndex*/)
	{
	}

void CT_DataWsSession::RunRedrawReady(const TInt aIndex)
	{
	TInt	err=iActiveRedrawReady->iStatus.Int();
	INFO_PRINTF2(_L("RunRedrawReady %d"), err);
	if ( err!=KErrNone )
		{
		ERR_PRINTF2(_L("RunL Error %d"), err);
		SetAsyncError(aIndex, err);
		}
	}

void CT_DataWsSession::DoCancelRedrawReady(const TInt /*aIndex*/)
	{
	}
