[root@Carmen ~]# more devel/x10.pl
#!/usr/bin/perl -w
use Fcntl;
#VARS
my %housecodes = ( 0=>\'m\', 1=>\'e\', 2=>\'c\', 3=>\'k\', 4=>\'o\', 5=>\'g\', 6=>\'a\', 7=>\'i\',
8=>\'n\', 9=>\'f\', 10=>\'d\', 11=>\'l\', 12=>\'p\', 13=>\'h\', 14=>\'b\', 15=>\'j\' );
my %housecodes_r = reverse %housecodes;
my %devicecodes = ( 0=>13, 1=>5, 2=>3, 3=>11, 4=>15, 5=>7, 6=>1, 7=>9,
8=>14, 9=>6, 10=>4, 11=>12, 12=>16, 13=>8, 14=>2, 15=>10 ) ;
my %devicecodes_r = reverse %devicecodes;
my %x10commands = ( 0 => \'all_units_off\',
1 => \'all_lights_on\',
2 => \'on\',
3 => \'off\',
4 => \'dim\',
5 => \'bright\',
6 => \'all_lights_off\',
7 => \'extended_code\',
8 => \'hail_request\',
9 => \'hail_ack\',
10 => \'preset_dim1\',
11 => \'preset_dim2\',
12 => \'extended_data\',
13 => \'status_on\',
14 => \'status_off\',
15 => \'status_request\' );
my %x10commands_r = reverse %x10commands;
#MAIN
my $casa=$ARGV[0];
my $unidad=$ARGV[1];
my $comando=$ARGV[2];
$casa && ($unidad>=0) && $comando || die "$0 [cod_casa] [cod_device] [comando]\\n";
my $maxdevices=6;
my @devices;
if ($unidad == 0)
{
for (my $i=1; $i<=$maxdevices; $i++)
{
push (@devices, $i);
}
}
else {push (@devices,$unidad);}
foreach (@devices)
{
my $hc = $housecodes_r{lc($casa)};
my $uc = $devicecodes_r{$_};
my $cm = $x10commands_r{$comando};
defined ($hc) && defined($uc) && defined ($cm) || die "$0 [A-P] [0-16] [comando]\\n";
my $uhc = ($hc << 4) | $uc;
my $chc = ($hc << 4) | $cm;
$msg1 = pack("CC", 0x04, $uhc);
$msg2 = pack("CC", 0x06, $chc);
sysopen( CM15A, "/dev/cm15a0", O_RDWR |O_NOCTTY | O_NONBLOCK ) || die "Cannot open device $!";
syswrite CM15A, $msg1, 2;
sleep 1;
syswrite CM15A, $msg2, 2;
close( CM15A );
sleep 3;
}