mirror of
https://github.com/Xastir/Xastir
synced 2026-08-13 17:46:16 -04:00
A lot of scripts in this directory had "#!/usr/bin/perl" hard coded at their tops. This is wrong, because perl may not be installed there (it isn't on a lot of non-Linux systems). I have replaced the hard-coded path with "/usr/bin/env perl" which will locate the perl binary in the user's PATH. Some scripts in this directory already had that. Those are scripts that I actually use myself on a system that has perl in /usr/local/bin, and so I had already fixed them. Another alternative to using /usr/bin/env would be to create a configure test to find the perl binary, then substitute it in a .in version of the script. That is more work, for negligible benefit.
161 lines
4.4 KiB
Perl
Executable file
161 lines
4.4 KiB
Perl
Executable file
#!/usr/bin/env perl
|
|
|
|
# Copyright (C) 2000-2012 Curt Mills, WE7U
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
# 02111-1307, USA.
|
|
#
|
|
|
|
# This script will ask for an item designator, then create a file
|
|
# with that name + ".log" in the ~/.xastir/logs directory. The
|
|
# file will contain APRS items created from the downloaded Garmin
|
|
# tracklog. Reading that log file with Xastir will result in an
|
|
# object with a track being displayed on the map screen.
|
|
|
|
# You may wish to bump up MAX_TRACKS in db.h to 1024 in order to see
|
|
# the entire log, but be careful with Xastir's memory image growing
|
|
# too fast if you're connected to the 'net after making this change.
|
|
|
|
# This script uses the GPS::Garmin module which can be obtained
|
|
# from http://sourceforge.net/projects/perl-gps/
|
|
|
|
|
|
use GPS::Garmin;
|
|
use IO::File;
|
|
|
|
|
|
# Flush STDOUT
|
|
$| = 1;
|
|
|
|
|
|
# Hard-coded "from" callsign name. This becomes the "sending"
|
|
# callsign for the APRS Items.
|
|
$from = "SAR";
|
|
|
|
|
|
# Ask for the item name. This will turn into the 3-9 character APRS
|
|
# item name.
|
|
printf("\n\nEnter item designator: Length 1-9, all except '!' and '_' allowed, case respected:\n\n");
|
|
printf("\t123456789\n\t");
|
|
$name = <>;
|
|
chomp $name;
|
|
if (length($name) < 1) {
|
|
die "Must be at least one character!\n";
|
|
}
|
|
if (length($name) > 9) {
|
|
$name =~ s/(.{9}).*/\1/; # Terminate it at 9 chars
|
|
}
|
|
if (length($name) < 3) {
|
|
$name = $name . " "; # Pad the name with spaces
|
|
$name =~ s/(.{3}).*/\1/; # Terminate it at 3 chars
|
|
}
|
|
|
|
# We need to enforce the naming restrictions for APRS Items. '!'
|
|
# and '_' are not allowed, anything else that's printable ASCII is
|
|
# ok.
|
|
@j = split(//, $name);
|
|
for ($i = 0; $i < length($name); $i++) {
|
|
#printf("$i $j[$i]\n");
|
|
if ( ($j[$i] lt ' ')
|
|
|| ($j[$i] gt '~')
|
|
|| ($j[$i] eq '!')
|
|
|| ($j[$i] eq '_') ) {
|
|
$j[$i] = ' ';
|
|
}
|
|
}
|
|
$name = join("",@j);
|
|
|
|
$filename = "~/.xastir/logs/$name.log";
|
|
|
|
# Get rid of spaces in the filename
|
|
$filename =~ s/\s+//g;
|
|
|
|
# Expand the tilde into the home directory
|
|
$filename =~ s{ ^ ~ ( [^/]* ) }
|
|
{ $1
|
|
? (getpwnam($1))[7]
|
|
: ( $ENV{HOME} || $ENV{LOGDIR}
|
|
|| (getpwuid($>))[7]
|
|
)
|
|
}ex;
|
|
|
|
printf("\nThe item designator will be: ($name)\n");
|
|
printf("The output filename will be: ($filename)\n\n");
|
|
printf("Connect Garmin GPS to /dev/ttyS0 (COM1), set it to Garmin/Garmin mode.\n");
|
|
printf("Press <ENTER> to proceed with download, Ctrl-C to abort\n");
|
|
<>;
|
|
|
|
|
|
# Create a file to hold the data
|
|
$output = IO::File->new("> $filename")
|
|
or die "Couldn't open $filename for writing: $!\n";
|
|
|
|
|
|
$gps = new GPS::Garmin( 'Port' => '/dev/ttyS0',
|
|
'Baud' => 9600,
|
|
) or die "Unable to connect to receiver: $!";
|
|
|
|
|
|
# Transfer trackpoints:
|
|
$i = 0;
|
|
$gps->prepare_transfer("trk");
|
|
while ($gps->records)
|
|
{
|
|
($lat,$lon,$time) = $gps->grab;
|
|
# printf("%f %f %d\n",$lat,$lon,$time);
|
|
if ($lon < 0) {
|
|
$londeg = sprintf("%d",-$lon);
|
|
$lonmin = (-$lon - $londeg) * 60;
|
|
$lonchar = "W";
|
|
}
|
|
else {
|
|
$londeg = sprintf("%d",$lon);
|
|
$lonchar = "E";
|
|
$lonmin = ($lon - $londeg) * 60;
|
|
}
|
|
if ($lat < 0) {
|
|
$latdeg = sprintf("%d",-$lat);
|
|
$latmin = (-$lat - $latdeg) * 60;
|
|
$latchar = "S";
|
|
}
|
|
else {
|
|
$latdeg = sprintf("%d",$lat);
|
|
$latmin = ($lat - $latdeg) * 60;
|
|
$latchar = "N";
|
|
}
|
|
|
|
# Write an APRS Item for each trackpoint
|
|
printf($output "%s>APRS:)%s!%02d%05.2f%s/%03d%05.2f%s%s\n",
|
|
$from,
|
|
$name,
|
|
$latdeg,
|
|
$latmin,
|
|
$latchar,
|
|
$londeg,
|
|
$lonmin,
|
|
$lonchar,
|
|
"/");
|
|
|
|
if (! ($i % 10) ) {
|
|
printf("$i ");
|
|
}
|
|
$i++;
|
|
}
|
|
|
|
printf("\n\nThe data has been saved in: ($filename)\n");
|
|
printf("Please open this logfile with Xastir to display the track\n");
|
|
printf("!!!Remember to set your GPS back to NMEA mode for APRS!!!\n");
|
|
|
|
|