#!/bin/perl -w

# Use this as a stand-alone (outside of mh) way to
# test a CM11 and/or CM17 X10  device
#  - set the $interface, $port, $house, and $unit parms
# then run:
#   perl test_x10

# Or simply run something like this:
#   perl test_x10 CM11 /dev/ttyS0 A 1
#   perl test_x10 CM17 COM1 B 2


use strict;
use lib '../lib', '../lib/site';

my ($device, $port, $house, $unit, $interface, %config_parms);

                                # Use BEGIN so we can conditionally eval modules
BEGIN {

                                # Set these parms

    $interface = shift;
    $port      = shift;
    $interface = 'CM11' unless $interface;
    $interface = uc $interface;
#   $interface = 'CM17';

#   $port = '/dev/ttyS0' unless $port;
    $port = 'COM9' unless $port;
#   $port = '\\\\.\COM10' unless $port;

    $house = shift;
    $unit  = shift;
    $house = 'A' unless $house;
    $unit  = '1' unless $unit;


    print "Using interface=$interface port=$port\n";
    if ($^O eq "MSWin32") {
#        use Win32::SerialPort 0.17;
        eval "use Win32::SerialPort 0.17";
	    die "$@\n" if ($@);
        $device = Win32::SerialPort->new ($port) or die "Can't start $port\n";
        &Win32::SerialPort::debug(1);
        $config_parms{debug} = 'X10';
    }
    else {
        eval "use Device::SerialPort 0.06";
	    die "$@\n" if ($@);
        $device = Device::SerialPort->new ($port) or die "Can't start $port\n";
    }

    if ($interface eq 'CM11') {
        eval "use ControlX10::CM11 qw( :FUNC 2.06 )";
	    die "$@\n" if ($@);
    }
    elsif ($interface eq 'CM17') {
        eval "use ControlX10::CM17 qw( send_cm17 0.05 )";
	    die "$@\n" if ($@);
    }
#    elsif ($interface eq 'TI103') {
#        send_ti103($device, $house . $unit . $cmd);
#    }

}


$device->error_msg(1);	# use built-in error messages
$device->user_msg(0);
$device->databits(8);
$device->baudrate(4800);
$device->parity("none");
$device->stopbits(1);
$device->dtr_active(1);
$device->handshake("none");
$device->write_settings || die "Could not set up port\n";

my $cmd   = 'J';

foreach (1..4) {
	&toggle;
	sleep 1;
}

sub toggle {
	print "---> Toggle light $house$unit to $cmd\n";

    if ($interface eq 'CM11') {
        send_cm11($device, $house . $unit);
        send_cm11($device, $house . $cmd);
    }
    else {
        send_cm17($device, $house . $unit . $cmd);
    }

	$cmd = ($cmd eq 'J') ? 'K' : 'J';
}
