From 18af12f56463606180c4f5cb242f45296f4f7e40 Mon Sep 17 00:00:00 2001 From: Michael Wiebusch Date: Sun, 23 Jun 2013 20:57:03 +0200 Subject: [PATCH] graphical jtag register editor is usable in principle (cgitest.pl) --- xml_spielwiese/cgitest.pl | 268 +++++++++++++++++++++++++++--- xml_spielwiese/mergexml.pl | 18 -- xml_spielwiese/query.pl | 26 --- xml_spielwiese/settings.xml | 8 +- xml_spielwiese/styles.css | 2 +- xml_spielwiese/update_specfile.sh | 8 - 6 files changed, 245 insertions(+), 85 deletions(-) delete mode 100755 xml_spielwiese/mergexml.pl delete mode 100755 xml_spielwiese/query.pl delete mode 100755 xml_spielwiese/update_specfile.sh diff --git a/xml_spielwiese/cgitest.pl b/xml_spielwiese/cgitest.pl index 20cd811..7a863ef 100755 --- a/xml_spielwiese/cgitest.pl +++ b/xml_spielwiese/cgitest.pl @@ -21,15 +21,19 @@ EOF printJavaScripts(); print < - - + +
+debug text +
- +
- + +
+
+
- @@ -46,8 +50,8 @@ my %cgiHash = &read_input; if (!keys %cgiHash) { # if script is called without arguments: initialize the html structure - initPage(); - exit; +initPage(); +exit; } @@ -72,36 +76,172 @@ print_registers($setfile); } +if (defined $cgiHash{'debuginput'}) { +print $cgiHash{'debuginput'}; +} + +if (defined $cgiHash{'action'} ) { + + printHash(\%cgiHash); + if($cgiHash{'action'} eq 'save') { + save($cgiHash{'file'},$cgiHash{'register'},$cgiHash{'field'},$cgiHash{'value'}); + } + if($cgiHash{'action'} eq 'delete'){ + del($cgiHash{'file'},$cgiHash{'register'},$cgiHash{'field'}); + } + if($cgiHash{'action'} eq 'copyDefaultRegister'){ + del($setfile,$cgiHash{'register'},""); # delete existing register from setfile + copyDefaultRegister($cgiHash{'register'}); + } +} + + + +#################### SUBLAND ###################### +sub del { + my $registerName=$_[1]; + my $fieldName=$_[2]; + my $xmlfile = $_[0]; + my $xmltree = $parser->parse_file($xmlfile); + my $maps = $xmltree->findnodes("/MAPS")->shift(); + my $register = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']")->shift(); + if ($fieldName eq "") { # no field specified, remove whole register + unless($register eq ""){ + $maps->removeChild($register); + } + print "deleted whole register"; + } else { + my $field = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']/field[\@name='".$fieldName."']")->shift(); + $register->removeChild($field); + print "deleted field
"; + unless( $register->hasChildNodes()){ + $maps->removeChild($register); + print "deleted register as well
"; + } + } + open(SCHREIBEN,"> $xmlfile") + or print "could not open file $xmlfile for writing: $!\n"; +print SCHREIBEN $xmltree->toString(); +close SCHREIBEN; +} -#################### SUBLAND ###################### + +sub save { + + my $registerName=$_[1]; + my $fieldName=$_[2]; + my $xmlfile = $_[0]; + my $newValue = $_[3]; + my $xmltree = $parser->parse_file($xmlfile); + my $maps = $xmltree->findnodes("/MAPS")->shift(); + #my @fields = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']/field[\@name='".$fieldName."']"); + my $register = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']")->shift(); + + if($register eq ""){ + $register = $maps->addNewChild("","register"); + $register->setAttribute("name",$registerName); + } + + + my $field = $xmltree->findnodes("/MAPS/register[\@name='".$registerName."']/field[\@name='".$fieldName."']")->shift(); + + if($field eq ""){ + $field = $register->addNewChild( "","field" ); + $field->setAttribute( "name", $fieldName ); + + } + #my $fieldValue = ($xmltree->findnodes("/MAPS/register[\@name='".$registerName."']/field[\@name='".$fieldName."']/\@name='value'"))[0]; + #print $fieldValue->findvalue("./"); + $field->setAttribute( "value", $newValue ); + print $field->findvalue("./\@value"); + open(SCHREIBEN,"> $xmlfile") + or print "could not open file $xmlfile for writing: $!\n"; + +print SCHREIBEN $xmltree->toString(); +close SCHREIBEN; +} + +sub copyDefaultRegister { + my $registerName=$_[0]; + my $settree = $parser->parse_file($setfile); + my $spectree = $parser->parse_file($specfile); + my $setmaps = $settree->findnodes("/MAPS")->shift(); + my $specmaps = $spectree->findnodes("/MAPS")->shift(); + + my $specRegister = $spectree->findnodes("/MAPS/register[\@name='".$registerName."']")->shift(); + + my $setRegister = $setmaps->addNewChild("","register"); + $setRegister->setAttribute("name",$registerName); + + my @specFields = $specRegister->findnodes("./field"); + + for my $specField (@specFields){ + my $fieldName = $specField->findvalue("./\@name"); + my $fieldValue = $specField->findvalue("./\@defaultValue"); + my $setField = $setRegister->addNewChild( "","field" ); + $setField->setAttribute( "name", $fieldName ); + $setField->setAttribute( "value", $fieldValue ); + print $setField->findvalue("./\@value"); + } + open(SCHREIBEN,"> $setfile") + or print "could not open file $setfile for writing: $!\n"; + +print SCHREIBEN $settree->toString(); +close SCHREIBEN; +} + +sub by_name { + my $a_name= $a->findvalue("./\@name") ; + my $b_name= $b->findvalue("./\@name") ; + + # putting $b_published in front will ensure the descending order. + return $a_name cmp $b_name; +} + +sub printHash { + my $hashref=$_[0]; + for my $element( keys %{$hashref}){ + print $element."=".$hashref->{$element}."
\n"; + } +} sub print_registers { my $xmlfile = $_[0]; my $xmltree = $parser->parse_file($xmlfile); -my @registers = $xmltree->findnodes("/MAPS/register"); +my @registers = sort by_name $xmltree->findnodes("/MAPS/register"); print ""; -for my $register ( @registers ){ +for my $register (@registers ){ my $registerName = $register->findvalue("./\@name"); my $registerId = $register->findvalue("./\@id"); my $registerSize = $register->findvalue("./\@size"); - my $flistid = $xmlfile.$registerName; + my $flistid = $xmlfile."//".$registerName; - print ""; + print ""; print <+ + EOF print ""; #print ""; + if($xmlfile eq $setfile){ + print < X  +EOF + } + if($xmlfile eq $specfile){ + print < >>  +EOF + } print ""; #print ""; @@ -111,6 +251,7 @@ EOF print '"; + print ""; print ""; } print "
 + $registerName$registerId
