mirror of https://github.com/wb2osz/direwolf.git
65 lines
1.3 KiB
Perl
65 lines
1.3 KiB
Perl
|
#!/usr/bin/perl
|
||
|
|
||
|
# Part of Dire Wolf APRS Telemetry Toolkit, WB2OSZ, 2015
|
||
|
|
||
|
# For explanation of encoding see:
|
||
|
# http://he.fi/doc/aprs-base91-comment-telemetry.txt
|
||
|
|
||
|
|
||
|
if ($#ARGV+1 < 2 || $#ARGV+1 > 7) {
|
||
|
print STDERR "2 to 7 command line arguments must be provided.\n";
|
||
|
usage();
|
||
|
}
|
||
|
|
||
|
|
||
|
if ($#ARGV+1 == 7) {
|
||
|
if ( ! ($ARGV[6] =~ m/^[01]{8}$/)) {
|
||
|
print STDERR "The sixth value must be 8 binary digits.\n";
|
||
|
usage();
|
||
|
}
|
||
|
# Convert binary digits to value.
|
||
|
$ARGV[6] = oct("0b" . reverse($ARGV[6]));
|
||
|
}
|
||
|
|
||
|
$result = "|";
|
||
|
|
||
|
for ($n = 0 ; $n <= $#ARGV; $n++) {
|
||
|
#print $n . " = " . $ARGV[$n] . "\n";
|
||
|
$v = $ARGV[$n];
|
||
|
if ($v != int($v) || $v < 0 || $v > 8280) {
|
||
|
print STDERR "$v is not an integer in range of 0 to 8280.\n";
|
||
|
usage();
|
||
|
}
|
||
|
|
||
|
$result .= base91($v);
|
||
|
}
|
||
|
|
||
|
$result .= "|";
|
||
|
print "$result\n";
|
||
|
exit 0;
|
||
|
|
||
|
|
||
|
sub base91 ()
|
||
|
{
|
||
|
my $x = @_[0];
|
||
|
|
||
|
my $d1 = int ($x / 91);
|
||
|
my $d2 = $x % 91;
|
||
|
|
||
|
return chr($d1+33) . chr($d2+33);
|
||
|
}
|
||
|
|
||
|
|
||
|
sub usage ()
|
||
|
{
|
||
|
print STDERR "\n";
|
||
|
print STDERR "telem-data91.pl - Format data into compressed base 91 telemetry.\n";
|
||
|
print STDERR "\n";
|
||
|
print STDERR "Usage: telem-data91.pl sequence value1 [ value2 ... ]\n";
|
||
|
print STDERR "\n";
|
||
|
print STDERR "A sequence number and up to 5 analog values can be specified.\n";
|
||
|
print STDERR "Any sixth value must be 8 binary digits.\n";
|
||
|
print STDERR "Values must be integers in range of 0 to 8280.\n";
|
||
|
|
||
|
exit 1;
|
||
|
}
|