From: Jan Michel Date: Wed, 19 May 2021 12:48:50 +0000 (+0200) Subject: xml-pages: Add option for vertical alignment of single-field registers X-Git-Url: https://jspc29.x-matter.uni-frankfurt.de/git/?a=commitdiff_plain;h=40644d74192adcf5b579183fddda7fb3485589b5;p=daqtools.git xml-pages: Add option for vertical alignment of single-field registers --- diff --git a/web/htdocs/commands/xmlpage.pm b/web/htdocs/commands/xmlpage.pm index 0960860..3837943 100644 --- a/web/htdocs/commands/xmlpage.pm +++ b/web/htdocs/commands/xmlpage.pm @@ -26,6 +26,7 @@ sub initPage { my $israte = $setup[$active]->{rate}; my $iscache = $setup[$active]->{cache}; my $isfold = $setup[$active]->{fold}; + my $isinline= $setup[$active]->{inline}; $getscript = $page->{getscript}; if(!defined $getscript) { @@ -82,7 +83,9 @@ print qq|
{nocache}?'style="display:none"':"").qq|>
-
+ +
+
diff --git a/web/htdocs/layout/blue.css b/web/htdocs/layout/blue.css index 25f5b8f..8428bc6 100644 --- a/web/htdocs/layout/blue.css +++ b/web/htdocs/layout/blue.css @@ -356,13 +356,23 @@ hr.queryresult { padding-left:16px; } +table.inline td+td { + min-width:100px; +} + + table.queryresult td.slice, table.queryresult th.slice { text-align:left; background:#eee; + min-width:0; } table.queryresult td { - background:#e0e0e0; + background:#e8e8e8; +} + +table.queryresult td.nonex { + background:#dde; } diff --git a/web/htdocs/layout/rate.png b/web/htdocs/layout/rate.png index 5cba980..3f93645 100644 Binary files a/web/htdocs/layout/rate.png and b/web/htdocs/layout/rate.png differ diff --git a/web/htdocs/scripts/xmlpage.js b/web/htdocs/scripts/xmlpage.js index c736105..9045a3b 100644 --- a/web/htdocs/scripts/xmlpage.js +++ b/web/htdocs/scripts/xmlpage.js @@ -59,6 +59,7 @@ var opt = ""; if(document.getElementById("rate").checked) opt += "rate"; if(document.getElementById("cache").checked) opt += "cache"; + if(document.getElementById("inline").checked) opt += "inline"; com = command.split('&'); command = ""; for(i = 0; i < com.length; i++) { @@ -98,6 +99,7 @@ function makeCookies() { setCookie("rate"+currentpage,document.getElementById("rate").checked); + setCookie("inline"+currentpage,document.getElementById("inline").checked); setCookie("cache"+currentpage,document.getElementById("cache").checked); if(document.getElementById("target")) { setCookie("target"+currentpage,document.getElementById("target").value); @@ -132,6 +134,10 @@ if (t != "" && document.getElementById("rate")) { document.getElementById("rate").checked = (t=="true")?true:false; } + t = getCookie("inline",currentpage); + if (t != "" && document.getElementById("inline")) { + document.getElementById("inline").checked = (t=="true")?true:false; + } setperiod(-1); settarget(-1); if(document.getElementById("address")) @@ -159,6 +165,7 @@ function permaLink() { } link += "&cache="+document.getElementById("cache").checked; link += "&rate="+document.getElementById("rate").checked; + link += "&inline="+document.getElementById("inline").checked; return link; } diff --git a/web/htdocs/tdc/inputmonitor.pl b/web/htdocs/tdc/inputmonitor.pl index 3b1d98d..9c978ba 100755 --- a/web/htdocs/tdc/inputmonitor.pl +++ b/web/htdocs/tdc/inputmonitor.pl @@ -36,6 +36,7 @@ $setup[1]->{cmd} = "InputMonitorTrb3sc-0xfe60-MonitorCounters"; $setup[1]->{period} = 1000; $setup[1]->{address} = 1; $setup[1]->{rate} = 1; +$setup[1]->{inline} = 1; $setup[2]->{name} = "Trb3scTrigger"; $setup[2]->{cmd} = "InputMonitorTrb3sc-0xfe60-Trigger"; diff --git a/xml-db/get.pl b/xml-db/get.pl index c4bea9e..79c40d4 100755 --- a/xml-db/get.pl +++ b/xml-db/get.pl @@ -14,14 +14,14 @@ use if (!defined $ENV{'QUERY_STRING'}), Getopt::Long; no warnings 'experimental::smartmatch'; # use Data::TreeDumper; -# use Data::Dumper; +use Data::Dumper; my ($db,$data,$once,$slice); my $help = 0; my $verbose = 0; my $isbrowser = 0; my $server = $ENV{'SERVER_SOFTWARE'} || ""; my @request; -my ($file,$entity,$netaddr,@spi_chains,$name, $style, $storefile, $rates, $cache,$olddata); +my ($file,$entity,$netaddr,@spi_chains,$name, $style, $storefile, $rates, $cache, $isInline, $olddata); my $lastboards; $ENV{'DAQOPSERVER'}="localhost:7" unless (defined $ENV{'DAQOPSERVER'}); @@ -81,14 +81,13 @@ foreach my $req (@request) { $file = "$RealBin/cache/$entity.entity"; $style = "" unless $style; - my $isInline = $style =~ /inline/i; - my $isColor = $style =~ /color/i; - my $sortAddr = $style =~ /sortaddr/i; + $isInline = $style =~ /inline/i; +# my $isColor = $style =~ /color/i; +# my $sortAddr = $style =~ /sortaddr/i; $verbose = ($style =~ /verbose/i) ||$verbose; $rates = $style =~ /rate/i; $cache = $style =~ /cache/i; - ############################### #### Check arguments for validity ############################### @@ -424,48 +423,64 @@ sub spi_register_read { return $o; } +sub makeTitleVertical { + my ($obj,$name,$once,$addr,$isInline) = @_; + my $t; + $isInline = $isInline && $obj->{type} eq "registerfield"; + + $t = "
"; + + $t .= sprintf(""; + return $t; +} + sub generateoutput { my ($obj,$name,$slice,$once) = @_; my $t = ""; + $slice = 0 unless defined $slice; + if ($obj->{type} eq "group") { foreach my $c (@{$obj->{children}}) { generateoutput($db->{$c},$c,$slice,$once); } } elsif (($obj->{type} eq "register" || $obj->{type} eq "registerfield" || $obj->{type} eq "field")) { - $t = "
$name$name (0x%04x)
$obj->{description}
",$addr); + if ($once != 1 && defined $obj->{repeat}) { + $t .= "
Slice"; + } + return $t if $isInline; + + if ($obj->{type} eq "registerfield" || $obj->{type} eq "field") { + my $range = $obj->{start}+$obj->{bits}-1; + $range .= "..".$obj->{start} if ($obj->{bits}>1); + $t .= "
$name$name (Bit $range)
$obj->{description}
"; + } elsif ($obj->{type} eq "register") { + foreach my $c (@{$obj->{children}}) { + $oc = $db->{$c}; + my $range = $oc->{start}+$oc->{bits}-1; + $range .= "..".$oc->{start} if ($oc->{bits}>1); + $t .= "
$c$c (Bit $range)
$oc->{description}
"; + } + } + $t .= "
"; - my $stepsize = $obj->{stepsize} || 1; - $slice = 0 unless defined $slice; + my $stepsize = $obj->{stepsize} || 1; my $addr = $obj->{address}; + + $t .= makeTitleVertical($obj,$name,$once,$addr,$isInline); - $t .= sprintf(""; - my %tarr; + my $tarrhead; + my $tarrcont; my $line = 0; do { - $addr = $obj->{address}+$slice*$stepsize; + my $addr = $obj->{address}+$slice*$stepsize; #### Prepare table header line if ($obj->{mode} =~ /r/) { $lastboards = $data->{$addr}; #Store list of responding boards as guess for write-only registers. } foreach my $b (sort keys %{$lastboards}) { - my $ttmp = ""; + my $ttmp = ""; #"Line Header" part + my $ttmp2 = ""; #"Line Content" part my $sl; my $slicename = ""; $slicename = " - ".$obj->{sliceName}->{$slice} if (exists $obj->{sliceName}->{$slice}); @@ -475,27 +490,51 @@ sub generateoutput { my $endslice = ''; $endslice = ' class="endslice"' if (($once != 1 && defined $obj->{repeat} && $slice == 0) && $line++); - $ttmp .= sprintf("
$name$name (0x%04x)
$obj->{description}
",$addr); - if ($once != 1 && defined $obj->{repeat}) { - $t .= "
Slice"; - } - if ($obj->{type} eq "registerfield" || $obj->{type} eq "field") { - my $range = $obj->{start}+$obj->{bits}-1; - $range .= "..".$obj->{start} if ($obj->{bits}>1); - $t .= "
$name$name (Bit $range)
$obj->{description}
"; - } elsif ($obj->{type} eq "register") { - foreach my $c (@{$obj->{children}}) { - $oc = $db->{$c}; - my $range = $oc->{start}+$oc->{bits}-1; - $range .= "..".$oc->{start} if ($oc->{bits}>1); - $t .= "
$c$c (Bit $range)
$oc->{description}
"; - } - } - $t .= "
%s$name on 0x%s
raw: 0x%x
%s",$endslice,$b,$b,$data->{$addr}->{$b},$sl); + $ttmp = sprintf("
%s$name on 0x%s
raw: 0x%x
%s",$endslice,$b,$b,$data->{$addr}->{$b},$sl); if ($obj->{type} eq "register") { foreach my $c (@{$obj->{children}}) { my $fullc = $c; $fullc .= ".$slice" if ($once != 1 && defined $obj->{repeat}); my $cstr = sprintf("%s-0x%s-%s", $entity,$b,$fullc); my $wr = 1 if $db->{$c}->{mode} =~ /w/; - $ttmp .= FormatPretty($data->{$addr}->{$b},$db->{$c},$c,"td",($wr?"editable":""),$cstr,$addr,$b); + $ttmp2 .= FormatPretty($data->{$addr}->{$b},$db->{$c},$c,"td",($wr?"editable":""),$cstr,$addr,$b); } } elsif ($obj->{type} eq "field" || $obj->{type} eq "registerfield") { my $fullc = $name; $fullc .= ".$slice" if ($once != 1 && defined $obj->{repeat}); my $cstr = sprintf("%s-0x%s-%s", $entity,$b,$fullc ); my $wr = 1 if $obj->{mode} =~ /w/; - $ttmp .= FormatPretty($data->{$addr}->{$b},$obj,$fullc,"td",($wr?"editable":""),$cstr,$addr,$b); + $ttmp2 .= FormatPretty($data->{$addr}->{$b},$obj,$fullc,"td",($wr?"editable":""),$cstr,$addr,$b); } - $tarr{sprintf("0x%s%04i",$b,$slice)}=$ttmp; + $tarrhead->{sprintf("%s",$b)}[$slice]=$ttmp; + $tarrcont->{sprintf("%s",$b)}[$slice]=$ttmp2; } } while ($once != 1 && defined $obj->{repeat} && ++$slice < $obj->{repeat}); - $t .= $tarr{$_} for sort keys %tarr; + + if ( $isInline != 1 || $obj->{type} ne "registerfield") { #Standard, serial view + for my $head (sort keys %{$tarrhead}) { +# for my $cont (sort @{$tarrhead->{$head}}) { + for(my $i=0;$i{$head}};$i++) { + $t .= $tarrhead->{$head}[$i].$tarrcont->{$head}[$i]; + + } + } + } + else { #Column View + for my $boards (sort keys %{$tarrhead}) { + $t .= "
$boards"; + } + $t .= ''; + for(my $i=0;$i<($obj->{repeat}//1);$i++) { + $t .= "
"; + $t .= "$i" if $obj->{repeat}; + for my $boards (sort keys %{$tarrhead}) { + $t .= $tarrcont->{$boards}[$i] // ''; + } + + } + } $t .= "
"; } print $t;