From 0efc5a11a75941e7309e0da922e384de4b75fa0b Mon Sep 17 00:00:00 2001 From: Michael Traxler Date: Mon, 1 Mar 2021 23:17:38 +0100 Subject: [PATCH] added a save and restore function, mt --- tools/trbcmd_save_restore | 96 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100755 tools/trbcmd_save_restore diff --git a/tools/trbcmd_save_restore b/tools/trbcmd_save_restore new file mode 100755 index 0000000..0d16e5c --- /dev/null +++ b/tools/trbcmd_save_restore @@ -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
\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(); + } + } + +} + + -- 2.43.0