upload tizen1.0 source
authorKim Kibum <kb0929.kim@samsung.com>
Sun, 29 Apr 2012 08:01:25 +0000 (17:01 +0900)
committerKim Kibum <kb0929.kim@samsung.com>
Sun, 29 Apr 2012 08:01:25 +0000 (17:01 +0900)
105 files changed:
TC/_export_env.sh [changed mode: 0644->0755]
TC/_export_target_env.sh
TC/build.sh
TC/config [new file with mode: 0644]
TC/tet_scen
TC/unit/Makefile
TC/unit/tslist
TC/unit/utc_location_search_poi.c [new file with mode: 0644]
TC/unit/utc_properties_last_position.c [deleted file]
configure.ac [changed mode: 0644->0755]
debian/changelog
debian/control
debian/libslp-location-dev.install
debian/libslp-location.install
debian/libslp-location.postinst
debian/rules
location/Makefile.am [changed mode: 0644->0755]
location/include/location-log.h [moved from location/location-log.h with 98% similarity]
location/include/location-types.h [moved from location/location-types.h with 60% similarity]
location/location-geocode.c [deleted file]
location/location-ielement.h [deleted file]
location/location-poi-info.c [deleted file]
location/location-poi-info.h [deleted file]
location/location-poi.c [deleted file]
location/location-poi.h [deleted file]
location/location.c [deleted file]
location/location.h [deleted file]
location/manager/Makefile.am [new file with mode: 0644]
location/manager/location-accuracy.c [moved from location/location-accuracy.c with 97% similarity]
location/manager/location-accuracy.h [moved from location/location-accuracy.h with 95% similarity]
location/manager/location-boundary.c [moved from location/location-boundary.c with 95% similarity]
location/manager/location-boundary.h [moved from location/location-boundary.h with 94% similarity]
location/manager/location-common-util.c [moved from location/location-common-util.c with 76% similarity]
location/manager/location-common-util.h [moved from location/location-common-util.h with 85% similarity]
location/manager/location-cps.c [moved from location/location-cps.c with 95% similarity]
location/manager/location-cps.h [moved from location/location-cps.h with 97% similarity]
location/manager/location-gps.c [moved from location/location-gps.c with 81% similarity]
location/manager/location-gps.h [moved from location/location-gps.h with 96% similarity]
location/manager/location-hybrid.c [moved from location/location-hybrid.c with 79% similarity]
location/manager/location-hybrid.h [moved from location/location-hybrid.h with 98% similarity]
location/manager/location-ielement.c [moved from location/location-ielement.c with 51% similarity]
location/manager/location-ielement.h [new file with mode: 0644]
location/manager/location-ips.c [moved from location/location-ips.c with 95% similarity]
location/manager/location-ips.h [moved from location/location-ips.h with 97% similarity]
location/manager/location-marshal.list [moved from location/location-marshal.list with 100% similarity]
location/manager/location-position.c [moved from location/location-position.c with 96% similarity]
location/manager/location-position.h [moved from location/location-position.h with 96% similarity]
location/manager/location-satellite.c [moved from location/location-satellite.c with 97% similarity]
location/manager/location-satellite.h [moved from location/location-satellite.h with 95% similarity]
location/manager/location-setting.c [moved from location/location-setting.c with 97% similarity]
location/manager/location-setting.h [moved from location/location-setting.h with 58% similarity]
location/manager/location-signaling-util.c [moved from location/location-signaling-util.c with 84% similarity]
location/manager/location-signaling-util.h [moved from location/location-signaling-util.h with 87% similarity]
location/manager/location-sps.c [moved from location/location-sps.c with 92% similarity]
location/manager/location-sps.h [moved from location/location-sps.h with 98% similarity]
location/manager/location-velocity.c [moved from location/location-velocity.c with 97% similarity]
location/manager/location-velocity.h [moved from location/location-velocity.h with 93% similarity]
location/manager/location-wps.c [moved from location/location-wps.c with 85% similarity]
location/manager/location-wps.h [moved from location/location-wps.h with 98% similarity]
location/manager/location.c [new file with mode: 0644]
location/manager/location.h [new file with mode: 0644]
location/map-service/Makefile.am [new file with mode: 0644]
location/map-service/location-address.c [moved from location/location-address.c with 97% similarity]
location/map-service/location-address.h [moved from location/location-address.h with 91% similarity]
location/map-service/location-geocode.c [new file with mode: 0644]
location/map-service/location-geocode.h [moved from location/location-geocode.h with 51% similarity]
location/map-service/location-landmark-ext.h [new file with mode: 0644]
location/map-service/location-landmark.c [new file with mode: 0644]
location/map-service/location-landmark.h [new file with mode: 0644]
location/map-service/location-map-service-ext.h [new file with mode: 0644]
location/map-service/location-map-service.c [new file with mode: 0644]
location/map-service/location-map-service.h [new file with mode: 0644]
location/map-service/location-poi.c [new file with mode: 0644]
location/map-service/location-poi.h [new file with mode: 0644]
location/map-service/location-pref.c [new file with mode: 0644]
location/map-service/location-pref.h [new file with mode: 0644]
location/map-service/location-route-ext.h [new file with mode: 0644]
location/map-service/location-route.c [new file with mode: 0644]
location/map-service/location-route.h [new file with mode: 0644]
location/map-service/map-internal.c [new file with mode: 0644]
location/map-service/map-internal.h [new file with mode: 0644]
location/map-service/map-service.c [new file with mode: 0644]
location/map-service/map-service.h [new file with mode: 0644]
location/module/Makefile.am [new file with mode: 0644]
location/module/location-module.h [moved from location/location-module.h with 58% similarity]
location/module/module-internal.c [moved from location/location-module-internal.c with 77% similarity]
location/module/module-internal.h [moved from location/location-module-internal.h with 82% similarity]
packaging/libslp-location.spec
tests/Makefile.am
tests/address-sample.c
tests/cps-test.c
tests/gps-test.c
tests/hybrid-test.c
tests/ips-test.c
tests/location-api-test-util.c
tests/location-api-test-util.h
tests/location-api-test.c
tests/nmea-sample.c
tests/position-sample-gps.c
tests/property-sample.c
tests/satellite-sample.c
tests/sps-test.c
tests/velocity-sample.c
tests/wps-test.c
tests/zone-sample.c

old mode 100644 (file)
new mode 100755 (executable)
index 7a7b2ae..72a11ec
@@ -1,14 +1,8 @@
-export ARCH=target
+#!/bin/sh
 
-export TET_INSTALL_PATH=~/opensrc/tet3.7  # tetware root path
-export TET_TARGET_PATH=$TET_INSTALL_PATH  # tetware target path
+. ./config
+export TET_INSTALL_PATH=$TET_INSTALL_HOST_PATH # tetware root path
+export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-target # tetware target path
 export PATH=$TET_TARGET_PATH/bin:$PATH
 export LD_LIBRARY_PATH=$TET_TARGET_PATH/lib/tet3:$LD_LIBRARY_PATH
-
 export TET_ROOT=$TET_TARGET_PATH
-
-set $(pwd)
-export TET_SUITE_ROOT=$1
-
-set $(date +%s)
-FILE_NAME_EXTENSION=$1
index 323bb38..5ddaa53 100644 (file)
@@ -1,14 +1,7 @@
-export ARCH=target
-
-export TET_INSTALL_PATH=/opt/home/root/TETware  # path to mount
-export TET_TARGET_PATH=$TET_INSTALL_PATH
+#!/bin/sh
+. ./config
+export TET_INSTALL_PATH=$TET_INSTALL_TARGET_PATH # path to path
+export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-target
 export PATH=$TET_TARGET_PATH/bin:$PATH
 export LD_LIBRARY_PATH=$TET_TARGET_PATH/lib/tet3:$LD_LIBRARY_PATH
-
 export TET_ROOT=$TET_TARGET_PATH
-
-set $(pwd)
-export TET_SUITE_ROOT=$1
-
-set $(date +%s)
-FILE_NAME_EXTENSION=$1
index b6c54b9..72aad6c 100755 (executable)
@@ -1,17 +1,16 @@
+#!/bin/sh
+
 . ./_export_env.sh                              # setting environment variables
 
-echo PATH=$PATH
-echo LD_LIBRARY_PATH=$LD_LIBRARY_PATH
-echo TET_ROOT=$TET_ROOT
-echo TET_SUITE_ROOT=$TET_SUITE_ROOT
-echo ARCH=$ARCH
+export TET_SUITE_ROOT=`pwd`
+FILE_NAME_EXTENSION=`date +%s`
 
-RESULT_DIR=results-$ARCH
+RESULT_DIR=results
 HTML_RESULT=$RESULT_DIR/build-tar-result-$FILE_NAME_EXTENSION.html
 JOURNAL_RESULT=$RESULT_DIR/build-tar-result-$FILE_NAME_EXTENSION.journal
 
 mkdir -p $RESULT_DIR
 
-tcc -c -p ./                                # executing tcc, with clean option (-c)
-tcc -b -j $JOURNAL_RESULT -p ./            # executing tcc to build test cases (-b)
-grw -c 3 -f chtml -o $HTML_RESULT $JOURNAL_RESULT  # reporting the result
+tcc -c -p ./
+tcc -b -j $JOURNAL_RESULT -p ./
+grw -c 7 -f chtml -o $HTML_RESULT $JOURNAL_RESULT
diff --git a/TC/config b/TC/config
new file mode 100644 (file)
index 0000000..ba387c7
--- /dev/null
+++ b/TC/config
@@ -0,0 +1,2 @@
+TET_INSTALL_HOST_PATH=/home/june/SBS2/work/tetware/TETware
+TET_INSTALL_TARGET_PATH=/mnt/nfs/SBS2/work/tetware/TETware
index f036f23..bf662fc 100644 (file)
@@ -18,6 +18,7 @@ all
        /unit/utc_location_get_last_velocity
        /unit/utc_location_get_satellite
        /unit/utc_location_get_last_satellite
+       /unit/utc_location_search_poi
        /unit/utc_location_init
        /unit/utc_location_new
        /unit/utc_location_start
index 2a33f95..62fc0c8 100644 (file)
@@ -31,6 +31,7 @@ TC24 = utc_location_get_address
 TC25 = utc_location_get_address_from_position
 TC26 = utc_location_get_position_from_address
 TC27 = utc_location_get_position_from_freeformed_address
+TC28 = utc_location_search_poi
 
 #
 # add your Package Config Info Here
@@ -61,7 +62,7 @@ CFLAGS += $(INCS)
 #
 # e.g.,
 #
-TCLIST = $(TC1) $(TC2) $(TC3) $(TC4) $(TC5) $(TC6) $(TC7) $(TC8) $(TC9) $(TC10) $(TC11) $(TC12) $(TC13) $(TC14) $(TC16) $(TC17) $(TC18) $(TC19) $(TC20) $(TC21) $(TC22) $(TC23) $(TC24) $(TC25) $(TC26) $(TC27)
+TCLIST = $(TC1) $(TC2) $(TC3) $(TC4) $(TC5) $(TC6) $(TC7) $(TC8) $(TC9) $(TC10) $(TC11) $(TC12) $(TC13) $(TC14) $(TC16) $(TC17) $(TC18) $(TC19) $(TC20) $(TC21) $(TC22) $(TC23) $(TC24) $(TC25) $(TC26) $(TC27) $(TC28)
 
 all: $(TCLIST)
        $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<
index e4a997f..6cf5690 100644 (file)
@@ -15,6 +15,7 @@ utc_location_get_velocity
 utc_location_get_last_velocity
 utc_location_get_satellite
 utc_location_get_last_satellite
+utc_location_search_poi
 utc_location_init
 utc_location_new
 utc_location_start
diff --git a/TC/unit/utc_location_search_poi.c b/TC/unit/utc_location_search_poi.c
new file mode 100644 (file)
index 0000000..ce84a31
--- /dev/null
@@ -0,0 +1,400 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <tet_api.h>
+#include <glib.h>
+#include <location.h>
+#include <location-map-service.h>
+#include <location-landmark-ext.h>
+
+static void startup(), cleanup();
+void (*tet_startup) () = startup;
+void (*tet_cleanup) () = cleanup;
+
+static void utc_location_search_poi_01();
+static void utc_location_search_poi_02();
+static void utc_location_search_poi_03();
+static void utc_location_search_poi_04();
+static void utc_location_search_poi_05();
+static void utc_location_search_poi_06();
+static void utc_location_search_poi_07();
+static void utc_location_search_poi_08();
+static void utc_location_search_poi_09();
+static void utc_location_search_poi_10();
+
+struct tet_testlist tet_testlist[] = {
+       {utc_location_search_poi_01,1},
+       {utc_location_search_poi_02,2},
+       {utc_location_search_poi_03,3},
+       {utc_location_search_poi_04,4},
+       {utc_location_search_poi_05,5},
+       {utc_location_search_poi_06,6},
+       {utc_location_search_poi_07,7},
+       {utc_location_search_poi_08,8},
+       {utc_location_search_poi_09,9},
+       {utc_location_search_poi_10,10},
+       {NULL,0},
+};
+
+static GMainLoop *loop = NULL;
+LocationObject* loc;
+int ret;
+int isNetStarted = 0;
+
+static gboolean
+exit_loop (gpointer data)
+{
+       g_main_loop_quit (loop);
+       return FALSE;
+}
+
+static gboolean
+exit_loop_fail (gpointer data)
+{
+       g_main_loop_quit (loop);
+       tet_result(TET_FAIL);
+       return FALSE;
+}
+
+static void startup()
+{      
+       location_init();
+       loc = location_new(LOCATION_METHOD_GPS);
+
+       loop = g_main_loop_new(NULL,FALSE);             
+       g_main_loop_run (loop);
+
+       tet_printf("\n TC startup");    
+}
+
+static void cleanup()
+{      
+       location_free(loc);
+       tet_printf("\n TC End");
+}
+
+static void __location_POI_cb(LocationError error, guint req_id, GList * landmark_list, gchar * error_code, gchar * error_msg, gpointer userdata)
+{
+       tet_printf("\n===== __location_POI_cb ======\n");
+       if (error != LOCATION_ERROR_NONE) {
+               tet_result(TET_FAIL);
+               tet_printf("Failed :%d\n", error);
+       }
+
+       if (landmark_list) tet_result(TET_PASS);
+       g_main_loop_quit (loop);
+}
+
+
+static void
+utc_location_search_poi_01()
+{
+       guint req_id = 0;
+       int ret = 0;
+       tet_printf("Keyword-cafe, Max - 10 and sort by Distance");
+       LocationPOIFilter *filter = location_poi_filter_new();
+       gchar *key = g_strdup("KEYWORD");
+       gchar *value = g_strdup("cafe");
+       location_poi_filter_set(filter, key, value);
+
+       LocationPOIPreference *pref = location_poi_pref_new();
+       location_poi_pref_set_max_result(pref, 10);
+       gchar *item = g_strdup("Distance");
+       location_poi_pref_set_sort_by(pref, item);
+       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_DESC);
+
+       LocationPosition *position = location_position_new(0, 37.336723, -121.889555, 0, LOCATION_STATUS_2D_FIX);
+
+       ret = location_search_poi(loc, filter, position, pref, __location_POI_cb, NULL, &req_id);
+       if(ret != LOCATION_ERROR_NONE) {
+                       tet_result(TET_FAIL);
+                       tet_printf("Fail to search POI. Error[%d]\n", ret);
+       } else {
+                       g_timeout_add_seconds(60, exit_loop_fail, NULL);
+                       tet_printf("Seach POI sucess, req_id %d\n", req_id);
+       }
+       location_poi_filter_free(filter);
+       location_poi_pref_free(pref);
+       location_position_free(position);
+}
+
+static void
+utc_location_search_poi_02()
+{
+       guint req_id = 0;
+       int ret = 0;
+       tet_printf("Category-restaurant, Max - 10 and sort by Distance");
+       LocationPOIFilter *filter = location_poi_filter_new();
+       gchar *key = g_strdup("CATEGORY");
+       gchar *value = g_strdup("restaurant");
+       location_poi_filter_set(filter, key, value);
+
+       LocationPOIPreference *pref = location_poi_pref_new();
+       location_poi_pref_set_max_result(pref, 10);
+       gchar *item = g_strdup("Distance");
+       location_poi_pref_set_sort_by(pref, item);
+       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_DESC);
+
+       LocationPosition *position = location_position_new(0, 37.336723, -121.889555, 0, LOCATION_STATUS_2D_FIX);
+
+       ret = location_search_poi(loc, filter, position, pref, __location_POI_cb, NULL, &req_id);
+       if(ret != LOCATION_ERROR_NONE) {
+                       tet_result(TET_FAIL);
+                       tet_printf("Fail to search POI. Error[%d]\n", ret);
+       } else {
+                       g_timeout_add_seconds(60, exit_loop_fail, NULL);
+                       tet_printf("Seach POI sucess, req_id %d\n", req_id);
+       }
+       location_poi_filter_free(filter);
+       location_poi_pref_free(pref);
+       location_position_free(position);
+}
+
+static void
+utc_location_search_poi_03()
+{
+       guint req_id = 0;
+       int ret = 0;
+       tet_printf("POIName-cafe, Max - 20 and sort by Distance");
+       LocationPOIFilter *filter = location_poi_filter_new();
+       gchar *key = g_strdup("POIName");
+       gchar *value = g_strdup("cafe");
+       location_poi_filter_set(filter, key, value);
+
+       LocationPOIPreference *pref = location_poi_pref_new();
+       location_poi_pref_set_max_result(pref, 20);
+       gchar *item = g_strdup("Distance");
+       location_poi_pref_set_sort_by(pref, item);
+       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);
+
+       LocationPosition *position = location_position_new(0, 37.336723, -121.889555, 0, LOCATION_STATUS_2D_FIX);
+
+       ret = location_search_poi(loc, filter, position, pref, __location_POI_cb, NULL, &req_id);
+       if(ret != LOCATION_ERROR_NONE) {
+                       tet_result(TET_FAIL);
+                       tet_printf("Fail to search POI. Error[%d]\n", ret);
+       } else {
+                       g_timeout_add_seconds(60, exit_loop_fail, NULL);
+                       tet_printf("Seach POI sucess, req_id %d\n", req_id);
+       }
+       location_poi_filter_free(filter);
+       location_poi_pref_free(pref);
+       location_position_free(position);
+}
+
+static void
+utc_location_search_poi_04()
+{
+       guint req_id = 0;
+       int ret = 0;
+       tet_printf("POIName-restaurant, Max - 50 and sort by Distance");
+       LocationPOIFilter *filter = location_poi_filter_new();
+       gchar *key = g_strdup("POIName");
+       gchar *value = g_strdup("restaurant");
+       location_poi_filter_set(filter, key, value);
+
+       LocationPOIPreference *pref = location_poi_pref_new();
+       location_poi_pref_set_max_result(pref, 50);
+       gchar *item = g_strdup("Distance");
+       location_poi_pref_set_sort_by(pref, item);
+       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);
+
+       LocationPosition *position = location_position_new(0, 37.336723, -121.889555, 0, LOCATION_STATUS_2D_FIX);
+
+       ret = location_search_poi(loc, filter, position, pref, __location_POI_cb, NULL, &req_id);
+       if(ret != LOCATION_ERROR_NONE) {
+                       tet_result(TET_FAIL);
+                       tet_printf("Fail to search POI. Error[%d]\n", ret);
+       } else {
+                       g_timeout_add_seconds(60, exit_loop_fail, NULL);
+                       tet_printf("Seach POI sucess, req_id %d\n", req_id);
+       }
+       location_poi_filter_free(filter);
+       location_poi_pref_free(pref);
+       location_position_free(position);
+}
+
+static void
+utc_location_search_poi_05()
+{
+       guint req_id = 0;
+       int ret = 0;
+       tet_printf("POIName-restaurant, Max - 50 and sort by Distance");
+       LocationPOIFilter *filter = location_poi_filter_new();
+       gchar *key = g_strdup("POIName");
+       gchar *value = g_strdup("restaurant");
+       location_poi_filter_set(filter, key, value);
+
+       LocationPOIPreference *pref = location_poi_pref_new();
+       location_poi_pref_set_max_result(pref, 50);
+       gchar *item = g_strdup("Distance");
+       location_poi_pref_set_sort_by(pref, item);
+       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);
+
+       LocationPosition *position = location_position_new(0, 37.336723, -121.889555, 0, LOCATION_STATUS_2D_FIX);
+
+       ret = location_search_poi(NULL, filter, position, pref, __location_POI_cb, NULL, &req_id);
+       if(ret == LOCATION_ERROR_PARAMETER) {
+                       tet_result(TET_PASS);
+       } else {
+               tet_result(TET_FAIL);
+       }
+       location_poi_filter_free(filter);
+       location_poi_pref_free(pref);
+       location_position_free(position);
+}
+
+static void
+utc_location_search_poi_06()
+{
+       guint req_id = 0;
+       int ret = 0;
+       tet_printf("POIName-restaurant, Max - 50 and sort by Distance");
+
+       LocationPOIPreference *pref = location_poi_pref_new();
+       location_poi_pref_set_max_result(pref, 50);
+       gchar *item = g_strdup("Distance");
+       location_poi_pref_set_sort_by(pref, item);
+       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);
+
+       LocationPosition *position = location_position_new(0, 37.336723, -121.889555, 0, LOCATION_STATUS_2D_FIX);
+
+       ret = location_search_poi(loc, NULL, position, pref, __location_POI_cb, NULL, &req_id);
+       if(ret == LOCATION_ERROR_PARAMETER) {
+                       tet_result(TET_PASS);
+       } else {
+               tet_result(TET_FAIL);
+       }
+       location_poi_pref_free(pref);
+       location_position_free(position);
+}
+
+static void
+utc_location_search_poi_07()
+{
+       guint req_id = 0;
+       int ret = 0;
+       tet_printf("POIName-restaurant, Max - 50 and sort by Distance");
+       LocationPOIFilter *filter = location_poi_filter_new();
+       gchar *key = g_strdup("POIName");
+       gchar *value = g_strdup("restaurant");
+       location_poi_filter_set(filter, key, value);
+
+       LocationPosition *position = location_position_new(0, 37.336723, -121.889555, 0, LOCATION_STATUS_2D_FIX);
+
+       ret = location_search_poi(loc, filter, position, NULL, __location_POI_cb, NULL, &req_id);
+       if(ret == LOCATION_ERROR_PARAMETER) {
+                       tet_result(TET_PASS);
+       } else {
+               tet_result(TET_FAIL);
+       }
+       location_poi_filter_free(filter);
+       location_position_free(position);
+}
+
+static void
+utc_location_search_poi_08()
+{
+       guint req_id = 0;
+       int ret = 0;
+       tet_printf("POIName-restaurant, Max - 50 and sort by Distance");
+       LocationPOIFilter *filter = location_poi_filter_new();
+       gchar *key = g_strdup("POIName");
+       gchar *value = g_strdup("restaurant");
+       location_poi_filter_set(filter, key, value);
+
+       LocationPOIPreference *pref = location_poi_pref_new();
+       location_poi_pref_set_max_result(pref, 50);
+       gchar *item = g_strdup("Distance");
+       location_poi_pref_set_sort_by(pref, item);
+       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);
+
+       ret = location_search_poi(loc, filter, NULL, pref, __location_POI_cb, NULL, &req_id);
+       if(ret == LOCATION_ERROR_PARAMETER) {
+                       tet_result(TET_PASS);
+       } else {
+               tet_result(TET_FAIL);
+       }
+
+       location_poi_filter_free(filter);
+       location_poi_pref_free(pref);
+}
+
+static void
+utc_location_search_poi_09()
+{
+       guint req_id = 0;
+       int ret = 0;
+       tet_printf("POIName-restaurant, Max - 50 and sort by Distance");
+       LocationPOIFilter *filter = location_poi_filter_new();
+       gchar *key = g_strdup("POIName");
+       gchar *value = g_strdup("restaurant");
+       location_poi_filter_set(filter, key, value);
+
+       LocationPOIPreference *pref = location_poi_pref_new();
+       location_poi_pref_set_max_result(pref, 50);
+       gchar *item = g_strdup("Distance");
+       location_poi_pref_set_sort_by(pref, item);
+       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);
+
+       LocationPosition *position = location_position_new(0, 37.336723, -121.889555, 0, LOCATION_STATUS_2D_FIX);
+
+       ret = location_search_poi(loc, filter, position, pref, NULL, NULL, &req_id);
+       if(ret == LOCATION_ERROR_PARAMETER) {
+                       tet_result(TET_PASS);
+       } else {
+               tet_result(TET_FAIL);
+       }
+
+       location_poi_filter_free(filter);
+       location_poi_pref_free(pref);
+       location_position_free(position);
+}
+
+static void
+utc_location_search_poi_10()
+{
+       int ret = 0;
+       tet_printf("POIName-restaurant, Max - 50 and sort by Distance");
+       LocationPOIFilter *filter = location_poi_filter_new();
+       gchar *key = g_strdup("POIName");
+       gchar *value = g_strdup("restaurant");
+       location_poi_filter_set(filter, key, value);
+
+       LocationPOIPreference *pref = location_poi_pref_new();
+       location_poi_pref_set_max_result(pref, 50);
+       gchar *item = g_strdup("Distance");
+       location_poi_pref_set_sort_by(pref, item);
+       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);
+
+       LocationPosition *position = location_position_new(0, 37.336723, -121.889555, 0, LOCATION_STATUS_2D_FIX);
+
+       ret = location_search_poi(loc, filter, position, pref, __location_POI_cb, NULL, NULL);
+       if(ret == LOCATION_ERROR_PARAMETER) {
+                       tet_result(TET_PASS);
+       } else {
+               tet_result(TET_FAIL);
+       }
+
+       location_poi_filter_free(filter);
+       location_poi_pref_free(pref);
+       location_position_free(position);
+}
diff --git a/TC/unit/utc_properties_last_position.c b/TC/unit/utc_properties_last_position.c
deleted file mode 100644 (file)
index 03c08cf..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * libslp-location
- *
- * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
- *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <tet_api.h>
-#include <glib.h>
-#include <location.h>
-
-static void startup(), cleanup();
-void (*tet_startup) () = startup;
-void (*tet_cleanup) () = cleanup;
-
-static void utc_get_lastpostion();
-
-struct tet_testlist tet_testlist[] = {
-       {utc_get_lastpostion,1},
-       {NULL,0},
-};     
-
-
-static GMainLoop *loop = NULL;
-int ret;
-LocationObject* loc;
-
-static gboolean
-exit_loop (gpointer data)
-{
-       g_main_loop_quit (loop);
-       tet_result(TET_FAIL);
-       return FALSE;
-}
-
-static void startup()
-{      
-       location_init();
-       loc = location_new(LOCATION_METHOD_GPS);
-       location_start(loc);
-       loop = g_main_loop_new(NULL,FALSE);     
-       tet_printf("\n TC startup");
-}
-
-static void cleanup()
-{      
-       location_stop(loc);
-       location_free(loc);
-       tet_printf("\n TC End");
-}
-
-static void
-cb_updated (GObject *self,
-                    guint type,
-                    gpointer data,
-                    gpointer accuracy,
-                    gpointer userdata)
-{
-       LocationPosition *pos = NULL;
-       g_object_get(loc, "last-position", &pos, NULL);
-       if (pos) {
-               location_position_free (pos);
-               tet_result(TET_PASS);           
-       } else tet_result(TET_FAIL);
-       g_main_loop_quit (loop);
-}
-
-static void
-utc_get_lastpostion()
-{
-       g_signal_connect (loc, "service-updated", G_CALLBACK(cb_updated), loc); 
-       g_timeout_add_seconds (60, exit_loop, NULL);
-       g_main_loop_run (loop);
-}
old mode 100644 (file)
new mode 100755 (executable)
index f574b41..a646f28
@@ -4,7 +4,7 @@ AC_INIT(Location, 0.1, [sena06.kim@samsung.com])
 AC_CONFIG_AUX_DIR([build-aux])
 AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_HEADER([config.h])
-AC_CONFIG_SRCDIR([location/location.c])
+AC_CONFIG_SRCDIR([location])
 AM_INIT_AUTOMAKE([1.10.2 foreign -Wall -Werror])
 
 # Check programs for making executable
@@ -50,7 +50,7 @@ AC_COMPILE_IFELSE(
 AC_MSG_RESULT($has_visibility)
 
 # Check dependencies
-PKG_CHECK_MODULES(LOCATION, [glib-2.0 gobject-2.0 gmodule-2.0 vconf])
+PKG_CHECK_MODULES(LOCATION, [glib-2.0 gobject-2.0 dbus-glib-1 gmodule-2.0 vconf])
 AC_SUBST(LOCATION_LIBS)
 AC_SUBST(LOCATION_CFLAGS)
 
@@ -81,6 +81,9 @@ AC_CONFIG_FILES([
 location.pc
 Makefile
 location/Makefile
+location/manager/Makefile
+location/map-service/Makefile
+location/module/Makefile
 tests/Makefile
 ])
 
index f9d2e33..370e857 100644 (file)
@@ -1,18 +1,92 @@
+libslp-location (0.3.34-13) unstable; urgency=low
+
+  * The result was wrong when location_boundary_if_inside was called
+  * Git: pkgs/l/libslp-location
+  * Tag: libslp-location_0.3.34-13
+
+ -- Minjune Kim <sena06.kim@samsung.com>  Mon, 02 Apr 2012 16:59:08 +0900
+
+libslp-location (0.3.34-12) unstable; urgency=low
+
+  * Fix the bug that get_last_position of WPS was failed on emulator.
+  * Move the fuctionality to location module
+  * Git: pkgs/l/libslp-location
+  * Tag: libslp-location_0.3.34-12
+
+ -- Minjune Kim <sena06.kim@samsung.com>  Tue, 27 Mar 2012 11:09:07 +0900
+
+libslp-location (0.3.34-11) unstable; urgency=low
+
+  * Add location_route_step_set_transport_mode / location_route_step_get_transport_mode
+  * Git: pkgs/l/libslp-location
+  * Tag: libslp-location_0.3.34-11
+
+ -- Minjune Kim <sena06.kim@samsung.com>  Mon, 26 Mar 2012 17:00:48 +0900
+
+libslp-location (0.3.34-10) unstable; urgency=low
+
+  * Check param's range in funcs.
+  * Git: pkgs/l/libslp-location
+  * Tag: libslp-location_0.3.34-10
+
+ -- Minjune Kim <sena06.kim@samsung.com>  Thu, 22 Mar 2012 13:18:42 +0900
+
+libslp-location (0.3.34-9) unstable; urgency=low
+
+  * Fix the bug that location_get_map_service_pref returned fail
+  * Git: pkgs/l/libslp-location
+  * Tag: libslp-location_0.3.34-9
+
+ -- Minjune Kim <sena06.kim@samsung.com>  Tue, 20 Mar 2012 22:15:17 +0900
+
+libslp-location (0.3.34-8) unstable; urgency=low
+
+  * modity TC script and copy satellite info with timestamp
+  * Git: pkgs/l/libslp-location
+  * Tag: libslp-location_0.3.34-8
+
+ -- Minjune Kim <sena06.kim@samsung.com>  Mon, 19 Mar 2012 20:49:24 +0900
+
+libslp-location (0.3.34-7) unstable; urgency=low
+
+  * add libgconf-dbus-dev in control
+  * Git: pkgs/l/libslp-location
+  * Tag: libslp-location_0.3.34-7
+
+ -- Genie Kim <daejins.kim@samsung.com>  Fri, 16 Mar 2012 11:33:54 +0900
+
+libslp-location (0.3.34-6) unstable; urgency=low
+
+  * Support Capability APIs
+  * Git: pkgs/l/libslp-location
+  * Tag: libslp-location_0.3.34-6
+
+ -- Minjune Kim <sena06.kim@samsung.com>  Wed, 14 Mar 2012 20:35:31 +0900
+
+libslp-location (0.3.34-5) unstable; urgency=low
+
+  * Add dbus_g_thread_init & g_thread_init to location_init
+  * Git: pkgs/l/libslp-location
+  * Tag: libslp-location_0.3.34-5
+
+ -- Minjune Kim <sena06.kim@samsung.com>  Fri, 09 Mar 2012 16:29:07 +0900
+
 libslp-location (0.3.34-4) unstable; urgency=low
 
-  * Rollback
+  * Change a wps_start to support an emulator.
   * Git: pkgs/l/libslp-location
   * Tag: libslp-location_0.3.34-4
 
- -- Minjune Kim <sena06.kim@samsung.com>  Thu, 23 Feb 2012 14:30:58 +0900
+ -- Minjune Kim <sena06.kim@samsung.com>  Wed, 07 Mar 2012 10:59:54 +0900
 
 libslp-location (0.3.34-3) unstable; urgency=low
 
   * Add POI func & Route prototype
+  * Implement get_last_xxx & Update satellite info
   * Git: pkgs/l/libslp-location
   * Tag: libslp-location_0.3.34-3
 
- -- root <sena06.kim@samsung.com>  Thu, 23 Feb 2012 14:29:51 +0900
+ -- Minjune Kim <sena06.kim@samsung.com>  Thu, 23 Feb 2012 14:29:51 +0900
 
 libslp-location (0.3.34-2) unstable; urgency=low
 
index 89f9108..9527507 100755 (executable)
@@ -3,7 +3,7 @@ Section: libs
 Priority: extra
 Maintainer: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>, Genie kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
 Uploaders: Genie Kim <daejins.kim@samsung.com>
-Build-Depends: debhelper (>= 5), libglib2.0-dev, dlog-dev, libvconf-dev, libvconf-keys-dev, libjson-glib-dev
+Build-Depends: debhelper (>= 5), libglib2.0-dev, libdbus-glib-1-dev, dlog-dev, libvconf-dev, libvconf-keys-dev, libjson-glib-dev, libgconf-dbus-dev
 Standards-Version: 3.7.2
 Homepage: N/A
 
index a2f6b8c..f31bdab 100644 (file)
@@ -1,4 +1,3 @@
 usr/include/*
 usr/lib/pkgconfig/*
-usr/lib/*.{la,a}
-usr/lib/*.so
+usr/lib/*.la
index ee6360c..872b534 100755 (executable)
@@ -3,46 +3,42 @@
 #setting 
 if [ "${USER}" = "root" ]
 then
-vconftool set -t int db/location/lastposition/gps/Timestamp "0" -f
-vconftool set -t double db/location/lastposition/gps/Latitude "0.0" -f
-vconftool set -t double db/location/lastposition/gps/Longitude "0.0" -f
-vconftool set -t double db/location/lastposition/gps/Altitude "0.0" -f
-vconftool set -t double db/location/lastposition/gps/HorAccuracy "0.0" -f
-vconftool set -t double db/location/lastposition/gps/VerAccuracy "0.0" -f
-vconftool set -t int db/location/lastposition/wps/Timestamp "0" -f
-vconftool set -t double db/location/lastposition/wps/Latitude "0.0" -f
-vconftool set -t double db/location/lastposition/wps/Longitude "0.0" -f
-vconftool set -t double db/location/lastposition/wps/Altitude "0.0" -f
-vconftool set -t double db/location/lastposition/wps/HorAccuracy "0.0" -f
-vconftool set -t int db/location/lastposition/sps/Timestamp "0" -f
-vconftool set -t double db/location/lastposition/sps/Latitude "0.0" -f
-vconftool set -t double db/location/lastposition/sps/Longitude "0.0" -f
-vconftool set -t double db/location/lastposition/sps/Altitude "0.0" -f
-vconftool set -t double db/location/lastposition/sps/HorAccuracy "0.0" -f
-vconftool set -t double db/location/lastposition/sps/VerAccuracy "0.0" -f
+vconftool set -t int db/location/last/gps/Timestamp "0" -f
+vconftool set -t double db/location/last/gps/Latitude "0.0" -f
+vconftool set -t double db/location/last/gps/Longitude "0.0" -f
+vconftool set -t double db/location/last/gps/Altitude "0.0" -f
+vconftool set -t double db/location/last/gps/HorAccuracy "0.0" -f
+vconftool set -t double db/location/last/gps/VerAccuracy "0.0" -f
+vconftool set -t double db/location/last/gps/Speed "0.0" -f
+vconftool set -t double db/location/last/gps/Direction "0.0" -f
+vconftool set -t int db/location/last/wps/Timestamp "0" -f
+vconftool set -t double db/location/last/wps/Latitude "0.0" -f
+vconftool set -t double db/location/last/wps/Longitude "0.0" -f
+vconftool set -t double db/location/last/wps/Altitude "0.0" -f
+vconftool set -t double db/location/last/wps/HorAccuracy "0.0" -f
+vconftool set -t double db/location/last/wps/Speed "0.0" -f
+vconftool set -t double db/location/last/wps/Direction "0.0" -f
 vconftool set -t int db/location/setting/GpsEnabled "0" -g 6514 -f
 vconftool set -t int db/location/setting/AgpsEnabled "0" -g 6514 -f
 vconftool set -t int db/location/setting/NetworkEnabled "0" -g 6514 -f
 vconftool set -t int db/location/setting/SensorEnabled "0" -g 6514 -f
 else
 
-vconftool set -t int db/location/lastposition/gps/Timestamp "0" -f
-vconftool set -t double db/location/lastposition/gps/Latitude "0.0" -f
-vconftool set -t double db/location/lastposition/gps/Longitude "0.0" -f
-vconftool set -t double db/location/lastposition/gps/Altitude "0.0" -f
-vconftool set -t double db/location/lastposition/gps/HorAccuracy "0.0" -f
-vconftool set -t double db/location/lastposition/gps/VerAccuracy "0.0" -f
-vconftool set -t int db/location/lastposition/wps/Timestamp "0" -f
-vconftool set -t double db/location/lastposition/wps/Latitude "0.0" -f
-vconftool set -t double db/location/lastposition/wps/Longitude "0.0" -f
-vconftool set -t double db/location/lastposition/wps/Altitude "0.0" -f
-vconftool set -t double db/location/lastposition/wps/HorAccuracy "0.0" -f
-vconftool set -t int db/location/lastposition/sps/Timestamp "0" -f
-vconftool set -t double db/location/lastposition/sps/Latitude "0.0" -f
-vconftool set -t double db/location/lastposition/sps/Longitude "0.0" -f
-vconftool set -t double db/location/lastposition/sps/Altitude "0.0" -f
-vconftool set -t double db/location/lastposition/sps/HorAccuracy "0.0" -f
-vconftool set -t double db/location/lastposition/sps/VerAccuracy "0.0" -f
+vconftool set -t int db/location/last/gps/Timestamp "0" -f
+vconftool set -t double db/location/last/gps/Latitude "0.0" -f
+vconftool set -t double db/location/last/gps/Longitude "0.0" -f
+vconftool set -t double db/location/last/gps/Altitude "0.0" -f
+vconftool set -t double db/location/last/gps/HorAccuracy "0.0" -f
+vconftool set -t double db/location/last/gps/VerAccuracy "0.0" -f
+vconftool set -t double db/location/last/gps/Speed "0.0" -f
+vconftool set -t double db/location/last/gps/Direction "0.0" -f
+vconftool set -t int db/location/last/wps/Timestamp "0" -f
+vconftool set -t double db/location/last/wps/Latitude "0.0" -f
+vconftool set -t double db/location/last/wps/Longitude "0.0" -f
+vconftool set -t double db/location/last/wps/Altitude "0.0" -f
+vconftool set -t double db/location/last/wps/HorAccuracy "0.0" -f
+vconftool set -t double db/location/last/wps/Speed "0.0" -f
+vconftool set -t double db/location/last/wps/Direction "0.0" -f
 vconftool set -t int db/location/setting/GpsEnabled "0" -g -f
 vconftool set -t int db/location/setting/AgpsEnabled "0" -f
 vconftool set -t int db/location/setting/NetworkEnabled "0" -f
index 4f12d83..c997f77 100755 (executable)
@@ -61,6 +61,10 @@ clean:
        rm -rf install_manifest.txt
        rm -rf *.so
        rm -f pkgconfig/lbs-location.pc
+       rm -rf location/*.o
+       rm -rf location/*.lo
+       rm -rf location/*.la
+       rm -rf tests/.lib
 
        for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
                rm -f $${f%.in}; \
old mode 100644 (file)
new mode 100755 (executable)
index 799e4c8..a5dd525
@@ -1,77 +1,49 @@
+SUBDIRS = manager map-service module
 lib_LTLIBRARIES = libSLP-location.la
 
+COMMON_HEADER_DIR = include
+MANAGER_DIR = manager
+MAP_SERVICE_DIR = map-service
+MODULE_DIR = module
+
 libSLP_location_la_SOURCES = \
-                                                        location-marshal.c   \
-                                                        location-marshal.h   \
-                                                        location-ielement.c  \
-                                                        location-ielement.h  \
-                                                        location-setting.c  \
-                                                        location-setting.h  \
-                                                        location-module.h \
-                                                        location-module-internal.c\
-                                                        location-module-internal.h\
-                                                        location.c           \
-                                                        location.h           \
-                                                        location-position.c  \
-                                                        location-position.h  \
-                                                        location-velocity.c  \
-                                                        location-velocity.h  \
-                                                        location-accuracy.c  \
-                                                        location-accuracy.h  \
-                                                        location-address.c  \
-                                                        location-address.h  \
-                                                        location-boundary.c  \
-                                                        location-boundary.h  \
-                                                        location-satellite.c  \
-                                                        location-satellite.h  \
-                                                        location-poi-info.c  \
-                                                        location-poi-info.h  \
-                                                        location-signaling-util.c \
-                                                        location-signaling-util.h \
-                                                        location-common-util.c \
-                                                        location-common-util.h \
-                                                        location-gps.c       \
-                                                        location-gps.h       \
-                                                        location-wps.c       \
-                                                        location-wps.h       \
-                                                        location-ips.c       \
-                                                        location-ips.h       \
-                                                        location-cps.c       \
-                                                        location-cps.h       \
-                                                        location-sps.c       \
-                                                        location-sps.h       \
-                                                        location-hybrid.c \
-                                                        location-hybrid.h \
-                                                        location-geocode.c \
-                                                        location-geocode.h \
-                                                        location-poi.c   \
-                                                        location-poi.h
+                                                       ${MANAGER_DIR}/location.c\
+                                                       ${MAP_SERVICE_DIR}/location-map-service.c
+
 
 libSLP_location_la_CFLAGS = \
                                                        -fPIC\
+                                                       -I${srcdir} \
+                                                       -I${srcdir}/include \
+                                                       -I${srcdir}/${MANAGER_DIR} \
+                                                       -I${srcdir}/${MODULE_DIR} \
+                                                       -I${srcdir}/${MAP_SERVICE_DIR} \
                                                        $(LOCATION_CFLAGS)
 
 libSLP_location_la_LIBADD = \
+                                                       ${MANAGER_DIR}/liblocation-manager.la \
+                                                       ${MAP_SERVICE_DIR}/liblocation-map-service.la \
+                                                       ${MODULE_DIR}/liblocation-module.la \
                                                        -lm\
                                                        $(LOCATION_LIBS)
 
-EXTRA_DIST = \
-                        location-marshal.list
-
-location-marshal.h: location-marshal.list $(GLIB_GENMARSHAL)
-       $(GLIB_GENMARSHAL) $< --header --prefix=location > $@
-location-marshal.c: location-marshal.list location-marshal.h $(GLIB_GENMARSHAL)
-       echo "#include \"location-marshal.h\"" > $@ && $(GLIB_GENMARSHAL) location-marshal.list --body --prefix=location >> $@
-
 libSLP_location_includedir = $(includedir)/location
 libSLP_location_include_HEADERS = \
-                                                                 location.h     \
-                                                                 location-types.h \
-                                                                 location-position.h  \
-                                                                 location-velocity.h  \
-                                                                 location-accuracy.h  \
-                                                                 location-address.h  \
-                                                                 location-boundary.h  \
-                                                                 location-satellite.h  \
-                                                                 location-poi-info.h \
-                                                                 location-module.h
+                                                                 ${COMMON_HEADER_DIR}/location-types.h \
+                                                                 ${MANAGER_DIR}/location.h     \
+                                                                 ${MANAGER_DIR}/location-position.h  \
+                                                                 ${MANAGER_DIR}/location-velocity.h  \
+                                                                 ${MANAGER_DIR}/location-accuracy.h  \
+                                                                 ${MANAGER_DIR}/location-boundary.h  \
+                                                                 ${MANAGER_DIR}/location-satellite.h  \
+                                                                 ${MAP_SERVICE_DIR}/location-address.h  \
+                                                                 ${MAP_SERVICE_DIR}/location-map-service.h \
+                                                                 ${MAP_SERVICE_DIR}/location-map-service-ext.h \
+                                                                 ${MAP_SERVICE_DIR}/location-poi.h  \
+                                                                 ${MAP_SERVICE_DIR}/location-route.h  \
+                                                                 ${MAP_SERVICE_DIR}/location-route-ext.h  \
+                                                                 ${MAP_SERVICE_DIR}/location-geocode.h  \
+                                                                 ${MAP_SERVICE_DIR}/location-pref.h  \
+                                                                 ${MAP_SERVICE_DIR}/location-landmark.h  \
+                                                                 ${MAP_SERVICE_DIR}/location-landmark-ext.h  \
+                                                                 ${MODULE_DIR}/location-module.h
similarity index 98%
rename from location/location-log.h
rename to location/include/location-log.h
index 0f9f58a..ebc2448 100644 (file)
@@ -25,9 +25,6 @@
 /**
  * @file location-log.h
  * @brief This file contains macro functions for logging.
- * @addtogroup LocationInternal
- * @{
- * @}
  */
 
 #define TAG_LOCATION           "location"
similarity index 60%
rename from location/location-types.h
rename to location/include/location-types.h
index ab0c147..c1d150d 100644 (file)
@@ -54,6 +54,7 @@ typedef enum {
        LOCATION_ERROR_CONFIGURATION,  ///< Configuration setting is not correct.
        LOCATION_ERROR_PARAMETER,      ///< Input parameter is not correct.
        LOCATION_ERROR_NOT_FOUND,      ///< Output is not found.
+       LOCATION_ERROR_NOT_SUPPORTED,  ///< Not supported.
        LOCATION_ERROR_UNKNOWN,        ///< Unknown error.
 } LocationError;
 
@@ -78,12 +79,55 @@ typedef enum {
        UPDATE_TYPE_NONE = -1,  ///< Undefined update type.
        POSITION_UPDATED = 0,   ///< This type is used when position information is updated.
        VELOCITY_UPDATED,       ///< This type is used when velocity information is updated.
-       SATELLITE_UPDATED,      ///< This type is used when satellite information is updated.
+       SATELLITE_UPDATED,              ///< This type is used when satellite information is updated.
        ADDRESS_UPDATED,        ///< This type is used when address information is updated. This is not implemented yet.
        GEOCODE_UPDATED,        ///< This type is used when geocode information is updated. This is not implemented yet.
        REVERSEGEOCODE_UPDATED  ///< This type is used when reverse geocode information is updated. This is not implemented yet.
 } LocationUpdateType;
 
+typedef enum {
+       MAP_SERVICE_PREF_LANGUAGE,
+       MAP_SERVICE_PREF_DISTANCE_UNIT,
+
+       MAP_SERVICE_PREF_PROPERTY,
+
+       MAP_SERVICE_GEOCODE_TYPE,
+       MAP_SERVICE_REVERSE_GEOCODE_TYPE,
+
+       MAP_SERVICE_POI_TYPE,
+       MAP_SERVICE_POI_SEARCH_BY_ADDRESS,
+       MAP_SERVICE_POI_SEARCH_BY_FREEFORM_ADDRESS,
+       MAP_SERVICE_POI_SEARCH_BY_CIRCLE_BOUNDARY,
+       MAP_SERVICE_POI_SEARCH_BY_RECT_BOUNDARY,
+       MAP_SERVICE_POI_SEARCH_BY_POLYGON_BOUNDARY,
+       MAP_SERVICE_POI_PREF_SORT_BY,
+       MAP_SERVICE_POI_PREF_PROPERTY,
+       MAP_SERVICE_POI_FILTER,
+       MAP_SERVICE_POI_FILTER_CATEGORY,
+
+       MAP_SERVICE_ROUTE_REQUEST_FREEFORM_ADDR_TO_AVOID,
+       MAP_SERVICE_ROUTE_REQUEST_STRUCTED_ADDR_TO_AVOID,
+       MAP_SERVICE_ROUTE_REQUEST_CIRCLE_AREA_TO_AVOID,
+       MAP_SERVICE_ROUTE_REQUEST_RECT_AREA_TO_AVOID,
+       MAP_SERVICE_ROUTE_REQUEST_POLYGON_AREA_TO_AVOID,
+       MAP_SERVICE_ROUTE_REQUEST_FEATURE_TO_AVOID,
+       MAP_SERVICE_ROUTE_PREF_TYPE,
+       MAP_SERVICE_ROUTE_PREF_TRANSPORT_MODE,
+       MAP_SERVICE_ROUTE_PREF_GEOMETRY_BOUNDING_BOX,
+       MAP_SERVICE_ROUTE_PREF_GEOMETRY_RETRIEVAL,
+       MAP_SERVICE_ROUTE_PREF_INSTRUCTION_GEOMETRY,
+       MAP_SERVICE_ROUTE_PREF_INSTRUCTION_BOUNDING_BOX,
+       MAP_SERVICE_ROUTE_PREF_INSTRUCTION_RETRIEVAL,
+       MAP_SERVICE_ROUTE_PREF_REALTIME_TRAFFIC,
+       MAP_SERVICE_ROUTE_PREF_PROPERTY,
+       MAP_SERVICE_ROUTE_DISTANCE_UNIT,
+       MAP_SERVICE_ROUTE_PROPERTY,
+       MAP_SERVICE_ROUTE_SEGMENT_PROPERTY,
+       MAP_SERVICE_ROUTE_STEP_PROPERTY,
+       MAP_SERVICE_TYPE_MAX
+
+} LocationMapServiceType;
+
 /**
  * @brief Location object redefined by GObject.
  */
@@ -95,11 +139,17 @@ typedef GObject LocationObject;
 typedef struct _LocationPosition   LocationPosition;
 
 /**
- * @brief This represents last known position information such as latitude-longitude values and accuracy.
+ * @brief This represents last known position information such as latitude-longitude values and accuracy. \n
+ *             This would be deprecated soon.
  */
 typedef struct _LocationLastPosition   LocationLastPosition;
 
 /**
+ * @brief This represents position information such as number of satellites in used or in view.
+ */
+typedef struct _LocationSatellite  LocationSatellite;
+
+/**
  * @brief This represents velocity information such as as speed, direction, climb.
  */
 typedef struct _LocationVelocity   LocationVelocity;
@@ -110,24 +160,59 @@ typedef struct _LocationVelocity   LocationVelocity;
 typedef struct _LocationAccuracy   LocationAccuracy;
 
 /**
+ * @brief This represents boundary information such as rectangular or circle area.
+ */
+typedef struct _LocationBoundary   LocationBoundary;
+
+/**
  * @brief This represents address information such as building number, street name, etc.
  */
 typedef struct _LocationAddress    LocationAddress;
 
 /**
- * @brief This represents boundary information such as rectangular or circle area.
+ * @brief This represents a structure of Location preference.
  */
-typedef struct _LocationBoundary   LocationBoundary;
+typedef struct _LocationPreference LocationPreference;
 
 /**
- * @brief This represents position information such as number of satellites in used or in view.
+ * @brief This represents a structure of Location POI filter.
  */
-typedef struct _LocationSatellite  LocationSatellite;
+typedef struct _LocationPOIFilter LocationPOIFilter;
+
+/**
+ * @brief This represents a structure of Location POI preference.
+ */
+typedef struct _LocationPOIPreference LocationPOIPreference;
 
 /**
- * @brief This represents a number of POI informations.
+ * @brief This represents a structure of Landmark information.
  */
-typedef struct _LocationPOIInfo    LocationPOIInfo;
+typedef struct _LocationLandmark    LocationLandmark;
+
+/**
+ * @brief This represents a structure of Landmark Url.
+ */
+typedef struct _LocationLandmarkUrl    LocationLandmarkUrl;
+
+/**
+ * @brief This represents a structure of Location route preference.
+ */
+typedef struct _LocationRoutePreference LocationRoutePreference;
+
+/**
+ * @brief This represents a structure of Location route.
+ */
+typedef struct _LocationRoute LocationRoute;
+
+/**
+ * @brief This represents a structure of Location route segment.
+ */
+typedef struct _LocationRouteSegment LocationRouteSegment;
+
+/**
+ * @brief This represents a structure of Location route step.
+ */
+typedef struct _LocationRouteStep LocationRouteStep;
 
 /**
  * @brief This represents callback function which will be called to give position information.
@@ -137,12 +222,17 @@ typedef void (*LocationPositionCB)(LocationError error, GList *position_list, GL
 /**
  * @brief This represents callback function which will be called to give address information.
  */
-typedef void (*LocationAddressCB)(LocationError error, LocationAddress *address, LocationAccuracy *acc, gpointer userdata);
+typedef void  (*LocationAddressCB)(LocationError error, LocationAddress *address, LocationAccuracy *acc, gpointer userdata);
 
 /**
  * @brief This represents callback function which will be called to give POI information.
  */
-typedef void (*LocationPOICB)(LocationError error, LocationPOIInfo *poi, gpointer userdata);
+typedef void (*LocationPOICB)(LocationError error, guint req_id, GList *landmark_list, gchar *error_code, gchar *error_msg, gpointer userdata);
+
+/**
+ * @brief This represents callback function which will be called to give Route information.
+ */
+typedef void (*LocationRouteCB)(LocationError error, guint req_id, GList *route_list, gchar *error_code, gchar *error_msg, gpointer userdata);
 
 /**
  * @}@}
diff --git a/location/location-geocode.c b/location/location-geocode.c
deleted file mode 100644 (file)
index ce15850..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * libslp-location
- *
- * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
- *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "location/location-log.h"
-
-#include "location/location-module-internal.h"
-
-#include "location/location-geocode.h"
-#include "location/location-marshal.h"
-#include "location/location-ielement.h"
-
-typedef struct _LocationGeocodePrivate {
-       LocationGeoMod* mod;
-} LocationGeocodePrivate;
-
-enum {
-       PROP_0,
-       PROP_SERVICE_NAME
-};
-
-#define DEFAULT_SERVICE "decarta"
-
-#define GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), LOCATION_TYPE_GEOCODE, LocationGeocodePrivate))
-
-static void location_ielement_interface_init (LocationIElementInterface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (LocationGeocode, location_geocode, G_TYPE_OBJECT,
-       G_IMPLEMENT_INTERFACE (LOCATION_TYPE_IELEMENT, location_ielement_interface_init));
-
-
-static void
-location_geocode_dispose (GObject *gobject)
-{
-       LOCATION_LOGD("location_geocode_dispose");
-
-       G_OBJECT_CLASS (location_geocode_parent_class)->dispose (gobject);
-}
-
-static void
-location_geocode_finalize (GObject *gobject)
-{
-       LOCATION_LOGD("location_geocode_finalize");
-       LocationGeocodePrivate* priv = GET_PRIVATE(gobject);
-       module_free(priv->mod, "geocode");
-       priv->mod = NULL;
-       G_OBJECT_CLASS (location_geocode_parent_class)->finalize (gobject);
-}
-
-static void
-location_geocode_get_property (GObject *object,
-       guint property_id,
-       GValue *value,
-       GParamSpec *pspec)
-{
-       LocationGeocodePrivate *priv = GET_PRIVATE (object);
-
-       g_return_if_fail(priv->mod);
-       g_return_if_fail(priv->mod->handler);
-       switch (property_id){
-       case PROP_SERVICE_NAME:{
-               char* service_name = NULL;
-               if(priv->mod->ops.get_service_name){
-                       if( LOCATION_ERROR_NONE != priv->mod->ops.get_service_name(priv->mod->handler, &service_name) ){
-                               service_name = NULL;
-                       }
-               }
-               LOCATION_LOGD("Get prop>> Service name: %s", service_name);
-               g_value_set_string(value, service_name);
-               g_free(service_name);
-               break;
-       }
-       default:
-               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-               break;
-       }
-}
-
-static int
-location_geocode_get_geocode (LocationGeocode *self,
-       const LocationAddress *address,
-       GList **position_list,
-       GList **accuracy_list)
-{
-       LOCATION_LOGD("location_geocode_get_geocode");
-       LocationGeocodePrivate* priv = GET_PRIVATE(self);
-       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->ops.get_geocode, LOCATION_ERROR_NOT_AVAILABLE);
-       return (priv->mod->ops.get_geocode)(priv->mod->handler, address, position_list, accuracy_list);
-}
-
-static int
-location_geocode_get_geocode_freeform (LocationGeocode *self,
-       const gchar  *address,
-       GList **position_list,
-       GList **accuracy_list)
-{
-       LOCATION_LOGD("location_geocode_get_geocode_freeform");
-       LocationGeocodePrivate* priv = GET_PRIVATE(self);
-       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->ops.get_geocode_freetext, LOCATION_ERROR_NOT_AVAILABLE);
-       return (priv->mod->ops.get_geocode_freetext)(priv->mod->handler, address, position_list, accuracy_list);
-}
-
-static int
-location_geocode_get_reversegeocode (LocationGeocode *self,
-       const LocationPosition *position,
-       LocationAddress **address,
-       LocationAccuracy **accuracy)
-{
-       LOCATION_LOGD("location_geocode_get_reversegeocode");
-       LocationGeocodePrivate* priv = GET_PRIVATE(self);
-       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->ops.get_reverse_geocode, LOCATION_ERROR_NOT_AVAILABLE);
-       return (priv->mod->ops.get_reverse_geocode)(priv->mod->handler, position, address, accuracy);
-}
-
-static int
-location_geocode_get_geocode_async (LocationGeocode *self,
-       LocationAddress *address,
-       LocationPositionCB callback,
-       gpointer userdata)
-{
-       LOCATION_LOGD("location_geocode_get_geocode_async");
-       LocationGeocodePrivate* priv = GET_PRIVATE(self);
-       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->ops.get_geocode_async, LOCATION_ERROR_NOT_AVAILABLE);
-       return (priv->mod->ops.get_geocode_async)(priv->mod->handler, address, callback, userdata);
-}
-
-static int
-location_geocode_get_geocode_freeform_async (LocationGeocode *self,
-       const gchar *address,
-       LocationPositionCB callback,
-       gpointer userdata)
-{
-       LOCATION_LOGD("location_geocode_get_geocode_freeform_async");
-       LocationGeocodePrivate* priv = GET_PRIVATE(self);
-       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->ops.get_geocode_freetext_async, LOCATION_ERROR_NOT_AVAILABLE);
-       return (priv->mod->ops.get_geocode_freetext_async)(priv->mod->handler, address, callback, userdata);
-}
-
-static int
-location_geocode_get_reversegeocode_async (LocationGeocode *self,
-       const LocationPosition *position,
-       LocationAddressCB callback,
-       gpointer userdata)
-{
-       LOCATION_LOGD("location_geocode_get_reversegeocode_async");
-       LocationGeocodePrivate* priv = GET_PRIVATE(self);
-       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->ops.get_reverse_geocode_async, LOCATION_ERROR_NOT_AVAILABLE);
-       return (priv->mod->ops.get_reverse_geocode_async)(priv->mod->handler, position, callback, userdata);
-}
-
-static void
-location_ielement_interface_init (LocationIElementInterface *iface)
-{
-       iface->get_geocode = (TYPE_GET_GEOCODE)location_geocode_get_geocode;
-       iface->get_geocode_freeform = (TYPE_GET_GEOCODE_FREEFORM)location_geocode_get_geocode_freeform;
-       iface->get_reversegeocode = (TYPE_GET_REVERSEGEOCODE)location_geocode_get_reversegeocode;
-       iface->get_geocode_async = (TYPE_GET_GEOCODE_ASYNC)location_geocode_get_geocode_async;
-       iface->get_geocode_freeform_async = (TYPE_GET_GEOCODE_FREEFORM_ASYNC)location_geocode_get_geocode_freeform_async;
-       iface->get_reversegeocode_async = (TYPE_GET_REVERSEGEOCODE_ASYNC)location_geocode_get_reversegeocode_async;
-}
-
-static void
-location_geocode_init (LocationGeocode *self)
-{
-       LOCATION_LOGD("location_geocode_init");
-       LocationGeocodePrivate* priv = GET_PRIVATE(self);
-
-       priv->mod = (LocationGeoMod*)module_new("geocode");
-       if(!priv->mod) LOCATION_LOGW("module loading failed");
-}
-
-static void
-location_geocode_class_init (LocationGeocodeClass *klass)
-{
-       LOCATION_LOGD("location_geocode_class_init");
-       GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-       GParamSpec *pspec;
-
-       gobject_class->get_property = location_geocode_get_property;
-
-       gobject_class->dispose = location_geocode_dispose;
-       gobject_class->finalize = location_geocode_finalize;
-
-       g_type_class_add_private (klass, sizeof (LocationGeocodePrivate));
-
-       pspec = g_param_spec_string ("service provider",
-                                "geocode service provider name prop",
-                                "geocode service provider name",
-                                DEFAULT_SERVICE,
-                                G_PARAM_READABLE);
-       g_object_class_install_property (gobject_class,
-                                   PROP_SERVICE_NAME,
-                                   pspec);
-}
diff --git a/location/location-ielement.h b/location/location-ielement.h
deleted file mode 100644 (file)
index a283321..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * libslp-location
- *
- * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
- *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __LOCATION_IELEMENT_H__
-#define __LOCATION_IELEMENT_H__
-
-#include <glib-object.h>
-#include <location/location-types.h>
-#include <location/location-position.h>
-#include <location/location-velocity.h>
-#include <location/location-accuracy.h>
-#include <location/location-address.h>
-#include <location/location-boundary.h>
-#include <location/location-satellite.h>
-#include <location/location-poi-info.h>
-
-/**
- * @file location-ielement.h
- * @brief This file contains the internal definitions and structures related to location interface.
- * @addtogroup LocationInternal
- * @{
- *@}
- */
-
-G_BEGIN_DECLS
-
-enum {
-       SERVICE_ENABLED,
-       SERVICE_DISABLED,
-       SERVICE_UPDATED,
-       ZONE_IN,
-       ZONE_OUT,
-       LAST_SIGNAL
-};
-
-#define LOCATION_TYPE_IELEMENT                  (location_ielement_get_type ())
-#define LOCATION_IELEMENT(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), LOCATION_TYPE_IELEMENT, LocationIElement))
-#define LOCATION_IS_IELEMENT(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LOCATION_TYPE_IELEMENT))
-#define LOCATION_IELEMENT_GET_INTERFACE(obj)    (G_TYPE_INSTANCE_GET_INTERFACE ((obj), LOCATION_TYPE_IELEMENT, LocationIElementInterface))
-
-typedef struct _LocationIElement          LocationIElement;
-typedef struct _LocationIElementInterface LocationIElementInterface;
-
-typedef int (*TYPE_START_FUNC)(LocationIElement *self);
-typedef int (*TYPE_STOP_FUNC) (LocationIElement *self);
-typedef int (*TYPE_GET_POSITION)(LocationIElement *self, LocationPosition **position, LocationAccuracy **accuracy);
-typedef int (*TYPE_GET_VELOCITY)(LocationIElement *self, LocationVelocity **velocity, LocationAccuracy **accuracy);
-typedef int (*TYPE_GET_GEOCODE)(LocationIElement *self, const LocationAddress *address, GList **position_list, GList **accuracy_list);
-typedef int (*TYPE_GET_GEOCODE_FREEFORM)(LocationIElement *self, const gchar *address, GList **position_list, GList **accuracy_list);
-typedef int (*TYPE_GET_REVERSEGEOCODE)(LocationIElement *self, const LocationPosition *position, LocationAddress **address, LocationAccuracy **accuracy);
-typedef int (*TYPE_GET_GEOCODE_ASYNC)(LocationIElement *self, const LocationAddress *address, LocationPositionCB callback, gpointer userdata);
-typedef int (*TYPE_GET_GEOCODE_FREEFORM_ASYNC)(LocationIElement *self, const gchar *address,  LocationPositionCB callback, gpointer userdata);
-typedef int (*TYPE_GET_REVERSEGEOCODE_ASYNC)(LocationIElement *self, const LocationPosition *position, LocationAddressCB callback, gpointer userdata);
-typedef int (*TYPE_GET_POI)(LocationIElement *self, gdouble radius, const gchar* keyword, LocationPOIInfo** poi);
-typedef int (*TYPE_GET_POI_ASYNC)(LocationIElement *self, gdouble radius, const gchar* keyword, LocationPOICB callback, gpointer userdata);
-typedef int (*TYPE_GET_POI_FROM_ADDRESS)(LocationIElement *self, const LocationAddress* address, gdouble radius, const gchar* keyword, LocationPOIInfo** poi);
-typedef int (*TYPE_GET_POI_FROM_POSITION)(LocationIElement *self, const LocationPosition* position, gdouble radius, const gchar* keyword, LocationPOIInfo** poi);
-typedef int (*TYPE_GET_POI_FROM_ADDRESS_ASYNC)(LocationIElement *self, const LocationAddress* address, gdouble radius, const gchar* keyword, LocationPOICB callback, gpointer userdata);
-typedef int (*TYPE_GET_POI_FROM_POSITION_ASYNC)(LocationIElement *self, const LocationPosition* position, gdouble radius, const gchar* keyword, LocationPOICB callback, gpointer userdata);
-
-struct _LocationIElementInterface
-{
-       GTypeInterface parent_iface;
-
-       TYPE_START_FUNC start;
-       TYPE_STOP_FUNC stop;
-       TYPE_GET_POSITION get_position;
-       TYPE_GET_VELOCITY get_velocity;
-       TYPE_GET_GEOCODE get_geocode;
-       TYPE_GET_GEOCODE_FREEFORM get_geocode_freeform;
-       TYPE_GET_REVERSEGEOCODE get_reversegeocode;
-       TYPE_GET_GEOCODE_ASYNC get_geocode_async;
-       TYPE_GET_GEOCODE_FREEFORM_ASYNC get_geocode_freeform_async;
-       TYPE_GET_REVERSEGEOCODE_ASYNC get_reversegeocode_async;
-       TYPE_GET_POI get_poi;
-       TYPE_GET_POI_FROM_ADDRESS get_poi_from_address;
-       TYPE_GET_POI_FROM_POSITION get_poi_from_position;
-       TYPE_GET_POI_ASYNC get_poi_async;
-       TYPE_GET_POI_FROM_ADDRESS_ASYNC get_poi_from_address_async;
-       TYPE_GET_POI_FROM_POSITION_ASYNC get_poi_from_position_async;
-};
-
-GType location_ielement_get_type (void);
-
-int location_ielement_start (LocationIElement *self);
-int location_ielement_stop(LocationIElement *self);
-int location_ielement_get_position (LocationIElement *self, LocationPosition **position, LocationAccuracy **accuracy);
-int location_ielement_get_velocity (LocationIElement *self, LocationVelocity **velocity, LocationAccuracy **accuracy);
-int location_ielement_get_geocode (LocationIElement *self, const LocationAddress *address, GList **position_list, GList **accuracy_list);
-int location_ielement_get_geocode_freeform (LocationIElement *self, const gchar *address, GList **position_list, GList **accuracy_list);
-int location_ielement_get_reversegeocode (LocationIElement *self, const LocationPosition *position, LocationAddress **address, LocationAccuracy **accuracy);
-int location_ielement_get_geocode_async (LocationIElement *self, const LocationAddress *address, LocationPositionCB callback, gpointer userdata);
-int location_ielement_get_geocode_freeform_async (LocationIElement *self, const gchar *address, LocationPositionCB callback, gpointer userdata);
-int location_ielement_get_reversegeocode_async (LocationIElement *self, const LocationPosition *position, LocationAddressCB callback, gpointer userdata);
-int location_ielement_get_poi(LocationIElement *self, gdouble radius, const gchar *keyword, LocationPOIInfo **poi);
-int location_ielement_get_poi_from_address(LocationIElement *self, const LocationAddress *address, gdouble radius, const gchar *keyword, LocationPOIInfo **poi);
-int location_ielement_get_poi_from_position (LocationIElement *self, const LocationPosition *position, gdouble radius, const gchar *keyword, LocationPOIInfo **poi);
-int location_ielement_get_poi_async(LocationIElement *self, gdouble radius, const gchar *keyword, LocationPOICB callback, gpointer userdata);
-int location_ielement_get_poi_from_address_async(LocationIElement *self, const LocationAddress *address, gdouble radius, const gchar *keyword, LocationPOICB callback, gpointer userdata);
-int location_ielement_get_poi_from_position_async (LocationIElement *self, const LocationPosition *position, gdouble radius, const gchar *keyword, LocationPOICB callback, gpointer userdata);
-
-G_END_DECLS
-
-#endif
diff --git a/location/location-poi-info.c b/location/location-poi-info.c
deleted file mode 100644 (file)
index 9429f5f..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * libslp-location
- *
- * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
- *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "location/location-poi-info.h"
-#include "location/location-log.h"
-
-GType
-location_poiinfo_get_type (void)
-{
-       static volatile gsize type_volatile = 0;
-       if(g_once_init_enter(&type_volatile)) {
-               GType type = g_boxed_type_register_static (
-                       g_intern_static_string ("LocationPOIInfo"),
-                       (GBoxedCopyFunc) location_poiinfo_copy,
-                       (GBoxedFreeFunc) location_poiinfo_free);
-               g_once_init_leave(&type_volatile, type);
-       }
-       return type_volatile;
-}
-
-GHashTable*
-location_poiinfo_detail_properties_new (void)
-{
-       return g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
-}
-
-void
-location_poiinfo_detail_properties_free (GHashTable* properties)
-{
-       g_return_if_fail(properties);
-       g_hash_table_destroy(properties);
-}
-
-gboolean
-location_poiinfo_detail_properties_insert (GHashTable* properties,
-       const gchar* key,
-       const gchar* value)
-{
-       g_return_val_if_fail(properties, FALSE);
-       g_hash_table_insert (properties, g_strdup(key), g_strdup(value));
-       return TRUE;
-}
-
-static void
-copy_poiinfo_detail_properties (gchar *key,
-       gchar *value,
-       GHashTable *properties)
-{
-       location_poiinfo_detail_properties_insert(properties, key, value);
-}
-
-GHashTable *
-location_poiinfo_detail_properties_copy (const GHashTable *properties)
-{
-       g_return_val_if_fail(properties, NULL);
-
-       GHashTable *dup = location_poiinfo_detail_properties_new ();
-       g_hash_table_foreach (properties,
-                                               (GHFunc)copy_poiinfo_detail_properties,
-                                               dup);
-       return dup;
-}
-
-LocationPOIInfo *
-location_poiinfo_new (int num_of_poi)
-{
-       LocationPOIInfo* poi_info = g_slice_new0(LocationPOIInfo);
-       poi_info->num_of_poi = num_of_poi;
-       poi_info->poi_detail = g_new0(LocationPOIDetail, poi_info->num_of_poi);
-       return poi_info;
-}
-
-void
-location_poiinfo_free (LocationPOIInfo* poi_info)
-{
-       g_return_if_fail(poi_info);
-       if(poi_info->poi_detail){
-               int i = 0;
-               for (i = 0 ; i < poi_info->num_of_poi ; i++) {
-                       g_free(poi_info->poi_detail[i].name);
-                       g_free(poi_info->poi_detail[i].type);
-                       location_address_free(poi_info->poi_detail[i].address);
-                       location_position_free(poi_info->poi_detail[i].position);
-                       g_free(poi_info->poi_detail[i].phone_number);
-                       location_poiinfo_detail_properties_free(poi_info->poi_detail[i].properties);
-               }
-       }
-       g_free(poi_info->poi_detail);
-       g_slice_free(LocationPOIInfo, poi_info);
-}
-
-LocationPOIInfo *
-location_poiinfo_copy (const LocationPOIInfo* poi_info)
-{
-       LocationPOIInfo* poi_info_dup = location_poiinfo_new(poi_info->num_of_poi);
-       int i = 0;
-       for (i = 0 ; i < poi_info_dup->num_of_poi ; i++)
-               location_poiinfo_set_poi_detail (poi_info_dup, i,
-                                                                               poi_info->poi_detail[i].name,
-                                                                               poi_info->poi_detail[i].type,
-                                                                               poi_info->poi_detail[i].address,
-                                                                               poi_info->poi_detail[i].position,
-                                                                               poi_info->poi_detail[i].phone_number,
-                                                                               poi_info->poi_detail[i].properties);
-
-       return poi_info_dup;
-}
-
-gboolean
-location_poiinfo_get_poi_detail (LocationPOIInfo *poi_info,
-       guint index,
-       gchar** name,
-       gchar** type,
-       LocationAddress** address,
-       LocationPosition** position,
-       gchar** phone_number,
-       GHashTable** properties)
-{
-       LOCATION_LOGD("location_poiinfo_get_poi_detail");
-       g_return_val_if_fail(name, FALSE);
-       g_return_val_if_fail(type, FALSE);
-       g_return_val_if_fail(address, FALSE);
-       g_return_val_if_fail(position, FALSE);
-       g_return_val_if_fail(phone_number, FALSE);
-       g_return_val_if_fail(properties, FALSE);
-       g_return_val_if_fail(index < poi_info->num_of_poi, FALSE);
-
-       *name = g_strdup(poi_info->poi_detail[index].name);
-       *type = g_strdup(poi_info->poi_detail[index].type);
-       *address = location_address_copy(poi_info->poi_detail[index].address);
-       *position = location_position_copy(poi_info->poi_detail[index].position);
-       *phone_number = g_strdup(poi_info->poi_detail[index].phone_number);
-       *properties = location_poiinfo_detail_properties_copy(poi_info->poi_detail[index].properties);
-
-       return TRUE;
-}
-
-gboolean
-location_poiinfo_set_poi_detail (LocationPOIInfo *poi_info,
-       guint index,
-       const gchar* name,
-       const gchar* type,
-       const LocationAddress* address,
-       const LocationPosition* position,
-       const gchar* phone_number,
-       const GHashTable* properties)
-{
-       LOCATION_LOGD("location_poiinfo_set_poi_detail");
-       g_return_val_if_fail(name, FALSE);
-       g_return_val_if_fail(type, FALSE);
-       g_return_val_if_fail(address, FALSE);
-       g_return_val_if_fail(position, FALSE);
-       g_return_val_if_fail(phone_number, FALSE);
-       g_return_val_if_fail( index < poi_info->num_of_poi, FALSE);
-
-       g_free(poi_info->poi_detail[index].name);
-       g_free(poi_info->poi_detail[index].type);
-       location_address_free(poi_info->poi_detail[index].address);
-       location_position_free(poi_info->poi_detail[index].position);
-       g_free(poi_info->poi_detail[index].phone_number);
-       location_poiinfo_detail_properties_free(poi_info->poi_detail[index].properties);
-
-       poi_info->poi_detail[index].name = g_strdup(name);
-       poi_info->poi_detail[index].type = g_strdup(type);
-       poi_info->poi_detail[index].address = location_address_copy(address);
-       poi_info->poi_detail[index].position = location_position_copy(position);
-       poi_info->poi_detail[index].phone_number = g_strdup(phone_number);
-       poi_info->poi_detail[index].properties = location_poiinfo_detail_properties_copy(properties);
-
-       return TRUE;
-}
diff --git a/location/location-poi-info.h b/location/location-poi-info.h
deleted file mode 100644 (file)
index 6488907..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * libslp-location
- *
- * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
- *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __LOCATION_POI_INFO_H__
-#define __LOCATION_POI_INFO_H__
-
-#include <location/location-types.h>
-#include <location/location-position.h>
-#include <location/location-address.h>
-
-/**
- * @file location-poi-info.h
- * @brief This file contains the internal definitions and structures related to POI information.
- * @addtogroup LocationTypes
- * @{
- */
-
-G_BEGIN_DECLS
-
-/**
- * @brief This represents one POI information such as name, type of POI, etc.
- */
-typedef struct _LocationPOIDetail {
-       gchar *name;                   // Name of a POI
-       gchar *type;                   // Type of a POI (e.g. cafe)
-       LocationAddress *address;      // Address of a POI
-       LocationPosition *position;    // Position of a POI
-       gchar *phone_number;           // Phone number of a POI
-       GHashTable *properties;        // GHashTable with detailed characteristics of a POI.
-} LocationPOIDetail;
-
-/**
- * @brief This represents a number of POI informations.
- */
-struct _LocationPOIInfo
-{
-       guint num_of_poi;
-       LocationPOIDetail *poi_detail;
-};
-
-GType location_poiinfo_get_type (void);
-#define LOCATION_TYPE_POIINFO (location_poiinfo_get_type ())
-
-/**
- * @brief   Create a new GHashTable for properties in a #LocationPOIDetail.
- * @remarks None.
- * @pre     #location_init should be called before.\n
- * @post    None.
- * @param   None.
- * @return  a new GHashTable.
- * @retval  NULL if error occured
- */
-GHashTable *location_poiinfo_detail_properties_new (void);
-
-/**
- * @brief   Free a GHashTable for properties in a #LocationPOIDetail.
- * @remarks None.
- * @pre     #location_init should be called before.\n
- * @post    None.
- * @param [in] properties - a #GHashTable.
- * @return None.
- */
-void location_poiinfo_detail_properties_free (GHashTable* properties);
-
-/**
- * @brief   Insert a new key and value into a GHashTable for properties in a #LocationPOIDetail.
- * @remarks None.
- * @pre     #location_init should be called before.\n
- * @post    None.
- * @param [in]  properties - a #GHashTable in a #LocationPOIDetail.
- * @param [in]  key - a key to insert (e.g. URL)
- * @param [in]  value - the value to associate with the key. (e.g. http://www.samsung.com)
- * @return gboolean
- * @retval\n
- * TRUE - if success\n
- * FALSE - if error occured\n
- */
-gboolean location_poiinfo_detail_properties_insert (GHashTable* properties, const gchar* key, const gchar* value);
-
-/**
- * @brief   Makes a copy of GHashTable for properties in a #LocationPOIDetail.
- * @remarks None.
- * @pre     #location_init should be called before.\n
- * @post    None.
- * @param [in]  properties - a #GHashTable
- * @return a new #GHashTable
- * @retval NULL if error occured
- */
-GHashTable *location_poiinfo_detail_properties_copy (const GHashTable *properties);
-
-/**
- * @brief   Create a new #LocationPOIInfo with given number of #LocationPOIDetail.
- * @remarks None.
- * @pre     #location_init should be called before.\n
- * @post    None.
- * @param [in]  num_of_poi - number of #LocationPOIDetail.
- * @return a new #LocationPOIInfo
- * @retval NULL if error occured
- */
-LocationPOIInfo* location_poiinfo_new (int num_of_poi);
-
-/**
- * @brief   Free a #LocationPOIInfo.
- * @remarks None.
- * @pre     #location_init should be called before.\n
- * @post    None.
- * @param [in] poi_info - a #LocationPOIInfo.
- * @return None.
- */
-void location_poiinfo_free(LocationPOIInfo* poi_info);
-
-/**
- * @brief   Makes a copy of #LocationPOIInfo
- * @remarks None.
- * @pre     #location_init should be called before.\n
- * @post    None.
- * @param [in]  poi_info - a #LocationPOIInfo
- * @return a new #LocationPOIInfo
- * @retval NULL if error occured
- */
-LocationPOIInfo *location_poiinfo_copy (const LocationPOIInfo* poi_info);
-
-/**
- * @brief   Get elements of #LocationPOIDetail with given index in #LocationPOIInfo.
- * @remarks None.
- * @pre     #location_init should be called before.\n
- * @post    None.
- * @param [in]   poi_info - a #LocationPOIInfo
- * @param [in]   index - index of #LocationPOIDetail in #LocationPOIInfo
- * @param [out]  name - a name of a #LocationPOIDetail
- * @param [out]  type - a type of a #LocationPOIDetail
- * @param [out]  address - a address of a #LocationPOIDetail
- * @param [out]  position - a position of a#LocationPOIDetail
- * @param [out]  phone_number - a phone number of #LocationPOIDetail
- * @param [out]  properties - a GHashTable with properties of #LocationPOIDetail
- * @return gboolean
- * @retval\n
- * TRUE - if success\n
- * FALSE - if error occured\n
- */
-gboolean location_poiinfo_get_poi_detail(LocationPOIInfo *poi_info, guint index, gchar** name, gchar** type, LocationAddress** address, LocationPosition** position, gchar** phone_number, GHashTable** properties);
-
-/**
- * @brief   Set elements of #LocationPOIDetail with given index in #LocationPOIInfo.
- * @remarks None.
- * @pre     #location_init should be called before.\n
- * @post    None.
- * @param [in]  poi_info - a #LocationPOIInfo
- * @param [in]  index - index of #LocationPOIDetail in #LocationPOIInfo
- * @param [in]  name - a name of a #LocationPOIDetail
- * @param [in]  type - a type of a #LocationPOIDetail
- * @param [in]  address - a address of a #LocationPOIDetail
- * @param [in]  position - a position of a #LocationPOIDetail
- * @param [in]  phone_number - a phone number of a #LocationPOIDetail
- * @param [in]  properties - a GHashTable with properties of a #LocationPOIDetail, can be NULL if a POI have no additional properties
- * @return gboolean
- * @retval\n
- * TRUE - if success\n
- * FALSE - if error occured\n
- */
-gboolean location_poiinfo_set_poi_detail(LocationPOIInfo *poi_info, guint index, const gchar* name, const gchar* type, const LocationAddress* address, const LocationPosition* position, const gchar* phone_number, const GHashTable* properties);
-
-/**
- * @}
- */
-
-G_END_DECLS
-
-#endif
diff --git a/location/location-poi.c b/location/location-poi.c
deleted file mode 100644 (file)
index 20084bb..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * libslp-location
- *
- * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
- *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "location/location-log.h"
-
-#include "location/location-module-internal.h"
-
-#include "location/location-poi.h"
-#include "location/location-marshal.h"
-#include "location/location-ielement.h"
-
-typedef struct _LocationPoiPrivate {
-       LocationPoiMod* mod;
-} LocationPoiPrivate;
-
-enum {
-       PROP_0,
-       PROP_SERVICE_NAME
-};
-
-#define DEFAULT_SERVICE "decarta"
-
-#define GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), LOCATION_TYPE_POI, LocationPoiPrivate))
-
-static void location_ielement_interface_init (LocationIElementInterface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (LocationPoi, location_poi, G_TYPE_OBJECT,
-       G_IMPLEMENT_INTERFACE (LOCATION_TYPE_IELEMENT, location_ielement_interface_init));
-
-
-static void
-location_poi_dispose (GObject *gobject)
-{
-       LOCATION_LOGD("location_poi_dispose");
-
-       G_OBJECT_CLASS (location_poi_parent_class)->dispose (gobject);
-}
-
-static void
-location_poi_finalize (GObject *gobject)
-{
-       LOCATION_LOGD("location_poi_finalize");
-       LocationPoiPrivate* priv = GET_PRIVATE(gobject);
-       module_free(priv->mod, "poi");
-       priv->mod = NULL;
-       G_OBJECT_CLASS (location_poi_parent_class)->finalize (gobject);
-}
-
-static void
-location_poi_get_property (GObject *object,
-       guint property_id,
-       GValue *value,
-       GParamSpec *pspec)
-{
-       LocationPoiPrivate *priv = GET_PRIVATE (object);
-
-       g_return_if_fail(priv->mod);
-       g_return_if_fail(priv->mod->handler);
-       switch (property_id){
-       case PROP_SERVICE_NAME:{
-               char* service_name = NULL;
-               if(priv->mod->ops.get_service_name){
-                       if( LOCATION_ERROR_NONE != priv->mod->ops.get_service_name(priv->mod->handler, &service_name) ){
-                               service_name = NULL;
-                       }
-               }
-               LOCATION_LOGD("Get prop>> Service name: %s", service_name);
-               g_value_set_string(value, service_name);
-               g_free(service_name);
-               break;
-       }
-       default:
-               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
-               break;
-       }
-}
-
-static int
-location_poi_get_poi (LocationPoi *poi,
-       gdouble radius,
-       const gchar *keyword,
-       LocationPOIInfo **poi_info)
-{
-       LOCATION_LOGD("location_poi_get_poi");
-       LocationPoiPrivate* priv = GET_PRIVATE(poi);
-       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->ops.get_poi, LOCATION_ERROR_NOT_AVAILABLE);
-       return (priv->mod->ops.get_poi)(priv->mod->handler, radius, keyword, poi_info);
-}
-
-static int
-location_poi_get_poi_from_address (LocationPoi *poi,
-       const LocationAddress *address,
-       gdouble radius,
-       const gchar *keyword,
-       LocationPOIInfo **poi_info)
-{
-       LOCATION_LOGD("location_poi_get_poi_from_address");
-       LocationPoiPrivate* priv = GET_PRIVATE(poi);
-       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->ops.get_poi_from_address, LOCATION_ERROR_NOT_AVAILABLE);
-       return (priv->mod->ops.get_poi_from_address)(priv->mod->handler, address, radius, keyword, poi_info);
-}
-
-static int
-location_poi_get_poi_from_position (LocationPoi *poi,
-       const LocationPosition *position,
-       gdouble radius,
-       const gchar *keyword,
-       LocationPOIInfo **poi_info)
-{
-       LOCATION_LOGD("location_poi_get_poi_from_position");
-       LocationPoiPrivate* priv = GET_PRIVATE(poi);
-       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->ops.get_poi_from_position, LOCATION_ERROR_NOT_AVAILABLE);
-       return (priv->mod->ops.get_poi_from_position)(priv->mod->handler, position, radius, keyword, poi_info);
-}
-
-static int
-location_poi_get_poi_async (LocationPoi *poi,
-       gdouble radius,
-       const gchar *keyword,
-       LocationPOICB callback,
-       gpointer userdata)
-{
-       LOCATION_LOGD("location_poi_get_poi_async");
-       LocationPoiPrivate* priv = GET_PRIVATE(poi);
-       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->ops.get_poi_async, LOCATION_ERROR_NOT_AVAILABLE);
-       return (priv->mod->ops.get_poi_async)(priv->mod->handler, radius, keyword, callback, userdata);
-}
-
-static int
-location_poi_get_poi_from_address_async (LocationPoi *poi,
-       const LocationAddress *address,
-       gdouble radius,
-       const gchar *keyword,
-       LocationPOICB callback,
-       gpointer userdata)
-{
-       LOCATION_LOGD("location_poi_get_poi_from_address_async");
-       LocationPoiPrivate* priv = GET_PRIVATE(poi);
-       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->ops.get_poi_from_address_async, LOCATION_ERROR_NOT_AVAILABLE);
-       return (priv->mod->ops.get_poi_from_address_async)(priv->mod->handler, address, radius, keyword, callback, userdata);
-}
-
-static int
-location_poi_get_poi_from_position_async (LocationPoi *poi,
-       const LocationPosition *position,
-       gdouble radius,
-       const gchar* keyword,
-       LocationPOICB callback,
-       gpointer userdata)
-{
-       LOCATION_LOGD("location_poi_get_poi_from_position_async");
-       LocationPoiPrivate* priv = GET_PRIVATE(poi);
-       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (priv->mod->ops.get_poi_from_position_async, LOCATION_ERROR_NOT_AVAILABLE);
-       return (priv->mod->ops.get_poi_from_position_async)(priv->mod->handler, position, radius, keyword, callback, userdata);
-}
-
-static void
-location_ielement_interface_init (LocationIElementInterface *iface)
-{
-       iface->get_poi = (TYPE_GET_POI)location_poi_get_poi;
-       iface->get_poi_from_address = (TYPE_GET_POI_FROM_ADDRESS)location_poi_get_poi_from_address;
-       iface->get_poi_from_position = (TYPE_GET_POI_FROM_POSITION)location_poi_get_poi_from_position;
-       iface->get_poi_async = (TYPE_GET_POI_ASYNC)location_poi_get_poi_async;
-       iface->get_poi_from_address_async = (TYPE_GET_POI_FROM_ADDRESS_ASYNC)location_poi_get_poi_from_address_async;
-       iface->get_poi_from_position_async = (TYPE_GET_POI_FROM_POSITION_ASYNC)location_poi_get_poi_from_position_async;
-}
-
-static void
-location_poi_init (LocationPoi *poi)
-{
-       LOCATION_LOGD("location_poi_init");
-       LocationPoiPrivate* priv = GET_PRIVATE(poi);
-
-       priv->mod = (LocationPoiMod*)module_new("poi");
-       if(!priv->mod) LOCATION_LOGW("module loading failed");
-}
-
-static void
-location_poi_class_init (LocationPoiClass *klass)
-{
-       LOCATION_LOGD("location_poi_class_init");
-       GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-       GParamSpec *pspec;
-
-       gobject_class->get_property = location_poi_get_property;
-
-       gobject_class->dispose = location_poi_dispose;
-       gobject_class->finalize = location_poi_finalize;
-
-       g_type_class_add_private (klass, sizeof (LocationPoiPrivate));
-
-       pspec = g_param_spec_string ("service provider",
-                                "poi service provider name prop",
-                                "poi service provider name",
-                                DEFAULT_SERVICE,
-                                G_PARAM_READABLE);
-       g_object_class_install_property (gobject_class,
-                                   PROP_SERVICE_NAME,
-                                   pspec);
-}
diff --git a/location/location-poi.h b/location/location-poi.h
deleted file mode 100644 (file)
index 03dbf55..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * libslp-location
- *
- * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
- *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef __LOCATION_POI_H__
-#define __LOCATION_POI_H__
-
-#include <glib-object.h>
-
-/**
- * @addtogroup Location
- * @{
- * @file location-poi.h
- * @brief This file contains the internal definitions and structures related to POI.
- *@}
- */
-
-G_BEGIN_DECLS
-
-#define LOCATION_TYPE_POI                  (location_poi_get_type ())
-#define LOCATION_POI(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), LOCATION_TYPE_POI, LocationPoi))
-#define LOCATION_IS_POI(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LOCATION_TYPE_POI))
-#define LOCATION_POI_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), LOCATION_TYPE_POI, LocationPoiClass))
-#define LOCATION_IS_POI_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), LOCATION_TYPE_POI))
-#define LOCATION_POI_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), LOCATION_TYPE_POI, LocationPoiClass))
-
-typedef struct _LocationPoi        LocationPoi;
-typedef struct _LocationPoiClass   LocationPoiClass;
-
-struct _LocationPoi
-{
-       GObject parent_instance;
-};
-
-struct _LocationPoiClass
-{
-       GObjectClass parent_class;
-};
-
-GType location_poi_get_type (void);
-
-G_END_DECLS
-
-#endif
diff --git a/location/location.c b/location/location.c
deleted file mode 100644 (file)
index 637aef5..0000000
+++ /dev/null
@@ -1,473 +0,0 @@
-/*
- * libslp-location
- *
- * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
- *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-
-#include "location/location.h"
-#include "location/location-log.h"
-#include "location/location-setting.h"
-#include "location/location-module-internal.h"
-#include "location/location-ielement.h"
-#include "location/location-hybrid.h"
-#include "location/location-gps.h"
-#include "location/location-wps.h"
-#include "location/location-ips.h"
-#include "location/location-cps.h"
-#include "location/location-sps.h"
-#include "location/location-geocode.h"
-#include "location/location-poi.h"
-#include "location/location-position.h"
-
-static LocationObject *geocode = NULL;
-static LocationObject *poi = NULL;
-
-static gboolean
-is_connected_network()
-{
-       gboolean is_connected = TRUE;
-       int net_state = 0;
-
-       net_state = location_setting_get_int(VCONFKEY_NETWORK_STATUS);
-
-       LOCATION_LOGW("net_state[%d]", net_state);
-       if(net_state == VCONFKEY_NETWORK_OFF) {
-               is_connected = FALSE;
-       }
-
-       return is_connected;
-
-}
-
-EXPORT_API int location_init (void)
-{
-       LOCATION_LOGD("location_init");
-       g_type_init ();
-       if( FALSE == module_init() )
-               return LOCATION_ERROR_NOT_AVAILABLE;
-
-       return LOCATION_ERROR_NONE;
-}
-
-EXPORT_API LocationObject*
-location_new (LocationMethod method)
-{
-       LocationObject *self = NULL;
-
-       if (!geocode)
-               geocode = g_object_new (LOCATION_TYPE_GEOCODE, NULL);
-
-       /*if (!poi)
-               poi = g_object_new (LOCATION_TYPE_POI, NULL);*/
-
-       switch (method) {
-       case LOCATION_METHOD_HYBRID:
-               self = g_object_new (LOCATION_TYPE_HYBRID, NULL);
-               break;
-       case LOCATION_METHOD_GPS:
-               self = g_object_new (LOCATION_TYPE_GPS, NULL);
-               break;
-       case LOCATION_METHOD_WPS:
-               self = g_object_new (LOCATION_TYPE_WPS, NULL);
-               break;
-       case LOCATION_METHOD_CPS:
-               self = g_object_new (LOCATION_TYPE_CPS, NULL);
-               break;
-       case LOCATION_METHOD_IPS:
-               self = g_object_new (LOCATION_TYPE_IPS, NULL);
-               break;
-       case LOCATION_METHOD_SPS:
-               self = g_object_new (LOCATION_TYPE_SPS, NULL);
-               break;
-       default:
-               break;
-       }
-       return self;
-}
-
-EXPORT_API int
-location_free (LocationObject *obj)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-
-       //location_ielement_stop(LOCATION_IELEMENT(obj));
-       if (geocode) {
-               g_object_unref (geocode);
-               geocode = NULL;
-       }
-       /*if (poi) {
-               g_object_unref (poi);
-               poi = NULL;
-       }*/
-       g_object_unref (obj);
-       return LOCATION_ERROR_NONE;
-}
-
-EXPORT_API int
-location_start (LocationObject *obj)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       return location_ielement_start (LOCATION_IELEMENT(obj));
-}
-
-EXPORT_API int
-location_stop (LocationObject *obj)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       return location_ielement_stop (LOCATION_IELEMENT(obj));
-}
-
-EXPORT_API gboolean
-location_is_supported_method(LocationMethod method)
-{
-       gboolean is_supported = FALSE;
-
-       switch(method) {
-       case LOCATION_METHOD_HYBRID:
-               if(module_is_supported("gps") || module_is_supported("wps") || module_is_supported("sps"))
-                       is_supported = TRUE;
-               break;
-       case LOCATION_METHOD_GPS:
-               is_supported = module_is_supported("gps");
-               break;
-       case LOCATION_METHOD_WPS:
-               is_supported = module_is_supported("wps");
-               break;
-       case LOCATION_METHOD_SPS:
-               is_supported = module_is_supported("sps");
-               break;
-       case LOCATION_METHOD_CPS:
-       case LOCATION_METHOD_IPS:
-       default:
-               break;
-       }
-
-       return is_supported;
-}
-
-EXPORT_API gboolean
-location_is_enabled_gps(LocationObject *obj)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-
-       return (gboolean) location_setting_get_int(GPS_ENABLED);
-}
-
-EXPORT_API int
-location_get_position (LocationObject *obj,
-       LocationPosition **position,
-       LocationAccuracy **accuracy)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (position, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (accuracy, LOCATION_ERROR_PARAMETER);
-       return location_ielement_get_position (LOCATION_IELEMENT(obj), position, accuracy);
-}
-
-EXPORT_API int
-location_get_last_position (LocationObject *obj, LocationMethod method,
-       LocationPosition **position,
-       LocationAccuracy **accuracy)
-{
-       g_return_val_if_fail (position, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (accuracy, LOCATION_ERROR_PARAMETER);
-
-       return LOCATION_ERROR_NONE;
-}
-
-EXPORT_API int
-location_get_last_known_position (LocationObject *obj, LocationMethod method,
-       LocationLastPosition *last_position)
-{
-       g_return_val_if_fail (last_position, LOCATION_ERROR_PARAMETER);
-
-       LocationMethod redefined_method = method;
-
-       if (!obj) redefined_method = LOCATION_METHOD_HYBRID;
-
-       if (redefined_method == LOCATION_METHOD_HYBRID) {
-               int gps_timestamp = 0, wps_timestamp = 0, sps_timestamp = 0;
-               int latest_timestamp = 0;
-
-               redefined_method = LOCATION_METHOD_SPS;
-               vconf_get_int(GPS_LAST_TIMESTAMP, &gps_timestamp);
-               vconf_get_int(WPS_LAST_TIMESTAMP, &wps_timestamp);
-               vconf_get_int(SPS_LAST_TIMESTAMP, &sps_timestamp);
-
-               redefined_method = LOCATION_METHOD_SPS;
-               latest_timestamp = sps_timestamp;
-               if (gps_timestamp > sps_timestamp) {
-                       redefined_method = LOCATION_METHOD_GPS;
-                       latest_timestamp = gps_timestamp;
-               }
-
-               if (wps_timestamp > latest_timestamp) {
-                       redefined_method = LOCATION_METHOD_WPS;
-               }
-               
-       }
-
-       if (get_last_known_position (redefined_method, last_position)) {
-               return LOCATION_ERROR_UNKNOWN;
-       }
-
-       return LOCATION_ERROR_NONE;
-}
-
-EXPORT_API int
-location_get_satellite (LocationObject *obj, LocationSatellite **satellite)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (satellite, LOCATION_ERROR_PARAMETER);
-
-       return LOCATION_ERROR_NONE;;
-}
-
-EXPORT_API int
-location_get_last_satellite (LocationObject *obj, LocationSatellite **satellite)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (satellite, LOCATION_ERROR_PARAMETER);
-
-       return LOCATION_ERROR_NONE;;
-}
-
-EXPORT_API int
-location_get_position_from_address (LocationObject *obj,
-       const LocationAddress *address,
-       GList **position_list,
-       GList **accuracy_list)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (geocode, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
-       return location_ielement_get_geocode (LOCATION_IELEMENT(geocode), address, position_list, accuracy_list);
-}
-
-EXPORT_API int
-location_get_position_from_freeformed_address (LocationObject *obj,
-       const gchar *address,
-       GList **position_list,
-       GList **accuracy_list)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (geocode, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
-       return location_ielement_get_geocode_freeform (LOCATION_IELEMENT(geocode), address, position_list, accuracy_list);
-}
-
-EXPORT_API int
-location_get_velocity (LocationObject *obj,
-       LocationVelocity **velocity,
-       LocationAccuracy **accuracy)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (velocity, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (accuracy, LOCATION_ERROR_PARAMETER);
-
-       return location_ielement_get_velocity (LOCATION_IELEMENT(obj), velocity, accuracy);
-}
-
-EXPORT_API int
-location_get_last_velocity (LocationObject *obj,
-       LocationVelocity **velocity,
-       LocationAccuracy **accuracy)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (velocity, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (accuracy, LOCATION_ERROR_PARAMETER);
-       return LOCATION_ERROR_NONE;
-}
-
-EXPORT_API int
-location_get_address (LocationObject *obj,
-       LocationAddress **address,
-       LocationAccuracy **accuracy)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (geocode, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
-
-       LocationPosition *position = NULL;
-       int ret = location_ielement_get_position(LOCATION_IELEMENT (obj), &position, accuracy);
-       if (LOCATION_ERROR_NONE != ret) return ret;
-       ret = location_ielement_get_reversegeocode (LOCATION_IELEMENT(geocode), position, address, accuracy);
-       location_position_free (position);
-       return ret;
-}
-
-EXPORT_API int
-location_get_address_from_position (LocationObject *obj,
-       const LocationPosition *position,
-       LocationAddress **address,
-       LocationAccuracy **accuracy)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (geocode, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
-       return location_ielement_get_reversegeocode (LOCATION_IELEMENT(geocode), position, address, accuracy);
-}
-
-EXPORT_API int
-location_get_position_from_address_async (LocationObject *obj,
-       const LocationAddress *address,
-       LocationPositionCB callback,
-       gpointer userdata)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (geocode, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
-       return location_ielement_get_geocode_async (LOCATION_IELEMENT(geocode), address, callback, userdata);
-}
-
-
-EXPORT_API int
-location_get_position_from_freeformed_address_async (LocationObject *obj,
-       const gchar *address,
-       LocationPositionCB callback,
-       gpointer userdata)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (geocode, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
-       return location_ielement_get_geocode_freeform_async (LOCATION_IELEMENT(geocode), address, callback, userdata);
-}
-
-EXPORT_API int
-location_get_address_async (LocationObject *obj,
-       LocationAddressCB callback,
-       gpointer userdata)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (geocode, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
-
-       LocationPosition *position = NULL;
-       LocationAccuracy *acc = NULL;
-       int ret = location_ielement_get_position(LOCATION_IELEMENT(obj), &position, &acc);
-       if (LOCATION_ERROR_NONE != ret) return ret;
-       ret = location_ielement_get_reversegeocode_async (LOCATION_IELEMENT(geocode), position, callback, userdata);
-       location_position_free (position);
-       return ret;
-}
-
-EXPORT_API int
-location_get_address_from_position_async (LocationObject *obj,
-       const LocationPosition *position,
-       LocationAddressCB callback,
-       gpointer userdata)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (geocode, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
-       return location_ielement_get_reversegeocode_async (LOCATION_IELEMENT(geocode), position, callback, userdata);
-}
-
-EXPORT_API int
-location_get_poi (LocationObject *obj,
-       gdouble radius,
-       const gchar *keyword,
-       LocationPOIInfo **poi_info)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (poi, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
-       return location_ielement_get_poi(LOCATION_IELEMENT(poi), radius, keyword, poi_info);
-}
-
-EXPORT_API int
-location_get_poi_from_address(LocationObject *obj,
-       const LocationAddress *address,
-       gdouble radius,
-       const gchar *keyword,
-       LocationPOIInfo **poi_info)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (poi, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
-       return location_ielement_get_poi_from_address(LOCATION_IELEMENT(poi), address, radius, keyword, poi_info);
-}
-
-EXPORT_API int
-location_get_poi_from_position(LocationObject *obj,
-       const LocationPosition *position,
-       gdouble radius,
-       const gchar *keyword,
-       LocationPOIInfo **poi_info)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (poi, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
-       return location_ielement_get_poi_from_position(LOCATION_IELEMENT(poi), position, radius, keyword, poi_info);
-}
-
-EXPORT_API int
-location_get_poi_async (LocationObject *obj,
-       gdouble radius,
-       const gchar *keyword,
-       LocationPOICB callback,
-       gpointer userdata)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (poi, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
-       return location_ielement_get_poi_async(LOCATION_IELEMENT(poi), radius, keyword, callback, userdata);
-}
-
-EXPORT_API int
-location_get_poi_from_address_async (LocationObject *obj,
-       const LocationAddress *address,
-       gdouble radius,
-       const gchar *keyword,
-       LocationPOICB callback,
-       gpointer userdata)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (poi, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
-       return location_ielement_get_poi_from_address_async(LOCATION_IELEMENT(poi), address, radius, keyword, callback, userdata);
-}
-
-EXPORT_API int
-location_get_poi_from_position_async (LocationObject *obj,
-       const LocationPosition *position,
-       gdouble radius,
-       const gchar*keyword,
-       LocationPOICB callback,
-       gpointer userdata)
-{
-       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (poi, LOCATION_ERROR_NOT_AVAILABLE);
-       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
-       return location_ielement_get_poi_from_position_async(LOCATION_IELEMENT(poi), position, radius, keyword, callback, userdata);
-}
-
-EXPORT_API int
-location_send_command(const char *cmd)
-{
-       g_return_val_if_fail (cmd, LOCATION_ERROR_PARAMETER);
-
-       return LOCATION_ERROR_NONE;
-}
-
diff --git a/location/location.h b/location/location.h
deleted file mode 100644 (file)
index 42f6f58..0000000
+++ /dev/null
@@ -1,1442 +0,0 @@
-/*
- * libslp-location
- *
- * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
- *
- * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
- *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef __LOCATION_H__
-#define __LOCATION_H__
-
-
-#include <glib.h>
-#include <location/location-types.h>
-#include <location/location-position.h>
-#include <location/location-velocity.h>
-#include <location/location-accuracy.h>
-#include <location/location-address.h>
-#include <location/location-boundary.h>
-#include <location/location-satellite.h>
-#include <location/location-poi-info.h>
-
-G_BEGIN_DECLS
-
-/**
- * @file location.h
- * @brief This file contains the Location API and related structure and enumeration.
- */
-/**
- * @defgroup LocationFW LocationFW
- * @brief This is a Locatoin Framework for providing location based services.
- * @addtogroup LocationFW
- * @{
- * @defgroup LocationAPI Location API
- * @brief This sub module provides the Location API.
- * @addtogroup LocationAPI
- * @{
- */
-
-/**
- * @brief
- * Initialize location sub module.
- * @remarks None.
- * This API should be called before any other Location APIs.
- * @pre None.
- * @post None.
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- * @see None.
- * @par Example
- * @code
-#include <location.h>
-int main (int argc, char *argv[])
-{
-    location_init();
-    // Now you can use any other Location APIs.
-    return 0;
-}
- * @endcode
- */
-int location_init (void);
-
-/**
- * @brief
- * Create a new #LocationObject by using given #LocationMethod.
- * @remarks
- * Returned object is necessary for other APIs.
- * @pre
- * #location_init should be called before.
- * @post None.
- * @param [in]
- * method - Location method to be used.
- * @return a new #LocationObject
- * @retval NULL              if error occured
- * @see location_free
- * @par Example
- * @code
-#include <location.h>
-int main (int argc, char *argv[])
-{
-       LocationObject *loc = NULL;
-       location_init ();
-
-       loc  = location_new (LOCATION_METHOD_GPS);
-       if(!loc)
-               return -1;
-       // You can use new location object now.
-       return 0;
-}
- * @endcode
- */
-LocationObject *location_new (LocationMethod method);
-
-/**
- * @brief
- * Free memory of given #LocationObject.
- * @remarks None.
- * @pre
- * #location_init should be called before.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new.
- * @return int
- * @retval 0                              Success.
- *
- * Please refer #LocationError for more information.
- * @see location_new
- * @par Example
- * @code
-#include <location.h>
-int main (int argc, char *argv[])
-{
-       LocationObject *loc = NULL;
-       location_init ();
-       loc  = location_new (LOCATION_METHOD_GPS);
-       if(!loc)
-               return -1;
-
-       location_free (loc);
-       // You can not use location object anymore.
-       return 0;
-}
- * @endcode
- */
-int location_free (LocationObject *obj);
-
-/**
- * @brief
- * Start the location service by using given #LocationObject.
- * @remarks
- * If you want to recieve signals, you should use this API.
- * @pre
- * #location_init should be called before.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @return int
- * @retval 0                              Success.
- *
- * Please refer #LocationError for more information.
- * @see location_stop
- * @par Example
- * @code
-#include <location.h>
-static GMainLoop *loop = NULL;
-
-static void cb_service_enabled (GObject *self, guint status, gpointer userdata)
-{
-       LocationObject *loc = (LocationObject*)userdata;
-       LocationAccuracy *acc = NULL;
-       LocationPosition *pos = NULL;
-       LocationVelocity *vel = NULL;
-       LocationAddress *addr = NULL;
-       LocationMethod method;
-
-       g_object_get(loc, "method", &method, NULL);
-       g_debug("Get property>> method:%d", method);
-
-       if (LOCATION_ERROR_NONE == location_get_position (loc, &pos, &acc)) {
-               g_debug ("SYNC>> Current position> time: %d, lat: %f, long: %f, alt: %f, status: %d",
-                       pos->timestamp, pos->latitude, pos->longitude, pos->altitude, pos->status);
-               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
-                       acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-               location_position_free(pos);
-               location_accuracy_free(acc);
-       } else g_warning ("SYNC>> Current position> failed");
-
-       if (LOCATION_ERROR_NONE == location_get_velocity (loc, &vel, &acc)) {
-               g_debug ("SYNC>> Current velocity> time: %d, speed: %f, direction:%f, climb:%f",
-                               vel->timestamp, vel->speed, vel->direction, vel->climb);
-               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
-                               acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-               location_velocity_free(vel);
-               location_accuracy_free(acc);
-       } else g_warning ("SYNC>> Current velocity> failed");
-
-       if (LOCATION_ERROR_NONE == location_get_address(loc, &addr, &acc)) {
-               g_debug ("SYNC>> Current address> %s %s %s %s %s %s %s",
-                               addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
-               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-               location_address_free(addr);
-               location_accuracy_free(acc);
-       } else g_warning ("SYNC>> Current address> failed");
-}
-
-static void
-cb_service_updated (GObject *self,
-       guint type,
-       gpointer data,
-       gpointer accuracy,
-       gpointer userdata)
-{
-       LocationAccuracy *acc = (LocationAccuracy*) accuracy;
-       switch (type) {
-               case POSITION_UPDATED: {
-                       LocationPosition *pos = (LocationPosition*) data;
-                       g_debug ("ASYNC>> Current position> time: %d, lat: %f, long: %f, alt: %f, status: %d",
-                               pos->timestamp, pos->latitude, pos->longitude, pos->altitude, pos->status);
-                       g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
-                               acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-               }
-                       break;
-               case VELOCITY_UPDATED: {
-                       LocationVelocity *vel = (LocationVelocity*) data;
-                       g_debug ("ASYNC>> Current velocity> time: %d, speed: %f, direction:%f, climb:%f",
-                                       vel->timestamp, vel->speed, vel->direction, vel->climb);
-                       g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
-                                       acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-               }
-                       break;
-               default:
-                       g_warning ("ASYNC>> Undefined update type");
-                       break;
-       }
-}
-
-
-int main (int argc, char *argv[])
-{
-       LocationObject *loc = NULL;
-       int interval = 6;       //seconds
-       location_init ();
-
-       loc  = location_new (LOCATION_METHOD_GPS);
-       if(!loc)
-               return -1;
-
-       g_object_set(loc, "update-interval", interval, NULL);
-
-       g_signal_connect (loc, "service-enabled", G_CALLBACK(cb_service_enabled), loc);
-       g_signal_connect (loc, "service-updated", G_CALLBACK(cb_service_updated), loc);
-
-       location_start(loc);
-       loop = g_main_loop_new (NULL, TRUE);
-       g_main_loop_run (loop);  // GMainLoop is needed for receiving signals.
-
-       // ...
-       return 0;
-}
-* @endcode
-*/
-int location_start (LocationObject *obj);
-
-/**
- * @brief
- * Stop the location service by using given #LocationObject.
- * @remarks
- * After call this API, you can not recieve signals.
- * @pre
- * #location_init should be called before.\n
- * #location_start should be called before.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- * @see location_start
- * @par Example
- * @code
-#include <location.h>
-static GMainLoop *loop = NULL;
-
-int main (int argc, char *argv[])
-{
-       LocationObject *loc = NULL;
-       location_init ();
-       loc  = location_new (LOCATION_METHOD_GPS);
-       if(!loc)
-               return -1;
-
-       location_start(loc);
-       loop = g_main_loop_new (NULL, TRUE);
-       g_main_loop_run (loop);
-
-       // ....
-
-       location_stop (loc);
-       // you can not receive signals anymore.
-       return 0;
-}
- * @endcode
- */
-int location_stop (LocationObject *obj);
-
-/**
- * @brief
- * Check wheither a method is available.
- * @remarks
- * @pre
- * #location_init should be called before.\n
- * @post None.
- * @param [in] method - a #LocationMethod
- * @return int
- * @retval True                Supported
- *        False        Not supported
- * @par Example
- #include <location.h>
-static GMainLoop *loop = NULL;
-
-int main (int argc, char *argv[])
-{
-       gboolean is_supported = FALSE;
-
-       // ....
-
-       is_supported = location_is_supported_method(LOCATION_METHOD_HYBRID);
-       if(is_supported == TRUE)
-               g_printf("Hybrid Method is supported.\n");
-       else
-               g_printf("Hybrid Method is not supported.\n");
-
-       return 0;
-}* @code
- * @endcode
- */
-gboolean location_is_supported_method(LocationMethod method);
-
-/**
- * @brief
- * Check wheither GPS is turned on or off.
- * @remarks
- * @pre
- * #location_init should be called before.\n
- * @post None.
- * @param [in] method - a #LocationMethod
- * @return int
- * @retval True                Turned on
- *        False        Turned off
- * @par Example
- #include <location.h>
-static GMainLoop *loop = NULL;
-
-int main (int argc, char *argv[])
-{
-       gboolean is_enabled = FALSE;
-
-       // ....
-
-       is_enabled = location_is_enabled_gps(loc);
-       if(is_enable == TRUE)
-               g_printf("GPS is turned on.\n");
-       else
-               g_printf("GPS is turned off.\n");
-
-       return 0;
-}* @code
- * @endcode
- */
-gboolean location_is_enabled_gps(LocationObject *obj);
-
-/**
- * @brief
- * Get current position information with estimate of the accuracy.
- * @remarks Out parameters are should be freed.
- * @pre
- * #location_init should be called before.\n
- * #location_start should be called before.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @param [out]
- * position - a new #LocationPosition
- * @param [out]
- * accuracy - a new #LocationAccuracy
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- * @see location_get_velocity
- * @par Example
- * @code
-#include <location.h>
-static GMainLoop *loop = NULL;
-
-static void cb_service_enabled (GObject *self, guint status, gpointer userdata)
-{
-       g_debug("cb_service_enabled: status(%d) userdata(0x%x)", status, (unsigned int)userdata);
-
-       LocationObject *loc = (LocationObject*)userdata;
-       LocationAccuracy *acc = NULL;
-       LocationPosition *pos = NULL;
-
-       // This function works properly after service is enabled.
-       if (LOCATION_ERROR_NONE == location_get_position (loc, &pos, &acc)) {
-               g_debug ("SYNC>> Current position> time: %d, lat: %f, long: %f, alt: %f, status: %d",
-                       pos->timestamp, pos->latitude, pos->longitude, pos->altitude, pos->status);
-               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
-                       acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-               location_position_free(pos);
-               location_accuracy_free(acc);
-       } else g_warning ("SYNC>> Current position> failed");
-}
-
-int main (int argc, char *argv[])
-{
-       LocationObject *loc = NULL;
-       gulong handler_id = 0;
-
-       location_init ();
-       loop = g_main_loop_new (NULL, TRUE);
-       loc  = location_new (LOCATION_METHOD_GPS);
-       if(!loc){
-               g_debug("location_new failed");
-               return -1;
-       }
-
-       handler_id = g_signal_connect (loc, "service-enabled", G_CALLBACK(cb_service_enabled), loc);
-       location_start (loc);
-       g_main_loop_run (loop);
-
-       g_signal_handler_disconnect(loc, handler_id);
-       location_stop (loc);
-       location_free (loc);
-
-       return 0;
-}
- * @endcode
- */
-int location_get_position (LocationObject *obj, LocationPosition **position, LocationAccuracy **accuracy);
-
-/**
- * @brief
- * Get last position information with estimate of the accuracy.
- * @remarks This API is not implemented now. \n
- *   Out parameters are should be freed.
- * @pre
- * #location_init should be called before.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @param [out]
- * position - a new #LocationPosition
- * @param [out]
- * accuracy - a new #LocationAccuracy
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- * @see location_get_position
- * @par Example
- * @code
-#include <location.h>
-
-int main (int argc, char *argv[])
-{
-       LocationObject *loc = NULL;
-       int ret = 0;
-       LocationPosition *last_pos = NULL;
-       LocationAccuracy *last_acc = NULL;
-
-       location_init ();
-       loc  = location_new (LOCATION_METHOD_GPS);
-       if(!loc){
-               g_debug("location_new failed");
-               return -1;
-       }
-
-       if (LOCATION_ERROR_NONE == location_get_last_position (loc, LOCATION_METHOD_GPS, &last_pos, &last_acc)) {
-               g_debug ("SYNC>> Last position> time: %d, lat: %f, long: %f, alt: %f, status: %d",
-                       last_pos->timestamp, last_pos->latitude, last_pos->longitude, last_pos->altitude, last_pos->status);
-               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
-                       last_acc->level, last_acc->horizontal_accuracy, last_acc->vertical_accuracy);
-               location_position_free(last_pos);
-               location_accuracy_free(last_acc);
-       } else g_warning ("SYNC>> Last position> failed");
-
-       location_free (loc);
-
-       return 0;
-}
- * @endcode
- */
-int location_get_last_position (LocationObject *obj, LocationMethod method, LocationPosition **position, LocationAccuracy **accuracy);
-
-/**
- * @brief
- * Get last satellite information.
- * @remarks This API is not implemented now. \n
- *   Out parameters are should be freed.
- * @pre
- * #location_init should be called before.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @param [out] satellite - a new #LocationSatellite
- * @return int
- * @retval 0                              Success
- * Please refer #LocationError for more information.
- * @see location_get_last_satellite
- * @par Example
- * @code
-#include <location.h>
-
-int main (int argc, char *argv[])
-{
-       LocationObject *loc = NULL;
-       int ret = 0, idx = 0;
-       LocationSatellite *sat = NULL;
-       guint prn;
-       gboolean used;
-       guint elevation;
-       guint azimuth;
-       gint snr;
-
-       location_init ();
-       loc  = location_new (LOCATION_METHOD_GPS);
-       if(!loc){
-               g_debug("location_new failed");
-               return -1;
-       }
-
-       if (LOCATION_ERROR_NONE == location_get_satellite (loc, &sat)) {
-               g_debug ("SYNC>> Current Sattelite> satellite in view = %d, satellite in used = %d", sat->num_of_sat_inview, sat->num_of_sat_used);
-               g_debug ("\tinview satellite information = ");
-               for (idx=0; idx<sat->num_of_sat_inview; idx++) {
-                       location_satellite_get_satellite_details(sat, idx, &prn, &used, &elevation, &azimuth, &snr);
-                       g_debug ("\t\t[%02d] used: %d, prn: %d, elevation: %d, azimuth: %d, snr: %d", idx, used, prn, elevation, azimuth, snr);
-               }
-               location_satellite_free (sat);
-       } else g_warning ("SYNC>> Current satellite> failed");
-
-       location_free (loc);
-
-       return 0;
-}
- * @endcode
- */
-int location_get_satellite (LocationObject *obj, LocationSatellite **satellite);
-
-/**
- * @brief
- * Get last satellite information.
- * @remarks This API is not implemented now. \n
- *   Out parameters are should be freed.
- * @pre
- * #location_init should be called before.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @param [out]
- * satellite - a new #LocationSatellite
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- * @par Example
- * @code
-#include <location.h>
-
-int main (int argc, char *argv[])
-{
-       LocationObject *loc = NULL;
-       int ret = 0, idx = 0;
-       LocationSatellite *last_sat = NULL;
-       guint prn;
-       gboolean used;
-       guint elevation;
-       guint azimuth;
-       gint snr;
-
-       location_init ();
-       loc  = location_new (LOCATION_METHOD_GPS);
-       if(!loc){
-               g_debug("location_new failed");
-               return -1;
-       }
-
-       if (LOCATION_ERROR_NONE == location_get_last_satellite (loc, &last_sat)) {
-               g_debug ("SYNC>> Last Sattelite> satellite in view = %d, satellite in used = %d", last_sat->num_of_sat_inview, last_sat->num_of_sat_used);
-               g_debug ("\tinview satellite information = ");
-               for (idx=0; idx<last_sat->num_of_sat_inview; idx++) {
-                       location_satellite_get_satellite_details(last_sat, idx, &prn, &used, &elevation, &azimuth, &snr);
-                       g_debug ("\t\t[%02d] used: %d, prn: %d, elevation: %d, azimuth: %d, snr: %d", idx, used, prn, elevation, azimuth, snr);
-               }
-               location_satellite_free (last_sat);
-       } else g_warning ("SYNC>> Last satellite> failed");
-
-       location_free (loc);
-
-       return 0;
-}
- * @endcode
- */
-int location_get_last_satellite (LocationObject *obj, LocationSatellite **satellite);
-
-/**
- * @brief
- * Get last known position information with estimate of the accuracy.
- * @remarks This API would be DEPRECATED. \n
- * @see location_get_last_position
- */
-int location_get_last_known_position (LocationObject *obj, LocationMethod method, LocationLastPosition *last_position) LOCATION_DEPRECATED_API;
-
-/**
- * @brief
- * Get current position information with estimate of the accuracy by using given address information.
- * @remarks Out parameters are should be freed.
- * @pre
- * #location_init should be called before.\n
- * Calling application must have an active data connection.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @param [in]
- * address - a #LocationAddress
- * @param [out]
- * position_list - a list of #LocationPosition
- * @param [out]
- * accuracy_list - a list of #LocationAccuracy
- * @return int
- * @retval 0                              Success.
- *
- * Please refer #LocationError for more information.
- * @see
- * location_get_position_from_address_async\n
- * @par Example
- * @code
-#include <location.h>
-
-static void PrintPos (gpointer data, gpointer user_data)
-{
-       LocationPosition *pos = (LocationPosition *)data;
-
-       if (pos) {
-               g_debug("time: [%d], latitude: [%f], longitude: [%f], altitude: [%f]\n", pos->timestamp, pos->latitude, pos->longitude, pos->altitude);
-               location_position_free (pos);
-       }
-}
-
-static void PrintAcc (gpointer data, gpointer user_data)
-{
-       LocationAccuracy *acc = (LocationAccuracy *)data;
-
-       if (acc) {
-               g_debug("level: [%d], horizontal_accuracy: [%f], vertical_accuracy: [%f]\n", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-               location_accuracy_free (acc);
-       }
-}
-
-int main (int argc, char *argv[])
-{
-       LocationObject *loc = NULL;
-       int ret = LOCATION_ERROR_NONE;
-
-       location_init ();
-       loc  = location_new (LOCATION_METHOD_GPS);
-       if(!loc){
-               g_debug("location_new failed");
-               return -1;
-       }
-
-       GList *pos_list = NULL;
-       GList *acc_list = NULL;
-       LocationAddress *addr = NULL;
-
-       addr = location_address_new ("1", "Post Street", NULL, "san jose", "ca", NULL, "95113");
-       if (LOCATION_ERROR_NONE == location_get_position_from_address(loc, addr, &pos_list, &acc_list)) {
-               g_list_foreach (pos_list, PrintPos, NULL);
-               g_list_foreach (acc_list, PrintAcc, NULL);
-       } else g_warning ("SYNC>> position from address> failed");
-
-       if (pos_list) {
-               g_list_free (pos_list);
-       }
-       if (acc_list) {
-               g_list_free (acc_list);
-       }
-
-       location_address_free (addr);
-       location_free (loc);
-       return 0;
-}
- * @endcode
- */
-int location_get_position_from_address (LocationObject *obj, const LocationAddress *address, GList **position_list, GList **accuracy_list);
-
-/**
- * @brief
- * Get current position information asynchronously with estimate of the accuracy by using given address information.
- * @remarks None.
- * @pre
- * #location_init should be called before.\n
- * Calling application must have glib or ecore main loop.\n
- * Calling application must have an active data connection.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @param [in]
- * address - a #LocationAddress
- * @param [in]
- * callback - A pointer of function which will be called after position is gained or when an error occurs.
- * @param [in]
- * userdata - data to pass to function
- * @return int
- * @retval 0                              Success.
- *
- * Please refer #LocationError for more information.
- * @see
- * location_get_position_from_address\n
- * @par Example
- * @code
-#include <location.h>
-
-static void PrintPos (gpointer data, gpointer user_data)
-{
-       LocationPosition *pos = (LocationPosition *)data;
-
-       if (pos) {
-               g_debug("time: [%d], latitude: [%f], longitude: [%f], altitude: [%f]\n", pos->timestamp, pos->latitude, pos->longitude, pos->altitude);
-       }
-}
-
-static void PrintAcc (gpointer data, gpointer user_data)
-{
-       LocationAccuracy *acc = (LocationAccuracy *)data;
-
-       if (acc) {
-               g_debug("level: [%d], horizontal_accuracy: [%f], vertical_accuracy: [%f]\n", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-       }
-}
-static void
-cb_position_from_address (LocationError error, GList *position_list, GList *accuracy_list, gpointer userdata)
-{
-       if (position_list && accuracy_list) {
-               g_list_foreach (position_list, PrintPos);
-               g_list_foreach (accuracy_list, PrintAcc);
-       }
-}
-
-void get_position_from_address(LocationObject* loc)
-{
-       LocationAddress *addr = location_address_new ("1", "Post Street", NULL, "san jose", "ca", NULL, "95113");
-       //Calling application must have an active data connection before using this function.
-       if (LOCATION_ERROR_NONE == location_get_position_from_address_async(loc, addr, cb_position_from_address, loc))
-               g_debug("location_get_position_from_address_async() success");
-       else g_warning ("location_get_position_from_address_async() failed");
-       location_address_free (addr);
-}
- * @endcode
- */
-int location_get_position_from_address_async (LocationObject *obj, const LocationAddress *address, LocationPositionCB callback, gpointer userdata);
-
-/**
- * @brief
- * Get current position information with estimate of the accuracy by using given free-formed address string.
- * @remarks Out parameters are should be freed.
- * @pre
- * #location_init should be called before.\n
- * Calling application must have an active data connection.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @param [in]
- * address - Free-formed address string to be used
- * @param [out]
- * position_list - a list of #LocationPosition
- * @param [out]
- * accuracy_list - a list of #LocationAccuracy
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- * @see
- * location_get_position_from_freeformed_address_async\n
- * @par Example
- * @code
-#include <location.h>
-
-static void PrintPos (gpointer data, gpointer user_data)
-{
-       LocationPosition *pos = (LocationPosition *)data;
-
-       if (pos) {
-               g_debug("time: [%d], latitude: [%f], longitude: [%f], altitude: [%f]\n", pos->timestamp, pos->latitude, pos->longitude, pos->altitude);
-               location_position_free (pos);
-       }
-}
-
-static void PrintAcc (gpointer data, gpointer user_data)
-{
-       LocationAccuracy *acc = (LocationAccuracy *)data;
-
-       if (acc) {
-               g_debug("level: [%d], horizontal_accuracy: [%f], vertical_accuracy: [%f]\n", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-               location_accuracy_free (acc);
-       }
-}
-
-int main (int argc, char *argv[])
-{
-       LocationObject *loc = NULL;
-       int ret = LOCATION_ERROR_NONE;
-
-       location_init ();
-       loc  = location_new (LOCATION_METHOD_GPS);
-       if(!loc){
-               g_debug("location_new failed");
-               return -1;
-       }
-
-       GList *pos_list = NULL;
-       GList *acc_list = NULL;
-       char* addr_str = g_strdup("4 N 2nd Street 95113");
-       //Calling application must have an active data connection before using this function.
-       if (LOCATION_ERROR_NONE == location_get_position_from_freeformed_address(loc, addr_str, &pos_list, &acc_list)) {
-               g_list_foreach (pos_list, PrintPos, NULL);
-               g_list_foreach (acc_list, PrintAcc, NULL);
-       } else g_warning ("SYNC>> position from freeformed address> failed");
-       g_free(addr_str);
-
-       location_free (loc);
-       return 0;
-}
- * @endcode
- */
-int location_get_position_from_freeformed_address (LocationObject *obj, const gchar *address, GList **position_list, GList **accuracy_list);
-
-/**
- * @brief
- * Get current position information asynchronously with estimate of the accuracy by using given free-formed address string.
- * @remarks None.
- * @pre
- * #location_init should be called before.\n
- * Calling application must have glib or ecore main loop.\n
- * Calling application must have an active data connection.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @param [in]
- * address - Free-formed address string to be used
- * @param [in]
- * callback - A pointer of function which will be called after position is gained or when an error occurs.
- * @param [in]
- * userdata - data to pass to function
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- * @see
- * location_get_position_from_freeformed_address\n
- * @par Example
- * @code
-#include <location.h>
-
-static void PrintPos (gpointer data, gpointer user_data)
-{
-       LocationPosition *pos = (LocationPosition *)data;
-
-       if (pos) {
-               g_debug("time: [%d], latitude: [%f], longitude: [%f], altitude: [%f]\n", pos->timestamp, pos->latitude, pos->longitude, pos->altitude);
-       }
-}
-
-static void PrintAcc (gpointer data, gpointer user_data)
-{
-       LocationAccuracy *acc = (LocationAccuracy *)data;
-
-       if (acc) {
-               g_debug("level: [%d], horizontal_accuracy: [%f], vertical_accuracy: [%f]\n", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-       }
-}
-
-static void
-cb_position_from_freeformed_address (LocationError error, GList *position_list, GList *accuracy_list, gpointer userdata)
-{
-       if (position_list && accuracy_list) {
-               g_list_foreach (position_list, PrintPos);
-               g_list_foreach (accuracy_list, PrintAcc);
-       }
-}
-
-void get_position_from_address(LocationObject* loc)
-{
-       gchar *addr_str = g_strdup("4 N 2nd Street 95113");
-       //Calling application must have an active data connection before using this function.
-       if (LOCATION_ERROR_NONE == location_get_position_from_freeformed_address_async(loc, addr_str, cb_position_from_freeformed_address, loc))
-               g_debug("location_get_position_from_freeformed_address_async() success");
-       else g_warning ("location_get_position_from_freeformed_address_async() failed");
-       g_free(addr_str);
-
-}
- * @endcode
- */
-int location_get_position_from_freeformed_address_async (LocationObject *obj, const gchar *address, LocationPositionCB callback,       gpointer userdata);
-
-/**
- * @brief
- * Get current velocity information with estimate of the accuracy.
- * @remarks Out parameters are should be freed.
- * @pre
- * #location_init should be called before.\n
- * #location_start should be called before.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @param [out]
- * velocity - a new #LocationVelocity
- * @param [out]
- * accuracy - a new #LocationAccuracy
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- * @see location_get_position
- * @par Example
- * @code
-#include <location.h>
-static GMainLoop *loop = NULL;
-
-static void cb_service_enabled (GObject *self, guint status, gpointer userdata)
-{
-       g_debug("cb_service_enabled: status(%d) userdata(0x%x)", status, (unsigned int)userdata);
-
-       LocationObject *loc = (LocationObject*)userdata;
-       LocationAccuracy *acc = NULL;
-       LocationVelocity *vel = NULL;
-
-       if (LOCATION_ERROR_NONE == location_get_velocity (loc, &vel, &acc)) {
-               g_debug ("SYNC>> Current velocity> time: %d, speed: %f, direction:%f, climb:%f",
-                       vel->timestamp, vel->speed, vel->direction, vel->climb);
-               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
-                       acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-               location_velocity_free(vel);
-               location_accuracy_free(acc);
-       } else g_warning ("SYNC>> Current velocity> failed");
-}
-
-int main (int argc, char *argv[])
-{
-       LocationObject *loc = NULL;
-       gulong hander_id = 0;
-       location_init ();
-
-       loop = g_main_loop_new (NULL, TRUE);
-
-       loc  = location_new (LOCATION_METHOD_GPS);
-       if(!loc){
-               g_debug("location_new failed");
-               return -1;
-       }
-
-       handler_id = g_signal_connect (loc, "service-enabled", G_CALLBACK(cb_service_enabled), loc);
-       location_start (loc);
-       g_main_loop_run (loop);
-
-       g_signal_handler_disconnect(loc, handler_id);
-       location_stop (loc);
-       location_free (loc);
-
-       return 0;
-}
-
- * @endcode
- */
-int location_get_velocity (LocationObject *obj, LocationVelocity **velocity, LocationAccuracy **accuracy);
-
-/**
- * @brief
- * Get last velocity information with estimate of the accuracy.
- * @remarks This API is not implemented now. \n
- * Out parameters are should be freed.
- * @pre
- * #location_init should be called before.\n
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @param [out]
- * velocity - a new #LocationVelocity
- * @param [out]
- * accuracy - a new #LocationAccuracy
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- * @see location_get_velocity
- * @par Example
- * @code
-#include <location.h>
-
-int main (int argc, char *argv[])
-{
-       LocationObject *loc = NULL;
-       LocationVelocity *last_vel = NULL;
-       LocationAccuracy *last_acc = NULL;
-       location_init ();
-
-       loc  = location_new (LOCATION_METHOD_GPS);
-       if(!loc){
-               g_debug("location_new failed");
-               return -1;
-       }
-
-       if (LOCATION_ERROR_NONE == location_get_last_velocity (loc, &last_vel, &last_acc)) {
-               g_debug ("SYNC>> Last velocity> time: %d, speed: %f, direction:%f, climb:%f",
-                       last_vel->timestamp, last_vel->speed, last_vel->direction, last_vel->climb);
-               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
-                       last_acc->level, last_acc->horizontal_accuracy, last_acc->vertical_accuracy);
-               location_velocity_free(last_vel);
-               location_accuracy_free(last_acc);
-       } else g_warning ("SYNC>> Last velocity> failed.");
-
-       location_free (loc);
-
-       return 0;
-}
- * @endcode
- */
-int location_get_last_velocity (LocationObject *obj, LocationVelocity **velocity, LocationAccuracy **accuracy);
-
-
-/**
- * @brief
- * Get current address information with estimate of the accuracy by using current position.
- * @remarks Out parameters are should be freed.
- * @pre
- * #location_init should be called before.\n
- * #location_start should be called before.\n
- * Calling application must have an active data connection.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @param [out]
- * address - a new #LocationAddress
- * @param [out]
- * accuracy - a new #LocationAccuracy
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- * @see
- * location_get_address_async\n
- * @par Example
- * @code
-#include <location.h>
-static GMainLoop *loop = NULL;
-
-static void cb_service_enabled (GObject *self, guint status, gpointer userdata)
-{
-       g_debug("cb_service_enabled: status(%d) userdata(0x%x)", status, (unsigned int)userdata);
-
-       LocationAddress *addr = NULL;
-       LocationAccuracy *acc = NULL;
-       LocationObject *loc = (LocationObject*)userdata;
-
-       // This function works properly after service is enabled.
-       //Calling application must have an active data connection before using this function.
-       if (LOCATION_ERROR_NONE == location_get_address(loc, &addr, &acc)) {
-               g_debug ("SYNC>> Current address> %s %s %s %s %s %s %s",
-                       addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
-               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-               location_address_free(addr);
-               location_accuracy_free(acc);
-       } else g_warning ("SYNC>> Current address> failed");
-}
-
-int main (int argc, char *argv[])
-{
-       LocationObject *loc = NULL;
-       gulong handler_id = 0;
-       int ret = LOCATION_ERROR_NONE;
-
-       location_init ();
-
-       loop = g_main_loop_new (NULL, TRUE);
-
-       loc  = location_new (LOCATION_METHOD_GPS);
-       if(!loc){
-               g_debug("location_new failed");
-               return -1;
-       }
-
-       handler_id = g_signal_connect (loc, "service-enabled", G_CALLBACK(cb_service_enabled), loc);
-       location_start (loc);
-       g_main_loop_run (loop);
-
-       g_signal_handler_disconnect(loc, handler_id);
-       location_stop (loc);
-       location_free (loc);
-
-       return 0;
-}
- * @endcode
- */
-int location_get_address (LocationObject *obj, LocationAddress **address, LocationAccuracy **accuracy);
-
-/**
- * @brief
- * Get current address information asynchronously with estimate of the accuracy by using current position.
- * @remarks None.
- * @pre
- * #location_init should be called before.\n
- * #location_start should be called before.\n
- * Calling application must have glib or ecore main loop.\n
- * Calling application must have an active data connection.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @param [in]
- * callback - A pointer of function which will be called after address is gained or when an error occurs.
- * @param [in]
- * userdata - data to pass to function
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- * @see
- * location_get_address\n
- * @par Example
- * @code
-#include <location.h>
-static GMainLoop *loop = NULL;
-
-static void
-cb_address (LocationError error, LocationAddress *addr, LocationAccuracy *acc, gpointer userdata)
-{
-       g_debug ("ASYNC>> location_get_address_async> %s %s %s %s %s %s %s",
-                       addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
-       g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-}
-
-static void cb_service_enabled (GObject *self, guint status, gpointer userdata)
-{
-       g_debug("cb_service_enabled: status(%d) userdata(0x%x)", status, (unsigned int)userdata);
-
-       LocationObject *loc = (LocationObject*)userdata;
-       // This function works properly after service is enabled.
-       //Calling application must have an active data connection before using this function.
-       if (LOCATION_ERROR_NONE == location_get_address_async(loc, cb_address, loc))
-               g_debug("location_get_address_async() success");
-       else g_warning ("location_get_address_async() failed");
-}
-
-
-int main (int argc, char *argv[])
-{
-       LocationObject *loc = NULL;
-       gulong handler_id = 0;
-       int ret = LOCATION_ERROR_NONE;
-
-       location_init ();
-
-       loop = g_main_loop_new (NULL, TRUE);
-
-       loc  = location_new (LOCATION_METHOD_GPS);
-       if(!loc){
-               g_debug("location_new failed");
-               return -1;
-       }
-
-       handler_id = g_signal_connect (loc, "service-enabled", G_CALLBACK(cb_service_enabled), loc);
-       location_start (loc);
-       g_main_loop_run (loop);
-
-       g_signal_handler_disconnect(loc, handler_id);
-       location_stop (loc);
-       location_free (loc);
-
-       return 0;
-}
- * @endcode
- */
-int location_get_address_async (LocationObject *obj, LocationAddressCB callback, gpointer userdata);
-
-/**
- * @brief
- * Get current address information with estimate of the accuracy by using given position information.
- * @remarks Out parameters are should be freed.
- * @pre
- * #location_init should be called before.\n
- * Calling application must have an active data connection.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @param [in]
- * position - a #LocationPosition
- * @param [out]
- * address - a new #LocationAddress
- * @param [out]
- * accuracy - a new #LocationAccuracy
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- * @see
- * location_get_address_from_position_async\n
- * @par Example
- * @code
-#include <location.h>
-static GMainLoop *loop = NULL;
-
-int
-main (int argc, char *argv[])
-{
-       LocationObject *loc = NULL;
-       int ret = LOCATION_ERROR_NONE;
-
-       location_init ();
-
-       loop = g_main_loop_new (NULL, TRUE);
-
-       loc  = location_new (LOCATION_METHOD_GPS);
-       if(!loc){
-               g_debug("location_new failed");
-               return -1;
-       }
-
-       LocationPosition *pos = NULL;
-       LocationAccuracy *acc = NULL;
-       LocationAddress *addr = NULL;
-
-       //Calling application must have an active data connection before using this function.
-       pos = location_position_new (0, 37.257809, 127.056383, 0, LOCATION_STATUS_2D_FIX);
-       if (LOCATION_ERROR_NONE == location_get_address_from_position(loc, pos, &addr, &acc)) {
-               g_debug ("SYNC>> address from position> %s %s %s %s %s %s %s",
-                       addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
-               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-               location_address_free(addr);
-               location_accuracy_free(acc);
-       } else g_warning ("SYNC>> address from position> failed");
-       location_position_free (pos);
-}
- * @endcode
- */
-int location_get_address_from_position (LocationObject *obj, const LocationPosition *position, LocationAddress **address, LocationAccuracy **accuracy);
-
-/**
- * @brief
- * Get current address information asynchronously with estimate of the accuracy by using given position information.
- * @remarks None.
- * @pre
- * #location_init should be called before.\n
- * Calling application must have glib or ecore main loop.\n
- * Calling application must have an active data connection.
- * @post None.
- * @param [in]
- * obj - a #LocationObject created by #location_new
- * @param [in]
- * position - a #LocationPosition
- * @param [in]
- * callback - A pointer of function which will be called after address is gained or when an error occurs.
- * @param [in]
- * userdata - data to pass to function
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- * @see
- * location_get_address_from_position\n
- * @par Example
- * @code
-#include <location.h>
-static GMainLoop *loop = NULL;
-
-static void
-cb_address_from_position (LocationError error, LocationAddress *addr, LocationAccuracy *acc, gpointer userdata)
-{
-       g_debug ("ASYNC>> location_get_address_from_position_async> %s %s %s %s %s %s %s",
-                       addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
-       g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-}
-
-void get_address_from_position(LocationObject* loc)
-{
-       LocationPosition *pos = location_position_new (0, 37.257809, 127.056383, 0, LOCATION_STATUS_2D_FIX);
-       //Calling application must have an active data connection before using this function.
-       if (LOCATION_ERROR_NONE == location_get_address_from_position_async(loc, pos, cb_address_from_position, loc))
-               g_debug("location_get_address_from_position_async() success");
-       else g_warning ("location_get_address_from_position_async() failed");
-       location_position_free (pos);
-}
- * @endcode
- */
-int location_get_address_from_position_async (LocationObject *obj, const LocationPosition *position,   LocationAddressCB callback, gpointer userdata);
-
-/**
- * @brief
- * Get information of point of interests by using current position within a given radius.
- * @remarks Out parameters are should be freed.
- * \n This functions is not implemneted yet.
- * @pre
- * #location_init should be called before.\n
- * #location_start should be called before.\n
- * Calling application must have an active data connection.
- * @post None.
- * @param [in]  obj - a #LocationObject created by #location_new
- * @param [in]  radius - radius of a circle
- * @param [in]  keyword - keyword for POI
- * @param [out] poi_info - a new #LocationPOIInfo
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- */
-int location_get_poi (LocationObject *obj, gdouble radius, const gchar *keyword, LocationPOIInfo **poi_info);
-
-/**
- * @brief
- * Get information of point of interests asynchronously by using current position within a given radius.
- * @remarks This functions is not implemneted yet.
- * @pre
- * #location_init should be called before.\n
- * #location_start should be called before.\n
- * Calling application must have glib or ecore main loop.\n
- * Calling application must have an active data connection.
- * @post None.
- * @param [in]  obj - a #LocationObject created by #location_new
- * @param [in]  radius - radius of a circle
- * @param [in]  callback - function to call
- * @param [in]  userdata - data to pass to function
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- */
-int location_get_poi_async (LocationObject *obj, gdouble radius, const gchar *keyword, LocationPOICB callback, gpointer userdata);
-
-/**
- * @brief
- * Get information of point of interests by using given address within a given radius.
- * @remarks Out parameters are should be freed.
- * \n This functions is not implemneted yet.
- * @pre
- * #location_init should be called before.\n
- * Calling application must have an active data connection.
- * @post None.
- * @param [in]  obj - a #LocationObject created by #location_new
- * @param [in]  address - a #LocationAddress
- * @param [in]  radius - radius of a circle
- * @param [in]  keyword - keyword for POI
- * @param [out] poi_info - a new #LocationPOIInfo
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- */
-int location_get_poi_from_address(LocationObject *obj, const LocationAddress *address, gdouble radius, const gchar *keyword,   LocationPOIInfo **poi_info);
-
-/**
- * @brief
- * Get information of point of interests asynchronously by using given address within a given radius.
- * @remarks This functions is not implemneted yet.
- * @pre
- * #location_init should be called before.\n
- * Calling application must have glib or ecore main loop.\n
- * Calling application must have an active data connection.
- * @post None.
- * @param [in]  obj - a #LocationObject created by #location_new
- * @param [in]  address - a #LocationAddress
- * @param [in]  radius - radius of a circle
- * @param [in]  callback - function to call
- * @param [in]  userdata - data to pass to function
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- */
-int location_get_poi_from_address_async (LocationObject *obj, const LocationAddress *address, gdouble radius, const gchar *keyword, LocationPOICB callback, gpointer userdata);
-
-/**
- * @brief
- * Get information of point of interests by using given position within a given radius.
- * @remarks Out parameters are should be freed.
- * \n This functions is not implemneted yet.
- * @pre
- * #location_init should be called before.\n
- * Calling application must have an active data connection.
- * @post None.
- * @param [in]  obj - a #LocationObject created by #location_new
- * @param [in]  position - a #LocationPosition
- * @param [in]  radius - radius of a circle
- * @param [in]  keyword - keyword for POI
- * @param [out] poi_info - a new #LocationPOIInfo
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- */
-int location_get_poi_from_position(LocationObject *obj, const LocationPosition *position, gdouble radius,      const gchar *keyword, LocationPOIInfo **poi_info);
-
-/**
- * @brief
- * Get information of point of interests asynchronously by using given position within a given radius.
- * @remarks This functions is not implemneted yet.
- * @pre
- * #location_init should be called before.\n
- * Calling application must have glib or ecore main loop.\n
- * Calling application must have an active data connection.
- * @post None.
- * @param [in]  obj - a #LocationObject created by #location_new
- * @param [in]  position - a #LocationPosition
- * @param [in]  radius - radius of a circle
- * @param [in]  callback - function to call
- * @param [in]  userdata - data to pass to function
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- */
-int location_get_poi_from_position_async (LocationObject *obj, const LocationPosition *position, gdouble radius,       const gchar*keyword, LocationPOICB callback, gpointer userdata);
-
-/**
- * @brief
- * Send command to the server.
- * @remarks This functions is not implemneted yet.
- * @pre
- * #location_init should be called before.\n
- * Calling application must have glib or ecore main loop.\n
- * Calling application must have an active data connection.
- * @post None.
- * @param [in]  cmd - a #char
- * @return int
- * @retval 0                              Success
- *
- * Please refer #LocationError for more information.
- */
-int location_send_command(const char *cmd);
-
-/**
- * @} @}
- */
-
-G_END_DECLS
-
-#endif /* __LOCATION_H__ */
diff --git a/location/manager/Makefile.am b/location/manager/Makefile.am
new file mode 100644 (file)
index 0000000..df26216
--- /dev/null
@@ -0,0 +1,41 @@
+noinst_LTLIBRARIES = liblocation-manager.la\r
+\r
+COMMON_HEADER_DIR = include\r
+MANAGER_DIR = manager\r
+MAP_SERVICE_DIR = map-service\r
+MODULE_DIR = module\r
+\r
+liblocation_manager_la_SOURCES = \\r
+                                                       location-marshal.c \\r
+                                                       location-marshal.h \\r
+                                                       location-ielement.c  \\r
+                                                       location-setting.c  \\r
+                                                       location-position.c  \\r
+                                                       location-velocity.c  \\r
+                                                       location-accuracy.c  \\r
+                                                       location-boundary.c  \\r
+                                                       location-satellite.c  \\r
+                                                       location-signaling-util.c \\r
+                                                       location-common-util.c \\r
+                                                       location-gps.c       \\r
+                                                       location-wps.c       \\r
+                                                       location-sps.c       \\r
+                                                       location-hybrid.c\r
+\r
+liblocation_manager_la_CFLAGS = \\r
+                                                       -fPIC\\r
+                                                       -I${srcdir} \\r
+                                                       -I${srcdir}/.. \\r
+                                                       -I${srcdir}/../include \\r
+                                                       -I${srcdir}/../${MANAGER_DIR} \\r
+                                                       -I${srcdir}/../${MODULE_DIR} \\r
+                                                       -I${srcdir}/../${MAP_SERVICE_DIR} \\r
+                                                       $(LOCATION_CFLAGS)\r
+\r
+EXTRA_DIST = \\r
+       location-marshal.list\r
+\r
+location-marshal.h: location-marshal.list $(GLIB_GENMARSHAL)\r
+       $(GLIB_GENMARSHAL) $< --header --prefix=location > $@\r
+location-marshal.c: location-marshal.list location-marshal.h $(GLIB_GENMARSHAL)\r
+       echo "#include \"location-marshal.h\"" > $@ && $(GLIB_GENMARSHAL) location-marshal.list --body --prefix=location >> $@\r
similarity index 97%
rename from location/location-accuracy.c
rename to location/manager/location-accuracy.c
index 4681e37..327e883 100644 (file)
@@ -23,8 +23,8 @@
 #include "config.h"
 #endif
 
-#include "location/location-accuracy.h"
-#include "location/location-log.h"
+#include "location-accuracy.h"
+#include "location-log.h"
 
 GType
 location_accuracy_get_type (void)
similarity index 95%
rename from location/location-accuracy.h
rename to location/manager/location-accuracy.h
index e006798..f257705 100644 (file)
 #ifndef __LOCATION_ACCURACY_H_
 #define __LOCATION_ACCURACY_H_
 
-#include <location/location-types.h>
+#include <location-types.h>
 
 G_BEGIN_DECLS
 
+GType location_accuracy_get_type(void);
+#define LOCATION_TYPE_ACCURACY (location_accuracy_get_type())
+
 /**
  * @file location-accuracy.h
  * @brief This file contains the definitions, structures, and functions related to accuracy information.
- * @addtogroup LocationTypes
+ */
+
+/**
+ * @addtogroup LocationAPI
+ * @{
+ * @defgroup LocationAPIAccuracy Location Accuracy
+ * @breif This provides APIs related to Location Accuracy.
+ * @addtogroup LocationAPIAccuracy
  * @{
  */
 
@@ -56,9 +66,6 @@ struct _LocationAccuracy
        gdouble vertical_accuracy;          ///< The vertical position uncertainty of the location in meters.
 };
 
-GType location_accuracy_get_type(void);
-#define LOCATION_TYPE_ACCURACY (location_accuracy_get_type())
-
 /**
  * @brief   Create a new #LocationAccuracy with  given information.
  * @remarks None.
@@ -124,7 +131,7 @@ int location_accuracy_level_compare(const LocationAccuracy *accuracy1, const Loc
 LocationAccuracy *location_accuracy_copy (const LocationAccuracy *accuracy);
 
 /**
- * @}
+ * @} @}
  */
 
 G_END_DECLS
similarity index 95%
rename from location/location-boundary.c
rename to location/manager/location-boundary.c
index 5c06a17..7fa79ea 100644 (file)
@@ -56,8 +56,8 @@
 
 #include <math.h>
 #include <string.h>
-#include "location/location-boundary.h"
-#include "location/location-log.h"
+#include "location-boundary.h"
+#include "location-log.h"
 
 GType
 location_boundary_get_type (void)
@@ -245,7 +245,7 @@ location_boundary_if_inside (LocationBoundary* boundary,
                        j = count - 1;
                        pos1_list = g_list_first(position_list);
                        pos2_list = g_list_last(position_list);
-                       while(pos1_list = g_list_next(pos1_list)) {
+                       while(pos1_list) {
                                edge_area = FALSE;
                                pos1 = pos1_list->data;
                                pos2 = pos2_list->data;
@@ -292,6 +292,7 @@ location_boundary_if_inside (LocationBoundary* boundary,
                                else LOCATION_LOGD("It is not crossed.");
 
                                pos2_list = pos1_list;
+                               pos1_list = g_list_next(pos1_list);
                        }
                        LOCATION_LOGW("num[%d]", crossing_num);
                        is_inside = crossing_num & 1; // Odd : inside, Even : outside
@@ -352,3 +353,21 @@ location_boundary_foreach(const LocationObject *obj, LocationBoundaryFunc func,
 
        return LOCATION_ERROR_NONE;
 }
+
+EXPORT_API LocationBoundary *
+location_boundary_get_bounding_box (LocationBoundary *boundary)
+{
+       g_return_val_if_fail (boundary, NULL);
+       LocationBoundary *bbox = NULL;
+
+       return bbox;
+}
+
+EXPORT_API LocationPosition *
+location_boundary_get_center_position (LocationBoundary *boundary)
+{
+       g_return_val_if_fail (boundary, NULL);
+       LocationPosition *center = NULL;
+
+       return center;
+}
similarity index 94%
rename from location/location-boundary.h
rename to location/manager/location-boundary.h
index 9fe0d6e..c3603ef 100644 (file)
 #ifndef __LOCATION_BOUNDARY_H_
 #define __LOCATION_BOUNDARY_H_
 
-#include <location/location-types.h>
-#include <location/location-position.h>
+#include <location-types.h>
+#include <location-position.h>
+
+G_BEGIN_DECLS
+
+GType location_boundary_get_type (void);
+#define LOCATION_TYPE_BOUNDARY (location_boundary_get_type ())
+
 
 /**
  * @file location-boundary.h
  * @brief This file contains the definitions, structures, and functions related to boundary information.
- * @addtogroup LocationTypes
+ */
+/**
+ * @addtogroup LocationAPI
+ * @{
+ * @defgroup LocationAPIBoundary Location Boundary
+ * @breif This provides APIs related to Location Boundary
+ * @addtogroup LocationAPIBoundary
  * @{
  */
 
-G_BEGIN_DECLS
-
 /**
  * @brief
  * The type of the @location_boundary_foreach function of #LocationObject
@@ -85,9 +95,6 @@ struct _LocationBoundary{
        };
 };
 
-GType location_boundary_get_type (void);
-#define LOCATION_TYPE_BOUNDARY (location_boundary_get_type ())
-
 /**
  * @brief   Create a rectangular type of new #LocationBoundary with given information.
  * @remarks None.
@@ -291,7 +298,18 @@ void location_test_boundary_if_inside(LocationObject *loc, LocationBoundary *bou
 gboolean location_boundary_if_inside (LocationBoundary *boundary, LocationPosition *position);
 
 /**
- * @}
+ * @brief Get bounding box of #LocationBoundary
+ */
+LocationBoundary *location_boundary_get_bounding_box (LocationBoundary *boundary);
+
+
+/**
+ * @brief Get the center position of #LocationBoundary
+ */
+LocationPosition * location_boundary_get_center_position (LocationBoundary *boundary);
+
+/**
+ * @} @}
  */
 
 G_END_DECLS
similarity index 76%
rename from location/location-common-util.c
rename to location/manager/location-common-util.c
index 231dc41..290a6e0 100644 (file)
@@ -169,58 +169,3 @@ int set_prop_removal_boundary(GList **prev_boundary_list, LocationBoundary* boun
 
        return LOCATION_ERROR_NONE;
 }
-
-int get_last_known_position (LocationMethod method, LocationLastPosition *last_pos)
-{
-       int timestamp = 0;
-       double longitude = 0.0, latitude = 0.0, altitude = 0.0;
-       double hor_accuracy = 0.0, ver_accuracy = 0.0;
-       LOCATION_LOGD("Method [%d]", method);
-       switch (method) {
-               case LOCATION_METHOD_SPS:
-                       if (vconf_get_int(SPS_LAST_TIMESTAMP, &timestamp) ||
-                               vconf_get_dbl(SPS_LAST_LATITUDE, &latitude) ||
-                               vconf_get_dbl(SPS_LAST_LONGITUDE, &longitude) ||
-                               vconf_get_dbl(SPS_LAST_ALTITUDE, &altitude) ||
-                               vconf_get_dbl(SPS_LAST_HORACCURACY, &hor_accuracy) ||
-                               vconf_get_dbl(SPS_LAST_VERACCURACY, &ver_accuracy)) {
-                               return -1;
-                       }
-                       break;
-               case LOCATION_METHOD_WPS:
-                       if (vconf_get_int(WPS_LAST_TIMESTAMP, &timestamp) ||
-                               vconf_get_dbl(WPS_LAST_LATITUDE, &latitude) ||
-                               vconf_get_dbl(WPS_LAST_LONGITUDE, &longitude) ||
-                               vconf_get_dbl(WPS_LAST_ALTITUDE, &altitude) ||
-                               vconf_get_dbl(WPS_LAST_HORACCURACY, &hor_accuracy)) {
-                               return -1;
-                       }
-                       break;
-               case LOCATION_METHOD_GPS:
-                       if (vconf_get_int(GPS_LAST_TIMESTAMP, &timestamp) ||
-                               vconf_get_dbl(GPS_LAST_LATITUDE, &latitude) ||
-                               vconf_get_dbl(GPS_LAST_LONGITUDE, &longitude) ||
-                               vconf_get_dbl(GPS_LAST_ALTITUDE, &altitude) ||
-                               vconf_get_dbl(GPS_LAST_HORACCURACY, &hor_accuracy) ||
-                               vconf_get_dbl(GPS_LAST_VERACCURACY, &ver_accuracy)) {
-                               return -1;
-                       }
-                       break;
-               case LOCATION_METHOD_HYBRID:
-               default:
-                       return -1;
-
-       }
-
-       last_pos->method = method;
-       last_pos->timestamp = (guint) timestamp;
-       last_pos->longitude = (gdouble) longitude;
-       last_pos->latitude = (gdouble) latitude;
-       last_pos->altitude = (gdouble) altitude;
-       last_pos->horizontal_accuracy = (gdouble) hor_accuracy;
-       last_pos->vertical_accuracy = (gdouble) ver_accuracy;
-
-       return 0;
-}
-
-
similarity index 85%
rename from location/location-common-util.h
rename to location/manager/location-common-util.h
index 99d9654..99d005d 100644 (file)
 #ifndef __LOCATION_COMMON_UTIL_H__
 #define __LOCATION_COMMON_UTIL_H__
 
-#include <location/location.h>
-#include <location/location-ielement.h>
+#include <location.h>
+#include <location-ielement.h>
 
 /**
  * @file location-common-util.h
  * @brief This file contains the common utils for LocationObject.
- * @addtogroup LocationInternal
- * @{
- * @}
  */
 
 G_BEGIN_DECLS
@@ -38,8 +35,6 @@ G_BEGIN_DECLS
 int set_prop_boundary(GList **prev_boundary_list, GList *new_boundary_list);
 int set_prop_removal_boundary(GList **prev_boundary_list, LocationBoundary *boundary);
 
-int get_last_known_position (LocationMethod method, LocationLastPosition *last_pos);
-
 G_END_DECLS
 
 #endif
similarity index 95%
rename from location/location-cps.c
rename to location/manager/location-cps.c
index c0c404a..63b0795 100644 (file)
 #include "config.h"
 #endif
 
-#include "location/location-setting.h"
-#include "location/location-log.h"
+#include "location-setting.h"
+#include "location-log.h"
 
-#include "location/location-module-internal.h"
+#include "module-internal.h"
 
-#include "location/location-cps.h"
-#include "location/location-marshal.h"
-#include "location/location-ielement.h"
+#include "location-cps.h"
+#include "location-marshal.h"
+#include "location-ielement.h"
 
 typedef struct _LocationCpsPrivate {
        LocationCpsMod *mod;
similarity index 97%
rename from location/location-cps.h
rename to location/manager/location-cps.h
index 5effdf4..8e12a36 100644 (file)
@@ -27,9 +27,6 @@
 /**
  * @file location-cps.h
  * @brief This file contains the internal definitions and structures related to CPS.
- * @addtogroup LocationInternal
- * @{
- * @}
  */
 
 G_BEGIN_DECLS
similarity index 81%
rename from location/location-gps.c
rename to location/manager/location-gps.c
index 3c3588f..131b41b 100644 (file)
 #include "config.h"
 #endif
 
-#include "location/location-setting.h"
-#include "location/location-log.h"
+#include "location-setting.h"
+#include "location-log.h"
 
-#include "location/location-module-internal.h"
+#include "module-internal.h"
 
-#include "location/location-gps.h"
-#include "location/location-marshal.h"
-#include "location/location-ielement.h"
-#include "location/location-signaling-util.h"
-#include "location/location-common-util.h"
+#include "location-gps.h"
+#include "location-marshal.h"
+#include "location-ielement.h"
+#include "location-signaling-util.h"
+#include "location-common-util.h"
 
 
 typedef struct _LocationGpsPrivate {
@@ -46,6 +46,8 @@ typedef struct _LocationGpsPrivate {
        LocationAccuracy*       acc;
        GList*                  boundary_list;
        ZoneStatus              zone_status;
+       guint                   sat_timestamp;
+       LocationSatellite*      sat;
 } LocationGpsPrivate;
 
 enum {
@@ -111,6 +113,17 @@ gps_velocity_cb (gboolean enabled,
 }
 
 static void
+gps_satellite_cb (gboolean enabled,
+               LocationSatellite *sat,
+               gpointer self)
+{
+       LOCATION_LOGD("gps_satellite_cb");
+       g_return_if_fail(self);
+       LocationGpsPrivate* priv = GET_PRIVATE(self);
+       satellite_signaling(self, signals, &(priv->enabled), priv->interval, &(priv->sat_timestamp), &(priv->sat), enabled, sat);
+}
+
+static void
 location_setting_gps_cb (keynode_t *key,
        gpointer self)
 {
@@ -130,7 +143,7 @@ location_setting_gps_cb (keynode_t *key,
        }
        else if (1 == location_setting_get_key_val(key) && priv->mod->ops.start && !priv->is_started) {
                LOCATION_LOGD("location resumed by setting");
-               ret = priv->mod->ops.start (priv->mod->handler, gps_status_cb, gps_position_cb, gps_velocity_cb, self);
+               ret = priv->mod->ops.start (priv->mod->handler, gps_status_cb, gps_position_cb, gps_velocity_cb, gps_satellite_cb, self);
                if (ret == LOCATION_ERROR_NONE) priv->is_started = TRUE;
        }
 }
@@ -153,7 +166,7 @@ location_gps_start (LocationGps *self)
                ret = LOCATION_ERROR_NOT_ALLOWED;
        }
        else {
-               ret = priv->mod->ops.start (priv->mod->handler, gps_status_cb, gps_position_cb, gps_velocity_cb, self);
+               ret = priv->mod->ops.start (priv->mod->handler, gps_status_cb, gps_position_cb, gps_velocity_cb, gps_satellite_cb, self);
                if (ret == LOCATION_ERROR_NONE) {
                        priv->is_started = TRUE;
                }
@@ -357,6 +370,24 @@ location_gps_get_position (LocationGps *self,
 }
 
 static int
+location_gps_get_last_position (LocationGps *self,
+       LocationPosition **position,
+       LocationAccuracy **accuracy)
+{
+       LOCATION_LOGD("location_gps_get_position");
+       // Enable to get a last position even though GPS_ENABLE dose not set on
+
+       LocationGpsPrivate *priv = GET_PRIVATE (self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+
+       LocModGpsOps ops = priv->mod->ops;
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (ops.get_last_position, LOCATION_ERROR_NOT_AVAILABLE);
+       return ops.get_last_position(priv->mod->handler, position, accuracy);
+
+}
+
+static int
 location_gps_get_velocity (LocationGps *self,
        LocationVelocity **velocity,
        LocationAccuracy **accuracy)
@@ -373,13 +404,67 @@ location_gps_get_velocity (LocationGps *self,
        return ops.get_velocity(priv->mod->handler, velocity, accuracy);
 }
 
+static int
+location_gps_get_last_velocity (LocationGps *self,
+       LocationVelocity **velocity,
+       LocationAccuracy **accuracy)
+{
+       LOCATION_LOGD("location_gps_get_last_velocity");
+
+       LocationGpsPrivate *priv = GET_PRIVATE (self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       setting_retval_if_fail(GPS_ENABLED);
+
+       LocModGpsOps ops = priv->mod->ops;
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (ops.get_last_velocity, LOCATION_ERROR_NOT_AVAILABLE);
+       return ops.get_last_velocity(priv->mod->handler, velocity, accuracy);
+
+}
+
+static int
+location_gps_get_satellite (LocationGps *self,
+       LocationSatellite **satellite)
+{
+       LOCATION_LOGD("location_gps_get_satellite");
+
+       LocationGpsPrivate *priv = GET_PRIVATE (self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       setting_retval_if_fail(GPS_ENABLED);
+
+       LocModGpsOps ops = priv->mod->ops;
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (ops.get_satellite, LOCATION_ERROR_NOT_AVAILABLE);
+       return ops.get_satellite(priv->mod->handler, satellite);
+}
+
+static int
+location_gps_get_last_satellite (LocationGps *self,
+       LocationSatellite **satellite)
+{
+       LOCATION_LOGD("location_gps_get_last_satellite");
+
+       LocationGpsPrivate *priv = GET_PRIVATE (self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       setting_retval_if_fail(GPS_ENABLED);
+
+       LocModGpsOps ops = priv->mod->ops;
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (ops.get_last_satellite, LOCATION_ERROR_NOT_AVAILABLE);
+       return ops.get_last_satellite(priv->mod->handler, satellite);
+}
+
 static void
 location_ielement_interface_init (LocationIElementInterface *iface)
 {
        iface->start = (TYPE_START_FUNC)location_gps_start;
        iface->stop = (TYPE_STOP_FUNC)location_gps_stop;
        iface->get_position = (TYPE_GET_POSITION)location_gps_get_position;
+       iface->get_last_position = (TYPE_GET_POSITION)location_gps_get_last_position;
        iface->get_velocity = (TYPE_GET_VELOCITY)location_gps_get_velocity;
+       iface->get_last_velocity = (TYPE_GET_VELOCITY)location_gps_get_last_velocity;
+       iface->get_satellite = (TYPE_GET_SATELLITE)location_gps_get_satellite;
+       iface->get_last_satellite = (TYPE_GET_SATELLITE)location_gps_get_last_satellite;
 }
 
 static void
similarity index 96%
rename from location/location-gps.h
rename to location/manager/location-gps.h
index 418bcf1..e658ce9 100644 (file)
 /**
  * @file location-gps.h
  * @brief This file contains the internal definitions and structures related to GPS.
- * @defgroup LocationInternal Location Internal
- * @addtogroup LocationInternal
- * @{
- * @}
  */
 
 G_BEGIN_DECLS
similarity index 79%
rename from location/location-hybrid.c
rename to location/manager/location-hybrid.c
index 6e82d86..41f4c9c 100644 (file)
 #include "config.h"
 #endif
 
-#include "location/location-setting.h"
-#include "location/location-log.h"
+#include "location-setting.h"
+#include "location-log.h"
 
-#include "location/location-module-internal.h"
+#include "module-internal.h"
 
-#include "location/location-hybrid.h"
-#include "location/location-marshal.h"
-#include "location/location-ielement.h"
-#include "location/location-signaling-util.h"
-#include "location/location-common-util.h"
+#include "location-hybrid.h"
+#include "location-marshal.h"
+#include "location-ielement.h"
+#include "location-signaling-util.h"
+#include "location-common-util.h"
 
-#include "location/location-gps.h"
-#include "location/location-wps.h"
-#include "location/location-sps.h"
+#include "location-gps.h"
+#include "location-wps.h"
+#include "location-sps.h"
 
 typedef struct _LocationHybridPrivate {
        gboolean is_started;
@@ -44,6 +44,7 @@ typedef struct _LocationHybridPrivate {
        gboolean wps_enabled;
        gboolean sps_enabled;
        guint interval;
+       guint sat_timestamp;
        LocationObject *gps;
        LocationObject *wps;
        LocationObject *sps;
@@ -52,6 +53,7 @@ typedef struct _LocationHybridPrivate {
        LocationPosition *pos;
        LocationVelocity *vel;
        LocationAccuracy *acc;
+       LocationSatellite *sat;
        GList* boundary_list;
        ZoneStatus zone_status;
 
@@ -106,7 +108,7 @@ hybrid_get_update_method_obj (LocationHybridPrivate* priv)
 }
 
 static gboolean
-hyrid_is_equal_g_type_method(GType g_type, LocationMethod method)
+hybrid_is_equal_g_type_method(GType g_type, LocationMethod method)
 {
        if (g_type == LOCATION_TYPE_SPS && method == LOCATION_METHOD_SPS) return TRUE;
        if (g_type == LOCATION_TYPE_GPS && method == LOCATION_METHOD_GPS) return TRUE;
@@ -155,8 +157,14 @@ hybrid_service_updated (GObject *obj,
        LOCATION_LOGD ("hybrid_service_updated");
        LocationHybridPrivate* priv = GET_PRIVATE((LocationHybrid*)self);
        GType g_type = G_TYPE_FROM_INSTANCE(obj);
-       if (g_type == LOCATION_TYPE_GPS) hybrid_update_sps((LocationHybrid*)self, type, data, accuracy);
-       if (hyrid_is_equal_g_type_method(g_type, priv->current_method)) {
+       if (g_type == LOCATION_TYPE_GPS) {
+               if (type == SATELLITE_UPDATED) {
+                       LocationSatellite *sat = (LocationSatellite *) data;
+                       satellite_signaling(self, signals, &(priv->enabled), priv->interval, &(priv->sat_timestamp), &(priv->sat), TRUE, sat);
+               } else hybrid_update_sps((LocationHybrid*)self, type, data, accuracy);
+       }
+
+       if (hybrid_is_equal_g_type_method(g_type, priv->current_method)) {
                LocationAccuracy *acc = (LocationAccuracy*)accuracy;
                if (type == POSITION_UPDATED) {
                        LocationPosition *pos = (LocationPosition*)data;
@@ -164,7 +172,7 @@ hybrid_service_updated (GObject *obj,
                } else if (type == VELOCITY_UPDATED) {
                        LocationVelocity *vel = (LocationVelocity*) data;
                        velocity_signaling(self, signals, &(priv->enabled), priv->interval, &(priv->vel), TRUE, vel, acc);
-               } else LOCATION_LOGW ("Undefined GType updated");
+               }else LOCATION_LOGW ("Undefined GType updated");
        }
 
 }
@@ -399,6 +407,48 @@ location_hybrid_get_position (LocationHybrid *self,
 }
 
 static int
+location_hybrid_get_last_position (LocationHybrid *self,
+       LocationPosition **position,
+       LocationAccuracy **accuracy)
+{
+       LOCATION_LOGD("location_hybrid_get_last_position");
+       setting_retval_if_fail(GPS_ENABLED);
+
+       int ret = LOCATION_ERROR_NONE;
+       LocationPosition *gps_pos = NULL, *wps_pos = NULL;
+       LocationAccuracy *gps_acc = NULL, *wps_acc = NULL;
+       LocationHybridPrivate *priv = GET_PRIVATE (self);
+
+       if (priv->gps) location_get_last_position (priv->gps, &gps_pos, &gps_acc);
+       if (priv->wps) location_get_last_position (priv->wps, &wps_pos, &wps_acc);
+
+       if (gps_pos && wps_pos) {
+               if (wps_pos->timestamp > gps_pos->timestamp) {
+                       *position = wps_pos;
+                       *accuracy = wps_acc;
+                       location_position_free (gps_pos);
+                       location_accuracy_free (gps_acc);
+               }
+               else {
+                       *position = gps_pos;
+                       *accuracy = gps_acc;
+                       location_position_free (wps_pos);
+                       location_accuracy_free (wps_acc);
+               }
+       } else if (gps_pos) {
+               *position = gps_pos;
+               *accuracy = gps_acc;
+       } else if (wps_pos) {
+               *position = wps_pos;
+               *accuracy = wps_acc;
+       } else {
+               ret = LOCATION_ERROR_NOT_AVAILABLE;
+       }
+
+       return ret;
+}
+
+static int
 location_hybrid_get_velocity (LocationHybrid *self,
        LocationVelocity **velocity,
        LocationAccuracy **accuracy)
@@ -412,13 +462,98 @@ location_hybrid_get_velocity (LocationHybrid *self,
        return location_get_velocity (obj, velocity, accuracy);
 }
 
+static int
+location_hybrid_get_last_velocity (LocationHybrid *self,
+       LocationVelocity **velocity,
+       LocationAccuracy **accuracy)
+{
+       LOCATION_LOGD("location_hybrid_get_last_velocity");
+       setting_retval_if_fail(GPS_ENABLED);
+
+       int ret = LOCATION_ERROR_NONE;
+       LocationHybridPrivate *priv = GET_PRIVATE (self);
+       LocationVelocity *gps_vel = NULL, *wps_vel = NULL;
+       LocationAccuracy *gps_acc = NULL, *wps_acc = NULL;
+
+       if (priv->gps) location_get_last_velocity (priv->gps, &gps_vel, &gps_acc);
+       if (priv->wps) location_get_last_velocity (priv->wps, &wps_vel, &wps_acc);
+
+       if (gps_vel && wps_vel) {
+               if (wps_vel->timestamp > gps_vel->timestamp) {
+                       *velocity = wps_vel;
+                       *accuracy = wps_acc;
+                       location_velocity_free (gps_vel);
+                       location_accuracy_free (gps_acc);
+               } else {
+                       *velocity = gps_vel;
+                       *accuracy = gps_acc;
+                       location_velocity_free (wps_vel);
+                       location_accuracy_free (wps_acc);
+               }
+       }
+       else if (gps_vel) {
+               *velocity = gps_vel;
+               *accuracy = gps_acc;
+       } else if (wps_vel) {
+               *velocity = wps_vel;
+               *accuracy = wps_acc;
+       } else {
+               *velocity = NULL;
+               *accuracy = NULL;
+               ret = LOCATION_ERROR_NOT_AVAILABLE;
+       }
+
+       return ret;
+}
+
+static int
+location_hybrid_get_satellite (LocationHybrid *self,
+       LocationSatellite **satellite)
+{
+       LOCATION_LOGD("location_hybrid_get_satellite");
+       setting_retval_if_fail(GPS_ENABLED);
+
+       int ret = LOCATION_ERROR_NONE;
+       LocationHybridPrivate *priv = GET_PRIVATE (self);
+       if (priv->gps) ret = location_get_satellite (priv->gps, satellite);
+       else {
+               *satellite = NULL;
+               ret = LOCATION_ERROR_NOT_AVAILABLE;
+       }
+
+       return ret;
+}
+
+static int
+location_hybrid_get_last_satellite (LocationHybrid *self,
+       LocationSatellite **satellite)
+{
+       LOCATION_LOGD("location_hybrid_get_last_satellite");
+       setting_retval_if_fail(GPS_ENABLED);
+
+       int ret = LOCATION_ERROR_NONE;
+       LocationHybridPrivate *priv = GET_PRIVATE (self);
+
+       if (priv->gps) ret = location_get_last_satellite (priv->gps, satellite);
+       else {
+               *satellite = NULL;
+               ret = LOCATION_ERROR_NOT_AVAILABLE;
+       }
+
+       return ret;
+}
+
 static void
 location_ielement_interface_init (LocationIElementInterface *iface)
 {
        iface->start = (TYPE_START_FUNC)location_hybrid_start;
        iface->stop = (TYPE_STOP_FUNC)location_hybrid_stop;
        iface->get_position = (TYPE_GET_POSITION)location_hybrid_get_position;
+       iface->get_last_position = (TYPE_GET_POSITION)location_hybrid_get_last_position;
        iface->get_velocity = (TYPE_GET_VELOCITY)location_hybrid_get_velocity;
+       iface->get_last_velocity = (TYPE_GET_VELOCITY)location_hybrid_get_last_velocity;
+       iface->get_satellite = (TYPE_GET_SATELLITE)location_hybrid_get_satellite;
+       iface->get_last_satellite = (TYPE_GET_SATELLITE)location_hybrid_get_last_satellite;
 }
 
 static void
similarity index 98%
rename from location/location-hybrid.h
rename to location/manager/location-hybrid.h
index b7434c3..a044992 100644 (file)
@@ -27,9 +27,6 @@
 /**
  * @file location-hybrid.h
  * @brief This file contains the internal definitions and structures related to Hybrid method.
- * @addtogroup LocationInternal
- * @{
- *@}
  */
 
 G_BEGIN_DECLS
similarity index 51%
rename from location/location-ielement.c
rename to location/manager/location-ielement.c
index 3b17b01..ffa63cb 100644 (file)
@@ -23,8 +23,8 @@
 #include "config.h"
 #endif
 
-#include "location/location-log.h"
-#include "location/location-ielement.h"
+#include "location-log.h"
+#include "location-ielement.h"
 
 static void
 location_ielement_base_init (gpointer g_class)
@@ -87,6 +87,42 @@ location_ielement_get_position (LocationIElement *self,
 }
 
 int
+location_ielement_get_last_position (LocationIElement *self,
+       LocationPosition **position,
+       LocationAccuracy **accuracy)
+{
+       g_return_val_if_fail (LOCATION_IS_IELEMENT (self), LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (position, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (accuracy, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->get_last_position, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return LOCATION_IELEMENT_GET_INTERFACE (self)->get_last_position (self, position, accuracy);
+}
+
+int
+location_ielement_get_satellite (LocationIElement *self,
+       LocationSatellite **satellite)
+{
+       g_return_val_if_fail (LOCATION_IS_IELEMENT (self), LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (satellite, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->get_satellite, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return LOCATION_IELEMENT_GET_INTERFACE (self)->get_satellite (self, satellite);
+}
+
+int
+location_ielement_get_last_satellite (LocationIElement *self,
+       LocationSatellite **satellite)
+{
+       g_return_val_if_fail (LOCATION_IS_IELEMENT (self), LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (satellite, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->get_last_satellite, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return LOCATION_IELEMENT_GET_INTERFACE (self)->get_last_satellite (self, satellite);
+}
+
+
+int
 location_ielement_get_velocity (LocationIElement *self,
        LocationVelocity **velocity,
        LocationAccuracy **accuracy)
@@ -98,6 +134,17 @@ location_ielement_get_velocity (LocationIElement *self,
 }
 
 int
+location_ielement_get_last_velocity (LocationIElement *self,
+       LocationVelocity **velocity,
+       LocationAccuracy **accuracy)
+{
+       g_return_val_if_fail (LOCATION_IS_IELEMENT (self), LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (velocity, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->get_last_velocity, LOCATION_ERROR_NOT_AVAILABLE);
+       return LOCATION_IELEMENT_GET_INTERFACE (self)->get_last_velocity (self, velocity, accuracy);
+}
+
+int
 location_ielement_get_geocode (LocationIElement *self,
        const LocationAddress *address,
        GList **position_list,
@@ -106,7 +153,6 @@ location_ielement_get_geocode (LocationIElement *self,
        g_return_val_if_fail (LOCATION_IS_IELEMENT (self), LOCATION_ERROR_PARAMETER);
        g_return_val_if_fail (address, LOCATION_ERROR_PARAMETER);
        g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->get_geocode, LOCATION_ERROR_NOT_AVAILABLE);
-
        return LOCATION_IELEMENT_GET_INTERFACE (self)->get_geocode (self, address, position_list, accuracy_list);
 }
 
@@ -119,7 +165,6 @@ location_ielement_get_geocode_freeform (LocationIElement *self,
        g_return_val_if_fail (LOCATION_IS_IELEMENT (self), LOCATION_ERROR_PARAMETER);
        g_return_val_if_fail (address, LOCATION_ERROR_PARAMETER);
        g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->get_geocode_freeform, LOCATION_ERROR_NOT_AVAILABLE);
-
        return LOCATION_IELEMENT_GET_INTERFACE (self)->get_geocode_freeform (self, address, position_list, accuracy_list);
 }
 
@@ -177,85 +222,125 @@ location_ielement_get_reversegeocode_async (LocationIElement *self,
 }
 
 int
-location_ielement_get_poi (LocationIElement *self,
-       gdouble radius,
-       const gchar* keyword,
-       LocationPOIInfo **poi_info)
+location_ielement_search_poi (LocationIElement *self,
+               const LocationPOIFilter * filter, const LocationPosition *position,
+               const LocationPreference *svc_pref, const LocationPOIPreference * pref,
+               LocationPOICB cb, const gpointer user_data, guint * req_id)
 {
        g_return_val_if_fail (LOCATION_IS_IELEMENT (self), LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (poi_info, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->get_poi, LOCATION_ERROR_NOT_AVAILABLE);
-       return LOCATION_IELEMENT_GET_INTERFACE (self)->get_poi(self, radius, keyword, poi_info);
+       g_return_val_if_fail (filter, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (position, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (pref, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (cb, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->search_poi, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return LOCATION_IELEMENT_GET_INTERFACE (self)->search_poi(self,
+                       filter, position, svc_pref, pref, cb, user_data, req_id);
 }
 
 int
-location_ielement_get_poi_from_address (LocationIElement *self,
-       const LocationAddress* address,
-       gdouble radius,
-       const gchar *keyword,
-       LocationPOIInfo **poi_info)
+location_ielement_search_poi_by_area (LocationIElement *self,
+               const LocationPOIFilter * filter, const LocationBoundary * boundary,
+               const LocationPreference *svc_pref, const LocationPOIPreference * pref,
+               LocationPOICB cb, const gpointer user_data, guint * req_id)
 {
        g_return_val_if_fail (LOCATION_IS_IELEMENT (self), LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (filter, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (boundary, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (pref, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (cb, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->search_poi_by_area, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return LOCATION_IELEMENT_GET_INTERFACE (self)->search_poi_by_area (self,
+                       filter, boundary, svc_pref, pref, cb, user_data, req_id);
+}
+
+int
+location_ielement_search_poi_by_address (LocationIElement *self,
+               const LocationPOIFilter * filter, const LocationAddress * address,
+               const LocationPreference *svc_pref, const LocationPOIPreference * pref,
+               LocationPOICB cb, const gpointer user_data, guint * req_id)
+{
+       g_return_val_if_fail (LOCATION_IS_IELEMENT (self), LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (filter, LOCATION_ERROR_PARAMETER);
        g_return_val_if_fail (address, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (poi_info, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->get_poi_from_address, LOCATION_ERROR_NOT_AVAILABLE);
-       return LOCATION_IELEMENT_GET_INTERFACE (self)->get_poi_from_address(self, address, radius, keyword, poi_info);
+       g_return_val_if_fail (pref, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (cb, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->search_poi_by_address, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return LOCATION_IELEMENT_GET_INTERFACE (self)->search_poi_by_address (self,
+                       filter, address, svc_pref, pref, cb, user_data, req_id);
 }
 
 int
-location_ielement_get_poi_from_position (LocationIElement *self,
-       const LocationPosition *position,
-       gdouble radius,
-       const gchar *keyword,
-       LocationPOIInfo **poi_info)
+location_ielement_search_poi_by_freeform (LocationIElement *self, const LocationPOIFilter * filter,
+               const gchar *freeform, const LocationPreference *svc_pref, const LocationPOIPreference *pref, LocationPOICB cb,
+               const gpointer user_data, guint * req_id)
 {
        g_return_val_if_fail (LOCATION_IS_IELEMENT (self), LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (position, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (poi_info, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->get_poi_from_position, LOCATION_ERROR_NOT_AVAILABLE);
-       return LOCATION_IELEMENT_GET_INTERFACE (self)->get_poi_from_position(self, position, radius, keyword, poi_info);
+       g_return_val_if_fail (filter, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (freeform, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (pref, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (cb, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->search_poi_by_freeform, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return LOCATION_IELEMENT_GET_INTERFACE (self)->search_poi_by_freeform (self,
+                       filter, freeform, svc_pref, pref, cb, user_data, req_id);
 }
 
 int
-location_ielement_get_poi_async (LocationIElement *self,
-       gdouble radius,
-       const gchar *keyword,
-       LocationPOICB callback,
-       gpointer userdata)
+location_ielement_cancel_poi_request (LocationIElement *self, guint req_id)
 {
        g_return_val_if_fail (LOCATION_IS_IELEMENT (self), LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (callback, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->get_poi_async, LOCATION_ERROR_NOT_AVAILABLE);
-       return LOCATION_IELEMENT_GET_INTERFACE (self)->get_poi_async (self, radius, keyword, callback, userdata);
+       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->cancel_poi_request, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return LOCATION_IELEMENT_GET_INTERFACE (self)->cancel_poi_request (self, req_id);
 }
 
 int
-location_ielement_get_poi_from_address_async (LocationIElement *self,
-       const LocationAddress *address,
-       gdouble radius,
-       const gchar* keyword,
-       LocationPOICB callback,
-       gpointer userdata)
+location_ielement_request_route (LocationIElement *self, const LocationPosition *origin,
+               const LocationPosition *destination, GList *waypoint,
+               const LocationPreference *svc_pref, const LocationRoutePreference *pref, LocationRouteCB cb, const gpointer user_data, guint *req_id)
 {
        g_return_val_if_fail (LOCATION_IS_IELEMENT (self), LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (address, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (callback, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->get_poi_from_address_async, LOCATION_ERROR_NOT_AVAILABLE);
-       return LOCATION_IELEMENT_GET_INTERFACE (self)->get_poi_from_address_async (self, address, radius, keyword, callback, userdata);
+       g_return_val_if_fail (origin, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (destination, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (pref, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (cb, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->request_route, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return LOCATION_IELEMENT_GET_INTERFACE (self)->request_route (self,
+                       origin, destination, waypoint, svc_pref, pref, cb, user_data, req_id);
 }
 
+int
+location_ielement_cancel_route_request (LocationIElement *self, guint req_id)
+{
+       g_return_val_if_fail (LOCATION_IS_IELEMENT (self), LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->cancel_route_request, LOCATION_ERROR_NOT_AVAILABLE);
 
+       return LOCATION_IELEMENT_GET_INTERFACE (self)->cancel_route_request (self, req_id);
+}
 
-int location_ielement_get_poi_from_position_async (LocationIElement *self,
-       const LocationPosition* position,
-       gdouble radius,
-       const gchar* keyword,
-       LocationPOICB callback,
-       gpointer userdata)
+gboolean
+location_ielement_is_supported_map_provider_capability (LocationIElement *self, LocationMapServiceType type)
 {
        g_return_val_if_fail (LOCATION_IS_IELEMENT (self), LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (position, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (callback, LOCATION_ERROR_PARAMETER);
-       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->get_poi_from_position_async, LOCATION_ERROR_NOT_AVAILABLE);
-       return LOCATION_IELEMENT_GET_INTERFACE (self)->get_poi_from_position_async (self, position, radius, keyword, callback, userdata);
+       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->is_supported_map_provider_capability, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return LOCATION_IELEMENT_GET_INTERFACE (self)->is_supported_map_provider_capability (self, type);
+}
+
+int
+location_ielement_get_map_provider_capability_key (LocationIElement *self, LocationMapServiceType type, GList **key)
+{
+       g_return_val_if_fail (LOCATION_IS_IELEMENT (self), LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (LOCATION_IELEMENT_GET_INTERFACE (self)->get_map_provider_capability_key, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return LOCATION_IELEMENT_GET_INTERFACE (self)->get_map_provider_capability_key (self, type, key);
 }
diff --git a/location/manager/location-ielement.h b/location/manager/location-ielement.h
new file mode 100644 (file)
index 0000000..325ff6d
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __LOCATION_IELEMENT_H__
+#define __LOCATION_IELEMENT_H__
+
+#include <glib-object.h>
+#include <location-types.h>
+#include <location-position.h>
+#include <location-velocity.h>
+#include <location-accuracy.h>
+#include <location-address.h>
+#include <location-boundary.h>
+#include <location-satellite.h>
+#include <location-poi.h>
+
+/**
+ * @file location-ielement.h
+ * @brief This file contains the internal definitions and structures related to location interface.
+ */
+
+G_BEGIN_DECLS
+
+enum {
+       SERVICE_ENABLED,
+       SERVICE_DISABLED,
+       SERVICE_UPDATED,
+       ZONE_IN,
+       ZONE_OUT,
+       LAST_SIGNAL
+};
+
+#define LOCATION_TYPE_IELEMENT                  (location_ielement_get_type ())
+#define LOCATION_IELEMENT(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), LOCATION_TYPE_IELEMENT, LocationIElement))
+#define LOCATION_IS_IELEMENT(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LOCATION_TYPE_IELEMENT))
+#define LOCATION_IELEMENT_GET_INTERFACE(obj)    (G_TYPE_INSTANCE_GET_INTERFACE ((obj), LOCATION_TYPE_IELEMENT, LocationIElementInterface))
+
+typedef struct _LocationIElement          LocationIElement;
+typedef struct _LocationIElementInterface LocationIElementInterface;
+
+typedef int (*TYPE_START_FUNC)(LocationIElement *self);
+typedef int (*TYPE_STOP_FUNC) (LocationIElement *self);
+typedef int (*TYPE_GET_POSITION)(LocationIElement *self, LocationPosition **position, LocationAccuracy **accuracy);
+typedef int (*TYPE_GET_VELOCITY)(LocationIElement *self, LocationVelocity **velocity, LocationAccuracy **accuracy);
+typedef int (*TYPE_GET_SATELLITE)(LocationIElement *self, LocationSatellite **satellite);
+typedef int (*TYPE_GET_GEOCODE)(LocationIElement *self, const LocationAddress *address, GList **position_list, GList **accuracy_list);
+typedef int (*TYPE_GET_GEOCODE_FREEFORM)(LocationIElement *self, const gchar *address, GList **position_list, GList **accuracy_list);
+typedef int (*TYPE_GET_REVERSEGEOCODE)(LocationIElement *self, const LocationPosition *position, LocationAddress **address, LocationAccuracy **accuracy);
+typedef int (*TYPE_GET_GEOCODE_ASYNC)(LocationIElement *self, const LocationAddress *address, LocationPositionCB callback, gpointer userdata);
+typedef int (*TYPE_GET_GEOCODE_FREEFORM_ASYNC)(LocationIElement *self, const gchar *address,  LocationPositionCB callback, gpointer userdata);
+typedef int (*TYPE_GET_REVERSEGEOCODE_ASYNC)(LocationIElement *self, const LocationPosition *position, LocationAddressCB callback, gpointer userdata);
+typedef int (*TYPE_SEARCH_POI) (LocationIElement *self, const LocationPOIFilter * filter, const LocationPosition *position, const LocationPreference *svc_pref, const LocationPOIPreference * pref, LocationPOICB cb, const gpointer user_data, guint *req_id);
+typedef int (*TYPE_SEARCH_POI_BY_AREA) (LocationIElement *self, const LocationPOIFilter *filter, const LocationBoundary * boundary, const LocationPreference *svc_pref, const LocationPOIPreference * pref, LocationPOICB cb, const gpointer user_data, guint *req_id);
+typedef int (*TYPE_SEARCH_POI_BY_ADDR) (LocationIElement *self, const LocationPOIFilter *filter, const LocationAddress * address, const LocationPreference *svc_pref, const LocationPOIPreference * pref, LocationPOICB cb, const gpointer user_data, guint *req_id);
+typedef int (*TYPE_SEARCH_POI_BY_FREEFORM) (LocationIElement *self, const LocationPOIFilter *filter, const gchar *freeform, const LocationPreference *svc_pref, const LocationPOIPreference * pref, LocationPOICB cb, const gpointer user_data, guint *req_id);
+typedef int (*TYPE_CANCEL_POI_REQUEST) (LocationIElement *self, guint req_id);
+typedef int (*TYPE_REQUEST_ROUTE) (LocationIElement *self, const LocationPosition *origin, const LocationPosition *destination, GList *waypoint, const LocationPreference *svc_pref, const LocationRoutePreference *pref, LocationRouteCB cb, const gpointer user_data, guint *req_id);
+typedef int (*TYPE_CANCEL_ROUTE_REQUEST) (LocationIElement *self, guint req_id);
+typedef gboolean (*TYPE_IS_SUPPORTED_MAP_PROVIDER_CAPABILITY) (LocationIElement *self, LocationMapServiceType type);
+typedef int (*TYPE_GET_MAP_PROVIDER_CAPABILITY_KEY)(LocationIElement *self, LocationMapServiceType type, GList **key);
+
+struct _LocationIElementInterface
+{
+       GTypeInterface parent_iface;
+
+       TYPE_START_FUNC start;
+       TYPE_STOP_FUNC stop;
+       TYPE_GET_POSITION get_position;
+       TYPE_GET_POSITION get_last_position;
+       TYPE_GET_VELOCITY get_velocity;
+       TYPE_GET_VELOCITY get_last_velocity;
+       TYPE_GET_SATELLITE get_satellite;
+       TYPE_GET_SATELLITE get_last_satellite;
+       TYPE_GET_GEOCODE get_geocode;
+       TYPE_GET_GEOCODE_FREEFORM get_geocode_freeform;
+       TYPE_GET_REVERSEGEOCODE get_reversegeocode;
+       TYPE_GET_GEOCODE_ASYNC get_geocode_async;
+       TYPE_GET_GEOCODE_FREEFORM_ASYNC get_geocode_freeform_async;
+       TYPE_GET_REVERSEGEOCODE_ASYNC get_reversegeocode_async;
+       TYPE_SEARCH_POI search_poi;
+       TYPE_SEARCH_POI_BY_AREA search_poi_by_area;
+       TYPE_SEARCH_POI_BY_ADDR search_poi_by_address;
+       TYPE_SEARCH_POI_BY_FREEFORM search_poi_by_freeform;
+       TYPE_CANCEL_POI_REQUEST cancel_poi_request;
+       TYPE_REQUEST_ROUTE request_route;
+       TYPE_CANCEL_ROUTE_REQUEST cancel_route_request;
+       TYPE_IS_SUPPORTED_MAP_PROVIDER_CAPABILITY is_supported_map_provider_capability;
+       TYPE_GET_MAP_PROVIDER_CAPABILITY_KEY get_map_provider_capability_key;
+
+};
+
+GType location_ielement_get_type (void);
+
+int location_ielement_start (LocationIElement *self);
+int location_ielement_stop(LocationIElement *self);
+int location_ielement_get_position (LocationIElement *self, LocationPosition **position, LocationAccuracy **accuracy);
+int location_ielement_get_last_position (LocationIElement *self, LocationPosition **position, LocationAccuracy **accuracy);
+int location_ielement_get_velocity (LocationIElement *self, LocationVelocity **velocity, LocationAccuracy **accuracy);
+int location_ielement_get_last_velocity (LocationIElement *self, LocationVelocity **velocity, LocationAccuracy **accuracy);
+int location_ielement_get_satellite (LocationIElement *self, LocationSatellite **satellite);
+int location_ielement_get_last_satellite (LocationIElement *self, LocationSatellite **satellite);
+int location_ielement_get_geocode (LocationIElement *self, const LocationAddress *address, GList **position_list, GList **accuracy_list);
+int location_ielement_get_geocode_freeform (LocationIElement *self, const gchar *address, GList **position_list, GList **accuracy_list);
+int location_ielement_get_reversegeocode (LocationIElement *self, const LocationPosition *position, LocationAddress **address, LocationAccuracy **accuracy);
+int location_ielement_get_geocode_async (LocationIElement *self, const LocationAddress *address, LocationPositionCB callback, gpointer userdata);
+int location_ielement_get_geocode_freeform_async (LocationIElement *self, const gchar *address, LocationPositionCB callback, gpointer userdata);
+int location_ielement_get_reversegeocode_async (LocationIElement *self, const LocationPosition *position, LocationAddressCB callback, gpointer userdata);
+int location_ielement_search_poi (LocationIElement *self, const LocationPOIFilter * filter, const LocationPosition *position, const LocationPreference *svc_pref, const LocationPOIPreference * pref, LocationPOICB cb, const gpointer user_data, guint * req_id);
+int location_ielement_search_poi_by_area (LocationIElement *self, const LocationPOIFilter * filter, const LocationBoundary * boundary, const LocationPreference *svc_pref, const LocationPOIPreference * pref, LocationPOICB cb, const gpointer user_data, guint * req_id);
+int location_ielement_search_poi_by_address (LocationIElement *self, const LocationPOIFilter * filter, const LocationAddress * address, const LocationPreference *svc_pref, const LocationPOIPreference * pref, LocationPOICB cb, const gpointer user_data, guint * req_id);
+int location_ielement_search_poi_by_freeform (LocationIElement *self, const LocationPOIFilter * filter, const gchar * freeform, const LocationPreference *svc_pref, const LocationPOIPreference * pref, LocationPOICB cb, const gpointer user_data, guint * req_id);
+int location_ielement_cancel_poi_request (LocationIElement *self, guint req_id);
+int location_ielement_request_route (LocationIElement *self, const LocationPosition *origin, const LocationPosition *destination, GList *waypoint, const LocationPreference *svc_pref, const LocationRoutePreference * pref, LocationRouteCB cb, const gpointer user_data, guint * req_id);
+int location_ielement_cancel_route_request (LocationIElement *self, guint req_id);
+gboolean location_ielement_is_supported_map_provider_capability (LocationIElement *self, LocationMapServiceType type);
+int location_ielement_get_map_provider_capability_key (LocationIElement *self, LocationMapServiceType type, GList **key);
+
+G_END_DECLS
+
+#endif
similarity index 95%
rename from location/location-ips.c
rename to location/manager/location-ips.c
index 0412c01..b596404 100644 (file)
 #include "config.h"
 #endif
 
-#include "location/location-setting.h"
-#include "location/location-log.h"
+#include "location-setting.h"
+#include "location-log.h"
 
-#include "location/location-module-internal.h"
+#include "module-internal.h"
 
-#include "location/location-ips.h"
-#include "location/location-marshal.h"
-#include "location/location-ielement.h"
+#include "location-ips.h"
+#include "location-marshal.h"
+#include "location-ielement.h"
 
 typedef struct _LocationIpsPrivate {
        LocationIpsMod *mod;
similarity index 97%
rename from location/location-ips.h
rename to location/manager/location-ips.h
index b2523b6..b8f1cc6 100644 (file)
@@ -27,9 +27,6 @@
 /**
  * @file location-ips.h
  * @brief This file contains the internal definitions and structures related to IPS.
- * @addtogroup LocationInternal
- * @{
- * @}
  */
 
 G_BEGIN_DECLS
similarity index 96%
rename from location/location-position.c
rename to location/manager/location-position.c
index dd3b387..bac60f9 100644 (file)
@@ -26,9 +26,9 @@
 #include <math.h>
 #include <stdlib.h>
 
-#include "location/location-position.h"
-#include "location/location-setting.h"
-#include "location/location-log.h"
+#include "location-position.h"
+#include "location-setting.h"
+#include "location-log.h"
 
 #define                DEG2RAD(x)      ((x) * M_PI / 180)
 
@@ -53,6 +53,9 @@ location_position_new (guint timestamp,
        gdouble altitude,
        LocationStatus status)
 {
+       if (latitude < -90 || latitude > 90) return NULL;
+       if (longitude < -180 || longitude > 180) return NULL;
+
        LocationPosition* position = g_slice_new0(LocationPosition);
        position->timestamp = timestamp;
        position->latitude = latitude;
similarity index 96%
rename from location/location-position.h
rename to location/manager/location-position.h
index 4ef257b..1a2b08c 100644 (file)
 #ifndef __LOCATION_POSITION_H_
 #define __LOCATION_POSITION_H_
 
-#include <location/location-types.h>
+#include <location-types.h>
 
 #define MAX_KEY_LENGTH                 16
 #define HALF_KEY_LENGTH        8
 
+G_BEGIN_DECLS
+
+GType location_position_get_type (void);
+#define LOCATION_TYPE_POSITION (location_position_get_type ())
+
 /**
  * @file location-position.h
  * @brief This file contains the internal definitions and structures related to position information.
- * @addtogroup LocationTypes
+ */
+/**
+ * @addtogroup LocationAPI
  * @{
+ * @defgroup LocationAPIPosition Location Position
+ * @breif This provides APIs related to Location Position
+ * @addtogroup LocationAPIPosition
+ * @{
+ *
  */
 
-G_BEGIN_DECLS
-
 /**
  * @brief This represents the various fix states.
  */
@@ -73,9 +83,6 @@ struct _LocationLastPosition
        gdouble vertical_accuracy;      ///< Vertical accuracy data.
 };
 
-GType location_position_get_type (void);
-#define LOCATION_TYPE_POSITION (location_position_get_type ())
-
 /**
  * @brief   Create a new #LocationPosition with given information.
  * @remarks None.
@@ -162,7 +169,7 @@ int location_get_distance(const LocationPosition *pos1, const LocationPosition *
 void location_last_position_a2i(char *position, int *lat, int *lon);
 
 /**
- * @}
+ * @} @}
  */
 
 G_END_DECLS
similarity index 97%
rename from location/location-satellite.c
rename to location/manager/location-satellite.c
index 6c19ed4..f572c44 100644 (file)
@@ -23,8 +23,8 @@
 #include "config.h"
 #endif
 
-#include "location/location-satellite.h"
-#include "location/location-log.h"
+#include "location-satellite.h"
+#include "location-log.h"
 
 GType
 location_satellite_get_type (void)
@@ -75,6 +75,7 @@ location_satellite_copy (const LocationSatellite *satellite)
 {
        g_return_val_if_fail(satellite, NULL);
        LocationSatellite* satellite_dup = location_satellite_new(satellite->num_of_sat_inview);
+       satellite_dup->timestamp = satellite->timestamp;
        satellite_dup->num_of_sat_used = satellite->num_of_sat_used;
        int i = 0;
        for (i = 0 ; i < satellite_dup->num_of_sat_inview ; i++)
similarity index 95%
rename from location/location-satellite.h
rename to location/manager/location-satellite.h
index f91f98f..3bdb534 100644 (file)
 #ifndef __LOCATION_SATELLITE_H_
 #define __LOCATION_SATELLITE_H_
 
-#include <location/location-types.h>
+#include <location-types.h>
+
+G_BEGIN_DECLS
+
+GType location_satellite_get_type (void);
+#define LOCATION_TYPE_SATELLITE (location_satellite_get_type ())
 
 /**
  * @file location-satellite.h
  * @brief This file contains the internal definitions and structures related to satellite information.
- * @addtogroup LocationTypes
+ */
+/**
+ * @addtogroup LocationAPI
+ * @{
+ * @defgroup LocationAPISatellite Location Satellite
+ * @breif This provides APIs related to Location Satellite
+ * @addtogroup LocationAPISatellite
  * @{
  */
 
-G_BEGIN_DECLS
-
 /**
  * @brief This represents one satellite information in view.
  */
@@ -55,9 +64,6 @@ struct _LocationSatellite
        LocationSatelliteDetail* sat_inview;       ///< The information of satellites in view .
 };
 
-GType location_satellite_get_type (void);
-#define LOCATION_TYPE_SATELLITE (location_satellite_get_type ())
-
 /**
  * @brief   Create a new #LocationSatellite with given number of #LocationSatelliteDetail.
  * @remarks None.
@@ -129,7 +135,7 @@ gboolean location_satellite_get_satellite_details (const LocationSatellite *sate
 gboolean location_satellite_set_satellite_details( LocationSatellite *satellite, guint index, guint prn,       gboolean used, guint elevation, guint azimuth, gint snr);
 
 /**
- * @}
+ * @} @}
  */
 
 G_END_DECLS
similarity index 97%
rename from location/location-setting.c
rename to location/manager/location-setting.c
index 9f7e73a..21358e2 100644 (file)
@@ -24,8 +24,8 @@
 #endif
 
 #include <glib.h>
-#include "location/location-log.h"
-#include "location/location-setting.h"
+#include "location-log.h"
+#include "location-setting.h"
 
 
 gint location_setting_get_key_val(keynode_t *key)
similarity index 58%
rename from location/location-setting.h
rename to location/manager/location-setting.h
index 705f778..852e288 100644 (file)
 /**
  * @file location-setting.h
  * @brief This file contains the definitions and functions for setting.
- * @addtogroup LocationInternal
- * @{
- * @}
  */
 
-#define VCONF_LOCATION_PATH            "db/location"
-
-#define LOCATION_LAST_POSITION_PATH            VCONF_LOCATION_PATH"/lastposition"
-#define GPS_LAST_POSITION_PATH                 LOCATION_LAST_POSITION_PATH"/gps"
-#define WPS_LAST_POSITION_PATH                 LOCATION_LAST_POSITION_PATH"/wps"
-#define SPS_LAST_POSITION_PATH                 LOCATION_LAST_POSITION_PATH"/sps"
-
-#define GPS_LAST_TIMESTAMP     GPS_LAST_POSITION_PATH"/Timestamp"
-#define GPS_LAST_LATITUDE      GPS_LAST_POSITION_PATH"/Latitude"
-#define GPS_LAST_LONGITUDE     GPS_LAST_POSITION_PATH"/Longitude"
-#define GPS_LAST_ALTITUDE      GPS_LAST_POSITION_PATH"/Altitude"
-#define GPS_LAST_HORACCURACY   GPS_LAST_POSITION_PATH"/HorAccuracy"
-#define GPS_LAST_VERACCURACY   GPS_LAST_POSITION_PATH"/VerAccuracy"
-
-#define WPS_LAST_TIMESTAMP     WPS_LAST_POSITION_PATH"/Timestamp"
-#define WPS_LAST_LATITUDE      WPS_LAST_POSITION_PATH"/Latitude"
-#define WPS_LAST_LONGITUDE     WPS_LAST_POSITION_PATH"/Longitude"
-#define WPS_LAST_ALTITUDE      WPS_LAST_POSITION_PATH"/Altitude"
-#define WPS_LAST_HORACCURACY   WPS_LAST_POSITION_PATH"/HorAccuracy"
-#define WPS_LAST_VERACCURACY   WPS_LAST_POSITION_PATH"/VerAccuracy"
-
-#define SPS_LAST_TIMESTAMP     SPS_LAST_POSITION_PATH"/Timestamp"
-#define SPS_LAST_LATITUDE      SPS_LAST_POSITION_PATH"/Latitude"
-#define SPS_LAST_LONGITUDE     SPS_LAST_POSITION_PATH"/Longitude"
-#define SPS_LAST_ALTITUDE      SPS_LAST_POSITION_PATH"/Altitude"
-#define SPS_LAST_HORACCURACY   SPS_LAST_POSITION_PATH"/HorAccuracy"
-#define SPS_LAST_VERACCURACY   SPS_LAST_POSITION_PATH"/VerAccuracy"
+#define VCONF_LOCATION_PATH            "db/location"
 
 #define GPS_ENABLED                    VCONFKEY_LOCATION_ENABLED
 #define LOCATION_SETTING_PATH          VCONF_LOCATION_PATH"/setting"
similarity index 84%
rename from location/location-signaling-util.c
rename to location/manager/location-signaling-util.c
index 263dc2f..4306c46 100644 (file)
@@ -23,8 +23,8 @@
 #include "config.h"
 #endif
 
-#include "location/location-signaling-util.h"
-#include "location/location-log.h"
+#include "location-signaling-util.h"
+#include "location-log.h"
 
 #define POS_EXPIRATION_TIME            9       /* sec */
 
@@ -165,3 +165,35 @@ velocity_signaling (LocationObject *obj,
        }
 
 }
+
+void
+satellite_signaling(LocationObject *obj,
+       guint32 signals[LAST_SIGNAL],
+       gboolean *prev_enabled,
+       guint interval,
+       guint *sat_timestamp,
+       LocationSatellite **prev_sat,
+       gboolean enabled,
+       const LocationSatellite *sat)
+{
+       g_return_if_fail(obj);
+       g_return_if_fail(signals);
+       g_return_if_fail(sat);
+
+       if (*prev_sat) {
+               location_satellite_free(*prev_sat);
+       }
+
+       *prev_sat = location_satellite_copy (sat);
+       if (!(*sat_timestamp) || sat->timestamp - *sat_timestamp > interval) {
+
+               LOCATION_LOGD ("Signal emit: SATELLITE SERVICE_UPDATED");
+               LocationSatellite *temp_sat = location_satellite_copy (sat);
+
+               g_signal_emit (obj, signals[SERVICE_UPDATED], 0, SATELLITE_UPDATED, temp_sat, NULL);
+
+               *sat_timestamp = sat->timestamp;
+
+               location_satellite_free(temp_sat);
+       }
+}
similarity index 87%
rename from location/location-signaling-util.h
rename to location/manager/location-signaling-util.h
index c2474bf..0ef62d5 100644 (file)
 #ifndef __LOCATION_SIGNALING_UTIL_H__
 #define __LOCATION_SIGNALING_UTIL_H__
 
-#include <location/location.h>
-#include <location/location-ielement.h>
+#include <location.h>
+#include <location-ielement.h>
 
 /**
  * @file location-signaling.h
  * @brief This file contains the signaling utils for LocationObject.
- * @addtogroup LocationInternal
- * @{
- * @}
  */
 
 G_BEGIN_DECLS
@@ -47,6 +44,9 @@ void position_signaling (LocationObject *obj, guint32 signals[LAST_SIGNAL], gboo
 
 void velocity_signaling (LocationObject* obj, guint32 signals[LAST_SIGNAL], gboolean *prev_enabled, guint interval, LocationVelocity **prev_vel, gboolean enabled, const LocationVelocity *vel, const LocationAccuracy *acc);
 
+void
+satellite_signaling(LocationObject *obj, guint32 signals[LAST_SIGNAL], gboolean *prev_enabled, guint interval, guint *sat_timestamp, LocationSatellite **pre_sat, gboolean enabled, const LocationSatellite *sat);
+
 G_END_DECLS
 
 #endif
similarity index 92%
rename from location/location-sps.c
rename to location/manager/location-sps.c
index 4f54fed..734d1d1 100644 (file)
 #include "config.h"
 #endif
 
-#include "location/location-setting.h"
-#include "location/location-log.h"
+#include "location-setting.h"
+#include "location-log.h"
 
-#include "location/location-module-internal.h"
+#include "module-internal.h"
 
-#include "location/location-sps.h"
-#include "location/location-marshal.h"
-#include "location/location-ielement.h"
-#include "location/location-signaling-util.h"
-#include "location/location-common-util.h"
+#include "location-sps.h"
+#include "location-marshal.h"
+#include "location-ielement.h"
+#include "location-signaling-util.h"
+#include "location-common-util.h"
 
 typedef struct _LocationSpsPrivate {
        LocationSpsMod* mod;
@@ -376,6 +376,15 @@ location_sps_get_position (LocationSps *self,
 }
 
 static int
+location_sps_get_last_position (LocationSps *self,
+       LocationPosition **position,
+       LocationAccuracy **accuracy)
+{
+       LOCATION_LOGD("location_sps_get_last_position");
+       return LOCATION_ERROR_NOT_SUPPORTED;
+}
+
+static int
 location_sps_get_velocity (LocationSps *self,
        LocationVelocity **velocity,
        LocationAccuracy **accuracy)
@@ -393,13 +402,42 @@ location_sps_get_velocity (LocationSps *self,
        return ops.get_velocity(priv->mod->handler, velocity, accuracy);
 }
 
+static int
+location_sps_get_last_velocity (LocationSps *self,
+       LocationVelocity **velocity,
+       LocationAccuracy **accuracy)
+{
+       LOCATION_LOGD("location_sps_get_last_velocity");
+       return LOCATION_ERROR_NOT_SUPPORTED;
+}
+
+static int
+location_sps_get_satellite (LocationSps *self,
+       LocationSatellite **satellite)
+{
+       LOCATION_LOGD("location_sps_get_satellite");
+       return LOCATION_ERROR_NOT_SUPPORTED;
+}
+
+static int
+location_sps_get_last_satellite (LocationSps *self,
+       LocationSatellite **satellite)
+{
+       LOCATION_LOGD("location_sps_get_last_satellite");
+       return LOCATION_ERROR_NOT_SUPPORTED;
+}
+
 static void
 location_ielement_interface_init (LocationIElementInterface *iface)
 {
        iface->start = (TYPE_START_FUNC)location_sps_start;
        iface->stop = (TYPE_STOP_FUNC)location_sps_stop;
        iface->get_position = (TYPE_GET_POSITION)location_sps_get_position;
+       iface->get_last_position = (TYPE_GET_POSITION)location_sps_get_last_position;
        iface->get_velocity = (TYPE_GET_VELOCITY)location_sps_get_velocity;
+       iface->get_last_velocity = (TYPE_GET_VELOCITY)location_sps_get_last_velocity;
+       iface->get_satellite = (TYPE_GET_SATELLITE)location_sps_get_satellite;
+       iface->get_last_satellite = (TYPE_GET_SATELLITE)location_sps_get_last_satellite;
 }
 
 static void
similarity index 98%
rename from location/location-sps.h
rename to location/manager/location-sps.h
index 5d82a9a..f39815d 100644 (file)
@@ -27,9 +27,6 @@
 /**
  * @file location-sps.h
  * @brief This file contains the internal definitions and structures related to SPS.
- * @addtogroup LocationInternal
- * @{
- * @}
  */
 
 G_BEGIN_DECLS
similarity index 97%
rename from location/location-velocity.c
rename to location/manager/location-velocity.c
index fd7b523..61c839e 100644 (file)
@@ -23,8 +23,8 @@
 #include "config.h"
 #endif
 
-#include "location/location-velocity.h"
-#include "location/location-log.h"
+#include "location-velocity.h"
+#include "location-log.h"
 
 GType
 location_velocity_get_type (void)
similarity index 93%
rename from location/location-velocity.h
rename to location/manager/location-velocity.h
index 5dc1c81..5112298 100644 (file)
 #ifndef __LOCATION_VELOCITY_H_
 #define __LOCATION_VELOCITY_H_
 
-#include <location/location-types.h>
+#include <location-types.h>
+
+G_BEGIN_DECLS
+
+GType location_velocity_get_type (void);
+#define LOCATION_TYPE_VELOCITY                 (location_velocity_get_type ())
 
 /**
  * @file location-velocity.h
  * @brief This file contains the internal definitions and structures related to velocity information.
- * @addtogroup LocationTypes
+ */
+/**
+ * @addtogroup LocationAPI
+ * @{
+ * @defgroup LocationAPIVelocity Location Velocity
+ * @breif This provides APIs related to Location Velocity
+ * @addtogroup LocationAPIVelocity
  * @{
  */
 
-G_BEGIN_DECLS
-
 /**
  * @brief This represents velocity information such as as speed, direction, climb.
  */
@@ -45,9 +54,6 @@ struct _LocationVelocity
        gdouble climb;                  ///< The vertical speed. (km/h)
 };
 
-GType location_velocity_get_type (void);
-#define LOCATION_TYPE_VELOCITY                 (location_velocity_get_type ())
-
 /**
  * @brief   Create a new #LocationVelocity with given information.
  * @remarks None.
@@ -98,7 +104,7 @@ gboolean location_velocity_equal (const LocationVelocity *velocity1, const Locat
 LocationVelocity *location_velocity_copy (const LocationVelocity *velocity);
 
 /**
- * @}
+ * @} @}
  */
 
 G_END_DECLS
similarity index 85%
rename from location/location-wps.c
rename to location/manager/location-wps.c
index 8d11352..06da7ca 100644 (file)
 #include "config.h"
 #endif
 
-#include "location/location-setting.h"
-#include "location/location-log.h"
+#include "location-setting.h"
+#include "location-log.h"
 
-#include "location/location-module-internal.h"
+#include "module-internal.h"
 
-#include "location/location-wps.h"
-#include "location/location-marshal.h"
-#include "location/location-ielement.h"
-#include "location/location-signaling-util.h"
-#include "location/location-common-util.h"
+#include "location-wps.h"
+#include "location-marshal.h"
+#include "location-ielement.h"
+#include "location-signaling-util.h"
+#include "location-common-util.h"
 /*
  * forward definitions
  */
@@ -131,7 +131,7 @@ location_setting_wps_cb(keynode_t *key,
        else {
                if (1 == location_setting_get_int(NETWORK_ENABLED) && priv->mod->ops.start && !priv->is_started) {
                        LOCATION_LOGD("location resumed by setting");
-                       ret = priv->mod->ops.start (priv->mod->handler, wps_status_cb, wps_position_cb, wps_velocity_cb, self);
+                       ret = priv->mod->ops.start (priv->mod->handler, wps_status_cb, wps_position_cb, wps_velocity_cb, NULL, self);
                        if (ret == LOCATION_ERROR_NONE) priv->is_started = TRUE;
                }
        }
@@ -156,7 +156,7 @@ location_wps_start (LocationWps *self)
                ret = LOCATION_ERROR_NOT_ALLOWED;
        }
        else {
-               ret = priv->mod->ops.start (priv->mod->handler, wps_status_cb, wps_position_cb, wps_velocity_cb, self);
+               ret = priv->mod->ops.start (priv->mod->handler, wps_status_cb, wps_position_cb, wps_velocity_cb, NULL, self);
                if (ret == LOCATION_ERROR_NONE) {
                        priv->is_started = TRUE;
                }
@@ -319,6 +319,26 @@ location_wps_get_position (LocationWps *self,
 }
 
 static int
+location_wps_get_last_position (LocationWps *self,
+       LocationPosition **position,
+       LocationAccuracy **accuracy)
+{
+       LOCATION_LOGD("location_wps_get_last_position");
+
+       /* Do not need to check GPS_ENABLED and NETWORK_ENABLED */
+
+       LocationWpsPrivate *priv = GET_PRIVATE (self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+
+       LocModWpsOps ops = priv->mod->ops;
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (ops.get_last_position, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return ops.get_last_position(priv->mod->handler, position, accuracy);
+
+}
+
+static int
 location_wps_get_velocity (LocationWps *self,
        LocationVelocity **velocity,
        LocationAccuracy **accuracy)
@@ -336,13 +356,52 @@ location_wps_get_velocity (LocationWps *self,
        return ops.get_velocity(priv->mod->handler, velocity, accuracy);
 }
 
+static int
+location_wps_get_last_velocity (LocationWps *self,
+       LocationVelocity **velocity,
+       LocationAccuracy **accuracy)
+{
+       LOCATION_LOGD("location_wps_get_last_velocity");
+
+       /* Do not need to check GPS_ENABLED and NETWORK_ENABLED */
+
+       LocationWpsPrivate *priv = GET_PRIVATE (self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+
+       LocModWpsOps ops = priv->mod->ops;
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (ops.get_last_velocity, LOCATION_ERROR_NOT_AVAILABLE);
+       return ops.get_last_velocity(priv->mod->handler, velocity, accuracy);
+
+}
+
+static int
+location_wps_get_satellite (LocationWps *self,
+               LocationSatellite **satellite)
+{
+       LOCATION_LOGD("location_wps_get_satellite");
+       return LOCATION_ERROR_NOT_SUPPORTED;
+}
+
+static int
+location_wps_get_last_satellite (LocationWps *self,
+               LocationSatellite **satellite)
+{
+       LOCATION_LOGD("location_wps_get_last_satellite");
+       return LOCATION_ERROR_NOT_SUPPORTED;
+}
+
 static void
 location_ielement_interface_init (LocationIElementInterface *iface)
 {
        iface->start = (TYPE_START_FUNC)location_wps_start;
        iface->stop = (TYPE_STOP_FUNC)location_wps_stop;
        iface->get_position = (TYPE_GET_POSITION)location_wps_get_position;
+       iface->get_last_position = (TYPE_GET_POSITION)location_wps_get_last_position;
        iface->get_velocity = (TYPE_GET_VELOCITY)location_wps_get_velocity;
+       iface->get_last_velocity = (TYPE_GET_VELOCITY)location_wps_get_last_velocity;
+       iface->get_satellite = (TYPE_GET_SATELLITE)location_wps_get_satellite;
+       iface->get_last_satellite = (TYPE_GET_SATELLITE)location_wps_get_last_satellite;
 }
 
 static void
similarity index 98%
rename from location/location-wps.h
rename to location/manager/location-wps.h
index 77ec679..67c9e54 100644 (file)
@@ -27,9 +27,6 @@
 /**
  * @file location-wps.h
  * @brief This file contains the internal definitions and structures related to WPS.
- * @addtogroup LocationInternal
- * @{
- * @}
  */
 
 G_BEGIN_DECLS
diff --git a/location/manager/location.c b/location/manager/location.c
new file mode 100644 (file)
index 0000000..29c6612
--- /dev/null
@@ -0,0 +1,230 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+#include <pthread.h>
+#include <dbus/dbus-glib.h>
+
+#include "location.h"
+#include "location-log.h"
+#include "location-setting.h"
+#include "location-ielement.h"
+#include "location-hybrid.h"
+#include "location-gps.h"
+#include "location-wps.h"
+#include "location-ips.h"
+#include "location-cps.h"
+#include "location-sps.h"
+#include "location-position.h"
+#include "map-service.h"
+#include "module-internal.h"
+#include "location-common-util.h"
+
+extern LocationObject *g_map_service;
+
+EXPORT_API
+int location_init (void)
+{
+       LOCATION_LOGD("location_init");
+       g_type_init ();
+       if (!g_thread_supported()) g_thread_init (NULL);
+       dbus_g_thread_init ();
+       if( FALSE == module_init() )
+               return LOCATION_ERROR_NOT_AVAILABLE;
+
+       return LOCATION_ERROR_NONE;
+}
+
+EXPORT_API LocationObject*
+location_new (LocationMethod method)
+{
+       LocationObject *self = NULL;
+
+       if (!g_map_service)
+               g_map_service = g_object_new (MAP_TYPE_SERVICE, NULL);
+
+       switch (method) {
+       case LOCATION_METHOD_HYBRID:
+               self = g_object_new (LOCATION_TYPE_HYBRID, NULL);
+               break;
+       case LOCATION_METHOD_GPS:
+               self = g_object_new (LOCATION_TYPE_GPS, NULL);
+               break;
+       case LOCATION_METHOD_WPS:
+               self = g_object_new (LOCATION_TYPE_WPS, NULL);
+               break;
+       case LOCATION_METHOD_SPS:
+               self = g_object_new (LOCATION_TYPE_SPS, NULL);
+               break;
+       default:
+               break;
+       }
+       return self;
+}
+
+EXPORT_API int
+location_free (LocationObject *obj)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+
+       if (g_map_service) {
+               g_object_unref (g_map_service);
+               g_map_service = NULL;
+       }
+
+       g_object_unref (obj);
+       return LOCATION_ERROR_NONE;
+}
+
+EXPORT_API int
+location_start (LocationObject *obj)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       return location_ielement_start (LOCATION_IELEMENT(obj));
+}
+
+EXPORT_API int
+location_stop (LocationObject *obj)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       return location_ielement_stop (LOCATION_IELEMENT(obj));
+}
+
+EXPORT_API gboolean
+location_is_supported_method(LocationMethod method)
+{
+       gboolean is_supported = FALSE;
+
+       switch(method) {
+       case LOCATION_METHOD_HYBRID:
+               if(module_is_supported("gps") || module_is_supported("wps") || module_is_supported("sps"))
+                       is_supported = TRUE;
+               break;
+       case LOCATION_METHOD_GPS:
+               is_supported = module_is_supported("gps");
+               break;
+       case LOCATION_METHOD_WPS:
+               is_supported = module_is_supported("wps");
+               break;
+       case LOCATION_METHOD_SPS:
+               is_supported = module_is_supported("sps");
+               break;
+       case LOCATION_METHOD_CPS:       /* deprecated */
+       case LOCATION_METHOD_IPS:       /* deprecated */
+       default:
+               break;
+       }
+
+       return is_supported;
+}
+
+EXPORT_API gboolean
+location_is_enabled_gps(LocationObject *obj)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+
+       return (gboolean) location_setting_get_int(GPS_ENABLED);
+}
+
+EXPORT_API int
+location_get_position (LocationObject *obj,
+       LocationPosition **position,
+       LocationAccuracy **accuracy)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (position, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (accuracy, LOCATION_ERROR_PARAMETER);
+       return location_ielement_get_position (LOCATION_IELEMENT(obj), position, accuracy);
+}
+
+EXPORT_API int
+location_get_last_position (LocationObject *obj,
+       LocationPosition **position,
+       LocationAccuracy **accuracy)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (position, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (accuracy, LOCATION_ERROR_PARAMETER);
+       return location_ielement_get_last_position (LOCATION_IELEMENT(obj), position, accuracy);
+}
+
+EXPORT_API int
+location_get_last_known_position (LocationObject *obj, LocationMethod method,
+       LocationLastPosition *last_position)
+{
+       return LOCATION_ERROR_NOT_SUPPORTED;
+}
+
+EXPORT_API int
+location_get_satellite (LocationObject *obj, LocationSatellite **satellite)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (satellite, LOCATION_ERROR_PARAMETER);
+
+       return location_ielement_get_satellite (LOCATION_IELEMENT(obj), satellite);
+}
+
+EXPORT_API int
+location_get_last_satellite (LocationObject *obj, LocationSatellite **satellite)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (satellite, LOCATION_ERROR_PARAMETER);
+
+       return location_ielement_get_last_satellite (LOCATION_IELEMENT(obj), satellite);
+}
+
+EXPORT_API int
+location_get_velocity (LocationObject *obj,
+       LocationVelocity **velocity,
+       LocationAccuracy **accuracy)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (velocity, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (accuracy, LOCATION_ERROR_PARAMETER);
+
+       return location_ielement_get_velocity (LOCATION_IELEMENT(obj), velocity, accuracy);
+}
+
+EXPORT_API int
+location_get_last_velocity (LocationObject *obj,
+       LocationVelocity **velocity,
+       LocationAccuracy **accuracy)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (velocity, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (accuracy, LOCATION_ERROR_PARAMETER);
+
+       return location_ielement_get_last_velocity (LOCATION_IELEMENT(obj), velocity, accuracy);
+}
+
+
+EXPORT_API int
+location_send_command(const char *cmd)
+{
+       g_return_val_if_fail (cmd, LOCATION_ERROR_PARAMETER);
+
+       return LOCATION_ERROR_NONE;
+}
+
diff --git a/location/manager/location.h b/location/manager/location.h
new file mode 100644 (file)
index 0000000..17f1164
--- /dev/null
@@ -0,0 +1,738 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __LOCATION_H__
+#define __LOCATION_H__
+
+
+#include <glib.h>
+#include <location-types.h>
+#include <location-position.h>
+#include <location-velocity.h>
+#include <location-accuracy.h>
+#include <location-address.h>
+#include <location-boundary.h>
+#include <location-satellite.h>
+#include <location-map-service.h>
+
+G_BEGIN_DECLS
+
+/**
+ * @file location.h
+ * @brief This file contains the Location API and related structure and enumeration.
+ */
+/**
+ * @defgroup LocationFW LocationFW
+ * @brief This is a Location Framework for providing location based services.
+ * @addtogroup LocationFW
+ * @{
+ * @defgroup LocationAPI Location API
+ * @brief This sub module provides the Location API.
+ * @addtogroup LocationAPI
+ * @{
+ */
+
+/**
+ * @brief
+ * Initialize location sub module.
+ * @remarks None.
+ * This API should be called before any other Location APIs.
+ * @pre None.
+ * @post None.
+ * @return int
+ * @retval 0                              Success
+ *
+ * Please refer #LocationError for more information.
+ * @see None.
+ */
+int location_init (void);
+
+/**
+ * @brief
+ * Create a new #LocationObject by using given #LocationMethod.
+ * @remarks
+ * Returned object is necessary for other APIs.
+ * @pre
+ * #location_init should be called before.
+ * @post None.
+ * @param [in]
+ * method - Location method to be used.
+ * @return a new #LocationObject
+ * @retval NULL              if error occured
+ * @see location_free
+ */
+LocationObject *location_new (LocationMethod method);
+
+/**
+ * @brief
+ * Free memory of given #LocationObject.
+ * @remarks None.
+ * @pre
+ * #location_init should be called before.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new.
+ * @return int
+ * @retval 0                              Success.
+ *
+ * Please refer #LocationError for more information.
+ * @see location_new
+ * @par Example
+ * @code
+#include <location.h>
+int main (int argc, char *argv[])
+{
+       LocationObject *loc = NULL;
+       location_init ();
+       loc  = location_new (LOCATION_METHOD_GPS);
+       if(!loc)
+               return -1;
+
+       // ... Implement your code
+
+       location_free (loc);
+       // You must free LocationObject when you don't need to use anymore.
+       return 0;
+}
+ * @endcode
+ */
+int location_free (LocationObject *obj);
+
+/**
+ * @brief
+ * Start the location service by using given #LocationObject.
+ * @remarks
+ * If you want to recieve signals, you should use this API.
+ * @pre
+ * #location_init should be called before.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @return int
+ * @retval 0                              Success.
+ *
+ * Please refer #LocationError for more information.
+ * @see location_stop
+ * @par Example
+ * @code
+#include <location.h>
+static GMainLoop *loop = NULL;
+
+static void cb_service_enabled (GObject *self, guint status, gpointer userdata)
+{
+       LocationObject *loc = (LocationObject*)userdata;
+       LocationAccuracy *acc = NULL;
+       LocationPosition *pos = NULL;
+       LocationVelocity *vel = NULL;
+       LocationAddress *addr = NULL;
+       LocationMethod method;
+
+       g_object_get(loc, "method", &method, NULL);
+       g_debug("Get property>> method:%d", method);
+
+       if (LOCATION_ERROR_NONE == location_get_position (loc, &pos, &acc)) {
+               g_debug ("SYNC>> Current position> time: %d, lat: %f, long: %f, alt: %f, status: %d",
+                       pos->timestamp, pos->latitude, pos->longitude, pos->altitude, pos->status);
+               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
+                       acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+               location_position_free(pos);
+               location_accuracy_free(acc);
+       } else g_warning ("SYNC>> Current position> failed");
+
+       if (LOCATION_ERROR_NONE == location_get_velocity (loc, &vel, &acc)) {
+               g_debug ("SYNC>> Current velocity> time: %d, speed: %f, direction:%f, climb:%f",
+                               vel->timestamp, vel->speed, vel->direction, vel->climb);
+               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
+                               acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+               location_velocity_free(vel);
+               location_accuracy_free(acc);
+       } else g_warning ("SYNC>> Current velocity> failed");
+
+       if (LOCATION_ERROR_NONE == location_get_address(loc, &addr, &acc)) {
+               g_debug ("SYNC>> Current address> %s %s %s %s %s %s %s",
+                               addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
+               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+               location_address_free(addr);
+               location_accuracy_free(acc);
+       } else g_warning ("SYNC>> Current address> failed");
+}
+
+static void
+cb_service_updated (GObject *self,
+       guint type,
+       gpointer data,
+       gpointer accuracy,
+       gpointer userdata)
+{
+       LocationAccuracy *acc = (LocationAccuracy*) accuracy;
+       switch (type) {
+               case POSITION_UPDATED: {
+                       LocationPosition *pos = (LocationPosition*) data;
+                       g_debug ("ASYNC>> Current position> time: %d, lat: %f, long: %f, alt: %f, status: %d",
+                               pos->timestamp, pos->latitude, pos->longitude, pos->altitude, pos->status);
+                       g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
+                               acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+               }
+                       break;
+               case VELOCITY_UPDATED: {
+                       LocationVelocity *vel = (LocationVelocity*) data;
+                       g_debug ("ASYNC>> Current velocity> time: %d, speed: %f, direction:%f, climb:%f",
+                                       vel->timestamp, vel->speed, vel->direction, vel->climb);
+                       g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
+                                       acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+               }
+                       break;
+               default:
+                       g_warning ("ASYNC>> Undefined update type");
+                       break;
+       }
+}
+
+
+int main (int argc, char *argv[])
+{
+       LocationObject *loc = NULL;
+       int interval = 6;       //seconds
+       location_init ();
+
+       loc  = location_new (LOCATION_METHOD_GPS);
+       if(!loc)
+               return -1;
+
+       g_object_set(loc, "update-interval", interval, NULL);
+
+       g_signal_connect (loc, "service-enabled", G_CALLBACK(cb_service_enabled), loc);
+       g_signal_connect (loc, "service-updated", G_CALLBACK(cb_service_updated), loc);
+
+       location_start(loc);
+       loop = g_main_loop_new (NULL, TRUE);
+       g_main_loop_run (loop);  // GMainLoop is needed for receiving signals.
+
+       // ...
+       return 0;
+}
+ * @endcode
+ */
+int location_start (LocationObject *obj);
+
+/**
+ * @brief
+ * Stop the location service by using given #LocationObject.
+ * @remarks
+ * After call this API, you can not recieve signals.
+ * @pre
+ * #location_init should be called before.\n
+ * #location_start should be called before.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @return int
+ * @retval 0                              Success
+ *
+ * Please refer #LocationError for more information.
+ * @see location_start
+ * @par Example
+ * @code
+#include <location.h>
+static GMainLoop *loop = NULL;
+
+int main (int argc, char *argv[])
+{
+       LocationObject *loc = NULL;
+       location_init ();
+       loc  = location_new (LOCATION_METHOD_GPS);
+       if(!loc)
+               return -1;
+
+       location_start(loc);
+       loop = g_main_loop_new (NULL, TRUE);
+       g_main_loop_run (loop);
+
+       // ....
+
+       location_stop (loc);
+       // you can not receive signals anymore.
+       return 0;
+}
+ * @endcode
+ */
+int location_stop (LocationObject *obj);
+
+/**
+ * @brief
+ * Check wheither a method is available.
+ * @remarks
+ * @pre
+ * #location_init should be called before.\n
+ * @post None.
+ * @param [in] method - a #LocationMethod
+ * @return int
+ * @retval True                Supported
+ *        False        Not supported
+ * @par Example
+ #include <location.h>
+static GMainLoop *loop = NULL;
+
+int main (int argc, char *argv[])
+{
+       gboolean is_supported = FALSE;
+
+       // ....
+
+       is_supported = location_is_supported_method(LOCATION_METHOD_HYBRID);
+       if(is_supported == TRUE)
+               g_printf("Hybrid Method is supported.\n");
+       else
+               g_printf("Hybrid Method is not supported.\n");
+
+       return 0;
+}* @code
+ * @endcode
+ */
+gboolean location_is_supported_method(LocationMethod method);
+
+/**
+ * @brief
+ * Check wheither GPS is turned on or off.
+ * @remarks
+ * @pre
+ * #location_init should be called before.\n
+ * @post None.
+ * @param [in] method - a #LocationMethod
+ * @return int
+ * @retval True                Turned on
+ *        False        Turned off
+ * @par Example
+ #include <location.h>
+static GMainLoop *loop = NULL;
+
+int main (int argc, char *argv[])
+{
+       gboolean is_enabled = FALSE;
+
+       // ....
+
+       is_enabled = location_is_enabled_gps(loc);
+       if(is_enable == TRUE)
+               g_printf("GPS is turned on.\n");
+       else
+               g_printf("GPS is turned off.\n");
+
+       return 0;
+}* @code
+ * @endcode
+ */
+gboolean location_is_enabled_gps(LocationObject *obj);
+
+/**
+ * @brief
+ * Get current position information with estimate of the accuracy.
+ * @remarks Out parameters are should be freed.
+ * @pre
+ * #location_init should be called before.\n
+ * #location_start should be called before.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @param [out]
+ * position - a new #LocationPosition
+ * @param [out]
+ * accuracy - a new #LocationAccuracy
+ * @return int
+ * @retval 0                              Success
+ *
+ * Please refer #LocationError for more information.
+ * @see location_get_velocity
+ * @par Example
+ * @code
+#include <location.h>
+static GMainLoop *loop = NULL;
+
+static void cb_service_enabled (GObject *self, guint status, gpointer userdata)
+{
+       g_debug("cb_service_enabled: status(%d) userdata(0x%x)", status, (unsigned int)userdata);
+
+       LocationObject *loc = (LocationObject*)userdata;
+       LocationAccuracy *acc = NULL;
+       LocationPosition *pos = NULL;
+
+       // This function works properly after service is enabled.
+       if (LOCATION_ERROR_NONE == location_get_position (loc, &pos, &acc)) {
+               g_debug ("SYNC>> Current position> time: %d, lat: %f, long: %f, alt: %f, status: %d",
+                       pos->timestamp, pos->latitude, pos->longitude, pos->altitude, pos->status);
+               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
+                       acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+               location_position_free(pos);
+               location_accuracy_free(acc);
+       } else g_warning ("SYNC>> Current position> failed");
+}
+
+int main (int argc, char *argv[])
+{
+       LocationObject *loc = NULL;
+       gulong handler_id = 0;
+
+       location_init ();
+       loop = g_main_loop_new (NULL, TRUE);
+       loc  = location_new (LOCATION_METHOD_GPS);
+       if(!loc){
+               g_debug("location_new failed");
+               return -1;
+       }
+
+       handler_id = g_signal_connect (loc, "service-enabled", G_CALLBACK(cb_service_enabled), loc);
+       location_start (loc);
+       g_main_loop_run (loop);
+
+       g_signal_handler_disconnect(loc, handler_id);
+       location_stop (loc);
+       location_free (loc);
+
+       return 0;
+}
+ * @endcode
+ */
+int location_get_position (LocationObject *obj, LocationPosition **position,   LocationAccuracy **accuracy);
+
+/**
+ * @brief
+ * Get last position information with estimate of the accuracy.
+ * @remarks This API is not implemented now. \n
+ *   Out parameters are should be freed.
+ * @pre
+ * #location_init should be called before.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @param [out]
+ * position - a new #LocationPosition
+ * @param [out]
+ * accuracy - a new #LocationAccuracy
+ * @return int
+ * @retval 0                              Success
+ *
+ * Please refer #LocationError for more information.
+ * @see location_get_position
+ * @par Example
+ * @code
+#include <location.h>
+
+int main (int argc, char *argv[])
+{
+       LocationObject *loc = NULL;
+       int ret = 0;
+       LocationPosition *last_pos = NULL;
+       LocationAccuracy *last_acc = NULL;
+
+       location_init ();
+       loc  = location_new (LOCATION_METHOD_GPS);
+       if(!loc){
+               g_debug("location_new failed");
+               return -1;
+       }
+
+       if (LOCATION_ERROR_NONE == location_get_last_position (loc, &last_pos, &last_acc)) {
+               g_debug ("SYNC>> Last position> time: %d, lat: %f, long: %f, alt: %f, status: %d",
+                       last_pos->timestamp, last_pos->latitude, last_pos->longitude, last_pos->altitude, last_pos->status);
+               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
+                       last_acc->level, last_acc->horizontal_accuracy, last_acc->vertical_accuracy);
+               location_position_free(last_pos);
+               location_accuracy_free(last_acc);
+       } else g_warning ("SYNC>> Last position> failed");
+
+       location_free (loc);
+
+       return 0;
+}
+ * @endcode
+ */
+int location_get_last_position (LocationObject *obj, LocationPosition **position, LocationAccuracy **accuracy);
+
+/**
+ * @brief
+ * Get last satellite information.
+ * @remarks This API is not implemented now. \n
+ *   Out parameters are should be freed.
+ * @pre
+ * #location_init should be called before.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @param [out] satellite - a new #LocationSatellite
+ * @return int
+ * @retval 0                              Success
+ * Please refer #LocationError for more information.
+ * @see location_get_last_satellite
+ * @par Example
+ * @code
+#include <location.h>
+
+int main (int argc, char *argv[])
+{
+       LocationObject *loc = NULL;
+       int ret = 0, idx = 0;
+       LocationSatellite *sat = NULL;
+       guint prn;
+       gboolean used;
+       guint elevation;
+       guint azimuth;
+       gint snr;
+
+       location_init ();
+       loc  = location_new (LOCATION_METHOD_GPS);
+       if(!loc){
+               g_debug("location_new failed");
+               return -1;
+       }
+
+       if (LOCATION_ERROR_NONE == location_get_satellite (loc, &sat)) {
+               g_debug ("SYNC>> Current Sattelite> satellite in view = %d, satellite in used = %d", sat->num_of_sat_inview, sat->num_of_sat_used);
+               g_debug ("\tinview satellite information = ");
+               for (idx=0; idx<sat->num_of_sat_inview; idx++) {
+                       location_satellite_get_satellite_details(sat, idx, &prn, &used, &elevation, &azimuth, &snr);
+                       g_debug ("\t\t[%02d] used: %d, prn: %d, elevation: %d, azimuth: %d, snr: %d", idx, used, prn, elevation, azimuth, snr);
+               }
+               location_satellite_free (sat);
+       } else g_warning ("SYNC>> Current satellite> failed");
+
+       location_free (loc);
+
+       return 0;
+}
+ * @endcode
+ */
+int location_get_satellite (LocationObject *obj, LocationSatellite **satellite);
+
+/**
+ * @brief
+ * Get last satellite information.
+ * @remarks This API is not implemented now. \n
+ *   Out parameters are should be freed.
+ * @pre
+ * #location_init should be called before.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @param [out]
+ * satellite - a new #LocationSatellite
+ * @return int
+ * @retval 0                              Success
+ *
+ * Please refer #LocationError for more information.
+ * @par Example
+ * @code
+#include <location.h>
+
+int main (int argc, char *argv[])
+{
+       LocationObject *loc = NULL;
+       int ret = 0, idx = 0;
+       LocationSatellite *last_sat = NULL;
+       guint prn;
+       gboolean used;
+       guint elevation;
+       guint azimuth;
+       gint snr;
+
+       location_init ();
+       loc  = location_new (LOCATION_METHOD_GPS);
+       if(!loc){
+               g_debug("location_new failed");
+               return -1;
+       }
+
+       if (LOCATION_ERROR_NONE == location_get_last_satellite (loc, &last_sat)) {
+               g_debug ("SYNC>> Last Sattelite> satellite in view = %d, satellite in used = %d", last_sat->num_of_sat_inview, last_sat->num_of_sat_used);
+               g_debug ("\tinview satellite information = ");
+               for (idx=0; idx<last_sat->num_of_sat_inview; idx++) {
+                       location_satellite_get_satellite_details(last_sat, idx, &prn, &used, &elevation, &azimuth, &snr);
+                       g_debug ("\t\t[%02d] used: %d, prn: %d, elevation: %d, azimuth: %d, snr: %d", idx, used, prn, elevation, azimuth, snr);
+               }
+               location_satellite_free (last_sat);
+       } else g_warning ("SYNC>> Last satellite> failed");
+
+       location_free (loc);
+
+       return 0;
+}
+ * @endcode
+ */
+int location_get_last_satellite (LocationObject *obj, LocationSatellite **satellite);
+
+/**
+ * @brief
+ * Get last known position information with estimate of the accuracy.
+ * @remarks This API would be DEPRECATED. \n
+ * @see location_get_last_position
+ */
+int location_get_last_known_position (LocationObject *obj, LocationMethod method, LocationLastPosition *last_position) LOCATION_DEPRECATED_API;
+
+/**
+ * @brief
+ * Get current velocity information with estimate of the accuracy.
+ * @remarks Out parameters are should be freed.
+ * @pre
+ * #location_init should be called before.\n
+ * #location_start should be called before.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @param [out]
+ * velocity - a new #LocationVelocity
+ * @param [out]
+ * accuracy - a new #LocationAccuracy
+ * @return int
+ * @retval 0                              Success
+ *
+ * Please refer #LocationError for more information.
+ * @see location_get_position
+ * @par Example
+ * @code
+#include <location.h>
+static GMainLoop *loop = NULL;
+
+static void cb_service_enabled (GObject *self, guint status, gpointer userdata)
+{
+       g_debug("cb_service_enabled: status(%d) userdata(0x%x)", status, (unsigned int)userdata);
+
+       LocationObject *loc = (LocationObject*)userdata;
+       LocationAccuracy *acc = NULL;
+       LocationVelocity *vel = NULL;
+
+       if (LOCATION_ERROR_NONE == location_get_velocity (loc, &vel, &acc)) {
+               g_debug ("SYNC>> Current velocity> time: %d, speed: %f, direction:%f, climb:%f",
+                       vel->timestamp, vel->speed, vel->direction, vel->climb);
+               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
+                       acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+               location_velocity_free(vel);
+               location_accuracy_free(acc);
+       } else g_warning ("SYNC>> Current velocity> failed");
+}
+
+int main (int argc, char *argv[])
+{
+       LocationObject *loc = NULL;
+       gulong hander_id = 0;
+       location_init ();
+
+       loop = g_main_loop_new (NULL, TRUE);
+
+       loc  = location_new (LOCATION_METHOD_GPS);
+       if(!loc){
+               g_debug("location_new failed");
+               return -1;
+       }
+
+       handler_id = g_signal_connect (loc, "service-enabled", G_CALLBACK(cb_service_enabled), loc);
+       location_start (loc);
+       g_main_loop_run (loop);
+
+       g_signal_handler_disconnect(loc, handler_id);
+       location_stop (loc);
+       location_free (loc);
+
+       return 0;
+}
+
+ * @endcode
+ */
+int location_get_velocity (LocationObject *obj, LocationVelocity **velocity, LocationAccuracy **accuracy);
+
+/**
+ * @brief
+ * Get last velocity information with estimate of the accuracy.
+ * @remarks Out parameters are should be freed.
+ * @pre
+ * #location_init should be called before.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @param [out]
+ * velocity - a new #LocationVelocity
+ * @param [out]
+ * accuracy - a new #LocationAccuracy
+ * @return int
+ * @retval 0                              Success
+ *
+ * Please refer #LocationError for more information.
+ * @see location_get_position
+ * @par Example
+ * @code
+#include <location.h>
+
+int main (int argc, char *argv[])
+{
+       int ret = 0;
+       LocationObject *loc = NULL;
+       LocationVelocity *vel = NULL;
+       LocationAccuracy *acc = NULL;
+       gulong hander_id = 0;
+
+       location_init ();
+
+       loc  = location_new (LOCATION_METHOD_GPS);
+       if(!loc){
+               g_debug("location_new failed");
+               return -1;
+       }
+
+       ret = location_get_last_velocity (loc, &vel, &acc);
+       if (ret == LOCATION_ERROR_NONE) {
+               g_debug ("SYNC>> Last velocity> time: %d, speed: %f, direction:%f, climb:%f",
+                       vel->timestamp, vel->speed, vel->direction, vel->climb);
+               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
+                       acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+               location_velocity_free(vel);
+               location_accuracy_free(acc);
+       }
+
+       location_free (loc);
+       return 0;
+}
+ * @endcode
+ */
+int location_get_last_velocity (LocationObject *obj, LocationVelocity **velocity, LocationAccuracy **accuracy);
+
+/**
+ * @brief
+ * Send command to the server.
+ * @remarks This functions is not implemneted yet.
+ * @pre
+ * #location_init should be called before.\n
+ * Calling application must have glib or ecore main loop.\n
+ * Calling application must have an active data connection.
+ * @post None.
+ * @param [in]  cmd - a #char
+ * @return int
+ * @retval 0                              Success
+ *
+ * Please refer #LocationError for more information.
+ */
+int location_send_command(const char *cmd);
+
+/**
+ * @} @}
+ */
+
+G_END_DECLS
+
+#endif /* __LOCATION_H__ */
diff --git a/location/map-service/Makefile.am b/location/map-service/Makefile.am
new file mode 100644 (file)
index 0000000..8105fcb
--- /dev/null
@@ -0,0 +1,27 @@
+noinst_LTLIBRARIES = liblocation-map-service.la\r
+\r
+COMMON_HEADER_DIR = include\r
+MANAGER_DIR = manager\r
+MAP_SERVICE_DIR = map-service\r
+MODULE_DIR = module\r
+\r
+liblocation_map_service_la_SOURCES = \\r
+                                                        location-pref.c   \\r
+                                                        location-address.c  \\r
+                                                        location-geocode.c \\r
+                                                        location-poi.c   \\r
+                                                        location-landmark.c   \\r
+                                                        location-route.c   \\r
+                                                        map-service.c \\r
+                                                        map-internal.c\r
+\r
+liblocation_map_service_la_CFLAGS = \\r
+                                                       -fPIC\\r
+                                                       -I${srcdir} \\r
+                                                       -I${srcdir}/.. \\r
+                                                       -I${srcdir}/../include \\r
+                                                       -I${srcdir}/../${MANAGER_DIR} \\r
+                                                       -I${srcdir}/../${MODULE_DIR} \\r
+                                                       -I${srcdir}/../${MAP_SERVICE_DIR} \\r
+                                                       $(LOCATION_CFLAGS)\r
+\r
similarity index 97%
rename from location/location-address.c
rename to location/map-service/location-address.c
index 61bf429..856757c 100644 (file)
@@ -23,8 +23,8 @@
 #include "config.h"
 #endif
 
-#include "location/location-address.h"
-#include "location/location-log.h"
+#include "location-address.h"
+#include "location-log.h"
 
 GType
 location_address_get_type (void)
similarity index 91%
rename from location/location-address.h
rename to location/map-service/location-address.h
index eb450a5..77e6208 100644 (file)
 #ifndef __LOCATION_ADDRESS_H_
 #define __LOCATION_ADDRESS_H_
 
-#include <location/location-types.h>
+#include <location-types.h>
 
 G_BEGIN_DECLS
 
+GType location_address_get_type(void);
+#define LOCATION_TYPE_ADDRESS (location_address_get_type())
+
 /**
  * @file location-address.h
  * @brief This file contains the definitions, structures, and functions related to address information.
- * @addtogroup LocationTypes
+ * @addtogroup LocationMapService
+ * @{
+ * @defgroup LocationMapServiceGeocode Location Geocode
+ * @brief This sub module provides structure, enumeration, and asynchronous function definitions.
+ * @addtogroup LocationMapServiceGeocode
  * @{
  */
 
@@ -47,9 +54,6 @@ struct _LocationAddress
        gchar *postal_code;      ///< Postal delivery code.
 };
 
-GType location_address_get_type(void);
-#define LOCATION_TYPE_ADDRESS (location_address_get_type())
-
 /**
  * @brief   Create a new #LocationAddress with  given information.
  * @remarks None.
@@ -89,7 +93,7 @@ void location_address_free (LocationAddress *address);
 LocationAddress *location_address_copy (const LocationAddress *address);
 
 /**
- * @}
+ * @} @}
  */
 
 G_END_DECLS
diff --git a/location/map-service/location-geocode.c b/location/map-service/location-geocode.c
new file mode 100644 (file)
index 0000000..aee43c8
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "location-log.h"
+
similarity index 51%
rename from location/location-geocode.h
rename to location/map-service/location-geocode.h
index efb4ac1..1e8b4de 100644 (file)
 #ifndef __LOCATION_GEOCODE_H__
 #define __LOCATION_GEOCODE_H__
 
-#include <glib-object.h>
+#include <location-types.h>
+
+G_BEGIN_DECLS
 
 /**
  * @file location-geocode.h
  * @brief This file contains the internal definitions and structures related to geocode.
- * @addtogroup LocationInternal
+ * @addtogroup LocationMapService
  * @{
  * @}
  */
 
-G_BEGIN_DECLS
-
-#define LOCATION_TYPE_GEOCODE                  (location_geocode_get_type ())
-#define LOCATION_GEOCODE(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), LOCATION_TYPE_GEOCODE, LocationGeocode))
-#define LOCATION_IS_GEOCODE(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LOCATION_TYPE_GEOCODE))
-#define LOCATION_GEOCODE_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), LOCATION_TYPE_GEOCODE, LocationGeocodeClass))
-#define LOCATION_IS_GEOCODE_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), LOCATION_TYPE_GEOCODE))
-#define LOCATION_GEOCODE_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), LOCATION_TYPE_GEOCODE, LocationGeocodeClass))
-
-typedef struct _LocationGeocode        LocationGeocode;
-typedef struct _LocationGeocodeClass   LocationGeocodeClass;
-
-struct _LocationGeocode
-{
-       GObject parent_instance;
-};
-
-struct _LocationGeocodeClass
-{
-       GObjectClass parent_class;
-};
-
-GType location_geocode_get_type (void);
-
 G_END_DECLS
 
 #endif
diff --git a/location/map-service/location-landmark-ext.h b/location/map-service/location-landmark-ext.h
new file mode 100644 (file)
index 0000000..3658d6d
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __LOCATION_LANDMARK_EXT_H__
+#define __LOCATION_LANDMARK_EXT_H__
+
+#include <location-types.h>
+
+G_BEGIN_DECLS
+
+/**
+ * @file location-landmark-ext.h
+ * @brief This file contains the extensional definitions and structures related to Landmark.
+ */
+
+/**
+ * @addtogroup LocationMapServicePOI
+ * @{
+ * @defgroup LocationMapServiceLandmarkExt Location Landmark Ext
+ * @brief This provides Location Landmark Ext APIs
+ * @addtogroup LocationMapServiceLandmarkExt
+ * @{
+ */
+
+/**
+ * @brief Set the ID of the given #LocationLandmark
+ */
+gboolean location_landmark_set_id (LocationLandmark *landmark, guint id);
+
+/**
+ * @brief Set the name of the given #LocationLandmark
+ */
+gboolean location_landmark_set_name (LocationLandmark *landmark, const gchar *name);
+/**
+ * @brief Set the position in the given #LocationLandmark
+ */
+gboolean location_landmark_set_position (LocationLandmark *landmark, const LocationPosition *position);
+/**
+ * @brief Set the address of the given #LocationLandmark
+ */
+gboolean location_landmark_set_address (LocationLandmark *landmark, const LocationAddress *addr);
+/**
+ * @brief Set the description of the given #LocationLandmark
+ */
+gboolean location_landmark_set_description (LocationLandmark *landmark, const gchar *desc);
+/**
+ * @brief Set the timestamp of the given #LocationLandmark
+ */
+gboolean location_landmark_set_timestamp (LocationLandmark *landmark, guint timestamp);
+/**
+ * @brief Set the priority of the given #LocationLandmark
+ */
+gboolean location_landmark_set_priority (LocationLandmark *landmark, guint priority);
+/**
+ * @brief Set the boundary of the given #LocationLandmark
+ */
+gboolean location_landmark_set_bounding_box (LocationLandmark *landmark, const LocationBoundary *bbox);
+/**
+ * @brief Set the author of the given #LocationLandmark
+ */
+gboolean location_landmark_set_author (LocationLandmark *landmark, const gchar *author);
+/**
+ * @brief Set the urls of the given #LocationLandmark
+ */
+gboolean location_landmark_set_url (LocationLandmark *landmark, GList *url);
+
+/**
+ * @brief Set the categories of the given #LocationLandmark
+ */
+gboolean location_landmark_set_category (const LocationLandmark *landmark, GList *category);
+
+/**
+ * @brief Set the phone number of the given #LocationLandmark
+ */
+gboolean location_landmark_set_phone_number (const LocationLandmark *landmark, const gchar *number);
+
+/**
+ * @brief Set the property data of the given #LocationLandmark
+ */
+gboolean location_landmark_set_property (const LocationLandmark *landmark, gconstpointer key, gconstpointer value);
+
+/**
+ * @brief Set url of the given #LocationLandmarkUrl
+ */
+gboolean location_landmark_url_set_url_path (LocationLandmarkUrl *url, const gchar *path);
+/**
+ * @brief Set the description of the given #LocationLandmarkUrl
+ */
+gboolean location_landmark_url_set_description (LocationLandmarkUrl *url, const gchar *desc);
+
+/**
+ * @} @}
+ */
+
+G_END_DECLS
+
+#endif
+
+
diff --git a/location/map-service/location-landmark.c b/location/map-service/location-landmark.c
new file mode 100644 (file)
index 0000000..91c4504
--- /dev/null
@@ -0,0 +1,528 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "location-log.h"
+#include "location.h"
+#include "location-types.h"
+#include "map-service.h"
+
+struct _LocationLandmark {
+
+       guint id;                       ///< Unique identifier of the landmark
+       guint priority;                 ///< Degree of importance of the landmark (Between HIGHEST_LANDMARK_PRIORITY and LOWEST_LANDMARK_PRIORITY)
+       gchar *name;                    ///< Name of landmark
+       LocationPosition *position;             ///< Positon of the landmark, may be null if not known
+       LocationAddress *addr;          ///< Textual address information of the landmark, may be null if not
+       LocationBoundary *bbox; ///< Coverage area of the landmark, may be null if not available
+       guint timestamp;                ///< Time when the landmark data was last updated (updated by system and used to facilitate tracking)
+
+       gchar *author;                  ///< Provider of the landmark data, may be null
+       gchar *store;                   ///< Name of landmark store that the landmark belongs to
+       gchar *phone_number;            ///< Nhone number of the landmark, may be null
+       GList *category;                ///< Categories to which the landmark belongs to
+       GList  *url;                    ///< Url to additional content (Optional)
+       gchar *desc;                    ///< Description of the landmark, may be null if not available
+
+       GHashTable *properties;         ///< Extra info of the landmark
+
+};
+
+struct _LocationLandmarkUrl {
+       gchar *path;                    ///< Url of landmark url info
+       gchar *desc;                    ///< Description of landmark url info
+};
+
+EXPORT_API guint
+location_landmark_get_id (const LocationLandmark *landmark)
+{
+       g_return_val_if_fail(landmark, 0);
+
+       return landmark->id;
+}
+
+
+EXPORT_API gchar *
+location_landmark_get_name (const LocationLandmark *landmark)
+{
+       g_return_val_if_fail(landmark, NULL);
+
+       return landmark->name;
+}
+
+EXPORT_API LocationPosition *
+location_landmark_get_position (const LocationLandmark *landmark)
+{
+       g_return_val_if_fail(landmark, NULL);
+
+       return landmark->position;
+}
+
+EXPORT_API LocationAddress *
+location_landmark_get_address (const LocationLandmark *landmark)
+{
+       g_return_val_if_fail(landmark, NULL);
+
+       return landmark->addr;
+}
+
+EXPORT_API gchar *
+location_landmark_get_description (const LocationLandmark *landmark)
+{
+       g_return_val_if_fail(landmark, NULL);
+
+       return landmark->desc;
+}
+
+EXPORT_API guint
+location_landmark_get_timestamp (const LocationLandmark *landmark)
+{
+       g_return_val_if_fail(landmark, 0);
+
+       return landmark->timestamp;
+}
+
+EXPORT_API guint
+location_landmark_get_priority (const LocationLandmark *landmark)
+{
+       g_return_val_if_fail(landmark, 0);
+
+       return landmark->priority;
+}
+
+EXPORT_API LocationBoundary *
+location_landmark_get_bounding_box (const LocationLandmark *landmark)
+{
+       g_return_val_if_fail(landmark, NULL);
+
+       return landmark->bbox;
+}
+
+EXPORT_API gchar *
+location_landmark_get_author (const LocationLandmark *landmark)
+{
+       g_return_val_if_fail(landmark, NULL);
+
+       return landmark->author;
+}
+
+EXPORT_API GList *
+location_landmark_get_url (const LocationLandmark *landmark)
+{
+       g_return_val_if_fail(landmark, NULL);
+
+       return landmark->url;
+}
+
+EXPORT_API GList *
+location_landmark_get_category (const LocationLandmark *landmark)
+{
+       g_return_val_if_fail(landmark, NULL);
+
+       return landmark->category;
+}
+
+EXPORT_API gchar *
+location_landmark_get_phone_number (const LocationLandmark *landmark)
+{
+       g_return_val_if_fail(landmark, NULL);
+
+       return (const gchar *) landmark->phone_number;
+}
+
+EXPORT_API GList *
+location_landmark_get_property_key (const LocationLandmark *landmark)
+{
+       g_return_val_if_fail(landmark, NULL);
+
+       return g_hash_table_get_keys (landmark->properties);
+}
+
+EXPORT_API gconstpointer
+location_landmark_get_property (const LocationLandmark *landmark, gconstpointer key)
+{
+       g_return_val_if_fail(landmark, NULL);
+       g_return_val_if_fail(key, NULL);
+       if (!landmark->properties) return NULL;
+
+       return g_hash_table_lookup (landmark->properties, key);
+}
+
+EXPORT_API gboolean
+location_landmark_set_id (LocationLandmark *landmark, guint id)
+{
+       g_return_val_if_fail(landmark, FALSE);
+
+       landmark->id = id;
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_landmark_set_name (LocationLandmark *landmark, const gchar *name)
+{
+       g_return_val_if_fail(landmark, FALSE);
+
+       if (landmark->name) {
+               g_free(landmark->name);
+               landmark->name = NULL;
+       }
+       if (name) landmark->name = g_strdup (name);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_landmark_set_position (LocationLandmark *landmark, const LocationPosition *position)
+{
+       g_return_val_if_fail(landmark, FALSE);
+
+       if (landmark->position) {
+               location_position_free(landmark->position);
+               landmark->position = NULL;
+       }
+
+       if (position) landmark->position = location_position_copy (position);
+
+       return TRUE;
+
+}
+
+EXPORT_API gboolean
+location_landmark_set_address (LocationLandmark *landmark, const LocationAddress *addr)
+{
+       g_return_val_if_fail(landmark, FALSE);
+
+       if (landmark->addr) {
+               location_address_free (landmark->addr);
+               landmark->addr = NULL;
+       }
+
+       if (addr) landmark->addr = location_address_copy (addr);
+
+       return TRUE;
+
+}
+
+EXPORT_API gboolean
+location_landmark_set_description (LocationLandmark *landmark, const gchar *desc)
+{
+       g_return_val_if_fail(landmark, FALSE);
+
+       if (landmark->desc) {
+               g_free(landmark->desc);
+               landmark->desc = NULL;
+       }
+
+       if (desc) landmark->desc = g_strdup (desc);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_landmark_set_timestamp (LocationLandmark *landmark, guint timestamp)
+{
+       g_return_val_if_fail(landmark, FALSE);
+
+       landmark->timestamp = timestamp;
+
+       return TRUE;
+
+}
+
+EXPORT_API gboolean
+location_landmark_set_priority (LocationLandmark *landmark, guint priority)
+{
+       g_return_val_if_fail(landmark, FALSE);
+
+       landmark->priority = priority;
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_landmark_set_bounding_box (LocationLandmark *landmark, const LocationBoundary *bbox)
+{
+       g_return_val_if_fail(landmark, FALSE);
+
+       if (landmark->bbox) {
+               location_boundary_free(landmark->bbox);
+               landmark->bbox = NULL;
+       }
+
+       if (bbox) landmark->bbox = location_boundary_copy (bbox);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_landmark_set_author (LocationLandmark *landmark, const gchar *author)
+{
+       g_return_val_if_fail(landmark, FALSE);
+
+       if (landmark->author) {
+               g_free(landmark->author);
+               landmark->author = NULL;
+       }
+       if (author) landmark->author = g_strdup (author);
+
+       return TRUE;
+}
+
+static void landmark_url_foreach_free (gpointer data)
+{
+       g_return_if_fail(data);
+
+       LocationLandmarkUrl *url = (LocationLandmarkUrl *)data;
+
+       location_landmark_url_free (url);
+}
+
+static void landmark_foreach_url_copy (gpointer data, gpointer user_data)
+{
+       g_return_if_fail(data);
+       g_return_if_fail(user_data);
+
+       LocationLandmarkUrl *url = (LocationLandmarkUrl *)data;
+       LocationLandmark *landmark = (LocationLandmark *) user_data;
+
+       if(!url || !landmark) return;
+
+       landmark->url = g_list_append(landmark->url, url);
+}
+
+EXPORT_API gboolean
+location_landmark_set_url (LocationLandmark *landmark, GList *url)
+{
+       g_return_val_if_fail(landmark, FALSE);
+
+       if (landmark->url) {
+               g_list_free_full(landmark->url, landmark_url_foreach_free);
+               landmark->url = NULL;
+       }
+
+       if (url) g_list_foreach (url, landmark_foreach_url_copy, landmark);
+
+       return TRUE;
+}
+
+static void landmark_foreach_copy_category (gpointer data, gpointer user_data)
+{
+       g_return_if_fail (data);
+       g_return_if_fail (user_data);
+
+       gchar *category_name = (gchar *)data;
+       LocationLandmark *landmark = (LocationLandmark *) user_data;
+
+       landmark->category = g_list_append (landmark->category, g_strdup(category_name));
+}
+
+static void landmark_free_category (gpointer data)
+{
+       g_return_if_fail (data);
+
+       gchar * category_name = (gchar *)data;
+
+       g_free (category_name);
+}
+
+EXPORT_API gboolean
+location_landmark_set_category (LocationLandmark *landmark, GList *category)
+{
+       g_return_val_if_fail(landmark, FALSE);
+
+       if (landmark->category) {
+               g_list_free_full(landmark->category, landmark_free_category);
+               landmark->category = NULL;
+       }
+
+       if (category) g_list_foreach ((GList*) category, landmark_foreach_copy_category, landmark);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_landmark_set_phone_number (LocationLandmark *landmark, const gchar *number)
+{
+       g_return_val_if_fail(landmark, FALSE);
+       g_return_val_if_fail(number, FALSE);
+
+       if (landmark->phone_number) {
+               g_free(landmark->phone_number);
+               landmark->phone_number = NULL;
+       }
+       if (number) landmark->phone_number = g_strdup (number);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_landmark_set_property(LocationLandmark *landmark, gconstpointer key, gconstpointer value)
+{
+       g_return_val_if_fail(landmark, FALSE);
+       g_return_val_if_fail(key, FALSE);
+       if (!landmark->properties) return FALSE;
+
+       if (value) {
+               gchar *re_key = g_strdup (key);
+               gchar *re_val = g_strdup (value);
+               g_hash_table_insert(landmark->properties, re_key, re_val);
+       }
+       else g_hash_table_remove (landmark->properties, key);
+
+       return TRUE;
+}
+
+EXPORT_API gchar *
+location_landmark_url_get_url_path (const LocationLandmarkUrl *url)
+{
+       g_return_val_if_fail (url, NULL);
+
+       return url->path;
+}
+
+EXPORT_API gchar *
+location_landmark_url_get_description (const LocationLandmarkUrl *url)
+{
+       g_return_val_if_fail (url, NULL);
+
+       return url->desc;
+}
+
+EXPORT_API gboolean
+location_landmark_url_set_url_path (LocationLandmarkUrl *url, const gchar *path)
+{
+       g_return_val_if_fail (url, FALSE);
+
+       if (url->path) {
+               g_free(url->path);
+               url->path = NULL;
+       }
+
+       if (path) url->path = g_strdup (path);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_landmark_url_set_description (LocationLandmarkUrl *url, const gchar *desc)
+{
+       g_return_val_if_fail (url, FALSE);
+
+       if (url->desc) {
+               g_free(url->desc);
+               url->desc = NULL;
+       }
+
+       if (desc) url->desc = g_strdup (desc);
+
+       return TRUE;
+}
+
+EXPORT_API LocationLandmarkUrl *
+location_landmark_url_new (void)
+{
+       LocationLandmarkUrl *url = g_slice_new0 (LocationLandmarkUrl);
+       if(!url) return NULL;
+
+
+       return url;
+}
+
+EXPORT_API void
+location_landmark_url_free (LocationLandmarkUrl * url)
+{
+       g_return_if_fail (url);
+
+
+       location_landmark_url_set_url_path(url, NULL);
+       location_landmark_url_set_description(url, NULL);
+
+       g_slice_free(LocationLandmarkUrl, url);
+}
+
+EXPORT_API LocationLandmarkUrl *
+location_landmark_url_copy (const LocationLandmarkUrl *url)
+{
+       g_return_val_if_fail(url, NULL);
+
+       LocationLandmarkUrl *new_url = location_landmark_url_new();
+
+       location_landmark_url_set_url_path(new_url, location_landmark_url_get_url_path(url));
+       location_landmark_url_set_description(new_url, location_landmark_url_get_description(url));
+
+       return new_url;
+}
+
+EXPORT_API LocationLandmark *
+location_landmark_new (void)
+{
+       LocationLandmark *landmark = g_slice_new0 (LocationLandmark);
+       if (!landmark) return NULL;
+
+       landmark->properties = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
+
+       return landmark;
+}
+
+EXPORT_API LocationLandmark *
+location_landmark_copy (const LocationLandmark *landmark)
+{
+       g_return_val_if_fail (landmark, NULL);
+
+       LocationLandmark *new_landmark = location_landmark_new();
+       if (!new_landmark) return NULL;
+
+       location_landmark_set_id(new_landmark, location_landmark_get_id(landmark));
+       location_landmark_set_name (new_landmark, location_landmark_get_name (landmark));
+       location_landmark_set_position (new_landmark, location_landmark_get_position(landmark));
+       location_landmark_set_address (new_landmark, location_landmark_get_address (landmark));
+       location_landmark_set_description (new_landmark, location_landmark_get_description(landmark));
+       location_landmark_set_timestamp (new_landmark, location_landmark_get_timestamp(landmark));
+       location_landmark_set_priority (new_landmark, location_landmark_get_priority(landmark));
+       location_landmark_set_bounding_box (new_landmark, location_landmark_get_bounding_box(landmark));
+       location_landmark_set_author (new_landmark, location_landmark_get_author(landmark));
+       location_landmark_set_url(new_landmark, location_landmark_get_url(landmark));
+
+       return new_landmark;
+}
+
+EXPORT_API void
+location_landmark_free (LocationLandmark *landmark)
+{
+       g_return_if_fail (landmark);
+
+       location_landmark_set_id(landmark, 0);
+       location_landmark_set_name (landmark, NULL);
+       location_landmark_set_position (landmark, NULL);
+       location_landmark_set_address (landmark, NULL);
+       location_landmark_set_description (landmark, NULL);
+       location_landmark_set_timestamp (landmark, 0);
+       location_landmark_set_priority (landmark, 0);
+       location_landmark_set_bounding_box (landmark, NULL);
+       location_landmark_set_author (landmark, NULL);
+       location_landmark_set_url(landmark, NULL);
+
+       g_slice_free (LocationLandmark, landmark);
+}
diff --git a/location/map-service/location-landmark.h b/location/map-service/location-landmark.h
new file mode 100644 (file)
index 0000000..401c801
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __LOCATION_LANDMARK_H__
+#define __LOCATION_LANDMARK_H__
+
+#include <location-types.h>
+
+G_BEGIN_DECLS
+
+/**
+ * @file location-landmark.h
+ * @brief This file contains the internal definitions and structures related to Landmark.
+ */
+
+/**
+ * @addtogroup LocationMapServicePOI
+ * @{
+ * @defgroup LocationMapServiceLandmark Location Landmark
+ * @brief This provides structure, enumeration and APIs for Landmark
+ * @addtogroup LocationMapServiceLandmark
+ * @{
+ */
+
+/**
+ * @brief Create a new Landmark
+ */
+LocationLandmark *location_landmark_new (void);
+
+/**
+ * @brief Copy the given Landmark
+ */
+LocationLandmark *location_landmark_copy (const LocationLandmark *landmark);
+
+/**
+ * @brief Free the given Landmark
+ */
+void location_landmark_free (LocationLandmark *landmark);
+
+/**
+ * @brief Get the ID of the given landmark
+ */
+guint location_landmark_get_id (const LocationLandmark *landmark);
+
+/**
+ * @brief Get the name of the given landmark
+ */
+gchar *location_landmark_get_name (const LocationLandmark *landmark);
+/**
+ * @brief Get the position in the given landmark
+ */
+LocationPosition *location_landmark_get_position (const LocationLandmark *landmark);
+/**
+ * @brief Get the address of the given landmark
+ */
+LocationAddress *location_landmark_get_address (const LocationLandmark *landmark);
+/**
+ * @brief Get the description of the given landmark
+ */
+gchar *location_landmark_get_description (const LocationLandmark *landmark);
+/**
+ * @brief Get the timestamp of the given landmark
+ */
+guint location_landmark_get_timestamp (const LocationLandmark *landmark);
+/**
+ * @brief Get the priority of the given landmark
+ */
+guint location_landmark_get_priority (const LocationLandmark *landmark);
+/**
+ * @brief Get the bounding box of the given landmark
+ */
+LocationBoundary *location_landmark_get_bounding_box (const LocationLandmark *landmark);
+/**
+ * @brief Get the author of the given landmark
+ */
+gchar *location_landmark_get_author (const LocationLandmark *landmark);
+/**
+ * @brief Get the list of urls of the given landmark
+ */
+GList *location_landmark_get_url (const LocationLandmark *landmark);
+/**
+ * @brief Get the categories of the given landmark
+ */
+GList *location_landmark_get_category (const LocationLandmark *landmark);
+/**
+ * @brief Get the phone number of the given landmark
+ */
+gchar *location_landmark_get_phone_number (const LocationLandmark *landmark);
+/**
+ * @brief Get the property keys of the given landmark
+ */
+GList *location_landmark_get_property_key (const LocationLandmark *landmark);
+
+/**
+ * @brief Get the property data of the given landmark
+ */
+gconstpointer location_landmark_get_property (const LocationLandmark *landmark, gconstpointer key);
+
+/**
+ * @brief Create a new #LocationLandmarkUrl
+ */
+LocationLandmarkUrl * location_landmark_url_new (void);
+
+/**
+ * @brief Free a #LocationLandmarkUrl
+ */
+void location_landmark_url_free (LocationLandmarkUrl *url);
+
+/**
+ * @brief Copy a #LocationLandmarkUrl
+ */
+LocationLandmarkUrl *location_landmark_url_copy (const LocationLandmarkUrl *url);
+
+/**
+ * @brief Get the url path of the given #LocationLandmarkUrl
+ */
+gchar *location_landmark_url_get_url_path (const LocationLandmarkUrl *url);
+/**
+ * @brief Get the url's description of the given #LocationLandmarkUrl
+ */
+gchar *location_landmark_url_get_description (const LocationLandmarkUrl *url);
+
+/**
+  * @} @}
+  */
+
+G_END_DECLS
+
+#endif
diff --git a/location/map-service/location-map-service-ext.h b/location/map-service/location-map-service-ext.h
new file mode 100644 (file)
index 0000000..e7df5ae
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __LOCATION_MAP_SERVICE_EXT_H__
+#define __LOCATION_MAP_SERVICE_EXT_H__
+
+
+#include <location-types.h>
+#include <location-route-ext.h>
+#include <location-landmark-ext.h>
+
+G_BEGIN_DECLS
+
+/**
+ * @file location-map-service-ext.h
+ * @brief This file contains the extensional headers.
+ */
+
+G_END_DECLS
+
+#endif /* __LOCATION_MAP_SERVICE_EXT_H__ */
diff --git a/location/map-service/location-map-service.c b/location/map-service/location-map-service.c
new file mode 100644 (file)
index 0000000..9bb0ebb
--- /dev/null
@@ -0,0 +1,327 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdio.h>
+
+#include "location.h"
+#include "location-log.h"
+#include "location-setting.h"
+#include "location-ielement.h"
+#include "location-pref.h"
+#include "map-service.h"
+
+LocationObject *g_map_service = NULL;
+
+//static LocationObject *poi = NULL;
+
+static gboolean
+is_connected_network()
+{
+       gboolean is_connected = TRUE;
+       int net_state = 0;
+
+       net_state = location_setting_get_int(VCONFKEY_NETWORK_STATUS);
+
+       LOCATION_LOGW("net_state[%d]", net_state);
+       if(net_state == VCONFKEY_NETWORK_OFF) {
+               is_connected = FALSE;
+       }
+
+       return is_connected;
+
+}
+
+EXPORT_API int
+location_get_position_from_address (LocationObject *obj,
+       const LocationAddress *address,
+       GList **position_list,
+       GList **accuracy_list)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+       return location_ielement_get_geocode (LOCATION_IELEMENT(g_map_service), address, position_list, accuracy_list);
+}
+
+EXPORT_API int
+location_get_position_from_freeformed_address (LocationObject *obj,
+       const gchar *address,
+       GList **position_list,
+       GList **accuracy_list)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+
+       return location_ielement_get_geocode_freeform (LOCATION_IELEMENT(g_map_service), address, position_list, accuracy_list);
+}
+
+EXPORT_API int
+location_get_address (LocationObject *obj,
+       LocationAddress **address,
+       LocationAccuracy **accuracy)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+
+       LocationPosition *position = NULL;
+       int ret = location_ielement_get_position(LOCATION_IELEMENT (obj), &position, accuracy);
+       if (LOCATION_ERROR_NONE != ret) return ret;
+       ret = location_ielement_get_reversegeocode (LOCATION_IELEMENT(g_map_service), position, address, accuracy);
+       location_position_free (position);
+       return ret;
+}
+
+EXPORT_API int
+location_get_address_from_position (LocationObject *obj,
+       const LocationPosition *position,
+       LocationAddress **address,
+       LocationAccuracy **accuracy)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+       return location_ielement_get_reversegeocode (LOCATION_IELEMENT(g_map_service), position, address, accuracy);
+}
+
+EXPORT_API int
+location_get_position_from_address_async (LocationObject *obj,
+       const LocationAddress *address,
+       LocationPositionCB callback,
+       gpointer userdata)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+       return location_ielement_get_geocode_async (LOCATION_IELEMENT(g_map_service), address, callback, userdata);
+}
+
+
+EXPORT_API int
+location_get_position_from_freeformed_address_async (LocationObject *obj,
+       const gchar *address,
+       LocationPositionCB callback,
+       gpointer userdata)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+       return location_ielement_get_geocode_freeform_async (LOCATION_IELEMENT(g_map_service), address, callback, userdata);
+}
+
+EXPORT_API int
+location_get_address_async (LocationObject *obj,
+       LocationAddressCB callback,
+       gpointer userdata)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+
+       LocationPosition *position = NULL;
+       LocationAccuracy *acc = NULL;
+       int ret = location_ielement_get_position(LOCATION_IELEMENT(obj), &position, &acc);
+       if (LOCATION_ERROR_NONE != ret) return ret;
+       ret = location_ielement_get_reversegeocode_async (LOCATION_IELEMENT(g_map_service), position, callback, userdata);
+       location_position_free (position);
+       return ret;
+}
+
+EXPORT_API int
+location_get_address_from_position_async (LocationObject *obj,
+       const LocationPosition *position,
+       LocationAddressCB callback,
+       gpointer userdata)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+
+       return location_ielement_get_reversegeocode_async (LOCATION_IELEMENT(g_map_service), position, callback, userdata);
+}
+
+EXPORT_API int
+location_search_poi (LocationObject *obj,
+               const LocationPOIFilter * filter,
+               const LocationPosition *position,
+               const LocationPOIPreference * pref,
+               LocationPOICB cb, gpointer user_data, guint * req_id)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (filter, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (position, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (pref, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (cb, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+
+       LocationPreference *svc_pref = location_get_map_service_pref (g_map_service);
+
+       return location_ielement_search_poi (LOCATION_IELEMENT(g_map_service), filter, position, svc_pref, pref, cb, user_data, req_id);
+}
+
+EXPORT_API int
+location_search_poi_by_area (LocationObject *obj,
+               const LocationPOIFilter * filter,
+               const LocationBoundary * boundary,
+               const LocationPOIPreference * pref,
+               LocationPOICB cb, gpointer user_data, guint * req_id)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (filter, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (boundary, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (pref, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (cb, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+
+       LocationPreference *svc_pref = location_get_map_service_pref (g_map_service);
+
+       return location_ielement_search_poi_by_area (LOCATION_IELEMENT(g_map_service), filter, boundary, svc_pref, pref, cb, user_data, req_id);
+}
+
+EXPORT_API int
+location_search_poi_by_address (LocationObject *obj, const LocationPOIFilter * filter,
+                               const LocationAddress * address, const LocationPOIPreference * pref,
+                               LocationPOICB cb, gpointer user_data, guint * req_id)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (filter, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (address, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (pref, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (cb, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+
+       LocationPreference *svc_pref = location_get_map_service_pref (g_map_service);
+
+       return location_ielement_search_poi_by_address (LOCATION_IELEMENT(g_map_service), filter, address, svc_pref, pref, cb, user_data, req_id);
+}
+
+EXPORT_API int
+location_search_poi_by_freeformed_address (LocationObject *obj,
+               const LocationPOIFilter * filter,
+               const gchar * address,
+               const LocationPOIPreference * pref,
+               LocationPOICB cb, gpointer user_data, guint * req_id)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (filter, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (address, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (pref, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (cb, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+
+       LocationPreference *svc_pref = location_get_map_service_pref (g_map_service);
+
+       return location_ielement_search_poi_by_freeform (LOCATION_IELEMENT(g_map_service), filter, address, svc_pref, pref, cb, user_data, req_id);
+}
+
+EXPORT_API int
+location_cancel_poi_request (LocationObject *obj, guint req_id)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+
+       return location_ielement_cancel_poi_request (LOCATION_IELEMENT(g_map_service), req_id);
+}
+
+EXPORT_API int
+location_request_route (LocationObject *obj, LocationPosition *origin, LocationPosition *destination,
+                               GList *waypoint, const LocationRoutePreference * pref,
+                               LocationRouteCB cb, gpointer user_data, guint * req_id)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (origin, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (destination, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (pref, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (cb, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+
+       LocationPreference *svc_pref = location_get_map_service_pref (g_map_service);
+
+       return location_ielement_request_route (LOCATION_IELEMENT(g_map_service), origin, destination,
+                                       waypoint, svc_pref, pref, cb, user_data, req_id);
+}
+
+EXPORT_API int
+location_cancel_route_request (LocationObject *obj, guint req_id)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+
+       return location_ielement_cancel_route_request (LOCATION_IELEMENT(g_map_service), req_id);
+}
+
+EXPORT_API gboolean
+location_is_supported_map_provider_capability (LocationObject *obj, LocationMapServiceType type)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+
+       return location_ielement_is_supported_map_provider_capability (LOCATION_IELEMENT(g_map_service), type);
+}
+
+EXPORT_API int
+location_get_map_provider_capability_key (LocationObject *obj, LocationMapServiceType type, GList **key)
+{
+       g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (key, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (g_map_service, LOCATION_ERROR_PARAMETER);
+       g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
+
+       return location_ielement_get_map_provider_capability_key (LOCATION_IELEMENT(g_map_service), type, key);
+}
+
+EXPORT_API LocationPreference *
+location_get_map_service_pref (LocationObject *obj)
+{
+       g_return_val_if_fail (obj, NULL);
+       g_return_val_if_fail (g_map_service, NULL);
+
+       return map_service_get_pref (g_map_service);
+}
+
+EXPORT_API gboolean
+location_set_map_service_pref (LocationObject *obj, LocationPreference *pref)
+{
+       g_return_val_if_fail (obj, FALSE);
+       g_return_val_if_fail (pref, FALSE);
+       g_return_val_if_fail (g_map_service, FALSE);
+
+       return map_service_set_pref (g_map_service, pref);
+}
diff --git a/location/map-service/location-map-service.h b/location/map-service/location-map-service.h
new file mode 100644 (file)
index 0000000..73421a4
--- /dev/null
@@ -0,0 +1,1389 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __LOCATION_MAP_SERVICE_H__
+#define __LOCATION_MAP_SERVICE_H__
+
+
+#include <glib.h>
+#include <location-types.h>
+#include <location-poi.h>
+#include <location-route.h>
+#include <location-pref.h>
+#include <location-landmark.h>
+
+G_BEGIN_DECLS
+
+/**
+ * @file location-map-service.h
+ * @brief This file contains the Location API and related structure and enumeration.
+ */
+/**
+ * @addtogroup LocationFW
+ * @{
+ * @defgroup LocationMapService Location Map Service API
+ * @brief This sub module provides the Location Map Service API.
+ * @addtogroup LocationMapService
+ * @{
+ */
+
+/**
+ * @brief
+ * Get current position information with estimate of the accuracy by using given address information.
+ * @remarks Out parameters are should be freed.
+ * @pre
+ * #location_init should be called before.\n
+ * Calling application must have an active data connection.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @param [in]
+ * address - a #LocationAddress
+ * @param [out]
+ * position_list - a list of #LocationPosition
+ * @param [out]
+ * accuracy_list - a list of #LocationAccuracy
+ * @return int
+ * @retval 0                              Success.
+ *
+ * Please refer #LocationError for more information.
+ * @see
+ * location_get_position_from_address_async\n
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+
+static void PrintPos (gpointer data, gpointer user_data)
+{
+       LocationPosition *pos = (LocationPosition *)data;
+
+       if (pos) {
+           g_debug("time: [%d], latitude: [%f], longitude: [%f], altitude: [%f]\n", pos->timestamp, pos->latitude, pos->longitude, pos->altitude);
+           location_position_free (pos);
+      }
+}
+
+static void PrintAcc (gpointer data, gpointer user_data)
+{
+       LocationAccuracy *acc = (LocationAccuracy *)data;
+
+       if (acc) {
+              g_debug("level: [%d], horizontal_accuracy: [%f], vertical_accuracy: [%f]\n", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+              location_accuracy_free (acc);
+       }
+
+}
+
+static void PrintPos (gpointer data, gpointer user_data)
+{
+       LocationPosition *pos = (LocationPosition *)data;
+
+       if (pos) {
+               g_debug("time: [%d], latitude: [%f], longitude: [%f], altitude: [%f]\n", pos->timestamp, pos->latitude, pos->longitude, pos->altitude);
+               location_position_free (pos);
+       }
+}
+
+static void PrintAcc (gpointer data, gpointer user_data)
+{
+       LocationAccuracy *acc = (LocationAccuracy *)data;
+
+       if (acc) {
+               g_debug("level: [%d], horizontal_accuracy: [%f], vertical_accuracy: [%f]\n", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+               location_accuracy_free (acc);
+       }
+}
+
+int main (int argc, char *argv[])
+{
+       LocationObject *loc = NULL;
+       int ret = LOCATION_ERROR_NONE;
+
+       location_init ();
+       loc  = location_new (LOCATION_METHOD_GPS);
+       if(!loc){
+               g_debug("location_new failed");
+               return -1;
+       }
+
+       GList *pos_list = NULL;
+       GList *acc_list = NULL;
+       LocationAddress *addr = NULL;
+
+       addr = location_address_new ("1", "Post Street", NULL, "san jose", "ca", NULL, "95113");
+       if (LOCATION_ERROR_NONE == location_get_position_from_address(loc, addr, &pos_list, &acc_list)) {
+
+       } else g_warning ("SYNC>> position from address> failed");
+       location_address_free (addr);
+       g_list_foreach (pos_list, PrintPos, NULL);
+       g_list_foreach (acc_list, PrintAcc, NULL);
+       g_list_free (pos_list);
+       g_list_free (acc_list);
+       location_free (loc);
+       return 0;
+}
+ * @endcode
+ */
+int location_get_position_from_address (LocationObject *obj, const LocationAddress *address, GList **position_list, GList **accuracy_list);
+
+/**
+ * @brief
+ * Get current position information asynchronously with estimate of the accuracy by using given address information.
+ * @remarks None.
+ * @pre
+ * #location_init should be called before.\n
+ * Calling application must have glib or ecore main loop.\n
+ * Calling application must have an active data connection.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @param [in]
+ * address - a #LocationAddress
+ * @param [in]
+ * callback - A pointer of function which will be called after position is gained or when an error occurs.
+ * @param [in]
+ * userdata - data to pass to function
+ * @return int
+ * @retval 0                              Success.
+ *
+ * Please refer #LocationError for more information.
+ * @see
+ * location_get_position_from_address\n
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+
+static void PrintPos (gpointer data, gpointer user_data)
+{
+       LocationPosition *pos = (LocationPosition *)data;
+
+       if (pos) {
+               g_debug("time: [%d], latitude: [%f], longitude: [%f], altitude: [%f]\n", pos->timestamp, pos->latitude, pos->longitude, pos->altitude);
+       }
+}
+
+static void PrintAcc (gpointer data, gpointer user_data)
+{
+       LocationAccuracy *acc = (LocationAccuracy *)data;
+
+       if (acc) {
+               g_debug("level: [%d], horizontal_accuracy: [%f], vertical_accuracy: [%f]\n", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+       }
+}
+static void
+cb_position_from_address (LocationError error, GList *position_list, GList *accuracy_list, gpointer userdata)
+{
+       if (position_list && accuracy_list) {
+               g_list_foreach (position_list, PrintPos);
+               g_list_foreach (accuracy_list, PrintAcc);
+       }
+}
+
+void get_position_from_address(LocationObject* loc)
+{
+       LocationAddress *addr = location_address_new ("1", "Post Street", NULL, "san jose", "ca", NULL, "95113");
+       //Calling application must have an active data connection before using this function.
+       if (LOCATION_ERROR_NONE == location_get_position_from_address_async(loc, addr, cb_position_from_address, loc))
+               g_debug("location_get_position_from_address_async() success");
+       else g_warning ("location_get_position_from_address_async() failed");
+       location_address_free (addr);
+}
+ * @endcode
+ */
+int location_get_position_from_address_async (LocationObject *obj, const LocationAddress *address, LocationPositionCB callback, gpointer userdata);
+
+/**
+ * @brief
+ * Get current position information with estimate of the accuracy by using given free-formed address string.
+ * @remarks Out parameters are should be freed.
+ * @pre
+ * #location_init should be called before.\n
+ * Calling application must have an active data connection.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @param [in]
+ * address - Free-formed address string to be used
+ * @param [out]
+ * position_list - a list of #LocationPosition
+ * @param [out]
+ * accuracy_list - a list of #LocationAccuracy
+ * @return int
+ * @retval 0                              Success
+ *
+ * Please refer #LocationError for more information.
+ * @see
+ * location_get_position_from_freeformed_address_async\n
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+
+static void PrintPos (gpointer data, gpointer user_data)
+{
+       LocationPosition *pos = (LocationPosition *)data;
+
+       if (pos) {
+               g_debug("time: [%d], latitude: [%f], longitude: [%f], altitude: [%f]\n", pos->timestamp, pos->latitude, pos->longitude, pos->altitude);
+               location_position_free (pos);
+       }
+}
+
+static void PrintAcc (gpointer data, gpointer user_data)
+{
+       LocationAccuracy *acc = (LocationAccuracy *)data;
+
+       if (acc) {
+               g_debug("level: [%d], horizontal_accuracy: [%f], vertical_accuracy: [%f]\n", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+               location_accuracy_free (acc);
+       }
+}
+
+static void PrintPos (gpointer data, gpointer user_data)
+{
+       LocationPosition *pos = (LocationPosition *)data;
+
+       if (pos) {
+               g_debug("time: [%d], latitude: [%f], longitude: [%f], altitude: [%f]\n", pos->timestamp, pos->latitude, pos->longitude, pos->altitude);
+               location_position_free (pos);
+       }
+}
+
+static void PrintAcc (gpointer data, gpointer user_data)
+{
+       LocationAccuracy *acc = (LocationAccuracy *)data;
+
+       if (acc) {
+               g_debug("level: [%d], horizontal_accuracy: [%f], vertical_accuracy: [%f]\n", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+               location_accuracy_free (acc);
+       }
+}
+
+int main (int argc, char *argv[])
+{
+       LocationObject *loc = NULL;
+       int ret = LOCATION_ERROR_NONE;
+
+       location_init ();
+       loc  = location_new (LOCATION_METHOD_GPS);
+       if(!loc){
+               g_debug("location_new failed");
+               return -1;
+       }
+
+       GList *pos_list = NULL;
+       GList *acc_list = NULL;
+       char* addr_str = g_strdup("4 N 2nd Street 95113");
+
+       //Calling application must have an active data connection before using this function.
+       if (LOCATION_ERROR_NONE == location_get_position_from_freeformed_address(loc, addr_str, &pos_list, &acc_list)) {
+               g_list_foreach (pos_list, PrintPos, NULL);
+               g_list_foreach (acc_list, PrintAcc, NULL);
+               g_list_free (pos_list);
+               g_list_free (acc_list);
+       } else g_warning ("SYNC>> position from freeformed address> failed");
+       g_free(addr_str);
+
+       location_free (loc);
+       return 0;
+}
+ * @endcode
+ */
+int location_get_position_from_freeformed_address (LocationObject *obj, const gchar *address, GList **position_list, GList **accuracy_list);
+
+/**
+ * @brief
+ * Get current position information asynchronously with estimate of the accuracy by using given free-formed address string.
+ * @remarks None.
+ * @pre
+ * #location_init should be called before.\n
+ * Calling application must have glib or ecore main loop.\n
+ * Calling application must have an active data connection.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @param [in]
+ * address - Free-formed address string to be used
+ * @param [in]
+ * callback - A pointer of function which will be called after position is gained or when an error occurs.
+ * @param [in]
+ * userdata - data to pass to function
+ * @return int
+ * @retval 0                              Success
+ *
+ * Please refer #LocationError for more information.
+ * @see
+ * location_get_position_from_freeformed_address\n
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+
+static void PrintPos (gpointer data, gpointer user_data)
+{
+       LocationPosition *pos = (LocationPosition *)data;
+
+       if (pos) {
+               g_debug("time: [%d], latitude: [%f], longitude: [%f], altitude: [%f]\n", pos->timestamp, pos->latitude, pos->longitude, pos->altitude);
+       }
+}
+
+static void PrintAcc (gpointer data, gpointer user_data)
+{
+       LocationAccuracy *acc = (LocationAccuracy *)data;
+
+       if (acc) {
+               g_debug("level: [%d], horizontal_accuracy: [%f], vertical_accuracy: [%f]\n", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+       }
+}
+
+static void
+cb_position_from_freeformed_address (LocationError error, GList *position_list, GList *accuracy_list, gpointer userdata)
+{
+       if (position_list && accuracy_list) {
+               g_list_foreach (position_list, PrintPos);
+               g_list_foreach (accuracy_list, PrintAcc);
+       }
+}
+
+void get_position_from_address(LocationObject* loc)
+{
+       gchar *addr_str = g_strdup("4 N 2nd Street 95113");
+       //Calling application must have an active data connection before using this function.
+       if (LOCATION_ERROR_NONE == location_get_position_from_freeformed_address_async(loc, addr_str, cb_position_from_freeformed_address, loc))
+               g_debug("location_get_position_from_freeformed_address_async() success");
+       else g_warning ("location_get_position_from_freeformed_address_async() failed");
+       g_free(addr_str);
+
+}
+ * @endcode
+ */
+int location_get_position_from_freeformed_address_async (LocationObject *obj, const gchar *address, LocationPositionCB callback,       gpointer userdata);
+
+/**
+ * @brief
+ * Get current address information with estimate of the accuracy by using current position.
+ * @remarks Out parameters are should be freed.
+ * @pre
+ * #location_init should be called before.\n
+ * #location_start should be called before.\n
+ * Calling application must have an active data connection.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @param [out]
+ * address - a new #LocationAddress
+ * @param [out]
+ * accuracy - a new #LocationAccuracy
+ * @return int
+ * @retval 0                              Success
+ *
+ * Please refer #LocationError for more information.
+ * @see
+ * location_get_address_async\n
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+static GMainLoop *loop = NULL;
+
+static void cb_service_enabled (GObject *self, guint status, gpointer userdata)
+{
+       g_debug("cb_service_enabled: status(%d) userdata(0x%x)", status, (unsigned int)userdata);
+
+       LocationAddress *addr = NULL;
+       LocationAccuracy *acc = NULL;
+       LocationObject *loc = (LocationObject*)userdata;
+
+       // This function works properly after service is enabled.
+       //Calling application must have an active data connection before using this function.
+       if (LOCATION_ERROR_NONE == location_get_address(loc, &addr, &acc)) {
+               g_debug ("SYNC>> Current address> %s %s %s %s %s %s %s",
+                       addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
+               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+               location_address_free(addr);
+               location_accuracy_free(acc);
+       } else g_warning ("SYNC>> Current address> failed");
+}
+
+int main (int argc, char *argv[])
+{
+       LocationObject *loc = NULL;
+       gulong handler_id = 0;
+       int ret = LOCATION_ERROR_NONE;
+
+       location_init ();
+
+       loop = g_main_loop_new (NULL, TRUE);
+
+       loc  = location_new (LOCATION_METHOD_GPS);
+       if(!loc){
+               g_debug("location_new failed");
+               return -1;
+       }
+
+       handler_id = g_signal_connect (loc, "service-enabled", G_CALLBACK(cb_service_enabled), loc);
+       location_start (loc);
+       g_main_loop_run (loop);
+
+       g_signal_handler_disconnect(loc, handler_id);
+       location_stop (loc);
+       location_free (loc);
+
+       return 0;
+}
+ * @endcode
+ */
+int location_get_address (LocationObject *obj, LocationAddress **address, LocationAccuracy **accuracy);
+
+/**
+ * @brief
+ * Get current address information asynchronously with estimate of the accuracy by using current position.
+ * @remarks None.
+ * @pre
+ * #location_init should be called before.\n
+ * #location_start should be called before.\n
+ * Calling application must have glib or ecore main loop.\n
+ * Calling application must have an active data connection.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @param [in]
+ * callback - A pointer of function which will be called after address is gained or when an error occurs.
+ * @param [in]
+ * userdata - data to pass to function
+ * @return int
+ * @retval 0                              Success
+ *
+ * Please refer #LocationError for more information.
+ * @see
+ * location_get_address\n
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+static GMainLoop *loop = NULL;
+
+static void
+cb_address (LocationError error, LocationAddress *addr, LocationAccuracy *acc, gpointer userdata)
+{
+       g_debug ("ASYNC>> location_get_address_async> %s %s %s %s %s %s %s",
+                       addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
+       g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+}
+
+static void cb_service_enabled (GObject *self, guint status, gpointer userdata)
+{
+       g_debug("cb_service_enabled: status(%d) userdata(0x%x)", status, (unsigned int)userdata);
+
+       LocationObject *loc = (LocationObject*)userdata;
+       // This function works properly after service is enabled.
+       //Calling application must have an active data connection before using this function.
+       if (LOCATION_ERROR_NONE == location_get_address_async(loc, cb_address, loc))
+               g_debug("location_get_address_async() success");
+       else g_warning ("location_get_address_async() failed");
+}
+
+
+int main (int argc, char *argv[])
+{
+       LocationObject *loc = NULL;
+       gulong handler_id = 0;
+       int ret = LOCATION_ERROR_NONE;
+
+       location_init ();
+
+       loop = g_main_loop_new (NULL, TRUE);
+
+       loc  = location_new (LOCATION_METHOD_GPS);
+       if(!loc){
+               g_debug("location_new failed");
+               return -1;
+       }
+
+       handler_id = g_signal_connect (loc, "service-enabled", G_CALLBACK(cb_service_enabled), loc);
+       location_start (loc);
+       g_main_loop_run (loop);
+
+       g_signal_handler_disconnect(loc, handler_id);
+       location_stop (loc);
+       location_free (loc);
+
+       return 0;
+}
+ * @endcode
+ */
+int location_get_address_async (LocationObject *obj, LocationAddressCB callback, gpointer userdata);
+
+/**
+ * @brief
+ * Get current address information with estimate of the accuracy by using given position information.
+ * @remarks Out parameters are should be freed.
+ * @pre
+ * #location_init should be called before.\n
+ * Calling application must have an active data connection.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @param [in]
+ * position - a #LocationPosition
+ * @param [out]
+ * address - a new #LocationAddress
+ * @param [out]
+ * accuracy - a new #LocationAccuracy
+ * @return int
+ * @retval 0                              Success
+ *
+ * Please refer #LocationError for more information.
+ * @see
+ * location_get_address_from_position_async\n
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+static GMainLoop *loop = NULL;
+
+int
+main (int argc, char *argv[])
+{
+       LocationObject *loc = NULL;
+       int ret = LOCATION_ERROR_NONE;
+
+       location_init ();
+
+       loop = g_main_loop_new (NULL, TRUE);
+
+       loc  = location_new (LOCATION_METHOD_GPS);
+       if(!loc){
+               g_debug("location_new failed");
+               return -1;
+       }
+
+       LocationPosition *pos = NULL;
+       LocationAccuracy *acc = NULL;
+       LocationAddress *addr = NULL;
+
+       //Calling application must have an active data connection before using this function.
+       pos = location_position_new (0, 37.257809, 127.056383, 0, LOCATION_STATUS_2D_FIX);
+       if (LOCATION_ERROR_NONE == location_get_address_from_position(loc, pos, &addr, &acc)) {
+               g_debug ("SYNC>> address from position> %s %s %s %s %s %s %s",
+                       addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
+               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+               location_address_free(addr);
+               location_accuracy_free(acc);
+       } else g_warning ("SYNC>> address from position> failed");
+       location_position_free (pos);
+}
+ * @endcode
+ */
+int location_get_address_from_position (LocationObject *obj, const LocationPosition *position, LocationAddress **address, LocationAccuracy **accuracy);
+
+/**
+ * @brief
+ * Get current address information asynchronously with estimate of the accuracy by using given position information.
+ * @remarks None.
+ * @pre
+ * #location_init should be called before.\n
+ * Calling application must have glib or ecore main loop.\n
+ * Calling application must have an active data connection.
+ * @post None.
+ * @param [in]
+ * obj - a #LocationObject created by #location_new
+ * @param [in]
+ * position - a #LocationPosition
+ * @param [in]
+ * callback - A pointer of function which will be called after address is gained or when an error occurs.
+ * @param [in]
+ * userdata - data to pass to function
+ * @return int
+ * @retval 0                              Success
+ *
+ * Please refer #LocationError for more information.
+ * @see
+ * location_get_address_from_position\n
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+static GMainLoop *loop = NULL;
+
+static void
+cb_address_from_position (LocationError error, LocationAddress *addr, LocationAccuracy *acc, gpointer userdata)
+{
+       g_debug ("ASYNC>> location_get_address_from_position_async> %s %s %s %s %s %s %s",
+                       addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
+       g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+}
+
+void get_address_from_position(LocationObject* loc)
+{
+       LocationPosition *pos = location_position_new (0, 37.257809, 127.056383, 0, LOCATION_STATUS_2D_FIX);
+       //Calling application must have an active data connection before using this function.
+       if (LOCATION_ERROR_NONE == location_get_address_from_position_async(loc, pos, cb_address_from_position, loc))
+               g_debug("location_get_address_from_position_async() success");
+       else g_warning ("location_get_address_from_position_async() failed");
+       location_position_free (pos);
+}
+ * @endcode
+ */
+int location_get_address_from_position_async (LocationObject *obj, const LocationPosition *position,   LocationAddressCB callback, gpointer userdata);
+
+/**
+ * @brief Request a search service from service provider.
+ * @remarks refer #LocationLandmark
+ * @pre #location_init should be called before.\n
+ *      #location_poi_pref_new should be set before.
+ * @post None.
+ * @param [in] obj - a #LocationObject created by #location_new
+ * @param [in] filter - a #LocaitonPOIFilter created by #location_poi_filter_new
+ * @param [in] position - a #LocationPosition
+ * @param [in] pref - a #LocationPOIPreference created by #location_poi_pref_new
+ * @param [in] cb - #LocationPOICB
+ * @param [in] user_data - data to pass to function
+ * @param [out] req_id - a guint
+ * @return int
+ * @retval 0                              Success
+ * Please refer #LocationError for more information.
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+
+static GMainLoop *loop = NULL;
+
+void PrintLandmarkCb (gpointer data, gpointer user_data)
+{
+       g_return_if_fail (data);
+
+       LocationLandmark *landmark = (LocationLandmark *)data;
+
+       g_debug ("id[%d], Priority[%d], Name:[%s], Author[%s], Phone[%s], Category[%s]\n", location_landmark_get_id (landmark),
+                                 location_landmark_get_priority(landmark),
+                                 location_landmark_get_name(landmark),
+                                 location_landmark_get_author(landmark),
+                                 location_landmark_get_phone_number(landmark),
+                                 location_landmark_get_category(landmark));
+}
+
+static void poi_cb(LocationError error, guint req_id, GList * landmark_list, gchar * error_code, gchar * error_msg, gpointer userdata)
+{
+       if (error != LOCATION_ERROR_NONE || landmark_list == NULL) {
+               g_debug ("Fail to get poi. Error[%d], ErrCode[%s], ErrMsg[%s]", error, error_code, error_msg);
+               return;
+       }
+       g_list_foreach (landmark_list, PrintLandmarkCb, NULL);
+}
+
+void search_poi(LocationObject* loc)
+{
+       int ret = 0;
+       guint req_id = 0;
+       LocationPosition *pos = location_position_new (0, 37.257809, 127.056383, 0, LOCATION_STATUS_2D_FIX);
+       LocationPOIFilter *filter = location_poi_filter_new();
+       LocationPOIPreference *pref = location_poi_pref_new();
+
+       location_poi_filter_set(filter, "CATEGORY", "restaurant");
+
+       location_poi_pref_set_max_result(pref, 5);
+       location_poi_pref_set_sort_by(pref, "name");
+       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);
+
+       ret = location_search_poi (loc, filter, pos, pref, poi_cb, loc, &req_id);
+       if (ret != LOCATION_ERROR_NONE) {
+               g_debug("Fail to get poi. Error[%d]", ret);
+       }
+
+       location_poi_filter_free(filter);
+       location_poi_pref_free(pref);
+       location_position_free(pos);
+
+}
+ * @endcode
+ */
+int location_search_poi (LocationObject *obj, const LocationPOIFilter * filter, const LocationPosition *position, const LocationPOIPreference * pref, LocationPOICB cb, gpointer user_data, guint * req_id);
+
+/**
+ * @brief Request a search service with area filter from service provider.
+ * @remarks refer #LocationLandmark
+ * @pre #location_init should be called before.\n
+ *      #location_poi_pref_new should be set before.
+ * @post None.
+ * @param [in] obj - a #LocationObject created by #location_new
+ * @param [in] filter - a #LocaitonPOIFilter created by #location_poi_filter_new
+ * @param [in] boundary - a #LocationBoundary
+ * @param [in] pref - a #LocationPOIPreference created by #location_poi_pref_new
+ * @param [in] cb - #LocationPOICB
+ * @param [in] user_data - data to pass to function
+ * @param [out] req_id - a guint
+ * @return int
+ * @retval 0                              Success
+ * Please refer #LocationError for more information.
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+
+static GMainLoop *loop = NULL;
+
+void PrintLandmarkCb (gpointer data, gpointer user_data)
+{
+       g_return_if_fail (data);
+
+       LocationLandmark *landmark = (LocationLandmark *)data;
+
+       g_debug ("id[%d], Priority[%d], Name:[%s], Author[%s], Phone[%s], Category[%s]\n", location_landmark_get_id (landmark),
+                                 location_landmark_get_priority(landmark),
+                                 location_landmark_get_name(landmark),
+                                 location_landmark_get_author(landmark),
+                                 location_landmark_get_phone_number(landmark),
+                                 location_landmark_get_category(landmark));
+}
+
+static void poi_cb(LocationError error, guint req_id, GList * landmark_list, gchar * error_code, gchar * error_msg, gpointer userdata)
+{
+       if (error != LOCATION_ERROR_NONE || landmark_list == NULL) {
+               g_debug ("Fail to get poi. Error[%d], ErrCode[%s], ErrMsg[%s]", error, error_code, error_msg);
+               return;
+       }
+       g_list_foreach (landmark_list, PrintLandmarkCb, NULL);
+}
+
+void search_poi(LocationObject* loc)
+{
+       int ret = 0;
+       guint req_id = 0;
+
+       LocationPosition* rb = location_position_new (0, 37.300, -121.86, 0, LOCATION_STATUS_2D_FIX);
+       LocationPosition* lt = location_position_new (0, 37.360, -121.92, 0, LOCATION_STATUS_2D_FIX);
+       LocationBoundary *bbox = location_boundary_new_for_rect (lt, rb);
+       LocationPOIFilter *filter = location_poi_filter_new();
+       LocationPOIPreference *pref = location_poi_pref_new();
+
+       location_poi_filter_set(filter, "CATEGORY", "restaurant");
+
+       location_poi_pref_set_max_result(pref, 5);
+       location_poi_pref_set_sort_by(pref, "name");
+       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);
+
+       ret = location_search_poi_by_area (loc, filter, bbox, pref, poi_cb, loc, &req_id);
+       if (ret != LOCATION_ERROR_NONE) {
+               g_debug("Fail to get poi. Error[%d]", ret);
+       }
+
+       location_poi_filter_free(filter);
+       location_poi_pref_free(pref);
+       location_boundary_free (bbox);
+}
+ * @endcode
+ */
+int location_search_poi_by_area (LocationObject *obj, const LocationPOIFilter * filter, const LocationBoundary * boundary, const LocationPOIPreference * pref, LocationPOICB cb, gpointer user_data, guint * req_id);
+
+/**
+ * @brief Request a search service with address filter from service provider.
+ * @remarks refer #LocationLandmark
+ * @pre #location_init should be called before.\n
+ *      #location_poi_pref_new should be set before.
+ * @post None.
+ * @param [in] obj - a #LocationObject created by #location_new
+ * @param [in] filter - a #LocaitonPOIFilter created by #location_poi_filter_new
+ * @param [in] address - a #LocationAddress
+ * @param [in] pref - a #LocationPOIPreference created by #location_poi_pref_new
+ * @param [in] cb - #LocationPOICB
+ * @param [in] user_data - data to pass to function
+ * @param [out] req_id - a guint
+ * @return int
+ * @retval 0                              Success
+ * Please refer #LocationError for more information.
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+
+static GMainLoop *loop = NULL;
+
+void PrintLandmarkCb (gpointer data, gpointer user_data)
+{
+       g_return_if_fail (data);
+
+       LocationLandmark *landmark = (LocationLandmark *)data;
+
+       g_debug ("id[%d], Priority[%d], Name:[%s], Author[%s], Phone[%s], Category[%s]\n", location_landmark_get_id (landmark),
+                                 location_landmark_get_priority(landmark),
+                                 location_landmark_get_name(landmark),
+                                 location_landmark_get_author(landmark),
+                                 location_landmark_get_phone_number(landmark),
+                                 location_landmark_get_category(landmark));
+}
+
+static void poi_cb(LocationError error, guint req_id, GList * landmark_list, gchar * error_code, gchar * error_msg, gpointer userdata)
+{
+       if (error != LOCATION_ERROR_NONE || landmark_list == NULL) {
+               g_debug ("Fail to get poi. Error[%d], ErrCode[%s], ErrMsg[%s]", error, error_code, error_msg);
+               return;
+       }
+       g_list_foreach (landmark_list, PrintLandmarkCb, NULL);
+}
+
+void search_poi(LocationObject* loc)
+{
+       int ret = 0;
+       guint req_id = 0;
+
+       LocationAddress *addr = location_address_new ("1", "Post Street", NULL, "san jose", "ca", NULL, "95113");
+       LocationPOIFilter *filter = location_poi_filter_new();
+       LocationPOIPreference *pref = location_poi_pref_new();
+
+       location_poi_filter_set(filter, "CATEGORY", "restaurant");
+
+       location_poi_pref_set_max_result(pref, 5);
+       location_poi_pref_set_sort_by(pref, "name");
+       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);
+
+       ret = location_search_poi_by_address (loc, filter, addr, pref, poi_cb, loc, &req_id);
+       if (ret != LOCATION_ERROR_NONE) {
+               g_debug("Fail to get poi. Error[%d]", ret);
+       }
+
+       location_poi_filter_free(filter);
+       location_poi_pref_free(pref);
+       location_address_free (addr);
+}
+ * @endcode
+ */
+int location_search_poi_by_address (LocationObject *obj, const LocationPOIFilter * filter, const LocationAddress * addr, const LocationPOIPreference * pref, LocationPOICB cb, gpointer user_data, guint * req_id);
+
+/**
+ * @brief Request a search service with area filter from service provider.
+ * @remarks refer #LocationLandmark
+ * @pre #location_init should be called before.\n
+ *      #location_poi_pref_new should be set before.
+ * @post None.
+ * @param [in] obj - a #LocationObject created by #location_new
+ * @param [in] filter - a #LocaitonPOIFilter created by #location_poi_filter_new
+ * @param [in] address - a freeformed address
+ * @param [in] pref - a #LocationPOIPreference created by #location_poi_pref_new
+ * @param [in] cb - #LocationPOICB
+ * @param [in] user_data - data to pass to function
+ * @param [out] req_id - a guint
+ * @return int
+ * @retval 0                              Success
+ * Please refer #LocationError for more information.
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+
+static GMainLoop *loop = NULL;
+
+void PrintLandmarkCb (gpointer data, gpointer user_data)
+{
+       g_return_if_fail (data);
+
+       LocationLandmark *landmark = (LocationLandmark *)data;
+
+       g_debug ("id[%d], Priority[%d], Name:[%s], Author[%s], Phone[%s], Category[%s]\n", location_landmark_get_id (landmark),
+                                 location_landmark_get_priority(landmark),
+                                 location_landmark_get_name(landmark),
+                                 location_landmark_get_author(landmark),
+                                 location_landmark_get_phone_number(landmark),
+                                 location_landmark_get_category(landmark));
+}
+
+static void poi_cb(LocationError error, guint req_id, GList * landmark_list, gchar * error_code, gchar * error_msg, gpointer userdata)
+{
+       if (error != LOCATION_ERROR_NONE || landmark_list == NULL) {
+               g_debug ("Fail to get poi. Error[%d], ErrCode[%s], ErrMsg[%s]", error, error_code, error_msg);
+               return;
+       }
+       g_list_foreach (landmark_list, PrintLandmarkCb, NULL);
+}
+
+void search_poi(LocationObject* loc)
+{
+       int ret = 0;
+       guint req_id = 0;
+
+       gchar *addr = g_strdup("4 N 2nd Street 95113");
+       LocationPOIFilter *filter = location_poi_filter_new();
+       LocationPOIPreference *pref = location_poi_pref_new();
+
+       location_poi_filter_set(filter, "CATEGORY", "restaurant");
+
+       location_poi_pref_set_max_result(pref, 5);
+       location_poi_pref_set_sort_by(pref, "name");
+       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);
+
+       ret = location_search_poi_by_freeformed_address (loc, filter, addr, pref, poi_cb, loc, &req_id);
+       if (ret != LOCATION_ERROR_NONE) {
+               g_debug("Fail to get poi. Error[%d]", ret);
+       }
+
+       location_poi_filter_free(filter);
+       location_poi_pref_free(pref);
+       g_free (addr);
+}
+ * @endcode
+ */
+int location_search_poi_by_freeformed_address (LocationObject *obj, const LocationPOIFilter * filter, const gchar * address, const LocationPOIPreference * pref, LocationPOICB cb, gpointer user_data, guint * req_id);
+
+/**
+ * @brief Cancel the previous poi search.
+ * @remarks refer #LocationLandmark
+ * @pre #location_search_poi should be called before.
+ * @post None.
+ * @param [in] obj - a #LocationObject created by #location_new
+ * @param [in] req_id - a poi request id returned by location_search_poi
+ * @return int
+ * @retval 0                              Success
+ * Please refer #LocationError for more information.
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+
+static GMainLoop *loop = NULL;
+
+void PrintLandmarkCb (gpointer data, gpointer user_data)
+{
+       g_return_if_fail (data);
+
+       LocationLandmark *landmark = (LocationLandmark *)data;
+
+       g_debug ("id[%d], Priority[%d], Name:[%s], Author[%s], Phone[%s], Category[%s]\n", location_landmark_get_id (landmark),
+                                 location_landmark_get_priority(landmark),
+                                 location_landmark_get_name(landmark),
+                                 location_landmark_get_author(landmark),
+                                 location_landmark_get_phone_number(landmark),
+                                 location_landmark_get_category(landmark));
+}
+
+static void poi_cb(LocationError error, guint req_id, GList * landmark_list, gchar * error_code, gchar * error_msg, gpointer userdata)
+{
+       if (error != LOCATION_ERROR_NONE || landmark_list == NULL) {
+               g_debug ("Fail to get poi. Error[%d], ErrCode[%s], ErrMsg[%s]", error, error_code, error_msg);
+               return;
+       }
+       g_list_foreach (landmark_list, PrintLandmarkCb, NULL);
+}
+
+void search_poi(LocationObject* loc)
+{
+       int ret = 0;
+       guint req_id = 0;
+
+       gchar *addr = g_strdup("4 N 2nd Street 95113");
+       LocationPOIFilter *filter = location_poi_filter_new();
+       LocationPOIPreference *pref = location_poi_pref_new();
+
+       location_poi_filter_set(filter, "CATEGORY", "restaurant");
+
+       location_poi_pref_set_max_result(pref, 5);
+       location_poi_pref_set_sort_by(pref, "name");
+       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);
+
+       ret = location_search_poi (loc, filter, addr, pref, poi_cb, loc, &req_id);
+       if (ret != LOCATION_ERROR_NONE) {
+               g_debug("Fail to get poi. Error[%d]", ret);
+       }
+
+       ret = location_cancel_poi_request (loc, req_id);
+       if (ret != LOCATION_ERROR_NONE) {
+               g_debug("Fail to cancel poi request. Err[%d]", ret);
+       }
+
+       location_poi_filter_free(filter);
+       location_poi_pref_free(pref);
+       g_free (addr);
+}
+ * @endcode
+ */
+int location_cancel_poi_request (LocationObject *obj, guint req_id);
+
+/**
+ * @brief Request a route service from service provider.
+ * @remarks refer #LocationRoute, #LocationRouteSegment and #LocationRouteStep
+ * @pre #location_new should be called before.
+ * @post None.
+ * @param [in] obj - a #LocationObject created by #location_new
+ * @param [in] origin - a #LocationPosition
+ * @param [in] destination - a #LocationPosition
+ * @param [in] waypoint - a list of #LocationPosition
+ * const LocationRoutePreference * pref, LocationRouteCB cb, gpointer user_data, guint * req_id);
+ * @param [in] pref - a #LocationRoutePreference created by #location_route_pref_new
+ * @param [in] cb - a #LocationRouteCB
+ * @param [in] user_data - a gpointer
+ * @param [out] req_id - a guint
+ * @return int
+ * @retval 0                              Success
+ * Please refer #LocationError for more information.
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+
+static void free_waypoint (gpointer data)
+{
+       LocationPosition *pos = (LocationPosition *)data;
+
+       if (pos) location_position_free(pos);
+}
+
+static void __print_route_step (gpointer data, gpointer user_data)
+{
+       g_printf("+++Step begin\n");
+       LocationRouteStep *step = (LocationRouteStep *)data;
+
+       const LocationPosition *start = location_route_step_get_start_point(step);
+       gdouble start_lat = 0;
+       gdouble start_lon = 0;
+       if (start) {
+               start_lat = start->latitude;
+               start_lon = start->longitude;
+       } else {
+               g_printf("Step start position NULL\n");
+       }
+       const LocationPosition *end = location_route_step_get_end_point(step);
+       gdouble end_lat = 0;
+       gdouble end_lon = 0;
+       if (end) {
+               end_lat = end->latitude;
+               end_lon = end->longitude;
+       } else {
+               g_printf("Step end postion NULL\n");
+       }
+       const gchar *inst = location_route_step_get_instruction(step);
+
+       g_printf("Step: start(%f/%f), end(%f/%f), instruction(%s)\n", start_lat, start_lon, end_lat, end_lon, inst);
+
+       g_printf("---Step end\n");
+}
+
+static void print_route_segment (gpointer data, gpointer user_data)
+{
+       g_printf("++Segment begin\n");
+       LocationRouteSegment *seg = (LocationRouteSegment *)data;
+       gdouble seg_dist = location_route_segment_get_distance(seg);
+       glong seg_duration = location_route_segment_get_duration(seg);
+       const LocationPosition *start = location_route_segment_get_start_point(seg);
+       gdouble start_lat = 0;
+       gdouble start_lon = 0;
+       if (start) {
+               start_lat = start->latitude;
+               start_lon = start->longitude;
+       } else {
+               g_printf("Segment start postion NULL\n");
+       }
+       const LocationPosition *end = location_route_segment_get_end_point(seg);
+       gdouble end_lat = 0;
+       gdouble end_lon = 0;
+       if (end) {
+               end_lat = end->latitude;
+               end_lon = end->longitude;
+       } else {
+               g_printf("Segment end postion NULL\n");
+       }
+       g_printf("Segment info: Distance[%f], Duration[%ld], start(%f/%f), end(%f/%f)\n", seg_dist, seg_duration,
+                       start_lat, start_lon, end_lat, end_lon);
+
+       GList *step_list = location_route_segment_get_route_step(seg);
+       GList *tmp_list = (GList *)step_list;
+       if (tmp_list) {
+               g_list_foreach(tmp_list, print_route_step, NULL);
+       }
+       g_printf("--Segment end\n");
+}
+
+
+static void print_route_list (gpointer data, gpointer user_data)
+{
+       g_printf("+Route begin\n");
+       LocationRoute *route = (LocationRoute *)data;
+
+       const LocationPosition *start = location_route_get_origin(route);
+       gdouble start_lat = 0;
+       gdouble start_lon = 0;
+       if (start) {
+               start_lat = start->latitude;
+               start_lon = start->longitude;
+       } else {
+               g_printf("Route start position NULL\n");
+       }
+       const LocationPosition *end = location_route_get_destination(route);
+       gdouble end_lat = 0;
+       gdouble end_lon = 0;
+       if (end) {
+               end_lat = end->latitude;
+               end_lon = end->longitude;
+       } else {
+               g_printf("Route end position NULL\n");
+       }
+       g_printf("Route: start(%f/%f), end(%f/%f)\n", start_lat, start_lon, end_lat, end_lon);
+
+       gdouble distance = location_route_get_total_distance(route);
+       const gchar *dis_unit = location_route_get_distance_unit(route);
+       glong duration = location_route_get_total_duration(route);
+       const LocationBoundary *bound = location_route_get_bounding_box(route);
+       if (bound && bound->type == LOCATION_BOUNDARY_RECT) {
+               g_printf("RECT left top[%f-%f], right bottom[%f-%f]\n", bound->rect.left_top->latitude, bound->rect.left_top->longitude,
+                       bound->rect.right_bottom->latitude, bound->rect.right_bottom->longitude);
+       } else {
+               g_printf("route boundary not exist, or not RECT\n");
+       }
+       g_printf ("Distance[%f], Distance unit[%s], Duration[%ld]\n", distance, dis_unit, duration);
+
+       GList *seg_list = location_route_get_route_segment(route);
+       if (seg_list) {
+               g_list_foreach(seg_list, print_route_segment, NULL);
+       }
+
+       g_printf("-Route end\n");
+}
+
+static void cb_route(LocationError error, guint req_id, GList * route_list, gchar * error_code, gchar * error_msg, gpointer userdata)
+{
+       if (error != LOCATION_ERROR_NONE) {
+               g_printf("Failed :%d\n", error);
+               return;
+       }
+
+       g_printf("Success, poi_list[0x%x] user_data[0x%x] req_id[%d]\n", (unsigned int)route_list, (unsigned int)userdata, req_id);
+       g_list_foreach (route_list, print_route_list, NULL);
+
+       if (error_code && error_msg) {
+               g_printf("cb_route: error_code[%s], error_msg[%s]\n", error_code, error_msg);
+       }
+}
+
+int request_route(LocationObject *loc)
+{
+       int ret = 0;
+       LocationPosition *origin = location_position_new(0, 37.564263, 126.974676, 0, LOCATION_STATUS_2D_FIX);  // Seoul city hall
+       LocationPosition *destination = location_position_new(0, 37.557120, 126.992410, 0, LOCATION_STATUS_2D_FIX);     // NamSan
+
+       GList *waypoint = NULL;
+       LocationPosition *via_pos = location_position_new(0, 37.560950, 126.986240, 0, LOCATION_STATUS_2D_FIX); // Wangsimli
+       waypoint = g_list_append (waypoint, (gpointer)via_pos);
+
+       LocationRoutePreference *pref = location_route_pref_new();
+       gchar *type = g_strdup("FASTEST");
+       location_route_pref_set_route_type(pref, type);
+
+       ret = location_request_route(loc, origin, destination, waypoint, pref, cb_route, NULL, &req_id);
+       if (ret != LOCATION_ERROR_NONE) {
+                       g_printf("Fail to search route by address. Error[%d]\n", ret);
+       } else {
+                       g_printf("Search Route successfully, req_id %d\n", req_id);
+       }
+
+       g_free(type);
+       g_list_free_full (waypoint, free_waypoint);
+       location_position_free(origin);
+       location_position_free(destination);
+       location_route_pref_free(pref);
+
+       return ret;
+ }
+ * @endcode
+ */
+int location_request_route (LocationObject *obj, LocationPosition *origin, LocationPosition *destination, GList *waypoint, const LocationRoutePreference * pref, LocationRouteCB cb, gpointer user_data, guint * req_id);
+
+/**
+ * @brief Cancel the previous route request.
+ * @remarks None
+ * @pre #location_request_route should be called before.
+ * @post None.
+ * @param [in] obj - a #LocationObject created by #location_new
+ * @param [in] req_id - a route request id returned by location_search_route
+ * @return int
+ * @retval 0                              Success
+ * Please refer #LocationError for more information.
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+
+int cancel_route_request (LocationObject *loc, guint req_id)
+{
+       g_printf("cancel_route_request\n");
+
+       int ret = LOCATION_ERROR_NONE;
+
+       ret = location_cancel_route_request(loc, req_id);
+       if (ret != LOCATION_ERROR_NONE) {
+               g_printf("Fail to cancel route request. Error[%d]\n", ret);
+       }
+       else {
+               g_printf("location_cancel_route_request, req_id %d\n", req_id);
+       }
+}
+ * @endcode
+ */
+int location_cancel_route_request (LocationObject *obj, guint req_id);
+
+/**
+ * @brief Check wheither a map service is available on a service provider
+ * @remarks None
+ * @pre #location_new should be called before.
+ * @post None.
+ * @param [in] obj - a #LocationObject created by #location_new
+ * @param [in] type - a #LocationMapService
+ * @return gboolean
+ * @retval TRUE if supported
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+
+int check_map_service (LocationObject *loc)
+{
+       g_printf("check_map_service\n");
+
+       gboolean is_supported = FALSE;
+
+       is_supported = location_is_supported_map_provider_capability(loc, MAP_SERVICE_ROUTE_REQUEST_FEATURE_TO_AVOID);
+       if (is_supported == TRUE) {
+               g_printf("Map Service(MAP_SERVICE_ROUTE_REQUEST_FEATURE_TO_AVOID) is supported.\n");
+       }
+       else {
+               g_printf("Map Service(MAP_SERVICE_ROUTE_REQUEST_FEATURE_TO_AVOID) is not supported.\n");
+       }
+}
+ * @endcode
+ */
+gboolean location_is_supported_map_provider_capability (LocationObject *obj, LocationMapServiceType type);
+
+/**
+ * @brief Get Map service key on a service provider
+ * @remarks None
+ * @pre #location_new should be called before.
+ * @post None.
+ * @param [in] obj - a #LocationObject created by #location_new
+ * @param [in] type - a #LocationMapService
+ * @return GList
+ * @retval a list of keys
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+
+static void _print_keys(gpointer data)
+{
+       g_return_if_fail(data);
+       gchar *key = (gchar *)data;
+
+       g_printf("Key[%s] is available now\n", key);
+}
+
+int get_map_service_key (LocationObject *loc)
+{
+       g_printf("check_map_service\n");
+
+       GList *keys = NULL;
+
+       keys = location_get_map_provider_capability_key(loc, MAP_SERVICE_ROUTE_REQUEST_FEATURE_TO_AVOID);
+       if (keys) {
+               g_list_foreach (keys, _print_keys, NULL);
+               g_list_free_full (keys, g_free);
+       }
+       else {
+               g_printf("Map Service(MAP_SERVICE_ROUTE_REQUEST_FEATURE_TO_AVOID) doesnot have keys. Need to check wheither its service is supported.\n");
+       }
+}
+ * @endcode
+ */
+int location_get_map_provider_capability_key (LocationObject *obj, LocationMapServiceType type, GList **key);
+
+/**
+ * @brief Get Map service Preference on a service provider
+ * @remarks None
+ * @pre #location_new should be called before.
+ * @post None.
+ * @param [in] obj - a #LocationObject created by #location_new
+ * @return #LocationPreference
+ * @retval a preference
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+       int get_map_service_pref (LocationObject loc)
+       {
+               if (!loc) return -1;
+
+               LocationPreference *svc_pref = location_get_map_service_pref (loc);
+               if (!svc_pref) return -1;
+
+               gchar *name = location_pref_get_provider_name (svc_pref);
+               gchar *unit = location_pref_get_distance_unit (svc_pref);
+               gchar *language = location_pref_get_language (svc_pref);
+
+               g_printf("provider [%s]: distance unit [%s], languange [%s]\n", name, unit, language);
+
+               return 0;
+       }
+
+ * @endcode
+ */
+LocationPreference *location_get_map_service_pref (LocationObject *obj);
+
+/**
+ * @brief Set Map service preference on a service provider
+ * @remarks None
+ * @pre #location_new should be called before.
+ * @post None.
+ * @param [in] obj - a #LocationObject created by #location_new
+ * @param [in] pref = a #LocationPreference
+ * @return gboolean
+ * @retval TRUE if success
+ * @par Example
+ * @code
+#include <location.h>
+#include <location-map-service.h>
+
+int set_map_service_pref (LocationObject *loc)
+{
+       if (!loc) return -1;
+
+       LocationPreference *svc_pref = location_pref_new();
+       location_pref_set_language (svc_pref, "en");
+       location_pref_set_distance_unit (svc_pref, "MI");
+
+       gboolean ret = location_set_map_service_pref (loc, svc_pref);
+       if (!ret) {
+               location_pref_pref (svc_pref);
+               return -1;
+       }
+       location_pref_pref (svc_pref);
+       return 0;
+}
+ * @endcode
+ */
+gboolean location_set_map_service_pref (LocationObject *obj, LocationPreference *pref);
+
+/**
+ * @} @}
+ */
+
+G_END_DECLS
+
+#endif /* __LOCATION_MAP_SERVICE_H__ */
diff --git a/location/map-service/location-poi.c b/location/map-service/location-poi.c
new file mode 100644 (file)
index 0000000..9dba262
--- /dev/null
@@ -0,0 +1,289 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "location-log.h"
+#include "location-types.h"
+#include "location-pref.h"
+
+#include "map-service.h"
+
+#include "location-poi.h"
+
+struct _LocationPOIPreference {
+       guint max_result_cnt;                            ///< Maximum number of results
+       LocationPOIPrefSortOrder sort_order;             ///< Sort order
+       gchar* item;                        ///< Sory by item
+       GHashTable *properties;
+};
+
+struct _LocationPOIFilter {
+       // "CATEGORY", "KEYWORD", "POINAME"
+       GHashTable *properties;
+};
+
+EXPORT_API guint
+location_poi_pref_get_max_result (const LocationPOIPreference *pref)
+{
+       g_return_val_if_fail(pref, 0);
+
+       return pref->max_result_cnt;
+}
+
+EXPORT_API gchar *
+location_poi_pref_get_sort_by (const LocationPOIPreference *pref)
+{
+       g_return_val_if_fail(pref, NULL);
+
+       return pref->item;
+}
+
+EXPORT_API LocationPOIPrefSortOrder
+location_poi_pref_get_sort_order (const LocationPOIPreference *pref)
+{
+       g_return_val_if_fail(pref, LOCATION_POI_PRE_SO_NONE);
+
+       return pref->sort_order;
+}
+
+EXPORT_API GList *
+location_poi_pref_get_property_key (const LocationPOIPreference *pref)
+{
+       g_return_val_if_fail (pref, NULL);
+       if (!pref->properties) return NULL;
+
+       return g_hash_table_get_keys (pref->properties);
+}
+
+EXPORT_API gpointer
+location_poi_pref_get_property (const LocationPOIPreference *pref, gconstpointer key)
+{
+       g_return_val_if_fail (pref, NULL);
+       g_return_val_if_fail (key, NULL);
+
+       if (!pref->properties) return NULL;
+
+       return g_hash_table_lookup (pref->properties, key);
+}
+
+
+EXPORT_API gboolean
+location_poi_pref_set_max_result (LocationPOIPreference *pref, guint max_num)
+{
+       g_return_val_if_fail(pref, FALSE);
+       g_return_val_if_fail(max_num > 0, FALSE);
+
+       pref->max_result_cnt = max_num;
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_poi_pref_set_sort_by(LocationPOIPreference * pref, const gchar * item)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       if (pref->item) {
+               g_free(pref->item);
+               pref->item = NULL;
+       }
+
+       if (item) pref->item = g_strdup(item);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_poi_pref_set_sort_order (LocationPOIPreference *pref, LocationPOIPrefSortOrder sort_order)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       if (sort_order < LOCATION_POI_PREF_SO_ASC || sort_order > LOCATION_POI_PREF_SO_DESC) return FALSE;
+
+       pref->sort_order = sort_order;
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_poi_pref_set_property (LocationPOIPreference *pref, gconstpointer key, gconstpointer value)
+{
+       g_return_val_if_fail(pref, FALSE);
+       g_return_val_if_fail(key, FALSE);
+       g_return_val_if_fail(pref->properties, FALSE);
+
+       if (value) {
+               gchar *re_key = g_strdup (key);
+               gchar *re_val = g_strdup (value);
+               g_hash_table_insert (pref->properties, re_key, re_val);
+       } else  g_hash_table_remove (pref->properties, key);
+
+       return TRUE;
+}
+
+EXPORT_API LocationPOIPreference *
+location_poi_pref_new (void)
+{
+       LocationPOIPreference *pref = g_slice_new0 (LocationPOIPreference);
+       g_return_val_if_fail(pref, NULL);
+
+       pref->sort_order = LOCATION_POI_PREF_SO_ASC;
+       pref->max_result_cnt = 25;
+       pref->properties = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+       return pref;
+}
+
+static void poi_pref_property_copy_cb (gpointer key, gpointer value, gpointer user_data)
+{
+       g_return_if_fail (key);
+       g_return_if_fail (value);
+       g_return_if_fail (user_data);
+
+       LocationPOIPreference *pref = (LocationPOIPreference *) user_data;
+       if (pref->properties) {
+               gchar *re_key = g_strdup (key);
+               gchar *re_val = g_strdup (value);
+               g_hash_table_insert (pref->properties, re_key, re_val);
+       }
+}
+
+EXPORT_API LocationPOIPreference *
+location_poi_pref_copy (LocationPOIPreference *pref)
+{
+       LocationPOIPreference *new_pref = location_poi_pref_new();
+       g_return_val_if_fail (new_pref, NULL);
+
+       location_poi_pref_set_sort_by(new_pref, location_poi_pref_get_sort_by(pref));
+       location_poi_pref_set_sort_order(new_pref, location_poi_pref_get_sort_order(pref));
+       location_poi_pref_set_max_result(new_pref, location_poi_pref_get_max_result(pref));
+
+       g_hash_table_foreach (pref->properties, poi_pref_property_copy_cb ,new_pref);
+
+       return new_pref;
+}
+
+EXPORT_API void
+location_poi_pref_free (LocationPOIPreference * pref)
+{
+       g_return_if_fail(pref);
+
+       location_poi_pref_set_sort_by(pref, NULL);
+       if (pref->properties) g_hash_table_destroy (pref->properties);
+
+       g_slice_free(LocationPOIPreference, pref);
+}
+
+EXPORT_API gboolean
+location_poi_filter_set (const LocationPOIFilter *filter, gconstpointer key, gconstpointer value)
+{
+       g_return_val_if_fail(filter, FALSE);
+       g_return_val_if_fail(key, FALSE);
+
+       if (filter->properties) {
+               if (value) {
+                       gchar *re_key = g_strdup (key);
+                       gchar *re_val = g_strdup (value);
+                       g_hash_table_insert (filter->properties, re_key, re_val);
+               } else  g_hash_table_remove (filter->properties, key);
+       }
+       else
+               return FALSE;
+
+       return TRUE;
+}
+
+EXPORT_API gpointer
+location_poi_filter_get (const LocationPOIFilter *filter, gconstpointer key)
+{
+       g_return_val_if_fail(filter, NULL);
+       g_return_val_if_fail(key, NULL);
+
+       if (filter->properties) {
+               return g_hash_table_lookup (filter->properties, key);
+       }
+       return NULL;
+}
+
+EXPORT_API GList *
+location_poi_filter_get_key (const LocationPOIFilter *filter)
+{
+       g_return_val_if_fail(filter, NULL);
+
+       if (filter->properties) {
+               return g_hash_table_get_keys (filter->properties);
+       }
+
+       return NULL;
+}
+
+EXPORT_API LocationPOIFilter *
+location_poi_filter_new (void)
+{
+       LocationPOIFilter *filter = g_slice_new0(LocationPOIFilter);
+       g_return_val_if_fail (filter, NULL);
+
+       filter->properties = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+       return filter;
+}
+
+static void poi_filter_copy_cb (gpointer key, gpointer value, gpointer user_data)
+{
+       g_return_if_fail (key);
+       g_return_if_fail (value);
+       g_return_if_fail (user_data);
+
+       LocationPOIFilter *filter = (LocationPOIFilter *) user_data;
+       if (filter->properties) {
+               gchar *re_key = g_strdup (key);
+               gchar *re_val = g_strdup (value);
+               g_hash_table_insert (filter->properties, re_key, re_val);
+       }
+}
+
+EXPORT_API LocationPOIFilter *
+location_poi_filter_copy (LocationPOIFilter *filter)
+{
+       g_return_val_if_fail (filter, NULL);
+
+       LocationPOIFilter * new_filter = location_poi_filter_new();
+       g_return_val_if_fail (new_filter, NULL);
+
+       if (new_filter->properties) g_hash_table_foreach (filter->properties, poi_filter_copy_cb, new_filter);
+
+       return new_filter;
+}
+
+EXPORT_API void
+location_poi_filter_free (LocationPOIFilter *filter)
+{
+       g_return_if_fail(filter);
+
+       if (filter->properties) {
+               g_hash_table_destroy (filter->properties);
+               filter->properties = NULL;
+       }
+       g_slice_free(LocationPOIFilter, filter);
+}
diff --git a/location/map-service/location-poi.h b/location/map-service/location-poi.h
new file mode 100644 (file)
index 0000000..8e5d20b
--- /dev/null
@@ -0,0 +1,282 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __LOCATION_POI_H__
+#define __LOCATION_POI_H__
+
+#include <location-types.h>
+
+G_BEGIN_DECLS
+
+/**
+ * @file location-poi.h
+ * @brief This file contains the internal definitions and structures related to POI.
+ */
+
+/**
+ * @addtogroup LocationMapService
+ * @{
+ * @defgroup LocationMapServicePOI Location POI
+ * @brief This is a location POI for providing location map services.
+ * @addtogroup LocationMapServicePOI
+ * @{
+ */
+
+typedef enum {
+       LOCATION_POI_PRE_SO_NONE,       ///< None of sorting the results in order.
+       LOCATION_POI_PREF_SO_ASC,       ///< A constant for sorting the results in ascending order
+       LOCATION_POI_PREF_SO_DESC       ///< A constant for sorting the results in descending order
+} LocationPOIPrefSortOrder;
+
+/**
+ * @brief Retrive LocationPreperence that the given LocationPOIPreference inherits.
+ */
+
+/**
+ * @brief Create a new LocationPOIPreference
+ * @remarks None.
+ * @pre None
+ * @post None.
+ * @return #LocationPOIPreference
+ * @retval NULL              if error occured
+ * @see location_location_poi_pref_free
+ *
+ */
+LocationPOIPreference *location_poi_pref_new (void);
+
+/**
+ * @brief Copy a LocationPOIPreference
+ * @remarks None.
+ * @pre None
+ * @post None.
+ * @return #LocationPOIPreference
+ * @retval NULL              if error occured
+ * @see location_location_poi_pref_free
+ *
+ */
+LocationPOIPreference *location_poi_pref_copy (LocationPOIPreference *pref);
+
+/**
+ * @brief Free a LocationPOIPreference
+ * @remarks None.
+ * @pre #location_poi_pref_new should be called before.
+ * @post None.
+ * @param [in] pref - #LocationPOIPreference
+ * @return #LocationPreference
+ * @retval NULL              if error occured
+ * @see location_location_poi_pref_set_pref
+ */
+void location_poi_pref_free (LocationPOIPreference * pref);
+
+/**
+ * @brief Get the maximum number of results for poi service.
+ * @remarks None.
+ * @pre #location_poi_pref_new should be called before.
+ * @post None.
+ * @param [in] pref - #LocationPOIPreference
+ * @return guint
+ * @retval 0              if error occured
+ * @see location_poi_pref_set_max_result
+ */
+guint location_poi_pref_get_max_result (const LocationPOIPreference * pref);
+
+/**
+ * @brief Get the sort criterion for poi service.
+ * @remarks None.
+ * @pre #location_poi_pref_new should be called before.
+ * @post None.
+ * @param [in] pref - #LocationPOIPreference
+ * @return gchar
+ * @retval sorting item
+ * @see location_poi_pref_set_sort_by
+ */
+gchar *location_poi_pref_get_sort_by (const LocationPOIPreference * pref);
+
+/**
+ * @brief Get the sort order for poi service.
+ * @remarks None.
+ * @pre #location_poi_pref_new should be called before.
+ * @post None.
+ * @param [in] pref - #LocationPOIPreference
+ * @return LocationPOIPrefSortOrder
+ * @retval sort order
+ * @see location_poi_pref_set_sort_order
+ */
+LocationPOIPrefSortOrder location_poi_pref_get_sort_order (const LocationPOIPreference * pref);
+
+/**
+ * @brief Get the property keys of poi preference
+ * @remarks None.
+ * @pre #location_poi_pref_new should be called before.
+ * @post None.
+ * @param [in] pref - #LocationPOIPreference
+ * @return GList
+ * @retval list of property key
+ * @see location_poi_pref_set_property
+ */
+GList *location_poi_pref_get_property_key (const LocationPOIPreference *pref);
+
+/**
+ * @brief Get the property of poi preference
+ * @remarks None.
+ * @pre #location_poi_pref_new should be called before.
+ * @post None.
+ * @param [in] pref - #LocationPOIPreference
+ * @param [in] key - gconstpointer
+ * @return gconstpointer
+ * @retval property value
+ * @see location_poi_pref_set_property
+ */
+gpointer location_poi_pref_get_property (const LocationPOIPreference *pref, gconstpointer key);
+
+
+/**
+ * @brief Set the maximum number of results for poi service.
+ * @remarks None.
+ * @pre #location_poi_pref_new should be called before.
+ * @post None.
+ * @param [in] pref - #LocationPOIPreference
+ * @return gboolean
+ * @retval TRUE              if success
+ * @see location_poi_pref_get_max_result
+ */
+gboolean location_poi_pref_set_max_result (LocationPOIPreference * pref, guint max_num);
+
+/**
+ * @brief Set the sort criterion for poi service.
+ * @remarks None.
+ * @pre #location_poi_pref_new should be called before.
+ * @post None.
+ * @param [in] pref - #LocationPOIPreference
+ * @param [in] item - gchar or NULL if reset
+ * @return gboolean
+ * @retval TRUE              if success
+ * @see location_poi_pref_get_sort_by
+ */
+gboolean location_poi_pref_set_sort_by (LocationPOIPreference * pref, const gchar * item);
+
+/**
+ * @brief Set the sort order for poi service.
+ * @remarks None.
+ * @pre #location_poi_pref_new should be called before.
+ * @post None.
+ * @param [in] pref - #LocationPOIPreference
+ * @param [in] sort_order - #LocationPOIPrefSortOrder
+ * @return gboolean
+ * @retval TRUE              if success
+ * @see location_poi_pref_get_sort_order
+ */
+gboolean location_poi_pref_set_sort_order (LocationPOIPreference *pref, LocationPOIPrefSortOrder sort_order);
+
+/**
+ * @brief Set property of poi preference.
+ * @remarks None.
+ * @pre #location_poi_pref_new should be called before.
+ * @post None.
+ * @param [in] pref - #LocationPOIPreference
+ * @param [in] key - gconstpoiner
+ * @param [in] value - gconstpointer or NULL if reset
+ * @return gboolean
+ * @retval TRUE              if success
+ * @see location_poi_pref_get_property
+ */
+gboolean location_poi_pref_set_property (LocationPOIPreference *pref, gconstpointer key, gconstpointer value);
+
+/**
+ * @brief Create a new LocationPOIFilter
+ * @remarks None
+ * @pre #location_init should be called before.
+ * @post None.
+ * @return a new #LocationPOIFilter
+ * @retval NULL              if error occured
+ * @see location_poi_filter_free
+ */
+LocationPOIFilter *location_poi_filter_new (void);
+
+/**
+ * @brief Copy a LocationPOIFilter
+ * @remarks None
+ * @pre #location_init should be called before.
+ * @post None.
+ * @return a #LocationPOIFilter
+ * @retval NULL              if error occured
+ * @see location_poi_filter_new
+ */
+LocationPOIFilter *location_poi_filter_copy (LocationPOIFilter *filter);
+
+/**
+ * @brief Free a LocationPOIFilter
+ * @remarks None
+ * @pre #location_new should be called before.
+ * @post None.
+ * @param [in] filter - #LocationPOIFilter
+ * @return None
+ * @see location_poi_filter_new
+ */
+void location_poi_filter_free (LocationPOIFilter *filter);
+
+/**
+ * @brief Set filter for poi service
+ * @remarks None
+ * @pre #location_poi_filter_new should be called before.
+ * @post None.
+ * @param [in] filter - #LocationPOIFilter
+ * @param [in] key - gconstpointer
+ * @param [in] value - gconstpointer or NULL if reset
+ * @return gboolean
+ * @retval TRUE              if success
+ * @see location_poi_filter_get
+ */
+gboolean location_poi_filter_set (const LocationPOIFilter *filter, gconstpointer key, gconstpointer value);
+
+/**
+ * @brief Get filter for poi service
+ * @remarks None
+ * @pre #location_poi_filter_new should be called before.
+ * @post None.
+ * @param [in] filter - #LocationPOIFilter
+ * @param [in] key - gconstpointer
+ * @return gconstpointer
+ * @retval Filter property key
+ * @see location_poi_filter_set
+ */
+gpointer location_poi_filter_get (const LocationPOIFilter *filter, gconstpointer key);
+
+/**
+ * @brief Get keys in the given filter
+ * @remarks The content of returned list is owned by the poi filter and should not be modified or freed. \n
+ * Use g_list_free when done using the returned.
+ * @pre #location_poi_filter_new should be called before.
+ * @post None.
+ * @param [in] filter - #LocationPOIFilter
+ * @return GList
+ * @retval Filter key
+ * @see None
+ */
+GList *location_poi_filter_get_key (const LocationPOIFilter *filter);
+
+/**
+ * @} @}
+ */
+
+G_END_DECLS
+
+#endif
diff --git a/location/map-service/location-pref.c b/location/map-service/location-pref.c
new file mode 100644 (file)
index 0000000..28f2abb
--- /dev/null
@@ -0,0 +1,222 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib.h>
+#include "location-types.h"
+#include "map-service.h"
+#include "location-pref.h"
+
+struct _LocationPreference {
+       gchar *provider_name;                ///< Name of the service provier
+    gchar *language;            ///< Language of the service preference.
+    gchar *country;                            ///< Country of the service preference.
+    gchar *distance_unit;          ///< Distance unit of the service preference.
+    GHashTable *properties;       ///< properties of the service preference.
+};
+
+EXPORT_API GList *
+location_pref_get_property_key (const LocationPreference *pref)
+{
+       g_return_val_if_fail (pref, NULL);
+
+       if (!pref->properties) return NULL;
+
+       return g_hash_table_get_keys (pref->properties);
+}
+
+EXPORT_API gchar *
+location_pref_get_language (const LocationPreference *pref)
+{
+       g_return_val_if_fail (pref, NULL);
+
+       return pref->language;
+}
+
+EXPORT_API gchar *
+location_pref_get_country (const LocationPreference *pref)
+{
+       g_return_val_if_fail (pref, NULL);
+
+       return pref->country;
+}
+
+EXPORT_API gchar *
+location_pref_get_distance_unit (const LocationPreference *pref)
+{
+       g_return_val_if_fail (pref, NULL);
+
+       return pref->distance_unit;
+}
+
+EXPORT_API gconstpointer
+location_pref_get_property (const LocationPreference *pref, gconstpointer key)
+{
+       g_return_val_if_fail (pref, NULL);
+       g_return_val_if_fail (key, NULL);
+       if (!pref->properties) return NULL;
+
+       return (gconstpointer) g_hash_table_lookup (pref->properties, key);
+}
+
+EXPORT_API gchar *
+location_pref_get_provider_name (const LocationPreference *pref)
+{
+       g_return_val_if_fail (pref, NULL);
+
+       return pref->provider_name;
+}
+
+EXPORT_API gboolean
+location_pref_set_provider_name (LocationPreference *pref, const gchar *name)
+{
+       g_return_val_if_fail (pref, FALSE);
+
+       if (pref->provider_name) {
+               g_free (pref->provider_name);
+               pref->provider_name = NULL;
+       }
+
+       if (name) pref->provider_name = g_strdup ((gchar *)name);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_pref_set_language (LocationPreference *pref, const gchar * language)
+{
+       g_return_val_if_fail (pref, FALSE);
+
+       if (pref->language) {
+               g_free (pref->language);
+               pref->language = NULL;
+       }
+
+       if (language) pref->language = g_strdup(language);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_pref_set_country (LocationPreference *pref, const gchar *country)
+{
+       g_return_val_if_fail (pref, FALSE);
+
+       if (pref->country) {
+               g_free (pref->country);
+               pref->country = NULL;
+       }
+
+       if (country) pref->country = g_strdup(country);
+
+       return TRUE;
+}
+
+
+EXPORT_API gboolean
+location_pref_set_distance_unit (LocationPreference *pref, const gchar * unit)
+{
+       g_return_val_if_fail (pref, FALSE);
+
+       if (pref->distance_unit) {
+               g_free (pref->distance_unit);
+               pref->distance_unit = NULL;
+       }
+
+       if (unit) pref->distance_unit = g_strdup (unit);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_pref_set_property (LocationPreference *pref, gconstpointer key, gconstpointer value)
+{
+       g_return_val_if_fail (pref, FALSE);
+       g_return_val_if_fail (key, FALSE);
+       if (!pref->properties) return FALSE;
+
+       if (value) {
+               gchar *re_key = g_strdup (key);
+               gchar *re_val = g_strdup (value);
+               g_hash_table_insert (pref->properties, re_key, re_val);
+       } else g_hash_table_remove (pref->properties, key);
+
+       return TRUE;
+}
+
+EXPORT_API LocationPreference *
+location_pref_new (void)
+{
+       LocationPreference *pref = g_slice_new0(LocationPreference);
+       if (!pref) return NULL;
+
+       pref->properties = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+       return pref;
+}
+
+static void property_copy (gpointer key, gpointer value, gpointer user_data)
+{
+       g_return_if_fail (key);
+       g_return_if_fail (value);
+       g_return_if_fail (user_data);
+
+       GHashTable *properties = (GHashTable *) user_data;
+
+       gchar *re_key = g_strdup (key);
+       gchar *re_val = g_strdup (value);
+       g_hash_table_insert (properties, re_key, re_val);
+}
+
+EXPORT_API LocationPreference *
+location_pref_copy (LocationPreference *pref)
+{
+       g_return_val_if_fail (pref, NULL);
+
+       LocationPreference *new_pref = location_pref_new();
+       if (!new_pref) return NULL;
+
+       location_pref_set_provider_name (new_pref, location_pref_get_provider_name(pref));
+       location_pref_set_language (new_pref, location_pref_get_language(pref));
+       location_pref_set_distance_unit (new_pref, location_pref_get_distance_unit(pref));
+
+
+       g_hash_table_foreach (pref->properties, property_copy, new_pref->properties);
+
+       return new_pref;
+}
+
+EXPORT_API void
+location_pref_free (LocationPreference * pref)
+{
+       g_return_if_fail(pref);
+
+       location_pref_set_provider_name (pref, NULL);
+       location_pref_set_language (pref, NULL);
+       location_pref_set_distance_unit (pref, NULL);
+       g_hash_table_destroy (pref->properties);
+
+       g_slice_free (LocationPreference, pref);
+       pref = NULL;
+}
diff --git a/location/map-service/location-pref.h b/location/map-service/location-pref.h
new file mode 100644 (file)
index 0000000..577eb17
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __LOCATION_PREF_H__
+#define __LOCATION_PREF_H__
+
+#include <location-types.h>
+
+G_BEGIN_DECLS
+
+/**
+ * @file location-pref.h
+ * @brief This file contains the internal definitions and structures related to a service provider.
+ * @addtogroup LocationMapService
+ * @{
+ * @defgroup LocationMapServiceProvider Service Provider
+ * @brief This represents preference and capability of Service providers
+ * @addtogroup LocationMapServiceProvider
+ * @{
+ */
+
+/**
+ * @brief Get provider name to be used in the service request
+ */
+gchar *location_pref_get_provider_name (const LocationPreference *pref);
+
+/**
+ * @brief Get language to be used in the service request.
+ */
+gchar *location_pref_get_language (const LocationPreference *pref);
+
+/**
+ * @brief Get country to be used in the service request.
+ */
+gchar *location_pref_get_country (const LocationPreference *pref);
+
+
+/**
+ * @brief Get the preferred length unit to be used in the service request.
+ */
+gchar *location_pref_get_distance_unit (const LocationPreference *pref);
+
+/**
+ * @brief Get available service of the service provider.
+ */
+GList *location_pref_get_property_key (const LocationPreference *pref);
+
+/**
+ * @brief Get property to be used in the service request.
+ */
+gconstpointer location_pref_get_property (const LocationPreference *pref, gconstpointer key);
+
+/**
+ * @brief Set provider's name to be used in the service request.
+ */
+gboolean location_pref_set_provider_name (LocationPreference *pref, const gchar *name);
+
+/**
+ * @brief Set language to be used in the service request.
+ */
+gboolean location_pref_set_language (LocationPreference *pref, const gchar *language);
+
+/**
+ * @brief Set country to be used in the service request.
+ */
+gboolean location_pref_set_country (LocationPreference *pref, const gchar *country);
+
+/**
+ * @brief Get the preferred length unit to be used in the service request.
+ */
+gboolean location_pref_set_distance_unit (LocationPreference *pref, const gchar * unit);
+
+/**
+ * @brief Set property to be used in the service request.
+ */
+gboolean location_pref_set_property (LocationPreference *pref, gconstpointer key, gconstpointer value);
+
+/**
+ * @brief Create a new LocationPreference.
+ */
+LocationPreference * location_pref_new (void);
+
+/**
+ * @brief Create a new LocationPreference.
+ */
+LocationPreference * location_pref_copy (LocationPreference *pref);
+
+
+/**
+ * @brief Free a LocationPreference.
+ */
+void location_pref_free (LocationPreference * pref);
+
+/**
+ * @} @}
+ */
+
+G_END_DECLS
+
+#endif /* __LOCATION_PREF_H__ */
+
+
+
diff --git a/location/map-service/location-route-ext.h b/location/map-service/location-route-ext.h
new file mode 100644 (file)
index 0000000..14f59cc
--- /dev/null
@@ -0,0 +1,362 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __LOCATION_ROUTE_EXT_H__
+#define __LOCATION_ROUTE_EXT_H__
+
+#include <location-types.h>
+
+G_BEGIN_DECLS
+
+/**
+ * @file location-route-ext.h
+ * @brief This file contains the extensional definitions and structures related to Route.
+ */
+/**
+ * @addtogroup LocationMapServiceRoute
+ * @{
+ * @defgroup LocationMapServiceRouteExt Location Route Ext
+ * @brief This provides Location Route Ext APIs.
+ * @addtogroup LocationMapServiceRouteExt
+ * @{
+ */
+
+/**
+ * @brief Set the origin #LocationPosition of #LocationRoute
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] route - a #LocationRoute
+ * @param [in] origin - a #LocationPosition
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_get_origin
+ */
+gboolean location_route_set_origin (LocationRoute *route, const LocationPosition* origin);
+
+/**
+ * @brief Set the destication #LocationPosition of #LocationRoute
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] route - a #LocationRoute
+ * @param [in] destination - a #LocationPosition
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_get_destination
+ */
+gboolean location_route_set_destination (LocationRoute *route, const LocationPosition* destination);
+
+/**
+ * @brief Set the bounding box #LocationBoundary of #LocationRoute
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] route - a #LocationRoute
+ * @param [in] bbox - a #LocationBoundary
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_get_bounding_box
+ */
+gboolean location_route_set_bounding_box (LocationRoute *route, const LocationBoundary* bbox);
+/**
+ * @brief Set the distance of #LocationRoute
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] route - a #LocationRoute
+ * @param [in] total_distance - gdouble
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_get_total_distance
+ */
+gboolean location_route_set_total_distance (LocationRoute *route, gdouble total_distance);
+
+/**
+ * @brief Set the distance unit of #LocationRoute
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] route - a #LocationRoute
+ * @param [in] distance_unit - gchar
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_get_distance_unit
+ */
+gboolean location_route_set_distance_unit (LocationRoute *route, const gchar* distance_unit);
+
+/**
+ * @brief Set the duration of #LocationRoute
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] route - a #LocationRoute
+ * @param [in] total_duration - glong
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_get_total_duration
+ */
+gboolean location_route_set_total_duration (LocationRoute *route, glong total_duration);
+
+/**
+ * @brief Set the propery value of #LocationRoute
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] route - a #LocationRoute
+ * @param [in] key - gconstpointer
+ * @param [in] value - gconstpointer
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_get_property
+ */
+gboolean location_route_set_property (LocationRoute *route, gconstpointer key, gconstpointer value);
+
+/**
+ * @brief Set the list of segments #LocationRouteSegment of #LocationRoute
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] route - a #LocationRoute
+ * @param [in] segment - a list of #LocationRouteSegment
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_get_route_segment
+ */
+gboolean location_route_set_route_segment (LocationRoute *route, GList* segment);
+
+/**
+ * @brief Set the start point #LocationPosition of #LocationRouteSegment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] segment - a #LocationRouteSegment
+ * @param [in] start - a #LocationPosition
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_segment_get_start_point
+ */
+gboolean location_route_segment_set_start_point (LocationRouteSegment *segment, const LocationPosition *start);
+
+/**
+ * @brief Set the end point #LocationPosition of #LocationRouteSegment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] segment - a #LocationRouteSegment
+ * @param [in] end - a #LocationPosition
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_segment_get_end_point
+ */
+gboolean location_route_segment_set_end_point (LocationRouteSegment *segment, const LocationPosition *end);
+
+/**
+ * @brief Set the bounding box #LocationBoundary of #LocationRouteSegment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] segment - a #LocationRouteSegment
+ * @param [in] bbox - a #LocationBoundary
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_segment_get_bounding_box
+ */
+gboolean location_route_segment_set_bounding_box (LocationRouteSegment *segment, const LocationBoundary *bbox);
+
+/**
+ * @brief Set the distance of #LocationRouteSegment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] segment - a #LocationRouteSegment
+ * @param [in] distance - gdouble
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_segment_get_distance
+ */
+gboolean location_route_segment_set_distance (LocationRouteSegment *segment, gdouble distance);
+
+/**
+ * @brief Set the duration of #LocationRouteSegment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] segment - a #LocationRouteSegment
+ * @param [in] duration - glong
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_segment_get_duration
+ */
+gboolean location_route_segment_set_duration (LocationRouteSegment *segment, glong duration);
+
+/**
+ * @brief Set the property value of #LocationRouteSegment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] segment - a #LocationRouteSegment
+ * @param [in] key - gconstpointer
+ * @param [in] value - gconstpointer
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_segment_get_property
+ */
+gboolean location_route_segment_set_property (LocationRouteSegment *segment, gconstpointer key, gconstpointer value);
+
+/**
+ * @brief Set the list of route steps #LocationRouteStep in #LocationRouteSegment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] segment - a #LocationRouteSegment
+ * @param [in] step - a list of #locationRouteStep
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_segment_get_route_step
+ */
+gboolean location_route_segment_set_route_step (LocationRouteSegment *segment, GList* step);
+
+/**
+ * @brief Set the start point #LocationPosition of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @param [in] start - a #LocationPosition
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_step_get_start_point
+ */
+gboolean location_route_step_set_start_point (LocationRouteStep *step, const LocationPosition *start);
+
+/**
+ * @brief Set the end point #LocationPosition of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @param [in] end - a #LocationPosition
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_step_get_end_point
+ */
+gboolean location_route_step_set_end_point (LocationRouteStep *step, const LocationPosition *end);
+
+/**
+ * @brief Set the bounding box #LocationBoundary of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @param [in] bbox - a #LocationBoundary
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_step_get_bounding_box
+ */
+gboolean location_route_step_set_bounding_box (LocationRouteStep *step, const LocationBoundary *bbox);
+
+/**
+ * @brief Set the distance of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @param [in] distance - gdouble
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_step_get_distance
+ */
+gboolean location_route_step_set_distance (LocationRouteStep *step, gdouble distance);
+
+/**
+ * @brief Set the duration of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @param [in] duration - glong
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_step_get_duration
+ */
+gboolean location_route_step_set_duration (LocationRouteStep *step, glong duration);
+
+/**
+ * @brief Set the transport mode of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @param [in] transport_mode - gchar
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_step_get_transport_mode
+ */
+gboolean location_route_step_set_transport_mode (LocationRouteStep *step, const gchar *transport_mode);
+
+/**
+ * @brief Set the instruction of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @param [in] instruction - gchar
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_step_get_instruction
+ */
+gboolean location_route_step_set_instruction (LocationRouteStep *step, const gchar *instruction);
+
+/**
+ * @brief Set the list of geometry #LocationPosition in #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @param [in] geometry - a list of #LocationPosition
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_step_get_geometry
+ */
+gboolean location_route_step_set_geometry (LocationRouteStep *step, GList *geometry);
+
+/**
+ * @brief Set the property value of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @param [in] key - gconstpointer
+ * @param [in] value - gconstpointer
+ * @return gboolean
+ * @retval  TRUE if success
+ * @see location_route_step_get_property
+ */
+gboolean location_route_step_set_property (LocationRouteStep *step, gconstpointer key, gconstpointer value);
+
+/**
+  * @} @}
+  */
+
+G_END_DECLS
+
+#endif
diff --git a/location/map-service/location-route.c b/location/map-service/location-route.c
new file mode 100644 (file)
index 0000000..7ffe8e5
--- /dev/null
@@ -0,0 +1,1372 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "location-types.h"
+#include "location-route.h"
+#include "location-route-ext.h"
+#include "location-boundary.h"
+#include "map-service.h"
+
+
+struct _LocationRoute {
+//     gint req_id;                            //< Request id : for expandability
+       LocationPosition *origin;               //< Coordinate StartCoord
+       LocationPosition *destination;          //< Coordinates destCoord
+       LocationBoundary *bbox;                 //< a rectangular geographical area
+       gdouble total_distance;                 //< Total distance
+       gchar *distance_unit;                   //< Distance Unit
+       glong total_duration;                   //< Total duration
+       GHashTable *properties;                 //<Key/Value>
+       GList *segment;
+};
+
+//Waypoints
+struct _LocationRouteSegment {
+       LocationPosition *start;        //< Coordinate StartCoord;
+       LocationPosition *end;          //< Coordinates destCoord;
+       LocationBoundary *bbox;         //< a rectangular geographical area
+       gdouble distance;
+       glong duration;
+       GHashTable *properties;         //<Key/Value>
+       GList *step;
+};
+
+// Each instruction
+struct _LocationRouteStep {
+       LocationPosition *start;        //< Coordinate StartCoord;
+       LocationPosition *end;          //< Coordinates destCoord;
+       LocationBoundary *bbox;         //< a rectangular geographical area
+       gdouble distance;
+       glong duration;
+       gchar *transport_mode;
+       gchar *instruction;
+       GList *geometry;
+
+       GHashTable *properties;
+};
+
+struct _LocationRoutePreference {
+       GList* addr_to_avoid;
+       GList* area_to_avoid;
+       GList* feature_to_avoid;
+       GList* freeformed_addr_to_avoid;
+       LocationBoundary* bbox;
+       guint max_matches_count;
+       gchar *distance_unit;
+
+       gchar *route_type;
+       gchar *transport_mode;
+       gboolean is_geometry_used;
+       gboolean is_instruction_bounding_box_used;
+       gboolean is_instruction_geometry_used;
+       gboolean is_instruction_used;
+       gboolean is_traffic_data_used;
+
+       // AvoidFreeways, Easy, Fastest, MoreFreeways, NoFreeways, Pedestrian, Shortest
+       GHashTable *properties;
+
+};
+
+static void route_pref_addr_to_avoid_copy_cb (gpointer data, gpointer user_data)
+{
+       g_return_if_fail(data);
+       g_return_if_fail(user_data);
+
+       LocationAddress *address = (LocationAddress *)data;
+       LocationRoutePreference *pref = (LocationRoutePreference *)user_data;
+
+       pref->addr_to_avoid = g_list_append (pref->addr_to_avoid, location_address_copy(address));
+}
+
+static void addr_to_avoid_free_cb (gpointer data)
+{
+       g_return_if_fail (data);
+
+       LocationAddress *addr = (LocationAddress *)data;
+
+       location_address_free (addr);
+}
+
+EXPORT_API gboolean
+location_route_pref_set_addr_to_avoid (LocationRoutePreference *pref, GList *addr)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       if (pref->addr_to_avoid) {
+               g_list_free_full (pref->addr_to_avoid, addr_to_avoid_free_cb);
+               pref->addr_to_avoid = NULL;
+       }
+
+       if (addr) g_list_foreach (addr, route_pref_addr_to_avoid_copy_cb, pref);
+
+       return TRUE;
+}
+
+static void route_pref_area_to_avoid_copy_cb (gpointer data, gpointer user_data)
+{
+       g_return_if_fail(data);
+       g_return_if_fail(user_data);
+
+       LocationBoundary *area = (LocationBoundary *)data;
+       LocationRoutePreference *pref = (LocationRoutePreference *)user_data;
+
+       pref->area_to_avoid = g_list_append (pref->area_to_avoid, location_boundary_copy((const LocationBoundary *)area));
+}
+
+static void route_pref_area_to_avoid_free_cb (gpointer data)
+{
+       g_return_if_fail (data);
+
+       LocationBoundary *boundary = (LocationBoundary *)data;
+
+       location_boundary_free (boundary);
+}
+
+EXPORT_API gboolean
+location_route_pref_set_area_to_avoid (LocationRoutePreference *pref, GList *area)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       if (pref->area_to_avoid) {
+               g_list_free_full (pref->area_to_avoid, route_pref_area_to_avoid_free_cb);
+               pref->area_to_avoid = NULL;
+       }
+
+       if (area) g_list_foreach (area, route_pref_area_to_avoid_copy_cb, pref);
+
+       return TRUE;
+}
+
+static void route_pref_feature_to_avoid_copy_cb (gpointer data, gpointer user_data)
+{
+       g_return_if_fail (data);
+       g_return_if_fail (user_data);
+
+       gchar *feature = (gchar *)data;
+       LocationRoutePreference *pref = (LocationRoutePreference *) user_data;
+
+       pref->feature_to_avoid = g_list_append (pref->feature_to_avoid, g_strdup (feature));
+}
+
+EXPORT_API gboolean
+location_route_pref_set_feature_to_avoid (LocationRoutePreference *pref, GList * feature)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       if (pref->feature_to_avoid) {
+               g_list_free_full (pref->feature_to_avoid, g_free);
+               pref->feature_to_avoid = NULL;
+       }
+
+       g_list_foreach (feature, route_pref_feature_to_avoid_copy_cb, pref);
+
+       return TRUE;
+}
+
+static void route_pref_freeforemd_addr_to_avoid_foreach_copy (gpointer data, gpointer user_data)
+{
+       g_return_if_fail(data);
+       g_return_if_fail(user_data);
+
+       gchar *freeformed_addr = (gchar *)data;
+       LocationRoutePreference *pref = (LocationRoutePreference *)user_data;
+
+       pref->freeformed_addr_to_avoid = g_list_append (pref->freeformed_addr_to_avoid, g_strdup(freeformed_addr));
+}
+
+EXPORT_API gboolean
+location_route_pref_set_freeformed_addr_to_avoid (LocationRoutePreference *pref, GList *freeformed_addr)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       if (pref->freeformed_addr_to_avoid) {
+               g_list_free_full (pref->freeformed_addr_to_avoid, g_free);
+               pref->freeformed_addr_to_avoid = NULL;
+       }
+
+       if (freeformed_addr) g_list_foreach (freeformed_addr, route_pref_freeforemd_addr_to_avoid_foreach_copy, pref);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_pref_set_bounding_box (LocationRoutePreference *pref, const LocationBoundary *bbox)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       if (pref->bbox) {
+               location_boundary_free (pref->bbox);
+               pref->bbox = NULL;
+       }
+
+       if (bbox) pref->bbox = location_boundary_copy (bbox);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_pref_set_max_result (LocationRoutePreference *pref, guint max_num)
+{
+       g_return_val_if_fail(pref, FALSE);
+       g_return_val_if_fail(max_num > 0, FALSE);
+
+       pref->max_matches_count = max_num;
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_pref_set_route_type (LocationRoutePreference *pref, const gchar *type)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       if (pref->route_type) {
+               g_free(pref->route_type);
+               pref->route_type = NULL;
+       }
+
+       if (type) pref->route_type = g_strdup (type);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_pref_set_transport_mode (LocationRoutePreference *pref, const gchar *mode)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       if (pref->transport_mode) {
+               g_free(pref->transport_mode);
+               pref->transport_mode = NULL;
+       }
+
+       if (mode) pref->transport_mode = g_strdup (mode);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_pref_set_geometry_used (LocationRoutePreference *pref, gboolean is_used)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       pref->is_geometry_used = is_used;
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_pref_set_instruction_bounding_box_used (LocationRoutePreference *pref, gboolean is_used)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       pref->is_instruction_bounding_box_used = is_used;
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_pref_set_instruction_geometry_used (LocationRoutePreference *pref, gboolean is_used)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       pref->is_instruction_geometry_used = is_used;
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_pref_set_instruction_used (LocationRoutePreference *pref, gboolean is_used)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       pref->is_instruction_used = is_used;
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_pref_set_traffic_data_used (LocationRoutePreference *pref, gboolean is_used)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       pref->is_traffic_data_used = is_used;
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_pref_set_property (LocationRoutePreference *pref, gconstpointer key, gconstpointer value)
+{
+       g_return_val_if_fail(pref, FALSE);
+       g_return_val_if_fail(key, FALSE);
+
+       if (value) {
+               gchar *re_key = g_strdup(key);
+               gchar *re_val = g_strdup(value);
+               g_hash_table_insert (pref->properties, re_key, re_val);
+       } else g_hash_table_remove (pref->properties, key);
+
+       return TRUE;
+}
+
+EXPORT_API GList *
+location_route_pref_get_addr_to_avoid (const LocationRoutePreference *pref)
+{
+       g_return_val_if_fail(pref, NULL);
+
+       return pref->addr_to_avoid;
+}
+
+EXPORT_API GList *
+location_route_pref_get_area_to_avoid (const LocationRoutePreference *pref)
+{
+       g_return_val_if_fail(pref, NULL);
+
+       return pref->area_to_avoid;
+}
+
+EXPORT_API GList *
+location_route_pref_get_feature_to_avoid (const LocationRoutePreference *pref)
+{
+       g_return_val_if_fail(pref, NULL);
+
+       return pref->feature_to_avoid;
+}
+
+EXPORT_API GList *
+location_route_pref_get_freeformed_addr_to_avoid (const LocationRoutePreference *pref)
+{
+       g_return_val_if_fail(pref, NULL);
+
+       return pref->freeformed_addr_to_avoid;
+}
+
+EXPORT_API LocationBoundary *
+location_route_pref_get_bounding_box (const LocationRoutePreference *pref)
+{
+       g_return_val_if_fail(pref, NULL);
+
+       return pref->bbox;
+}
+
+EXPORT_API guint
+location_route_pref_get_max_result (const LocationRoutePreference *pref)
+{
+       g_return_val_if_fail(pref, 0);
+
+       return pref->max_matches_count;
+}
+
+EXPORT_API gchar *
+location_route_pref_get_route_type (const LocationRoutePreference *pref)
+{
+       g_return_val_if_fail(pref, NULL);
+
+       return pref->route_type;
+}
+
+EXPORT_API gchar *
+location_route_pref_get_transport_mode (const LocationRoutePreference *pref)
+{
+       g_return_val_if_fail(pref, NULL);
+
+       return pref->transport_mode;
+}
+
+EXPORT_API gboolean
+location_route_pref_get_geometry_used (const LocationRoutePreference *pref)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       return pref->is_geometry_used;
+}
+
+EXPORT_API gboolean
+location_route_pref_get_instruction_bounding_box_used (const LocationRoutePreference *pref)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       return pref->is_instruction_bounding_box_used;
+}
+
+EXPORT_API gboolean
+location_route_pref_get_instruction_geometry_used (const LocationRoutePreference *pref)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       return pref->is_instruction_geometry_used;
+}
+
+EXPORT_API gboolean
+location_route_pref_get_instruction_used (const LocationRoutePreference *pref)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       return pref->is_instruction_used;
+}
+
+EXPORT_API gboolean
+location_route_pref_get_traffic_data_used (const LocationRoutePreference *pref)
+{
+       g_return_val_if_fail(pref, FALSE);
+
+       return pref->is_traffic_data_used;
+}
+
+EXPORT_API GList*
+location_route_pref_get_property_key (const LocationRoutePreference *pref)
+{
+       g_return_val_if_fail(pref, NULL);
+
+       return g_hash_table_get_keys(pref->properties);
+}
+
+EXPORT_API gpointer
+location_route_pref_get_property (const LocationRoutePreference *pref, gconstpointer key)
+{
+       g_return_val_if_fail(pref, NULL);
+       g_return_val_if_fail(key, NULL);
+
+       return g_hash_table_lookup(pref->properties, key);
+}
+
+EXPORT_API LocationRoutePreference *
+location_route_pref_new (void)
+{
+       LocationRoutePreference *pref = g_slice_new0(LocationRoutePreference);
+       g_return_val_if_fail (pref, NULL);
+
+       pref->properties = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+       return pref;
+}
+
+static void route_pref_property_copy_cb (gpointer key, gpointer value, gpointer user_data)
+{
+       g_return_if_fail(key);
+       g_return_if_fail(value);
+       g_return_if_fail(user_data);
+
+       LocationRoutePreference *pref = (LocationRoutePreference *)user_data;
+
+       if (pref->properties) {
+               gchar *re_key = g_strdup (key);
+               gchar *re_val = g_strdup (value);
+               g_hash_table_insert (pref->properties, re_key, re_val);
+       }
+}
+
+EXPORT_API LocationRoutePreference *
+location_route_pref_copy (const LocationRoutePreference *pref)
+{
+       g_return_val_if_fail(pref, NULL);
+
+       LocationRoutePreference *new_pref = location_route_pref_new();
+       g_return_val_if_fail (pref, NULL);
+
+       location_route_pref_set_addr_to_avoid(new_pref, location_route_pref_get_addr_to_avoid (pref));
+       location_route_pref_set_area_to_avoid(new_pref, location_route_pref_get_area_to_avoid (pref));
+       location_route_pref_set_feature_to_avoid(new_pref, location_route_pref_get_feature_to_avoid (pref));
+       location_route_pref_set_freeformed_addr_to_avoid(new_pref, location_route_pref_get_freeformed_addr_to_avoid (pref));
+       location_route_pref_set_bounding_box(new_pref, location_route_pref_get_bounding_box (pref));
+       location_route_pref_set_max_result(new_pref, location_route_pref_get_max_result (pref));
+       location_route_pref_set_route_type(new_pref, location_route_pref_get_route_type (pref));
+       location_route_pref_set_transport_mode(new_pref, location_route_pref_get_transport_mode (pref));
+       location_route_pref_set_geometry_used(new_pref, location_route_pref_get_geometry_used (pref));
+       location_route_pref_set_instruction_bounding_box_used(new_pref, location_route_pref_get_instruction_bounding_box_used (pref));
+       location_route_pref_set_instruction_geometry_used(new_pref, location_route_pref_get_instruction_geometry_used (pref));
+       location_route_pref_set_instruction_used(new_pref, location_route_pref_get_instruction_used (pref));
+       location_route_pref_set_traffic_data_used(new_pref, location_route_pref_get_traffic_data_used (pref));
+       location_route_pref_set_traffic_data_used(new_pref, location_route_pref_get_traffic_data_used (pref));
+
+       if (new_pref->properties) g_hash_table_foreach (pref->properties, route_pref_property_copy_cb, new_pref);
+
+       return new_pref;
+}
+
+
+EXPORT_API void
+location_route_pref_free (LocationRoutePreference *pref)
+{
+       g_return_if_fail(pref);
+
+       location_route_pref_set_addr_to_avoid(pref, NULL);
+       location_route_pref_set_area_to_avoid(pref, NULL);
+       location_route_pref_set_feature_to_avoid(pref, NULL);
+       location_route_pref_set_freeformed_addr_to_avoid(pref, NULL);
+       location_route_pref_set_bounding_box(pref, NULL);
+       location_route_pref_set_route_type(pref, NULL);
+       location_route_pref_set_transport_mode(pref, NULL);
+
+       if (pref->properties) {
+               g_hash_table_destroy (pref->properties);
+               pref->properties = NULL;
+       }
+
+       g_slice_free (LocationRoutePreference, pref);
+}
+
+/* for expandability
+EXPORT_API gint
+location_route_get_req_id (const LocationRoute *route)
+{
+       g_return_val_if_fail(route, 0);
+
+       return route->req_id;
+}
+*/
+
+EXPORT_API LocationPosition *
+location_route_get_origin (const LocationRoute *route)
+{
+       g_return_val_if_fail(route, NULL);
+
+       return route->origin;
+}
+
+EXPORT_API LocationPosition *
+location_route_get_destination (const LocationRoute *route)
+{
+       g_return_val_if_fail(route, NULL);
+
+       return route->destination;
+}
+
+EXPORT_API LocationBoundary *
+location_route_get_bounding_box (const LocationRoute *route)
+{
+       g_return_val_if_fail(route, NULL);
+
+       return route->bbox;
+}
+
+EXPORT_API gdouble
+location_route_get_total_distance (const LocationRoute *route)
+{
+       g_return_val_if_fail(route, 0.0);
+
+       return route->total_distance;
+}
+
+EXPORT_API gchar *
+location_route_get_distance_unit (const LocationRoute *route)
+{
+       g_return_val_if_fail(route, NULL);
+
+       return route->distance_unit;
+}
+
+EXPORT_API glong
+location_route_get_total_duration (const LocationRoute *route)
+{
+       g_return_val_if_fail(route, 0);
+
+       return route->total_duration;
+}
+
+EXPORT_API GList *
+location_route_get_property_key (const LocationRoute *route)
+{
+       g_return_val_if_fail(route, NULL);
+
+       return g_hash_table_get_keys(route->properties);
+}
+
+EXPORT_API gpointer
+location_route_get_property (const LocationRoute *route, gconstpointer key)
+{
+       g_return_val_if_fail(route, NULL);
+       g_return_val_if_fail(key, NULL);
+
+       return g_hash_table_lookup(route->properties, key);
+}
+
+EXPORT_API GList *
+location_route_get_route_segment (const LocationRoute *route)
+{
+       g_return_val_if_fail(route, NULL);
+
+       return route->segment;
+}
+
+/* for expandability
+EXPORT_API gboolean
+location_route_set_req_id (LocationRoute *route, gint req_id)
+{
+       g_return_val_if_fail(route, FALSE);
+
+       route->req_id = req_id;
+
+       return TRUE;
+}
+*/
+
+EXPORT_API gboolean
+location_route_set_origin (LocationRoute *route, const LocationPosition* origin)
+{
+       g_return_val_if_fail(route, FALSE);
+
+       if (route->origin) {
+               location_position_free(route->origin);
+               route->origin = NULL;
+       }
+
+       if (origin) route->origin = location_position_copy(origin);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_set_destination (LocationRoute *route, const LocationPosition* destination)
+{
+       g_return_val_if_fail(route, FALSE);
+
+       if (route->destination) {
+               location_position_free(route->destination);
+               route->destination = NULL;
+       }
+
+       if (destination) route->destination = location_position_copy(destination);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_set_bounding_box (LocationRoute *route, const LocationBoundary* bbox)
+{
+       g_return_val_if_fail(route, FALSE);
+
+       if (route->bbox) {
+               location_boundary_free(route->bbox);
+               route->bbox = NULL;
+       }
+
+       if (bbox) route->bbox = location_boundary_copy(bbox);
+
+       return TRUE;
+}
+
+EXPORT_API
+gboolean location_route_set_total_distance (LocationRoute *route, gdouble total_distance)
+{
+       g_return_val_if_fail(route, FALSE);
+
+       route->total_distance = total_distance;
+
+       return TRUE;
+}
+
+EXPORT_API
+gboolean location_route_set_distance_unit (LocationRoute *route, const gchar* distance_unit)
+{
+       g_return_val_if_fail(route, FALSE);
+
+       if (route->distance_unit) {
+               g_free(route->distance_unit);
+               route->distance_unit = NULL;
+       }
+
+       if (distance_unit) route->distance_unit = g_strdup(distance_unit);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_set_total_duration (LocationRoute *route, glong total_duration)
+{
+       g_return_val_if_fail(route, FALSE);
+
+       route->total_duration = total_duration;
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_set_property (LocationRoute *route, gconstpointer key, gconstpointer value)
+{
+       g_return_val_if_fail(route, FALSE);
+       g_return_val_if_fail(key, FALSE);
+       if (!route->properties) return FALSE;
+
+       if (value) {
+               gchar *re_key = g_strdup (key);
+               gchar *re_val = g_strdup (value);
+               g_hash_table_insert(route->properties, re_key, re_val);
+       } else g_hash_table_remove (route->properties, key);
+
+       return TRUE;
+}
+
+static void route_segment_foreach_copy (gpointer data, gpointer user_data)
+{
+       g_return_if_fail (data);
+
+       LocationRouteSegment *segment = (LocationRouteSegment *) data;
+       LocationRoute *route = (LocationRoute *) user_data;
+
+       route->segment = g_list_append (route->segment, location_route_segment_copy (segment));
+}
+
+static void route_segment_foreach_free (gpointer data)
+{
+       g_return_if_fail (data);
+
+       LocationRouteSegment *segment = (LocationRouteSegment *)data;
+
+       location_route_segment_free(segment);
+}
+
+
+EXPORT_API gboolean
+location_route_set_route_segment (LocationRoute *route, GList* segment)
+{
+       g_return_val_if_fail(route, FALSE);
+
+       if (route->segment) {
+               g_list_free_full (route->segment, route_segment_foreach_free);
+               route->segment = NULL;
+       }
+
+       if (segment) g_list_foreach (segment, route_segment_foreach_copy, route);
+
+       return TRUE;
+}
+
+EXPORT_API LocationRoute *
+location_route_new (void)
+{
+       LocationRoute *route = g_slice_new0(LocationRoute);
+       g_return_val_if_fail (route, NULL);
+
+       route->properties = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+       return route;
+}
+
+static void route_property_copy_cb (gpointer key, gpointer value, gpointer user_data)
+{
+       g_return_if_fail (key);
+       g_return_if_fail (value);
+       g_return_if_fail (user_data);
+
+       LocationRoute *route = (LocationRoute *)user_data;
+
+       if (route->properties) {
+               gchar *re_key = g_strdup (key);
+               gchar *re_val = g_strdup (value);
+               g_hash_table_insert (route->properties, re_key, re_val);
+       }
+}
+
+EXPORT_API LocationRoute *
+location_route_copy (const LocationRoute *route)
+{
+       g_return_val_if_fail(route, NULL);
+       LocationRoute *new_route = location_route_new();
+       g_return_val_if_fail(new_route, NULL);
+
+       location_route_set_origin (new_route, location_route_get_origin(route));
+       location_route_set_destination (new_route, location_route_get_destination(route));
+       location_route_set_bounding_box (new_route, location_route_get_bounding_box(route));
+       location_route_set_total_distance (new_route, location_route_get_total_distance(route));
+       location_route_set_distance_unit (new_route, location_route_get_distance_unit(route));
+       location_route_set_total_duration (new_route, location_route_get_total_duration(route));
+
+       g_list_foreach(route->segment, route_segment_foreach_copy, new_route);
+
+       if (route->properties) g_hash_table_foreach (route->properties, route_property_copy_cb, new_route);
+
+       return new_route;
+}
+
+EXPORT_API void
+location_route_free (LocationRoute *route)
+{
+       g_return_if_fail (route);
+
+       location_route_set_origin (route, NULL);
+       location_route_set_destination (route, NULL);
+       location_route_set_bounding_box (route, NULL);
+       location_route_set_distance_unit (route, NULL);
+       location_route_set_route_segment (route, NULL);
+
+       if (route->properties) {
+               g_hash_table_destroy (route->properties);
+               route->properties = NULL;
+       }
+
+       g_slice_free (LocationRoute, route);
+}
+
+EXPORT_API LocationPosition *
+location_route_segment_get_start_point (const LocationRouteSegment *segment)
+{
+       g_return_val_if_fail(segment, NULL);
+
+       return segment->start;
+}
+
+EXPORT_API LocationPosition *
+location_route_segment_get_end_point (const LocationRouteSegment *segment)
+{
+       g_return_val_if_fail(segment, NULL);
+
+       return segment->end;
+}
+
+EXPORT_API LocationBoundary *
+location_route_segment_get_bounding_box (const LocationRouteSegment *segment)
+{
+       g_return_val_if_fail(segment, NULL);
+
+       return segment->bbox;
+}
+
+EXPORT_API gdouble
+location_route_segment_get_distance (const LocationRouteSegment *segment)
+{
+       g_return_val_if_fail(segment, 0.0);
+
+       return segment->distance;
+}
+
+EXPORT_API glong
+location_route_segment_get_duration (const LocationRouteSegment *segment)
+{
+       g_return_val_if_fail(segment, 0);
+
+       return segment->duration;
+}
+
+EXPORT_API GList*
+location_route_segment_get_property_key (const LocationRouteSegment *segment)
+{
+       g_return_val_if_fail(segment, NULL);
+
+       return g_hash_table_get_keys(segment->properties);
+}
+
+EXPORT_API gpointer
+location_route_segment_get_property (const LocationRouteSegment *segment, gconstpointer key)
+{
+       g_return_val_if_fail(segment, NULL);
+       g_return_val_if_fail(key, NULL);
+
+       return g_hash_table_lookup(segment->properties, (gpointer) key);
+}
+
+EXPORT_API GList*
+location_route_segment_get_route_step (const LocationRouteSegment *segment)
+{
+       g_return_val_if_fail(segment, NULL);
+
+       return segment->step;
+}
+
+EXPORT_API gboolean
+location_route_segment_set_start_point (LocationRouteSegment *segment, const LocationPosition *start)
+{
+       g_return_val_if_fail (segment, FALSE);
+
+       if (segment->start) {
+               location_position_free(segment->start);
+               segment->start = NULL;
+       }
+
+       if (start) segment->start = location_position_copy (start);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_segment_set_end_point (LocationRouteSegment *segment, const LocationPosition *end)
+{
+       g_return_val_if_fail (segment, FALSE);
+
+       if (segment->end) {
+               location_position_free(segment->end);
+               segment->end = NULL;
+       }
+
+       if (end) segment->end = location_position_copy (end);
+
+       return TRUE;
+
+}
+
+EXPORT_API gboolean
+location_route_segment_set_bounding_box (LocationRouteSegment *segment, const LocationBoundary *bbox)
+{
+       g_return_val_if_fail (segment, FALSE);
+
+       if (segment->bbox) {
+               location_boundary_free(segment->bbox);
+               segment->bbox = NULL;
+       }
+
+       if (bbox) segment->bbox = location_boundary_copy (bbox);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_segment_set_distance (LocationRouteSegment *segment, gdouble distance)
+{
+       g_return_val_if_fail (segment, FALSE);
+
+       segment->distance = distance;
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_segment_set_duration (LocationRouteSegment *segment, glong duration)
+{
+       g_return_val_if_fail (segment, FALSE);
+
+       segment->duration = duration;
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_segment_set_property (LocationRouteSegment *segment, gconstpointer key, gconstpointer value)
+{
+       g_return_val_if_fail (segment, FALSE);
+       g_return_val_if_fail (key, FALSE);
+       if (!segment->properties) return FALSE;
+
+       if (value) {
+               gchar *re_key = g_strdup (key);
+               gchar *re_val = g_strdup (value);
+               g_hash_table_insert(segment->properties, re_key, re_val);
+       } else g_hash_table_remove (segment->properties, key);
+
+       return TRUE;
+}
+
+static void route_step_foreach_free (gpointer data)
+{
+       g_return_if_fail (data);
+
+       LocationRouteStep *step = (LocationRouteStep *) data;
+
+       location_route_step_free(step);
+}
+
+static void route_step_foreach_copy (gpointer data, gpointer user_data)
+{
+       g_return_if_fail (data);
+       g_return_if_fail (user_data);
+
+       LocationRouteStep *step = (LocationRouteStep *) data;
+       LocationRouteSegment *segment = (LocationRouteSegment *) user_data;
+
+       LocationRouteStep *step_new = location_route_step_copy(step);
+       segment->step = g_list_append(segment->step, step_new);
+
+}
+
+EXPORT_API gboolean
+location_route_segment_set_route_step (LocationRouteSegment *segment, GList* step)
+{
+       g_return_val_if_fail (segment, FALSE);
+
+       if (segment->step) {
+               g_list_free_full (segment->step, route_step_foreach_free);
+               segment->step = NULL;
+       }
+
+       if (step) g_list_foreach (step, route_step_foreach_copy, segment);
+
+       return TRUE;
+
+}
+
+EXPORT_API LocationRouteSegment *
+location_route_segment_new (void)
+{
+       LocationRouteSegment *segment = g_slice_new0 (LocationRouteSegment);
+       g_return_val_if_fail (segment, NULL);
+
+       segment->properties = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+       return segment;
+}
+
+static void segment_property_copy_cb (gpointer key, gpointer value, gpointer user_data)
+{
+       g_return_if_fail (key);
+       g_return_if_fail (value);
+       g_return_if_fail (user_data);
+
+       LocationRouteSegment *segment = (LocationRouteSegment *)user_data;
+
+       if (segment->properties) {
+               gchar *re_key = g_strdup (key);
+               gchar *re_val = g_strdup (value);
+               g_hash_table_insert (segment->properties, re_key, re_val);
+       }
+}
+
+EXPORT_API LocationRouteSegment *
+location_route_segment_copy (LocationRouteSegment *segment)
+{
+       g_return_val_if_fail(segment, NULL);
+
+       LocationRouteSegment *new_segment = location_route_segment_new();
+       g_return_val_if_fail(new_segment, NULL);
+
+       location_route_segment_set_start_point(new_segment, location_route_segment_get_start_point(segment));
+       location_route_segment_set_end_point(new_segment, location_route_segment_get_end_point(segment));
+       location_route_segment_set_bounding_box(new_segment, location_route_segment_get_bounding_box(segment));
+       location_route_segment_set_distance(new_segment, location_route_segment_get_distance(segment));
+       location_route_segment_set_duration(new_segment, location_route_segment_get_duration(segment));
+       location_route_segment_set_route_step(new_segment, location_route_segment_get_route_step(segment));
+
+       if (segment->properties) g_hash_table_foreach (segment->properties, segment_property_copy_cb, new_segment);
+
+       return new_segment;
+}
+
+EXPORT_API void
+location_route_segment_free (LocationRouteSegment *segment)
+{
+       g_return_if_fail(segment);
+
+       location_route_segment_set_start_point(segment, NULL);
+       location_route_segment_set_end_point(segment, NULL);
+       location_route_segment_set_bounding_box(segment, NULL);
+       location_route_segment_set_distance(segment, 0.0);
+       location_route_segment_set_duration(segment, 0);
+       location_route_segment_set_route_step(segment, NULL);
+
+       if (segment->properties) {
+               g_hash_table_destroy (segment->properties);
+               segment->properties = NULL;
+       }
+
+       g_slice_free(LocationRouteSegment, segment);
+}
+
+EXPORT_API LocationPosition*
+location_route_step_get_start_point (const LocationRouteStep *step)
+{
+       g_return_val_if_fail(step, NULL);
+
+       return step->start;
+}
+
+EXPORT_API LocationPosition*
+location_route_step_get_end_point (const LocationRouteStep *step)
+{
+       g_return_val_if_fail(step, NULL);
+
+       return step->end;
+}
+
+EXPORT_API LocationBoundary*
+location_route_step_get_bounding_box (const LocationRouteStep *step)
+{
+       g_return_val_if_fail(step, NULL);
+
+       return step->bbox;
+}
+
+EXPORT_API gdouble
+location_route_step_get_distance (const LocationRouteStep *step)
+{
+       g_return_val_if_fail(step, 0.0);
+
+       return step->distance;
+}
+
+EXPORT_API glong
+location_route_step_get_duration (const LocationRouteStep *step)
+{
+       g_return_val_if_fail(step, 0);
+
+       return step->duration;
+}
+
+EXPORT_API gchar*
+location_route_step_get_transport_mode (const LocationRouteStep *step)
+{
+       g_return_val_if_fail(step, NULL);
+
+       return step->transport_mode;
+}
+
+EXPORT_API gchar*
+location_route_step_get_instruction (const LocationRouteStep *step)
+{
+       g_return_val_if_fail(step, NULL);
+
+       return step->instruction;
+}
+
+EXPORT_API GList *
+location_route_step_get_geometry (const LocationRouteStep *step)
+{
+       g_return_val_if_fail(step, NULL);
+
+       return step->geometry;
+}
+
+EXPORT_API GList*
+location_route_step_get_property_key (const LocationRouteStep *step)
+{
+       g_return_val_if_fail(step, NULL);
+
+       return g_hash_table_get_keys (step->properties);
+}
+
+EXPORT_API gpointer
+location_route_step_get_property (const LocationRouteStep *step, gconstpointer key)
+{
+       g_return_val_if_fail(step, NULL);
+       g_return_val_if_fail(key, NULL);
+
+       return g_hash_table_lookup (step->properties, key);
+}
+
+EXPORT_API gboolean
+location_route_step_set_start_point (LocationRouteStep *step, const LocationPosition *start)
+{
+       g_return_val_if_fail (step, FALSE);
+
+       if (step->start) {
+               location_position_free (step->start);
+               step->start = NULL;
+       }
+
+       if (start) step->start = location_position_copy (start);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_step_set_end_point (LocationRouteStep *step, const LocationPosition *end)
+{
+       g_return_val_if_fail (step, FALSE);
+
+       if (step->end) {
+               location_position_free (step->end);
+               step->end = NULL;
+       }
+
+       if (end) step->end = location_position_copy (end);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_step_set_bounding_box (LocationRouteStep *step, const LocationBoundary *bbox)
+{
+       g_return_val_if_fail (step, FALSE);
+
+       if (step->bbox) {
+               location_boundary_free (step->bbox);
+               step->bbox = NULL;
+       }
+
+       if (bbox) step->bbox = location_boundary_copy (bbox);
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_step_set_distance (LocationRouteStep *step, gdouble distance)
+{
+       g_return_val_if_fail (step, FALSE);
+
+       step->distance = distance;
+
+       return TRUE;
+
+}
+
+EXPORT_API gboolean
+location_route_step_set_duration (LocationRouteStep *step, glong duration)
+{
+       g_return_val_if_fail (step, FALSE);
+
+       step->duration = duration;
+
+       return TRUE;
+}
+
+EXPORT_API gboolean
+location_route_step_set_transport_mode (LocationRouteStep *step, const gchar *transport_mode)
+{
+       g_return_val_if_fail (step, FALSE);
+
+       if (step->transport_mode) {
+               g_free(step->transport_mode);
+               step->transport_mode = NULL;
+       }
+
+       if (transport_mode) step->transport_mode = g_strdup(transport_mode);
+
+       return TRUE;
+
+}
+
+EXPORT_API gboolean
+location_route_step_set_instruction (LocationRouteStep *step, const gchar *instruction)
+{
+       g_return_val_if_fail (step, FALSE);
+
+       if (step->instruction) {
+               g_free(step->instruction);
+               step->instruction = NULL;
+       }
+
+       if (instruction) step->instruction = g_strdup(instruction);
+
+       return TRUE;
+
+}
+
+static void route_step_geometry_foreach_copy (gpointer data, gpointer user_data)
+{
+       g_return_if_fail (data);
+       g_return_if_fail (user_data);
+
+       LocationPosition *pos = (LocationPosition *)data;
+       LocationRouteStep *step = (LocationRouteStep *)user_data;
+
+       step->geometry = g_list_append (step->geometry, location_position_copy (pos));
+}
+
+static void route_step_geometry_free (gpointer data)
+{
+       g_return_if_fail (data);
+
+       LocationPosition *pos = (LocationPosition *)data;
+
+       location_position_free(pos);
+}
+
+EXPORT_API gboolean
+location_route_step_set_geometry (LocationRouteStep *step, GList *geometry)
+{
+       g_return_val_if_fail (step, FALSE);
+
+       if (step->geometry) {
+               g_list_free_full (step->geometry, route_step_geometry_free);
+               step->geometry = NULL;
+       }
+
+       if (geometry) g_list_foreach (geometry, route_step_foreach_copy, step);
+
+       return TRUE;
+
+}
+
+EXPORT_API gboolean
+location_route_step_set_property (LocationRouteStep *step, gconstpointer key, gconstpointer value)
+{
+       g_return_val_if_fail(step, FALSE);
+       g_return_val_if_fail(key, FALSE);
+
+       if (!step->properties) return FALSE;
+
+       if (value) {
+               gchar *re_key = g_strdup (key);
+               gchar *re_val = g_strdup (value);
+               g_hash_table_insert (step->properties, re_key, re_val);
+       }
+       else g_hash_table_remove (step->properties, key);
+
+       return TRUE;
+}
+
+EXPORT_API LocationRouteStep *
+location_route_step_new (void)
+{
+       LocationRouteStep *step = g_slice_new0 (LocationRouteStep);
+       g_return_val_if_fail(step, NULL);
+
+       step->properties = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+
+       return step;
+}
+
+static void step_property_copy_cb (gpointer key, gpointer value, gpointer user_data)
+{
+       g_return_if_fail (key);
+       g_return_if_fail (value);
+       g_return_if_fail (user_data);
+
+       LocationRouteStep *step = (LocationRouteStep *) user_data;
+
+       if (step->properties) {
+               gchar *re_key = g_strdup (key);
+               gchar *re_val = g_strdup (value);
+               g_hash_table_insert (step->properties, re_key, re_val);
+       }
+}
+
+
+EXPORT_API LocationRouteStep *
+location_route_step_copy (LocationRouteStep *step)
+{
+       g_return_val_if_fail(step, NULL);
+
+       LocationRouteStep *new_step = location_route_step_new ();
+       g_return_val_if_fail (new_step, NULL);
+
+       location_route_step_set_start_point (new_step, location_route_step_get_start_point(step));
+       location_route_step_set_end_point (new_step, location_route_step_get_end_point(step));
+       location_route_step_set_bounding_box (new_step, location_route_step_get_bounding_box(step));
+       location_route_step_set_distance (new_step, location_route_step_get_distance(step));
+       location_route_step_set_duration (new_step, location_route_step_get_duration(step));
+       location_route_step_set_instruction (new_step, location_route_step_get_instruction(step));
+       location_route_step_set_geometry (new_step, location_route_step_get_geometry(step));
+
+       if (step->properties) g_hash_table_foreach (step->properties, step_property_copy_cb, new_step);
+       return new_step;
+}
+
+EXPORT_API void
+location_route_step_free (LocationRouteStep *step)
+{
+       g_return_if_fail(step);
+
+       location_route_step_set_start_point (step, NULL);
+       location_route_step_set_end_point (step, NULL);
+       location_route_step_set_bounding_box (step, NULL);
+       location_route_step_set_distance (step, 0.0);
+       location_route_step_set_duration (step, 0);
+       location_route_step_set_instruction (step, NULL);
+       location_route_step_set_geometry (step, NULL);
+
+       if (step->properties) {
+               g_hash_table_destroy (step->properties);
+               step->properties = NULL;
+       }
+       g_slice_free(LocationRouteStep, step);
+}
diff --git a/location/map-service/location-route.h b/location/map-service/location-route.h
new file mode 100644 (file)
index 0000000..8bd8fa7
--- /dev/null
@@ -0,0 +1,873 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __LOCATION_ROUTE_H__
+#define __LOCATION_ROUTE_H__
+
+#include <location-types.h>
+
+G_BEGIN_DECLS
+
+/**
+ * @file location-route.h
+ * @brief This file contains the internal definitions and structures related to Route.
+ */
+
+/**
+ * @addtogroup LocationMapService
+ * @{
+ * @defgroup LocationMapServiceRoute Location Route
+ * @brief This is a Location Route for providing location map services.
+ * @addtogroup LocationMapServiceRoute
+ * @{
+ */
+
+/**
+ * @brief Create a new Location route preference
+ * @remarks None.
+ * @pre     #location_init should be called before.\n
+ * @post    None.
+ * @return a #LocationRoutePreference
+ * @retval NULL if error occured
+ * @see location_route_pref_free
+ */
+LocationRoutePreference *location_route_pref_new (void);
+
+/**
+ * @brief Copy Location route preference
+ * @remarks None.
+ * @pre     #location_init should be called before.\n
+ * @post    None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return a new #LocationRoutePreference
+ * @retval NULL if error occured
+ */
+LocationRoutePreference *location_route_pref_copy (const LocationRoutePreference *pref);
+
+/**
+ * @brief Free Location route preference
+ * @remarks None.
+ * @pre     #location_init should be called before.\n
+ * @post    None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @see location_route_pref_new
+ * @return None
+ * @retval None
+ */
+void location_route_pref_free (LocationRoutePreference * pref);
+
+/**
+ * @brief Get a list of address structures to be avoided in Location route preference
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return GList
+ * @retval list of #LocationAddress
+ * @see location_route_pref_set_addr_to_avoid
+ */
+GList *location_route_pref_get_addr_to_avoid (const LocationRoutePreference *pref);
+
+/**
+ * @brief Get a list of area to be avoided in Location route preference
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return GList
+ * @retval list of #LocationBoundary
+ * @see location_route_pref_set_area_to_avoid
+ */
+GList *location_route_pref_get_area_to_avoid (const LocationRoutePreference *pref);
+
+/**
+ * @brief Get a list of features to be avoided in Location route preference
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return GList
+ * @retval list of gchar
+ * @see location_route_pref_set_feature_to_avoid
+ */
+GList *location_route_pref_get_feature_to_avoid (const LocationRoutePreference *pref);
+
+/**
+ * @brief Get a list of freeformed address to be avoided in Location route preference
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return GList
+ * @retval list of gchar
+ * @see location_route_pref_set_freeformed_to_avoid
+ */
+GList *location_route_pref_get_freeformed_addr_to_avoid (const LocationRoutePreference *pref);
+
+/**
+ * @brief Get a list of bounding box to be avoided in Location route preference
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return #LocationBoundary
+ * @retval bounding box
+ * @see location_route_pref_set_addr_to_avoid
+ */
+LocationBoundary *location_route_pref_get_bounding_box (const LocationRoutePreference *pref);
+
+/**
+ * @brief Get a maximum number of matches returned from route service provider
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return guint
+ * @retval maximum number of matches
+ * @see location_route_pref_set_max_result
+ */
+guint location_route_pref_get_max_result (const LocationRoutePreference *pref);
+
+/**
+ * @brief Get a route type to be used in route service
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return gchar
+ * @retval route type
+ * @see location_route_pref_set_route_type
+ */
+gchar *location_route_pref_get_route_type (const LocationRoutePreference *pref);
+
+/**
+ * @brief Get a transport mode to be used in route service
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return gchar
+ * @retval transport mode
+ * @see location_route_pref_set_transport_mode
+ */
+gchar *location_route_pref_get_transport_mode (const LocationRoutePreference *pref);
+
+/**
+ * @brief Get whether the route service provider must provide the route geometry in the service requests
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return gboolean
+ * @retval TRUE                        if used
+ * @see location_route_pref_set_geometry_used
+ */
+gboolean location_route_pref_get_geometry_used (const LocationRoutePreference *pref);
+/**
+ * @brief Get whether the route service provider must provide the route instruction bounding box in the service requests
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return gboolean
+ * @retval TRUE                        if used
+ * @see location_route_pref_set_instruction_bounding_box_used
+ */
+gboolean location_route_pref_get_instruction_bounding_box_used (const LocationRoutePreference *pref);
+/**
+ * @brief Get whether the route service provider must provide the route geometry in the service requests
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return gboolean
+ * @retval TRUE                        if used
+ * @see location_route_pref_set_instruction_geometry_used
+ */
+gboolean location_route_pref_get_instruction_geometry_used (const LocationRoutePreference *pref);
+
+/**
+ * @brief Get whether the route service provider must provide the route instruction in the service requests
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return gboolean
+ * @retval TRUE                        if used
+ * @see location_route_pref_set_instruction_used
+ */
+gboolean location_route_pref_get_instruction_used (const LocationRoutePreference *pref);
+/**
+ * @brief Get whether the route service provider must provide traffic data in the service requests
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return gboolean
+ * @retval TRUE                        if used
+ * @see location_route_pref_set_traffic_data_used
+ */
+gboolean location_route_pref_get_traffic_data_used (const LocationRoutePreference *pref);
+/**
+ * @brief Get a list of Property Keys in #LocationRoutePreference
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return GList
+ * @retval list of property key
+ */
+GList *location_route_pref_get_property_key (const LocationRoutePreference *pref);
+/**
+ * @brief Get Property value in #LocationRoutePreference
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @return GList
+ * @retval property value
+ * @see location_route_pref_set_property
+ */
+gpointer location_route_pref_get_property (const LocationRoutePreference *pref, gconstpointer key);
+
+/**
+ * @brief Set a list of address structures to be avoided in #LocationRoutePreference
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @param [in]  addr - a list of #LocationAddress
+ * @return gboolean
+ * @retval TRUE                              if success
+ * @see location_route_pref_get_addr_to_avoid
+ */
+gboolean location_route_pref_set_addr_to_avoid (LocationRoutePreference * pref, GList *addr);
+
+/**
+ * @brief Set a list of area to be avoided in Location route preference
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @param [in]  area - a list of #LocationBoundary
+ * @return gboolean
+ * @retval TRUE                              if success
+ * @see location_route_pref_get_area_to_avoid
+ */
+gboolean location_route_pref_set_area_to_avoid (LocationRoutePreference * pref, GList *area);
+
+/**
+ * @brief Set a list of features to be avoided in Location route preference
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @param [in]  feature - a list of features
+ * @return gboolean
+ * @retval TRUE                              if success
+ * @see location_route_pref_get_feature_to_avoid
+ */
+gboolean location_route_pref_set_feature_to_avoid (LocationRoutePreference * pref, GList * feature);
+
+/**
+ * @brief Set a list of freeformed address to be avoided in Location route preference
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @param [in]  addr - a list of #gchar
+ * @return gboolean
+ * @retval TRUE                              if success
+ * @see location_route_pref_get_freeformed_addr_to_avoid
+ */
+gboolean location_route_pref_set_freeformed_addr_to_avoid (LocationRoutePreference *pref, GList * freeformed_addr);
+
+/**
+ * @brief Set a bounding box #LocationBoundary in Location route preference
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @param [in]  bbox - a #LocationBoundary
+ * @return gboolean
+ * @retval TRUE                              if success
+ * @see location_route_pref_get_bounding_box
+ */
+gboolean location_route_pref_set_bounding_box (LocationRoutePreference *pref, const LocationBoundary *boundary);
+
+/**
+ * @brief Set a maximum number of matches returned from route service provider
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @param [in]  max_num - a #gint
+ * @return gboolean
+ * @retval TRUE                              if success
+ * @see location_route_pref_set_max_result
+ */
+gboolean location_route_pref_set_max_result (LocationRoutePreference *pref, guint max_num);
+
+/**
+ * @brief Set a route type to be used in route service
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @param [in]  type - a #gchar
+ * @return gboolean
+ * @retval TRUE                              if success
+ * @see location_route_pref_get_route_type
+ */
+gboolean location_route_pref_set_route_type (LocationRoutePreference *pref, const gchar *type);
+
+/**
+ * @brief Set a transport mode to be used in route service
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @param [in]  mode - a #gchar
+ * @return gboolean
+ * @retval TRUE                              if success
+ * @see location_route_pref_get_transport_mode
+ */
+gboolean location_route_pref_set_transport_mode (LocationRoutePreference *pref, const gchar * mode);
+
+/**
+ * @brief Set whether the route service provider must provide the route geometry in the service requests
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @param [in]  is_used - a #gboolean
+ * @return gboolean
+ * @retval TRUE                              if success
+ * @see location_route_pref_get_geometry_used
+ */
+gboolean location_route_pref_set_geometry_used (LocationRoutePreference *pref, gboolean is_used);
+
+/**
+ * @brief Set whether the route service provider must provide the route instruction bounding box in the service requests
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @param [in]  is_used - a #gboolean
+ * @return gboolean
+ * @retval TRUE                              if success
+ * @see location_route_pref_get_instruction_bounding_box_used
+ */
+gboolean location_route_pref_set_instruction_bounding_box_used (LocationRoutePreference *pref, gboolean is_used);
+
+/**
+ * @brief Set whether the route service provider must provide the route geometry in the service requests
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @param [in]  is_used - a #gboolean
+ * @return gboolean
+ * @retval TRUE                              if success
+ * @see location_route_pref_get_instruction_geometry_used
+ */
+gboolean location_route_pref_set_instruction_geometry_used (LocationRoutePreference *pref, gboolean is_used);
+
+/**
+ * @brief Set whether the route service provider must provide the route instruction in the service requests
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @param [in]  is_used - a #gboolean
+ * @return gboolean
+ * @retval TRUE                              if success
+ * @see location_route_pref_get_instruction_used
+ */
+gboolean location_route_pref_set_instruction_used (LocationRoutePreference *pref, gboolean is_used);
+
+/**
+ * @brief Set whether the route service provider must provide traffic data in the service requests
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @param [in]  is_used - a #gboolean
+ * @return #gboolean
+ * @retval TRUE                              if success
+ * @see location_route_pref_get_traffic_data_used
+ */
+gboolean location_route_pref_set_traffic_data_used (LocationRoutePreference *pref, gboolean is_used);
+
+/**
+ * @brief Set Property in Location route proference
+ * @remarks The service provider should support route service.
+ * @pre #location_route_pref_new should be called before.
+ * @post None.
+ * @param [in]  pref - a #LocationRoutePreference
+ * @param [in]  key - a #gconstpointer
+ * @param [in]  value - a #gconstpointer
+ * @return gboolean
+ * @retval TRUE                              if success
+ * @see location_route_pref_get_property
+ */
+gboolean location_route_pref_set_property (LocationRoutePreference *pref, gconstpointer key, gconstpointer value);
+
+/**
+ * @defgroup LocationMapServiceRouteResult Location Route Result
+ * @brief This provides structure, enumeration and APIs for Route Result
+ * @addtogroup LocationMapServiceRouteResult
+ * @{
+ */
+/**
+ * @brief Create a new Location route
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @return #LocationRoute
+ * @retval a new location route
+ * @see location_route_free
+ */
+LocationRoute *location_route_new (void);
+/**
+ * @brief Copy Location route
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  route - a #LocationRoute
+ * @return #LocationRoute
+ * @retval a copied location route
+ */
+LocationRoute *location_route_copy (const LocationRoute *route);
+
+/**
+ * @brief Free #LocationRoute
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  route - a #LocationRoute
+ * @return void
+ * @retval None
+ */
+void location_route_free (LocationRoute *route);
+
+/**
+ * @brief Get the origin of Location route
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  route - a #LocationRoute
+ * @return #Location position
+ * @retval origin
+ * @see location_route_set_origin
+ */
+LocationPosition *location_route_get_origin (const LocationRoute *route);
+
+/**
+ * @brief Get the destination of Location route
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  route - a #LocationRoute
+ * @return #LocationPosition
+ * @retval destination
+ * @see location_route_set_destination
+ */
+LocationPosition *location_route_get_destination (const LocationRoute *route);
+
+/**
+ * @brief Get the bounding box of Location route
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  route - a #LocationRoute
+ * @return #LocationBoundary
+ * @retval bounding box
+ * @see location_route_set_bounding box
+ */
+LocationBoundary *location_route_get_bounding_box (const LocationRoute *route);
+
+/**
+ * @brief Get the total distance of Location route
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  route - a #LocationRoute
+ * @return gdouble
+ * @retval total distance
+ * @see location_route_set_total_distance
+ */
+gdouble location_route_get_total_distance (const LocationRoute *route);
+
+/**
+ * @brief Get the distance unit of Location route
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  route - a #LocationRoute
+ * @return gchar
+ * @retval distance unit
+ * @see location_route_set_distance_unit
+ */
+gchar *location_route_get_distance_unit (const LocationRoute *route);
+
+/**
+ * @brief Get the total duration of location route
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  route - a #LocationRoute
+ * @return glong
+ * @retval total duration
+ * @see location_route_set_total_duration
+ */
+glong location_route_get_total_duration (const LocationRoute *route);
+
+/**
+ * @brief Get the list of property key of Location route
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  route - a #LocationRoute
+ * @return GList
+ * @retval list of property keys
+ * @see location_route_set_property
+ */
+GList *location_route_get_property_key (const LocationRoute *route);
+
+/**
+ * @brief Get the property value of Location route
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  route - a #LocationRoute
+ * @return gconstpointer
+ * @retval property
+ * @see location_route_set_property
+ */
+gpointer location_route_get_property (const LocationRoute *route, gconstpointer key);
+
+/**
+ * @brief Get the list of segments in Location route
+ * @remarks The service provider should support route service.
+ * @post None.
+ * @pre None.
+ * @param [in]  route - a #LocationRoute
+ * @return GList
+ * @retval list of #LocationRouteSegment
+ * @see location_route_set_route_segment
+ */
+GList *location_route_get_route_segment (const LocationRoute *route);
+
+/**
+ * @brief Create a new Location route segment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @return #LocationPositionSegment
+ * @retval Location route segment
+ * @see location_route_segment_free
+ */
+LocationRouteSegment *location_route_segment_new (void);
+
+/**
+ * @brief Copy Location route segment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  segment - a #LocationRouteSegment
+ * @return #LocationRouteSegment
+ * @retval copied Location route segment
+ */
+LocationRouteSegment *location_route_segment_copy (LocationRouteSegment *segment);
+
+/**
+ * @brief Free Location route segment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  segment - a #LocationRouteSegment
+ * @return void
+ * @retval None.
+ * @see location_route_segment_new
+ */
+void location_route_segment_free (LocationRouteSegment *segment);
+
+/**
+ * @brief Get the start point #LocationPosition of #LocationRouteSegment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  segment - a #LocationRouteSegment
+ * @return void
+ * @retval None.
+ * @see location_route_segment_set_start_point
+ */
+LocationPosition *location_route_segment_get_start_point (const LocationRouteSegment *segment);
+
+/**
+ * @brief Get the end point #LocationPosition of #LocationRouteSegment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  segment - a #LocationRouteSegment
+ * @return void
+ * @retval None.
+ * @see location_route_segment_set_end_point
+ */
+LocationPosition *location_route_segment_get_end_point (const LocationRouteSegment *segment);
+
+/**
+ * @brief Get the bounding box #LocationBoundary of #LocationRouteSegment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  segment - a #LocationRouteSegment
+ * @return void
+ * @retval None.
+ * @see location_route_segment_set_bounding_box
+ */
+LocationBoundary *location_route_segment_get_bounding_box (const LocationRouteSegment *segment);
+
+/**
+ * @brief Get the distance of #LocationRouteSegment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  segment - a #LocationRouteSegment
+ * @return void
+ * @retval None.
+ * @see location_route_segment_set_distance
+ */
+gdouble location_route_segment_get_distance (const LocationRouteSegment *segment);
+
+/**
+ * @brief Get the duration #LocationRouteSegment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  segment - a #LocationRouteSegment
+ * @return void
+ * @retval None.
+ * @see location_route_segment_set_duration
+ */
+glong location_route_segment_get_duration (const LocationRouteSegment *segment);
+
+/**
+ * @brief Get the list of property keys of #LocationRouteSegment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  segment - a #LocationRouteSegment
+ * @return void
+ * @retval None.
+ * @see location_route_segment_set_property_key
+ */
+GList *location_route_segment_get_property_key (const LocationRouteSegment *segment);
+
+/**
+ * @brief Get the property value of #LocationRouteSegment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  segment - a #LocationRouteSegment
+ * @return void
+ * @retval None.
+ * @see location_route_segment_set_property
+ */
+gpointer location_route_segment_get_property (const LocationRouteSegment *segment, gconstpointer key);
+
+/**
+ * @brief Get the list of route steps #LocationRouteStep in #LocationRouteSegment
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in]  segment - a #LocationRouteSegment
+ * @return void
+ * @retval None.
+ * @see location_route_segment_set_route_step
+ */
+GList *location_route_segment_get_route_step (const LocationRouteSegment *segment);
+
+/**
+ * @brief Create a new #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param None.
+ * @return #LocationRouteStep
+ * @retval  route step
+ * @see location_route_step_free
+ */
+LocationRouteStep *location_route_step_new (void);
+
+/**
+ * @brief Copy #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @return #LocationRouteStep
+ * @retval  route step
+ * @see location_route_step_new
+ */
+LocationRouteStep *location_route_step_copy (LocationRouteStep *step);
+
+/**
+ * @brief Free #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @return void
+ * @retval  None
+ * @see location_route_step_new
+ */
+void location_route_step_free (LocationRouteStep *step);
+
+/**
+ * @brief Get the start point #LocationPosition of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @return #LocationPosition
+ * @retval  start point
+ * @see location_route_step_set_start_point
+ */
+LocationPosition *location_route_step_get_start_point (const LocationRouteStep *step);
+
+/**
+ * @brief Get the end point #LocationPosition of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @return #LocationPosition
+ * @retval  end point
+ * @see location_route_step_set_end_point
+ */
+LocationPosition *location_route_step_get_end_point (const LocationRouteStep *step);
+
+/**
+ * @brief Get the bounding box #LocationBoundary of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @return #LocationBoundary
+ * @retval  bounding box
+ * @see location_route_step_set_bounding_box
+ */
+LocationBoundary *location_route_step_get_bounding_box (const LocationRouteStep *step);
+
+/**
+ * @brief Get the distance of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @return gboolean
+ * @retval  distance
+ * @see location_route_step_set_distance
+ */
+gdouble location_route_step_get_distance (const LocationRouteStep *step);
+
+/**
+ * @brief Get the duration of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @return glong
+ * @retval  duration
+ * @see location_route_step_set_duration
+ */
+glong location_route_step_get_duration (const LocationRouteStep *step);
+
+/**
+ * @brief Get the transport mode of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @return gchar
+ * @retval  transport mode
+ * @see location_route_step_set_transport_mode
+ */
+gchar *location_route_step_get_transport_mode (const LocationRouteStep *step);
+
+/**
+ * @brief Get the instruction of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @return gchar
+ * @retval  instruction
+ * @see location_route_step_set_instruction
+ */
+gchar *location_route_step_get_instruction (const LocationRouteStep *step);
+
+/**
+ * @brief Get the list of geometry #LocationPosition of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @return GList
+ * @retval  a list of LocationPosition
+ * @see location_route_step_set_geometry
+ */
+GList *location_route_step_get_geometry (const LocationRouteStep *step);
+
+/**
+ * @brief Get the list of property key of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @return GList
+ * @retval  a list of property key
+ * @see location_route_step_set_property_key
+ */
+GList *location_route_step_get_property_key (const LocationRouteStep *step);
+
+/**
+ * @brief Get the property value of #LocationRouteStep
+ * @remarks The service provider should support route service.
+ * @pre None.
+ * @post None.
+ * @param [in] step - a #LocationRouteStep
+ * @param [in] key - a gconstpointer
+ * @return gpointer
+ * @retval  value
+ * @see location_route_step_set_property
+ */
+gpointer location_route_step_get_property (const LocationRouteStep *step, gconstpointer key);
+
+/**
+ * @} @} @}
+ */
+
+G_END_DECLS
+
+#endif
diff --git a/location/map-service/map-internal.c b/location/map-service/map-internal.c
new file mode 100644 (file)
index 0000000..0fcc499
--- /dev/null
@@ -0,0 +1,235 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "location-log.h"
+#include "location-types.h"
+#include "module-internal.h"
+#include "location-route.h"
+#include "location-ielement.h"
+#include "map-service.h"
+
+int
+map_service_get_geocode (LocationIElement *self,
+       const LocationAddress *address,
+       GList **position_list,
+       GList **accuracy_list)
+{
+       LOCATION_LOGD("map_service_get_geocode");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->ops.get_geocode, LOCATION_ERROR_NOT_AVAILABLE);
+       return (priv->mod->ops.get_geocode)(priv->mod->handler, address, position_list, accuracy_list);
+}
+
+int
+map_service_get_geocode_freeform (LocationIElement *self,
+       const gchar  *address,
+       GList **position_list,
+       GList **accuracy_list)
+{
+       LOCATION_LOGD("map_service_get_geocode_freeform");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->ops.get_geocode_freetext, LOCATION_ERROR_NOT_AVAILABLE);
+       return (priv->mod->ops.get_geocode_freetext)(priv->mod->handler, address, position_list, accuracy_list);
+}
+
+int
+map_service_get_reversegeocode (LocationIElement *self,
+       const LocationPosition *position,
+       LocationAddress **address,
+       LocationAccuracy **accuracy)
+{
+       LOCATION_LOGD("map_service_get_reversegeocode");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->ops.get_reverse_geocode, LOCATION_ERROR_NOT_AVAILABLE);
+       return (priv->mod->ops.get_reverse_geocode)(priv->mod->handler, position, address, accuracy);
+}
+
+int
+map_service_get_geocode_async (LocationIElement *self,
+       LocationAddress *address,
+       LocationPositionCB callback,
+       gpointer userdata)
+{
+       LOCATION_LOGD("map_service_get_geocode_async");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->ops.get_geocode_async, LOCATION_ERROR_NOT_AVAILABLE);
+       return (priv->mod->ops.get_geocode_async)(priv->mod->handler, address, callback, userdata);
+}
+
+int
+map_service_get_geocode_freeform_async (LocationIElement *self,
+       const gchar *address,
+       LocationPositionCB callback,
+       gpointer userdata)
+{
+       LOCATION_LOGD("map_service_get_geocode_freeform_async");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->ops.get_geocode_freetext_async, LOCATION_ERROR_NOT_AVAILABLE);
+       return (priv->mod->ops.get_geocode_freetext_async)(priv->mod->handler, address, callback, userdata);
+}
+
+int
+map_service_get_reversegeocode_async (LocationIElement *self,
+       const LocationPosition *position,
+       LocationAddressCB callback,
+       gpointer userdata)
+{
+       LOCATION_LOGD("map_service_get_reversegeocode_async");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->ops.get_reverse_geocode_async, LOCATION_ERROR_NOT_AVAILABLE);
+       return (priv->mod->ops.get_reverse_geocode_async)(priv->mod->handler, position, callback, userdata);
+}
+
+int
+map_service_search_poi (LocationIElement *self,
+               const LocationPOIFilter *filter, const LocationPosition *position,
+               const LocationPreference *svc_pref, const LocationPOIPreference *pref,
+               LocationPOICB cb, const gpointer user_data, guint *req_id)
+{
+       LOCATION_LOGD("map_service_search_poi");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->ops.search_poi, LOCATION_ERROR_NOT_AVAILABLE);
+       return (priv->mod->ops.search_poi)(priv->mod->handler, filter, position, svc_pref, pref, cb, user_data, req_id);
+}
+
+int
+map_service_search_poi_by_area (LocationIElement *self,
+               const LocationPOIFilter * filter, const LocationBoundary *boundary,
+               const LocationPreference *svc_pref, const LocationPOIPreference * pref,
+               LocationPOICB cb, const gpointer user_data, guint *req_id)
+{
+       LOCATION_LOGD("map_service_search_poi_by_area");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->ops.search_poi_by_area, LOCATION_ERROR_NOT_AVAILABLE);
+       return (priv->mod->ops.search_poi_by_area)(priv->mod->handler, filter, boundary, svc_pref, pref, cb, user_data, req_id);
+}
+
+int
+map_service_search_poi_by_address (LocationIElement *self,
+               const LocationPOIFilter *filter, const LocationAddress *address,
+               const LocationPreference *svc_pref, const LocationPOIPreference *pref,
+                                               LocationPOICB cb, const gpointer user_data, guint *req_id)
+{
+       LOCATION_LOGD("map_service_search_poi_by_address");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->ops.search_poi_by_address, LOCATION_ERROR_NOT_AVAILABLE);
+       return (priv->mod->ops.search_poi_by_address)(priv->mod->handler, filter, address, svc_pref, pref, cb, user_data, req_id);
+}
+
+int
+map_service_search_poi_by_freeform (LocationIElement *self,
+               const LocationPOIFilter *filter, const gchar *freeform,
+               const LocationPreference *svc_pref, const LocationPOIPreference *pref,
+               LocationPOICB cb, const gpointer user_data, guint *req_id)
+{
+       LOCATION_LOGD("map_service_search_poi_by_freeform");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->ops.search_poi_by_freeform, LOCATION_ERROR_NOT_AVAILABLE);
+       return (priv->mod->ops.search_poi_by_freeform)(priv->mod->handler, filter, freeform, svc_pref, pref, cb, user_data, req_id);
+}
+
+int
+map_service_cancel_poi_request (LocationIElement *self, guint req_id)
+{
+       LOCATION_LOGD("map_service_cancel_poi_request");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->ops.cancel_poi_request, LOCATION_ERROR_NOT_AVAILABLE);
+       return (priv->mod->ops.cancel_poi_request)(priv->mod->handler, req_id);
+}
+
+
+int
+map_service_request_route (LocationIElement *self,
+               const LocationPosition *origin, const LocationPosition *destination, GList *waypoint,
+               const LocationPreference *svc_pref, const LocationRoutePreference * pref,
+               LocationRouteCB cb, const gpointer user_data, guint * req_id)
+{
+       LOCATION_LOGD("map_service_request_route");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->ops.request_route, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return (priv->mod->ops.request_route)(priv->mod->handler, origin, destination, waypoint, svc_pref, pref, cb, user_data, req_id);
+}
+
+int
+map_service_cancel_route_request (LocationIElement *self, guint req_id)
+{
+       LOCATION_LOGD("map_service_cancel_route_request");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->ops.cancel_route_request, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return (priv->mod->ops.cancel_route_request)(priv->mod->handler, req_id);
+}
+
+gboolean
+map_service_is_supported_map_provider_capability (LocationIElement *self, LocationMapServiceType type)
+{
+       LOCATION_LOGD("map_service_is_supported_map_provider_capability");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->ops.is_supported_map_provider_capability, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return (priv->mod->ops.is_supported_map_provider_capability)(priv->mod->handler, type);
+}
+
+int
+map_service_get_map_provider_capability_key (LocationIElement *self, LocationMapServiceType type, GList **key)
+{
+       LOCATION_LOGD("map_service_get_map_provider_capability_key");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+       g_return_val_if_fail (priv->mod, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->handler, LOCATION_ERROR_NOT_AVAILABLE);
+       g_return_val_if_fail (priv->mod->ops.get_map_provider_capability_key, LOCATION_ERROR_NOT_AVAILABLE);
+
+       return (priv->mod->ops.get_map_provider_capability_key)(priv->mod->handler, type, key);
+}
+
diff --git a/location/map-service/map-internal.h b/location/map-service/map-internal.h
new file mode 100644 (file)
index 0000000..09aded7
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __MAP_INTERNAL_H__
+#define __MAP_INTERNAL_H__
+
+#include "location-types.h"
+#include "location-ielement.h"
+
+/**
+ * @file map-internal.h
+ * @brief This file contains the internal definitions and structures related to geocode.
+ */
+
+G_BEGIN_DECLS
+
+int map_service_get_geocode (LocationIElement *self, const LocationAddress *address, GList **position_list, GList **accuracy_list);
+
+int map_service_get_geocode_freeform (LocationIElement *self, const gchar  *address, GList **position_list, GList **accuracy_list);
+
+int map_service_get_reversegeocode (LocationIElement *self, const LocationPosition *position, LocationAddress **address, LocationAccuracy **accuracy);
+
+int map_service_get_geocode_async (LocationIElement *self, LocationAddress *address, LocationPositionCB callback, gpointer userdata);
+
+int map_service_get_geocode_freeform_async (LocationIElement *self, const gchar *address, LocationPositionCB callback, gpointer userdata);
+
+int map_service_get_reversegeocode_async (LocationIElement *self, const LocationPosition *position, LocationAddressCB callback, gpointer userdata);
+
+int map_service_search_poi (LocationIElement *self,
+               const LocationPOIFilter *filter, const LocationPosition *position,
+               const LocationPreference *svc_pref, const LocationPOIPreference *pref,
+               LocationPOICB cb, const gpointer user_data, guint * req_id);
+
+int map_service_search_poi_by_area (LocationIElement *self,
+               const LocationPOIFilter *filter, const LocationBoundary *boundary,
+               const LocationPreference *svc_pref, const LocationPOIPreference *pref,
+               LocationPOICB cb, const gpointer user_data, guint * req_id);
+
+int map_service_search_poi_by_address (LocationIElement *self,
+               const LocationPOIFilter *filter, const LocationAddress *address,
+               const LocationPreference *svc_pref, const LocationPOIPreference *pref,
+               LocationPOICB cb, const gpointer user_data, guint * req_id);
+
+int map_service_search_poi_by_freeform (LocationIElement *self,
+               const LocationPOIFilter * filter, const gchar *freeform,
+               const LocationPreference *svc_pref, const LocationPOIPreference *pref,
+               LocationPOICB cb, const gpointer user_data, guint *req_id);
+
+int map_service_cancel_poi_request (LocationIElement *self, guint req_id);
+
+int map_service_request_route (LocationIElement *self,
+               const LocationPosition *origin, const LocationPosition *destination, GList *waypoint,
+               const LocationPreference *svc_pref, const LocationRoutePreference *pref,
+               LocationRouteCB cb, const gpointer user_data, guint * req_id);
+
+int map_service_cancel_route_request (LocationIElement *self, guint req_id);
+
+gboolean map_service_is_supported_map_provider_capability (LocationIElement *self, LocationMapServiceType type);
+
+int map_service_get_map_provider_capability_key (LocationIElement *self, LocationMapServiceType type, GList **key);
+
+G_END_DECLS
+
+#endif
diff --git a/location/map-service/map-service.c b/location/map-service/map-service.c
new file mode 100644 (file)
index 0000000..6c811b6
--- /dev/null
@@ -0,0 +1,209 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib-object.h>
+#include <vconf.h>
+#include "location-log.h"
+#include "location-pref.h"
+
+#include "module-internal.h"
+
+#include "map-internal.h"
+#include "map-service.h"
+#include "location-ielement.h"
+
+enum {
+       PROP_0,
+       PROP_SERVICE_NAME
+};
+
+static void map_service_ielement_interface_init (LocationIElementInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (MapService, map_service, G_TYPE_OBJECT,
+       G_IMPLEMENT_INTERFACE (LOCATION_TYPE_IELEMENT, map_service_ielement_interface_init));
+
+static void
+_get_lang (gchar country_code[3], gchar lang_code[3])
+{
+       if (!country_code || !lang_code) return;
+       gchar* langset = vconf_get_str(VCONFKEY_LANGSET);
+       LOCATION_LOGD("getenv: %s", langset);
+
+       if(langset == NULL){
+              lang_code[0] = 'E';
+              lang_code[1] = 'N';
+              lang_code[2] = '\0';
+              country_code[0] = 'U';
+              country_code[1] = 'S';
+              country_code[2] = '\0';
+       }else{
+              gchar* langset_upper = g_ascii_strup(langset, -1);
+              lang_code[0] = langset_upper[0];
+              lang_code[1] = langset_upper[1];
+              lang_code[2] = '\0';
+              country_code[0] = langset_upper[3];
+              country_code[1] = langset_upper[4];
+              country_code[2] = '\0';
+              g_free(langset_upper);
+       }
+       LOCATION_LOGD("Language: %s, Country: %s", lang_code, country_code);
+}
+
+
+static void
+map_service_dispose (GObject *gobject)
+{
+       LOCATION_LOGD("map_service_dispose");
+
+       G_OBJECT_CLASS (map_service_parent_class)->dispose (gobject);
+}
+
+static void
+map_service_finalize (GObject *gobject)
+{
+       LOCATION_LOGD("map_service_finalize");
+       MapServicePrivate* priv = GET_PRIVATE(gobject);
+       module_free(priv->mod, "map-service");
+       priv->mod = NULL;
+       G_OBJECT_CLASS (map_service_parent_class)->finalize (gobject);
+}
+
+static void
+map_service_get_property (GObject *object,
+       guint property_id,
+       GValue *value,
+       GParamSpec *pspec)
+{
+       MapServicePrivate *priv = GET_PRIVATE (object);
+
+       g_return_if_fail(priv->mod);
+       g_return_if_fail(priv->mod->handler);
+       switch (property_id){
+       case PROP_SERVICE_NAME:{
+               char* service_name = NULL;
+               if(priv->mod->ops.get_service_name){
+                       if( LOCATION_ERROR_NONE != priv->mod->ops.get_service_name(priv->mod->handler, &service_name) ){
+                               service_name = NULL;
+                       }
+               }
+               LOCATION_LOGD("Get prop>> Service name: %s", service_name);
+               g_value_set_string(value, service_name);
+               g_free(service_name);
+               break;
+       }
+       default:
+               G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+               break;
+       }
+}
+
+static void
+map_service_ielement_interface_init (LocationIElementInterface *iface)
+{
+       iface->get_geocode = (TYPE_GET_GEOCODE)map_service_get_geocode;
+       iface->get_geocode_freeform = (TYPE_GET_GEOCODE_FREEFORM)map_service_get_geocode_freeform;
+       iface->get_reversegeocode = (TYPE_GET_REVERSEGEOCODE)map_service_get_reversegeocode;
+       iface->get_geocode_async = (TYPE_GET_GEOCODE_ASYNC)map_service_get_geocode_async;
+       iface->get_geocode_freeform_async = (TYPE_GET_GEOCODE_FREEFORM_ASYNC)map_service_get_geocode_freeform_async;
+       iface->get_reversegeocode_async = (TYPE_GET_REVERSEGEOCODE_ASYNC)map_service_get_reversegeocode_async;
+       iface->search_poi = (TYPE_SEARCH_POI) map_service_search_poi;
+       iface->search_poi_by_area = (TYPE_SEARCH_POI_BY_AREA) map_service_search_poi_by_area;
+       iface->search_poi_by_address = (TYPE_SEARCH_POI_BY_ADDR) map_service_search_poi_by_address;
+       iface->search_poi_by_freeform = (TYPE_SEARCH_POI_BY_FREEFORM) map_service_search_poi_by_freeform;
+       iface->cancel_poi_request = (TYPE_CANCEL_POI_REQUEST) map_service_cancel_poi_request;
+       iface->request_route = (TYPE_REQUEST_ROUTE) map_service_request_route;
+       iface->cancel_route_request = (TYPE_CANCEL_ROUTE_REQUEST) map_service_cancel_route_request;
+       iface->is_supported_map_provider_capability = (TYPE_IS_SUPPORTED_MAP_PROVIDER_CAPABILITY) map_service_is_supported_map_provider_capability;
+       iface->get_map_provider_capability_key = (TYPE_GET_MAP_PROVIDER_CAPABILITY_KEY) map_service_get_map_provider_capability_key;
+
+}
+
+static void
+map_service_init (MapService *self)
+{
+       LOCATION_LOGD("map_service_init");
+       MapServicePrivate* priv = GET_PRIVATE(self);
+
+       priv->mod = (LocationServiceMod*)module_new("map-service");
+       if(!priv->mod) LOCATION_LOGW("module loading failed");
+       priv->pref = location_pref_new ();
+       if(!priv->pref) LOCATION_LOGW("Service preference failed");
+
+       gchar country[3], lang[3];
+       _get_lang (country, lang);
+       location_pref_set_language (priv->pref, lang);
+       location_pref_set_distance_unit (priv->pref, "MI");
+       location_pref_set_provider_name (priv->pref, "decarta");
+}
+
+static void
+map_service_class_init (MapServiceClass *klass)
+{
+       LOCATION_LOGD("map_service_class_init");
+       GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+       GParamSpec *pspec;
+
+       gobject_class->get_property = map_service_get_property;
+
+       gobject_class->dispose = map_service_dispose;
+       gobject_class->finalize = map_service_finalize;
+
+       g_type_class_add_private (klass, sizeof (MapServicePrivate));
+
+       pspec = g_param_spec_string ("service provider",
+                                "map service provider name prop",
+                                "map service provider name",
+                                DEFAULT_SERVICE,
+                                G_PARAM_READABLE);
+       g_object_class_install_property (gobject_class,
+                                   PROP_SERVICE_NAME,
+                                   pspec);
+}
+
+LocationPreference *
+map_service_get_pref(GObject *obj)
+{
+       LOCATION_LOGD("map_service_get_pref");
+       MapServicePrivate* priv = GET_PRIVATE(obj);
+       if (!priv) return NULL;
+       if (!priv->pref) return NULL;
+
+       LocationPreference *pref = location_pref_copy(priv->pref);
+
+       return pref;
+}
+
+gboolean
+map_service_set_pref (GObject *obj, LocationPreference *pref)
+{
+       LOCATION_LOGD("map_service_set_pref");
+       MapServicePrivate* priv = GET_PRIVATE(obj);
+       if (!priv) return FALSE;
+       if (!priv->pref) location_pref_free(priv->pref);
+
+       priv->pref = location_pref_copy (pref);
+
+       return TRUE;
+}
diff --git a/location/map-service/map-service.h b/location/map-service/map-service.h
new file mode 100644 (file)
index 0000000..bde83c6
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * libslp-location
+ *
+ * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
+ *          Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __MAP_SERVICE_H__
+#define __MAP_SERVICE_H__
+
+#include <glib-object.h>
+#include <module-internal.h>
+
+/**
+ * @file map-service.h
+ * @brief This file contains the internal definitions and structures related to a service provider.
+ */
+
+G_BEGIN_DECLS
+
+typedef struct _MapService        MapService;
+typedef struct _MapServiceClass   MapServiceClass;
+typedef struct _MapServicePrivate         MapServicePrivate;
+
+#define MAP_TYPE_SERVICE                       (map_service_get_type ())
+#define MAP_SERVICE(obj)                       (G_TYPE_CHECK_INSTANCE_CAST ((obj), MAP_TYPE_SERVICE, MapService))
+#define MAP_IS_SERVICE(obj)            (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MAP_TYPE_SERVICE))
+#define MAP_SERVICE_CLASS(klass)               (G_TYPE_CHECK_CLASS_CAST ((klass), MAP_TYPE_SERVICE, MapServiceClass))
+#define MAP_IS_SERVICE_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE ((klass), MAP_TYPE_SERVICE))
+#define MAP_SERVICE_GET_CLASS(obj)             (G_TYPE_INSTANCE_GET_CLASS ((obj), MAP_TYPE_SERVICE, MapServiceClass))
+
+#define DEFAULT_SERVICE "decarta"
+
+#define GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MAP_TYPE_SERVICE, MapServicePrivate))
+
+struct _MapService
+{
+       GObject parent_instance;
+};
+
+struct _MapServiceClass
+{
+       GObjectClass parent_class;
+};
+
+struct _MapServicePrivate {
+       LocationServiceMod* mod;
+       LocationPreference *pref;
+};
+
+GType map_service_get_type (void);
+
+LocationPreference *map_service_get_pref(GObject *obj);
+
+gboolean map_service_set_preference (GObject *obj, LocationPreference *pref);
+
+G_END_DECLS
+
+#endif /* __MAP_SERVICE_H__ */
diff --git a/location/module/Makefile.am b/location/module/Makefile.am
new file mode 100644 (file)
index 0000000..d517f09
--- /dev/null
@@ -0,0 +1,20 @@
+noinst_LTLIBRARIES = liblocation-module.la\r
+\r
+COMMON_HEADER_DIR = include\r
+MANAGER_DIR = manager\r
+MAP_SERVICE_DIR = map-service\r
+MODULE_DIR = module\r
+\r
+liblocation_module_la_SOURCES = \\r
+                                                        module-internal.c\r
+\r
+liblocation_module_la_CFLAGS = \\r
+                                                       -fPIC\\r
+                                                       -I${srcdir} \\r
+                                                       -I${srcdir}/.. \\r
+                                                       -I${srcdir}/../include \\r
+                                                       -I${srcdir}/../${MANAGER_DIR} \\r
+                                                       -I${srcdir}/../${MODULE_DIR} \\r
+                                                       -I${srcdir}/../${MAP_SERVICE_DIR} \\r
+                                                       $(LOCATION_CFLAGS)\r
+\r
similarity index 58%
rename from location/location-module.h
rename to location/module/location-module.h
index a4469af..9f374c9 100644 (file)
 #define __LOCATION_MODULE_H__
 
 #include <gmodule.h>
-#include <location/location-types.h>
-#include <location/location-position.h>
-#include <location/location-velocity.h>
-#include <location/location-accuracy.h>
-#include <location/location-address.h>
-#include <location/location-satellite.h>
-#include <location/location-poi-info.h>
+#include <location-types.h>
+#include <location-position.h>
+#include <location-velocity.h>
+#include <location-accuracy.h>
+#include <location-address.h>
+#include <location-satellite.h>
 
 G_BEGIN_DECLS
 
@@ -41,7 +40,7 @@ G_BEGIN_DECLS
 /**
  * @addtogroup LocationFW
  * @{
- * @defgroup LocationModules Location Moduels
+ * @defgroup LocationModules Location Modules
  * @brief  This sub module provides the definitions and structrues for 3rd party plugin modules.
  * @addtogroup LocationModules
  * @{
@@ -51,27 +50,39 @@ G_BEGIN_DECLS
  * @brief This represents APIs declared in a geocode plug-in for location geocode modules.
  */
 typedef struct{
-       int (*get_service_name)(gpointer handle, gchar **servicename);                                                                         ///< This is used for getting a service name from a plug-in.
-       int (*get_geocode)(gpointer handle, const LocationAddress *address, GList **position_list, GList **accuracy_list);         ///< This is used for getting a geocode from a plug-in.
-       int (*get_geocode_freetext)(gpointer handle, const gchar *address, GList **position_list, GList **accuracy_list);          ///< This is used for getting a geocode by using a free-fromed address from a plug-in.
-       int (*get_reverse_geocode)(gpointer handle, const LocationPosition *position, LocationAddress **address, LocationAccuracy **accuracy); ///< This is used for getting a reverse geocode from a plug-in.
-       int (*get_geocode_async)(gpointer handle, const LocationAddress *address, LocationPositionCB callback, gpointer userdata);             ///< This is used for getting a geocode from a plug-in asynchronously.
-       int (*get_geocode_freetext_async)(gpointer handle, const gchar *address, LocationPositionCB callback, gpointer userdata);              ///< This is used for getting a geocode by using a free-fromed address from a plug-in asynchronously.
-       int (*get_reverse_geocode_async)(gpointer handle, const LocationPosition *position, LocationAddressCB callback, gpointer userdata);    ///< This is used for getting a reverse geocode from a plug-in asynchronously.   
-} LocModGeoOps;
-
-/**
- * @brief This represents APIs declared in a POI plug-in for location POI modules.
- */
-typedef struct{
-       int (*get_service_name)(gpointer handle, gchar** servicename);                                                                                                            ///< This is used for getting a service name from a plug-in.
-       int (*get_poi)(gpointer handle, gdouble radius, const gchar* keyword, LocationPOIInfo **poi);                                                                             ///< This is used for getting a POI from a plug-in.
-       int (*get_poi_from_address)(gpointer handle, const LocationAddress *address, gdouble radius, const gchar* keyword, LocationPOIInfo **poi);                                ///< This is used for getting a POI by using a address from a plug-in.
-       int (*get_poi_from_position)(gpointer handle, const LocationPosition *position, gdouble radius, const gchar* keyword, LocationPOIInfo **poi);                             ///< This is used for getting a POI by using a position from a plug-in.
-       int (*get_poi_async)(gpointer handle, gdouble radius, const gchar* keyword, LocationPOICB callback, gpointer userdata);                                                   ///< This is used for getting a POI from a plug-in asynchronously.
-       int (*get_poi_from_address_async)(gpointer handle, const LocationAddress *address, gdouble radius, const gchar* keyword, LocationPOICB callback, gpointer userdata);      ///< This is used for getting a POI by using a address from a plug-in asynchronously.
-       int (*get_poi_from_position_async)(gpointer handle, const LocationPosition *position, gdouble radius, const gchar* keyword,  LocationPOICB callback, gpointer userdata);  ///< This is used for getting a POI by using a position from a plug-in asynchronously.
-} LocModPoiOps;
+       int (*get_service_name)(gpointer handle, gchar **servicename);
+       ///< This is used for getting a service name from a plug-in.
+       int (*get_geocode)(gpointer handle, const LocationAddress *address, GList **position_list, GList **accuracy_list);
+       ///< This is used for getting a geocode from a plug-in.
+       int (*get_geocode_freetext)(gpointer handle, const gchar *address, GList **position_list, GList **accuracy_list);
+       ///< This is used for getting a geocode by using a free-fromed address from a plug-in.
+       int (*get_reverse_geocode)(gpointer handle, const LocationPosition *position, LocationAddress **address, LocationAccuracy **accuracy);
+       ///< This is used for getting a reverse geocode from a plug-in.
+       int (*get_geocode_async)(gpointer handle, const LocationAddress *address, LocationPositionCB callback, gpointer userdata);
+       ///< This is used for getting a geocode from a plug-in asynchronously.
+       int (*get_geocode_freetext_async)(gpointer handle, const gchar *address, LocationPositionCB callback, gpointer userdata);
+       ///< This is used for getting a geocode by using a free-fromed address from a plug-in asynchronously.
+       int (*get_reverse_geocode_async)(gpointer handle, const LocationPosition *position, LocationAddressCB callback, gpointer userdata);
+       ///< This is used for getting a reverse geocode from a plug-in asynchronously.
+       int (*search_poi) (gpointer handle, const LocationPOIFilter *filter, const LocationPosition *position, const LocationPreference *svc_pref, const LocationPOIPreference *pref, LocationPOICB cb, const gpointer user_data, guint * req_id);
+       ///< This is used for searching poi with the position from a plug-in asynchronously.
+       int (*search_poi_by_area) (gpointer handle, const LocationPOIFilter *filter, const LocationBoundary *boundary, const LocationPreference *svc_pref, const LocationPOIPreference *pref, LocationPOICB cb, const gpointer user_data, guint * req_id);
+       ///< This is used for searching poi with the boundary from a plug-in asynchronously.
+       int (*search_poi_by_address) (gpointer handle, const LocationPOIFilter *filter, const LocationAddress *address, const LocationPreference *svc_pref, const LocationPOIPreference *pref, LocationPOICB cb, const gpointer user_data, guint * req_id);
+       ///< This is used for searching poi with the address from a plug-in asynchronously.
+       int (*search_poi_by_freeform) (gpointer handle, const LocationPOIFilter * filter, const gchar *freeform, const LocationPreference *svc_pref, const LocationPOIPreference *pref, LocationPOICB cb, const gpointer user_data, guint *req_id);
+       ///< This is used for searching poi with the freeform address from a plug-in asynchronously.
+       int (*cancel_poi_request) (gpointer handle, guint req_id);
+       ///< This is used for cancel poi request from a plug-in.
+       int (*request_route) (gpointer handle, const LocationPosition *origin, const LocationPosition *destination, GList *waypoint, const LocationPreference *svc_pref, const LocationRoutePreference * pref, LocationRouteCB cb, const gpointer user_data, guint * req_id);
+       ///< This is used for requesting route from a plug-in asynchronously.
+       int (*cancel_route_request) (gpointer handle, guint req_id);
+       ///< This is used for cancel route request from a plug-in.
+       gboolean (*is_supported_map_provider_capability) (gpointer handle, LocationMapServiceType type);
+       ///< This is used to check whether map service is supported on a plug-in.
+       int (*get_map_provider_capability_key) (gpointer handle, LocationMapServiceType type, GList **key);
+       ///< This is used to get map service keys on a plug-in.
+} LocModServiceOps;
 
 /**
 * @brief This represents a enabled/disabled callback function for a plug-in.
@@ -89,15 +100,23 @@ typedef void (*LocModPositionCB) (gboolean enabled, LocationPosition *position,
 typedef void (*LocModVelocityCB) (gboolean enabled, LocationVelocity *velocity, LocationAccuracy *accuracy, gpointer userdata);
 
 /**
+ * @brief This represents a velocity callback function for a plug-in.
+ */
+typedef void (*LocModSatelliteCB) (gboolean enabled, LocationSatellite *satellite, gpointer userdata);
+
+/**
  * @brief This represents APIs declared in a GPS plug-in for location GPS modules.
  */
 typedef struct{
-       int (*start)(gpointer handle, LocModStatusCB status_cb, LocModPositionCB pos_cb, LocModVelocityCB vel_cb, gpointer userdata);  ///< This is used for starting a GPS device from a plug-in. #LocModStatusCB, #LocModPositionCB, and #LocModVelocityCB are given from a location framework to a plug-in for asynchronous signaling.
+       int (*start)(gpointer handle, LocModStatusCB status_cb, LocModPositionCB pos_cb, LocModVelocityCB vel_cb, LocModSatelliteCB sat_cb, gpointer userdata);  ///< This is used for starting a GPS device from a plug-in. #LocModStatusCB, #LocModPositionCB, and #LocModVelocityCB are given from a location framework to a plug-in for asynchronous signaling.
        int (*stop)(gpointer handle);                                                                                                  ///< This is used for stopping a GPS device name from a plug-in.
        int (*get_position)(gpointer handle, LocationPosition **position, LocationAccuracy **accuracy);                                ///< This is used for getting a position from a plug-in.
        int (*get_velocity)(gpointer handle, LocationVelocity **velocity, LocationAccuracy **accuracy);                                ///< This is used for getting a velocity from a plug-in.
+       int (*get_last_position)(gpointer handle, LocationPosition **position, LocationAccuracy **accuracy);                           ///< This is used for getting a last position from a plug-in.
+       int (*get_last_velocity)(gpointer handle, LocationVelocity **velocity, LocationAccuracy **accuracy);                           ///< This is used for getting a last velocity from a plug-in.
        int (*get_nmea)(gpointer handle, gchar** nmea_data);                                                                           ///< This is used for getting a nmea string from a plug-in.
        int (*get_satellite)(gpointer handle, LocationSatellite **satellite);                                                          ///< This is used for getting a satellite information from a plug-in.
+       int (*get_last_satellite)(gpointer handle, LocationSatellite **satellite);                                                     ///< This is used for getting a last satellite information from a plug-in.
        int (*set_devname)(gpointer handle, const gchar *devname);                                                                     ///< This is used for setting a device name from a plug-in.
        int (*get_devname)(gpointer handle, gchar **devname);                                                                          ///< This is used for getting a device name from a plug-in.
 } LocModGpsOps;
@@ -106,10 +125,12 @@ typedef struct{
  * @brief This represents APIs declared in a WPS plug-in for location WPS modules.
  */
 typedef struct{
-       int (*start)(gpointer handle, LocModStatusCB status_cb, LocModPositionCB pos_cb, LocModVelocityCB vel_cb, gpointer userdata);   ///< This is used for starting a WPS service from a plug-in. #LocModStatusCB, #LocModPositionCB, and #LocModVelocityCB are given from a location framework to a plug-in for asynchronous signaling.
+       int (*start)(gpointer handle, LocModStatusCB status_cb, LocModPositionCB pos_cb, LocModVelocityCB vel_cb, LocModSatelliteCB sat_cb, gpointer userdata);   ///< This is used for starting a WPS service from a plug-in. #LocModStatusCB, #LocModPositionCB, #LocModVelocityCB and #LocModSatelliteCB(Not used) are given from a location framework to a plug-in for asynchronous signaling.
        int (*stop)(gpointer handle);                                                                                                   ///< This is used for stopping a WPS service from a plug-in.
        int (*get_position)(gpointer handle, LocationPosition **position, LocationAccuracy **accuracy);                                 ///< This is used for getting a position from a plug-in.
        int (*get_velocity)(gpointer handle, LocationVelocity **velocity, LocationAccuracy **accuracy);                                 ///< This is used for getting a velocity from a plug-in.
+       int (*get_last_position)(gpointer handle, LocationPosition **position, LocationAccuracy **accuracy);                                                    ///< This is used for getting a last position from a plug-in.
+       int (*get_last_velocity)(gpointer handle, LocationVelocity **velocity, LocationAccuracy **accuracy);                           ///< This is used for getting a last velocity from a plug-in.
 } LocModWpsOps;
 
 /**
@@ -140,7 +161,7 @@ typedef struct{
 /**
  * @brief This is used for exported APIs in a plug-in for a location framework.
  */
-#define LOCATION_MODULE_API __attribute__((visibility("default"))) G_MODULE_EXPORT 
+#define LOCATION_MODULE_API __attribute__((visibility("default"))) G_MODULE_EXPORT
 
 /**
  * @} @}
similarity index 77%
rename from location/location-module-internal.c
rename to location/module/module-internal.c
index 1c9a19b..302a159 100644 (file)
@@ -23,9 +23,9 @@
 #include "config.h"
 #endif
 
-#include <glib.h> 
-#include "location/location-module-internal.h"
-#include "location/location-log.h"
+#include <glib.h>
+#include "module-internal.h"
+#include "location-log.h"
 
 #define MAX_MODULE_INDEX 10
 const char* MODULE_PATH_PREFIX = "/usr/lib/location/module";
@@ -67,11 +67,11 @@ gmod_new (const char* module_name, gboolean is_resident)
 
 static void
 gmod_free (GMod* gmod)
-{      
+{
        if(gmod->name)
                g_free(gmod->name);
        if(gmod->path)
-               g_free(gmod->path);     
+               g_free(gmod->path);
        if(gmod->module)
                g_module_close(gmod->module);
        g_free(gmod);
@@ -85,7 +85,7 @@ gmod_find_sym (GMod* gmod,
        g_stpcpy(sym, "init");
        if ( !g_module_symbol (gmod->module, sym, init_func) ){
                LOCATION_LOGW("symbol not found: %s", sym);
-               return FALSE;   
+               return FALSE;
        }
        g_stpcpy(sym, "shutdown");
        if ( !g_module_symbol (gmod->module, sym, shutdown_func) ){
@@ -98,7 +98,7 @@ gmod_find_sym (GMod* gmod,
 static gpointer
 mod_new (const char* module_name)
 {
-       gpointer ret_mod = NULL;        
+       gpointer ret_mod = NULL;
        if(!module_name)
                return NULL;
 
@@ -109,24 +109,24 @@ mod_new (const char* module_name)
        if(!gmod){
                LOCATION_LOGW("module(%s) new failed", module_name);
                return NULL;
-       }       
+       }
        if( !gmod_find_sym(gmod, &init, &shutdown) ){
                LOCATION_LOGW("symbol (init, shutdown) finding failed");
                gmod_free(gmod);
                return NULL;
        }
        if(!init || !shutdown){
-               LOCATION_LOGW("init, shutdown symbol is NULL"); 
+               LOCATION_LOGW("init, shutdown symbol is NULL");
                gmod_free(gmod);
                return NULL;
-       }       
-       if(g_str_has_prefix(module_name, "geocode")){
-               LocationGeoMod* _mod = g_new0(LocationGeoMod, 1);
+       }
+       if(g_str_has_prefix(module_name, "map-service")){
+               LocationServiceMod* _mod = g_new0(LocationServiceMod, 1);
                _mod->gmod = gmod;
                _mod->init = init;
-               _mod->shutdown= shutdown;       
-               _mod->handler= _mod->init(&(_mod->ops));        
-               if(!_mod->handler){     
+               _mod->shutdown= shutdown;
+               _mod->handler= _mod->init(&(_mod->ops));
+               if(!_mod->handler){
                        LOCATION_LOGW("module init failed");
                        gmod_free(_mod->gmod);
                        ret_mod = NULL;
@@ -136,9 +136,9 @@ mod_new (const char* module_name)
                LocationGpsMod* _mod = g_new0(LocationGpsMod, 1);
                _mod->gmod = gmod;
                _mod->init = init;
-               _mod->shutdown= shutdown;       
-               _mod->handler= _mod->init(&(_mod->ops));        
-               if(!_mod->handler){     
+               _mod->shutdown= shutdown;
+               _mod->handler= _mod->init(&(_mod->ops));
+               if(!_mod->handler){
                        LOCATION_LOGW("module init failed");
                        gmod_free(_mod->gmod);
                        ret_mod = NULL;
@@ -148,9 +148,9 @@ mod_new (const char* module_name)
                LocationWpsMod* _mod = g_new0(LocationWpsMod, 1);
                _mod->gmod = gmod;
                _mod->init = init;
-               _mod->shutdown= shutdown;       
-               _mod->handler= _mod->init(&(_mod->ops));        
-               if(!_mod->handler){     
+               _mod->shutdown= shutdown;
+               _mod->handler= _mod->init(&(_mod->ops));
+               if(!_mod->handler){
                        LOCATION_LOGW("module init failed");
                        gmod_free(_mod->gmod);
                        ret_mod = NULL;
@@ -172,9 +172,9 @@ mod_new (const char* module_name)
                LocationIpsMod* _mod = g_new0(LocationIpsMod, 1);
                _mod->gmod = gmod;
                _mod->init = init;
-               _mod->shutdown= shutdown;       
-               _mod->handler= _mod->init(&(_mod->ops));        
-               if(!_mod->handler){     
+               _mod->shutdown= shutdown;
+               _mod->handler= _mod->init(&(_mod->ops));
+               if(!_mod->handler){
                        LOCATION_LOGW("module init failed");
                        gmod_free(_mod->gmod);
                        ret_mod = NULL;
@@ -184,45 +184,33 @@ mod_new (const char* module_name)
                LocationSpsMod* _mod = g_new0(LocationSpsMod, 1);
                _mod->gmod = gmod;
                _mod->init = init;
-               _mod->shutdown= shutdown;       
-               _mod->handler= _mod->init(&(_mod->ops));        
-               if(!_mod->handler){     
-                       LOCATION_LOGW("module init failed");
-                       gmod_free(_mod->gmod);
-                       ret_mod = NULL;
-               }else
-                       ret_mod = (gpointer)_mod;
-       }else if(g_str_has_prefix(module_name, "poi")){
-               LocationPoiMod* _mod = g_new0(LocationPoiMod, 1);
-               _mod->gmod = gmod;
-               _mod->init = init;
-               _mod->shutdown= shutdown;       
-               _mod->handler= _mod->init(&(_mod->ops));        
-               if(!_mod->handler){     
+               _mod->shutdown= shutdown;
+               _mod->handler= _mod->init(&(_mod->ops));
+               if(!_mod->handler){
                        LOCATION_LOGW("module init failed");
                        gmod_free(_mod->gmod);
                        ret_mod = NULL;
                }else
                        ret_mod = (gpointer)_mod;
        }else{
-               LOCATION_LOGW("module name (%s) is wrong", module_name); 
+               LOCATION_LOGW("module name (%s) is wrong", module_name);
                ret_mod = NULL;
-       }       
+       }
        return ret_mod;
 }
 
-               
+
 static void
 mod_free (gpointer mod,
-       const char* module_name)        
+       const char* module_name)
 {
        if(!mod || !module_name)
                return;
-       
-       if(0 == g_strcmp0(module_name, "geocode")){
-               LocationGeoMod* _mod = (LocationGeoMod*)mod;
+
+       if(0 == g_strcmp0(module_name, "map-service")){
+               LocationServiceMod* _mod = (LocationServiceMod*)mod;
                if(_mod->shutdown && _mod->handler){
-                       _mod->shutdown(_mod->handler);                  
+                       _mod->shutdown(_mod->handler);
                }
                _mod->handler = NULL;
                _mod->init = NULL;
@@ -232,7 +220,7 @@ mod_free (gpointer mod,
        }else if(0 == g_strcmp0(module_name, "gps")){
                LocationGpsMod* _mod = (LocationGpsMod*)mod;
                if(_mod->shutdown && _mod->handler){
-                       _mod->shutdown(_mod->handler);                  
+                       _mod->shutdown(_mod->handler);
                }
                _mod->handler = NULL;
                _mod->init = NULL;
@@ -242,8 +230,8 @@ mod_free (gpointer mod,
        }else if(0 == g_strcmp0(module_name, "wps")){
                LocationWpsMod* _mod = (LocationWpsMod*)mod;
                if(_mod->shutdown && _mod->handler){
-                       _mod->shutdown(_mod->handler);                  
-               }               
+                       _mod->shutdown(_mod->handler);
+               }
                _mod->handler = NULL;
                _mod->init = NULL;
                _mod->shutdown= NULL;
@@ -252,8 +240,8 @@ mod_free (gpointer mod,
        }else if(0 == g_strcmp0(module_name, "cps")){
                LocationCpsMod* _mod = (LocationCpsMod*)mod;
                if(_mod->shutdown && _mod->handler){
-                       _mod->shutdown(_mod->handler);                  
-               }               
+                       _mod->shutdown(_mod->handler);
+               }
                _mod->handler = NULL;
                _mod->init = NULL;
                _mod->shutdown= NULL;
@@ -262,8 +250,8 @@ mod_free (gpointer mod,
        }else if(0 == g_strcmp0(module_name, "ips")){
                LocationIpsMod* _mod = (LocationIpsMod*)mod;
                if(_mod->shutdown && _mod->handler){
-                       _mod->shutdown(_mod->handler);                  
-               }               
+                       _mod->shutdown(_mod->handler);
+               }
                _mod->handler = NULL;
                _mod->init = NULL;
                _mod->shutdown= NULL;
@@ -272,17 +260,7 @@ mod_free (gpointer mod,
        }else if(0 == g_strcmp0(module_name, "sps")){
                LocationSpsMod* _mod = (LocationSpsMod*)mod;
                if(_mod->shutdown && _mod->handler){
-                       _mod->shutdown(_mod->handler);                  
-               }               
-               _mod->handler = NULL;
-               _mod->init = NULL;
-               _mod->shutdown= NULL;
-               gmod_free(_mod->gmod);
-               _mod->gmod = NULL;
-       }else if(0 == g_strcmp0(module_name, "poi")){
-               LocationPoiMod* _mod = (LocationPoiMod*)mod;
-               if(_mod->shutdown && _mod->handler){
-                       _mod->shutdown(_mod->handler);                  
+                       _mod->shutdown(_mod->handler);
                }
                _mod->handler = NULL;
                _mod->init = NULL;
@@ -290,7 +268,7 @@ mod_free (gpointer mod,
                gmod_free(_mod->gmod);
                _mod->gmod = NULL;
        }else
-               LOCATION_LOGW("module name (%s) is wrong", module_name); 
+               LOCATION_LOGW("module name (%s) is wrong", module_name);
 
        g_free(mod);
 }
@@ -310,8 +288,8 @@ mod_is_supported(const char *module_name)
 
 gboolean module_init (void)
 {
-       if (!g_module_supported()) { 
-               LOCATION_LOGW("module is not supported"); 
+       if (!g_module_supported()) {
+               LOCATION_LOGW("module is not supported");
                return FALSE;
        }
        return TRUE;
@@ -342,10 +320,10 @@ module_new (const char* module_name)
                                continue;
                        }
                }else{
-                       if( 0 >= g_snprintf(name, 256, "%s", module_name)){                             
+                       if( 0 >= g_snprintf(name, 256, "%s", module_name)){
                                LOCATION_LOGW("module name(%s) is wrong", name);
                                continue;
-                       }               
+                       }
                }
                mod = mod_new(name);
                if(mod){
similarity index 82%
rename from location/location-module-internal.h
rename to location/module/module-internal.h
index 868e743..47b8280 100644 (file)
  * limitations under the License.
  */
 
-#ifndef __LOCATION_MODULE_INTERNAL_H__
-#define __LOCATION_MODULE_INTERNAL_H__
+#ifndef __MODULE_INTERNAL_H__
+#define __MODULE_INTERNAL_H__
 
 #include <gmodule.h>
-#include "location/location-module.h"
+#include "location-module.h"
 
 /**
- * @file location-module-internal.h
+ * @file module-internal.h
  * @brief This file contains the internal definitions and structures related to module.
- * @addtogroup LocationInternal
- * @{
- * @}
  */
 
 typedef struct{
        GModule* module;
        char* name;
-       char* path;     
+       char* path;
 } GMod;
 
 typedef struct{
        GMod* gmod;
        gpointer handler;
-       gpointer (*init)(LocModGeoOps* ops);
+       gpointer (*init)(LocModServiceOps* ops);
        void (*shutdown)(gpointer handle);
-       LocModGeoOps ops;
-} LocationGeoMod;
-
-typedef struct{
-       GMod* gmod;
-       gpointer handler;
-       gpointer (*init)(LocModPoiOps* ops);
-       void (*shutdown)(gpointer handle);
-       LocModPoiOps ops;
-} LocationPoiMod;
+       LocModServiceOps ops;
+} LocationServiceMod;
 
 typedef struct{
        GMod* gmod;     
@@ -100,9 +89,8 @@ G_BEGIN_DECLS
 gboolean module_init(void);
 gpointer module_new(const char* module_name);
 void module_free(gpointer mod, const char* module_name);
-
 gboolean module_is_supported(const char *module_name);
-
+       
 G_END_DECLS
 
 #endif
index d0e3cb8..0ba8019 100644 (file)
@@ -1,3 +1,4 @@
+
 Name:       libslp-location
 Summary:    Location Based Service
 Version:    0.3.34
@@ -10,9 +11,11 @@ Requires(post):  /usr/bin/vconftool
 Requires(postun):  /sbin/ldconfig
 BuildRequires:  pkgconfig(glib-2.0)
 BuildRequires:  pkgconfig(gconf-2.0)
+BuildRequires:  pkgconfig(dbus-glib-1)
+BuildRequires:  pkgconfig(gmodule-2.0)
 BuildRequires:  pkgconfig(dlog)
 BuildRequires:  pkgconfig(vconf)
-BuildRequires: pkgconfig(json-glib-1.0) 
+BuildRequires:  pkgconfig(json-glib-1.0)
 
 
 %description
@@ -28,7 +31,6 @@ Requires:   %{name} = %{version}-%{release}
 Location Based Service Development Package
 
 
-
 %prep
 %setup -q -n %{name}-%{version}
 
@@ -36,48 +38,57 @@ Location Based Service Development Package
 %build
 
 ./autogen.sh
-./configure --prefix=%{_prefix} --enable-dlog 
+./configure --prefix=%{_prefix} --enable-dlog --enable-debug
 
+# Call make instruction with smp support
 make %{?jobs:-j%jobs}
 
+
 %install
+rm -rf %{buildroot}
 %make_install
 
 
+%clean
+rm -rf %{buildroot}
 
-%post 
+
+%post
 /sbin/ldconfig
-vconftool set -t int db/location/lastposition/gps/Timestamp "0" -f
-vconftool set -t double db/location/lastposition/gps/Latitude "0.0" -f
-vconftool set -t double db/location/lastposition/gps/Longitude "0.0" -f
-vconftool set -t double db/location/lastposition/gps/Altitude "0.0" -f
-vconftool set -t double db/location/lastposition/gps/HorAccuracy "0.0" -f
-vconftool set -t double db/location/lastposition/gps/VerAccuracy "0.0" -f
-vconftool set -t int db/location/lastposition/wps/Timestamp "0" -f
-vconftool set -t double db/location/lastposition/wps/Latitude "0.0" -f
-vconftool set -t double db/location/lastposition/wps/Longitude "0.0" -f
-vconftool set -t double db/location/lastposition/wps/Altitude "0.0" -f
-vconftool set -t double db/location/lastposition/wps/HorAccuracy "0.0" -f
-vconftool set -t int db/location/lastposition/sps/Timestamp "0" -f
-vconftool set -t double db/location/lastposition/sps/Latitude "0.0" -f
-vconftool set -t double db/location/lastposition/sps/Longitude "0.0" -f
-vconftool set -t double db/location/lastposition/sps/Altitude "0.0" -f
-vconftool set -t double db/location/lastposition/sps/HorAccuracy "0.0" -f
-vconftool set -t double db/location/lastposition/sps/VerAccuracy "0.0" -f
+vconftool set -t int db/location/last/gps/Timestamp "0" -f
+vconftool set -t double db/location/last/gps/Latitude "0.0" -f
+vconftool set -t double db/location/last/gps/Longitude "0.0" -f
+vconftool set -t double db/location/last/gps/Altitude "0.0" -f
+vconftool set -t double db/location/last/gps/HorAccuracy "0.0" -f
+vconftool set -t double db/location/last/gps/VerAccuracy "0.0" -f
+vconftool set -t double db/location/last/gps/Speed "0.0" -f
+vconftool set -t double db/location/last/gps/Direction "0.0" -f
+vconftool set -t int db/location/last/wps/Timestamp "0" -f
+vconftool set -t double db/location/last/wps/Latitude "0.0" -f
+vconftool set -t double db/location/last/wps/Longitude "0.0" -f
+vconftool set -t double db/location/last/wps/Altitude "0.0" -f
+vconftool set -t double db/location/last/wps/HorAccuracy "0.0" -f
+vconftool set -t double db/location/last/wps/Speed "0.0" -f
+vconftool set -t double db/location/last/wps/Direction "0.0" -f
+vconftool set -t int db/location/last/sps/Timestamp "0" -f
+vconftool set -t double db/location/last/sps/Latitude "0.0" -f
+vconftool set -t double db/location/last/sps/Longitude "0.0" -f
+vconftool set -t double db/location/last/sps/Altitude "0.0" -f
+vconftool set -t double db/location/last/sps/HorAccuracy "0.0" -f
+vconftool set -t double db/location/last/sps/VerAccuracy "0.0" -f
 vconftool set -t int db/location/setting/GpsEnabled "0" -g 6514 -f
 vconftool set -t int db/location/setting/AgpsEnabled "0" -g 6514 -f
 vconftool set -t int db/location/setting/NetworkEnabled "0" -g 6514 -f
 vconftool set -t int db/location/setting/SensorEnabled "0" -g 6514 -f
 
+
 %postun -p /sbin/ldconfig
 
 
 %files
-%{_libdir}/lib*.so.*
+%{_libdir}/lib*.so*
 
 
 %files devel
 %{_includedir}/location/*.h
-%{_libdir}/lib*.so
 %{_libdir}/pkgconfig/*.pc
-
index 51837cd..c9d697d 100644 (file)
@@ -20,7 +20,10 @@ LDADD = \
                $(dir_location)/libSLP-location.la\
                $(TEST_LIBS)
 AM_CFLAGS = \
-                       -I$(dir_location)\
+                       -I$(dir_location) \
+                       -I$(dir_location)/include \
+                       -I$(dir_location)/manager \
+                       -I$(dir_location)/map-service \
                        $(TEST_CFLAGS)
 
 dir_tests = $(top_srcdir)/tests
index 4505288..e830329 100644 (file)
  */
 
 #include <gconf/gconf-client.h>
-#include <location/location.h>
+#include <location.h>
 
 static GMainLoop *loop = NULL;
 
-#define GCONF_PROXY_MODE            "/system/proxy/mode"
-#define GCONF_HTTP_PROXY_HOST       "/system/http_proxy/host"
-#define GCONF_HTTP_PROXY_PORT       "/system/http_proxy/port"
-#define ENV_HTTP_PROXY              "http_proxy"
-
 static gboolean
 exit_program (gpointer data)
 {
index f4bfff0..ea7c707 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #include <glib.h>
-#include <location/location.h>
+#include <location.h>
 
 int
 main (int argc, char *argv[])
index 23d5438..c36dbf7 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #include <glib.h>
-#include <location/location.h>
+#include <location.h>
 
 static GMainLoop *loop = NULL;
 
index 4b6ae5d..90b0d06 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #include <glib.h>
-#include <location/location.h>
+#include <location.h>
 
 static GMainLoop *loop = NULL;
 
index f7b2269..19e40a1 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #include <glib.h>
-#include <location/location.h>
+#include <location.h>
 
 int
 main (int argc, char *argv[])
index 7131c42..fe565f2 100644 (file)
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
- */\r
-\r
-#include <glib.h>\r
-#include <json-glib.h>\r
-#include "location.h"\r
-\r
-JsonParser *parser;\r
-JsonNode *root;\r
-\r
-static int _get_polygon_position_count(int polygon_index)\r
-{\r
-       if (parser == NULL || root == NULL) return 0;\r
-\r
-       JsonObject* polygon_obj = json_array_get_object_element(json_node_get_array(root), polygon_index);\r
-       if (polygon_obj == NULL) return 0;\r
-\r
-       JsonArray * positions = json_object_get_array_member (polygon_obj, "positions");\r
-       if (positions == NULL) return 0;\r
-\r
-       return json_array_get_length(positions);\r
-}\r
-\r
-static LocationPosition* _get_position_from_polygon(int polygon_index, int pos_index)\r
-{\r
-       double latitude = 0.0;\r
-       double longitude = 0.0;\r
-       LocationPosition *position = NULL;\r
-       if (parser == NULL || root == NULL) return NULL;\r
-\r
-       JsonObject *polygon_obj = json_array_get_object_element(json_node_get_array(root), polygon_index);\r
-       JsonArray * pos_array = json_object_get_array_member(polygon_obj, "positions");\r
-       JsonObject* pos = json_array_get_object_element(pos_array, pos_index);\r
-\r
-       latitude = json_object_get_double_member(pos, "latitude");\r
-       longitude = json_object_get_double_member(pos, "longitude");\r
-\r
-       if (latitude == 0.0 || longitude == 0.0) return NULL;\r
-\r
-       position = location_position_new(0, latitude, longitude, 0.0, LOCATION_STATUS_2D_FIX);\r
-\r
-       return position;\r
-}\r
-\r
-static LocationPosition* _get_marker_position_from_polygon(int polygon_index, int pos_index)\r
-{\r
-       double latitude = 0.0;\r
-       double longitude = 0.0;\r
-       LocationPosition *position = NULL;\r
-       if (parser == NULL || root == NULL) return NULL;\r
-\r
-       JsonObject *polygon_obj = json_array_get_object_element(json_node_get_array(root), polygon_index);\r
-       JsonArray * pos_array = json_object_get_array_member(polygon_obj, "marker_position");\r
-       JsonObject* pos = json_array_get_object_element(pos_array, pos_index);\r
-\r
-       latitude = json_object_get_double_member(pos, "latitude");\r
-       longitude = json_object_get_double_member(pos, "longitude");\r
-\r
-       if (latitude == 0.0 || longitude == 0.0) return NULL;\r
-\r
-       position = location_position_new(0, latitude, longitude, 0.0, LOCATION_STATUS_2D_FIX);\r
-\r
-       return position;\r
-}\r
-\r
-static void _free_position_list(gpointer data)\r
-{\r
-       if (data == NULL) return;\r
-\r
-       LocationPosition *position = (LocationPosition*) data;\r
-\r
-       location_position_free(position);\r
-}\r
-\r
-\r
-LocationBoundary* json_util_get_polygon_boundary(int polygon_index)\r
-{\r
-       if (parser == NULL || root == NULL) {\r
-               g_printf("invalid param parser[%d], root[%d]\n", parser, root);\r
-               return NULL;\r
-       }\r
-       GList* position_list = NULL;\r
-       LocationBoundary *boundary = NULL;\r
-       int index = 0;\r
-       int pos_count = _get_polygon_position_count(polygon_index);\r
-       if (pos_count == 0) return NULL;\r
-\r
-       for(index = 0; index < pos_count; index++) {\r
-               position_list = g_list_append(position_list, _get_position_from_polygon(polygon_index, index));\r
-       }\r
-\r
-       boundary = location_boundary_new_for_polygon(position_list);\r
-\r
-       g_list_free_full(position_list, (GDestroyNotify)_free_position_list);\r
-\r
-       return boundary;\r
-}\r
-\r
-\r
-/* Polygon boundary */\r
-int json_util_get_polygon_count(void)\r
-{\r
-       JsonArray * array = json_node_get_array(root);\r
-\r
-       return json_array_get_length(array);\r
-}\r
-\r
-char *json_util_get_polygon_name(int polygon_index)\r
-{\r
-       char *name = NULL;\r
-       JsonObject *polygon_obj = json_array_get_object_element(json_node_get_array(root), polygon_index);\r
-\r
-       name = (char *)json_object_get_string_member(polygon_obj, "name");\r
-       if (name == NULL)  return NULL;\r
-\r
-       return g_strdup(name);\r
-}\r
-\r
-/* Test Marker */\r
-char * json_util_get_marker_name(int polygon_index, int pos_index)\r
-{\r
-       char *result = NULL;\r
-       if (parser == NULL || root == NULL) return NULL;\r
-\r
-       JsonObject *polygon_obj = json_array_get_object_element(json_node_get_array(root), polygon_index);\r
-       JsonArray * pos_array = json_object_get_array_member(polygon_obj, "marker_position");\r
-       JsonObject* pos = json_array_get_object_element(pos_array, pos_index);\r
-\r
-       result = (char *)json_object_get_string_member(pos, "where");\r
-       if (result == NULL) return NULL;\r
-\r
-       return g_strdup(result);\r
-}\r
-\r
-int json_util_get_marker_position_count(int polygon_index)\r
-{\r
-       if (parser == NULL || root == NULL) return 0;\r
-\r
-       JsonObject* polygon_obj = json_array_get_object_element(json_node_get_array(root), polygon_index);\r
-       JsonArray * marker_position = json_object_get_array_member (polygon_obj, "marker_position");\r
-\r
-       return json_array_get_length(marker_position);\r
-}\r
-\r
-LocationPosition *json_util_get_marker_position(int polygon_index, int marker_index)\r
-{\r
-       if (parser == NULL || root == NULL) return NULL;\r
-\r
-       LocationPosition* position = NULL;\r
-       position = _get_marker_position_from_polygon(polygon_index, marker_index);\r
-\r
-       return position;\r
-}\r
-\r
-char* json_util_result_zone_test(int polygon_index, int marker_index)\r
-{\r
-       if (parser == NULL || root == NULL) return NULL;\r
-\r
-       char *result = NULL;\r
-       JsonObject *polygon_obj = json_array_get_object_element(json_node_get_array(root), polygon_index);\r
-       JsonArray * pos_array = json_object_get_array_member(polygon_obj, "marker_position");\r
-       JsonObject* pos = json_array_get_object_element(pos_array, marker_index);\r
-\r
-       result = (char *)json_object_get_string_member(pos, "result");\r
-       if (result == NULL) return NULL;\r
-\r
-       return g_strdup(result);\r
-}\r
-\r
-void json_util_init(const char * file_name)\r
-{\r
-       g_print("Enter init_json_parser");\r
-       GError *error;\r
-       gboolean ret = FALSE;\r
-       if (parser != NULL) return;\r
-\r
-       parser = json_parser_new();\r
-\r
-       error = NULL;\r
-       ret = json_parser_load_from_file(parser, file_name, &error);\r
-       if (ret == FALSE) {\r
-               g_print("Unable to parser[%s]:[%s]\n", file_name, error->message);\r
-               return ;\r
-       }\r
-\r
-       root = json_parser_get_root(parser);\r
-}\r
+ */
+
+#include <glib.h>
+#include <json-glib.h>
+#include "location.h"
+
+JsonParser *parser;
+JsonNode *root;
+
+static int _get_polygon_position_count(int polygon_index)
+{
+       if (parser == NULL || root == NULL) return 0;
+
+       JsonObject* polygon_obj = json_array_get_object_element(json_node_get_array(root), polygon_index);
+       if (polygon_obj == NULL) return 0;
+
+       JsonArray * positions = json_object_get_array_member (polygon_obj, "positions");
+       if (positions == NULL) return 0;
+
+       return json_array_get_length(positions);
+}
+
+static LocationPosition* _get_position_from_polygon(int polygon_index, int pos_index)
+{
+       double latitude = 0.0;
+       double longitude = 0.0;
+       LocationPosition *position = NULL;
+       if (parser == NULL || root == NULL) return NULL;
+
+       JsonObject *polygon_obj = json_array_get_object_element(json_node_get_array(root), polygon_index);
+       JsonArray * pos_array = json_object_get_array_member(polygon_obj, "positions");
+       JsonObject* pos = json_array_get_object_element(pos_array, pos_index);
+
+       latitude = json_object_get_double_member(pos, "latitude");
+       longitude = json_object_get_double_member(pos, "longitude");
+
+       if (latitude == 0.0 || longitude == 0.0) return NULL;
+
+       position = location_position_new(0, latitude, longitude, 0.0, LOCATION_STATUS_2D_FIX);
+
+       return position;
+}
+
+static LocationPosition* _get_marker_position_from_polygon(int polygon_index, int pos_index)
+{
+       double latitude = 0.0;
+       double longitude = 0.0;
+       LocationPosition *position = NULL;
+       if (parser == NULL || root == NULL) return NULL;
+
+       JsonObject *polygon_obj = json_array_get_object_element(json_node_get_array(root), polygon_index);
+       JsonArray * pos_array = json_object_get_array_member(polygon_obj, "marker_position");
+       JsonObject* pos = json_array_get_object_element(pos_array, pos_index);
+
+       latitude = json_object_get_double_member(pos, "latitude");
+       longitude = json_object_get_double_member(pos, "longitude");
+
+       if (latitude == 0.0 || longitude == 0.0) return NULL;
+
+       position = location_position_new(0, latitude, longitude, 0.0, LOCATION_STATUS_2D_FIX);
+
+       return position;
+}
+
+static void _free_position_list(gpointer data)
+{
+       if (data == NULL) return;
+
+       LocationPosition *position = (LocationPosition*) data;
+
+       location_position_free(position);
+}
+
+
+LocationBoundary* json_util_get_polygon_boundary(int polygon_index)
+{
+       if (parser == NULL || root == NULL) {
+               g_printf("invalid param parser[%d], root[%d]\n", parser, root);
+               return NULL;
+       }
+       GList* position_list = NULL;
+       LocationBoundary *boundary = NULL;
+       int index = 0;
+       int pos_count = _get_polygon_position_count(polygon_index);
+       if (pos_count == 0) return NULL;
+
+       for(index = 0; index < pos_count; index++) {
+               position_list = g_list_append(position_list, _get_position_from_polygon(polygon_index, index));
+       }
+
+       boundary = location_boundary_new_for_polygon(position_list);
+
+       g_list_free_full(position_list, (GDestroyNotify)_free_position_list);
+
+       return boundary;
+}
+
+
+/* Polygon boundary */
+int json_util_get_polygon_count(void)
+{
+       JsonArray * array = json_node_get_array(root);
+
+       return json_array_get_length(array);
+}
+
+char *json_util_get_polygon_name(int polygon_index)
+{
+       char *name = NULL;
+       JsonObject *polygon_obj = json_array_get_object_element(json_node_get_array(root), polygon_index);
+
+       name = (char *)json_object_get_string_member(polygon_obj, "name");
+       if (name == NULL)  return NULL;
+
+       return g_strdup(name);
+}
+
+/* Test Marker */
+char * json_util_get_marker_name(int polygon_index, int pos_index)
+{
+       char *result = NULL;
+       if (parser == NULL || root == NULL) return NULL;
+
+       JsonObject *polygon_obj = json_array_get_object_element(json_node_get_array(root), polygon_index);
+       JsonArray * pos_array = json_object_get_array_member(polygon_obj, "marker_position");
+       JsonObject* pos = json_array_get_object_element(pos_array, pos_index);
+
+       result = (char *)json_object_get_string_member(pos, "where");
+       if (result == NULL) return NULL;
+
+       return g_strdup(result);
+}
+
+int json_util_get_marker_position_count(int polygon_index)
+{
+       if (parser == NULL || root == NULL) return 0;
+
+       JsonObject* polygon_obj = json_array_get_object_element(json_node_get_array(root), polygon_index);
+       JsonArray * marker_position = json_object_get_array_member (polygon_obj, "marker_position");
+
+       return json_array_get_length(marker_position);
+}
+
+LocationPosition *json_util_get_marker_position(int polygon_index, int marker_index)
+{
+       if (parser == NULL || root == NULL) return NULL;
+
+       LocationPosition* position = NULL;
+       position = _get_marker_position_from_polygon(polygon_index, marker_index);
+
+       return position;
+}
+
+char* json_util_result_zone_test(int polygon_index, int marker_index)
+{
+       if (parser == NULL || root == NULL) return NULL;
+
+       char *result = NULL;
+       JsonObject *polygon_obj = json_array_get_object_element(json_node_get_array(root), polygon_index);
+       JsonArray * pos_array = json_object_get_array_member(polygon_obj, "marker_position");
+       JsonObject* pos = json_array_get_object_element(pos_array, marker_index);
+
+       result = (char *)json_object_get_string_member(pos, "result");
+       if (result == NULL) return NULL;
+
+       return g_strdup(result);
+}
+
+void json_util_init(const char * file_name)
+{
+       g_print("Enter init_json_parser");
+       GError *error;
+       gboolean ret = FALSE;
+       if (parser != NULL) return;
+
+       parser = json_parser_new();
+
+       error = NULL;
+       ret = json_parser_load_from_file(parser, file_name, &error);
+       if (ret == FALSE) {
+               g_print("Unable to parser[%s]:[%s]\n", file_name, error->message);
+               return ;
+       }
+
+       root = json_parser_get_root(parser);
+}
index 47948a9..7c31a86 100644 (file)
@@ -29,7 +29,7 @@ G_BEGIN_DECLS
 
 void json_util_init(const char *file_file);
 char* json_util_result_zone_test(int polygon_index, int marker_index);
-int* json_util_get_marker_name(int polygon_index, int marker_index);
+char* json_util_get_marker_name(int polygon_index, int marker_index);
 int json_util_get_marker_position_count(int polygon_index);
 LocationPosition *json_util_get_marker_position(int polygon_index, int marker_index);
 
index b69070b..2247f89 100644 (file)
 #include <string.h>
 #include <glib/gprintf.h>
 #include <gconf/gconf-client.h>
-#include <location/location.h>
+#include <location.h>
+#include <location-map-service.h>
+#include <location-poi.h>
 #include "location-api-test-util.h"
 
 #define STR_MAX        128
 LocationObject* location_obj = NULL;
 static GMainLoop *g_mainloop = NULL;
 
-#define GCONF_PROXY_MODE            "/system/proxy/mode"
-#define GCONF_HTTP_PROXY_HOST       "/system/http_proxy/host"
-#define GCONF_HTTP_PROXY_PORT       "/system/http_proxy/port"
-#define ENV_HTTP_PROXY              "http_proxy"
-
 #define LOCATION_API_TEST_JSON_FILE "/opt/data/location-api-test.json"
 
 static gpointer GmainThread(gpointer data)
@@ -378,20 +375,37 @@ cb_service_updated (GObject *self,
        LocationAccuracy *acc = (LocationAccuracy*) accuracy;
        switch (type) {
        case POSITION_UPDATED: {
-                       LocationPosition *pos = (LocationPosition*) data;
-                       g_debug ("ASYNC>> Current position> time: %d, lat: %f, long: %f, alt: %f, status: %d",
+               LocationPosition *pos = (LocationPosition*) data;
+               g_debug ("ASYNC>> Current position> time: %d, lat: %f, long: %f, alt: %f, status: %d",
                                pos->timestamp, pos->latitude, pos->longitude, pos->altitude, pos->status);
-                       g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
+               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
                                acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
-               }
+       }
                break;
        case VELOCITY_UPDATED: {
-                       LocationVelocity *vel = (LocationVelocity*) data;
-                       g_debug ("ASYNC>> Current velocity> time: %d, speed: %f, direction:%f, climb:%f",
-                               vel->timestamp, vel->speed, vel->direction, vel->climb);
-                       g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
-                               acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+               LocationVelocity *vel = (LocationVelocity*) data;
+               g_debug ("ASYNC>> Current velocity> time: %d, speed: %f, direction:%f, climb:%f",
+                       vel->timestamp, vel->speed, vel->direction, vel->climb);
+               g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
+                       acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
+       }
+               break;
+       case SATELLITE_UPDATED: {
+               int idx = 0;
+               guint prn;
+               gboolean used;
+               guint elevation;
+               guint azimuth;
+               gint snr;
+
+               LocationSatellite *sat = (LocationSatellite *)data;
+               g_debug ("SYNC>> Current Satellite> time: %d, satellite in view = %d, satellite in used = %d", sat->timestamp, sat->num_of_sat_inview, sat->num_of_sat_used);
+               g_debug ("\tinview satellite information = ");
+               for (idx=0; idx<sat->num_of_sat_inview; idx++) {
+                       location_satellite_get_satellite_details(sat, idx, &prn, &used, &elevation, &azimuth, &snr);
+                       g_debug ("\t\t[%02d] used: %d, prn: %d, elevation: %d, azimuth: %d, snr: %d", idx, used, prn, elevation, azimuth, snr);
                }
+       }
                break;
        default:
                g_warning ("ASYNC>> Undefined update type");
@@ -399,6 +413,187 @@ cb_service_updated (GObject *self,
        }
 }
 
+static void _print_property (gpointer data, gpointer user_data)
+{
+       LocationLandmark *landmark = (LocationLandmark *)user_data;
+       gpointer key = (gpointer)data;
+       gpointer value = NULL;
+
+       if (key) {
+               value = (gpointer)location_landmark_get_property(landmark, key);
+               g_printf(", [%s:%s]", (gchar*) key, (gchar*) value);
+       }
+}
+
+static void
+__plugin_print_poi_list (gpointer data, gpointer user_data)
+{
+       LocationLandmark *landmark = (LocationLandmark *)data;
+       LocationPosition *pos = location_landmark_get_position (landmark);
+       LocationAddress *addr = location_landmark_get_address (landmark);
+
+       g_printf ("[ID:%d], [NAME:%s], phone[%s],pos[%f:%f], addr[%s:%s:%s:%s:%s]",
+                       location_landmark_get_id (landmark),
+                       location_landmark_get_name(landmark),
+                       location_landmark_get_phone_number (landmark),
+                       pos->latitude, pos->longitude,
+                       addr->building_number, addr->city, addr->country_code, addr->district,
+                       addr->postal_code);
+
+       GList *key_list = location_landmark_get_property_key(landmark);
+       if (key_list) {
+               g_list_foreach(key_list, _print_property, landmark);
+       }
+
+       g_printf("\n");
+}
+
+
+static void cb_poi(LocationError error, guint req_id, GList * landmark_list, gchar * error_code, gchar * error_msg, gpointer userdata)
+{
+       g_printf("\n===== __location_POI_cb ======\n");
+       if (error != LOCATION_ERROR_NONE) {
+               g_printf("Failed :%d\n", error);
+               return;
+       }
+       g_printf("Success, poi_list[0x%x] user_data[0x%x] req_id[%d]\n", (unsigned int)landmark_list, (unsigned int)userdata, req_id);
+       g_list_foreach (landmark_list, __plugin_print_poi_list, NULL);
+
+       if (error_code && error_msg) {
+               g_printf("__location_POI_cb: error_code[%s], error_msg[%s]\n", error_code, error_msg);
+       }
+}
+static void PrintStepInfo(const LocationRouteStep *step)
+{
+       const LocationPosition *start = location_route_step_get_start_point(step);
+       gdouble start_lat = 0;
+       gdouble start_lon = 0;
+       if (start) {
+               start_lat = start->latitude;
+               start_lon = start->longitude;
+       } else {
+               g_printf("Step start position NULL\n");
+       }
+       const LocationPosition *end = location_route_step_get_end_point(step);
+       gdouble end_lat = 0;
+       gdouble end_lon = 0;
+       if (end) {
+               end_lat = end->latitude;
+               end_lon = end->longitude;
+       } else {
+               g_printf("Step end position NULL\n");
+       }
+       const gchar *inst = location_route_step_get_instruction(step);
+
+       g_printf("Step: start(%f/%f), end(%f/%f), instruction(%s)\n", start_lat, start_lon, end_lat, end_lon, inst);
+}
+
+static void cb_print_route_step (gpointer data, gpointer user_data)
+{
+       g_printf("+++Step begin\n");
+       LocationRouteStep *step = (LocationRouteStep *)data;
+
+       PrintStepInfo(step);
+       g_printf("---Step end\n");
+}
+
+static void cb_print_route_segment (gpointer data, gpointer user_data)
+{
+       g_printf("++Segment begin\n");
+       LocationRouteSegment *seg = (LocationRouteSegment *)data;
+       gdouble seg_dist = location_route_segment_get_distance(seg);
+       glong seg_duration = location_route_segment_get_duration(seg);
+       const LocationPosition *start = location_route_segment_get_start_point(seg);
+       gdouble start_lat = 0;
+       gdouble start_lon = 0;
+       if (start) {
+               start_lat = start->latitude;
+               start_lon = start->longitude;
+       } else {
+               g_printf("Segment start position NULL\n");
+       }
+       const LocationPosition *end = location_route_segment_get_end_point(seg);
+       gdouble end_lat = 0;
+       gdouble end_lon = 0;
+       if (end) {
+               end_lat = end->latitude;
+               end_lon = end->longitude;
+       } else {
+               g_printf("Segment end postion NULL\n");
+       }
+       g_printf("Segment info: Distance[%f], Duration[%ld], start(%f/%f), end(%f/%f)\n", seg_dist, seg_duration,
+                       start_lat, start_lon, end_lat, end_lon);
+
+       GList *step_list = location_route_segment_get_route_step(seg);
+       GList *tmp_list = (GList *)step_list;
+       if (tmp_list) {
+               g_list_foreach(tmp_list, cb_print_route_step, NULL);
+       }
+       g_printf("--Segment end\n");
+}
+
+
+static void cb_print_route_list (gpointer data, gpointer user_data)
+{
+       g_printf("+Route begin\n");
+       LocationRoute *route = (LocationRoute *)data;
+
+       const LocationPosition *start = location_route_get_origin(route);
+       gdouble start_lat = 0;
+       gdouble start_lon = 0;
+       if (start) {
+               start_lat = start->latitude;
+               start_lon = start->longitude;
+       } else {
+               g_printf("Route start position NULL\n");
+       }
+       const LocationPosition *end = location_route_get_destination(route);
+       gdouble end_lat = 0;
+       gdouble end_lon = 0;
+       if (end) {
+               end_lat = end->latitude;
+               end_lon = end->longitude;
+       } else {
+               g_printf("Route end position NULL\n");
+       }
+       g_printf("Route: start(%f/%f), end(%f/%f)\n", start_lat, start_lon, end_lat, end_lon);
+
+       gdouble distance = location_route_get_total_distance(route);
+       const gchar *dis_unit = location_route_get_distance_unit(route);
+       glong duration = location_route_get_total_duration(route);
+       const LocationBoundary *bound = location_route_get_bounding_box(route);
+       if (bound && bound->type == LOCATION_BOUNDARY_RECT) {
+               g_printf("RECT left top[%f-%f], right bottom[%f-%f]\n", bound->rect.left_top->latitude, bound->rect.left_top->longitude,
+                       bound->rect.right_bottom->latitude, bound->rect.right_bottom->longitude);
+       } else {
+               g_printf("route boundary not exist, or not RECT\n");
+       }
+       g_printf ("Distance[%f], Distance unit[%s], Duration[%ld]\n", distance, dis_unit, duration);
+
+       GList *seg_list = location_route_get_route_segment(route);
+       if (seg_list) {
+               g_list_foreach(seg_list, cb_print_route_segment, NULL);
+       }
+
+       g_printf("-Route end\n");
+}
+
+static void cb_route(LocationError error, guint req_id, GList * route_list, gchar * error_code, gchar * error_msg, gpointer userdata)
+{
+       g_printf("\n===== cb_route ======\n");
+       if (error != LOCATION_ERROR_NONE) {
+               g_printf("Failed :%d\n", error);
+               return;
+       }
+
+       g_printf("Success, poi_list[0x%x] user_data[0x%x] req_id[%d]\n", (unsigned int)route_list, (unsigned int)userdata, req_id);
+       g_list_foreach (route_list, cb_print_route_list, NULL);
+
+       if (error_code && error_msg) {
+               g_printf("cb_route: error_code[%s], error_msg[%s]\n", error_code, error_msg);
+       }
+}
+
 static void cb_position (LocationError error,
        GList *pos_list,
        GList *acc_list,
@@ -483,6 +678,24 @@ static gboolean idle_address_from_position_async(gpointer data)
        return FALSE;
 }
 
+void _print_keys(gpointer value)
+{
+       g_printf(" %s ", (gchar*) value);
+}
+
+static void print_map_service_keys (LocationObject *obj, int type)
+{
+       GList *key = NULL;
+
+       int ret = location_get_map_provider_capability_key (obj, type, &key);
+
+       if (key) {
+               g_list_foreach (key, _print_keys, NULL);
+       }
+
+       g_list_free_full(key, g_free);
+}
+
 static void print_menu()
 {
        g_printf("\n================================= Location API Test =================================\n");
@@ -510,6 +723,16 @@ static void print_menu()
        g_printf("13.  location_get_distance\n");
        g_printf("14.  location_is_supported_method\n");
        g_printf("15.  location_is_enabled_gps\n");
+       g_printf("16.  location_search_poi\n");
+       g_printf("16a. location_search_poi_by_area\n");
+       g_printf("16b. location_search_poi_by_addr\n");
+       g_printf("16c. location_search_poi_by_freeformed_address\n");
+       g_printf("16d. location_search_poi_by_area\n");
+       g_printf("16e. location_cancel_poi_request\n");
+       g_printf("17.  location_request_route\n");
+       g_printf("17a. location_cancel_route_request\n");
+       g_printf("18.  location_is_supported_map_provider_capability\n");
+       g_printf("19.  location_get_map_provider_capability_key\n");
        g_printf("99.  location_send_command\n");
        g_printf("a?.  signals:(1)'service-enabled',(2)'service-disabled',(3)'service-updated',(4)'zone-in',(5)'zone-out'\n");
        g_printf("b?.  disconnect signals:(1)'service-enabled',(2)'service-disabled',(3)'service-updated',(4)'zone-in',(5)'zone-out'\n");
@@ -525,6 +748,7 @@ int main(int argc, char** argv)
        int ret;
        char str[STR_MAX];
        GError *gerr = NULL;
+       guint req_id = 0;
 
        // If application is executed by AUL, this is not needed.
        g_setenv("PKG_NAME", "com.samsung.location-api-test", 1);
@@ -602,14 +826,12 @@ int main(int argc, char** argv)
                        if(pos) location_position_free(pos);
                        if(acc) location_accuracy_free(acc);
                } else if (0 == g_strcmp0("6a",strOpt)) {
-                       g_printf("LOCATION_METHOD_HYBRID[0] LOCATION_METHOD_GPS[1] LOCATION_METHOD_WPS[2] LOCATION_METHOD_SPS[5]\n");
-                       g_printf("Select Location Method: ");
-                       LocationMethod method = PromptInt();
                        LocationPosition *last_pos;
                        LocationAccuracy *last_acc;
                        int ret = 0;
 
-                       ret = location_get_last_position (location_obj, LOCATION_METHOD_GPS, &last_pos, &last_acc);
+                       ret = location_get_last_position (location_obj, &last_pos, &last_acc);
+                       GetLocationError(str, ret);
                        if (ret == LOCATION_ERROR_NONE) {
                                g_debug ("SYNC>> Last position> time: %d, lat: %f, long: %f, alt: %f, status: %d",
                                        last_pos->timestamp, last_pos->latitude, last_pos->longitude, last_pos->altitude, last_pos->status);
@@ -617,7 +839,7 @@ int main(int argc, char** argv)
                                        last_acc->level, last_acc->horizontal_accuracy, last_acc->vertical_accuracy);
                                location_position_free(last_pos);
                                location_accuracy_free(last_acc);
-                       } else g_warning ("SYNC>> Last position> failed. Error[%d]",ret);
+                       } else g_warning ("SYNC>> Last position> failed. Error[%s]",str);
 
                } else if (0 == g_strcmp0("6b",strOpt)) {
                        g_printf("LOCATION_METHOD_HYBRID[0] LOCATION_METHOD_GPS[1] LOCATION_METHOD_WPS[2] LOCATION_METHOD_SPS[5]\n");
@@ -684,7 +906,7 @@ int main(int argc, char** argv)
                        g_printf("Select Address: ");
                        int opt = PromptInt();
                        if (opt == 0)      data->addr = location_address_new ("1", "Post Street", NULL, "san jose", "ca", NULL, "95113");
-                       else if (opt == 1) data->addr = location_address_new (NULL, "삼성전자", "매탄3동", "수원시 영통구", "경기도", NULL, NULL);
+                       else if (opt == 1) data->addr = location_address_new (NULL, "삼성전자", "매탄3동", "수원시 영통구", "경기도",  NULL, NULL);
                        else if (opt == 2) data->addr = location_address_new (NULL, "Samsung Electro-Mechanics Co. LTD", "Maetan 3-dong", "Suwon Si Yeongtong-gu", "Gyeonggi-do", NULL, NULL);
                        else {
                                char building_number[255], street[255], state[255], country_code[255], city[255], district[255], postal_code[255];
@@ -768,26 +990,31 @@ int main(int argc, char** argv)
                        LocationVelocity *vel = NULL;
                        LocationAccuracy *acc = NULL;
                        ret = location_get_velocity(location_obj, &vel, &acc);
-                       GetLocationError(str, ret);
                        g_printf("location_get_velocity: returned value [%s]\n", str);
                        if (ret == LOCATION_ERROR_NONE) {
                                g_printf("time: [%d], speed: [%f], direction: [%f], climb: [%f]\n", vel->timestamp, vel->speed, vel->direction, vel->climb);
                                GetAccuracyLevel(str, acc->level);
                                g_printf("level: [%s], horizontal_accuracy: [%f], vertical_accuracy: [%f]\n", str, acc->horizontal_accuracy, acc->vertical_accuracy);
                        }
+                       else {
+                               GetLocationError(str, ret);
+                               g_warning ("SYNC>> velocity> failed. Error[%s]", str);
+                       }
                        if(vel) location_velocity_free(vel);
                        if(acc) location_accuracy_free(acc);
                }else if(0 == g_strcmp0("9a",strOpt) ){
                        LocationVelocity *last_vel = NULL;
                        LocationAccuracy *last_acc = NULL;
-                       if (LOCATION_ERROR_NONE == location_get_last_velocity (location_obj, &last_vel, &last_acc)) {
+                       ret = location_get_last_velocity (location_obj, &last_vel, &last_acc);
+                       GetLocationError(str, ret);
+                       if (ret == LOCATION_ERROR_NONE) {
                                g_debug ("SYNC>> Last velocity> time: %d, speed: %f, direction:%f, climb:%f",
                                        last_vel->timestamp, last_vel->speed, last_vel->direction, last_vel->climb);
                                g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)",
                                        last_acc->level, last_acc->horizontal_accuracy, last_acc->vertical_accuracy);
                                location_velocity_free(last_vel);
                                location_accuracy_free(last_acc);
-                       } else g_warning ("SYNC>> Last velocity> failed.");
+                       } else g_warning ("SYNC>> Last velocity> failed. Error[%s]", str);
                }else if(0 == g_strcmp0("10",strOpt) ){
                        int ret = 0, idx = 0;
                        LocationSatellite *sat = NULL;
@@ -798,15 +1025,16 @@ int main(int argc, char** argv)
                        gint snr;
 
                        ret =  location_get_satellite (location_obj, &sat);
+                       GetLocationError(str, ret);
                        if (ret == LOCATION_ERROR_NONE) {
-                               g_debug ("SYNC>> Current Sattelite> satellite in view = %d, satellite in used = %d", sat->num_of_sat_inview, sat->num_of_sat_used);
+                               g_debug ("SYNC>> Current Sattelite> time = %d, satellite in view = %d, satellite in used = %d", sat->timestamp, sat->num_of_sat_inview, sat->num_of_sat_used);
                                g_debug ("\tinview satellite information = ");
                                for (idx=0; idx<sat->num_of_sat_inview; idx++) {
                                        location_satellite_get_satellite_details(sat, idx, &prn, &used, &elevation, &azimuth, &snr);
                                        g_debug ("\t\t[%02d] used: %d, prn: %d, elevation: %d, azimuth: %d, snr: %d", idx, used, prn, elevation, azimuth, snr);
                                }
                                location_satellite_free (sat);
-                       } else g_warning ("SYNC>> Current satellite> failed. Error[%d]", ret);
+                       } else g_warning ("SYNC>> Current satellite> failed. Error[%s]", str);
                }else if(0 == g_strcmp0("10a",strOpt) ){
                        int ret = 0, idx = 0;
                        LocationSatellite *last_sat = NULL;
@@ -817,16 +1045,16 @@ int main(int argc, char** argv)
                        gint snr;
 
                        ret = location_get_last_satellite (location_obj, &last_sat);
-
+                       GetLocationError(str, ret);
                        if (ret == LOCATION_ERROR_NONE) {
-                               g_debug ("SYNC>> Last Sattelite> satellite in view = %d, satellite in used = %d", last_sat->num_of_sat_inview, last_sat->num_of_sat_used);
+                               g_debug ("SYNC>> Last Sattelite> time = %d, satellite in view = %d, satellite in used = %d", last_sat->timestamp, last_sat->num_of_sat_inview, last_sat->num_of_sat_used);
                                g_debug ("\tinview satellite information = ");
                                for (idx=0; idx<last_sat->num_of_sat_inview; idx++) {
                                        location_satellite_get_satellite_details(last_sat, idx, &prn, &used, &elevation, &azimuth, &snr);
                                        g_debug ("\t\t[%02d] used: %d, prn: %d, elevation: %d, azimuth: %d, snr: %d", idx, used, prn, elevation, azimuth, snr);
                                }
                                location_satellite_free (last_sat);
-                       } else g_warning ("SYNC>> Last satellite> failed");
+                       } else g_warning ("SYNC>> Last satellite> failed. Error[%s]", str);
                } else if(0 == g_strcmp0("11",strOpt) ){
                        LocationAddress *addr = NULL;
                        LocationAccuracy *acc = NULL;
@@ -953,6 +1181,238 @@ int main(int argc, char** argv)
                        is_enabled = location_is_enabled_gps(location_obj);
                        if(is_enabled == TRUE) g_printf("GPS is turned on");
                        else g_printf("GPS is turned off");
+               }else if(0 == g_strcmp0("16", strOpt)) {
+                       g_printf("location_search_poi\n");
+                       //guint req_id = 0;  // move to upper
+
+                       LocationPOIFilter *filter = location_poi_filter_new();
+//                     gchar *key = g_strdup("KEYWORD");
+//                     gchar *value = g_strdup("pizza");
+//                     location_poi_filter_set(filter, key, value); // same with Type ?  CATEGORY, KEYWORD, POIName
+                       //location_poi_filter_set(filter, "CATEGORY", "restaurant");  // error, const char* can't be free!!!!, 120214
+                       location_poi_filter_set(filter, "KEYWORD", "pizza");
+                       //location_poi_filter_set(filter, "POIName", "cafe");
+
+                       LocationPOIPreference *pref = location_poi_pref_new();
+                       location_poi_pref_set_max_result(pref, 2);
+                       gchar *item = g_strdup("Distance");
+                       location_poi_pref_set_sort_by(pref, item); // can't set const char* directly !!
+                       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_DESC);  //LOCATION_POI_PREF_SO_ASC
+
+                       // only the latitude/longitude
+                       LocationPosition *position = location_position_new(0, 37.771008, -122.41175, 0, LOCATION_STATUS_2D_FIX);
+
+                       ret = location_search_poi(location_obj, filter, position, pref, cb_poi, NULL, &req_id);
+                       GetLocationError(str, ret);
+                       if(ret != LOCATION_ERROR_NONE) {
+                                       g_printf("Fail to search POI. Error[%s]\n", str);
+                       } else {
+                                       g_printf("Seach POI success, req_id %d\n", req_id);
+                       }
+//                     g_free(item);
+//                     g_free(key);
+//                     g_free(value);
+                       location_poi_filter_free(filter);
+                       location_poi_pref_free(pref);
+                       location_position_free(position);
+
+               }else if(0 == g_strcmp0("16a", strOpt)) {
+                       g_printf("location_search_poi_by_area\n");
+                       
+                       // only circle supported by decarta
+                       LocationPosition *center = location_position_new(0, 37.336723, -121.889555, 0, LOCATION_STATUS_2D_FIX);
+                       gdouble radius = 400;
+                       LocationBoundary *bound = location_boundary_new_for_circle(center, radius);
+
+                       LocationPOIFilter *filter = location_poi_filter_new();
+                       gchar *key = g_strdup("KEYWORD");
+                       gchar *value = g_strdup("cafe");
+                       location_poi_filter_set(filter, key, value); // same with Type ?  CATEGORY, KEYWORD, POIName
+
+                       LocationPOIPreference *pref = location_poi_pref_new();
+                       location_poi_pref_set_max_result(pref, 2);
+                       gchar *item = g_strdup("Distance");
+                       location_poi_pref_set_sort_by(pref, item); // can't set const char* directly !!
+                       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);  //LOCATION_POI_PREF_SO_ASC
+
+
+                       ret = location_search_poi_by_area(location_obj, filter, bound, pref, cb_poi, NULL, &req_id);
+                       GetLocationError(str, ret);
+                       if (ret != LOCATION_ERROR_NONE) {
+                                       g_printf("Fail to search POI by area. Error[%s]\n", str);
+                       } else {
+                                       g_printf("Seach POI by area sucess, req_id %d\n", req_id);
+                       }
+
+                       g_free(key);
+                       g_free(value);
+                       g_free(item);
+                       location_position_free(center);
+                       location_boundary_free(bound);
+                       location_poi_filter_free(filter);
+                       location_poi_pref_free(pref);
+               }else if(0 == g_strcmp0("16b", strOpt)) {
+                       g_printf("location_search_poi_by_address\n");
+
+                       LocationAddress *addr = location_address_new("51", "N SAN PEDRO ST", NULL, "SAN JOSE", "SANTA CLARA", "CA", "95110");
+                       //landmark type ?
+                       //landmark name ?
+
+                       LocationPOIFilter *filter = location_poi_filter_new();
+                       gchar *key = g_strdup("KEYWORD");
+                       gchar *value = g_strdup("cafe");
+                       location_poi_filter_set(filter, key, value); // same with Type ?  CATEGORY, KEYWORD, POIName
+
+                       LocationPOIPreference *pref = location_poi_pref_new();
+                       location_poi_pref_set_max_result(pref, 10);
+                       gchar *item = g_strdup("Distance");
+                       location_poi_pref_set_sort_by(pref, item); // can't set const char* directly !!
+                       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);  //LOCATION_POI_PREF_SO_ASC
+
+                       ret = location_search_poi_by_address(location_obj, filter, addr, pref, cb_poi, NULL, &req_id);
+                       GetLocationError(str, ret);
+                       if(ret != LOCATION_ERROR_NONE) {
+                                       g_printf("Fail to search POI by address. Error[%s]\n", str);
+                       } else {
+                                       g_printf("Seach POI by address sucess, req_id %d\n", req_id);
+                       }
+
+                       g_free(key);
+                       g_free(value);
+                       g_free(item);
+
+                       location_address_free(addr);
+                       location_poi_filter_free(filter);
+                       location_poi_pref_free(pref);
+               }else if(0 == g_strcmp0("16c", strOpt)) {
+                       g_printf("location_search_poi_by_freeformed_address\n");
+               
+                       gchar *addr = g_strdup("North Second St.");
+
+                       LocationPOIFilter *filter = location_poi_filter_new();
+                       gchar *key = g_strdup("KEYWORD");
+                       gchar *value = g_strdup("restaurant");
+                       location_poi_filter_set(filter, key, value); // same with Type ?  CATEGORY, KEYWORD, POIName
+
+                       LocationPOIPreference *pref = location_poi_pref_new();
+                       location_poi_pref_set_max_result(pref, 10);
+                       gchar *item = g_strdup("Distance");
+                       location_poi_pref_set_sort_by(pref, item); // can't set const char* directly !!
+                       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);  //LOCATION_POI_PREF_SO_ASC
+                       
+                       ret = location_search_poi_by_freeformed_address(location_obj, filter, addr, pref, cb_poi, NULL, &req_id);
+                       GetLocationError(str, ret);
+                       if (ret != LOCATION_ERROR_NONE) {
+                                       g_printf("Fail to search POI by address. Error[%s]\n", str);
+                       } else {
+                                       g_printf("Seach POI by address success, req_id %d\n", req_id);
+               }
+
+                       g_free(key);
+                       g_free(value);
+                       g_free(item);
+
+                       g_free(addr);
+                       location_poi_filter_free(filter);
+                       location_poi_pref_free(pref);
+               }else if(0 == g_strcmp0("16d", strOpt)) {
+                       gchar value[255] = {0, };
+
+                       // only circle supported by decarta
+                       LocationPosition *center = location_position_new(0, 37.56693, 126.97819, 0, LOCATION_STATUS_2D_FIX);
+                       gdouble radius = 800;
+                       LocationBoundary *bound = location_boundary_new_for_circle(center, radius);
+
+                       LocationPOIFilter *filter = location_poi_filter_new();
+
+                       g_printf("Input keyword :");
+                       scanf("%s", value);
+                       gchar *key = g_strdup("KEYWORD");
+                       location_poi_filter_set(filter, key, value); // same with Type ?  CATEGORY, KEYWORD, POIName
+
+                       LocationPOIPreference *pref = location_poi_pref_new();
+                       location_poi_pref_set_max_result(pref, 2);
+                       gchar *item = g_strdup("Distance");
+                       location_poi_pref_set_sort_by(pref, item); // can't set const char* directly !!
+                       location_poi_pref_set_sort_order(pref, LOCATION_POI_PREF_SO_ASC);  //LOCATION_POI_PREF_SO_ASC
+
+
+                       ret = location_search_poi_by_area(location_obj, filter, bound, pref, cb_poi, NULL, &req_id);
+                       GetLocationError(str, ret);
+                       if (ret != LOCATION_ERROR_NONE) {
+                                       g_printf("Fail to search POI by area. Error[%s]\n", str);
+                       } else {
+                                       g_printf("Seach POI by area sucess, req_id %d\n", req_id);
+                       }
+
+                       g_free(key);
+                       g_free(value);
+                       g_free(item);
+                       location_position_free(center);
+                       location_boundary_free(bound);
+                       location_poi_filter_free(filter);
+                       location_poi_pref_free(pref);
+               }else if(0 == g_strcmp0("16e", strOpt)) {
+                       int req_id;
+
+                       g_printf("Input ReqID : ");
+                       scanf("%d", &req_id);
+
+                       ret = location_cancel_poi_request(location_obj, req_id);
+                       GetLocationError(str, ret);
+                       if (ret != LOCATION_ERROR_NONE) {
+                               g_printf("Fail to cancel POI request. Error[%s]\n", str);
+                       }
+                       else
+                               g_printf("location_cancel_poi_request, req_id %d\n", req_id);
+               }else if(0 == g_strcmp0("17", strOpt)) {
+                       g_printf("17.  location_request_route\n\n");
+
+                       LocationPosition *origin = location_position_new(0, 37.564263, 126.974676, 0, LOCATION_STATUS_2D_FIX);  // Seoul city hall
+                       LocationPosition *destination = location_position_new(0, 37.557120, 126.992410, 0, LOCATION_STATUS_2D_FIX);     // NamSan
+
+                       GList *waypoint = NULL;
+                       LocationPosition *via_pos = location_position_new(0, 37.560950, 126.986240, 0, LOCATION_STATUS_2D_FIX); // Wangsimli
+                       waypoint = g_list_append (waypoint, (gpointer)via_pos);
+
+                       LocationRoutePreference *pref = location_route_pref_new();
+                       location_route_pref_set_route_type(pref, "FASTEST");
+
+                       ret = location_request_route(location_obj, origin, destination, waypoint, pref, cb_route, NULL, &req_id);
+                       GetLocationError(str, ret);
+                       if (ret != LOCATION_ERROR_NONE) {
+                                       g_printf("Fail to search route by address. Error[%s]\n", str);
+                       } else {
+                                       g_printf("Search Route successfully, req_id %d\n", req_id);
+                       }
+               }else if(0 == g_strcmp0("17a", strOpt)) {
+                       g_printf("17a.  location_cancel_route_request\n");
+
+                       int req_id;
+                       g_printf("Input ReqID : ");
+                       scanf("%d", &req_id);
+
+                       ret = location_cancel_route_request(location_obj, req_id);
+                       GetLocationError(str, ret);
+                       if (ret != LOCATION_ERROR_NONE) {
+                               g_printf("Fail to cancel route request. Error[%s]\n", str);
+                       }
+                       else {
+                               g_printf("location_cancel_route_request, req_id %d\n", req_id);
+                       }
+
+               }else if (0 == g_strcmp0 ("18", strOpt)) {
+                       int idx = 0;
+                       for (idx = 0; idx < MAP_SERVICE_TYPE_MAX; idx++) {
+                               g_printf("[%d:%d], ", idx, location_is_supported_map_provider_capability (location_obj, idx));
+                       }
+               }else if (0 == g_strcmp0 ("19", strOpt)) {
+                       int idx = 0;
+                       for (idx = 0; idx < MAP_SERVICE_TYPE_MAX; idx++) {
+                               g_printf("[%d:", idx);
+                               print_map_service_keys(location_obj, idx);
+                               g_printf("]\n");
+                       }
                }else if(0 == g_strcmp0("99", strOpt)) {
                        int ret = 0;
                        const *str = "command";
index 7491589..62073a3 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #include <glib.h>
-#include <location/location.h>
+#include <location.h>
 
 static GMainLoop *loop = NULL;
 GSource* nmea_src = NULL;
index 60432f3..fb5b7d8 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #include <glib.h>
-#include <location/location.h>
+#include <location.h>
 
 static GMainLoop *loop = NULL;
 
index b11844e..b3096bd 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #include <glib.h>
-#include <location/location.h>
+#include <location.h>
 
 static GMainLoop *loop = NULL;
 
index 50fac0a..0c48b9a 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #include <glib.h>
-#include <location/location.h>
+#include <location.h>
 
 static GMainLoop *loop = NULL;
 GSource* sat_src = NULL;
index d8c9745..a426aad 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #include <glib.h>
-#include <location/location.h>
+#include <location.h>
 
 static GMainLoop *loop = NULL;
 
index 18cffdf..f62aead 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #include <glib.h>
-#include <location/location.h>
+#include <location.h>
 
 static GMainLoop *loop = NULL;
 
index 0d45e4a..bd49060 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #include <glib.h>
-#include <location/location.h>
+#include <location.h>
 
 static GMainLoop *loop = NULL;
 
index 28b2c76..0be3195 100644 (file)
@@ -20,7 +20,7 @@
  */
 
 #include <glib.h>
-#include <location/location.h>
+#include <location.h>
 
 static GMainLoop *loop = NULL;