#!/usr/bin/perl

######################################################################
#
# Copyright (c) 2007, Nils Knieling. All rights reserved.
#
# http://training.gartenderfreu.de/
#
# Nils Knieling; Dienstag, 29. Mai 2007 10:43:54
#
# Convert jErgoTrainer CSV file to Polar HRM file
# 	jergo2hrm.pl <jErgoTrainer CSV file>
#
######################################################################

use strict;

###### USER VARIABLES START HERE ######

# Save HRM files to:
my $dir = "D:/Nils/HRM/";
my $MaxHR = "202";
my $RestHR = "48";
my $VO2max = "53";
my $Weight = "72";

###### USER VARIABLES END HERE ######

my $interval = 5; # 5, 15, 30 ... 
my $startsec = 10000;
my $lastsec = 0;
my $xid = -1;
my @sec = ();
my @watt = ();
my @puls = ();
my @tritt = ();
my @kmh = ();
my @last = ();
my $date = '';
my $time = '';

my $file = $ARGV[0];

unless ($dir =~ m~/$~) {
	die("Error: You forgot the trailing slash! Please correct \$dir.\n");
}

# Speicherort pruefen
unless (-d $dir) {
	die("Error: \"$dir\" isn\'t a directory\n");
}

# Datei oeffnen
if (!open(JERGO,"<$file")) {
	die("Error: Can\'t open file \"$file\"\n");
} 

if ($file =~ /([^\/\\]+)$/) {
	$file="$1";
} else {
	$file="$file";
}

# Sicher HRM Datei nach...
my $savefile = 'HRM.hrm';
if ($file =~ /^P_(\d{2})(\d{2})(\d{4})_(\d{6}).csv$/) {
	$savefile = "$2$3$4.hrm";
} else {
	die("Error: File \"$file\" isn\'t a jErgoTrainer CSV file\n");
}

my $save = "$dir$savefile";
if (!open(HRM,">$save")) {
	die("Error: Can\'t create HRM file \"$save\"\n");
} 

# Datei einlesen und in Arrays speichern
while (<JERGO>) {
	my @csv = split(/;/, $_);
	
	# [Info] -- Datum und Uhrzeit (Trainingsende)
	if ($csv[0] =~ /^\d{4}$/) {
		$date = "$csv[0]$csv[1]$csv[2]";
		$time = "$csv[3]:$csv[4]:$csv[5]";
	}
	
	# [Data] -- Jede Sekunde alle Werte
	my ($null, $programm, $benutzer, $egal, $sec, $watt, $puls, $tritt, $kmh) = @csv;		
	if ($csv[0] == '0' && $sec > $lastsec) {
		$startsec = $sec if ($sec < $startsec); # Bei welcher Sekunde hat die Aufzeichung begonnen
		if ($sec != $lastsec + 1 && $sec != $startsec) {
			push(@sec, $sec);
			push(@watt, $last[0]);
			push(@puls, $last[1]);
			push(@tritt, $last[2]);
			push(@kmh, $last[3]);
			$xid++;
		}
		push(@sec, $sec);
		push(@watt, $watt);
		push(@puls, $puls);
		push(@tritt, $tritt);
		push(@kmh, $kmh);
		$lastsec = $sec;
		@last = ($watt, $puls, $tritt, $kmh); # Letzte Werte merken
		$xid++;
	}
}

# Fahrzeit berechnen
my $hour = int($xid / 3600);
my $min = int(($xid - ($hour * 3600)) / 60);
my $sec = int($xid - ($hour * 3600) - ($min * 60));
$hour = "0$hour" if ($hour < 10);
$min = "0$min" if ($min < 10);
$sec = "0$sec" if ($sec < 10);

print HRM qq ~
[Params]
Version=106
Monitor=22
SMode=111000100
Date=$date
StartTime=$time.0
Length=$hour:$min:$sec.0
Interval=$interval
Upper1=0
Lower1=0
Upper2=0
Lower2=0
Upper3=0
Lower3=0
Timer1=00:00:00.0
Timer2=00:00:00.0
Timer3=00:00:00.0
ActiveLimit=0
MaxHR=$MaxHR
RestHR=$RestHR
StartDelay=0
VO2max=$VO2max
Weight=$Weight

[HRData]
~;

for(my $i = 0; $i <= $xid; $i = $i + 5) {
	print HRM $puls[$i] . "\t" . $kmh[$i] * 10 . "\t" . $tritt[$i] . "\t" . $watt[$i] . "\n";
}

print "\n" . "-" x 60 . "\nOK: New HRM file \"$save\" created!\n" . "-" x 60 . "\n";