#! /usr/bin/perl -w use strict; use IO::Socket; # TODO: Altitude support in output. # TODO: Check longtitude vs latitude. # init host and port my $host = '127.0.0.1' ; my $port = 2947 ; #my $gpsdreq = "pvt\n" ; #my $gpsdreq = "dmpvta\n" ; my $gpsdreq = "o\n" ; my $gpsdres ; my $timestamp=time() ; while (1) { my $sock = new IO::Socket::INET( PeerAddr => $host, PeerPort => $port, Proto => 'tcp'); $sock or die "no socket: $!"; $sock->send($gpsdreq) ; $sock->recv($gpsdres,128) ; chomp $gpsdres; close($sock); $gpsdres =~ s/[ ]+/ /g ; my ($info,$time,undef,$lat,$lon,undef,undef,undef,$head,$speed,undef,undef) = split(/ /,$gpsdres) ; open(FILE,">>$timestamp.log") or die "Can not open logfile\n" ; print FILE $gpsdres."\n" ; close FILE ; print "-----------------------\n" ; print "Time : $time\n" ; print "Speed : $speed\n" ; print "Lat : $lat\n" ; print "Lon : $lon\n" ; print "Heading: $head\n" ; print "-----------------------\n" ; sleep 1 ; }