'; print_fields($xmlfile,$register); print "
"; @@ -121,7 +262,7 @@ sub print_fields { my $register = $_[1]; my $xmlfile = $_[0]; my $registerName = $register->findvalue("./\@name"); - my @fields = $register->findnodes("./field"); + my @fields = sort by_name $register->findnodes("./field"); print ""; for my $field (@fields){ my $fieldName = $field->findvalue("./\@name"); @@ -135,7 +276,7 @@ sub print_fields { print ""; print ""; - print ""; + print ""; if ($readOnlyFlag){ print <$fieldValue @@ -143,15 +284,22 @@ EOF } else { print < - + EOF - #print ''; + } + print ''; + if($xmlfile eq $specfile){ + print < >>  +EOF + } + if($xmlfile eq $setfile){ + print < X  +EOF + } print ""; } print "
$fieldName =  = '; - #print < -#EOF - print '
"; @@ -194,35 +342,104 @@ sub printJavaScripts { print < + +var visHash= new Object(); + + +function reloadSpecTree(){ +getdata('$me?print=spectree','roterBereich',false); +for (var key in visHash) { +if(visHash[key]==true){ +showElement(key); +} +} +} + +function reloadSetTree(){ +getdata('$me?print=settree','blauerBereich',false); +for (var key in visHash) { +if(visHash[key]==true){ +showElement(key); +} +} +} + +function saveSettings(file,register,field,value){ +//getdata("$me?debuginput=tralla","debug"); +var file_ = encodeURIComponent(file); +var register_ = encodeURIComponent(register); +var field_ = encodeURIComponent(field); +var value_ = encodeURIComponent(value); + +getdata("$me?action=save&file="+file_+"®ister="+register_+"&field="+field_+"&value="+value_,"debug",false); +//getdata("$me?print=settree","blauerBereich",true); +reloadSetTree(); +} + +function deleteSettings(file,register,field){ +//getdata("$me?debuginput=tralla","debug"); +var file_ = encodeURIComponent(file); +var register_ = encodeURIComponent(register); +var field_ = encodeURIComponent(field); + +getdata("$me?action=delete&file="+file_+"®ister="+register_+"&field="+field_,"debug",false); +//getdata("$me?print=settree","blauerBereich",true); +reloadSetTree(); +} + +function copyDefaultRegister(register){ +var register_ = encodeURIComponent(register); +getdata("$me?action=copyDefaultRegister®ister="+register_,"debug",false); +//getdata("$me?print=settree","blauerBereich",true); +reloadSetTree(); +} + +function debugOutput(input){ +getdata("$me?debuginput="+encodeURIComponent(input),"debug",true); +} + +function writeToElementId(input,destId){ + if(document.getElementById(destId).innerHTML){ + document.getElementById(destId).innerHTML = input; + } + +} + + function toggleVis(elementId) { if( document.getElementById(elementId).style.visibility == "visible") { document.getElementById(elementId).style.visibility = "collapse"; + visHash[elementId]=false; } else { document.getElementById(elementId).style.visibility = "visible" ; + visHash[elementId]=true; } } function showElement(elementId) { document.getElementById(elementId).style.visibility = "visible" ; + visHash[elementId]=true; } function hideElement(elementId) { document.getElementById(elementId).style.visibility = "hidden" ; + visHash[elementId]=false; } function collapseElement(elementId) { document.getElementById(elementId).style.visibility = "collapse" ; + visHash[elementId]=false; } diff --git a/xml_spielwiese/mergexml.pl b/xml_spielwiese/mergexml.pl deleted file mode 100755 index 0f6fbb2..0000000 --- a/xml_spielwiese/mergexml.pl +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use warnings; -use XML::LibXML; - -my $parser = XML::LibXML->new(); - -my $doc1 = $ARGV[0]; -my $doc2 = $ARGV[1]; - -my $xml1 = $parser->parse_file($doc1); -my $xml2 = $parser->parse_file($doc2); - -my $new_xml = XML::LibXML::Element->new( 'XML' ); -$new_xml->appendWellBalancedChunk( $xml1->documentElement()->toString() ); -$new_xml->appendWellBalancedChunk( $xml2->documentElement()->toString() ); -print $new_xml->toString(1); diff --git a/xml_spielwiese/query.pl b/xml_spielwiese/query.pl deleted file mode 100755 index 98e438e..0000000 --- a/xml_spielwiese/query.pl +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use warnings; -use XML::LibXML; - -my $parser = XML::LibXML->new(); - -my $doc1 = $ARGV[0]; - -my $xml1 = $parser->parse_file($doc1); - - -my $query = "//register/field[\@name='NU']"; - -my @nodes = $xml1->findnodes($query); - -for my $node ( @nodes) { -my $parentnode = $node->parentNode; -my @attributelist = $node->attributes(); -print $parentnode->nodeName(),"->",$node->nodeName(), ": ", $node->textContent(), "\n"; -for my $attribute ( @attributelist) { - print $attribute->name."\t".$attribute->value."\n"; -} - -} diff --git a/xml_spielwiese/settings.xml b/xml_spielwiese/settings.xml index 58b773a..1975030 100644 --- a/xml_spielwiese/settings.xml +++ b/xml_spielwiese/settings.xml @@ -1,10 +1,4 @@ - - - - - - - + diff --git a/xml_spielwiese/styles.css b/xml_spielwiese/styles.css index 04e2971..5dcad26 100644 --- a/xml_spielwiese/styles.css +++ b/xml_spielwiese/styles.css @@ -31,7 +31,7 @@ table { input[type="text"] { - font-size:12px; + font-size:10px; height:20px; width:120px; } diff --git a/xml_spielwiese/update_specfile.sh b/xml_spielwiese/update_specfile.sh deleted file mode 100755 index 0f23d0d..0000000 --- a/xml_spielwiese/update_specfile.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -here=$(pwd) - -cd ../MIMOSA26_Registers -./GenerateSpecFile.sh | tee "$here/MIMOSA26_JTAG_SPEC.xml" - -cd "$here" -- 2.43.0