~ubuntu-branches/ubuntu/trusty/foxtrotgps/trusty

« back to all changes in this revision

Viewing changes to src/tracks.c

  • Committer: Package Import Robot
  • Author(s): Daniel Baumann
  • Date: 2012-02-14 06:13:28 UTC
  • mfrom: (11.1.1 sid)
  • Revision ID: package-import@ubuntu.com-20120214061328-3pa58mr5jtibvi2k
Tags: 1.1.0-1
* Using compression level 9 also for binary packages.
* Merging upstream version 1.1.0:
  - includes osb2tango and poi2osm (Closes: #647986).
* Removing curl.patch, included upstream.
* Updating to debhelper version 9.
* Updating years in copyright.

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
 
9
9
#include <gtk/gtk.h>
10
10
#include <glib.h>
11
 
#include <glib/gstdio.h>
12
11
 
13
12
#include <sys/types.h>
14
13
#include <sys/stat.h>
17
16
#include <libxml/parser.h>
18
17
#include <libxml/tree.h>
19
18
 
 
19
#include <gps.h>
 
20
 
20
21
 
21
22
#include "globals.h"
22
23
#include "tracks.h"
210
211
track_log()
211
212
{
212
213
        gchar buffer[256];
213
 
        gchar data[256];
 
214
        const gchar *fixstr;
214
215
        time_t time_sec;
215
216
        struct tm *ts;
 
217
        int heartfreq = 42;
216
218
        
217
219
        
218
220
        if(gpsdata->valid)
220
222
                
221
223
                time_sec = (time_t)gpsdata->fix.time;
222
224
                ts = localtime(&time_sec);
223
 
                
224
 
                
225
225
                strftime(buffer, sizeof(buffer), "%Y-%m-%dT%H:%M:%SZ", ts);
226
226
                
227
 
                
228
 
                snprintf(data, sizeof(data), "%f,%f,%.1f,%.1f,%.1f,%.1f,%s\n",
229
 
                                gpsdata->fix.latitude,
230
 
                                gpsdata->fix.longitude,
231
 
                                gpsdata->fix.altitude,
232
 
                                gpsdata->fix.speed,
233
 
                                gpsdata->fix.heading,
234
 
                                gpsdata->hdop,
235
 
                                buffer);
236
 
                
237
 
                if (fp) fprintf(fp, "%s", data);
238
 
        }
 
227
                heartfreq = (hrmdata) ? hrmdata->freq : 0;
 
228
 
 
229
                switch (gpsdata->fix.mode) {
 
230
                default:
 
231
                case MODE_NOT_SEEN:
 
232
                case MODE_NO_FIX:
 
233
                        fixstr = "none";
 
234
                        break;
 
235
                case MODE_2D:
 
236
                        fixstr = "2d";
 
237
                        break;
 
238
                case MODE_3D:
 
239
                        fixstr = "3d";
 
240
                        break;
 
241
                }
 
242
 
 
243
                if (fp)
 
244
                {
 
245
                        fprintf (fp, "\n"
 
246
                                 "<trkpt lat=\"%g\" lon=\"%g\">\n"
 
247
                                 "  <ele>%g</ele>\n"
 
248
                                 "  <time>%s</time>\n"
 
249
                                 "  <fix>%s</fix>\n"
 
250
                                 "  <hdop>%g</hdop>\n"
 
251
                                 "  <extensions>\n"
 
252
                                 "    <gpxtpx:TrackPointExtension>\n",
 
253
                                 gpsdata->fix.latitude,
 
254
                                 gpsdata->fix.longitude,
 
255
                                 gpsdata->fix.altitude,
 
256
                                 buffer,
 
257
                                 fixstr,
 
258
                                 gpsdata->hdop);
 
259
 
 
260
                        if (heartfreq > 0)
 
261
                        {
 
262
                                /* The TrackPointExtension schema defines
 
263
                                   the lower bound on heart-rate to be 1. */
 
264
 
 
265
                                fprintf (fp,
 
266
                                 "      <gpxtpx:hr>%d</gpxtpx:hr>\n",
 
267
                                         heartfreq);
 
268
                        }
 
269
 
 
270
                        fprintf (fp,
 
271
                                 "      <gpxtpx:speed>%g</gpxtpx:speed>\n"
 
272
                                 "      <gpxtpx:course>%g</gpxtpx:course>\n"
 
273
                                 "    </gpxtpx:TrackPointExtension>\n"
 
274
                                 "  </extensions>\n"
 
275
                                 "</trkpt>\n",
 
276
                                 gpsdata->fix.speed,
 
277
                                 gpsdata->fix.heading);
 
278
      }
 
279
  }
