From 9ee365986ebe99353cb2a319793d12e400843b61 Mon Sep 17 00:00:00 2001 From: hadaq Date: Tue, 27 Aug 2024 11:52:24 +0200 Subject: [PATCH] add power board addressing by plane/sector/board, switch full chamber --- scripts/mdc_voltage.pl | 89 +++++++++++++++++++++++++++++++++++------- 1 file changed, 74 insertions(+), 15 deletions(-) diff --git a/scripts/mdc_voltage.pl b/scripts/mdc_voltage.pl index f7d2496..0ccc7f9 100755 --- a/scripts/mdc_voltage.pl +++ b/scripts/mdc_voltage.pl @@ -10,6 +10,8 @@ use MDCPower; my $help; my $board; +my $sector; +my $plane; my $channel; my $setting; my $write; @@ -17,12 +19,16 @@ my $load; my $relative; my $on; my $off; +my $fullchamber; Getopt::Long::Configure(qw(gnu_getopt)); GetOptions( 'help|h' => \$help, 'board|b=s' => \$board, + 'sector|s=i' => \$sector, + 'plane|p=i' => \$plane, 'channel|c=i' => \$channel, + 'chamber' => \$chamber, 'value|v=i' => \$setting, 'relative|r=i'=> \$relative, 'write|w' => \$write, @@ -36,44 +42,54 @@ if($help) { print < 0x8fff)) { - die "Wrong board address (8e00 - 8fff)\n"; +$board = hex($board) if defined $board && $board =~ /^0x/; + +if(defined $sector && defined $plane) { + if($sector < 0 || $sector > 5) { + die "Wrong sector number \n"; + } + if($plane < 0 || $plane > 3) { + die "Wrong plane number \n"; + } + if(!defined $board || $board < 0 || $board > 15 || ($board > 13 && $plane == 0)) { + die "Wrong board number \n" if !$chamber; + + $board = 0; + } + $board = MDC::get_address($plane,$sector,$board // 0,5); + } +else { + if(defined $board && ($board < 0x8e00 || $board > 0x8fff)) { + die "Wrong board address (8e00 - 8fff)\n"; + } + $plane = 5; + $plane = 0 if ($board < 0x8e60); } if(defined $channel && ($channel < 0 || $channel > 1)) { @@ -98,11 +133,35 @@ if(defined $relative && ($relative < -7 || $relative > 7)) { die "Wrong relative number (-7-7)\n"; } + #Switch boards on/off if((defined $on || defined $off) && defined $board) { - if(defined $on && defined $off) {$on = 2;} - my $ret = MDCPower::power_switch($board,$on//0); - die "Board not found.\n" if $ret == -1; + + if($chamber) { + $board = $board & 0xfff0; + if ($off) { + foreach my $br (0..15) { + my $ret = MDCPower::power_switch($board+$br,0); + die "Board not found.\n" if $ret == -1; + last if $br==13 && $plane == 0; + } + } + if($on && $off) { + sleep 1; + } + if ($on) { + foreach my $br (0..15) { + my $ret = MDCPower::power_switch($board+$br,1); + die "Board not found.\n" if $ret == -1; + last if $br==13 && $plane == 0; + } + } + } + else { + if(defined $on && defined $off) {$on = 2;} + my $ret = MDCPower::power_switch($board,$on//0); + die "Board not found.\n" if $ret == -1; + } } #Load all settings -- 2.43.0