serial protocol of UDB 1200 sygnal generator
[UDB-1200-serial] / portmon-parse.pl
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4
5 my $in_read = 0;
6 my $wait = 0;
7 my $read = '';
8
9 use Data::Dump qw(dump);
10
11 sub hex2ascii {
12         my $hex = shift;
13         my $ascii;
14         $ascii .= chr(hex($_)) foreach ( split(/\s+/,$hex) );
15         return dump($ascii);
16 }
17
18 while(<>) {
19         s/[\n\r]+$//;
20
21         s/\s+(\S+).exe\s+//g;
22
23         my $time = $1 if /(\d+:\d+:\d+)/;
24         $time .= ' | ';
25
26         if ( /IRP_MJ_WRITE.*:\s*(.*)/ ) {
27                 print ">> $time $1", hex2ascii($1), "\n";
28         } elsif ( /(IRP_MJ_READ|IOCTL_SERIAL_WAIT_ON_MASK)/ ) {
29                 $in_read++;
30                 print "#[$in_read] $_\n";
31         }
32         # can have SUCCESS in same line!
33         if (  $in_read && /SUCCESS\s+Length\s+\d+:\s*([0-9a-fA-F\s]+)/ ) {
34                 $read .= $1;
35                 print "#<$in_read $_\n";
36                 my $len = hex($1) if ( $read =~ m/^([0-9a-f]{2})/i );
37                 print "#< $read [$len]\n";
38                 print "<< $time $read", hex2ascii($read), "\n";
39                 $in_read = 0;
40                 $read = '';
41         } else {
42                 print "# $_\n";
43         }
44 }