]> www.fi.muni.cz Git - slotcarman.git/blob - replay_log
Fuel level can sometimes(?) be 0xA - ignore it.
[slotcarman.git] / replay_log
1 #!/usr/bin/perl -w
2
3 use strict;
4
5 use Getopt::Std;
6 use FileHandle;
7 use Time::HiRes qw(time usleep);
8
9 my %opt;
10 if (!getopts('b:e:fp', \%opt) || !$ARGV[0]) {
11         die "Usage: $0 [-b starttime] [-e endtime] [-f] [-p] logfile\n"
12                 . "-f ... replay as fast as possible, without pausing\n"
13                 . "-p ... at the end, want for a keypress\n";
14 }
15
16 my $logfile = shift @ARGV;
17
18 open my $logfh, '<', $logfile
19         or die "Can't open $logfile: $!";
20
21 my $start_prog_time = time;
22 my $start_log_time;
23
24 while (my $line = <$logfh>) {
25         chomp $line;
26         $line =~ s/\A\s+//xms;
27         my ($l_time, @data) = split(/\s+/, $line);
28
29         next if ($opt{b} && $opt{b} > $l_time);
30         next if ($opt{e} && $opt{e} < $l_time);
31
32         print pack("C*", map { hex $_ } @data);
33         flush STDOUT;
34
35         if (!$opt{f}) {
36                 $start_log_time ||= $l_time;
37
38                 my $log_delay = $l_time - $start_log_time;
39                 my $real_delay = time - $start_prog_time;
40                 if ($real_delay < $log_delay) {
41                         print STDERR "usleep for ", $log_delay - $real_delay, "\n";
42                         usleep(1000_000 * ($log_delay - $real_delay));
43                 }
44         }
45 }
46
47 if ($opt{p}) {
48         print STDERR "Replay log finished - press a key: ";
49         flush STDERR;
50         $_ = <STDIN>;
51 }
52