haitest/bspsvs/suite/hal/src/T_HALData.cpp
changeset 0 cec860690d41
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/haitest/bspsvs/suite/hal/src/T_HALData.cpp	Tue Feb 02 01:39:10 2010 +0200
@@ -0,0 +1,329 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "T_HALData.h"
+
+/*@{*/
+_LIT(KDeviceId,								"deviceid");
+_LIT(KHalEValue,							"halEValue");
+_LIT(KValue,								"value");
+_LIT(KExpected,								"expected");
+
+_LIT(KCmdSet,								"Set");
+_LIT(KCmdGet,								"Get");
+
+_LIT(KLogEnumNotFound,						"Enum '%S' not found");
+_LIT(KLogError,								"Error=%d");
+_LIT(KLogMissingParameter,					"Missing parameter '%S'");
+_LIT(KLogActualValue,						"Actual Value '%d' 0x%x");
+/*@}*/
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CT_HALData::CT_HALData(const THalTableLookup* aTable)
+:	CDataWrapperBase()
+,	iTable(aTable)
+,	iValue(-1)
+	{
+	}
+
+CT_HALData::~CT_HALData()
+/**
+ * Public destructor
+ */
+	{
+	}
+
+TAny* CT_HALData::GetObject()
+/**
+ * Return a pointer to the object that the data wraps
+ *
+ * @return	pointer to the object that the data wraps
+ */
+	{
+	return NULL;
+	}
+
+const CT_HALData::THalTableLookup* CT_HALData::LookUp(const TDesC& aValue)
+	{
+	const THalTableLookup*	ret=NULL;
+	TInt					index=0;
+	while ( (iTable[index].iHalFunctionSetPrepare!=NULL) &&
+			(iTable[index].iHalFunctionGetValidation!=NULL) && (ret==NULL) )
+		{
+		if ( iTable[index].iHalString==aValue )
+			{
+			ret=&iTable[index];
+			}
+		else
+			{
+			++index;
+			}
+		}
+	return ret;
+	}
+
+TBool CT_HALData::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+/**
+ * Process a command read from the ini file
+ *
+ * @param aCommand			The command to process
+ * @param aSection			The section in the ini containing data for the command
+ * @param aAsyncErrorIndex	Command index for async calls to return errors to
+ *
+ * @return					ETrue if the command is processed
+ *
+ * @leave					System wide error
+ */
+	{
+	TBool	ret=ETrue;
+	TInt	err=KErrNone;
+
+	if ( aCommand==KCmdSet )
+		{
+		err=DoCmdSet(aSection);
+		}
+	else if ( aCommand==KCmdGet)
+		{
+		err=DoCmdGet(aSection);
+		}
+	else
+		{
+		ret=CDataWrapperBase::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
+		}
+
+	if ( err!=KErrNone )
+		{
+		ERR_PRINTF2(KLogError, err);
+		SetError(err);
+		}
+
+	return ret;
+	}
+
+TInt CT_HALData::DoCmdSet(const TDesC& aSection)
+	{
+	TInt	err=KErrNone;
+
+	//	Do we have a device id
+	TInt	deviceId=0;
+	TBool	hasDeviceId=GetIntFromConfig(aSection, KDeviceId(), deviceId);
+
+	//	Get the HAL variable to set
+	TPtrC	enumString;
+	if ( GetStringFromConfig(aSection, KHalEValue(), enumString) )
+		{
+		const THalTableLookup*	entry=LookUp(enumString);
+
+		if ( entry==NULL )
+			{
+			//	HAL variable not valid
+			ERR_PRINTF2(KLogEnumNotFound, &enumString);
+			SetBlockResult(EFail);
+			}
+		else
+			{
+			TInt	value=0;
+			//	Read data from ini file for the value to set
+			if ( entry->iHalFunctionSetPrepare(this, aSection, value) )
+				{
+				//	Set the value
+				if ( hasDeviceId )
+					{
+					err=HAL::Set(deviceId, entry->iHalAttribute, value);
+					}
+				else
+					{
+					err=HAL::Set(entry->iHalAttribute, value);
+					}
+
+				if ( err==KErrNone )
+					{
+					//	Set was successful so store it locally
+					entry->iHalFunctionStore(this, value);
+					}
+				}
+			}
+		}
+	else
+		{
+		ERR_PRINTF2(KLogMissingParameter, &KHalEValue());
+		SetBlockResult(EFail);
+		}
+
+	return err;
+	}
+
+TInt CT_HALData::DoCmdGet(const TDesC& aSection)
+	{
+	TInt	err=KErrNone;
+
+	//	Do we have a device id
+	TInt	deviceId=0;
+	TBool	hasDeviceId=GetIntFromConfig(aSection, KDeviceId(), deviceId);
+
+	//	Get the HAL variable to set
+	TPtrC	enumString;
+	if ( GetStringFromConfig(aSection, KHalEValue(), enumString) )
+		{
+		const THalTableLookup*	entry=LookUp(enumString);
+
+		if ( entry==NULL )
+			{
+			//	HAL variable not valid
+			ERR_PRINTF2(KLogEnumNotFound, &enumString);
+			SetBlockResult(EFail);
+			}
+		else
+			{
+			//	HAL::Get testing works within a range (needed if we request the full palette)
+			//	Get the range of values to get
+			TInt	valueStart=0;
+			TInt	valueEnd=0;
+			if ( entry->iHalFunctionGetPrepare(this, aSection, valueStart, valueEnd) )
+				{
+				for ( iValue=valueStart; (iValue<=valueEnd) && (err==KErrNone); ++iValue )
+					{
+					//	Get the value
+					TInt	value=iValue;
+					if ( hasDeviceId )
+						{
+						err=HAL::Get(deviceId, entry->iHalAttribute, value);
+						}
+					else
+						{
+						err=HAL::Get(entry->iHalAttribute, value);
+						}
+
+					if ( err==KErrNone )
+						{
+						//	Get was successful validate the returned value and store it locally
+						INFO_PRINTF3(KLogActualValue, value, value);
+						entry->iHalFunctionGetValidation(this, aSection, value, entry->iHalForceValidation);
+						entry->iHalFunctionStore(this, value);
+						}
+					}
+				}
+			}
+		}
+	else
+		{
+		ERR_PRINTF2(KLogMissingParameter, &KHalEValue());
+		SetBlockResult(EFail);
+		}
+
+	return err;
+	}
+
+//	Prepare the value we are setting as a TInt
+TBool CT_HALData::SetPrepareInt(CDataWrapperBase* aThis, const TDesC& aSection, TInt& aValue)
+	{
+	TBool	ret=aThis->GetIntFromConfig(aSection, KValue(), aValue);
+	if ( !ret )
+		{
+		aThis->ERR_PRINTF2(KLogMissingParameter, &KValue());
+		aThis->SetBlockResult(EFail);
+		}
+
+	return ret;
+	}
+
+//	Prepare the value we are setting as a TUint
+TBool CT_HALData::SetPrepareUint(CDataWrapperBase* aThis, const TDesC& aSection, TInt& aValue)
+	{
+	TUint	uint=aValue;
+	TBool	ret=aThis->GetUintFromConfig(aSection, KValue(), uint);
+	if ( !ret )
+		{
+		aThis->ERR_PRINTF2(KLogMissingParameter, &KValue());
+		aThis->SetBlockResult(EFail);
+		}
+
+	aValue=uint;
+	return ret;
+	}
+
+//	Validate the returned value from a HAL::Get as a TBool
+void CT_HALData::GetValidationBool(CDataWrapperBase* aThis, const TDesC& aSection, TInt aValue, TBool aForceValidation)
+	{
+	TBool	expectedValue;
+	TBool	ret=aThis->GetBoolFromConfig(aSection, KExpected(), expectedValue);
+	if ( !ret )
+		{
+		if ( aForceValidation )
+			{
+			aThis->ERR_PRINTF2(KLogMissingParameter, &KExpected());
+			aThis->SetBlockResult(EFail);
+			}
+		}
+	else
+		{
+		if ( aValue!=expectedValue )
+			{
+			aThis->SetBlockResult(EFail);
+			aThis->ERR_PRINTF3(_L("Retrived Value(%d) != expectedValue(%d)"), aValue, expectedValue);
+			}
+		}
+	}
+
+//	Validate the returned value from a HAL::Get as a TInt
+void CT_HALData::GetValidationInt(CDataWrapperBase* aThis, const TDesC& aSection, TInt aValue, TBool aForceValidation)
+	{
+	TInt	expectedValue;
+	TBool	ret=aThis->GetIntFromConfig(aSection, KExpected(), expectedValue);
+	if ( !ret )
+		{
+		if ( aForceValidation )
+			{
+			aThis->ERR_PRINTF2(KLogMissingParameter, &KExpected());
+			aThis->SetBlockResult(EFail);
+			}
+		}
+	else
+		{
+		if ( aValue!=expectedValue )
+			{
+			aThis->SetBlockResult(EFail);
+			aThis->ERR_PRINTF3(_L("Retrived Value(%d) != expectedValue(%d)"), aValue, expectedValue);
+			}
+		}
+	}
+
+//	Validate the returned value from a HAL::Get as a TUint
+void CT_HALData::GetValidationUint(CDataWrapperBase* aThis, const TDesC& aSection, TInt aValue, TBool aForceValidation)
+	{
+	TUint	expectedValue;
+	TBool	ret=aThis->GetUintFromConfig(aSection, KExpected(), expectedValue);
+	if ( !ret )
+		{
+		if ( aForceValidation )
+			{
+			aThis->ERR_PRINTF2(KLogMissingParameter, &KExpected());
+			aThis->SetBlockResult(EFail);
+			}
+		}
+	else
+		{
+		if ( (TUint)aValue!=expectedValue )
+			{
+			aThis->SetBlockResult(EFail);
+			aThis->ERR_PRINTF3(_L("Retrived Value(%d) != expectedValue(%d)"), aValue, expectedValue);
+			}
+		}
+	}