Astro-UTDF
view release on metacpan or search on metacpan
lib/Astro/UTDF.pm view on Meta::CPAN
'26 meters',
'TDRSS ground antenna',
'6 meters',
'7.3 meters',
'8 meters',
'unused',
'unused',
'unused',
'unused',
'unused',
'unused',
);
my @antenna_geometry = (
'az-el',
'X-Y (+X south)',
'X-Y (+X east)',
'RA-DEC',
'HR-DEC',
'unused',
'unused',
'unused',
'unused',
'unused',
'unused',
'unused',
'unused',
'unused',
'unused',
'unused',
);
my $hexify = sub {
my ( $self, $method ) = @_;
return unpack 'H*', $self->$method();
};
my %decoder = (
data_validity => '0x%02x',
frequency_band => [
'unspecified',
'VHF',
'UHF',
'S-band',
'C-band',
'X-band',
'Ku-band',
'visible',
'S-band uplink/Ku-band downlink',
'unknown code 9',
'unknown code 10',
'unknown code 11',
'unknown code 12',
'unknown code 13',
'unknown code 14',
'unknown code 15',
],
frequency_band_and_transmission_type => '0x%02x',
front => $hexify,
measurement_time => sub {
# Note that perldoc -f localtime says that the string
# returned in scalar context is _not_ locale-dependant.
return scalar gmtime $_[0]->measurement_time();
},
mode => '0x%04x',
raw_record => $hexify,
rear => $hexify,
receive_antenna_diameter_code => \@antenna_diameter,
receive_antenna_geometry_code => \@antenna_geometry,
tdrss_only => $hexify,
tracking_mode => [
'autotrack',
'program track',
'manual',
'slaved',
],
transmission_type => [
'test',
'unused',
'simulated',
'resubmit',
'RT (real time)',
'PB (playback)',
'unused',
'unused',
'unused',
'unused',
'unused',
'unused',
'unused',
'unused',
'unused',
'unused',
],
transmit_antenna_diameter_code => \@antenna_diameter,
transmit_antenna_geometry_code => \@antenna_geometry,
);
sub decode {
my ( $self, $method, @args ) = @_;
my $dcdr = $decoder{$method}
or return $self->$method( @args );
my $type = ref $dcdr
or return sprintf $dcdr, $self->$method( @args );
ARRAY_REF eq $type
and return $dcdr->[ $self->$method( @args ) ];
CODE_REF eq $type
and return $dcdr->( $self, $method, @args );
confess "Programming error -- decoder for $method is $type";
}
}
sub doppler_count {
splice @_, 1, 0, doppler_count => 1, 'is_doppler_valid';
goto &_bash_6_bytes;
}
sub doppler_shift {
my ( $self, @args ) = @_;
@args and croak "doppler_shift() may not be used as a mutator";
# Note that this can never be a mutator, because it uses data from
# more than one record.
( run in 0.786 second using v1.01-cache-2.11-cpan-39bf76dae61 )