--- /dev/null
+#include "app_data.h"
+#include "loc_data.h"
+
+void on_error(LocationGPSDControl *control, LocationGPSDControlError error, gpointer data)
+{
+ g_debug("location error: %d... quitting", error);
+}
+
+void on_changed(LocationGPSDevice *device, gpointer data)
+
+{
+ if (!device)
+ return;
+
+ if (device->fix) {
+ if (device->fix->fields & LOCATION_GPS_DEVICE_LATLONG_SET) {
+ AppData *app_data = (AppData *) data;
+
+ gchar *tmp_str = (gchar *) g_malloc (25);
+
+ g_sprintf(tmp_str,"%f", device->fix->latitude);
+ gtk_label_set_text( GTK_LABEL(app_data->main_ui->latitude_value_label), tmp_str );
+
+ g_sprintf(tmp_str,"%f", device->fix->longitude);
+ gtk_label_set_text( GTK_LABEL(app_data->main_ui->longitude_value_label), tmp_str );
+
+ if (device->fix->fields & LOCATION_GPS_DEVICE_ALTITUDE_SET) {
+ g_sprintf(tmp_str,"%f", device->fix->altitude);
+ gtk_label_set_text( GTK_LABEL(app_data->main_ui->altitude_value_label), tmp_str );
+ }
+
+ if (device->fix->fields & LOCATION_GPS_DEVICE_SPEED_SET) {
+ g_sprintf(tmp_str,"%f", device->fix->speed);
+ gtk_label_set_text( GTK_LABEL(app_data->main_ui->speed_value_label), tmp_str );
+ }
+
+ switch(device->fix->mode) {
+ case LOCATION_GPS_DEVICE_MODE_NOT_SEEN:
+ g_sprintf(tmp_str,"%s", "No sat in view");
+ break;
+ case LOCATION_GPS_DEVICE_MODE_NO_FIX:
+ g_sprintf(tmp_str,"%s", "Not fixed yed");
+ break;
+ case LOCATION_GPS_DEVICE_MODE_2D:
+ g_sprintf(tmp_str,"%s", "2D Fix");
+ break;
+ case LOCATION_GPS_DEVICE_MODE_3D:
+ g_sprintf(tmp_str,"%s", "3D FIX");
+ break;
+ default:
+ g_sprintf(tmp_str,"%s", "Bho");
+ }
+
+
+ gtk_label_set_text( GTK_LABEL(app_data->main_ui->fix_status_label), tmp_str );
+
+ g_debug("lat = %f, long = %f", device->fix->latitude, device->fix->longitude);
+
+ g_free(tmp_str);
+ }
+ }
+}
+
+void on_stop(LocationGPSDControl *control, gpointer data)
+{
+ g_debug("quitting");
+}
+
+gboolean start_location(gpointer data)
+{
+ location_gpsd_control_start((LocationGPSDControl *) data);
+ return FALSE;
+}