systemswstubs/tiltcompensationstub/src/tiltcompensation/tiltcompensation.cpp
changeset 40 b7e5ed8c1342
parent 1 ffb8e2ddd8dc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswstubs/tiltcompensationstub/src/tiltcompensation/tiltcompensation.cpp	Tue Sep 07 08:19:48 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 <e32math.h>
+#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