d49699509ae84288e7db485c20b5041a4fd19d3f
Stefan Schuermans script to convert testbed l...

Stefan Schuermans authored 12 years ago

1) #! /usr/bin/perl
2) 
3) use strict;
4) use warnings;
5) 
Stefan Schuermans perl scripts to convert pac...

Stefan Schuermans authored 12 years ago

6) require("crc32.pl");
7) 
8) # parse eth TX log data
Stefan Schuermans script to convert testbed l...

Stefan Schuermans authored 12 years ago

9) my @nibbles = ();
10) while (my $line = <>) {
11)   chomp $line;
Stefan Schuermans perl scripts to convert pac...

Stefan Schuermans authored 12 years ago

12)   # ethernet TX log
Stefan Schuermans script to convert testbed l...

Stefan Schuermans authored 12 years ago

13)   if ($line =~ /^ethernet TX: ([0-9]+)$/) {
Stefan Schuermans perl scripts to convert pac...

Stefan Schuermans authored 12 years ago

14)     my $nibble = $1;
Stefan Schuermans script to convert testbed l...

Stefan Schuermans authored 12 years ago

15)     push (@nibbles, $nibble & 0x0F);
16)   }
Stefan Schuermans perl scripts to convert pac...

Stefan Schuermans authored 12 years ago

17)   # VHDL data
18)   elsif ($line =~ /^ *([0-9A-FXa-fx", ]+)/) {
19)     my $data = $1;
20)     for my $part (split(/,/, $data)) {
21)       if ($part =~ /^ *[xX]"([0-9A-Fa-f])"/) {
22)         my $val = $1;
23)         push (@nibbles, hex($val));
24)       }
25)     }
26)   }
Stefan Schuermans script to convert testbed l...

Stefan Schuermans authored 12 years ago

27) }
28) 
Stefan Schuermans perl scripts to convert pac...

Stefan Schuermans authored 12 years ago

29) # nibbles to bytes
Stefan Schuermans script to convert testbed l...

Stefan Schuermans authored 12 years ago

30) my @bytes = ();
31) for (my $i = 0; $i < @nibbles; $i += 2) {
32)   my $byte = $nibbles[$i + 1] << 4 | $nibbles[$i];
33)   push (@bytes, $byte);
34) }
35) 
Stefan Schuermans perl scripts to convert pac...

Stefan Schuermans authored 12 years ago

36) # remove preamble
37) my $pos = 0;
38) while ($pos < @bytes && $bytes[$pos] == 0x55) {
39)   $pos++;
40) }
41) if ($pos > 4 && $pos < @bytes && $bytes[$pos] == 0xD5) {
42)   $pos++;
43)   for ( ; $pos > 0; $pos--) {
44)     shift(@bytes);
45)   }
46) } else {
47)   print STDERR "warning: preamble not found -> not removed\n";
48) }
49) 
50) # remove CRC
51) if (@bytes >= 4) {
52)   my @bytes_no_crc = @bytes;
53)   my @crc_bytes = ();
54)   unshift (@crc_bytes, pop(@bytes_no_crc));
55)   unshift (@crc_bytes, pop(@bytes_no_crc));
56)   unshift (@crc_bytes, pop(@bytes_no_crc));
57)   unshift (@crc_bytes, pop(@bytes_no_crc));
58)   my $crc_calc = crc32([@bytes_no_crc]);
59)   my $mismatch = 0;
60)   for (my $i = 0; $i < 4; $i++) {
61)     if (shift(@crc_bytes) != shift(@{$crc_calc})) {
62)       $mismatch = 1;
63)     }
64)   }
65)   if ($mismatch) {
66)     print STDERR "warning: invalid CRC32 -> not removed\n";
67)   } else {
68)     @bytes = @bytes_no_crc;
69)   }
70) } else {
71)   print STDERR "warning: too short for detecting CRC32 -> noting removed\n";
72) }
73) 
74) # print C data
Stefan Schuermans script to convert testbed l...

Stefan Schuermans authored 12 years ago

75) print("unsigned char c_data[] = {\n");
76) for (my $pos = 0; $pos < @bytes; ) {
77)   print(" ");
Stefan Schuermans perl scripts to convert pac...

Stefan Schuermans authored 12 years ago

78)   for (my $i = 0; $i < 8 and $pos < @bytes; ++$i, ++$pos) {
79)     if ($pos + 1 < @bytes) {
80)       printf(" 0x%02X,", $bytes[$pos]);
81)     } else {
82)       printf(" 0x%02X", $bytes[$pos]);
83)     }