#!/usr/local/bin/perl -w
###########################################
# center-fire - Fire USB rocket launcher
# Mike Schilli, 2009 (m@perlmeister.com)
###########################################
use strict;

use
  Device::USB::MissileLauncher::RocketBaby;
use Time::HiRes qw(usleep gettimeofday
                   tv_interval);

my $rb = 
  Device::USB::MissileLauncher::RocketBaby
  ->new();

do_until("left");
do_until("down");

my $right_start = [gettimeofday];
do_until("right");
my $right_elapsed = tv_interval( 
            $right_start, [gettimeofday] );

my $up_start = [gettimeofday];
do_until("up");
my $up_elapsed = tv_interval( 
            $up_start, [gettimeofday] );

do_until("left", $right_elapsed/2);
do_until("down", $up_elapsed/2);

for(1..3) {
    do_until("fire");
    usleep(100_000);
}

###########################################
sub do_until {
###########################################
    my($what, $max_time) = @_;

    my $start = [gettimeofday];

    while($rb->cando( $what )) {
        $rb->do( $what );
        usleep(100_000);
        last if defined $max_time and
           tv_interval($start, 
               [gettimeofday]) > $max_time;
    }
    $rb->do("stop");
}
