javauis/amms_qt/jni/src/orientationcontrol.cpp
changeset 23 98ccebc37403
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/amms_qt/jni/src/orientationcontrol.cpp	Fri May 14 15:47:24 2010 +0300
@@ -0,0 +1,191 @@
+/*
+* Copyright (c) 2002-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:  JNI file for OrientationControl
+*
+*/
+
+
+//#include <jutils.h>
+
+#include "com_nokia_amms_control_audio3d_OrientationControl.h"
+#include <mmafunctionserver.h>
+#include "cammsorientationcontrolgroup.h"
+
+/**
+ * wrapper for CAMMSOrientationControlGroup::OrientationVectors()
+ */
+static void GetOrientationVectorsL(
+    CAMMSOrientationControlGroup* control,
+    TInt aOrientation[ KAMMSTwoVectorComponents ])
+{
+    control->OrientationVectorsL(aOrientation);
+}
+
+/**
+ * wrapper for CAMMSOrientationControlGroup::SetOrientationVectorsL()
+ */
+static void SetOrientationVectorsL(
+    CAMMSOrientationControlGroup* control,
+    TInt aFrontVector[ KAMMSVectorComponents ],
+    TInt aAboveVector[ KAMMSVectorComponents ])
+{
+    control->SetOrientationVectorsL(aFrontVector, aAboveVector);
+}
+
+/**
+ * wrapper for CAMMSOrientationControlGroup::SetOrientationL()
+ */
+static void SetOrientationL(
+    CAMMSOrientationControlGroup* control,
+    TInt aHeading,
+    TInt aPitch,
+    TInt aRoll)
+{
+    control->SetOrientationL(aHeading, aPitch, aRoll);
+}
+
+/*
+ * Class:     com_nokia_amms_control_audio3d_OrientationControl
+ * Method:    _setOrientation
+ * Signature:
+ */
+JNIEXPORT jint JNICALL
+Java_com_nokia_amms_control_audio3d_OrientationControl__1setOrientation(
+    JNIEnv*,
+    jclass,
+    jint aEventSource,
+    jint aControl,
+    jint aHeading,
+    jint aPitch,
+    jint aRoll)
+{
+    MMAFunctionServer* eventSource =
+       reinterpret_cast< MMAFunctionServer* >(aEventSource);
+
+    CAMMSOrientationControlGroup* control =
+        static_cast< CAMMSOrientationControlGroup* >(
+            reinterpret_cast< CAMMSControlGroup* >(aControl));
+
+    TInt error;
+    error = eventSource->ExecuteTrap(SetOrientationL, control,
+                                     aHeading, aPitch, aRoll);
+
+    return error;
+}
+
+/*
+ * Class:     com_nokia_amms_control_audio3d_OrientationControl
+ * Method:    _getOrientationVectros
+ * Signature:
+ */
+JNIEXPORT jintArray JNICALL
+Java_com_nokia_amms_control_audio3d_OrientationControl__1getOrientationVectors(
+    JNIEnv* aJni,
+    jclass,
+    jint aEventSource,
+    jint aControl,
+    jintArray aError)
+{
+    MMAFunctionServer* eventSource =
+        reinterpret_cast< MMAFunctionServer* >(aEventSource);
+
+    CAMMSOrientationControlGroup* control =
+        static_cast< CAMMSOrientationControlGroup* >(
+            reinterpret_cast< CAMMSControlGroup* >(aControl));
+
+    TInt orientation[ KAMMSTwoVectorComponents ];
+    TInt error;
+    error = eventSource->ExecuteTrap(
+                GetOrientationVectorsL,
+                control,
+                orientation);
+
+    // Java side method can not throw exception, store possible error here
+    // aError is an array of 1 element allocated at the java side
+    aJni->SetIntArrayRegion(
+        /*destination*/ aError,
+        /*first*/ 0,
+        /*count*/ 1,
+        /*source*/ &error);
+
+    // allocate new array
+    jintArray javaArray = aJni->NewIntArray(KAMMSTwoVectorComponents);
+
+    if (javaArray)
+    {
+        aJni->SetIntArrayRegion(
+            /*destination*/ javaArray,
+            /*first*/0,
+            /*count*/KAMMSTwoVectorComponents,
+            /*source*/ &orientation[ 0 ]);
+    }
+
+    return javaArray;
+}
+
+/*
+ * Class:     com_nokia_amms_control_audio3d_OrientationControl
+ * Method:    _setOrientation
+ * Signature:
+ */
+JNIEXPORT jint JNICALL
+Java_com_nokia_amms_control_audio3d_OrientationControl__1setOrientationVectors(
+    JNIEnv* aJni,
+    jclass,
+    jint aEventSource,
+    jint aControl,
+    jintArray aFrontVector,
+    jintArray aAboveVector)
+{
+    MMAFunctionServer* eventSource =
+        reinterpret_cast< MMAFunctionServer *>(aEventSource);
+
+    CAMMSOrientationControlGroup* control =
+        static_cast< CAMMSOrientationControlGroup* >(
+           reinterpret_cast< CAMMSControlGroup *>(aControl));
+
+    TInt i;
+
+    // copy java front vector array to native front vector array
+    TInt frontVector[ KAMMSVectorComponents ];
+    TInt count = aJni->GetArrayLength(aFrontVector);
+    jint* elements = aJni->GetIntArrayElements(aFrontVector, NULL);
+    for (i = 0; i < count; i++)
+    {
+        frontVector[ i ] = elements[ i ];
+    }
+    aJni->ReleaseIntArrayElements(aFrontVector, elements, 0);
+
+    // copy java above vector array to native above vector array
+    TInt aboveVector[ KAMMSVectorComponents ];
+    count = aJni->GetArrayLength(aAboveVector);
+    elements = aJni->GetIntArrayElements(aAboveVector, NULL);
+    for (i = 0; i < count; i++)
+    {
+        aboveVector[ i ] = elements[ i ];
+    }
+    aJni->ReleaseIntArrayElements(aAboveVector, elements, 0);
+
+    TInt error;
+    error = eventSource->ExecuteTrap(
+                SetOrientationVectorsL,
+                control,
+                frontVector,
+                aboveVector);
+
+    return error;
+}
+
+
+//  End of File