#!/usr/bin/perl # # A quick perl script to talk to my Hitachi plasma screen. Plasma # is connected via a ethernet to serial converter at fixed IP. # use Socket; my $ip = "192.168.0.141"; # Connect my($serverAddr) = (gethostbyname($ip))[4]; socket(SH, AF_INET(), SOCK_STREAM(), getprotobyname("tcp")) or die $!; $packFormat = 'S n a4 x8'; connect(SH, pack($packFormat, AF_INET(), 3001, $serverAddr)) or die("connect: $!"); select(SH); $| = 1; select(STDOUT); # Send "Start" (until you send "End" the remote is locked out) send(SH,"\005",1); recv(SH,$buffer,1,0); if (ord $buffer != 6) { die "Didn't get ack, got %#o\n",ord $buffer; } # Grab some variables print "power=".&getdata(0x6E)."\n"; print "input=".&getdata(0x6F)."\n"; print "contrast=".&getdata(0x59)."\n"; print "brightness=".&getdata(0x1F)."\n"; print "colour=".&getdata(0x10)."\n"; print "sharpness=".&getdata(0x14)."\n"; print "mode=".&getdata(0x40)."\n"; print "hours=".(&getdata(0xF0)*256+&getdata(0xF1))."\n"; # Send power off.... #&senddata(0x6E,0,0); # Send "End", to unlock the remote control send(SH,"\04",1); recv(SH,$buffer,1,0); if (ord $buffer != 6) { die "Didn't get ack, got %#o\n",ord $buffer; } sub getdata { my ($command)=@_; my $result = ""; $data = sprintf "%02X",$command; send(SH,"\002".$data."0100000000\003",15); recv(SH,$buffer,1,0); return "err" unless (ord $buffer == 2); while (ord $buffer != 3) { recv(SH,$buffer,1,0); $result .= sprintf "%c",ord $buffer; } $hex = hex $result; $hex = $hex-65536 if ($hex > 32767); return $hex; } sub senddata { my ($command,$third,$data) = @_; my $send = sprintf "\002%02X00%04X%04X\003",$command,$third,$data; send(SH,$send,15); recv(SH,$buffer,1,0); if (ord $buffer != 6) { die "Didn't get ack, got %#o\n",ord $buffer; } }