]> jspc29.x-matter.uni-frankfurt.de Git - mvdsensorcontrol.git/commitdiff
some changes/additions to testgui.pl
authorMichael Wiebusch <stratomaster@gmx.net>
Fri, 26 Jul 2013 12:56:54 +0000 (14:56 +0200)
committerMichael Wiebusch <stratomaster@gmx.net>
Fri, 26 Jul 2013 12:56:54 +0000 (14:56 +0200)
tools/Common.pm
tools/jtageditor.pl
tools/testgui.js [new file with mode: 0644]
tools/testgui.pl
tools/xmlOperation.pl

index 913be8c7ea57c2ca4a6886455230e4f26697c12b..1cccb2f11e9a133d6746ec507699a4f9bc229271 100644 (file)
@@ -8,6 +8,25 @@
 ## misc utilities
 ###############################
 
+sub prepare_text {
+  my $t = $_[0];
+  chomp $t;
+  $t = encode_entities($t);
+  $t =~ s/^\s//;
+  $t =~ s/^\n//;
+  $t =~ s/\t//;
+  return $t;
+}
+
+# a sorting directive for fields and registers
+sub by_name {
+  my $a_name = $a->findvalue("./\@name");
+  my $b_name = $b->findvalue("./\@name");
+
+  return $a_name cmp $b_name;
+}
+
+
 sub printHash {
   my $hashref = $_[0];
   for my $element ( keys %{$hashref} ) {
index aa52e467803328212374e1f82cbcd2c66a77888e..5c1a37ff8c63bab41e7f579220cf2a4b07667879 100755 (executable)
@@ -4,7 +4,8 @@ print "Content-type: text/html\n\n";
 # TODO
 
 
-
+# make jtageditor callable with config file name as CGI
+# argument, so editor opens specified config file
 
 
 # what happens when files are not writable?
@@ -523,23 +524,8 @@ EOF
 ###############################
 
 
-sub prepare_text {
-  my $t = $_[0];
-  chomp $t;
-  $t = encode_entities($t);
-  $t =~ s/^\s//;
-  $t =~ s/^\n//;
-  $t =~ s/\t//;
-  return $t;
-}
 
-# a sorting directive for fields and registers
-sub by_name {
-  my $a_name = $a->findvalue("./\@name");
-  my $b_name = $b->findvalue("./\@name");
 
-  return $a_name cmp $b_name;
-}
 
 
 
diff --git a/tools/testgui.js b/tools/testgui.js
new file mode 100644 (file)
index 0000000..e69de29
index 84417995e82255260f7878db2ab0d78c3ade116b..c71f6f82f1535dc17e50e8543e21633a669b3f12 100755 (executable)
@@ -9,20 +9,107 @@ use warnings;
 use XML::LibXML;
 use POSIX;
 use CGI ':standard';
-use Cwd;
 use CGI::Carp qw(fatalsToBrowser);
 use HTML::Entities;
 require Common;
 require xmlOperations;
 
-my $here = getcwd();
+
+##### preliminary hardcoded stuff:
+
+our $setupDir = '../setup';
+our $confDir = '../config';
+our $specDir = '../specs';
+
+my $setupFileName = "testsetup.xml";
+my $setupFile = $setupDir.$setupFileName;
+
+# the file that tells me what fields should be printed in the quick edit area
+# for each sensor
+my $quickEditMaskFileName = "quickEditMask.xml";
+my $quickEditMaskFile = $confDir."/".$quickEditMaskFileName;
+
+
+#### globals:
+
+my $quickEditMaskTree;
+
+
+#######################
 
 my $q = CGI->new;
 
+
+
+unless($q->param()) {
+  #if called without arguments, 
+  init_html();
+} else {
+  print header;
+  print start_html(
+  -title=>'testgui_debug',
+  -style=>{'src'=>'../layout/styles.css'},
+  -script=>{ -type => 'text/javascript',
+  -src => './testgui.js'},
+  );
+  #process the arguments
+  report_param();
+  
+}
+  
+  
+  
+  
+  
+  
+  
+  
+  
+##################################
+####    Subs 
+##################################
+  
+  
+sub parse_quickEditMaskFile {
+  my $parser       = XML::LibXML->new();
+  unless( -e $quickEditMaskFile) { 
+    die "quickEditMaskFile $quickEditMaskFile does not exist!\n";
+  }
+  $quickEditMaskTree = $parser->parse_file($quickEditMaskFile);
+}
+
+sub print_quickEditArea {
+
+  unless(defined($quickEditMaskTree)) {
+    parse_quickEditMaskFile();
+  }
+  
+  print "<table>";
+  my @fields = $quickEditMaskTree->findnodes("/MAPS/register/field");
+  for my $field (@fields) {
+    print "<tr><td>";
+    print $field->findvalue("./\@name");
+    print "</td></tr>";
+    
+  
+  }
+  print "</table>";
+  print "print_registers();",br;
+  parseConfigAndSpec("0.xml");
+  integrateAncestry();
+  print_registers(getConfigFile());
+
+
+}
+
+sub init_html{
+
 print header;
 print start_html(
 -title=>'testgui',
--style=>{'src'=>'../layout/styles.css'}
+-style=>[{'src'=>'../layout/styles.css'},
+{'src'=>'../layout/jtageditor.css'}
+]
 );
 
 print h2("testgui");
@@ -38,4 +125,235 @@ print "</table>";
 
 print "</div>";
 
+
+print "<div id='quickEditArea'>";
+print_quickEditArea();
+print "</div>";
 print end_html;
+
+}
+
+
+
+
+
+
+
+sub report_param {
+  print br,br;
+  print "action ".$q->param('action')." executed with following parameters:",br;
+  my @params = $q->param();
+  print "<table>";
+  for (@params) {
+    print "<tr><td>";
+    print escapeHTML($_);
+    print "</td><td>=</td><td>";
+    print escapeHTML($q->param($_));
+    print "</td>";
+  
+  }
+  print "</table>";
+
+}
+
+
+#### html output subs ###########
+sub print_registers {
+
+  my $configFile = getConfigFile();
+  my $specFile = getSpecFile();
+  my $configFileName = getConfigFileName();
+  my $specFileName = getSpecFileName();
+  my $configTree = getConfigTree();
+  my $specTree = getSpecTree();
+  
+  my $xmlfile = $_[0];
+  my $xmltree;
+  if ( $xmlfile eq $configFile ) {
+    $xmltree = $configTree;
+  }
+  elsif ( $xmlfile eq $specFile ) {
+    $xmltree = $specTree;
+  }
+  else {
+    die "xmlfile given to sub print_registers is unknown";
+  }
+  
+  my @registers = sort by_name $xmltree->findnodes("/MAPS/register");
+  print "<table class=\"registers\"";
+  if ( $xmlfile eq $configFile ) {
+    print "id='configFileRegisters'";
+  }
+  print ">";
+  
+  for my $register (@registers) {
+  
+
+    my $registerName  = $register->findvalue("./\@name");
+    
+    # if register not in the mask file, don't print!
+    unless( $quickEditMaskTree->findnodes("/MAPS/register[\@name='".
+    $registerName."']")) {
+      next;
+    }
+    
+    my $registerId    = $register->findvalue("./\@id");
+    my $registerSize  = $register->findvalue("./\@size");
+    my $registerDescr = prepare_text(
+      $specTree->findvalue(
+        "/MAPS/register[\@name='" . $registerName . "']/description"
+        )
+        || "n/a"
+    );
+
+    my $flistid = $xmlfile . "//" . $registerName;
+
+    print "<tr>";
+
+    print <<EOF;
+<td onClick='toggleVis("$flistid",this)' class='regheader'>&nbsp;+&nbsp;</td>
+EOF
+    print "<td title=\"$registerDescr\">$registerName</td>";
+
+    #print "<td>$registerId</td>";
+
+    if ( $xmlfile eq $configFile ) {  # we are printing the Specifications Tree
+      print <<EOF;
+<td class='button_move' onclick='deleteSettings("$registerName","");'>&nbsp;X&nbsp;</td>
+EOF
+    }
+    if ( $xmlfile eq $specFile ) {    # we are printing the Settings Tree
+
+      print <<EOF;
+<td class='button_move' onclick='copyDefaultRegister("$registerName");'>&nbsp;&rarr;&nbsp;</td>
+EOF
+    }
+
+    print "</tr>";
+
+    #print "<tr>";
+
+    print '<tr id="' . $flistid . '" background=dea>';
+    print '<td></td>';
+    print '<td  class="fieldcontainer">';
+    print_fields( $xmlfile, $register );
+    print "<td>";
+    print "</tr>";
+  }
+  print "</table>";
+}
+
+
+sub print_fields {
+
+  my $configFile = getConfigFile();
+  my $specFile = getSpecFile();
+  my $configFileName = getConfigFileName();
+  my $specFileName = getSpecFileName();
+  my $configTree = getConfigTree();
+  my $specTree = getSpecTree();
+
+  my $register     = $_[1];
+  my $xmlfile      = $_[0];
+  my $registerName = $register->findvalue("./\@name");
+  my @fields       = sort by_name $register->findnodes("./field");
+  print "<table class=\"fields\">";
+  for my $field (@fields) {
+  
+    my $fieldName      = $field->findvalue("./\@name");
+    
+    # if field not in the mask file, don't print!
+    unless( $quickEditMaskTree->findnodes("/MAPS/register[\@name='".
+    $registerName."']/field[\@name='".$fieldName."']")) {
+      next;
+    }
+    
+    my $isHeritageFrom = $field->findvalue("./\@isHeritageFrom") || "";
+    my $readOnlyFlag   = 0;
+    my $fieldValue     = $field->findvalue("./\@value");
+    my $fieldSize      =
+      $specTree->findvalue( "/MAPS/register[\@name='"
+        . $registerName
+        . "']/field[\@name='"
+        . $fieldName
+        . "']/\@size" )
+      || "n/a";
+    my $fieldDescr = prepare_text(
+      $specTree->findvalue(
+            "/MAPS/register[\@name='"
+          . $registerName
+          . "']/field[\@name='"
+          . $fieldName
+          . "']/description"
+        )
+        || "n/a"
+    );
+
+    my $maxFieldVal = 2**$fieldSize;
+    my $sizeInfo    =
+      sprintf(
+      "Field contains %d bits, possible values: 0-%d (0x0-0x%x)\n\n",
+      $fieldSize, $maxFieldVal, $maxFieldVal );
+
+    $fieldDescr = $sizeInfo . $fieldDescr;
+
+    unless ( $isHeritageFrom eq "" ) {
+      $fieldDescr =
+        "Field was inherited from $isHeritageFrom\n\n" . $fieldDescr;
+    }
+
+    my $fieldId = $xmlfile . "//" . $registerName . "/" . $fieldName;
+    if ( $fieldValue eq "" ) {
+      $fieldValue   = $field->findvalue("./\@defaultValue");
+      $readOnlyFlag = 1;
+    }
+
+    print "<tr class='fileLevel" . getFileLevel($isHeritageFrom) . "'>";
+    print "<td width=120 title=\"$fieldDescr\"";
+    print ">$fieldName</td>";
+    print "<td> &nbsp;=&nbsp;</td>";
+    if ($readOnlyFlag) {
+      print <<EOF;
+    <td width=120  align='right'>$fieldValue</td>
+EOF
+    }
+    else {
+      print <<EOF;
+<td align='right'>
+<input type='text' align='right' value='$fieldValue' onchange='saveSettings("$registerName","$fieldName",this.value)'  >
+</td>
+EOF
+
+    }
+
+    print '</td>';
+    if ( $xmlfile eq $specFile ) { # we are printing the Specifications tree
+      print <<EOF;
+<td class='button_move' onclick='saveSettings("$registerName","$fieldName","$fieldValue");'>&nbsp;&rarr;&nbsp;</td>
+EOF
+    }
+    if ( $xmlfile eq $configFile ) {    # we are printing the Settings Tree
+
+      if ( $isHeritageFrom eq "" )
+      {    # these are actual settings, not inherited!
+        print <<EOF;
+<td class='button_move' onclick='deleteSettings("$registerName","$fieldName");'>&nbsp;X&nbsp;</td>
+EOF
+      }
+      else {
+        print "<td class='button_move_deac'>&nbsp;X&nbsp;</td>";
+      }
+    }
+    print "</tr>";
+    if (   ( any2dec($fieldValue) < 0 )
+      or ( any2dec($fieldValue) > $maxFieldVal ) )
+    {
+      print
+"<tr class='fieldError'><td colspan = 4 align='center'>!!!Above value not in allowed range!!!</td></tr>"
+        ;    # just debug
+    }
+  }
+  print "</table>";
+
+}
+
index d585caea557b18b932365f6ebd3a81842577d7ad..dc2c4f847adc78f280d384afa49655e5560f8d6e 100755 (executable)
@@ -60,37 +60,43 @@ if ( defined $q->param('action') ) {
     parseConfigFile( $q->param('configFile') );
     save( $q->param('register'), $q->param('field'), $q->param('value') );
     writeConfigFile();
-    report_and_quit();
+    report_param();
+      exit;
   }
   if ( $q->param('action') eq 'delete' ) {
     parseConfigFile( $q->param('configFile') );
     del( $q->param('register'), $q->param('field') );
     writeConfigFile();
-    report_and_quit();
+    report_param();
+      exit;
   }
   if ( $q->param('action') eq 'copyDefaultRegister' ) {
     parseConfigAndSpec( $q->param('configFile') );
     del( $q->param('register'), "" ); # delete existing register from setfile
     copyDefaultRegister( $q->param('register') );
     writeConfigFile();
-    report_and_quit();
+    report_param();
+      exit;
   }
   if ( $q->param('action') eq 'createFile' ) {
     createConfigFile( $q->param('configFile'), $q->param('specFile') );
     writeConfigFile();
-    report_and_quit();
+    report_param();
+      exit;
   }
 
   if ( $q->param('action') eq 'deleteFile' ) {
     deleteFile( $q->param('configFile') );
-    report_and_quit();
+    report_param();
+      exit;
   }
 
   if ( $q->param('action') eq 'changeAncestor' ) {
     parseConfigFile( $q->param('configFile') );
     changeAncestor( $q->param('newAncestor') );
     writeConfigFile();
-    report_and_quit();
+    report_param();
+      exit;
   }
 
 }
@@ -100,7 +106,7 @@ if ( defined $q->param('action') ) {
 
 print end_html;
 
-sub report_and_quit {
+sub report_param {
   print br,br;
   print "action ".$q->param('action')." executed with following parameters:",br;
   my @params = $q->param();
@@ -114,5 +120,5 @@ sub report_and_quit {
   
   }
   print "</table>";
-  exit;
+
 }