自宅では、テレビやケーブルテレビチューナーやレコーダを赤外線リモコンで制御できるようにしているが、電源はトグル動作でON→OFFかOFF→ONという制御ができない。そこで、HDMI端子経由のチャンネル制御を行っている。
この際に、デバイス番号とcecのアドレス番号を使うが、デバイス番号が時々変化している。
しかたがないので、cecのscan処理でデバイス番号とアドレス番号の対応情報を保存するようにしてみた。
#!/usr/bin/perl
my $cec = "/usr/bin/cec-client -d 1 -s" ;
open( my $fd , "/bin/echo 'scan' | $cec |" )
|| die( "Can't open $cec\n" ) ;
open( my $ft , "> /home/xxxxxxxx/lib/cec-table.sh" )
|| die( "Can't open cec-table.sh\n" ) ;
my $device = "" ;
my $dev_str = "" ;
my $address = "" ;
my $osd_str = "" ;
print $ft "#!/bin/bash\n" ;
while( my $line = <$fd> ) {
if ( $line =~ /^device\s+#(\d+):\s+(.*?)$/ ) {
$device = $1 ;
$dev_str = $2 ;
} elsif ( $line =~ /^address:\s+(\d+)\.0\.0\.0$/ ) {
$address = $1 ;
} elsif ( $line =~ /^osd\s+string:\s+(.*?)$/ ) {
$osd_str = $1 ;
print $ft "DEV[$address]=$device\n" ;
print $ft "OSD[$address]=\"$osd_str\"\n" ;
}
}
close( $fd ) ;
close( $ft ) ;