]> jspc29.x-matter.uni-frankfurt.de Git - daqtools.git/commitdiff
some more changes to xml-db
authorJan Michel <j.michel@gsi.de>
Mon, 14 Oct 2013 17:28:05 +0000 (19:28 +0200)
committerJan Michel <j.michel@gsi.de>
Mon, 14 Oct 2013 17:28:09 +0000 (19:28 +0200)
web/htdocs/commands/xmlpage.pm
web/htdocs/network/trbnet.pl
web/htdocs/scripts/scriptsnew.js
xml-db/database/TrbNet.xml
xml-db/get.pl
xml-db/schema/TrbNetCommon.xsd

index b17b3ba6875cf317a8bd79060eb95e04f3a8a691..3ad93bd970b0721269603a69bea1dc860c47e20e 100644 (file)
@@ -2,17 +2,18 @@
 package xmlpage;
 
 
-my $active = -1;
+my $active = 0;
+my $n = 0;
 my @setup;
 
 sub getView {
   my ($n) = @_;
-  $active = $n;
+  $active = $n;
 
   if($setup[$n]->{refresh}) {
     print qq|<input type="button" class="stdbutton" onClick="getdataprint('../xml-db/get.pl?|.$setup[$n]->{cmd}.qq|','content',false);" value="Refresh">|;
     }
-  print qq|<script language="javascript">setTimeout("getdataprint('../xml-db/get.pl?|.$setup[$n]->{cmd}.qq|','content',false)",400);</script>|;
+  print qq|<script language="javascript">setTimeout("getdataprint('../xml-db/get.pl?|.$setup[$n]->{cmd}.qq|','content',false,|.$setup[$n]->{period}.qq|)",400);</script>|;
   print qq|<div id="content"></div>|;
   
   
@@ -49,7 +50,7 @@ EOF
 <div class="header">);
 
 for ( my $s = 0; $s < scalar @setup; $s++) {
-  print qq|<span class="|.(($n == $s)?"selected":"inactive").qq|"><a href="?|.$setup[$s]->{name}.qq|">|.$setup[$s]->{name}.qq|</a></span>|;
+  print qq|<span class="|.(($active == $s)?"selected":"inactive").qq|"><a href="?|.$setup[$s]->{name}.qq|">|.$setup[$s]->{name}.qq|</a></span>|;
   }
 print qq(</div>);
 
index 3d177a5401005e0474be68b7469c40f731cf6fff..63c8adf7d2bbf25c45324e2f47687b3722eb1c13 100755 (executable)
@@ -14,7 +14,7 @@ my @setup;
 $setup[0]->{name}    = "StatusRegisters";
 $setup[0]->{cmd}     = "TrbNet-0xffff-StatusRegisters";
 $setup[0]->{refresh} = 1;
-$setup[0]->{period}  = 0;
+$setup[0]->{period}  = 10000;
 
 $setup[1]->{name}    = "BoardInfo";
 $setup[1]->{cmd}     = "TrbNet-0xffff-BoardInformation";
index dfdf5a461a53a6c5787c60cdb7b446ed63240f1f..1bc169fab5ddd143292be713007199c935af8aeb 100644 (file)
@@ -17,7 +17,7 @@ function getdata(command,callback) {
   }
 
   
