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>
25 static GMainLoop *loop = NULL;
28 exit_program (gpointer data)
30 g_main_loop_quit (loop);
31 g_debug ("Quit g_main_loop");
36 print_pos (gpointer data, gpointer user_data)
38 LocationPosition *pos = (LocationPosition *)data;
41 g_debug ("time: %d, lat: %f, long: %f, alt: %f, status: %d",
42 pos->timestamp, pos->latitude, pos->longitude, pos->altitude, pos->status);
43 location_position_free (pos);
48 print_acc (gpointer data, gpointer user_data)
50 LocationAccuracy *acc = (LocationAccuracy *)data;
53 g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
54 location_accuracy_free (acc);
58 cb_address (LocationError error,
59 LocationAddress *addr,
60 LocationAccuracy *acc,
63 if (error != LOCATION_ERROR_NONE) {
64 g_debug("cb_address failed: error=%d\n", error);
67 g_debug ("ASYNC>> location_get_address_async> %s %s %s %s %s %s %s",
68 addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
69 g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
73 cb_service_disabled (GObject *self,
77 g_debug("cb_service_disabled: status(%d) userdata(0x%x)", status, (unsigned int)userdata);
81 cb_position_from_address (LocationError error, GList *pos_list, GList *acc_list, gpointer userdata)
83 if (error != LOCATION_ERROR_NONE) {
84 g_debug("cb_position_from_address failed: error=%d\n", error);
88 g_list_foreach (pos_list, print_pos, NULL);
89 g_list_foreach (acc_list, print_acc, NULL);
93 cb_position_from_freeformed_address (LocationError error, GList *pos_list, GList *acc_list, gpointer userdata)
95 if (error != LOCATION_ERROR_NONE) {
96 g_debug("cb_position_from_freeformed_address failed: error=%d\n", error);
100 g_list_foreach (pos_list, print_pos, NULL);
101 g_list_foreach (acc_list, print_acc, NULL);
105 cb_address_from_position (LocationError error, LocationAddress *addr, LocationAccuracy *acc, gpointer userdata)
107 if (error != LOCATION_ERROR_NONE) {
108 g_debug("cb_address_from_position failed: error=%d\n", error);
111 g_debug ("ASYNC>> location_get_address_from_position_async> %s %s %s %s %s %s %s",
112 addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
113 g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
117 cb_service_enabled (GObject *self,
121 g_debug("cb_service_enabled: status(%d) userdata(0x%x)", status, (unsigned int)userdata);
123 LocationAddress *addr = NULL;
124 LocationAccuracy *acc = NULL;
125 LocationObject *loc = (LocationObject*)userdata;
127 LocationError err = location_get_address(loc, &addr, &acc);
128 if (LOCATION_ERROR_NONE == err) {
129 g_debug ("SYNC>> location_get_address() success> %s %s %s %s %s %s %s",
130 addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
131 g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
132 location_address_free(addr);
133 location_accuracy_free(acc);
134 } else g_warning ("SYNC>> location_get_address() failed> error code:%d", err);
136 err = location_get_address_async(loc, cb_address, loc);
137 if (LOCATION_ERROR_NONE == err) g_debug("location_get_address_async() success");
138 else g_warning ("location_get_address_async() failed> error code:%d", err);
142 async_request (gpointer loc)
144 LocationAddress *addr = location_address_new ("1", "Post Street", NULL, "san jose", "ca", NULL, "95113");
145 LocationError err = location_get_position_from_address_async(loc, addr, cb_position_from_address, loc);
146 if (LOCATION_ERROR_NONE == err)
147 g_debug("location_get_position_from_address_async() success");
148 else g_warning ("location_get_position_from_address_async() failed> error code:%d", err);
149 location_address_free (addr);
151 gchar *addr_str = g_strdup("4 N 2nd Street 95113");
152 err = location_get_position_from_freeformed_address_async(loc, addr_str, cb_position_from_freeformed_address, loc);
153 if (LOCATION_ERROR_NONE == err)
154 g_debug("location_get_position_from_freeformed_address_async() success");
155 else g_warning ("location_get_position_from_freeformed_address_async() failed> error code:%d", err);
158 LocationPosition *pos = location_position_new (0, 37.3322, -121.8720, 0, LOCATION_STATUS_2D_FIX);
159 err = location_get_address_from_position_async(loc, pos, cb_address_from_position, loc);
160 if (LOCATION_ERROR_NONE == err)
161 g_debug("location_get_address_from_position_async() success");
162 else g_warning ("location_get_address_from_position_async() failed> error code:%d", err);
163 location_position_free (pos);
168 main (int argc, char *argv[])
170 LocationObject *loc = NULL;
172 // If application is executed by AUL, this is not needed.
173 g_setenv("PKG_NAME", "com.samsung.address-sample", 1);
177 loop = g_main_loop_new (NULL, TRUE);
179 loc = location_new (LOCATION_METHOD_GPS);
181 g_warning("location_new failed");
185 LocationPosition *pos = NULL;
186 LocationAccuracy *acc = NULL;
187 GList *pos_list = NULL;
188 GList *acc_list = NULL;
189 LocationAddress *addr = NULL;
191 addr = location_address_new ("1", "Post Street", NULL, "san jose", "ca", NULL, "95113");
192 LocationError err = location_get_position_from_address(loc, addr, &pos_list, &acc_list);
193 if (LOCATION_ERROR_NONE == err) {
194 g_list_foreach (pos_list, print_pos, NULL);
195 g_list_foreach (acc_list, print_acc, NULL);
196 } else g_warning ("SYNC>>>location_get_position_from_address() failed> error code:%d", err);
197 location_address_free (addr);
199 char* addr_str = g_strdup("4 N 2nd Street 95113");
200 err = location_get_position_from_freeformed_address(loc, addr_str, &pos_list, &acc_list);
201 if (LOCATION_ERROR_NONE == err) {
202 g_list_foreach (pos_list, print_pos, NULL);
203 g_list_foreach (acc_list, print_acc, NULL);
204 } else g_warning ("SYNC>> location_get_position_from_freeformed_address() failed> error code:%d", err);
207 pos = location_position_new (0, 37.3322, -121.8720, 0, LOCATION_STATUS_2D_FIX);
208 err = location_get_address_from_position(loc, pos, &addr, &acc);
209 if (LOCATION_ERROR_NONE == err) {
210 g_debug ("SYNC>> location_get_address_from_position() success> %s %s %s %s %s %s %s",
211 addr->building_number, addr->street, addr->district, addr->city, addr->state, addr->postal_code, addr->country_code);
212 g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
213 location_address_free(addr);
214 location_accuracy_free(acc);
215 } else g_warning ("SYNC>> location_get_address_from_position() failed> error code:%d", err);
216 location_position_free (pos);
218 g_signal_connect (loc, "service-enabled", G_CALLBACK(cb_service_enabled), loc);
219 g_signal_connect (loc, "service-disabled", G_CALLBACK(cb_service_disabled), loc);
221 g_timeout_add_seconds (3, async_request, loc);
222 int ret = location_start (loc);
223 if( LOCATION_ERROR_NONE != ret ){
224 g_debug("location_start failed[%d]",ret);
228 g_timeout_add_seconds (60, exit_program, NULL);
229 g_main_loop_run (loop);