From: Jan Michel Date: Wed, 1 Jun 2016 16:36:17 +0000 (+0200) Subject: Add streaming mode and trigger differences X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=bc63015c59b1065fc0a61c8594c5f5958d0c528f;p=mdcfee.git Add streaming mode and trigger differences --- diff --git a/mboasd8/readdata2.pl b/mboasd8/readdata2.pl index 92f4070..cf42c25 100755 --- a/mboasd8/readdata2.pl +++ b/mboasd8/readdata2.pl @@ -19,6 +19,7 @@ my $isTrbNet = 0; my $poll = 0; my $cmd = ""; my $verbose = 0; +my $invert_trigger = 0; my $fh; @@ -28,11 +29,49 @@ GetOptions( 'device|d=s' => \$ser_dev, 'poll|p' => \$poll, 'verbose|v' => \$verbose, + 'invert_trigger|i' => \$invert_trigger, ) ; - +if ($help || (defined $ARGV[0] && $ARGV[0] =~ /help/)) { + exit; + } + + $ser_dev = "/dev/ttyUSB1" unless defined $ser_dev; $cmd = "RD0" if $poll; +my $last = 0; + + +my $c = "stty -F $ser_dev 921600 raw"; +#my $c = "stty -F $ser_dev -isig -icanon -iexten speed 921600 time 100"; +my $r = qx($c); +print $r; + +$r = open ($fh, "+<", $ser_dev); +unless ($fh) { + print "can't open serial interface $ser_dev\n"; + exit; +} + +$|=1; + + + +sub Stream { + my $v = 0; + while(<$fh>) { + if ($_ =~ /R([A-Fa-f0-9]{8})/) {$v = hex($1);} + next if ($v>>16 & 0xffff) == 0xdead; + unless ($v & 0x80000000) {next;} + next if $last == $v; + $counters[($v&0xf) + (($v>>30 & 1) << 8)]++; + my $diff = ($v>>4 & 0x3fffff)*8+($v & 0x7) - ($last>>4 & 0x3fffff)*8-($last & 0x7); + $diff += 2**25 if $diff < 0; + printf("%i\t%i\t%03x\t%i\t%i\n",$v>>30 & 1, $v>>26 & 0xf, ($v & 0x0f), $v>>4 & 0x3fffff, $diff) if $verbose; + $last = $v if (($v>>30 & 1)==$invert_trigger) && (($v>>26&0xf) == 8) ; + } + } + sub Cmd { my ($c) = @_; @@ -89,24 +128,18 @@ sub decode { return 7 if($v == 0x0ff || $v == 0x100); return $v; } - - -if ($help || (defined $ARGV[0] && $ARGV[0] =~ /help/)) { - exit; - } $SIG{"INT"} = \&finish; $SIG{"QUIT"} = \&stats; sub finish{ - exit; + my $v = Cmd("W0000000000"); stats(); exit; } sub stats{ - my $v = Cmd("W0000000000"); print "----------------------\n"; print "Bin\tCnt1\tSize1\tCnt2\tSize2\n"; my @sum; @@ -129,50 +162,26 @@ sub stats{ # main -my $c = "stty -F $ser_dev 921600"; -#my $c = "stty -F $ser_dev -isig -icanon -iexten speed 921600 time 100"; -my $r = qx($c); -print $r; - -$r = open ($fh, "+<", $ser_dev); -#$r = sysopen ($fh, $ser_dev, O_RDWR); -#$r = open ($fh, "+>", "delme2"); -unless ($fh) { - print "can't open serial interface $ser_dev\n"; - exit; -} - -$|=1; my $v; -my $last = 0; -# for (1..1000) { -# my $res = Cmd("RFF123456"); -# $res =~ s/(.|\r|\n)/sprintf("%8.8b:",ord($1))/eg; -# #my @res = $res =~ /\/; -# print "$res\n"; -# #printf "register R2%d: %s\n", $i, Cmd("R2"."$i"); -# } -# -# exit; -# printf "command RD0: %s\n", Cmd("RD0"); Cmd("W0000000001") unless $poll; -#exit; + print "Edge\tChan\tFine\tCoarse\tDiff to last leading edge in 500ps bins\n"; -while(1) { -# usleep(1000); -# printf("%08x\n",$v); - $v = Cmd("$cmd"); - next if ($v>>16 & 0xffff) == 0xdead; - unless ($v & 0x80000000) {next;} - next if $last == $v; - $counters[($v&0xf) + (($v>>30 & 1) << 8)]++; - my $diff = ($v>>4 & 0x3fffff)*8+($v & 0x7) - ($last>>4 & 0x3fffff)*8-($last & 0x7); - $diff += 2**24 if $diff < 0; - printf("%i\t%i\t%03x\t%i\t%i\n",$v>>30 & 1, $v>>26 & 0xf, ($v & 0x0f), $v>>4 & 0x3fffff, $diff) if $verbose; - $last = $v if $v>>30 & 1; +if(!$poll) {Stream();} +else { + while(1) { + $v = Cmd("$cmd"); + next if ($v>>16 & 0xffff) == 0xdead; + unless ($v & 0x80000000) {next;} + next if $last == $v; + $counters[($v&0xf) + (($v>>30 & 1) << 8)]++; + my $diff = ($v>>4 & 0x3fffff)*8+($v & 0x7) - ($last>>4 & 0x3fffff)*8-($last & 0x7); + $diff += 2**25 if $diff < 0; + printf("%i\t%i\t%03x\t%i\t%i\n",$v>>30 & 1, $v>>26 & 0xf, ($v & 0x0f), $v>>4 & 0x3fffff, $diff) if $verbose; + $last = $v if $v>>30 & 1; + } }