upload tizen1.0 source
[framework/location/libslp-location.git] / tests / address-sample.c
1 /*
2  * libslp-location
3  *
4  * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
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>
8  *
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
12  *
13  * http://www.apache.org/licenses/LICENSE-2.0
14  *
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.
20  */
21
22 #include <gconf/gconf-client.h>
23 #include <location.h>
24
25 static GMainLoop *loop = NULL;
26
27 static gboolean
28 exit_program (gpointer data)
29 {
30         g_main_loop_quit (loop);
31         g_debug ("Quit g_main_loop");
32         return FALSE;
33 }
34
35 static void
36 print_pos (gpointer data, gpointer user_data)
37 {
38         LocationPosition *pos = (LocationPosition *)data;
39
40         if (pos) {
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);
44         }
45 }
46
47 static void
48 print_acc (gpointer data, gpointer user_data)
49 {
50         LocationAccuracy *acc = (LocationAccuracy *)data;
51
52         if (acc) {
53                 g_debug ("\tAccuracy level %d (%.0f meters %.0f meters)", acc->level, acc->horizontal_accuracy, acc->vertical_accuracy);
54                 location_accuracy_free (acc);
55         }
56 }
57 static void
58 cb_address (LocationError error,
59         LocationAddress *addr,
60         LocationAccuracy *acc,
61         gpointer userdata)
62 {
63         if (error != LOCATION_ERROR_NONE) {
64                 g_debug("cb_address failed: error=%d\n", error);
65                 return;
66         }
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);
70 }
71
72 static void
73 cb_service_disabled (GObject *self,
74         guint status,
75         gpointer userdata)
76 {
77         g_debug("cb_service_disabled: status(%d) userdata(0x%x)", status, (unsigned int)userdata);
78 }
79
80 static void
81 cb_position_from_address (LocationError error, GList *pos_list, GList *acc_list, gpointer userdata)
82 {
83         if (error != LOCATION_ERROR_NONE) {
84                 g_debug("cb_position_from_address failed: error=%d\n", error);
85                 return;
86         }
87
88         g_list_foreach (pos_list, print_pos, NULL);
89         g_list_foreach (acc_list, print_acc, NULL);
90 }
91
92 static void
93 cb_position_from_freeformed_address (LocationError error, GList *pos_list, GList *acc_list, gpointer userdata)
94 {
95         if (error != LOCATION_ERROR_NONE) {
96                 g_debug("cb_position_from_freeformed_address failed: error=%d\n", error);
97                 return;
98         }
99
100         g_list_foreach (pos_list, print_pos, NULL);
101         g_list_foreach (acc_list, print_acc, NULL);
102 }
103
104 static void
105 cb_address_from_position (LocationError error, LocationAddress *addr, LocationAccuracy *acc, gpointer userdata)
106 {
107         if (error != LOCATION_ERROR_NONE) {
108                 g_debug("cb_address_from_position failed: error=%d\n", error);
109                 return;
110         }
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);
114 }
115
116 static void
117 cb_service_enabled (GObject *self,
118         guint status,
119         gpointer userdata)
120 {
121         g_debug("cb_service_enabled: status(%d) userdata(0x%x)", status, (unsigned int)userdata);
122
123         LocationAddress *addr = NULL;
124         LocationAccuracy *acc = NULL;
125         LocationObject *loc = (LocationObject*)userdata;
126
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);
135
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);
139 }
140
141 static gboolean
142 async_request (gpointer loc)
143 {
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);
150
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);
156         g_free(addr_str);
157
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);
164         return FALSE;
165 }
166
167 int
168 main (int argc, char *argv[])
169 {
170         LocationObject *loc = NULL;
171
172         // If application is executed by AUL, this is not needed.
173         g_setenv("PKG_NAME", "com.samsung.address-sample", 1);
174
175         g_type_init();
176         location_init ();
177         loop = g_main_loop_new (NULL, TRUE);
178
179         loc  = location_new (LOCATION_METHOD_GPS);
180         if (!loc) {
181                 g_warning("location_new failed");
182                 return -1;
183         }
184
185         LocationPosition *pos = NULL;
186         LocationAccuracy *acc = NULL;
187         GList *pos_list = NULL;
188         GList *acc_list = NULL;
189         LocationAddress *addr = NULL;
190
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);
198
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);
205         g_free(addr_str);
206
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);
217
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);
220
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);
225                 return -1;
226         }
227
228         g_timeout_add_seconds (60, exit_program, NULL);
229         g_main_loop_run (loop);
230
231         location_stop (loc);
232         location_free (loc);
233
234         return 0;
235 }