1 #include "location-provider.h"
3 #include <location/location-gps-device.h>
4 #include <location/location-gpsd-control.h>
6 void (*listener)(double, double) = NULL;
8 /*static void on_error(LocationGPSDControl *control, LocationGPSDControlError error, gpointer data)
10 g_debug("location error: %d... quitting", error);
11 g_main_loop_quit((GMainLoop *) data);
14 static void on_changed(LocationGPSDevice *device, gpointer data)
16 if (device == NULL || listener == NULL) {
21 if (device->fix->fields & LOCATION_GPS_DEVICE_LATLONG_SET) {
22 listener(device->fix->latitude, device->fix->longitude);
27 /*static void on_stop(LocationGPSDControl *control, gpointer data)
30 g_main_loop_quit((GMainLoop *) data);
33 /*static gboolean start_location(gpointer data)
35 location_gpsd_control_start((LocationGPSDControl *) data);
39 LocationGPSDControl *control = NULL;
40 LocationGPSDevice *device = NULL;
42 void setup_location_provider()
48 // loop = g_main_loop_new(NULL, FALSE);
50 if (control != NULL) {
54 control = location_gpsd_control_get_default();
55 device = g_object_new(LOCATION_TYPE_GPS_DEVICE, NULL);
57 g_object_set(G_OBJECT(control),
58 "preferred-method", LOCATION_METHOD_USER_SELECTED,
59 "preferred-interval", LOCATION_INTERVAL_DEFAULT,
62 // g_signal_connect(control, "error-verbose", G_CALLBACK(on_error), loop);
63 g_signal_connect(device, "changed", G_CALLBACK(on_changed), control);
64 // g_signal_connect(control, "gpsd-stopped", G_CALLBACK(on_stop), loop);
66 // g_idle_add(start_location, control);
68 // g_main_loop_run(loop);
71 void cleanup_location_provider()
73 if (control != NULL) {
74 location_gpsd_control_stop(control);
76 g_object_unref(device);
77 g_object_unref(control);
83 void start_location_provider()
85 if (control != NULL) {
86 location_gpsd_control_start(control);
90 void stop_location_provider()
92 if (control != NULL) {
93 location_gpsd_control_stop(control);
97 void set_location_listener(void (*newListener)(double, double))
99 listener = newListener;