239
280
}
240
281
 
241
282
void
257
298
        
258
299
        
259
300
 
260
 
        strftime(buffer, sizeof(buffer), "%Y%m%d_%H%M%S.log", tm_struct);
261
 
        
 
301
        strftime (buffer, sizeof (buffer), "%Y%m%d_%H%M%S.gpx", tm_struct);
262
302
 
263
303
        
264
304
        filename = g_strconcat(global_track_dir, buffer,NULL);
270
310
                fp = fopen(filename,"w");
271
311
                if(!fp)
272
312
                {
273
 
                        printf("oops: %s \n",strerror(errno));
274
 
                        perror("Triplog open failed: ");
275
 
                        gtk_label_set_label(label76,"<span foreground='#ff0000'>Error opening logfile</span>");
 
313
                        printf (_("oops: %s\n"), strerror (errno));
 
314
                        perror (_("Triplog open failed: "));
 
315
                        gtk_label_set_label (label76,
 
316
                                             _("<span foreground='#ff0000'>"
 
317
                                               "Error opening logfile"
 
318
                                               "</span>"));
276
319
                }
277
320
                else 
278
321
                {
279
 
                        labeltext = g_strconcat("<b><span foreground='#0000ff'>Log: ",buffer,"</span></b>",NULL);
 
322
                        labeltext = g_strdup_printf (_("<b><span foreground='#0000ff'>Log: %s</span></b>"), buffer);
280
323
                        gtk_label_set_label(label76,labeltext);
281
324
                        g_free(labeltext);      
 
325
 
 
326
                        fprintf(fp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
 
327
                                    "<gpx version=\"1.1\"\n"
 
328
                                    "     creator=\"" PACKAGE_NAME " " PACKAGE_VERSION "\"\n"
 
329
                                    "     xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
 
330
                                    "     xmlns:gpxtpx=\"http://www.garmin.com/xmlschemas/TrackPointExtension/v2\"\n"
 
331
                                    "     xmlns=\"http://www.topografix.com/GPX/1/1\"\n"
 
332
                                    "     xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1\n"
 
333
                                    "                         http://www.topografix.com/GPX/1/1/gpx.xsd\n"
 
334
                                    "                         http://www.garmin.com/xmlschemas/TrackPointExtension/v2\n"
 
335
                                    "                         http://www8.garmin.com/xmlschemas/TrackPointExtensionv2.xsd\">\n"
 
336
                                    "<trk>\n"
 
337
                                    "<trkseg>\n");
282
338
                }
283
339
        }
284
340
        
298
354
        
299
355
        if(fp) {
300
356
                printf("closing FP\n");
 
357
 
 
358
                fprintf (fp, "\n"
 
359
                         "</trkseg>\n"
 
360
                         "</trk>\n"
 
361
                         "</gpx>\n");
 
362
 
301
363
                ret = fclose(fp);
302
364
                fp = NULL;
303
365
        
324
386
        
325
387
        if (err != NULL)
326
388
        {
327
 
                fprintf (stderr, "Problem opening directory: %s\n", err->message);
 
389
                fprintf (stderr, _("Problem opening directory: %s\n"),
 
390
                         err->message);
328
391
                g_error_free (err);
329
392
                return;
330
393
        }
433
496
        }
434
497
 
435
498
        if(loaded_track)
436
 
                g_slist_free(loaded_track);
 
499
        {
 
500
                g_slist_foreach (loaded_track, (GFunc) g_free, NULL);
 
501
                g_slist_free (loaded_track);
 
502
        }
437
503
        loaded_track = NULL;
438
504
 
