From 33513a449d515a1ef53d5888140a43c5b880d228 Mon Sep 17 00:00:00 2001 From: Jan Michel Date: Fri, 26 Nov 2021 15:40:25 +0100 Subject: [PATCH] add simple register dump function --- web/htdocs/commands/xmlpage.pm | 1 + web/htdocs/scripts/xmlpage.js | 22 ++++++++++++++++++++- xml-db/get.pl | 36 ++++++++++++++++++++++++++++------ 3 files changed, 52 insertions(+), 7 deletions(-) diff --git a/web/htdocs/commands/xmlpage.pm b/web/htdocs/commands/xmlpage.pm index 3837943..561446a 100644 --- a/web/htdocs/commands/xmlpage.pm +++ b/web/htdocs/commands/xmlpage.pm @@ -88,6 +88,7 @@ print qq|
+
Dump
|; diff --git a/web/htdocs/scripts/xmlpage.js b/web/htdocs/scripts/xmlpage.js index 9045a3b..e944082 100644 --- a/web/htdocs/scripts/xmlpage.js +++ b/web/htdocs/scripts/xmlpage.js @@ -111,6 +111,7 @@ setCookie("address"+currentpage,document.getElementById("address").value); } document.getElementById("permalink").href=permaLink(); + document.getElementById("dump").href= GETCOMMAND+'?'+command.substring(0, command.length - 1) + "dump"; } function eatCookies() { @@ -168,7 +169,26 @@ function permaLink() { link += "&inline="+document.getElementById("inline").checked; return link; } - + + +function dumpLink() { + var link = location.origin + location.pathname + location.search + "#"; + + if(document.getElementById("address")) { + link += "&address="+document.getElementById("address").value; + } + if(document.getElementById("period")) { + link += "&period="+document.getElementById("period").value; + } + if(document.getElementById("target")) { + link += "&target="+document.getElementById("target").value; + } + link += "&cache="+document.getElementById("cache").checked; + link += "&rate="+document.getElementById("rate").checked; + link += "&inline="+document.getElementById("inline").checked; + return link; + } + /*From w3schools.com*/ function getCookie(cname,pagename) { //URI diff --git a/xml-db/get.pl b/xml-db/get.pl index 13122ca..06bf5c0 100755 --- a/xml-db/get.pl +++ b/xml-db/get.pl @@ -19,8 +19,11 @@ my ($db,$data,$once,$slice); my $help = 0; my $verbose = 0; my $isbrowser = 0; +my $StyleDump = 0; my $server = $ENV{'SERVER_SOFTWARE'} || ""; my @request; +my @RegisterDump; + my ($file,$entity,$netaddr,@spi_chains,$name, $style, $storefile, $rates, $cache, $isInline, $olddata); my $lastboards; @@ -87,6 +90,9 @@ foreach my $req (@request) { $verbose = ($style =~ /verbose/i) ||$verbose; $rates = $style =~ /rate/i; $cache = $style =~ /cache/i; + $StyleDump =$style =~ /dump/i; + + ############################### #### Check arguments for validity @@ -211,7 +217,7 @@ sub FormatPretty { } $cstr = "" unless $cstr; - my $ret, my $cl; + my $ret, my $cl = ''; if (defined $cont) { my $isflag = 1; $isflag = 0 if $obj->{noflag}; @@ -458,6 +464,7 @@ sub makeTitleVertical { sub generateoutput { my ($obj,$name,$slice,$once) = @_; my $t = ""; + @RegisterDump = (); $slice = 0 unless defined $slice; if ($obj->{type} eq "group") { @@ -465,7 +472,7 @@ sub generateoutput { generateoutput($db->{$c},$c,$slice,$once); } } elsif (($obj->{type} eq "register" || $obj->{type} eq "registerfield" || $obj->{type} eq "field")) { - + #for every register my $stepsize = $obj->{stepsize} || 1; my $addr = $obj->{address}; @@ -474,19 +481,29 @@ sub generateoutput { my $tarrhead; my $tarrcont; my $line = 0; - do { + do { #for every repeat 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}) { + foreach my $b (sort keys %{$lastboards}) { #for every board my $ttmp = ""; #"Line Header" part my $ttmp2 = ""; #"Line Content" part - my $sl; + my $sl = ""; my $slicename = ""; $slicename = " - ".$obj->{sliceName}->{$slice} if (exists $obj->{sliceName}->{$slice}); next unless defined $data->{$addr}->{$b} || !($obj->{mode} =~ /r/); + if ($StyleDump) { + my $iswriteable = $obj->{mode} =~ /w/; + foreach my $c (@{$obj->{children}}) { + $iswriteable = $iswriteable || ($db->{$c}->{mode} =~ /w/); + } + if($iswriteable) { + my $s = sprintf("w 0x%s 0x%04x 0x%08x \t#%s %i%s",$b,$addr,$data->{$addr}->{$b},$name,$slice,$slicename); + push(@RegisterDump,$s); + } + } $sl = sprintf("
%i%s$name.$slice (0x%04x)
",$slice,$slicename,$addr) if ($once != 1 && defined $obj->{repeat}); my $endslice = ''; @@ -539,7 +556,14 @@ sub generateoutput { } $t .= ""; } - print $t; + + if($StyleDump) { + print join("\n",@RegisterDump); + print("\n"); + } + else { + print $t; + } } sub makerate { -- 2.43.0