diff -r 50974a8b132e -r 5d0ec8b709be serviceproviders/sapi_sensor/src/sensorinterface.cpp --- a/serviceproviders/sapi_sensor/src/sensorinterface.cpp Tue Nov 24 08:56:33 2009 +0200 +++ b/serviceproviders/sapi_sensor/src/sensorinterface.cpp Thu Dec 17 09:09:50 2009 +0200 @@ -21,7 +21,7 @@ #include #include #include - +#include // User Includes #include "sensorservice.h" #include "sensorinterface.h" @@ -482,6 +482,82 @@ outMap->DecRef(); }//end of GetChannelProperty + else if( ( aCmdName.CompareF( KCmdGetScaleFactor ) == 0 ) ) + { + if( aCallback ) + { + iErrorString = KErrSensorInvalidReq.operator()().Alloc(); + User::Leave( SErrInvalidServiceArgument ); + } + const TLiwGenericParam* channelInfoParam = NULL; + channelInfoParam = aInParamList.FindFirst( position, KChnlInfoMap ); + if ( !channelInfoParam ) + { + //Position based parsing + if( aInParamList.Count() != 0 ) + { + channelInfoParam = &aInParamList[EParamIndex0]; + } + else + { + iErrorString = KErrMissingChnlMap.operator()().Alloc(); + User::Leave( SErrMissingArgument ); + } + } + CheckInputTypeL( &channelInfoParam->Value(), + LIW::EVariantTypeMap, + KChnlInfoMap.operator&() ); + + TSensrvChannelInfo channelInfo; + const CLiwMap* chnlInfoMap = ( channelInfoParam->Value() ).AsMap(); + //Retreive Channel Info + GetChannelInfoL( channelInfo , chnlInfoMap ); + + TSensrvProperty measureProperty; + TSensrvProperty scaleProperty; + TRAPD(anErr,iSensorService->GetScaleFactorL( channelInfo , + measureProperty,scaleProperty )); + + if( anErr != KErrNone ) + { + iErrorString = KErrInvalidChnlMap.operator()().Alloc(); + User::Leave(KErrArgument); + } + TReal scaleFactor ; + TReal measureValue; + TInt scaleValue; + measureProperty.GetValue( measureValue );// 0 or 1 + scaleProperty.GetValue( scaleValue); // 8 or 12 + TReal outputValue; + TInt errPow; + errPow = Math::Pow(outputValue,2,scaleValue-1); + if( errPow == KErrNone ) + { + if( measureValue == 0 ) + { + scaleFactor = (2*9.8)/outputValue; + aOutParamList.AppendL( TLiwGenericParam( KReturnValue , + TLiwVariant( scaleFactor ) ) ); + } + else if(measureValue == 1) + { + scaleFactor = (8*9.8)/outputValue; + aOutParamList.AppendL( TLiwGenericParam( KReturnValue , + TLiwVariant( scaleFactor ) ) ); + } + else + { + iErrorString = KErrInvalidMeasureRange.operator()().Alloc(); + User::Leave(KErrArgument); + } + } + else + { + iErrorString = KErrInvalidPowValue.operator()().Alloc(); + User::Leave(KErrArgument); + } + + }//end of GetScaleFactor else { iErrorString = KErrSensorInvalidCmd.operator()().Alloc();