439
505
        if (g_strrstr(file,".gpx") ||
504
570
load_log_file_into_list(char *file)
505
571
{
506
572
        GSList *list = NULL;
507
 
        float lat, lon;
508
573
        char line[121];
509
 
        char **arr;
510
574
        FILE *fd;
511
575
 
512
576
        fd = fopen(file, "r");
513
577
        while(fgets(line,120, fd))
514
578
        {
515
 
                trackpoint_t *tp = g_new0(trackpoint_t,1);
516
 
                
517
 
                
518
 
                arr = g_strsplit(line, ",", 2);
519
 
                
520
 
                
521
 
                if (arr[0] == NULL || arr[1] == NULL) continue;
522
 
 
523
 
                
524
 
                lat = atof(arr[0]);
525
 
                lon = atof(arr[1]);
526
 
                
527
 
                tp->lat = deg2rad(lat);
528
 
                tp->lon = deg2rad(lon);         
 
579
                trackpoint_t *tp;
 
580
                char *latstr, *lonstr;
 
581
                char *parseptr;
 
582
                
 
583
                latstr = strtok_r (line, ",", &parseptr);
 
584
                lonstr = strtok_r (NULL, ",", &parseptr);
 
585
                
 
586
                
 
587
                if (latstr == NULL || lonstr == NULL) continue;
 
588
 
 
589
 
 
590
                tp = g_new0 (trackpoint_t, 1);
 
591
                tp->lat = deg2rad (atof (latstr));
 
592
                tp->lon = deg2rad (atof (lonstr));              
529
593
 
530
594
                list = g_slist_append(list, tp);
531
595
        }
548
612
        
549
613
        if (doc == NULL) {
550
614
                printf("error: could not parse file %s\n", file);
 
615
        } else {
 
616
                root_element = xmlDocGetRootElement(doc);
 
617
                list = parse_nodes(root_element);
 
618
 
 
619
                xmlFreeDoc(doc);
551
620
        }
552
 
        
553
 
        root_element = xmlDocGetRootElement(doc);
554
 
        list = parse_nodes(root_element);
555
 
        
556
 
        xmlFreeDoc(doc);
557
 
        xmlCleanupParser();
558
 
        
 
621
 
559
622
        return list;
560
623
}
561
624
 
573
636
        doc = xmlReadMemory(gpx_string, strlen(gpx_string), "noname.xml", NULL, 0);
574
637
        
575
638
        if (doc == NULL) {
576
 
                fprintf(stderr, "Failed to parse document\n");
 
639
                fprintf (stderr, _("Failed to parse document\n"));
 
640
        } else {
 
641
                root_element = xmlDocGetRootElement(doc);
 
642
                list = parse_nodes(root_element);
 
643
 
 
644
                xmlFreeDoc(doc);
577
645
        }
578
 
        
579
 
        root_element = xmlDocGetRootElement(doc);
580
 
        list = parse_nodes(root_element);
581
646
 
582
 
        xmlFreeDoc(doc);        
583
 
        xmlCleanupParser();
584
 
        
585
647
        return list;
586
648
}
587
649
 
720
782
                
721
783
                
722
784
                if(reply->status_code == 200)
723
 
                        err_msg = g_strdup("<span color='#aa0000'><b>Oops! No Route found</b></span>\nTry with another Start/End");
 
785
                        err_msg = g_strdup (_("<span color='#aa0000'><b>"
 
786
                                              "Oops! No Route found"
 
787
                                              "</b></span>\n"
 
788
                                              "Try with another Start/End"));
724
789
                
725
790
                
726
791
                else if(reply->status_code == 203)
728
793
                
729
794
                
730
795
                else if (reply->status_code)
731
 
                        err_msg = g_strdup("<span color='#aa0000'><b>Duh! A Server Error</b></span>\nMaybe try later again...");
 
796
                        err_msg = g_strdup (_("<span color='#aa0000'><b>"
 
797
                                              "Duh! A Server Error"
 
798
                                              "</b></span>\n"
 
799
                                              "Maybe try later again..."));
732
800
                
733
801
                
734
802
                else
735
 
                        err_msg = g_strdup("<span color='#aa0000'><b>Oh! A Network Error</b></span>\nCheck the internet!");
 
803
                        err_msg = g_strdup (_("<span color='#aa0000'><b>"
 
804
                                              "Oh! A Network Error"
 
805
                                              "</b></span>\n"
 
806
                                              "Check the internet!"));
736
807
                
737
808
                gdk_threads_enter();
738
809
                {