javaextensions/location/landmarks/src/coordinates.cpp
changeset 21 2a9601315dfc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/location/landmarks/src/coordinates.cpp	Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2008 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 implementation of Coordinates class
+ *
+*/
+
+
+// INTERNAL INCLUDES
+#include "javax_microedition_location_Coordinates.h"
+#include <lbsposition.h>
+#include "logger.h"
+
+LOCAL_C void CalculateBearingToL(TCoordinate* aSrc, TCoordinate* aDest,
+                                 TReal32* aBearing)
+{
+    TReal32 bearing;
+    User::LeaveIfError(aSrc->BearingTo(*aDest, bearing));
+    *aBearing = bearing;
+}
+
+/*
+ * Class:     javax_microedition_location_Coordinates
+ * Method:    _azimuthTo
+ * Signature: (IDDDD)F
+ */
+JNIEXPORT jfloat JNICALL Java_javax_microedition_location_Coordinates__1azimuthTo(
+    JNIEnv* /*aJniEnv*/,
+    jobject /*aPeer*/,
+    jdouble aSrcLatitude,
+    jdouble aSrcLongitude,
+    jdouble aDestLatitude,
+    jdouble aDestLongitude)
+{
+    JELOG2(EJavaLocation);
+
+    TReal32 azimuth = 0.0f;
+
+    TCoordinate src(aSrcLatitude, aSrcLongitude);
+    TCoordinate dest(aDestLatitude, aDestLongitude);
+
+    TRAPD(error, CalculateBearingToL(
+              &src,
+              &dest,
+              &azimuth));
+
+    if (error != KErrNone)
+    {
+        ELOG1(EJavaLocation,
+              "Java_javax_microedition_location_Coordinates__1azimuthTo - error %d", error);
+    }
+
+    return azimuth;
+}
+
+LOCAL_C void CalculateDistanceL(TCoordinate* aSrc, TCoordinate* aDest,
+                                TReal32* aDistance)
+{
+    TReal32 distance;
+    User::LeaveIfError(aSrc->Distance(*aDest, distance));
+    *aDistance = distance;
+}
+
+/*
+ * Class:     javax_microedition_location_Coordinates
+ * Method:    _distance
+ * Signature: (IDDDD)F
+ */
+JNIEXPORT jfloat JNICALL Java_javax_microedition_location_Coordinates__1distance(
+    JNIEnv* /*aJniEnv*/,
+    jobject /*aPeer*/,
+    jdouble aSrcLatitude,
+    jdouble aSrcLongitude,
+    jdouble aDestLatitude,
+    jdouble aDestLongitude)
+{
+    JELOG2(EJavaLocation);
+
+    TReal32 distance = -1.0f;
+
+    TCoordinate src(aSrcLatitude, aSrcLongitude);
+    TCoordinate dest(aDestLatitude, aDestLongitude);
+
+    //   TInt error = src->Distance( *dest,distance);
+    TRAPD(error, CalculateDistanceL(
+              &src,
+              &dest,
+              &distance));
+
+    if (error != KErrNone)
+    {
+        ELOG1(EJavaLocation,
+              "Java_javax_microedition_location_Coordinates__1distance - error %d", error);
+    }
+
+    return distance;
+}
+
+// End of file