#!/usr/bin/microperl
$| = 1;
 
sub latitude {
         my ($deg, $min) = unpack "a2a*", $_[0];
         my $lat = $deg + $min / 60;
         $lat = - $lat if $_[1] =~ /[Ss]/;
         return $lat;
}
sub longitude {
  my ($deg, $min) = unpack "a3a*", $_[0];
  my $long = $deg + $min / 60;
  $long = - $long if $_[1] =~ /[Ww]/;
  return $long;
}
 
my ($lat, $long, $alt, $altunits);
my ($speed, $speedunits, $heading);
 
my $settime = 0;
 
open(GPS, "/dev/ttyS2");
while(<GPS>) {
  my $time = time();
  if ($time < 1000000000 && $settime == 0) {
    print "Time not set, setting from gps\n";
    $settime = 1;
  }
 
  chomp($_);
 
  my @split = split(/\,/, $_);
 
  #$GPZDA,050841.00,12,06,2006,00,00*6F
  #[MMDDhhmm[[CC]YY][.ss]]
 
  if ($split[0] =~ /GPZDA/ && $settime == 1) {
    my ($gpstime, $null) = split(/\./, $split[1]);
    my @s = split(//, $gpstime);
    $gpstime = $s[0] . $s[1] . $s[2] . $s[3];
 
    my $gpsday  = $split[2];
    my $gpsmonth = $split[3];
    my $gpsyear = $split[4];
 
    `date -s $gpsmonth$gpsday$gpstime$gpsyear`;
 
  } elsif ($split[0] =~ /GPRMC/) {
    $speed = $split[7];
    $speedunits = "K";
    $heading = $split[8];
 
  } elsif ($split[0] =~ /GPGGA/) {
    $lat = $split[2];
    $lat = &latitude($lat, $split[3]);
    $lat = sprintf("%0.6f", $lat);
 
    $long = $split[4];
    $long = &longitude($long, $split[5]);
    $long = sprintf("%0.6f", $long);
 
    $alt = $split[9];
    $altunits = $split[10];    
 
    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
    my @month_array = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
    my @day_array = qw( Mon Tue Wed Thur Fri Sat Sun );
    $year += 1900;
    open(FILE, ">>/gps.log");
    print FILE "$mday,$hour:$min:$sec,$lat,$long,$alt$altunits,$speed,$heading\n";
    close (FILE);
 
  }
}
close(GPS);
 
gumstix_bible/goliath/gpsparser.txt · Last modified: 2008/06/30 22:35 by jamescoxon
 
Except where otherwise noted, content on this wiki is licensed under the following license:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki