4 * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
7 * Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
22 #include <gconf/gconf-client.h>
23 #include <location/location.h>
25 static GMainLoop *loop = NULL;
27 #define GCONF_PROXY_MODE "/system/proxy/mode"
28 #define GCONF_HTTP_PROXY_HOST "/system/http_proxy/host"
29 #define GCONF_HTTP_PROXY_PORT "/system/http_proxy/port"
30 #define ENV_HTTP_PROXY "http_proxy"
33 exit_program (gpointer data)
35 g_main_loop_quit (loop);
36 g_debug ("Quit g_main_loop");
41 print_pos (gpointer data, gpointer user_data)
43 LocationPosition *pos = (LocationPosition *)data;
46 g_debug ("time: %d, lat: %f, long: %f, alt: %f, status: %d",
47 pos->timestamp, pos->latitude, pos->longitude, pos->altitude, pos->status);
48 location_position_free (pos);
53 print_acc (gpointer data, gpointer user_data)
55 LocationAccuracy *acc = (LocationAccuracy *)data;
58 g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
59 location_accuracy_free (acc);
63 cb_address (LocationError error,
64 LocationAddress *addr,
65 LocationAccuracy *acc,
68 if (error != LOCATION_ERROR_NONE) {
69 g_debug("cb_address failed: error=%d\n", error);
72 g_debug ("ASYNC>> location_get_address_async> %s %s %s %s %s %s %s",
73 addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
74 g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
78 cb_service_disabled (GObject *self,
82 g_debug("cb_service_disabled: status(%d) userdata(0x%x)", status, (unsigned int)userdata);
86 cb_position_from_address (LocationError error, GList *pos_list, GList *acc_list, gpointer userdata)
88 if (error != LOCATION_ERROR_NONE) {
89 g_debug("cb_position_from_address failed: error=%d\n", error);
93 g_list_foreach (pos_list, print_pos, NULL);
94 g_list_foreach (acc_list, print_acc, NULL);
98 cb_position_from_freeformed_address (LocationError error, GList *pos_list, GList *acc_list, gpointer userdata)
100 if (error != LOCATION_ERROR_NONE) {
101 g_debug("cb_position_from_freeformed_address failed: error=%d\n", error);
105 g_list_foreach (pos_list, print_pos, NULL);
106 g_list_foreach (acc_list, print_acc, NULL);
110 cb_address_from_position (LocationError error, LocationAddress *addr, LocationAccuracy *acc, gpointer userdata)
112 if (error != LOCATION_ERROR_NONE) {
113 g_debug("cb_address_from_position failed: error=%d\n", error);
116 g_debug ("ASYNC>> location_get_address_from_position_async> %s %s %s %s %s %s %s",
117 addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
118 g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
122 cb_service_enabled (GObject *self,
126 g_debug("cb_service_enabled: status(%d) userdata(0x%x)", status, (unsigned int)userdata);
128 LocationAddress *addr = NULL;
129 LocationAccuracy *acc = NULL;
130 LocationObject *loc = (LocationObject*)userdata;
132 LocationError err = location_get_address(loc, &addr, &acc);
133 if (LOCATION_ERROR_NONE == err) {
134 g_debug ("SYNC>> location_get_address() success> %s %s %s %s %s %s %s",
135 addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
136 g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
137 location_address_free(addr);
138 location_accuracy_free(acc);
139 } else g_warning ("SYNC>> location_get_address() failed> error code:%d", err);
141 err = location_get_address_async(loc, cb_address, loc);
142 if (LOCATION_ERROR_NONE == err) g_debug("location_get_address_async() success");
143 else g_warning ("location_get_address_async() failed> error code:%d", err);
147 async_request (gpointer loc)
149 LocationAddress *addr = location_address_new ("1", "Post Street", NULL, "san jose", "ca", NULL, "95113");
150 LocationError err = location_get_position_from_address_async(loc, addr, cb_position_from_address, loc);
151 if (LOCATION_ERROR_NONE == err)
152 g_debug("location_get_position_from_address_async() success");
153 else g_warning ("location_get_position_from_address_async() failed> error code:%d", err);
154 location_address_free (addr);
156 gchar *addr_str = g_strdup("4 N 2nd Street 95113");
157 err = location_get_position_from_freeformed_address_async(loc, addr_str, cb_position_from_freeformed_address, loc);
158 if (LOCATION_ERROR_NONE == err)
159 g_debug("location_get_position_from_freeformed_address_async() success");
160 else g_warning ("location_get_position_from_freeformed_address_async() failed> error code:%d", err);
163 LocationPosition *pos = location_position_new (0, 37.3322, -121.8720, 0, LOCATION_STATUS_2D_FIX);
164 err = location_get_address_from_position_async(loc, pos, cb_address_from_position, loc);
165 if (LOCATION_ERROR_NONE == err)
166 g_debug("location_get_address_from_position_async() success");
167 else g_warning ("location_get_address_from_position_async() failed> error code:%d", err);
168 location_position_free (pos);
173 main (int argc, char *argv[])
175 LocationObject *loc = NULL;
177 // If application is executed by AUL, this is not needed.
178 g_setenv("PKG_NAME", "com.samsung.address-sample", 1);
182 loop = g_main_loop_new (NULL, TRUE);
184 loc = location_new (LOCATION_METHOD_GPS);
186 g_warning("location_new failed");
190 LocationPosition *pos = NULL;
191 LocationAccuracy *acc = NULL;
192 GList *pos_list = NULL;
193 GList *acc_list = NULL;
194 LocationAddress *addr = NULL;
196 addr = location_address_new ("1", "Post Street", NULL, "san jose", "ca", NULL, "95113");
197 LocationError err = location_get_position_from_address(loc, addr, &pos_list, &acc_list);
198 if (LOCATION_ERROR_NONE == err) {
199 g_list_foreach (pos_list, print_pos, NULL);
200 g_list_foreach (acc_list, print_acc, NULL);
201 } else g_warning ("SYNC>>>location_get_position_from_address() failed> error code:%d", err);
202 location_address_free (addr);
204 char* addr_str = g_strdup("4 N 2nd Street 95113");
205 err = location_get_position_from_freeformed_address(loc, addr_str, &pos_list, &acc_list);
206 if (LOCATION_ERROR_NONE == err) {
207 g_list_foreach (pos_list, print_pos, NULL);
208 g_list_foreach (acc_list, print_acc, NULL);
209 } else g_warning ("SYNC>> location_get_position_from_freeformed_address() failed> error code:%d", err);
212 pos = location_position_new (0, 37.3322, -121.8720, 0, LOCATION_STATUS_2D_FIX);
213 err = location_get_address_from_position(loc, pos, &addr, &acc);
214 if (LOCATION_ERROR_NONE == err) {
215 g_debug ("SYNC>> location_get_address_from_position() success> %s %s %s %s %s %s %s",
216 addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
217 g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
218 location_address_free(addr);
219 location_accuracy_free(acc);
220 } else g_warning ("SYNC>> location_get_address_from_position() failed> error code:%d", err);
221 location_position_free (pos);
223 g_signal_connect (loc, "service-enabled", G_CALLBACK(cb_service_enabled), loc);
224 g_signal_connect (loc, "service-disabled", G_CALLBACK(cb_service_disabled), loc);
226 g_timeout_add_seconds (3, async_request, loc);
227 int ret = location_start (loc);
228 if( LOCATION_ERROR_NONE != ret ){
229 g_debug("location_start failed[%d]",ret);
233 g_timeout_add_seconds (60, exit_program, NULL);
234 g_main_loop_run (loop);