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 )