]> jspc29.x-matter.uni-frankfurt.de Git - daqtools.git/commitdiff
added a save and restore function, mt
authorMichael Traxler <M.Traxler@gsi.de>
Mon, 1 Mar 2021 22:16:31 +0000 (23:16 +0100)
committerMichael Traxler <M.Traxler@gsi.de>
Mon, 1 Mar 2021 22:16:31 +0000 (23:16 +0100)
users/gsi_ee_trb84/trbcmd_save_restore [new file with mode: 0755]

diff --git a/users/gsi_ee_trb84/trbcmd_save_restore b/users/gsi_ee_trb84/trbcmd_save_restore
new file mode 100755 (executable)
index 0000000..0d16e5c
--- /dev/null
@@ -0,0 +1,96 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+use HADES::TrbNet;
+#use Data::Dumper::Concise;
+use Data::Dumper;
+use DBM::Deep;
+#use IO::All;
+#my $db = io $fn;
+use English;
+
+my $address = 0x16f7;
+my @registers = ();
+
+my $fn = "/tmp/.trbnet_save_regs.db";
+my $db = DBM::Deep->new(file => $fn, locking => 1, autoflush => 1) || die "could not open file: $fn";
+
+trb_init_ports() or die trb_strerror();
+
+#print Dumper $PROGRAM_NAME;
+
+$address = shift @ARGV;
+@registers = @ARGV;
+
+usage() unless($address);
+usage() unless(@registers);
+
+$address = hex($address) if($address=~/^0x/);
+
+
+if ($PROGRAM_NAME=~/save/) {
+  save_regs(@registers);
+}
+else {
+  restore_regs(@registers);
+}
+
+sub save_regs {
+  my @regs = @_;
+
+  my $rh_res;
+  foreach my $cur_reg (@regs) {
+
+    $cur_reg = hex($cur_reg) if($cur_reg=~/^0x/);
+    #print Dumper $cur_reg;
+    $rh_res = trb_register_read($address, $cur_reg);
+    #print Dumper $rh_res;
+    if(!defined $rh_res) {
+      my $res = trb_strerror();
+      print "error output: $res\n";
+      exit();
+    }
+    else {
+      my $val = $rh_res->{$address};
+      #printf("0x%08x\n", $val);
+      printf "read: address: 0x%x, register: 0x%x value: 0x%x\n", $address, $cur_reg, $val;
+      $db->{address}->{$cur_reg} = $val;
+    }
+  }
+
+}
+
+sub usage {
+  print "usage:
+  trbcmd<save|restore> <address> <list of registers>\n";
+
+  exit;
+}
+
+sub restore_regs {
+  my @regs = @_;
+
+  my $rh_res;
+  foreach my $cur_reg (@regs) {
+
+    $cur_reg = hex($cur_reg) if($cur_reg=~/^0x/);
+    my $val =  $db->{address}->{$cur_reg};
+    unless (defined $val) {
+      printf "register 0x%x is not stored, so skipping.\n", $cur_reg;
+      next;
+    }
+    #print Dumper $cur_reg;
+    $rh_res = trb_register_write($address, $cur_reg, $val);
+    printf "wrote: address: 0x%x, register: 0x%x value: 0x%x\n", $address, $cur_reg, $val;
+    #print Dumper $rh_res;
+    if(!defined $rh_res) {
+      my $res = trb_strerror();
+      print "error output: $res\n";
+      exit();
+    }
+  }
+
+}
+
+