#!/usr/bin/perl -W

use strict;
use Device::SerialPort;
use Time::HiRes qw(sleep);
use Switch;

my $port = Device::SerialPort->new("/dev/ttyUSB0"); # <-- match to right com port
$port->databits(8);
$port->baudrate(4800); # <-- match to arduino settings
$port->parity("none");
$port->stopbits(1);
$port->dtr_active(0);
$| = 1; # buffers disabled


while(1) {
	my $loadavg = `iostat -c 1 2 | tail -n 2 | head -n 1 | gawk '{print \$1}'`;
	$loadavg = $loadavg / 14;
	$loadavg = round($loadavg);

	my $red = 0;
	my $green = 0;
	my $blue = 0; 

	switch($loadavg) {
		case {$loadavg < 1 } {$red = 0; $green = 30; $blue = 0;}
		case {$loadavg < 2 } {$red = 10; $green = 20; $blue = 0;}
		case {$loadavg < 3 } {$red = 15; $green = 15; $blue = 0;}
                case {$loadavg < 4 } {$red = 20; $green = 10; $blue = 0;}
		case {$loadavg < 5 } {$red = 30; $green = 10; $blue = 0;}
		case {$loadavg < 6 } {$red = 40; $green = 2; $blue = 0;}
		case {$loadavg <= 7 } {$red = 50; $green = 0; $blue = 0;}
	}

	$port->write(pack("C",1)); # start byte
	sleep(0.01);
	$port->write(pack("C",$ARGV[0] || 3)); # command: tbar
	sleep(0.01);
	$port->write(pack("C",$ARGV[1] || $loadavg)); # draw up to row ? (0..7)
	sleep(0.01);
	$port->write(pack("C",$ARGV[2] || $red)); # full RED
	sleep(0.01);
	$port->write(pack("C",$ARGV[3] || $green)); # no GREEN
	sleep(0.01);
	$port->write(pack("C",$ARGV[4] || $blue)); # no BLUE
	sleep(0.01);
	$port->write(pack("C",1)); # stop byte
	sleep(.1);
}

sub round {
	my $number = shift;
	return int($number + 0.5);
}

