#! /usr/bin/perl
use strict;
use warnings;
require("crc32.pl");
# parse eth TX log data
my @nibbles = ();
while (my $line = <>) {
chomp $line;
# ethernet TX log
if ($line =~ /^ethernet TX: ([0-9]+)$/) {
my $nibble = $1;
push (@nibbles, $nibble & 0x0F);
}
# VHDL data
elsif ($line =~ /^ *([0-9A-FXa-fx", ]+)/) {
my $data = $1;
for my $part (split(/,/, $data)) {
if ($part =~ /^ *[xX]"([0-9A-Fa-f])"/) {
my $val = $1;
push (@nibbles, hex($val));
}
}
}
}
# nibbles to bytes
my @bytes = ();
for (my $i = 0; $i < @nibbles; $i += 2) {
my $byte = $nibbles[$i + 1] << 4 | $nibbles[$i];
push (@bytes, $byte);
}
# remove preamble
my $pos = 0;
while ($pos < @bytes && $bytes[$pos] == 0x55) {
$pos++;
}
if ($pos > 4 && $pos < @bytes && $bytes[$pos] == 0xD5) {
$pos++;
for ( ; $pos > 0; $pos--) {
shift(@bytes);
}
} else {
print STDERR "warning: preamble not found -> not removed\n";
}
# remove CRC
if (@bytes >= 4) {