From 5f4a32240c8afe492a163575cd5b8703eac93984 Mon Sep 17 00:00:00 2001 From: Maps Date: Thu, 12 Dec 2024 11:30:38 +0100 Subject: [PATCH] worked on cli --- scripts/cli/mimosis | 1262 +++++++++++++++++++++++++++---------------- 1 file changed, 805 insertions(+), 457 deletions(-) diff --git a/scripts/cli/mimosis b/scripts/cli/mimosis index 9931d63..5d84638 100755 --- a/scripts/cli/mimosis +++ b/scripts/cli/mimosis @@ -2,587 +2,935 @@ use Getopt::Long::Subcommand; use HADES::TrbNet; -use lib '/d/jspc37/mimosis/scripts/'; +# use ExtUtils::testlib; +# use lib '/d/jspc37/mimosis/scripts/modules/Mimosis/blib/lib'; +# use lib '/d/jspc37/mimosis/scripts'; use Mimosis; use Time::HiRes qw(usleep sleep); use Data::Dump qw(dump); use File::Copy; -$SIG{INT} = sub { - Mimosis::kill_proc_by_pid_file("/tmp/hldprint-pid"); - die "\nAbort.\n" -}; - - - -my %dacs = ( - IBIAS => 0x0040, - ITHR => 0x0041, - IDB => 0x0042, - VRESET => 0x0043, - VPL => 0x0044, - VPH => 0x0045, - VPH_FINE => 0x0046, - VCASP => 0x0047, - VCASNA => 0x0048, - VCASNB => 0x0049, - VCASNC => 0x004a, - VCASND => 0x004b, - VCASN2 => 0x004c, - VCLIP => 0x004d, - IBUFBIAS => 0x004e - ); + + +sub dos_valid { + my $dos = $_[0]; + + return + $dos eq 'jspc29:109' || + $dos eq 'jspc29:150' || + $dos eq 'jspc29:7'; +} + +my $dos = $ENV{'DAQOPSERVER'}; + +if ( !dos_valid($dos) ) { + + print "\nDAQOPSERVER not defined or wrong value!!\n"; + + do { + print("Which setup?\n"); + print("1 Lab317\n"); + print("2 Probestation\n"); + print("3 Lab318\n"); + print("Choose [1,2,3]: "); + + my $choice = ; + chomp $choice; + + if( $choice ne '2' and + $choice ne '1' and + $choice ne '3' ) { + print("Not a valid input.\n"); + } elsif( $choice eq '1' ) { + $dos = 'jspc29:150'; + } elsif( $choice eq '2' ) { + $dos = 'jspc29:109'; + } elsif( $choice eq '3' ) { + $dos = 'jspc29:7'; + } + } while !dos_valid($dos); + + $ENV{'DAQOPSERVER'} = $dos; + + do "mimosis " . join( " ", @ARGV ); +} + + + + +sub help_global { + my $message = <<'END_MESSAGE'; + =+- =*= + +*==: :##=- + -::::-:. .-:::=:. =+@*. .+@+- .-::::::::--:. + .= .*-. .=. :#=. .*%- .:-----------=%%=----*+. .:--. + .:- .*-..=: =*:..:%%==-::::::::::-#%-::==*- -----: ==.. + .....=. :*--: ++-==+#+::::::::::::+#*==-.:- +#+--==++. :*:.. + .......+ - :#= .- .-=+-:::--:::::::::::=*#-....= :%+:.....:=: -*:.. + ......:- .%+ . .#%+=--=*====##==========#%=....=- *#-.......:+ #=... + .......=. =#+= :#*=+ *+:..*@#========*@#======+*+-+#=:........= +*:.. + .......= **--= :#*-.-- :#+==-#%=::::::-%%-::-=+-. .#*:.........+ **:.. + .....:= :%+:.-= :#*-...+::-==-:::-=-::::::-=--==-=- *#-.........-- :%+.. + ...-: =#-...-+#*-..:=*#+===+=====++=====++=-...= =%+:........-- *#-. + .= #*:....:-:......:+ :#-..:#%:..:%%:....=. :#*=--------:. .##=. + .= :%=. . .-: ++:. -%*..+@= :- :+#+-. + :+:::+#-. .=:::-#-. +@--%*. .+-::::::::::::::--=*#*=:. + :++++=. .-++++-. .%%%%: :=+++++++++++++++==-:. + =@@+ + ##. + +usage: mimosis [GLOBAL OPTIONS] [COMMAND OPTIONS] + +GLOBAL OPTIONS are: + -f, --fpga=FPGA -> Hex address of the FPGA. Defaults to 0xa000. + -s, --sleepval1=VAL -> Execute I2C commands with a pause of NUM microseconds in between. + -a, --singleaccess -> Select single access mode. + -c, --chipid=CHIPID -> Use ChIPID to address sensor. + -u, --uart -> Use UART backend in TRBNet. + -i, --ikf -> Use settings for IKF proxy. + -m, --mbs -> Set stream link for Go4analysis, like mbss://localhost:36789 + -d, --i2cspeed=VAL -> Use VAL as I2C speed (default: 30). + -p, --printall -> Print all informations possible. + -h, --help -> Print this or specific help. + + are: + reg Write/Read a register. + instr Send an instruction. + dacscan Make a DAC scan. + scurves Make a S-Curve scan. + mask Mask pixels. + pulse Pulse pixles. + load Write registers from configuration file. + adc + vnc Open a vncviewer with preconfigured setup. + +For every a short description is accessible with the -h and --help options. +END_MESSAGE + print $message; + exit 0; +} + + + + +sub help_load { + my $message = <<'END_MESSAGE'; + +usage: mimosis [GLOBAL OPTIONS] load [COMMAND OPTIONS] PATH + +GLOBAL OPTIONS are: + -f, --fpga=FPGA -> Hex address of the FPGA. Defaults to 0xa000. + -s, --sleepval1=VAL -> Execute I2C commands with a pause of NUM microseconds in between. + -a, --singleaccess -> Select single access mode. + -c, --chipid=CHIPID -> Use ChIPID to address sensor. + -u, --uart -> Use UART backend in TRBNet. + -i, --ikf -> Use settings for IKF proxy. + -m, --mbs -> Set stream link for Go4analysis, like mbss://localhost:36789 + -d, --i2cspeed=VAL -> Use VAL as I2C speed (default: 30). + -p, --printall -> Print all informations possible. + -h, --help -> Print this or specific help. + +COMMAND OPTIONS are: + -w, --printwrong -> Print all settings, that were not loaded to mimosis correctly stdout. + +EXAMPLES: +# Load configuration given by the file in conf/CONF_allregister.pl. +# Print all values, that were not loaded correctly. +mimosis load --printwrong conf/CONF_allregisters.pl + +END_MESSAGE + + print $message; + exit 0; +} + + + +sub help_dacscan { + my $message = <<'END_MESSAGE'; + +usage: mimosis [GLOBAL OPTIONS] dacscan [DACS] + +GLOBAL OPTIONS are: + -f, --fpga=FPGA -> Hex address of the FPGA. Defaults to 0xa000. + -s, --sleepval1=VAL -> Execute I2C commands with a pause of NUM microseconds in between. + -a, --singleaccess -> Select single access mode. + -c, --chipid=CHIPID -> Use ChIPID to address sensor. + -u, --uart -> Use UART backend in TRBNet. + -i, --ikf -> Use settings for IKF proxy. + -m, --mbs -> Set stream link for Go4analysis, like mbss://localhost:36789 + -d, --i2cspeed=VAL -> Use VAL as I2C speed (default: 30). + -p, --printall -> Print all informations possible. + -h, --help -> Print this or specific help. + + +Scan all dacs or only those, specified by the whitespaces delimited list DACS. + +EXAMPLE: + +# Uses all default values and scans all DACs. +mimosis dacscan + +# Uses settings for IKFv2 Proxy and scans only IBIAS and VPHFINE. +mimosis --ikf dacscan IBIAS VPHFINE + +END_MESSAGE + + print $message; + exit 0; +} + + + +sub help_scurves { + my $message = <<'END_MESSAGE'; + +usage: mimosis [GLOBAL OPTIONS] scurves [COMMAND OPTIONS] + +The data will be priveded in a folder in the current directory with the time started as name. +The data is sorted by the VCASN, if --vcasn is not provided, or by + +GLOBAL OPTIONS are: + -f, --fpga=FPGA -> Hex address of the FPGA. Defaults to 0xa000. + -s, --sleepval1=VAL -> Execute I2C commands with a pause of NUM microseconds in between. + -a, --singleaccess -> Select single access mode. + -c, --chipid=CHIPID -> Use ChIPID to address sensor. + -u, --uart -> Use UART backend in TRBNet. + -i, --ikf -> Use settings for IKF proxy. + -m, --mbs -> Set stream link for Go4analysis, like mbss://localhost:36789 + -d, --i2cspeed=VAL -> Use VAL as I2C speed (default: 30). + -p, --printall -> Print all informations possible. + -h, --help -> Print this or specific help. + +COMMAND OPTIONS are: + --ystart=YSTART -> Start scan in y-direction from YSTART. Default 0. + --ystop=YSTOP -> Scan in y-direction until YSTOP. Default 503. + --ystep=YSTEP -> Scan in y-direction every YSTEP. Default 1. + --yspan=YSPAN -> Scan YSPAN rows at once. + --xstart=XSTART -> Start scan in x-direction form XSTART. Default 0. + --xstop=XSTOP -> Scan in x-direction until XSTOP. Default 1023. + --xstep=XSTEP -> Scan in x-direction every XSTEP. Default 1. + --setstart=SETSTART -> Start VPHFINE-scan at SETSTART. Default 0. + --setstop=SETSTOP -> Scan VPHFINE until SETSTOP. Default 255. + --setstep=SETSTEP -> Scan VPHFINE every SETSTEP. Default 1. + --setcount=SETCOUNT -> Collect data for each VPHFINE setting for SETCOUNT frames. Default 4000. + --vcasnreg=VCASNREG -> Make scurve scans for VCASNREG. Valid values are 'VCASNA', 'VCASNB', 'VCASNC', 'VCASND', 'VCASN2' + --vcasnstart=VCASNSTART -> Start at VCASNSTART. Default 0. + --vcasnstop=VCASNSTOP -> Stop at VCASNSTOP. Default 255. + --vcasnstep=VCASNSTEP -> Make scurve every VCASNSTEP. Default 1. + --modexp=MODEXP -> Pulse every 2**MODEXP frames. Default 3. + --modfound=MODFOUND -> If modulus of the mimosis frame counter, where pulsing is done, is known, set MODFOUND to it. Other wise a search will be done anyway. + --pixpulseAA=PIXPULSEAA -> MSB and LSB of PIXPULSEA_A register. Default 25. + --pixpulseAB=PIXPULSEAB -> MSB and LSB of PIXPULSEA_B register. Default 75. + --pixpulseDA=PIXPULSEDA -> MSB and LSB of PIXPULSED_A register. Default 0. + --pixpulseDB=PIXPULSEDB -> MSB and LSB of PIXPULSED_B register. Default 0. + +EXAMPLES: +# Scan Matrix B from 80 to 130 every 5 settings. +mimosis scurves --yspan 2 --xstart 128 --xstop 511 --vcasnreg 0x49 --vcasnstart 80 --vcasnstop 130 --vcasnstep 5 + +END_MESSAGE + + print $message; + exit 0; +} + + + + + +sub help_mask { + my $message = <<'END_MESSAGE'; + +usage: mimosis [GLOBAL OPTIONS] mask [COMMAND OPTIONS] + +GLOBAL OPTIONS are: + -f, --fpga=FPGA -> Hex address of the FPGA. Defaults to 0xa000. + -s, --sleepval1=VAL -> Execute I2C commands with a pause of NUM microseconds in between. + -a, --singleaccess -> Select single access mode. + -c, --chipid=CHIPID -> Use ChIPID to address sensor. + -u, --uart -> Use UART backend in TRBNet. + -i, --ikf -> Use settings for IKF proxy. + -m, --mbs -> Set stream link for Go4analysis, like mbss://localhost:36789 + -d, --i2cspeed=VAL -> Use VAL as I2C speed (default: 30). + -p, --printall -> Print all informations possible. + -h, --help -> Print this or specific help. + +COMMAND OPTIONS are: + --xstart XSTART -> Start masking in x-diraction from XSTART. Default 0. + --xstop XSTOP -> Mask in x-direction until XSTOP. Default 1023. + --xstep XSTEP -> Mask every XSTEP pixel in x-direction. Default 1. + --ystart YSTART -> Start masking in y-diraction from YSTART. Default 0. + --ystop YSTOP -> Mask in y-direction until YSTOP. Default 503. + --ystep YSTEP -> Mask every YSTEP pixel in y-direction. Default 1. + +EXAMPLES: +# Mask the first 100x100 pixels. +mimosis mask --xstop 100 --ystop 100 + +END_MESSAGE + + print $message; + exit 0; +} + + + +sub help_pulse { + my $message = <<'END_MESSAGE'; + +usage: mimosis [GLOBAL OPTIONS] pulse [COMMAND OPTIONS] + +GLOBAL OPTIONS are: + -f, --fpga=FPGA -> Hex address of the FPGA. Defaults to 0xa000. + -s, --sleepval1=VAL -> Execute I2C commands with a pause of NUM microseconds in between. + -a, --singleaccess -> Select single access mode. + -c, --chipid=CHIPID -> Use ChIPID to address sensor. + -u, --uart -> Use UART backend in TRBNet. + -i, --ikf -> Use settings for IKF proxy. + -m, --mbs -> Set stream link for Go4analysis, like mbss://localhost:36789 + -d, --i2cspeed=VAL -> Use VAL as I2C speed (default: 30). + -p, --printall -> Print all informations possible. + -h, --help -> Print this or specific help. + +COMMAND OPTIONS are: + --xstart XSTART -> Start pulsing in x-diraction from XSTART. Default 0. + --xstop XSTOP -> Pulse in x-direction until XSTOP. Default 1023. + --xstep XSTEP -> Pulse every XSTEP pixel in x-direction. Default 1. + --ystart YSTART -> Start pulsing in y-diraction from YSTART. Default 0. + --ystop YSTOP -> Pulse in y-direction until YSTOP. Default 503. + --ystep YSTEP -> Pulse every YSTEP pixel in y-direction. Default 1. + --modexp=MODEXP -> Pulse every 2**MODEXP frames. Default 3. + --pixpulseAA=PIXPULSEAA -> MSB and LSB of PIXPULSEA_A register. Default 25. + --pixpulseAB=PIXPULSEAB -> MSB and LSB of PIXPULSEA_B register. Default 75. + --pixpulseDA=PIXPULSEDA -> MSB and LSB of PIXPULSED_A register. Default 0. + --pixpulseDB=PIXPULSEDB -> MSB and LSB of PIXPULSED_B register. Default 0. + +EXAMPLES: +# Pulse 4 lines in Matrix A. +mimosis pulse --ystart 100 --ystop 103 --xstop 127 + +END_MESSAGE + + print $message; + exit 0; +} + + +sub help_instr { + my $message = <<'END_MESSAGE'; + +usage: mimosis [GLOBAL OPTIONS] instr INSTR + +GLOBAL OPTIONS are: + -f, --fpga=FPGA -> Hex address of the FPGA. Defaults to 0xa000. + -s, --sleepval1=VAL -> Execute I2C commands with a pause of NUM microseconds in between. + -a, --singleaccess -> Select single access mode. + -c, --chipid=CHIPID -> Use ChIPID to address sensor. + -u, --uart -> Use UART backend in TRBNet. + -i, --ikf -> Use settings for IKF proxy. + -m, --mbs -> Set stream link for Go4analysis, like mbss://localhost:36789 + -d, --i2cspeed=VAL -> Use VAL as I2C speed (default: 30). + -p, --printall -> Print all informations possible. + -h, --help -> Print this or specific help. + +EXAMPLES: +# Set global reset instruction +mimosis instr 0xe0 + +END_MESSAGE + + print $message; + exit 0; +} + + + +sub help_reg { + my $message = <<'END_MESSAGE'; + +usage: mimosis [GLOBAL OPTIONS] reg REGISTER VALUE + +GLOBAL OPTIONS are: + -f, --fpga=FPGA -> Hex address of the FPGA. Defaults to 0xa000. + -s, --sleepval1=VAL -> Execute I2C commands with a pause of NUM microseconds in between. + -a, --singleaccess -> Select single access mode. + -c, --chipid=CHIPID -> Use ChIPID to address sensor. + -u, --uart -> Use UART backend in TRBNet. + -i, --ikf -> Use settings for IKF proxy. + -m, --mbs -> Set stream link for Go4analysis, like mbss://localhost:36789 + -d, --i2cspeed=VAL -> Use VAL as I2C speed (default: 30). + -p, --printall -> Print all informations possible. + -h, --help -> Print this or specific help. + +EXAMPLES: +# Set RUNMODE register to 0x40 +mimosis reg 0x20 0x40 + +# Read RUNMODE register +mimosis reg 0x20 + +END_MESSAGE + + print $message; + exit 0; +} + + +sub help_adc { + my $message = <<'END_MESSAGE'; + +usage: mimosis adc + +END_MESSAGE + + print $message; + exit 0; +} + +sub help_vnc { + my $message = <<'END_MESSAGE'; + +usage: mimosis vnc + +END_MESSAGE + + print $message; + exit 0; +} + + #global -my ( $fpga, $a, $slow, $chipid, $uart); +my ( $fpga, + $sa, + $sleepVal1, + $chipid, + $uart, + $i2cSpeed, + $printAll, + $ikf, + $mbsStream, + ); + #load -my ( $printall_load, $printwrong_load ); +my ( $printWrongLoad ); -#dacscan -my ( $ikf, $name, $imagefileonly, $cleanup_dacscan, $printall_dacscan ); +my ( $startDac, + $stopDac, + $stepDac, + $nameDac, + ); #scurves -my ( $pulseOnlySc, $regionSc, $xSc, $ySc, $addSc, $resetSc, - $yStaSc, $yEndSc, $yStepSc, - $xStaSc, $xEndSc, - $setStaSc, $setEndSc, - $setStepSc, $vcasnSc, $vcasnStaSc, $vcasnEndSc, - $vcasnStepSc, $setCntSc, $yTraSc, $printSetSc, $printDacSc, - $printRowSc, $printAllSc, $analogAlimASc, - $analogAlimBSc, $analogDlimASc, $analogDlimBSc, $modpulseSc ); +my ( + $ystartSc, + $ystopSc, + $ystepSc, + $yspanSc, + $xstartSc, + $xstopSc, + $xstepSc, + $setstartSc, + $setstopSc, + $setstepSc, + $setcountSc, + $vcasnregSc, + $vcasnstartSc, + $vcasnstopSc, + $vcasnstepSc, + $modexpSc, + $modfoundSc, + $pixpulseAASc, + $pixpulseABSc, + $pixpulseDASc, + $pixpulseDBSc, + ); #mask -my ( $region_mask, $row_mask, $col_mask, - $maskall_mask, $unmaskall_mask, $hline_mask, - $vline_mask, $square_mask, $printall_mask ); +my ( $xstartMask, + $xstopMask, + $xstepMask, + $ystartMask, + $ystopMask, + $ystepMask ); + +my ( $xstartPulse, + $xstopPulse, + $xstepPulse, + $ystartPulse, + $ystopPulse, + $ystepPulse, + $pixpulseAAPulse, + $pixpulseABPulse, + $pixpulseDAPulse, + $pixpulseDBPulse, + $modexpPulse, + ); + + -#analyse -my ( $vcasnAn, $threadsAn ); my @ARGV_bak = @ARGV; + my $res = GetOptions ( + options => { - 'fpga|f=s' => \$fpga, - 'singleaccess|a' => \$a, - 'slow|s=s' => \$slow, - 'chipid=s' => \$chipid, - 'uart=s' => \$uart, + 'fpga|f=s' => { + handler => sub { Mimosis::set_fpga( hex $_[1]); } + }, + 'singleaccess|a' => { + handler => sub { Mimosis::set_singleAccess(1); } + }, + 'sleepval1|s=s' => { + handler => sub { Mimosis::set_sleepVal1($_[1]); } + }, + 'chipid|c=s' => { + handler => sub { Mimosis::set_chipid($_[1]); }, + }, + 'uart|u=s' => { + handler => sub { + require("/d/jspc37/mimosis/scripts/TrbNetUart.pm"); + TNU_set_device($_[1]); + trb_init_ports() or die trb_strerror(); + Mimosis::make_require($_[1],$TNU_fh); + }, + }, + 'i2cspeed|d=s' => { + handler => sub { + trb_init_ports() or die trb_strerror(); + Mimosis::set_i2cSpeed($_[1]); }, + }, + 'printall|p' => { + handler => sub { Mimosis::set_printall(1); }, + }, + 'ikf|i' => { + handler => sub { Mimosis::set_adcToIkfProxy(); }, + }, + 'mbs|m=s' => { + handler => sub { Mimosis::set_mbsStream($_[1]); }, + }, }, + default_subcommand => 'default', + subcommands => { + default => {}, + load => { options => { - 'printall|p' => \$printall_load, - 'printwrong|w' => \$printwrong_load, - 'help|h' => { - handler => \&Mimosis::help_load, - } + 'printwrong|w' => \$printWrongLoad, + 'help|h' => { handler => \&help_load, } }, }, + dacscan => { options => { - "ikf|i" => \$ikf, - "imagefile-only|m" => \$imagefileonly, - "name|n=s" => \$name, - "cleanup|c" => \$cleanup_dacscan, - 'printall|p' => \$printall_dacscan, + 'start=s' => \$startDac, + 'stop=s' => \$stopDac, + 'step=s' => \$stepDac, + 'name=s' => \$nameDac, 'help|h' => { - handler => \&Mimosis::help_dacscan, + handler => \&help_dacscan, } }, }, + scurves => { options => { - "pulseonly" => \$pulseOnlySc, - "region|r=s" => \$regionSc, - "x=s" => \$xSc, - "y=s" => \$ySc, - "add" => \$addSc, - "reset" => \$resetSc, - "firstrow=s" => \$yStaSc, - "lastrow=s" => \$yEndSc, - "rowdiv=s" => \$yStepSc, - "firstcol=s" => \$xStaSc, - "lastcol=s" => \$xEndSc, - "firstset=s" => \$setStaSc, - "lastset=s" => \$setEndSc, - "setdiv=s" => \$setStepSc, - "setcounts=s" => \$setCntSc, - "firstvcasn=s" => \$vcasnStaSc, - "lastvcasn=s" => \$vcasnEndSc, - "vcasndiv=s" => \$vcasnStepSc, - "vcasn=s" => \$vcasnSc, - "nrows=s" => \$yTraSc, - "printdac" => \$printDacSc, - "printset" => \$printSetSc, - "printrow" => \$printRowSc, - "printall|p" => \$printAllSc, - "analogAlimA=s" => \$analogAlimASc, - "analogAlimB=s" => \$analogAlimBSc, - "analogDlimA=s" => \$analogDlimASc, - "analogDlimB=s" => \$analogDlimBSc, - "modpulse=s" => \$modpulseSc, + 'ystart=s' => \$ystartSc, + 'ystop=s' => \$ystopSc, + 'ystep=s' => \$ystepSc, + 'yspan=s' => \$yspanSc, + 'xstart=s' => \$xstartSc, + 'xstop=s' => \$xstopSc, + 'xstep=s' => \$xstepSc, + 'setstart=s' => \$setstartSc, + 'setstop=s' => \$setstopSc, + 'setstep=s' => \$setstepSc, + 'setcount=s' => \$setcountSc, + 'vcasnreg=s' => \$vcasnregSc, + 'vcasnstart=s' => \$vcasnstartSc, + 'vcasnstop=s' => \$vcasnstopSc, + 'vcasnstep=s' => \$vcasnstepSc, + 'modexp=s' => \$modexpSc, + 'modfound=s' => \$modfoundSc, + 'pixpulseAA=s' => \$pixpulseAASc, + 'pixpulseAB=s' => \$pixpulseABSc, + 'pixpulseDA=s' => \$pixpulseDASc, + 'pixpulseDB=s' => \$pixpulseDBSc, 'help|h' => { - handler => \&Mimosis::help_scurves, + handler => \&help_scurves, } }, }, - analyse => { + + mask => { options => { - "vcasn" => \$vcasnAn, - "threads|t" => \$threadsAn, - 'help|h' => { - handler => \&Mimosis::help_analyse, + "xstart=s" => \$xstartMask, + "xstop=s" => \$xstopMask, + "xstep=s" => \$xstepMask, + "ystart=s" => \$ystartMask, + "ystop=s" => \$ystopMask, + "ystep=s" => \$ystepMask, + 'help|h' => { + handler => \&help_mask, } }, }, - mask => { + + pulse => { options => { - "region|r=s" => \$region_mask, - "row|y=s" => \$row_mask, - "column|x=s" => \$col_mask, - "mask-all" => \$maskall_mask, - "unmask-all" => \$unmaskall_mask, - "mask-all-reg" => \$maskall_mask, - "unmask-all-reg" => \$unmaskall_mask, - "hline" => \$hline_mask, - "vline" => \$vline_mask, - "square" => \$square_mask, - "printall|p" => \$printall_mask, + 'xstart=s' => \$xstartPulse, + 'xstop=s' => \$xstopPulse, + 'xstep=s' => \$xstepPulse, + 'ystart=s' => \$ystartPulse, + 'ystop=s' => \$ystopPulse, + 'ystep=s' => \$ystepPulse, + 'pixpulseaa=s' => \$pixpulseAAPulse, + 'pixpulseab=s' => \$pixpulseABPulse, + 'pixpulseda=s' => \$pixpulseDAPulse, + 'pixpulsedb=s' => \$pixpulseDBPulse, + 'modexp=s' => \$modexpPulse, 'help|h' => { - handler => \&Mimosis::help_mask, + handler => \&help_pulse, } }, }, + + pixel_dump => { + options => { + 'help|h' => { + handler => \&help_pixel_dump, + } + }, + }, + instr => { options => { 'help|h' => { - handler => \&Mimosis::help_instr, + handler => \&help_instr, } }, }, + reg => { options => { 'help|h' => { - handler => \&Mimosis::help_reg, + handler => \&help_reg, + } + }, + }, + + adc => { + options => { + 'help|h' => { + handler => \&help_adc, } }, }, + vnc => { options => { 'help|h' => { - handler => \&Mimosis::help_vnc, + handler => \&help_vnc, } }, }, }, + completion => sub { - my %args = @_; }, ); + die "GetOptions failed!\n" unless $res->{success}; +# if (defined $uart) { +# require("/d/jspc37/mimosis/scripts/TrbNetUart.pm"); +# TNU_set_device($uart); +# trb_init_ports() or die trb_strerror(); +# Mimosis::make_require($uart,$TNU_fh); -if (defined $uart) { - require("/d/jspc37/mimosis/scripts/TrbNetUart.pm"); - TNU_set_device($uart); - trb_init_ports() or die trb_strerror(); - Mimosis::make_require($uart,$TNU_fh); +# } else { +# trb_init_ports() or die trb_strerror(); +# } -} else { - trb_init_ports() or die trb_strerror(); -} +trb_init_ports() or die trb_strerror(); - -if( $res->{subcommand}[0] eq 'default' ) -{ - Mimosis::help_global(); +if( $res->{subcommand}[0] eq 'default' ) { + help_global(); exit; } -my $daqopserver = $ENV{'DAQOPSERVER'}; -if ( !defined $daqopserver || $daqopserver eq '' || ( $daqopserver ne 'jspc29:31' && $daqopserver ne 'jspc29:150' ) ) -{ - print "\nDAQOPSERVER not defined or wrong value.\n"; - print("Which setup?\n"); - print("1 Lab317\n"); - print("2 Probestation\n"); - print("Choose [1,2]: "); - my $choise = ; - chomp $choise; - - if( $choise ne '2' and $choise ne '1' ) - { - print("Not a valid input.\n"); - } - elsif( $choise eq '1' ) - { - $daqopserver = 'jspc29:150'; - } - elsif( $choise eq '2' ) - { - $daqopserver = 'jspc29:31'; - } - $ENV{'DAQOPSERVER'} = $daqopserver; - do "mimosis " . join( " ", @ARGV_bak ); -} - -$fpga = defined($fpga) ? hex $fpga : 0xa000; -$slow = defined($slow) ? $slow : 10000; -$chipid = defined($chipid) ? hex $chipid: 0x1; +if( $res->{subcommand}[0] eq 'load' ) { -Mimosis::set_chipid($chipid); + if( defined $ARGV[-1] && -e $ARGV[-1]) { + Mimosis::mimosis_load_file( + file => $ARGV[-1], + printwrong => $printWrongLoad, + ); -if( $res->{subcommand}[0] eq 'load' ) -{ - if( defined $ARGV[-1] && -e $ARGV[-1]) - { - $file = $ARGV[-1]; - } - else - { - print "No valid file provided.\n"; - exit 1; + } else { + die "No valid file provided.\n"; } - Mimosis::mimosis_load_file( - fpga => $fpga, - file => $file, - printall => $printall_load, - printwrong => $printwrong_load, - slow => $slow, - a => $a - ); -} +} elsif( $res->{subcommand}[0] eq 'dacscan' ) { -elsif( $res->{subcommand}[0] eq 'dacscan' ) -{ Mimosis::mimosis_dacscan( - fpga => $fpga, - slow => $slow, - a => $a, - ikf => $ikf, - name => $name, - cleanup => $cleanup_dacscan, - imagefileonly => $imagefileonly, - printall => $printall_dacscan, + start => $startDac, + stop => $stopDac, + step => $stepDac, + name => $nameDac, + dacs => \@ARGV + ); + +} elsif( $res->{subcommand}[0] eq 'scurves' ) { + + Mimosis::mimosis_scurves ( + ystart => $ystartSc, + ystop => $ystopSc, + ystep => $ystepSc, + yspan => $yspanSc, + + xstart => $xstartSc, + xstop => $xstopSc, + xstep => $xstepSc, + + setstart => $setstartSc, + setstop => $setstopSc, + setstep => $setstepSc, + setcount => $setcountSc, + + vcasnreg => $vcasnregSc, + vcasnstart => $vcasnstartSc, + vcasnstop => $vcasnstopSc, + vcasnstep => $vcasnstepSc, + + pixpulseaa => $pixpulseAASc, + pixpulseab => $pixpulseABSc, + pixpulseda => $pixpulseDASc, + pixpulsedb => $pixpulseDBSc, + + modexp => $modexpSc, + modfound => $modfoundSc, ); -} -elsif( $res->{subcommand}[0] eq 'scurves' ) -{ +} elsif( $res->{subcommand}[0] eq 'pixel_dump' ) { + + die "No instruction provided.\n" + unless defined $ARGV[-1]; + + Mimosis::mimosis_pixel_dump( + Mimosis::get_fpga(), + hex $ARGV[-1] + ); + - my %regCharToStr = ( - A => 'VCASNA', - B => 'VCASNB', - C => 'VCASNC', - D => 'VCASND' +} elsif( $res->{subcommand}[0] eq 'mask' ) { + + Mimosis::mimosis_mask( + xstart => $xstartMask, + xstop => $xstopMask, + xstep => $xstepMask, + ystart => $ystartMask, + ystop => $ystopMask, + ystep => $ystepMask, ); - if( defined $pulseOnlySc ) - { - Mimosis::mimosis_pulse_region( - fpga => $fpga, - slow => $slow, - a => $a, - region => $regionSc, - ySta => $yStaSc, - yEnd => $yEndSc, - yTra => $yTraSc, - xSta => $xStaSc, - xEnd => $xEndSc, - analogAlimA => $analogAlimASc, - analogAlimB => $analogAlimBSc, - analogDlimA => $analogDlimASc, - analogDlimB => $analogDlimBSc, - mod => $modpulseSc, +} elsif( $res->{subcommand}[0] eq 'pulse' ) { + + Mimosis::mimosis_pulse( + xstart => $xstartPulse, + xstop => $xstopPulse, + xstep => $xstepPulse, + ystart => $ystartPulse, + ystop => $ystopPulse, + ystep => $ystepPulse, + pixpulseaa => $pixpulseAAPulse, + pixpulseab => $pixpulseABPulse, + pixpulseda => $pixpulseDAPulse, + pixpulsedb => $pixpulseDBPulse, + modexp => $modexpPulse, ); - exit 0; - } - if( defined $regionSc ) - { - Mimosis::mimosis_scan_region_loop( - fpga => $fpga, - slow => $slow, - a => $a, - region => $regionSc, - vcasnSta => $vcasnStaSc, - vcasnEnd => $vcasnEndSc, - vcasnStep => $vcasnStepSc, - ySta => $yStaSc, - yEnd => $yEndSc, - yTra => $yTraSc, - xSta => $xStaSc, - xEnd => $xEndSc, - setSta => $setStaSc, - setEnd => $setEndSc, - setTra => $setStepSc, - setCnt => $setCntSc, - analogAlimA => $analogAlimASc, - analogAlimB => $analogAlimBSc, - analogDlimA => $analogDlimASc, - analogDlimB => $analogDlimBSc, - mod => $modpulseSc, - ); - - exit 0; - - # my $vcasnStr = $regCharToStr{$regionSc}; - # my $vcasnVal = Mimosis::mimosis_register_read( $fpga, $dacs{$vcasnStr}, $a ); - # $vcasnStaSc = defined $vcasnStaSc ? $vcasnStaSc : $vcasnVal; - # $vcasnEndSc = defined $vcasnEndSc ? $vcasnEndSc : $vcasnStaSc; - # $vcasnStepSc = defined $vcasnStepSc ? $vcasnStepSc : 1; - - # system("/d/jspc37/mimosis/cpp/build/scurve-scan mbss://localhost:36789 &"); - - # for ( my $vcasnSet = $vcasnStaSc; - # $vcasnSet <= $vcasnEndSc; - # $vcasnSet += $vcasnStepSc ) { - # #set vcasn - # Mimosis::mimosis_register_write( $fpga, $dacs{$vcasnStr}, $vcasnSet, $a ); usleep($slow); - - # if( $printDacSc || $printAllSc ) { printf("dac: $vcasnSet\n"); } - - # Mimosis::mimosis_scan_region( - # fpga => $fpga, - # slow => $slow, - # a => $a, - # region => $regionSc, - # ySta => $yStaSc, - # yEnd => $yEndSc, - # yTra => $yTraSc, - # xSta => $xStaSc, - # xEnd => $xEndSc, - # setSta => $setStaSc, - # setEnd => $setEndSc, - # setTra => $setStepSc, - # setCnt => $setCntSc, - # analogAlimA => $analogAlimASc, - # analogAlimB => $analogAlimBSc, - # analogDlimA => $analogDlimASc, - # analogDlimB => $analogDlimBSc, - # mod => $modpulseSc, - # ); - - # Mimosis::send_params_scurve( - # state => "FIT", - # region => $regCharToStr{$regionSc}, - # vcasn => $vcasnSet - # ); - # Mimosis::await_ack(); - # } - - # Mimosis::send_params_scurve( state => "DONE" ); - # Mimosis::await_ack(); - # Mimosis::kill_proc_by_pid_file("/tmp/hldprint-pid"); - # exit 0; - - } elsif (defined $xSc && defined $ySc && defined $vcasnSc) { - - # my $vcasnVal = Mimosis::mimosis_register_read( $fpga, $dacs{$vcasnSc}, $a ); - # $vcasnStaSc = defined $vcasnStaSc ? $vcasnStaSc : $vcasnVal; - # $vcasnEndSc = defined $vcasnEndSc ? $vcasnEndSc : $vcasnStaSc; - # $vcasnStepSc = defined $vcasnStepSc ? $vcasnStepSc : 1; - - # unless($pulseOnlySc) - # { - # system("/d/jspc37/mimosis/cpp/build/scurve-scan mbss://localhost:36789 &"); - # } - - # for ( my $vcasnSet = $vcasnStaSc; - # $vcasnSet <= $vcasnEndSc; - # $vcasnSet += $vcasnStepSc ) { - # #set vcasn - # Mimosis::mimosis_register_write( $fpga, $dacs{$vcasnSc}, $vcasnSet, $a ); usleep($slow); - - # if( $printDacSc || $printAllSc ) { printf("dac: $vcasnSet\n"); } - - # Mimosis::mimosis_scan_pixel( - # fpga => $fpga, - # slow => $slow, - # a => $a, - # x => $xSc, - # y => $ySc, - # pulseonly => $pulseOnlySc, - # firstset => $setStaSc, - # lastset => $setEndSc, - # setdiv => $setStepSc, - # settime => $setCntSc, - # printset => $printSetSc, - # printrow => $printRowSc, - # printall => $printAllSc, - # analogAlimA => $analogAlimASc, - # analogAlimB => $analogAlimBSc, - # analogDlimA => $analogDlimASc, - # analogDlimB => $analogDlimBSc, - # modpulse => $modpulseSc, - # ); - - # unless($pulseOnlySc) - # { - # Mimosis::send_params_scurve("FIT", 0,0,0,0,$vcasnSc,$vcasnSet); - # Mimosis::await_ack(); - # } - # } - - # unless($pulseOnlySc) - # { - # Mimosis::send_params_scurve("DONE", 0,0,0,0,0,0); - # Mimosis::await_ack(); - # Mimosis::kill_proc_by_pid_file("/tmp/hldprint-pid"); - # } - # exit 0; +} elsif( $res->{subcommand}[0] eq 'instr' ) { - } else { + die "No instruction provided.\n" + unless defined $ARGV[-1]; - print "Mimosis::mimosis_scan_region: Must provide --region A|B|C|D or --x X and --y Y.\n"; - exit 1; - } -} + Mimosis::mimosis_instr_write( hex $ARGV[-1] ); + +} elsif( $res->{subcommand}[0] eq 'reg' ) { -elsif( $res->{subcommand}[0] eq 'analyse' ) -{ - open(FH, '<', 'METADATA') or die print "Cannot open METADATA. Is this a vild run dir?\n"; + if( defined $ARGV[-2] ) { - while(){ - print $_; + Mimosis::mimosis_register_write( + hex $ARGV[-2], + hex $ARGV[-1], + ); + + } elsif( defined $ARGV[-1] && + not defined $ARGV[-2] ) { + + printf( "%x\n", + Mimosis::mimosis_register_read( hex $ARGV[-1] )); } - # system("/d/jspc37/mimosis/scripts/pulse/plot-raw.py"); +} elsif( $res->{subcommand}[0] eq 'adc' ) { - exit 0; -} + my $adc_addr = 0x48; + my $adc_wreg = 0x1; + my $adc_rreg = 0x0; + my $adc_data = hex $ARGV[-1]; -elsif( $res->{subcommand}[0] eq 'mask' ) -{ - Mimosis::mimosis_mask( - fpga => $fpga, - region => $region_mask, - row => $row_mask, - col => $col_mask, - maskall => $maskall_mask, - unmaskall => $unmaskall_mask, - hline => $hline_mask, - vline => $vline_mask, - square => $square_mask, - printall => $printall_mask, - ); -} + if( defined $ARGV[-1] ) { -elsif( $res->{subcommand}[0] eq 'instr' ) -{ - if( defined $ARGV[-1] ) - { - Mimosis::mimosis_instr_write( $fpga, hex($ARGV[-1]) ); - } - else - { - print "No instruction provided.\n"; - } - exit 1; -} + printf("Write to ADC: 0x%04x\n", $adc_data); -elsif( $res->{subcommand}[0] eq 'reg' ) -{ - my $reg_reg; - my $data_reg; + Mimosis::adc_i2c_command ( + $adc_addr, + $adc_wreg, + $adc_data, + 0, 0, 1 + ); - if( defined $ARGV[-2] ) - { - $reg_reg = hex $ARGV[-2]; - $data_reg = hex $ARGV[-1]; - Mimosis::mimosis_register_write( $fpga, $reg_reg, $data_reg, $a ); - } - elsif( defined $ARGV[-1] && not defined $ARGV[-2] ) - { - $reg_reg = hex $ARGV[-1]; - printf( "%x\n", Mimosis::mimosis_register_read( $fpga, $reg_reg, $a ) ); + } else { + + my $adcConv = ( 2 * 4096 ) / 2**16; + + # printf( "0x%04x\n", + printf( "%f\n", + Mimosis::adc_i2c_command( + $adc_addr, + $adc_rreg, + 0, + 1,0,1 + )*$adcConv + ); } - exit 1; -} -elsif( $res->{subcommand}[0] eq 'vnc' ) -{ - print("Which setup?\n"); - print("1 Lab317\n"); - print("2 Probestation\n"); - print("Choose [1,2]: "); - my $choise = ; - my $daqopserver; +} elsif( $res->{subcommand}[0] eq 'vnc' ) { + + my $dos; my $display; + my $choice; + + do { + print("Which vnc?\n"); + print("1 Lab317\n"); + print("2 Probestation\n"); + print("3 Lab318\n"); + print("Choose [1,2,3]: "); + + $choice = ; + chomp $choice; + + if( $choice != 2 and + $choice != 1 and + $choice != 3 ) { + + print("Not a valid input.\n"); + + } elsif( $choice == 1 ) { + + $dos = 'jspc29:150'; + $display = ':2'; + + } elsif( $choice == 2 ) { + + $dos = 'jspc29:109'; + $display = ':5'; + + } elsif( $choice == 3 ) { + + $dos = 'jspc29:7'; + $display = ':7'; + } + } while( $choice != 1 and + $choice != 2 and + $choice != 3 ); - if( $choise != 2 and $choise != 1 ) - { - print("Not a valid input.\n"); - } - elsif( $choise == 1 ) - { - $daqopserver = 'jspc29:150'; - $display = ':2'; - } - elsif( $choise == 2 ) - { - $daqopserver = 'jspc29:31'; - $display = ':5'; - } - my $val = `ssh jspc37 'ps aux | grep Xvnc'`; my $yesno; - if( $val =~ /Xvnc $display -auth \/u\/maps\/.Xauthority -desktop jspc37$display/ ) - { - print "kill old vncserver? [y/n]: "; - $yesno = ; - chomp $yesno; - if($yesno != "y" && $yesno != "n") - { - print "Not a valid input.\n"; + my $val = `ssh jspc37 'ps aux | grep Xvnc'`; + + if( $val =~ /Xvnc $display -auth \/u\/maps\/.Xauthority -desktop jspc37$display/ ) { + + do { + print "kill old vncserver? [y/n]: "; + $yesno = ; + chomp $yesno; + + if($yesno ne "y" && + $yesno ne "n") { + + print "Not a valid input.\n"; + } + } while ( $yesno ne "y" && + $yesno ne "n"); + + + if($yesno eq "y") { + + system("ssh jspc37 '/d/salt/bin/vncserver -kill $display'"); + sleep(3); + system("ssh jspc37 '/d/salt/bin/vncserver $display' &"); + sleep(1); + + if ($pid = fork) { + + } else { + + close (STDOUT); + system("vncviewer jspc37$display -shared -passwd ~/.passfile_for_vnc"); + exit 0; + } + + system("ssh jspc37 'DISPLAY=$display DAQOPSERVER=$dos konsole --tabs-from-file /u/maps/.konsole.tabs' &"); + sleep(6); + system("ssh jspc37 'DISPLAY=$display DAQOPSERVER=$dos /d/jspc37/mimosis/scripts/start.sh'"); + + } else { + + if ($pid = fork) { + + } else { + + close (STDOUT); + system("vncviewer jspc37$display -shared -passwd ~/.passfile_for_vnc"); + exit 0; + } } - } - else - { - $yesno = "y"; - } - if($yesno eq "y") - { - system("ssh jspc37 '/d/salt/bin/vncserver -kill $display'"); - sleep(3); + + } else { + system("ssh jspc37 '/d/salt/bin/vncserver $display' &"); sleep(1); - if ($pid = fork) {} - else - { - close (STDOUT); - system("vncviewer jspc37$display -shared -passwd ~/.passfile_for_vnc"); - exit(0); - } - # sleep(1); - # system("ssh jspc37 'firefox -p Lab317 --display=$display' &"); - system("ssh jspc37 'DISPLAY=$display DAQOPSERVER=$daqopserver konsole --tabs-from-file /u/maps/.konsole.tabs' &"); - sleep(10); - system("ssh jspc37 'DISPLAY=$display DAQOPSERVER=$daqopserver /d/jspc37/mimosis/scripts/start.sh'"); - } - else - { - if ($pid = fork) {} - else - { + + if ($pid = fork) { + + } else { + close (STDOUT); system("vncviewer jspc37$display -shared -passwd ~/.passfile_for_vnc"); - exit(0); + exit 0; } + + system("ssh jspc37 'DISPLAY=$display DAQOPSERVER=$dos konsole --tabs-from-file /u/maps/.konsole.tabs' &"); + sleep(6); + system("ssh jspc37 'DISPLAY=$display DAQOPSERVER=$dos /d/jspc37/mimosis/scripts/start.sh'"); } } -- 2.43.0