in reply to Re^2: Total fault tolerance for perl GPS program
in thread Total fault tolerance for perl GPS program

That'll do the trick :-) but there isn't much in the way of detection and remediation in that code, which is what I thought you were aiming for. If you want a rock-solid solution you should probably use a non-blocking socket/pipe and then restarts gpsd if it goes too long without reporting anything. Maybe also add a software-controlled electrical disconnect on the USB port so that you can power-cycle the device :-)
  • Comment on Re^3: Total fault tolerance for perl GPS program

Replies are listed 'Best First'.
Re^4: Total fault tolerance for perl GPS program
by Anonymous Monk on May 04, 2024 at 07:12 UTC
      If you want a rock-solid solution you should probably use a non-blocking socket/pipe

    I was just messing around. Net::GPSD3 uses IO::Socket::INET6 to handle it:

    #!/usr/bin/perl use Net::GPSD3; my $g = Net::GPSD3->new or die $!; $g->addHandler(\&tpv); $g->watch; sub tpv{ $t = shift; return unless $t->class eq 'TPV'; print join ' ', $t->timestamp, $t->lat, $t->lon, $t->alt; exit }
    perl -MNet::GPSD3 -le '$g=Net::GPSD3->new;$g->addHandler(\&tpv);sub tp +v{$t=shift;return unless$t->class eq"TPV";print join" ",$t->timestamp +,$t->lat,$t->lon,$t->alt;exit}$g->watch'
      and then restarts gpsd if it goes too long without reporting anything. Maybe also add a software-controlled electrical disconnect on the USB port so that you can power-cycle the device

    Those are cool ideas but I have to trust the GPS, and GPSD seems very robust, to prevent me from creating a race condition that bricks the device :-)