X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=gps-tracker.c;h=0e39111dc88c845a239c720c027a897ea4ac76c6;hb=bf740a6459d693ffcdb947ae9a5895926664e607;hp=ca0e76e3c4c3663d21ff9449ea6450be94f0134b;hpb=b426244efc74687456658fec99e34c65da63d3fe;p=gps-tracker diff --git a/gps-tracker.c b/gps-tracker.c index ca0e76e..0e39111 100644 --- a/gps-tracker.c +++ b/gps-tracker.c @@ -24,6 +24,8 @@ typedef struct { GString *wp_marker_str; gboolean tracking_is_on; FILE *outf_p; + guint points_recorded_in_current_segment; + LocationGPSDeviceStatus last_device_status; gchar *working_dir; gchar *intermediate_gpx_data_filename; } AppData; @@ -58,11 +60,14 @@ static void write_gpx_header(FILE *fp) g_fprintf(fp, "\n" "\n" - "\n\n" + "\n" + "gps-tracker\n" + "This is a track recorded by 'GPS Træcker' on Maemo\n" + "\n" ); } @@ -92,6 +97,8 @@ static void cb_start_stop (GtkWidget * w, AppData * data) data->tracking_is_on = !data->tracking_is_on; if(data->tracking_is_on) { /* START pressed */ data->outf_p = fopen(data->intermediate_gpx_data_filename, "w"); + data->points_recorded_in_current_segment = 0; + data->last_device_status = LOCATION_GPS_DEVICE_STATUS_NO_FIX; write_gpx_header(data->outf_p); //hildon_banner_show_information(GTK_WIDGET(data->window), NULL, "Tracking started"); gtk_button_set_label (data->start_stop_button, "Stop"); @@ -99,6 +106,8 @@ static void cb_start_stop (GtkWidget * w, AppData * data) gtk_widget_set_sensitive(GTK_WIDGET(data->wp_set_btn), TRUE); } else { /* STOP pressed */ + data->points_recorded_in_current_segment = 0; + data->last_device_status = LOCATION_GPS_DEVICE_STATUS_NO_FIX; if(data->outf_p) { write_gpx_footer(data->outf_p); fclose(data->outf_p); @@ -130,7 +139,7 @@ static void cb_file_save (GtkWidget * w, AppData * data) g_free(filename); } -#define SPAN_PREFIX "" +#define SPAN_PREFIX "" #define SPAN_POST "" #define LABEL_FMT(s) SPAN_PREFIX s SPAN_POST #define CHANGE_LABEL(w,fmt,val) change_label_text(w, SPAN_PREFIX fmt SPAN_POST, val) @@ -154,15 +163,21 @@ static void on_gps_device_changed (LocationGPSDevice *device, gpointer data) if (!device) return; - if (device->fix && device->status) { + if (device->fix) { + //g_print("mode=%d stat=%d\n", device->fix->mode, device->status); if (device->fix->fields & LOCATION_GPS_DEVICE_LATLONG_SET) { //g_print ("lat = %f, long = %f\n", device->fix->latitude, device->fix->longitude); CHANGE_LABEL(app_data->lat_val_label, "% 9.6f", device->fix->latitude); CHANGE_LABEL(app_data->lon_val_label, "% 9.6f", device->fix->longitude); if(fp) { + if(app_data->last_device_status != device->status) { + if(app_data->points_recorded_in_current_segment) + g_fprintf(fp, "\n\n\n"); + app_data->last_device_status = device->status; + } 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)); + 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); @@ -170,6 +185,8 @@ static void on_gps_device_changed (LocationGPSDevice *device, gpointer data) } } + app_data->points_recorded_in_current_segment++; + if (device->fix->fields & LOCATION_GPS_DEVICE_TIME_SET) { //g_print ("time = %f\n", device->fix->time); if(fp) { @@ -192,30 +209,38 @@ static void on_gps_device_changed (LocationGPSDevice *device, gpointer data) if (device->fix->fields & LOCATION_GPS_DEVICE_ALTITUDE_SET) { //g_print ("alt = %f\n", device->fix->altitude); - CHANGE_LABEL(app_data->alt_val_label, "% 5.0f", device->fix->altitude); + CHANGE_LABEL(app_data->alt_val_label, "% 5.0fm", device->fix->altitude); if(fp) - g_fprintf(fp, "%s\n", g_ascii_formatd(sbuf1, sizeof(sbuf1), "%f", device->fix->altitude)); + g_fprintf(fp, "%s\n", g_ascii_formatd(sbuf1, sizeof(sbuf1), "%.1f", device->fix->altitude)); } + else + CHANGE_LABEL(app_data->alt_val_label, " ?", NULL); if (device->fix->fields & LOCATION_GPS_DEVICE_SPEED_SET) { //g_print ("speed = %f\n", device->fix->speed); CHANGE_LABEL(app_data->speed_val_label, "% 5.1fkm/h", device->fix->speed); if(fp) - g_fprintf(fp, "%s\n", g_ascii_formatd(sbuf1, sizeof(sbuf1), "%f", device->fix->speed)); + g_fprintf(fp, "%s\n", g_ascii_formatd(sbuf1, sizeof(sbuf1), "%.1f", device->fix->speed)); } + else + CHANGE_LABEL(app_data->speed_val_label, " ?", NULL); if (device->fix->fields & LOCATION_GPS_DEVICE_TRACK_SET) { //g_print ("track = %f\n", device->fix->track); CHANGE_LABEL(app_data->track_val_label, "%4.0f°", device->fix->track); if(fp) - g_fprintf(fp, "%s\n", g_ascii_formatd(sbuf1, sizeof(sbuf1), "%f", device->fix->track)); + g_fprintf(fp, "%s\n", g_ascii_formatd(sbuf1, sizeof(sbuf1), "%.1f", device->fix->track)); } + else + CHANGE_LABEL(app_data->track_val_label, " ?", NULL); if (device->fix->fields & LOCATION_GPS_DEVICE_CLIMB_SET) { //g_print ("climb = %f\n", device->fix->climb); - CHANGE_LABEL(app_data->climb_val_label, "%+4.0f°", device->fix->climb); + CHANGE_LABEL(app_data->climb_val_label, "%+6.2fm/s", device->fix->climb); } + else + CHANGE_LABEL(app_data->climb_val_label, " ?", NULL); //g_print ("Accuracy values:\n"); //g_print ("\tept = %e, eph = %e, epv = %e, epd = %e, " @@ -234,15 +259,14 @@ static void on_gps_device_changed (LocationGPSDevice *device, gpointer data) } } } + else + g_print("device->fix=%p\n", device->fix); //g_print ("Satellites in view: %d\n", device->satellites_in_view); //g_print ("Satellites in use: %d\n", device->satellites_in_use); CHANGE_LABEL2(app_data->sat_val_label, "%3d/%2d", device->satellites_in_use, device->satellites_in_view); //g_print ("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); @@ -251,8 +275,18 @@ static void on_gps_device_changed (LocationGPSDevice *device, gpointer data) // g_print ("Mobile Coutry Code WCDMA: %d\n", device->cell_info->wcdma_cell_info.mcc); //} - if(device->status != LOCATION_GPS_DEVICE_STATUS_NO_FIX) + if(device->status == LOCATION_GPS_DEVICE_STATUS_NO_FIX) { + hildon_gtk_window_set_progress_indicator(GTK_WINDOW(app_data->window), 1); + CHANGE_LABEL(app_data->lat_val_label, " ?", NULL); + CHANGE_LABEL(app_data->lon_val_label, " ?", NULL); + CHANGE_LABEL(app_data->alt_val_label, " ?", NULL); + CHANGE_LABEL(app_data->speed_val_label, " ?", NULL); + CHANGE_LABEL(app_data->track_val_label, " ?", NULL); + } + else { + hildon_gtk_window_set_progress_indicator(GTK_WINDOW(app_data->window), 0); gtk_widget_set_sensitive(GTK_WIDGET(app_data->start_stop_button), TRUE); + } } static void @@ -291,7 +325,7 @@ int main (int argc, char **argv) data->working_dir = g_strdup_printf("%s" G_DIR_SEPARATOR_S "MyDocs", g_get_home_dir()); data->intermediate_gpx_data_filename = g_strdup_printf("%s" G_DIR_SEPARATOR_S ".gps-tracker.gpx", data->working_dir); data->program = hildon_program_get_instance (); - g_set_application_name("GPS tracker"); + g_set_application_name("GPS Træcker"); data->window = HILDON_WINDOW(hildon_stackable_window_new()); hildon_program_add_window (data->program, HILDON_WINDOW (data->window)); @@ -316,9 +350,9 @@ int main (int argc, char **argv) gtk_table_attach_defaults(data->loc_gps_data_table, lon_label, 0, 1, 1, 2); gtk_table_attach_defaults(data->loc_gps_data_table, alt_label, 0, 1, 2, 3); gtk_table_attach_defaults(data->loc_gps_data_table, sat_label, 0, 1, 3, 4); - data->lat_val_label = gtk_label_new(" ?"); - data->lon_val_label = gtk_label_new(" ?"); - data->alt_val_label = gtk_label_new(" ?"); + data->lat_val_label = gtk_label_new(NULL); + data->lon_val_label = gtk_label_new(NULL); + data->alt_val_label = gtk_label_new(NULL); data->sat_val_label = gtk_label_new(" 0/ 0"); gtk_misc_set_alignment (GTK_MISC (data->lat_val_label), 0, 0.5); gtk_misc_set_alignment (GTK_MISC (data->lon_val_label), 0, 0.5); @@ -342,7 +376,7 @@ int main (int argc, char **argv) { GtkWidget *alignment_track = gtk_alignment_new (0.5, 0.5, 1, 1); GtkWidget *speed_label = gtk_label_new("Speed:"); - GtkWidget *track_label = gtk_label_new("Heading:"); + GtkWidget *track_label = gtk_label_new("Orientation:"); GtkWidget *climb_label = gtk_label_new("Climb:"); gtk_alignment_set_padding(GTK_ALIGNMENT(alignment_track), 0,0,0,0); gtk_misc_set_alignment (GTK_MISC (speed_label), 1, 0.5); @@ -351,9 +385,10 @@ int main (int argc, char **argv) gtk_table_attach_defaults(data->loc_track_data_table, speed_label, 0, 1, 0, 1); gtk_table_attach_defaults(data->loc_track_data_table, track_label, 0, 1, 1, 2); gtk_table_attach_defaults(data->loc_track_data_table, climb_label, 0, 1, 2, 3); - data->speed_val_label = gtk_label_new(" ?"); - data->track_val_label = gtk_label_new(" ?"); - data->climb_val_label = gtk_label_new(" ?"); + data->speed_val_label = gtk_label_new(NULL); + CHANGE_LABEL(data->speed_val_label, "% 5.1fkm/h", 0.); + data->track_val_label = gtk_label_new(NULL); + data->climb_val_label = gtk_label_new(NULL); gtk_misc_set_alignment (GTK_MISC (data->speed_val_label), 0, 0.5); gtk_misc_set_alignment (GTK_MISC (data->track_val_label), 0, 0.5); gtk_misc_set_alignment (GTK_MISC (data->climb_val_label), 0, 0.5);