Audio-Radio-XM-PCR
view release on metacpan or search on metacpan
lib/Audio/Radio/XM/PCR.pm view on Meta::CPAN
$self->{'mute'} = '0';
}
} else {
return 0;
}
return 1;
}
sub _read_radio_id {
my $self = shift;
my $code = shift;
my @params = @_;
if ($code eq 'b1') {
$self->{'technical'}->{'radio_id'} = $params[1];
} else {
return 0;
}
return 1;
}
sub _read_signal_strength {
my $self = shift;
my $code = shift;
my @params = @_;
my $levels = {'00' => 'Poor',
'01' => 'Fair',
'02' => 'Good',
'03' => 'Excellent'};
# Populate the hash
$self->{'signal_strength'} = {'sat' => {'quality' => $levels->{$params[1]},
'1' => {'demod' => $params[3],
'TDM' => $params[6],
'BER' => $params[9],
'AGC' => $params[12],
'CN' => $params[14]},
'2' => {'demod' => $params[4],
'TDM' => $params[7],
'BER' => $params[10],
'AGC' => $params[13],
'CN' => $params[15]}},
'terr' => {'quality' => $levels->{$params[2]},
'1' => {'demod' => $params[5],
'TDM' => $params[8],
'BER' => $params[11]}}};
# Calculate others
# Percentages
# Satellite
my @sat_db;
$sat_db[1] = $self->{'signal_strength'}->{'sat'}->{'1'}->{'CN'} / 4;
$sat_db[2] = $self->{'signal_strength'}->{'sat'}->{'2'}->{'CN'} / 4;
$self->{'signal_strength'}->{'sat'}->{'1'}->{'db'} = $sat_db[1];
$self->{'signal_strength'}->{'sat'}->{'2'}->{'db'} = $sat_db[2];
for (my $x=1; $x<=2; $x++) {
if ($sat_db[$x] < 12) {
$self->{'signal_strength'}->{'sat'}->{$x}->{'percent'} = $sat_db[$x] * 80 / 12;
} elsif ($sat_db[$x] < 16) {
$self->{'signal_strength'}->{'sat'}->{$x}->{'percent'} = ((($sat_db[$x] - 48) * 20 / 4) + 80);
} else {
$self->{'signal_strength'}->{'sat'}->{$x}->{'percent'} = 99.9;
}
}
# Terrestrial
my $terr_signal = $self->{'signal_strength'}->{'terr'}->{1}->{'BER'} / 68;
$terr_signal = 100 - ($terr_signal * 10);
if ($terr_signal <= 0) {
$terr_signal = 0;
} elsif ($terr_signal >= 100) {
$terr_signal = 100;
}
$self->{'signal_strength'}->{'terr'}->{1}->{'percent'} = $terr_signal;
# Summary Information
if ($self->{'signal_strength'}->{'sat'}->{'1'}->{'db'} > $self->{'signal_strength'}->{'sat'}->{'2'}->{'db'}) {
$self->{'signal_strength'}->{'sat'}->{'db'} = $self->{'signal_strength'}->{'sat'}->{'1'}->{'db'};
$self->{'signal_strength'}->{'sat'}->{'percent'} = $self->{'signal_strength'}->{'sat'}->{'1'}->{'percent'};
} else {
$self->{'signal_strength'}->{'sat'}->{'db'} = $self->{'signal_strength'}->{'sat'}->{'2'}->{'db'};
$self->{'signal_strength'}->{'sat'}->{'percent'} = $self->{'signal_strength'}->{'sat'}->{'2'}->{'percent'};
}
$self->{'signal_strength'}->{'terr'}->{'percent'} = $self->{'signal_strength'}->{'terr'}->{'1'}->{'percent'};
}
sub _read_mon_song_time {
my $self = shift;
my $code = shift;
my @params = @_;
if ($code eq 'd6') {
my $current_time = time;
my $total_duration = $params[3]*256 + $params[4];
my $used_duration = $params[5]*256 + $params[6];
my $remain_duration = $total_duration - $used_duration;
my $start = $current_time - $used_duration;
my $end = $start + $total_duration;
$self->{'channels'}->{$self->{'current_channel'}}->{'start_time'} = $start;
$self->{'channels'}->{$self->{'current_channel'}}->{'end_time'} = $end;
$self->{'channels'}->{$self->{'current_channel'}}->{'duration'} = $total_duration;
$self->{'channels'}->{$self->{'current_channel'}}->{'remaining'} = $remain_duration;
$self->{'channels'}->{$self->{'current_channel'}}->{'last_update'} = $current_time;
} else {
return 0;
}
return 1;
}
sub _read_mon_artist_title {
my $self = shift;
my $code = shift;
my @params = @_;
if ($code eq 'd3') {
$self->{'channels'}->{$self->{'current_channel'}}->{'artist'} = $params[1];
$self->{'channels'}->{$self->{'current_channel'}}->{'title'} = $params[2];
$self->{'channels'}->{$self->{'current_channel'}}->{'enabled'} = 1;
$self->{'channels'}->{$self->{'current_channel'}}->{'last_update'} = time();
} else {
return 0;
}
return 1;
}
sub _read_mon_label {
return 1;
}
sub _read__mon_genre {
return 1;
}
sub _read_mon_channel {
return 1;
}
sub _read_monitored_data {
return 1;
}
sub _read_fatal_error {
my $self = shift;
my $code = shift;
my @params = @_;
( run in 2.234 seconds using v1.01-cache-2.11-cpan-7fcb06a456a )