Device-Denon-DN1400F
view release on metacpan or search on metacpan
die "Reponse template not same size as response"
unless @template == @response;
my %out = map { $template[$_] => $response[$_] } (0..$#template);
return \%out;
}
sub command {
my $self = shift;
my $response = $self->_cmd(@_);
$self->print_response($response);
return $response;
}
my %ID = map { $_ + 0x50 => "Unit $_" } (0..15);
my %CST0 = (
0x80 => "Command complete, reception normally completed.",
0x81 => "No Disc",
0x82 => "Busy, Disc transport section is in disc transport processing",
0x83 => "Completed Disc Set with No Error",
0x84 => "Reserved",
0x85 => "Reserved",
0x86 => "Reserved",
0x8A => "Initial Busy, After power on and Reset DN-1400F",
0x8B => "Changer Error",
0x8C => "Disc Rack in not set",
0x8E => "Wait transportation",
0x8F => "Changer Error",
0xDD => "INVD, Command Busy or Invalid Command",
);
my %DST0 = (
0xB0 => "Ready, Reception normally completed.",
0xB1 => "Fade In / Out Play, In the process of fade in/out play",
0xB2 => "Seek, In the process of search.",
0xB3 => "Reserved",
0xB4 => "Pause, Pause condition during audio play.",
0xB5 => "Scan, In the process of scan play execution.",
0xB6 => "Play, In the process of audio play.",
0xB7 => "Reserved",
0xB8 => "Disc Change. Disc has been changed.",
0xB9 => "No Disc, Disc is not set in the disc loading section.",
0xBA => "Reserved",
0xBB => "Seek Error",
0xBC => "EOT: End of TOC",
0xBF => "CD-ROM Data Area",
0xD0 => "RAM Error (CD-DRIVE Hardware Error)",
0xD1 => "FOK Error (CD-DRIVE Hardware Error)",
0xD2 => "FZC Error (CD-DRIVE Hardware Error)",
0xD3 => "GFS Error (CD-DRIVE Hardware Error)",
0xD5 => "Slide Error (CD-DRIVE Hardware Error)",
0xD6 => "Eject Sequence Error (CD-DRIVE Hardware Error)",
0xD7 => "Gain Control Error (CD-DRIVE Hardware Error)",
0xD8 => "Reserved",
0xD9 => "Reserved",
0xDA => "Reserved",
0xDB => "Invalid Command or Invalid Parameter",
0xDC => "Invalid Parameter",
0xDD => "INVD: Command busy or Invalid Command.",
);
my %DST1 = (
0x00 => "Servo off",
0x01 => "Servo on",
);
my %DID = (
0x00 => "Drive 1: Front",
0x01 => "Drive 2: Rear",
);
my %ERR = (
0x00 => "No error",
);
sub print_response_item {
my ($self, $response, $key, $values) = @_;
if (exists $response->{$key}) {
my $value = $values
? ($values->{$response->{$key}} || "VALUE UNKNOWN!")
: $response->{$key};
print "* $key: " .
sprintf("%x", $response->{$key}) . " : $value\n";
delete $response->{$key};
}
}
sub print_response {
my ($self, $response) = @_;
my %copy = %$response;
$self->print_response_item(\%copy, "ID", \%ID);
$self->print_response_item(\%copy, "DID", \%DID);
$self->print_response_item(\%copy, "CST0", \%CST0);
$self->print_response_item(\%copy, "DST0", \%DST0);
$self->print_response_item(\%copy, "DST1", \%DST1);
$self->print_response_item(\%copy, "DID", \%DID);
$self->print_response_item(\%copy, "ERR0", \%ERR);
$self->print_response_item(\%copy, "ERR1", \%ERR);
foreach (keys %copy) {
if ($_ =~ /^0x/) {
if (hex($_) != $response->{$_}) {
print "Expected $_, got " .
sprintf("%2.2x\n", $response->{$_});
}
}
else {
$self->print_response_item(\%copy, $_, undef);
}
}
}
sub _dscpn {
my $discno = shift;
my ($dscp, $dscn);
if ($discno < 0) {
die "Invalid disc number $discno\n";
( run in 0.523 second using v1.01-cache-2.11-cpan-5b529ec07f3 )