diff -r e71858845f73 -r e1758cbb96ac systemswstubs/tiltcompensationstub/src/tiltcompensation/tiltcompensation.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/systemswstubs/tiltcompensationstub/src/tiltcompensation/tiltcompensation.cpp Mon Oct 04 00:04:35 2010 +0300 @@ -0,0 +1,186 @@ +/* +* Copyright (c) 2007 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: Compensate function definition. +* +*/ + + +#include +#include "tiltcompensation.h" + +//----------------------------------------------------------------------------- +// Direction6D +//----------------------------------------------------------------------------- +// +EXPORT_C TInt Compensate( + const TTiltCompensationInput& aInput, + TTiltCompensationOutput& aOutput, + ) + { + TReal target; + TReal source( 0 ); + TReal inputY( aInput.iMagneticVector.iY ); + TReal inputZ( aInput.iMagneticVector.iZ ); + + if( aInput.iMagneticVector.iY > 0 && aInput.iMagneticVector.iZ > 0 ) + // 0 - 90 degrees + { + source = inputY / inputZ; + } + if( aInput.iMagneticVector.iY > 0 && aInput.iMagneticVector.iZ < 0 ) + // 90 - 180 degrees + { + source = inputZ / inputY * -1; + } + if( aInput.iMagneticVector.iY < 0 && aInput.iMagneticVector.iZ < 0 ) + // 180 - 270 degrees + { + source = inputY / inputZ; + } + if( aInput.iMagneticVector.iY < 0 && aInput.iMagneticVector.iZ > 0 ) + // 270 - 360 degrees + { + source = inputZ / inputY * -1; + } + + Math::ATan( target, source ); + TInt16 declination( ( target * 180 ) / 3.14 ); + + if( aInput.iMagneticVector.iY > 0 && aInput.iMagneticVector.iZ > 0 ) + // 0 - 90 degrees + { + } + if( aInput.iMagneticVector.iY > 0 && aInput.iMagneticVector.iZ < 0 ) + // 90 - 180 degrees + { + declination = declination + 90; + } + if( aInput.iMagneticVector.iY < 0 && aInput.iMagneticVector.iZ < 0 ) + // 180 - 270 degrees + { + declination = declination + 180; + } + if( aInput.iMagneticVector.iY < 0 && aInput.iMagneticVector.iZ > 0 ) + // 270 - 360 degrees + { + declination = declination + 270; + } + + if( inputY == 0 && inputZ > 0 ) + { + declination = 0; + } + if( inputY > 0 && inputZ == 0 ) + { + declination = 90; + } + if( inputY == 0 && inputZ < 0 ) + { + declination = 180; + } + if( inputY < 0 && inputZ == 0 ) + { + declination = 270; + } + + aOutput.iTheta = declination; + return KErrNone; + } + +//----------------------------------------------------------------------------- +// Direction6D +//----------------------------------------------------------------------------- +// +EXPORT_C TInt Compensate( + const TTiltCompensationInput& aInput, + TTiltCompensationOutput& aOutput, + const RParamsArray& aParamsArray ) + { + TReal target; + TReal source( 0 ); + TReal inputY( aInput.iMagneticVector.iY ); + TReal inputZ( aInput.iMagneticVector.iZ ); + + // Get parameters + for( TInt i = 0; i != aParamsArray.Count(); i++ ) + { + TInt parameter = aParamsArray[ i ]; + } + + if( aInput.iMagneticVector.iY > 0 && aInput.iMagneticVector.iZ > 0 ) + // 0 - 90 degrees + { + source = inputY / inputZ; + } + if( aInput.iMagneticVector.iY > 0 && aInput.iMagneticVector.iZ < 0 ) + // 90 - 180 degrees + { + source = inputZ / inputY * -1; + } + if( aInput.iMagneticVector.iY < 0 && aInput.iMagneticVector.iZ < 0 ) + // 180 - 270 degrees + { + source = inputY / inputZ; + } + if( aInput.iMagneticVector.iY < 0 && aInput.iMagneticVector.iZ > 0 ) + // 270 - 360 degrees + { + source = inputZ / inputY * -1; + } + + Math::ATan( target, source ); + TInt16 declination( ( target * 180 ) / 3.14 ); + + if( aInput.iMagneticVector.iY > 0 && aInput.iMagneticVector.iZ > 0 ) + // 0 - 90 degrees + { + } + if( aInput.iMagneticVector.iY > 0 && aInput.iMagneticVector.iZ < 0 ) + // 90 - 180 degrees + { + declination = declination + 90; + } + if( aInput.iMagneticVector.iY < 0 && aInput.iMagneticVector.iZ < 0 ) + // 180 - 270 degrees + { + declination = declination + 180; + } + if( aInput.iMagneticVector.iY < 0 && aInput.iMagneticVector.iZ > 0 ) + // 270 - 360 degrees + { + declination = declination + 270; + } + + if( inputY == 0 && inputZ > 0 ) + { + declination = 0; + } + if( inputY > 0 && inputZ == 0 ) + { + declination = 90; + } + if( inputY == 0 && inputZ < 0 ) + { + declination = 180; + } + if( inputY < 0 && inputZ == 0 ) + { + declination = 270; + } + + aOutput.iTheta = declination; + return KErrNone; + } + +// End of File