-function getdataprint(command,dId,async) {
+function getdataprint(command,dId,async,time) {
   //async==true : do what you can when you can do it :D
   //async==false : do the task after you finished the previous task!
   
@@ -29,13 +29,19 @@ function getdataprint(command,dId,async) {
   xmlhttp=new XMLHttpRequest();
   //cb = callback;
   var destId = dId;
+  var cmd = command;
+  var asynci = async;
+  var timei  = time;
   
   xmlhttp.onreadystatechange = function() {
     if(xmlhttp.readyState == 4 && xmlhttp.status==200) {
       //if(cb)
-  if(document.getElementById(destId)){
-  document.getElementById(destId).innerHTML  = xmlhttp.responseText;  
-  }
+      if(document.getElementById(destId)){
+        document.getElementById(destId).innerHTML  = xmlhttp.responseText;  
+        }
+      if(time) {  
+        setTimeout("getdataprint('"+cmd+"','"+destId+"','"+asynci+"','"+timei+"')",timei);
+        }
         //cb(xmlhttp.responseText);
   //document.getElementById(destId).innerHTML  = xmlhttp.responseText;  
       }
index 301fb2d5a944bc5746b632998625fc96497014d0..46264fd2909dfd7adb823b45bcbf41fbeb7bfa71 100644 (file)
       <field name="ResetCount" start="0" bits="8" format="integer">
         <description>Number of received network resets</description>
       </field>
-      <field name="RetransmitRecv" start="16" bits="8" format="integer" >
+      <field name="RetransmitRecv" start="16" bits="8" format="integer" invertflag="true">
         <description>Number of retransmit requests received</description>
       </field>
-      <field name="RetransmitSent" start="16" bits="8" format="integer" >
+      <field name="RetransmitSent" start="16" bits="8" format="integer" invertflag="true">
         <description>Number of retransmit requests sent</description>
       </field>
     </register>
+    
+    <register name="TriggerInformation" address="0005" purpose="status">
+      <description>Information abotu the last received trigger</description>
+      <field name="LastTriggerInfo" start="0" bits="16" format="hex">
+        <description>The lower 16 Bit of the trigger information</description>
+      </field>
+      <field name="LastTriggerType" start="16" bits="4" format="hex" >
+        <description>The last trigger type</description>
+      </field>
+      <field name="LastTriggerNumber" start="20" bits="4" format="integer" >
+        <description>Lower four bits of last trigger number</description>
+      </field>
+      <field name="LastTriggerCode" start="24" bits="8" format="hex" >
+        <description>The last trigger code</description>
+      </field>
+    </register>    
+    
+    <register name="TriggerInput1" address="0006" purpose="status">
+      <description>Trigger input statistics</description>
+      <field name="InvalidCount" start="0" bits="16" format="integer" invertflag="true">
+        <description>Number of invalid triggers. I.e. LVL1 triggers not preceeded by a reference time signal</description>
+      </field>
+      <field name="MultipleCount" start="16" bits="16" format="integer" invertflag="true">
+        <description>Count of multiple reference time signals before a LVL1 trigger, i.e. additional edges on the input which were not sent by the CTS</description>
+      </field>
+    </register>
+
+    <register name="TriggerInput2" address="0007" purpose="status">
+      <description>Trigger input statistics</description>
+      <field name="SpikeCount" start="0" bits="16" format="integer" invertflag="true">
+        <description>Number of short signals on the reference time input. E.g. signals detected by the synchronous logic, but shorter than the 100 ns reference time signal</description>
+      </field>
+      <field name="SpuriousCount" start="16" bits="16" format="integer" invertflag="true">
+        <description>Number of occurences of reference time signals before a calibration trigger which should not sent a reference time</description>
+      </field>
+    </register>    
+
+    <register name="TriggerInput3" address="0008" purpose="status">
+      <description>Trigger input statistics</description>
+      <field name="EdgeCount" start="0" bits="16" format="integer">
+        <description>Number of edges on the reference time input. Sampled using asynchronous circuitry. Not available in all designs</description>
+      </field>
+    </register>        
+    
   </group>
 
 
index 02dcd495d6bac8f21327b8ab475c55d3bf4b9342..3383c8686dd6580600ab3a4780131a1cb9e39a02 100755 (executable)
@@ -12,98 +12,113 @@ use File::chdir;
 use Storable qw(lock_retrieve);
 use Text::TabularDisplay;
 use feature "switch";
+use CGI::Carp qw(fatalsToBrowser);
 
 
+my ($db,$data,$once,$slice);
 my $help = 0;
 my $verbose = 0;
 my $isbrowser = 0;
-
+my $server = $ENV{'SERVER_SOFTWARE'} || "";
+my @request;
 my ($file,$netaddr,$name, $style);
+
+
 $ENV{'DAQOPSERVER'}="localhost:7" unless (defined $ENV{'DAQOPSERVER'});
+die "can not connect to trbnet-daemon on $ENV{'DAQOPSERVER'}: ".trb_strerror() unless (defined &trb_init_ports());
+
+
+
+if (defined $ENV{'QUERY_STRING'}) {
+  @request = split("&",$ENV{'QUERY_STRING'});
+  unless ($server  =~ /HTTPi/i) {
+    print "Content-type: text/html\n\n";
+    }
+  }
+else {
+  $request[0] = ""; #Dummy entry to run foreach
+  }
 
+  
 
 
+foreach my $req (@request) {
 ###############################
 #### Check if browser or command line
 ###############################
-if(defined $ENV{'QUERY_STRING'}) {
-  if($ENV{'SERVER_SOFTWARE'} =~ /HTTPi/i) {
-    $isbrowser = 1;
-    ($file,$netaddr,$name,$style) = split("-",$ENV{'QUERY_STRING'});
-    $file = "htdocs/xml-db/cache/$file.entity";
-    use CGI::Carp qw(fatalsToBrowser);
+
+  if(defined $ENV{'QUERY_STRING'}) {
+    if($server =~ /HTTPi/i) {
+      $isbrowser = 1;
+      ($file,$netaddr,$name,$style) = split("-",$req);
+      $file = "htdocs/xml-db/cache/$file.entity";
+      }
+    else {
+  #     use FindBin qw($RealBin);
+      my $RealBin = ".";
+      $isbrowser = 1;
+      ($file,$netaddr,$name,$style) = split("-",$req);
+      $file = "$RealBin/cache/$file.entity";
+      }
     }
   else {
-#     use FindBin qw($RealBin);
+  #   use FindBin qw($RealBin);
     my $RealBin = ".";
-    $isbrowser = 1;
-    ($file,$netaddr,$name,$style) = split("-",$ENV{'QUERY_STRING'});
-    $file = "$RealBin/cache/$file.entity";
-    use CGI::Carp qw(fatalsToBrowser);
-    print "Content-type: text/html\n\n";
+    Getopt::Long::Configure(qw(gnu_getopt));
+    GetOptions(
+              'help|h' => \$help,
+              'verbose|v+' => \$verbose,
+              ) or pod2usage(2);
+    pod2usage(1) if $help;
+    
+    $file    = "$RealBin/cache/$ARGV[0].entity";
+    $netaddr = $ARGV[1] || "";
+    $name    = $ARGV[2] || "";
+    $style   = $ARGV[3] || "";
     }
-  }
-else {
-#   use FindBin qw($RealBin);
-  my $RealBin = ".";
-  Getopt::Long::Configure(qw(gnu_getopt));
-  GetOptions(
-            'help|h' => \$help,
-            'verbose|v+' => \$verbose,
-            ) or pod2usage(2);
-  pod2usage(1) if $help;
-  
-  $file    = "$RealBin/cache/$ARGV[0].entity";
-  $netaddr = $ARGV[1] || "";
-  $name    = $ARGV[2] || "";
-  $style   = $ARGV[3] || "";
-  }
 
-  $style = "" unless $style;
-my $isInline = $style =~ /inline/i;  
-my $isColor  = $style =~ /color/i;  
-my $sortAddr = $style =~ /sortaddr/i;
-   $verbose  = ($style =~ /verbose/i) ||$verbose;
+     $style = "" unless $style;
+  my $isInline = $style =~ /inline/i;  
+  my $isColor  = $style =~ /color/i;  
+  my $sortAddr = $style =~ /sortaddr/i;
+     $verbose  = ($style =~ /verbose/i) ||$verbose;
 
 ###############################
 #### Check arguments for validity
 ###############################
 
-die "Entity $file not found.\n" unless(-e $file) ;
-die "DAQOPSERVER not set in environment" unless (defined $ENV{'DAQOPSERVER'});
-die "can not connect to trbnet-daemon on $ENV{'DAQOPSERVER'}: ".trb_strerror() unless (defined &trb_init_ports());
-  
-if    ($netaddr=~ m/0x([0-9a-fA-F]{4})/) {$netaddr = hex($1);}
-elsif ($netaddr=~ m/([0-9]{1,5})/) {$netaddr = $1;}
-else {die "Could not parse address $netaddr\n";}
+  die "Entity $file not found.\n" unless(-e $file) ;
+    
+  if    ($netaddr=~ m/0x([0-9a-fA-F]{4})/) {$netaddr = hex($1);}
+  elsif ($netaddr=~ m/([0-9]{1,5})/) {$netaddr = $1;}
+  else {die "Could not parse address $netaddr\n";}
 
 
-my $slice = undef;
-if    ($name =~ m/^([a-zA-Z0-9]+)\.(\d+)$/) {$name = $1; $slice = $2;}
-elsif ($name =~ m/^([a-zA-Z0-9]+)$/)       {$name = $1; $slice = undef;}
-else {die "Could not parse name $name \n";}
+  $slice = undef;
+  if    ($name =~ m/^([a-zA-Z0-9]+)\.(\d+)$/) {$name = $1; $slice = $2;}
+  elsif ($name =~ m/^([a-zA-Z0-9]+)$/)       {$name = $1; $slice = undef;}
+  else {die "Could not parse name $name \n";}
 
-my $db = lock_retrieve($file);
-die "Unable to read cache file\n" unless defined $db;
+  $db = lock_retrieve($file);
+  die "Unable to read cache file\n" unless defined $db;
 
-die "Name not found in entity file\n" unless(exists $db->{$name});
+  die "Name not found in entity file\n" unless(exists $db->{$name});
 
 ###############################
 #### Main "do the job"
 ###############################
-my $data;  
-my $once = (defined $slice)?1:0;
-if ($isbrowser) {
-  requestdata($db->{$name},$name,$slice);
-  print DumpTree($data) if $verbose;
-  generateoutput($db->{$name},$name,$slice,$once);
-  writeoutput($db->{$name},$name,$slice,$once);
-  }
-else {
-  runandprint($db->{$name},$name,$slice,$once);
-  }
-
+  $once = (defined $slice)?1:0;
+  if ($isbrowser) {
+    requestdata($db->{$name},$name,$slice);
+    print DumpTree($data) if $verbose;
+    generateoutput($db->{$name},$name,$slice,$once);
+    writeoutput($db->{$name},$name,$slice,$once);
+    }
+  else {
+    runandprint($db->{$name},$name,$slice,$once);
+    }
 
+}
  
 ###############################
 #### Formatting of values
@@ -116,8 +131,10 @@ sub FormatPretty {
   
   my $ret, my $cl;
   if (defined $cont) {
-    $cl = "class=\"".($value?"bad":"good")."\"" if     ($obj->{errorflag});
-    $cl = "class=\"".($value?"high":"low")."\"" unless ($obj->{errorflag});
+    $cl = "class=\"".($value?"bad":"good")."\"" if     ( $obj->{errorflag} && !$obj->{invertflag});
+    $cl = "class=\"".($value?"good":"bad")."\"" if     ( $obj->{errorflag} &&  $obj->{invertflag});
+    $cl = "class=\"".($value?"high":"low")."\"" if     (!$obj->{errorflag} && !$obj->{invertflag});
+    $cl = "class=\"".($value?"low":"high")."\"" if     (!$obj->{errorflag} &&  $obj->{invertflag});
     $ret = "<$cont ";
     for($obj->{format}) {    
       when ("boolean") {
@@ -202,7 +219,7 @@ sub requestdata {
         }
       }
     }
-  elsif($obj->{type} eq "register" || $obj->{type} eq "registerfield") {
+  elsif($obj->{type} eq "register" || $obj->{type} eq "registerfield" || $obj->{type} eq "field") {
     my $stepsize = $obj->{stepsize} || 1;
     $slice = 0 unless defined $slice;
     do {
@@ -366,9 +383,9 @@ sub runandprint {
     
   }
   
+print "\n";  
   
-  
-  
+1;  
   
   
 ###############################
index f84ff20c236ed1f1d10c6a468a27cf224cc0e74a..cc4aecddc883ef09c236a13dee1043df7aa3271b 100644 (file)
   <xs:attribute name="defaultValue" type="xs:string" />
   <xs:attribute name="value"        type="valuetype" />
   <xs:attribute name="format"       type="formattype" />
+  <xs:attribute name="formatstring" type="xs:string" />
   <xs:attribute name="continuous"   type="xs:boolean" />
   <xs:attribute name="repeat"       type="xs:positiveInteger" />
   <xs:attribute name="errorflag"    type="xs:boolean" />
+  <xs:attribute name="invertflag"   type="xs:boolean" />
   <!-- unit and scale give information about how to interpret data. a
        numerical scaling factor and/or a physical unit. E.g.
        temperature measured in 1/16th degrees will be ".0625" and "°C"
     <!-- if PERL evaluates this field to true,
          an error is indicated by this field -->
     <xs:attribute ref="errorflag" />
-      </xs:complexType>
+    <xs:attribute ref="invertflag" />
+    </xs:complexType>
     <xs:unique name="UniqueEnumItems">
       <xs:selector xpath="enumItem" />
       <xs:field xpath="@value" />