X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=gps-tracker.c;h=7c58c00efe68189bb0d5c075f3cb0d6f17fdb1b7;hb=ee01833f0ec684495c3127fd5d92e78d572bc598;hp=680de1073a3a6301de1476584b1e6a40c34b9646;hpb=fae20d6979dfe01bad666ac8d1772514a61c8f36;p=gps-tracker diff --git a/gps-tracker.c b/gps-tracker.c index 680de10..7c58c00 100644 --- a/gps-tracker.c +++ b/gps-tracker.c @@ -15,6 +15,10 @@ typedef struct { GtkWidget * main_vbox, *btn_hbox; GtkWidget *status_label; GtkButton *start_stop_button, *save_button; + GtkWidget *wp_hbox, *wp_label, *wp_name_entry; + //GtkWidget *wp_label; + GtkButton *wp_set_btn; + GString *wp_marker_str; gboolean tracking_is_on; FILE *outf_p; gchar *working_dir; @@ -48,10 +52,10 @@ static gchar * interface_file_chooser (AppData * appdata, GtkFileChooserAction a static void write_gpx_header(FILE *fp) { g_return_if_fail(fp); - fprintf(fp, + g_fprintf(fp, "\n" "\n" @@ -62,7 +66,22 @@ static void write_gpx_header(FILE *fp) static void write_gpx_footer(FILE *fp) { g_return_if_fail(fp); - fprintf(fp, "\n\n\n"); + g_fprintf(fp, "\n\n\n"); +} + +static void cb_wp_set_btn (GtkWidget * w, AppData * data) +{ + HildonEntry *entry = (HildonEntry*)data->wp_name_entry; + const gchar *marker_name = hildon_entry_get_text(entry); + if(marker_name[0]) { + g_string_assign(data->wp_marker_str, marker_name); + //hildon_banner_show_information(GTK_WIDGET(data->window), NULL, data->wp_marker_str->str); + hildon_entry_set_text(entry, ""); + } + else { + g_string_truncate(data->wp_marker_str, 0); + hildon_banner_show_information(GTK_WIDGET(data->window), NULL, "WARNING: no marker name given"); + } } static void cb_start_stop (GtkWidget * w, AppData * data) @@ -95,7 +114,7 @@ static void cb_file_save (GtkWidget * w, AppData * data) if (filename) { if(g_file_test(data->intermediate_gpx_data_filename, G_FILE_TEST_IS_REGULAR | G_FILE_TEST_EXISTS)) { g_rename(data->intermediate_gpx_data_filename, filename); - g_print ("File saved as %s\n", filename); + //g_print ("File saved as %s\n", filename); hildon_banner_show_information(GTK_WIDGET(data->window), NULL, filename); } else { @@ -111,72 +130,111 @@ on_gps_device_changed (LocationGPSDevice *device, gpointer data) AppData *app_data = data; GtkLabel *info = (GtkLabel*)app_data->status_label; GString *msg; + FILE *fp = app_data->outf_p; + gchar sbuf1[G_ASCII_DTOSTR_BUF_SIZE], sbuf2[G_ASCII_DTOSTR_BUF_SIZE]; if (!device) return; msg = g_string_sized_new (512); - if (device->fix) { - if (device->fix->fields & LOCATION_GPS_DEVICE_TIME_SET) { - g_print ("time = %f\n", device->fix->time); - g_string_append_printf(msg, "time = %f\n", device->fix->time); - } + if (device->fix && device->status) { + if (device->fix->fields & LOCATION_GPS_DEVICE_LATLONG_SET) { + //g_print ("lat = %f, long = %f\n", device->fix->latitude, device->fix->longitude); + g_string_append_printf (msg, "lat = %f, long = %f\n", + device->fix->latitude, + device->fix->longitude); + if(fp) { + g_fprintf(fp, "\n\n", + g_ascii_formatd(sbuf1, sizeof(sbuf1), "%f", device->fix->latitude), + g_ascii_formatd(sbuf2, sizeof(sbuf2), "%f", device->fix->longitude)); + if(app_data->wp_marker_str->len) { + g_fprintf(fp, "%s\n", app_data->wp_marker_str->str); + hildon_banner_show_information(GTK_WIDGET(app_data->window), NULL, app_data->wp_marker_str->str); + g_string_truncate(app_data->wp_marker_str, 0); + } + } - if (device->fix->fields & LOCATION_GPS_DEVICE_LATLONG_SET) { - g_print ("lat = %f, long = %f\n", - device->fix->latitude, - device->fix->longitude); - g_string_append_printf (msg, "lat = %f, long = %f\n", - device->fix->latitude, - device->fix->longitude); - } + if (device->fix->fields & LOCATION_GPS_DEVICE_TIME_SET) { + //g_print ("time = %f\n", device->fix->time); + g_string_append_printf(msg, "time = %F\n", device->fix->time); + if(fp) { + gchar st[64]; + struct tm *tmp; + time_t t = device->fix->time; + tmp = localtime(&t); + strftime(st, sizeof(st), "%FT%T%Z", tmp); + /* FIXME Is this really correct */ + g_fprintf(fp, "\n", st); + } + } + if(fp) { + if(device->fix->mode == LOCATION_GPS_DEVICE_MODE_2D) + g_fprintf(fp, "2d\n"); + else if(device->fix->mode == LOCATION_GPS_DEVICE_MODE_3D) + g_fprintf(fp, "3d\n"); + g_fprintf(fp, "%d\n", device->satellites_in_use); + } - if (device->fix->fields & LOCATION_GPS_DEVICE_ALTITUDE_SET) { - g_print ("alt = %f\n", device->fix->altitude); - g_string_append_printf (msg, "alt = %f\n", device->fix->altitude); - } + if (device->fix->fields & LOCATION_GPS_DEVICE_ALTITUDE_SET) { + //g_print ("alt = %f\n", device->fix->altitude); + g_string_append_printf (msg, "alt = %f\n", device->fix->altitude); + if(fp) + g_fprintf(fp, "%s\n", g_ascii_formatd(sbuf1, sizeof(sbuf1), "%f", device->fix->altitude)); - if (device->fix->fields & LOCATION_GPS_DEVICE_SPEED_SET) { - g_print ("speed = %f\n", device->fix->speed); - g_string_append_printf (msg, "speed = %f, ", device->fix->speed); - } + } - if (device->fix->fields & LOCATION_GPS_DEVICE_TRACK_SET) { - g_print ("track = %f\n", device->fix->track); - g_string_append_printf (msg, "track = %f, ", device->fix->track); - } + if (device->fix->fields & LOCATION_GPS_DEVICE_SPEED_SET) { + //g_print ("speed = %f\n", device->fix->speed); + g_string_append_printf (msg, "speed = %f, ", device->fix->speed); + if(fp) + g_fprintf(fp, "%s\n", g_ascii_formatd(sbuf1, sizeof(sbuf1), "%f", device->fix->speed)); + } - if (device->fix->fields & LOCATION_GPS_DEVICE_CLIMB_SET) { - g_print ("climb = %f\n", device->fix->climb); - g_string_append_printf (msg, "climb = %f\n", device->fix->climb); - } + if (device->fix->fields & LOCATION_GPS_DEVICE_TRACK_SET) { + //g_print ("track = %f\n", device->fix->track); + g_string_append_printf (msg, "track = %f, ", device->fix->track); + if(fp) + g_fprintf(fp, "%s\n", g_ascii_formatd(sbuf1, sizeof(sbuf1), "%f", device->fix->track)); + } - g_print ("Accuracy values:\n"); - g_print ("\tept = %e, eph = %e, epv = %e, epd = %e, " - "eps = %e, epc = %e\n", - device->fix->ept, - device->fix->eph, - device->fix->epv, - device->fix->epd, - device->fix->eps, - device->fix->epc); - } + if (device->fix->fields & LOCATION_GPS_DEVICE_CLIMB_SET) { + //g_print ("climb = %f\n", device->fix->climb); + g_string_append_printf (msg, "climb = %f\n", device->fix->climb); + } + + //g_print ("Accuracy values:\n"); + //g_print ("\tept = %e, eph = %e, epv = %e, epd = %e, " + // "eps = %e, epc = %e\n", + // device->fix->ept, + // device->fix->eph, + // device->fix->epv, + // device->fix->epd, + // device->fix->eps, + // device->fix->epc); + if(fp) { + g_fprintf(fp, "%s\n%s\n", + g_ascii_formatd(sbuf1, sizeof(sbuf1), "%.1f", device->fix->eph / 100.0), + g_ascii_formatd(sbuf2, sizeof(sbuf2), "%.1f", device->fix->epv)); + g_fprintf(fp, "\n"); + } + } + } - g_print ("Satellites in view: %d\n", device->satellites_in_view); - g_print ("Satellites in use: %d\n", device->satellites_in_use); + //g_print ("Satellites in view: %d\n", device->satellites_in_view); + //g_print ("Satellites in use: %d\n", device->satellites_in_use); g_string_append_printf (msg, "Satellites = % 2d/% 2d\n", device->satellites_in_use, device->satellites_in_view); - g_print ("GPS status: %d\n", device->status); + //g_print ("GPS status: %d\n", device->status); g_string_append_printf (msg, "GPS status: %d\n", device->status); hildon_gtk_window_set_progress_indicator(GTK_WINDOW(app_data->window), device->status == LOCATION_GPS_DEVICE_STATUS_NO_FIX); - if (device->cell_info) { - if (device->cell_info->flags & LOCATION_CELL_INFO_GSM_CELL_INFO_SET) - g_print ("Mobile Coutry Code GSM: %d\n", device->cell_info->gsm_cell_info.mcc); + //if (device->cell_info) { + // if (device->cell_info->flags & LOCATION_CELL_INFO_GSM_CELL_INFO_SET) + // g_print ("Mobile Coutry Code GSM: %d\n", device->cell_info->gsm_cell_info.mcc); - if (device->cell_info->flags & LOCATION_CELL_INFO_WCDMA_CELL_INFO_SET) - g_print ("Mobile Coutry Code WCDMA: %d\n", device->cell_info->wcdma_cell_info.mcc); - } + // if (device->cell_info->flags & LOCATION_CELL_INFO_WCDMA_CELL_INFO_SET) + // g_print ("Mobile Coutry Code WCDMA: %d\n", device->cell_info->wcdma_cell_info.mcc); + //} gtk_label_set_text(info, msg->str); if(device->status != LOCATION_GPS_DEVICE_STATUS_NO_FIX) @@ -223,9 +281,10 @@ int main (int argc, char **argv) data->program = hildon_program_get_instance (); g_set_application_name("GPS tracker"); - data->window = HILDON_WINDOW(hildon_stackable_window_new ()); + data->window = HILDON_WINDOW(hildon_stackable_window_new()); hildon_program_add_window (data->program, HILDON_WINDOW (data->window)); + data->wp_marker_str = g_string_sized_new(64); data->main_vbox = (void*)gtk_vbox_new(FALSE, 0); data->btn_hbox = (void*)gtk_hbox_new(TRUE, 0); @@ -240,11 +299,24 @@ int main (int argc, char **argv) gtk_box_pack_start(GTK_BOX(data->main_vbox), GTK_WIDGET(data->btn_hbox), FALSE, FALSE, 0); data->status_label = gtk_label_new("Waiting for GPS ..."); gtk_box_pack_start_defaults(GTK_BOX(data->main_vbox), data->status_label); + + data->wp_hbox = (void*)gtk_hbox_new(TRUE, 0); + //data->wp_label = gtk_label_new("Marker:"); + data->wp_name_entry = hildon_entry_new (HILDON_SIZE_HALFSCREEN_WIDTH); + hildon_entry_set_placeholder (HILDON_ENTRY (data->wp_name_entry), "First name"); + data->wp_set_btn = GTK_BUTTON (hildon_gtk_button_new (HILDON_SIZE_FINGER_HEIGHT | HILDON_SIZE_HALFSCREEN_WIDTH)); + gtk_button_set_label (data->wp_set_btn, "Set marker"); + //gtk_box_pack_start(GTK_BOX(data->wp_hbox), GTK_WIDGET(data->wp_label), TRUE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(data->wp_hbox), GTK_WIDGET(data->wp_name_entry), TRUE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(data->wp_hbox), GTK_WIDGET(data->wp_set_btn), TRUE, FALSE, 0); + gtk_box_pack_end(GTK_BOX(data->main_vbox), GTK_WIDGET(data->wp_hbox), FALSE, FALSE, 0); + /* Add vbox to main window */ gtk_container_add (GTK_CONTAINER (data->window), GTK_WIDGET(data->main_vbox)); g_signal_connect (G_OBJECT (data->save_button), "clicked", G_CALLBACK (cb_file_save), data); g_signal_connect (G_OBJECT (data->start_stop_button), "clicked", G_CALLBACK (cb_start_stop), data); + g_signal_connect (G_OBJECT (data->wp_set_btn), "clicked", G_CALLBACK (cb_wp_set_btn), data); g_signal_connect (G_OBJECT (data->window), "destroy", G_CALLBACK (gtk_main_quit), NULL); @@ -279,11 +351,12 @@ int main (int argc, char **argv) if(data->outf_p) fclose(data->outf_p); g_unlink(data->intermediate_gpx_data_filename); - g_object_unref (device); - g_object_unref (control); g_free(data->working_dir); g_free(data->intermediate_gpx_data_filename); + g_string_free(data->wp_marker_str, TRUE); g_free(data); + g_object_unref (device); + g_object_unref (control); return 0; }