diff -r 000000000000 -r cec860690d41 haitest/bspsvs/suite/hal/src/T_HALData.cpp --- /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); + } + } + }