]> jspc29.x-matter.uni-frankfurt.de Git - mdcfee.git/commitdiff
Add streaming mode and trigger differences
authorJan Michel <j.michel@gsi.de>
Wed, 1 Jun 2016 16:36:17 +0000 (18:36 +0200)
committerJan Michel <j.michel@gsi.de>
Wed, 1 Jun 2016 16:36:17 +0000 (18:36 +0200)
mboasd8/readdata2.pl

index 92f4070f11bd6a2830b7a557fa3d82f22470e957..cf42c25896d162091b9310ce68e74eebe103baf4 100755 (executable)
@@ -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;
+    }
   }