[root@Carmen ~]# more x10_brute.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
#Brute X-10
my $comando=\'on\';
for (\'a\'..\'p\')
{
my $casa=$_;
for (\'1\'..\'16\')
{
my $unidad=$_;
print "Testing $casa $unidad ON...\\n";
my $hc = $housecodes_r{lc($casa)};
my $uc = $devicecodes_r{$unidad};
my $cm = $x10commands_r{$comando};
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;
}
}