javauis/amms_akn/mmacontrol/src/cammsorientationcontrol.cpp
branchRCL_3
changeset 19 04becd199f91
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/amms_akn/mmacontrol/src/cammsorientationcontrol.cpp	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,142 @@
+/*
+* Copyright (c) 2005-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:  Manipulates the virtual orientation of an object.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32math.h>
+#include <jdebug.h>
+#include "cammsorientationcontrol.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// Destructor
+CAMMSOrientationControl::~CAMMSOrientationControl()
+{
+    DEBUG("AMMS::CAMMSOrientationControl::~CAMMSOrientationControl");
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSOrientationControl::SetOrientationL
+// Turns the object to the new orientation.
+// -----------------------------------------------------------------------------
+void CAMMSOrientationControl::SetOrientationL(
+    TInt aHeading,
+    TInt aPitch,
+    TInt aRoll)
+{
+    // Sets the Heading, Pitch, Roll values for the source/listener orientation.
+    // Parameters are given in thousandths of radians.
+    // SourceOrientationBase/ListenerLocationBase :
+    //
+    // NOTE: Effect API uses thousandths of radians for all three parameters,
+    // but JSR234 uses degrees.
+    //
+    // From e32Math.h: The multiplying factor to convert degrees to radians.
+
+    DEBUG_INT3("AMMS::CAMMSOrientationControl::SetOrientationL: %d, %d, %d",
+               aHeading, aPitch, aRoll);
+
+    TInt32 convertedHeading = (TInt32)(aHeading * KDegToRad *
+                                       1000);   // CSI: 47 Effect API uses thousands of radians #
+
+    TInt32 convertedPitch = (TInt32)(aPitch * KDegToRad *
+                                     1000);   // CSI: 47 Effect API uses thousands of radians #
+
+    TInt32 convertedRoll = (TInt32)(aRoll * KDegToRad *
+                                    1000);   // CSI: 47 Effect API uses thousands of radians #
+
+    DEBUG_INT3("AMMS::CAMMSOrientationControl::SetOrientationL: %d, %d, %d",
+               convertedHeading, convertedPitch, convertedRoll);
+
+    iOrientationEffect->SetOrientationL(
+        convertedHeading, convertedPitch, convertedRoll);
+
+    // Apply updated settings to Effect API.
+    iOrientationEffect->ApplyL();
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSOrientationControl::SetOrientationL
+// Turns the object to the new orientation.
+// -----------------------------------------------------------------------------
+void CAMMSOrientationControl::SetOrientationL(
+    TInt aFrontX, TInt aFrontY, TInt aFrontZ,
+    TInt aAboveX, TInt aAboveY, TInt aAboveZ)
+{
+    // Check in debug build that parameters are not zero vectors.
+    __ASSERT_DEBUG(((aFrontX != 0) ||
+                    (aFrontY != 0) ||
+                    (aFrontZ != 0)) &&
+                   ((aAboveX != 0) ||
+                    (aAboveY != 0) ||
+                    (aAboveZ != 0)),
+                   User::Invariant());
+
+    // Check in debug build that vectors are not parallel.
+    // Two vectors are parallel if their cross product is zero vector.
+    // Cross product of vectors a1*i + a2*j + a3*k and b1*i + b2*j + b3*k :
+    // (a2*b3 - a3*b2)i + (a3*b1 - a1*b3)j + (a1*b2 - a2*b1)k
+    __ASSERT_DEBUG(
+        ((aFrontY * aAboveZ) - (aFrontZ * aAboveY) != 0) ||
+        ((aFrontZ * aAboveX) - (aFrontX * aAboveZ) != 0) ||
+        ((aFrontX * aAboveY) - (aFrontY * aAboveX) != 0),
+        User::Invariant());
+
+    // Sets the Front and Above vectors for the orientation of the source/listener.
+
+    DEBUG_INT3("AMMS::CAMMSOrientationControl::SetOrientationL: Front %d, %d, %d",
+               aFrontX, aFrontY, aFrontZ);
+
+    DEBUG_INT3("AMMS::CAMMSOrientationControl::SetOrientationL: Above %d, %d, %d",
+               aAboveX, aAboveY, aAboveZ);
+
+    iOrientationEffect->SetOrientationVectorsL(
+        (TInt32)aFrontX, (TInt32)aFrontY, (TInt32)aFrontZ,
+        (TInt32)aAboveX, (TInt32)aAboveY, (TInt32)aAboveZ);
+
+    // Apply updated settings to Effect API.
+    iOrientationEffect->ApplyL();
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSOrientationControl::OrientationVectors
+// Gets the orientation of the object using two vectors.
+// -----------------------------------------------------------------------------
+void CAMMSOrientationControl::OrientationVectors(
+    TInt& aFrontX, TInt& aFrontY, TInt& aFrontZ,
+    TInt& aAboveX, TInt& aAboveY, TInt& aAboveZ)
+{
+    // Gets the orientation of the source.
+
+    iOrientationEffect->OrientationVectors(
+        (TInt32&)aFrontX, (TInt32&)aFrontY, (TInt32&)aFrontZ,
+        (TInt32&)aAboveX, (TInt32&)aAboveY, (TInt32&)aAboveZ);
+}
+
+// -----------------------------------------------------------------------------
+// CAMMSOrientationControl::CAMMSOrientationControl
+// C++ constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+CAMMSOrientationControl::CAMMSOrientationControl(CMMAPlayer* aPlayer)
+        : CAMMSControl(aPlayer)
+{
+}
+
+//  End of File