[pskmail] Re: A tiny progress report regarding gps

  • From: Per Crusefalk <per@xxxxxxxxxxxx>
  • To: pskmail@xxxxxxxxxxxxx
  • Date: Sun, 11 Feb 2007 10:43:04 +0100

Hi,

Its always better to drive these things by events rather than loops so I
don't think its very strange that this used less cpu. OTOH you would
have to look at gpsd memory and cpu usage to get the entire picture.
But I guess its time to stop beating the dead horse, I'll put gpsd on
the distro ("urpmi gpsd" was enough to do that) and your code looks fine
(as usual). I'll look at date & time things (if you haven't already).

73 de Per, sm0rwo

lör 2007-02-10 klockan 22:59 +0100 skrev Rein Couperus:
> This piece of code does the same as the previous one, nut at 0% CPU. It 
> subscribes to gpsd and writes the intresting values (lat lon, time) into a 
> file called .gps, where it can be fetched from anywhere with a simple 
> $gpsvalues = `cat .gps`;
> I think gpsd runs in user space so we can spawn it from pskmail...:
> 
> #!/usr/bin/perl -w
> 
> =head1 NAME
> 
> example-subscribe - Net::GPSD subscribe method example
> 
> =cut
> 
> use strict;
> use lib qw{./lib ../lib};
> use Net::GPSD;
> 
> my ($host,$port)=split(q{:}, shift()||'');
> $host||=q{localhost};
> $port||=q{2947};
> 
> my $gps=Net::GPSD->new(host=>$host, port=>$port)
>     || die("Error: Cannot connect to the gpsd server");
> 
> $gps->subscribe(handler=>\&point_handler);
> 
> print "Note: Nothing after the subscribe will be executed.\n";
> 
> sub point_handler {
>   my $last_return=shift()||1; #the return from the last call or undef if first
>   my $point=shift(); #current point $point->fix is true!
>   my $config=shift();
>         if ($point->fix) {
>               open (OUTGPS, ">.gps");
>               print OUTGPS $last_return, " ", $point->lat, " ", $point->lon, 
> " ", $point->time. "\n";
>               close (OUTGPS);
>         } else { 
>               open (OUTGPS, ">.gps");
>               print "No fix\n";
>               close (OUTGPS);
>         }
>   return $last_return + 1; #Return a true scalar type e.g. $a, {}, []
>                            #try the interesting return of $point
> }
> 
> 
> 
> > -----Ursprüngliche Nachricht-----
> > Von: pskmail@xxxxxxxxxxxxx
> > Gesendet: 10.02.07 21:25:42
> > An: pskmail@xxxxxxxxxxxxx
> > Betreff: [pskmail] Re: A tiny progress report regarding gps
> 
> 
> > 
> > Hi Rein and all,
> > 
> > I started this "thread" by looking at gpsd as I figured that would be
> > the best way to interface with a gps. I then set my eyes on GPS::NMEA
> > and saw how easy that was to use...
> > The benefit of working without gpsd would be to make installs easier and
> > minimize external dependencies. if GPS::NMEA now uses a lot of cpu then
> > that is certainly not in its favour. We could do it all the hard way
> > also and open a port and parse nmea direct. Such as here:
> > http://vancouver-webpages.com/peter/nmea.perl
> > 
> > But, then we would really be building a new gpsd and I find thats a
> > waste of effort. So, should we go with gpsd then ?
> > 
> > On a sidenote I have a hard time adjusting to the use of loops in perl.
> > If I would do that in any other language then everything would freeze.
> > In Pascal I would call Application.ProcessMessages once in a while to
> > leave some time for the OS to do its things.
> > 
> > 73 de Per, sm0rwo
> > 
> > 
> > lör 2007-02-10 klockan 20:53 +0100 skrev Rein Couperus:
> > > Hi Per,
> > > 
> > > I have been testing around a bit an d found a problem with GPS::NMEA.
> > > 
> > > below is a little test progam. It reads the gps constantly and puts the 
> > > time and position into ~/mail/.utc
> > > 
> > > The problem is that reading the socket this way takes up to 30% of my 
> > > CPU. (As a reference, fldigi takes 3% of may CPU).
> > > 
> > > I have also checked gpsd, and that does it with 0% CPU. I will now start 
> > > some testing with NET::GPSD.
> > > 
> > > Here is the little test program. Even if you only want the position it 
> > > takes a lot of CPU time:
> > > 
> > > #!/usr/bin/perl
> > > use GPS::NMEA;
> > > use Data::Dumper;
> > > 
> > > my $gps = GPS::NMEA->new(Port => '/dev/ttyUSB0',
> > > Baud => 4800);
> > > 
> > > print "Starting gps\n";
> > > 
> > > while(1) {
> > >   my($ns,$lat,$ew,$lon) = $gps->get_position;
> > > 
> > >     $data= Data::Dumper->new([$gps->{NMEADATA}],[])->Dump;
> > >   @items = split ",", $data;
> > >   for $utc (@items) {
> > >           if ($utc =~ /(\d\d:\d\d:\d\d)/) { 
> > >                   if ($ns eq "S") {
> > >                           $ns = "-";
> > >                   } else {
> > >                           $ns = " ";
> > >                   }
> > >                   if ($ew eq "W") {
> > >                           $ew = "-";
> > >                   } else {
> > >                           $ew = " ";
> > >                   }
> > >                   $outstring = sprintf("%s %s%s %s%s\n", 
> > > $1,$ns,$lat,$ew,$lon);
> > >                   `echo "$outstring" > ~/mail/.utc`;
> > >                   print $outstring;
> > >                   last;
> > >           } else {
> > >                   unlink "$ENV{HOME}/mail/.utc";
> > >           }
> > >   }
> > >   select undef, undef, undef, 0.5;
> > > } # end while
> > > 
> > > exit;
> > > 
> > > 
> > > > -----Ursprüngliche Nachricht-----
> > > > Von: pskmail@xxxxxxxxxxxxx
> > > > Gesendet: 10.02.07 15:39:04
> > > > An: pskmail@xxxxxxxxxxxxx
> > > > Betreff: [pskmail] Re: A tiny progress report regarding gps
> > > 
> > > 
> > > > 
> > > > I agree, that is an absolute must.
> > > > 
> > > > Per
> > > > 
> > > > (Sunny, -10C in the sun now)
> > > > 
> > > > lör 2007-02-10 klockan 13:54 +0100 skrev Rein Couperus:
> > > > > forgot, it would be nice if we could also get gps time so we can 
> > > > > update the clock without internet...
> > > > > 
> > > > > Rein
> > > > > 
> > > > > (Sunny, 20 degrees in the shade...)
> > > > > 
> > > > > > -----Ursprüngliche Nachricht-----
> > > > > > Von: pskmail@xxxxxxxxxxxxx
> > > > > > Gesendet: 10.02.07 11:58:00
> > > > > > An: pskmail@xxxxxxxxxxxxx
> > > > > > Betreff: [pskmail] Re: A tiny progress report regarding gps
> > > > > 
> > > > > 
> > > > > > 
> > > > > > lör 2007-02-10 klockan 10:55 +0100 skrev Rein Couperus:
> > > > > > > Hi Per,
> > > > > > > 
> > > > > > > I think what we need is something we can poll from pskmail, so we 
> > > > > > > can get the position when we want.
> > > > > > > One way to do that is to fork a new process which does exactly 
> > > > > > > what you did, and put the result in a file which we can read any 
> > > > > > > time from any of the other preocesses...
> > > > > > > 
> > > > > > > Rein EA/PA0R/P
> > > > > > > 
> > > > > > Ok, that should be easy (will fix).
> > > > > > I haven't looked at the client at all so I'll talk to you agn when I
> > > > > > need to have some gui control of this. I suppose we can agree that 
> > > > > > we
> > > > > > wont need gpsd if we do it this way ?
> > > > > > 
> > > > > > Another subject:
> > > > > > Dave has improved fldigi dominoex, oh7jjt and I are testing 
> > > > > > dominoex16
> > > > > > on 80 (and 40) meters now. Looks good so far, snr is really bad on 
> > > > > > 80
> > > > > > now but I got some parts anyway (more on that as snr improves).
> > > > > > This means I am using fldigi 1.32e and its much slower on psk than 
> > > > > > it
> > > > > > used to be, timing could be a bit off now.
> > > > > > 
> > > > > > 73 de Per, sm0rwo
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > > 
> > > > > 
> > > > -- 
> > > > Pär Crusefalk
> > > > Turnévägen 5
> > > > 14243 Skogås
> > > > Tel: +4687717482
> > > > Mob: +46768800670
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > > 
> > > 
> > 
> > 
> > 
> 
-- 
Pär Crusefalk
Turnévägen 5
14243 Skogås
Tel: +4687717482
Mob: +46768800670





Other related posts: