]> jspc29.x-matter.uni-frankfurt.de Git - mvdsensorcontrol.git/commitdiff
graphical jtag register editor is usable in principle (cgitest.pl)
authorMichael Wiebusch <stratomaster@gmx.net>
Sun, 23 Jun 2013 18:57:03 +0000 (20:57 +0200)
committerMichael Wiebusch <stratomaster@gmx.net>
Sun, 23 Jun 2013 18:57:03 +0000 (20:57 +0200)
xml_spielwiese/cgitest.pl
xml_spielwiese/mergexml.pl [deleted file]
xml_spielwiese/query.pl [deleted file]
xml_spielwiese/settings.xml
xml_spielwiese/styles.css
xml_spielwiese/update_specfile.sh [deleted file]

index 20cd811e90decc19160ea0b2ae7037daaab7d1bc..7a863ef88af135dfa6f7302a9e060757282ad16c 100755 (executable)
@@ -21,15 +21,19 @@ EOF
 printJavaScripts();
 print <<EOF;
 </HEAD>
-<BODY>
-
+<BODY onload='reloadSpecTree();reloadSetTree();'>
+<div id="debug">
+debug text
+</div>
 <div id="roterBereich">
-<input type="button" onClick="getdata('$me?print=spectree','roterBereich');" value="show spectree">
+<input type="button" onClick="getdata('$me?print=spectree','roterBereich',true);" value="show spectree">
 </div>
 <div id="blauerBereich">
-<input type="button" onClick="getdata('$me?print=settree','blauerBereich');" value="show settree">
+<input type="button" onClick="getdata('$me?print=settree','blauerBereich',true);" value="show settree">
+</div>
+<div id="blaharea">
+<input type="button" onClick='hashtest()' value="function">
 </div>
-
 
 
 
@@ -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<br>";
+               unless( $register->hasChildNodes()){
+                       $maps->removeChild($register);
+                       print "deleted register as well<br>";
+               }
+               }
+               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}."<br>\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 "<table>";
-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 "<tr>";
+       print "<tr bgcolor='lightgrey'>";
 
        print <<EOF;
-<td onClick='toggleVis("$flistid")' bgcolor="lightgrey">+</td>
+<td onClick='toggleVis("$flistid")' bgcolor="lightgrey">&nbsp;+&nbsp;</td>
 EOF
        print "<td>$registerName</td>"; 
        #print "<td>$registerId</td>";
 
+               if($xmlfile eq $setfile){
+               print <<EOF;
+<td bgcolor="orange" onclick='deleteSettings("$setfile","$registerName","");'>&nbsp;X&nbsp;</td>
+EOF
+               }       
+               if($xmlfile eq $specfile){
+               print <<EOF;
+<td bgcolor="orange" onclick='copyDefaultRegister("$registerName");'>&nbsp;>>&nbsp;</td>
+EOF
+               }       
 
        print "</tr>";
        #print "<tr>";
@@ -111,6 +251,7 @@ EOF
        print '<td>';
                print_fields($xmlfile,$register);
        print "</td>";
+       print "<td bgcolor='#dea'></td>";
        print "</tr>";
 }
 print "</table>";
@@ -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 "<table>";
        for my $field (@fields){
                my $fieldName = $field->findvalue("./\@name");
@@ -135,7 +276,7 @@ sub print_fields {
 
                print "<tr>";
                print "<td width=120>$fieldName</td>";
-               print "<td> </td>";
+               print "<td> &nbsp;=&nbsp;</td>";
                if ($readOnlyFlag){
                print <<EOF;
                <td width=120 bgcolor='white' align='right'>$fieldValue</td>
@@ -143,15 +284,22 @@ EOF
                } else {
                print <<EOF;
 <td align='right'>
-<input type='text' align='right' value='$fieldValue' onchange='alert("$fieldId")' >
+<input type='text' align='right' value='$fieldValue' onchange='saveSettings("$xmlfile","$registerName","$fieldName",this.value)'  >
 </td>
 EOF
-               #print '<td id="SaveBtn'.$fieldId.'" style="visibility:visible">';
-               #print <<EOF;
-               #<input type="button" value="save">
-#EOF
-               print '</td>';
+               
                }
+               print '</td>';
+               if($xmlfile eq $specfile){
+               print <<EOF;
+<td bgcolor="orange" onclick='saveSettings("$setfile","$registerName","$fieldName","$fieldValue");'>&nbsp;&#62;&#62;&nbsp;</td>
+EOF
+               }       
+               if($xmlfile eq $setfile){
+               print <<EOF;
+<td bgcolor="orange" onclick='deleteSettings("$setfile","$registerName","$fieldName");'>&nbsp;X&nbsp;</td>
+EOF
+               }       
                print "</tr>";  
        }
        print "</table>";
@@ -194,35 +342,104 @@ sub printJavaScripts {
 print <<EOF ;
 
 <script language="javascript">
+
+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_+"&register="+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_+"&register="+register_+"&field="+field_,"debug",false);
+//getdata("$me?print=settree","blauerBereich",true);
+reloadSetTree();
+}
+
+function copyDefaultRegister(register){
+var register_ = encodeURIComponent(register);
+getdata("$me?action=copyDefaultRegister&register="+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;
 }
 
 </script>
 
 <script language="javascript">
-function getdata(command,destId) {
+function getdata(command,dId,async) {
   var xmlhttp = null;
   //var cb = null;
   xmlhttp=new XMLHttpRequest();
   //cb = callback;
-       //var destId = dId;
+       var destId = dId;
   
   xmlhttp.onreadystatechange = function() {
-    if(xmlhttp.readyState == 4) {
+    if(xmlhttp.readyState == 4 && xmlhttp.status==200) {
       //if(cb)
        if(document.getElementById(destId).innerHTML){
        document.getElementById(destId).innerHTML  = xmlhttp.responseText;      
@@ -231,7 +448,8 @@ function getdata(command,destId) {
        //document.getElementById(destId).innerHTML  = xmlhttp.responseText;    
       }
     }
-  xmlhttp.open("GET",command,true);
+
+  xmlhttp.open("GET",command,async);
   xmlhttp.send(null);
   }
 </script>
diff --git a/xml_spielwiese/mergexml.pl b/xml_spielwiese/mergexml.pl
deleted file mode 100755 (executable)
index 0f6fbb2..0000000
+++ /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 (executable)
index 98e438e..0000000
+++ /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";
-}
-
-}
index 58b773a478b399de1ca270de658836908166f291..1975030f4fe81997020328134794d3e62bd3b3b0 100644 (file)
@@ -1,10 +1,4 @@
 <?xml version="1.0"?>
 <MAPS type="MIMOSA26">
-<register name="CONTROL_PIX_REG">
-<field name="NU" value="0"/>
-</register>
 
-<register name="DIS_DISCRI">
-       <field name="DisDiscri" value="1000"/>
-</register>
-</MAPS>
+<register name="CONTROL_PIX_REG"><field name="NU" value="0"/><field name="SelPad1" value="0"/><field name="SelPad2" value="0"/><field name="RowMkLast" value="0x023F"/><field name="RowMkd" value="0"/><field name="RowMka" value="0"/></register><register name="DAC_BIAS"><field name="ILVDSTX" value="40"/><field name="IKIMO" value="100"/><field name="ID1PWRS" value="10"/><field name="ICLPDISC" value="100"/><field name="IVTST2" value="118"/><field name="IAnaBUF" value="50"/></register></MAPS>
index 04e2971734176beae53532e0b8cee3e1f6d8f851..5dcad2688f47669d1e43c8bc22e48feb233ad382 100644 (file)
@@ -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 (executable)
index 0f23d0d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-
-here=$(pwd)
-
-cd ../MIMOSA26_Registers
-./GenerateSpecFile.sh | tee "$here/MIMOSA26_JTAG_SPEC.xml"
-
-cd "$here"