#!/usr/bin/perl
#
# 実時間[s] = 1/((16.5*1000*1000)/(分周比*1000)) * カウント値
#

@D = split(/[,\r\n]+/, join("", <>));

$prslen=scalar(@D)-3;
$orglen=0;

$header  = shift(@D);
$cmd     = shift(@D);
$div     = shift(@D);
$freq    = eval("0x".$div);

$tick = sprintf("%.1f", 1/((16.5*1000*1000)/($freq))*1000*1000); # [us]

print "Remote controller IR DATA Decoder for VIR\r\n";
print "Header Text:  $header\r\n";
print "Command: ${cmd}H\r\n";
if ($freq) { print "Frequency: $div, $freq(", sprintf("%.02f",16.5*1000*1000/$freq/1000/2), " kHz), ", $tick, " us\r\n"; }
print "(*):2byte value(>127), (-):repeated value(run-length compressed)\r\n";
$even = 1;
$onoff=1;
while (@D) {
		$s = shift(@D);
		$v = eval("0x" . $s);
		# print "RAW:$v\r\n";
		if (($v & 0x80) == 0) {
				# 0-127
				print $onoff, ",", $v*1, ",", $v*1*$tick, ",us\r\n";
				$onoff ^=1;
				$orglen++;
				$prev[$even] = $v;
				$even ^= 1;
		} elsif (($v & 0xc0) == 0x80) {
				# 64-16383
				$h = $v & 63;
				$l =  eval("0x" . shift(@D));
				$v = ($h<<8) | $l;
				print $onoff, ",", $v*1, ",", $v*1*$tick, ",us,(*)\r\n";
				$onoff ^=1;
				$orglen++;
				$prev[$even] = $v;
				$even ^= 1;
		} elsif (($v & 0xc0) == 0xc0) {
				$loop = $v & 63;
				foreach (1..$loop) {
						print $onoff, ",",$prev[$even]*1, ",", $prev[$even]*$tick, ",us,(-)\r\n";
						$onoff ^=1;
						$orglen++;
						$even ^= 1;
				}
		} else {
				die "Format error.\r\n";
		}
}

$orglen = $orglen*2;
print "Original=$orglen(byte), Compressed=$prslen(byte), ", sprintf("%.1f", $prslen/$orglen*100), "%\r\n";
