c2b040193a777c09bdc595c95492b57a2521db87
Stefan Schuermans script to convert testbed l...

Stefan Schuermans authored 12 years ago

1) #! /usr/bin/perl
2) 
Stefan Schuermans added file headers

Stefan Schuermans authored 12 years ago

3) # MIPS I system
4) # Copyright 2011-2012 Stefan Schuermans <stefan@schuermans.info>
5) # Copyleft GNU public license V2 or later
6) #          http://www.gnu.org/copyleft/gpl.html
7) 
Stefan Schuermans script to convert testbed l...

Stefan Schuermans authored 12 years ago

8) use strict;
9) use warnings;
10) 
Stefan Schuermans perl scripts to convert pac...

Stefan Schuermans authored 12 years ago

11) require("crc32.pl");
12) 
13) # parse eth TX log data
Stefan Schuermans script to convert testbed l...

Stefan Schuermans authored 12 years ago

14) my @nibbles = ();
15) while (my $line = <>) {
16)   chomp $line;
Stefan Schuermans perl scripts to convert pac...

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

32) }
33) 
Stefan Schuermans perl scripts to convert pac...

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

35) my @bytes = ();
36) for (my $i = 0; $i < @nibbles; $i += 2) {
37)   my $byte = $nibbles[$i + 1] << 4 | $nibbles[$i];
38)   push (@bytes, $byte);
39) }
40) 
Stefan Schuermans perl scripts to convert pac...

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

83)   for (my $i = 0; $i < 8 and $pos < @bytes; ++$i, ++$pos) {
84)     if ($pos + 1 < @bytes) {
85)       printf(" 0x%02X,", $bytes[$pos]);
86)     } else {
87)       printf(" 0x%02X", $bytes[$pos]);
88)     }