diff --git a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c index cf64c0b3a..c204a1221 100644 --- a/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/eigerDetectorServer/slsDetectorFunctionList.c @@ -302,8 +302,9 @@ u_int64_t getDetectorMAC() { char output[255]; #ifdef VIRTUAL FILE *sysFile = - popen("ip link show $(ip route show default | grep -v vpn | awk '/default/ {print $5}') | grep link/ether | awk '{print $2}'", - "r"); + popen("ip link show $(ip route show default | grep -v vpn | awk " + "'/default/ {print $5}') | grep link/ether | awk '{print $2}'", + "r"); #else FILE *sysFile = popen("more /sys/class/net/eth0/address", "r"); #endif diff --git a/slsDetectorSoftware/generator/Caller.in.h b/slsDetectorSoftware/generator/Caller.in.h index d03f691c8..f7128620e 100644 --- a/slsDetectorSoftware/generator/Caller.in.h +++ b/slsDetectorSoftware/generator/Caller.in.h @@ -95,7 +95,7 @@ class Caller { BitAddress getBitAddress() const; defs::dacIndex parseDacIndex(int argIndex, bool isCtb); bool parseMV(int argIndex); - defs::dacIndex parsePowerIndex(int argIndex); + defs::powerIndex parsePowerIndex(int argIndex); FunctionMap functions{ {"list", &Caller::list}, diff --git a/slsDetectorSoftware/generator/autocomplete/bash_autocomplete.sh b/slsDetectorSoftware/generator/autocomplete/bash_autocomplete.sh index f54aabe05..67f56fd31 100644 --- a/slsDetectorSoftware/generator/autocomplete/bash_autocomplete.sh +++ b/slsDetectorSoftware/generator/autocomplete/bash_autocomplete.sh @@ -80,7 +80,7 @@ _sd() { local IS_PATH=0 -local SLS_COMMANDS=" acquire activate adcclk adcenable adcenable10g adcindex adcinvert adclist adcname adcphase adcpipeline adcreg adcvpp apulse asamples autocompdisable badchannels blockingtrigger burstmode burstperiod bursts burstsl bustest cdsgain chipversion clearbit clearbusy clientversion clkdiv clkfreq clkphase collectionmode column compdisabletime confadc config configtransceiver counters currentsource dac dacindex daclist dacname dacvalues datastream dbitclk dbitphase dbitpipeline defaultdac defaultpattern define_bit define_reg definelist_bit definelist_reg delay delayl detectorserverversion detsize diodelay dpulse dr drlist dsamples execcommand exptime exptime1 exptime2 exptime3 extrastoragecells extsampling extsamplingsrc extsig fformat filtercells filterresistor findex firmwaretest firmwareversion fliprows flowcontrol10g fmaster fname foverwrite fpath framecounter frames framesl frametime free fwrite gaincaps gainmode gappixels gatedelay gatedelay1 gatedelay2 gatedelay3 gates getbit hardwareversion highvoltage hostname im_a im_b im_c im_d im_io imagetest include initialchecks inj_ch interpolation interruptsubframe kernelversion lastclient led lock master maxadcphaseshift maxclkphaseshift maxdbitphaseshift measuredperiod measuredsubperiod moduleid nextframenumber nmod numinterfaces overflow packageversion parallel parameters partialreset patfname patioctrl patlimits patloop patloop0 patloop1 patloop2 patmask patnloop patnloop0 patnloop1 patnloop2 patsetbit pattern patternstart patwait patwait0 patwait1 patwait2 patwaittime patwaittime0 patwaittime1 patwaittime2 patword pedestalmode period periodl polarity port power powerchip powerindex powerlist powername powervalues programfpga pulse pulsechip pulsenmove pumpprobe quad ratecorr readnrows readout readoutspeed readoutspeedlist rebootcontroller reg resetdacs resetfpga romode row runclk runtime rx_arping rx_clearroi rx_dbitlist rx_dbitoffset rx_dbitreorder rx_discardpolicy rx_fifodepth rx_frameindex rx_framescaught rx_framesperfile rx_hostname rx_jsonaddheader rx_jsonpara rx_lastclient rx_lock rx_missingpackets rx_padding rx_printconfig rx_realudpsocksize rx_roi rx_silent rx_start rx_status rx_stop rx_tcpport rx_threads rx_udpsocksize rx_version rx_zmqfreq rx_zmqhwm rx_zmqip rx_zmqport rx_zmqstartfnum rx_zmqstream samples savepattern scan scanerrmsg selinterface serialnumber setbit settings settingslist settingspath signalindex signallist signalname sleep slowadc slowadcindex slowadclist slowadcname slowadcvalues start status stop stopport storagecell_delay storagecell_start subdeadtime subexptime sync syncclk temp_10ge temp_adc temp_control temp_dcdc temp_event temp_fpga temp_fpgaext temp_fpgafl temp_fpgafr temp_slowadc temp_sodl temp_sodr temp_threshold templist tempvalues tengiga threshold thresholdnotb timing timing_info_decoder timinglist timingsource top transceiverenable trigger triggers triggersl trimbits trimen trimval tsamples txdelay txdelay_frame txdelay_left txdelay_right type udp_cleardst udp_dstip udp_dstip2 udp_dstlist udp_dstmac udp_dstmac2 udp_dstport udp_dstport2 udp_firstdst udp_numdst udp_reconfigure udp_srcip udp_srcip2 udp_srcmac udp_srcmac2 udp_validate update updatedetectorserver updatekernel updatemode user v_limit vchip_comp_adc vchip_comp_fe vchip_cs vchip_opa_1st vchip_opa_fd vchip_ref_comp_fe versions veto vetoalg vetofile vetophoton vetoref vetostream virtual vm_a vm_b vm_c vm_d vm_io zmqhwm zmqip zmqport " +local SLS_COMMANDS=" acquire activate adcclk adcenable adcenable10g adcindex adcinvert adclist adcname adcphase adcpipeline adcreg adcvpp apulse asamples autocompdisable badchannels blockingtrigger burstmode burstperiod bursts burstsl bustest cdsgain chipversion clearbit clearbusy clientversion clkdiv clkfreq clkphase collectionmode column compdisabletime confadc config configtransceiver counters currentsource dac dacindex daclist dacname dacvalues datastream dbitclk dbitphase dbitpipeline defaultdac defaultpattern define_bit define_reg definelist_bit definelist_reg delay delayl detectorserverversion detsize diodelay dpulse dr drlist dsamples execcommand exptime exptime1 exptime2 exptime3 extrastoragecells extsampling extsamplingsrc extsig fformat filtercells filterresistor findex firmwaretest firmwareversion fliprows flowcontrol10g fmaster fname foverwrite fpath framecounter frames framesl frametime free fwrite gaincaps gainmode gappixels gatedelay gatedelay1 gatedelay2 gatedelay3 gates getbit hardwareversion highvoltage hostname im_a im_b im_c im_d im_io imagetest include initialchecks inj_ch interpolation interruptsubframe kernelversion lastclient led lock master maxadcphaseshift maxclkphaseshift maxdbitphaseshift measuredperiod measuredsubperiod moduleid nextframenumber nmod numinterfaces overflow packageversion parallel parameters partialreset patfname patioctrl patlimits patloop patloop0 patloop1 patloop2 patmask patnloop patnloop0 patnloop1 patnloop2 patsetbit pattern patternstart patwait patwait0 patwait1 patwait2 patwaittime patwaittime0 patwaittime1 patwaittime2 patword pedestalmode period periodl polarity port power powerchip powerdac powerindex powerlist powername powervalues programfpga pulse pulsechip pulsenmove pumpprobe quad ratecorr readnrows readout readoutspeed readoutspeedlist rebootcontroller reg resetdacs resetfpga romode row runclk runtime rx_arping rx_clearroi rx_dbitlist rx_dbitoffset rx_dbitreorder rx_discardpolicy rx_fifodepth rx_frameindex rx_framescaught rx_framesperfile rx_hostname rx_jsonaddheader rx_jsonpara rx_lastclient rx_lock rx_missingpackets rx_padding rx_printconfig rx_realudpsocksize rx_roi rx_silent rx_start rx_status rx_stop rx_tcpport rx_threads rx_udpsocksize rx_version rx_zmqfreq rx_zmqhwm rx_zmqip rx_zmqport rx_zmqstartfnum rx_zmqstream samples savepattern scan scanerrmsg selinterface serialnumber setbit settings settingslist settingspath signalindex signallist signalname sleep slowadc slowadcindex slowadclist slowadcname slowadcvalues start status stop stopport storagecell_delay storagecell_start subdeadtime subexptime sync syncclk temp_10ge temp_adc temp_control temp_dcdc temp_event temp_fpga temp_fpgaext temp_fpgafl temp_fpgafr temp_slowadc temp_sodl temp_sodr temp_threshold templist tempvalues tengiga threshold thresholdnotb timing timing_info_decoder timinglist timingsource top transceiverenable trigger triggers triggersl trimbits trimen trimval tsamples txdelay txdelay_frame txdelay_left txdelay_right type udp_cleardst udp_dstip udp_dstip2 udp_dstlist udp_dstmac udp_dstmac2 udp_dstport udp_dstport2 udp_firstdst udp_numdst udp_reconfigure udp_srcip udp_srcip2 udp_srcmac udp_srcmac2 udp_validate update updatedetectorserver updatekernel updatemode user v_limit vchip_comp_adc vchip_comp_fe vchip_cs vchip_opa_1st vchip_opa_fd vchip_ref_comp_fe versions veto vetoalg vetofile vetophoton vetoref vetostream virtual vm_a vm_b vm_c vm_d vm_io zmqhwm zmqip zmqport " __acquire() { FCN_RETURN="" return 0 @@ -1856,6 +1856,23 @@ fi fi return 0 } +__powerdac() { +FCN_RETURN="" +if [[ ${IS_GET} -eq 1 ]]; then +if [[ "${cword}" == "2" ]]; then +FCN_RETURN="" +fi +fi +if [[ ${IS_GET} -eq 0 ]]; then +if [[ "${cword}" == "2" ]]; then +FCN_RETURN="" +fi +if [[ "${cword}" == "3" ]]; then +FCN_RETURN="" +fi +fi +return 0 +} __powerindex() { FCN_RETURN="" if [[ ${IS_GET} -eq 1 ]]; then diff --git a/slsDetectorSoftware/generator/autocomplete/zsh_autocomplete.sh b/slsDetectorSoftware/generator/autocomplete/zsh_autocomplete.sh index a83a04d1f..b3ecc495e 100644 --- a/slsDetectorSoftware/generator/autocomplete/zsh_autocomplete.sh +++ b/slsDetectorSoftware/generator/autocomplete/zsh_autocomplete.sh @@ -4,7 +4,7 @@ _sd() { -local SLS_COMMANDS=" acquire activate adcclk adcenable adcenable10g adcindex adcinvert adclist adcname adcphase adcpipeline adcreg adcvpp apulse asamples autocompdisable badchannels blockingtrigger burstmode burstperiod bursts burstsl bustest cdsgain chipversion clearbit clearbusy clientversion clkdiv clkfreq clkphase collectionmode column compdisabletime confadc config configtransceiver counters currentsource dac dacindex daclist dacname dacvalues datastream dbitclk dbitphase dbitpipeline defaultdac defaultpattern define_bit define_reg definelist_bit definelist_reg delay delayl detectorserverversion detsize diodelay dpulse dr drlist dsamples execcommand exptime exptime1 exptime2 exptime3 extrastoragecells extsampling extsamplingsrc extsig fformat filtercells filterresistor findex firmwaretest firmwareversion fliprows flowcontrol10g fmaster fname foverwrite fpath framecounter frames framesl frametime free fwrite gaincaps gainmode gappixels gatedelay gatedelay1 gatedelay2 gatedelay3 gates getbit hardwareversion highvoltage hostname im_a im_b im_c im_d im_io imagetest include initialchecks inj_ch interpolation interruptsubframe kernelversion lastclient led lock master maxadcphaseshift maxclkphaseshift maxdbitphaseshift measuredperiod measuredsubperiod moduleid nextframenumber nmod numinterfaces overflow packageversion parallel parameters partialreset patfname patioctrl patlimits patloop patloop0 patloop1 patloop2 patmask patnloop patnloop0 patnloop1 patnloop2 patsetbit pattern patternstart patwait patwait0 patwait1 patwait2 patwaittime patwaittime0 patwaittime1 patwaittime2 patword pedestalmode period periodl polarity port power powerchip powerindex powerlist powername powervalues programfpga pulse pulsechip pulsenmove pumpprobe quad ratecorr readnrows readout readoutspeed readoutspeedlist rebootcontroller reg resetdacs resetfpga romode row runclk runtime rx_arping rx_clearroi rx_dbitlist rx_dbitoffset rx_dbitreorder rx_discardpolicy rx_fifodepth rx_frameindex rx_framescaught rx_framesperfile rx_hostname rx_jsonaddheader rx_jsonpara rx_lastclient rx_lock rx_missingpackets rx_padding rx_printconfig rx_realudpsocksize rx_roi rx_silent rx_start rx_status rx_stop rx_tcpport rx_threads rx_udpsocksize rx_version rx_zmqfreq rx_zmqhwm rx_zmqip rx_zmqport rx_zmqstartfnum rx_zmqstream samples savepattern scan scanerrmsg selinterface serialnumber setbit settings settingslist settingspath signalindex signallist signalname sleep slowadc slowadcindex slowadclist slowadcname slowadcvalues start status stop stopport storagecell_delay storagecell_start subdeadtime subexptime sync syncclk temp_10ge temp_adc temp_control temp_dcdc temp_event temp_fpga temp_fpgaext temp_fpgafl temp_fpgafr temp_slowadc temp_sodl temp_sodr temp_threshold templist tempvalues tengiga threshold thresholdnotb timing timing_info_decoder timinglist timingsource top transceiverenable trigger triggers triggersl trimbits trimen trimval tsamples txdelay txdelay_frame txdelay_left txdelay_right type udp_cleardst udp_dstip udp_dstip2 udp_dstlist udp_dstmac udp_dstmac2 udp_dstport udp_dstport2 udp_firstdst udp_numdst udp_reconfigure udp_srcip udp_srcip2 udp_srcmac udp_srcmac2 udp_validate update updatedetectorserver updatekernel updatemode user v_limit vchip_comp_adc vchip_comp_fe vchip_cs vchip_opa_1st vchip_opa_fd vchip_ref_comp_fe versions veto vetoalg vetofile vetophoton vetoref vetostream virtual vm_a vm_b vm_c vm_d vm_io zmqhwm zmqip zmqport " +local SLS_COMMANDS=" acquire activate adcclk adcenable adcenable10g adcindex adcinvert adclist adcname adcphase adcpipeline adcreg adcvpp apulse asamples autocompdisable badchannels blockingtrigger burstmode burstperiod bursts burstsl bustest cdsgain chipversion clearbit clearbusy clientversion clkdiv clkfreq clkphase collectionmode column compdisabletime confadc config configtransceiver counters currentsource dac dacindex daclist dacname dacvalues datastream dbitclk dbitphase dbitpipeline defaultdac defaultpattern define_bit define_reg definelist_bit definelist_reg delay delayl detectorserverversion detsize diodelay dpulse dr drlist dsamples execcommand exptime exptime1 exptime2 exptime3 extrastoragecells extsampling extsamplingsrc extsig fformat filtercells filterresistor findex firmwaretest firmwareversion fliprows flowcontrol10g fmaster fname foverwrite fpath framecounter frames framesl frametime free fwrite gaincaps gainmode gappixels gatedelay gatedelay1 gatedelay2 gatedelay3 gates getbit hardwareversion highvoltage hostname im_a im_b im_c im_d im_io imagetest include initialchecks inj_ch interpolation interruptsubframe kernelversion lastclient led lock master maxadcphaseshift maxclkphaseshift maxdbitphaseshift measuredperiod measuredsubperiod moduleid nextframenumber nmod numinterfaces overflow packageversion parallel parameters partialreset patfname patioctrl patlimits patloop patloop0 patloop1 patloop2 patmask patnloop patnloop0 patnloop1 patnloop2 patsetbit pattern patternstart patwait patwait0 patwait1 patwait2 patwaittime patwaittime0 patwaittime1 patwaittime2 patword pedestalmode period periodl polarity port power powerchip powerdac powerindex powerlist powername powervalues programfpga pulse pulsechip pulsenmove pumpprobe quad ratecorr readnrows readout readoutspeed readoutspeedlist rebootcontroller reg resetdacs resetfpga romode row runclk runtime rx_arping rx_clearroi rx_dbitlist rx_dbitoffset rx_dbitreorder rx_discardpolicy rx_fifodepth rx_frameindex rx_framescaught rx_framesperfile rx_hostname rx_jsonaddheader rx_jsonpara rx_lastclient rx_lock rx_missingpackets rx_padding rx_printconfig rx_realudpsocksize rx_roi rx_silent rx_start rx_status rx_stop rx_tcpport rx_threads rx_udpsocksize rx_version rx_zmqfreq rx_zmqhwm rx_zmqip rx_zmqport rx_zmqstartfnum rx_zmqstream samples savepattern scan scanerrmsg selinterface serialnumber setbit settings settingslist settingspath signalindex signallist signalname sleep slowadc slowadcindex slowadclist slowadcname slowadcvalues start status stop stopport storagecell_delay storagecell_start subdeadtime subexptime sync syncclk temp_10ge temp_adc temp_control temp_dcdc temp_event temp_fpga temp_fpgaext temp_fpgafl temp_fpgafr temp_slowadc temp_sodl temp_sodr temp_threshold templist tempvalues tengiga threshold thresholdnotb timing timing_info_decoder timinglist timingsource top transceiverenable trigger triggers triggersl trimbits trimen trimval tsamples txdelay txdelay_frame txdelay_left txdelay_right type udp_cleardst udp_dstip udp_dstip2 udp_dstlist udp_dstmac udp_dstmac2 udp_dstport udp_dstport2 udp_firstdst udp_numdst udp_reconfigure udp_srcip udp_srcip2 udp_srcmac udp_srcmac2 udp_validate update updatedetectorserver updatekernel updatemode user v_limit vchip_comp_adc vchip_comp_fe vchip_cs vchip_opa_1st vchip_opa_fd vchip_ref_comp_fe versions veto vetoalg vetofile vetophoton vetoref vetostream virtual vm_a vm_b vm_c vm_d vm_io zmqhwm zmqip zmqport " __acquire() { FCN_RETURN="" return 0 @@ -1780,6 +1780,23 @@ fi fi return 0 } +__powerdac() { +FCN_RETURN="" +if [[ ${IS_GET} -eq 1 ]]; then +if [[ "${cword}" == "2" ]]; then +FCN_RETURN="" +fi +fi +if [[ ${IS_GET} -eq 0 ]]; then +if [[ "${cword}" == "2" ]]; then +FCN_RETURN="" +fi +if [[ "${cword}" == "3" ]]; then +FCN_RETURN="" +fi +fi +return 0 +} __powerindex() { FCN_RETURN="" if [[ ${IS_GET} -eq 1 ]]; then diff --git a/slsDetectorSoftware/generator/commands.yaml b/slsDetectorSoftware/generator/commands.yaml index a5b9f307d..815857dc0 100644 --- a/slsDetectorSoftware/generator/commands.yaml +++ b/slsDetectorSoftware/generator/commands.yaml @@ -283,6 +283,20 @@ GET_IND_COMMAND: input_types: [ int ] output: [ OutString(t) ] +GET_IND_COMMAND_NOID: + template: true + infer_action: true + help: "" + actions: + GET: + check_det_id: true + function: '' + argc: 0 + input: [ 'VAL' ] + cast_input: [ false ] + input_types: [ int ] + output: [ OutString(t) ] + CTB_NAMED_LIST: template: true infer_action: true @@ -2088,85 +2102,99 @@ temp_slowadc: input: [ 'defs::SLOW_ADC_TEMP' ] output: [ OutString(t), '" °C"' ] + + +################# GET_IND_COMMAND_NOID ####################### vm_a: - inherit_actions: GET_IND_COMMAND + inherit_actions: GET_IND_COMMAND_NOID help: "\n\t[Ctb] Measured voltage of power supply a in mV." actions: GET: function: getMeasuredPower input: [ 'defs::V_POWER_A' ] + output: [ OutString(t), '" mV"' ] vm_b: - inherit_actions: GET_IND_COMMAND + inherit_actions: GET_IND_COMMAND_NOID help: "\n\t[Ctb] Measured voltage of power supply b in mV." actions: GET: function: getMeasuredPower input: [ 'defs::V_POWER_B' ] + output: [ OutString(t), '" mV"' ] vm_c: - inherit_actions: GET_IND_COMMAND + inherit_actions: GET_IND_COMMAND_NOID help: "\n\t[Ctb] Measured voltage of power supply c in mV." actions: GET: function: getMeasuredPower input: [ 'defs::V_POWER_C' ] + output: [ OutString(t), '" mV"' ] vm_d: - inherit_actions: GET_IND_COMMAND + inherit_actions: GET_IND_COMMAND_NOID help: "\n\t[Ctb] Measured voltage of power supply d in mV." actions: GET: function: getMeasuredPower input: [ 'defs::V_POWER_D' ] + output: [ OutString(t), '" mV"' ] vm_io: - inherit_actions: GET_IND_COMMAND + inherit_actions: GET_IND_COMMAND_NOID help: "\n\t[Ctb] Measured voltage of power supply io in mV." actions: GET: function: getMeasuredPower input: [ 'defs::V_POWER_IO' ] + output: [ OutString(t), '" mV"' ] im_a: - inherit_actions: GET_IND_COMMAND + inherit_actions: GET_IND_COMMAND_NOID help: "\n\t[Ctb] Measured current of power supply a in mA." actions: GET: - function: getMeasuredCurrent + function: getMeasuredPower input: [ 'defs::I_POWER_A' ] + output: [ OutString(t), '" mA"' ] im_b: - inherit_actions: GET_IND_COMMAND + inherit_actions: GET_IND_COMMAND_NOID help: "\n\t[Ctb] Measured current of power supply b in mA." actions: GET: - function: getMeasuredCurrent + function: getMeasuredPower input: [ 'defs::I_POWER_B' ] + output: [ OutString(t), '" mA"' ] im_c: - inherit_actions: GET_IND_COMMAND + inherit_actions: GET_IND_COMMAND_NOID help: "\n\t[Ctb] Measured current of power supply c in mA." actions: GET: - function: getMeasuredCurrent + function: getMeasuredPower input: [ 'defs::I_POWER_C' ] + output: [ OutString(t), '" mA"' ] im_d: - inherit_actions: GET_IND_COMMAND + inherit_actions: GET_IND_COMMAND_NOID help: "\n\t[Ctb] Measured current of power supply d in mA." actions: GET: - function: getMeasuredCurrent + function: getMeasuredPower input: [ 'defs::I_POWER_D' ] + output: [ OutString(t), '" mA"' ] im_io: - inherit_actions: GET_IND_COMMAND + inherit_actions: GET_IND_COMMAND_NOID help: "\n\t[Ctb] Measured current of power supply io in mA." actions: GET: - function: getMeasuredCurrent + function: getMeasuredPower input: [ 'defs::I_POWER_IO' ] + output: [ OutString(t), '" mA"' ] + ################# CTB_NAMED_LIST ############################# daclist: diff --git a/slsDetectorSoftware/generator/extended_commands.yaml b/slsDetectorSoftware/generator/extended_commands.yaml index 967ad5da5..527861421 100644 --- a/slsDetectorSoftware/generator/extended_commands.yaml +++ b/slsDetectorSoftware/generator/extended_commands.yaml @@ -4849,16 +4849,17 @@ im_a: argc: 0 cast_input: - false - check_det_id: false + check_det_id: true convert_det_id: true - function: getMeasuredCurrent + function: getMeasuredPower input: - defs::I_POWER_A input_types: - int output: - OutString(t) - require_det_id: true + - '" mA"' + require_det_id: false store_result_in_t: true command_name: im_a function_alias: im_a @@ -4873,16 +4874,17 @@ im_b: argc: 0 cast_input: - false - check_det_id: false + check_det_id: true convert_det_id: true - function: getMeasuredCurrent + function: getMeasuredPower input: - defs::I_POWER_B input_types: - int output: - OutString(t) - require_det_id: true + - '" mA"' + require_det_id: false store_result_in_t: true command_name: im_b function_alias: im_b @@ -4897,16 +4899,17 @@ im_c: argc: 0 cast_input: - false - check_det_id: false + check_det_id: true convert_det_id: true - function: getMeasuredCurrent + function: getMeasuredPower input: - defs::I_POWER_C input_types: - int output: - OutString(t) - require_det_id: true + - '" mA"' + require_det_id: false store_result_in_t: true command_name: im_c function_alias: im_c @@ -4921,16 +4924,17 @@ im_d: argc: 0 cast_input: - false - check_det_id: false + check_det_id: true convert_det_id: true - function: getMeasuredCurrent + function: getMeasuredPower input: - defs::I_POWER_D input_types: - int output: - OutString(t) - require_det_id: true + - '" mA"' + require_det_id: false store_result_in_t: true command_name: im_d function_alias: im_d @@ -4945,16 +4949,17 @@ im_io: argc: 0 cast_input: - false - check_det_id: false + check_det_id: true convert_det_id: true - function: getMeasuredCurrent + function: getMeasuredPower input: - defs::I_POWER_IO input_types: - int output: - OutString(t) - require_det_id: true + - '" mA"' + require_det_id: false store_result_in_t: true command_name: im_io function_alias: im_io @@ -7325,6 +7330,42 @@ powerchip: \ Ctb] Default is 0. Also configures the chip if powered on." infer_action: true template: true +powerdac: + actions: + GET: + args: + - arg_types: + - std::string + argc: 1 + cast_input: [] + check_det_id: false + convert_det_id: true + function: '' + input: [] + input_types: [] + output: [] + require_det_id: false + store_result_in_t: true + PUT: + args: + - arg_types: + - std::string + - int + argc: 2 + cast_input: [] + check_det_id: false + convert_det_id: true + function: '' + input: [] + input_types: [] + output: [] + require_det_id: false + store_result_in_t: false + command_name: powerdac + function_alias: powerdac + help: '' + infer_action: true + is_description: true powerindex: actions: GET: @@ -12630,12 +12671,13 @@ v_limit: - arg_types: [] argc: 0 cast_input: [] - check_det_id: false + check_det_id: true convert_det_id: true - function: '' + function: getVoltageLimit input: [] input_types: [] - output: [] + output: + - OutString(t) require_det_id: false store_result_in_t: true PUT: @@ -12643,20 +12685,25 @@ v_limit: - arg_types: - int argc: 1 - cast_input: [] - check_det_id: false + cast_input: + - true + check_det_id: true convert_det_id: true - function: '' - input: [] - input_types: [] - output: [] + function: setVoltageLimit + input: + - args[0] + input_types: + - int + output: + - args.front() require_det_id: false store_result_in_t: false command_name: v_limit function_alias: v_limit - help: '' + help: "[n_value]\n\t[Ctb][Xilinx Ctb] Soft limit for power supplies and DACS in\ + \ mV." infer_action: true - is_description: true + template: true vchip_comp_adc: actions: GET: @@ -13369,7 +13416,7 @@ vm_a: argc: 0 cast_input: - false - check_det_id: false + check_det_id: true convert_det_id: true function: getMeasuredPower input: @@ -13378,7 +13425,8 @@ vm_a: - int output: - OutString(t) - require_det_id: true + - '" mV"' + require_det_id: false store_result_in_t: true command_name: vm_a function_alias: vm_a @@ -13393,7 +13441,7 @@ vm_b: argc: 0 cast_input: - false - check_det_id: false + check_det_id: true convert_det_id: true function: getMeasuredPower input: @@ -13402,7 +13450,8 @@ vm_b: - int output: - OutString(t) - require_det_id: true + - '" mV"' + require_det_id: false store_result_in_t: true command_name: vm_b function_alias: vm_b @@ -13417,7 +13466,7 @@ vm_c: argc: 0 cast_input: - false - check_det_id: false + check_det_id: true convert_det_id: true function: getMeasuredPower input: @@ -13426,7 +13475,8 @@ vm_c: - int output: - OutString(t) - require_det_id: true + - '" mV"' + require_det_id: false store_result_in_t: true command_name: vm_c function_alias: vm_c @@ -13441,7 +13491,7 @@ vm_d: argc: 0 cast_input: - false - check_det_id: false + check_det_id: true convert_det_id: true function: getMeasuredPower input: @@ -13450,7 +13500,8 @@ vm_d: - int output: - OutString(t) - require_det_id: true + - '" mV"' + require_det_id: false store_result_in_t: true command_name: vm_d function_alias: vm_d @@ -13465,7 +13516,7 @@ vm_io: argc: 0 cast_input: - false - check_det_id: false + check_det_id: true convert_det_id: true function: getMeasuredPower input: @@ -13474,7 +13525,8 @@ vm_io: - int output: - OutString(t) - require_det_id: true + - '" mV"' + require_det_id: false store_result_in_t: true command_name: vm_io function_alias: vm_io diff --git a/slsDetectorSoftware/src/Caller.cpp b/slsDetectorSoftware/src/Caller.cpp index 0c5fdc50b..cd3991d83 100644 --- a/slsDetectorSoftware/src/Caller.cpp +++ b/slsDetectorSoftware/src/Caller.cpp @@ -5803,9 +5803,11 @@ std::string Caller::im_a(int action) { // generate code for each action if (action == slsDetectorDefs::GET_ACTION) { if (args.size() == 0) { - auto t = det->getMeasuredCurrent(defs::I_POWER_A, - std::vector{det_id}); - os << OutString(t) << '\n'; + if (det_id != -1) { + throw RuntimeError("Cannot execute im_a at module level"); + } + auto t = det->getMeasuredPower(defs::I_POWER_A); + os << OutString(t) << " mA" << '\n'; } } @@ -5843,9 +5845,11 @@ std::string Caller::im_b(int action) { // generate code for each action if (action == slsDetectorDefs::GET_ACTION) { if (args.size() == 0) { - auto t = det->getMeasuredCurrent(defs::I_POWER_B, - std::vector{det_id}); - os << OutString(t) << '\n'; + if (det_id != -1) { + throw RuntimeError("Cannot execute im_b at module level"); + } + auto t = det->getMeasuredPower(defs::I_POWER_B); + os << OutString(t) << " mA" << '\n'; } } @@ -5883,9 +5887,11 @@ std::string Caller::im_c(int action) { // generate code for each action if (action == slsDetectorDefs::GET_ACTION) { if (args.size() == 0) { - auto t = det->getMeasuredCurrent(defs::I_POWER_C, - std::vector{det_id}); - os << OutString(t) << '\n'; + if (det_id != -1) { + throw RuntimeError("Cannot execute im_c at module level"); + } + auto t = det->getMeasuredPower(defs::I_POWER_C); + os << OutString(t) << " mA" << '\n'; } } @@ -5923,9 +5929,11 @@ std::string Caller::im_d(int action) { // generate code for each action if (action == slsDetectorDefs::GET_ACTION) { if (args.size() == 0) { - auto t = det->getMeasuredCurrent(defs::I_POWER_D, - std::vector{det_id}); - os << OutString(t) << '\n'; + if (det_id != -1) { + throw RuntimeError("Cannot execute im_d at module level"); + } + auto t = det->getMeasuredPower(defs::I_POWER_D); + os << OutString(t) << " mA" << '\n'; } } @@ -5963,9 +5971,11 @@ std::string Caller::im_io(int action) { // generate code for each action if (action == slsDetectorDefs::GET_ACTION) { if (args.size() == 0) { - auto t = det->getMeasuredCurrent(defs::I_POWER_IO, - std::vector{det_id}); - os << OutString(t) << '\n'; + if (det_id != -1) { + throw RuntimeError("Cannot execute im_io at module level"); + } + auto t = det->getMeasuredPower(defs::I_POWER_IO); + os << OutString(t) << " mA" << '\n'; } } @@ -15754,6 +15764,74 @@ std::string Caller::updatemode(int action) { return os.str(); } +std::string Caller::v_limit(int action) { + + std::ostringstream os; + // print help + if (action == slsDetectorDefs::HELP_ACTION) { + os << R"V0G0N([n_value] + [Ctb][Xilinx Ctb] Soft limit for power supplies and DACS in mV. )V0G0N" + << std::endl; + return os.str(); + } + + // check if action and arguments are valid + if (action == slsDetectorDefs::GET_ACTION) { + if (1 && args.size() != 0) { + throw RuntimeError("Wrong number of arguments for action GET"); + } + + if (args.size() == 0) { + } + + } + + else if (action == slsDetectorDefs::PUT_ACTION) { + if (1 && args.size() != 1) { + throw RuntimeError("Wrong number of arguments for action PUT"); + } + + if (args.size() == 1) { + try { + StringTo(args[0]); + } catch (...) { + throw RuntimeError("Could not convert argument 0 to int"); + } + } + + } + + else { + + throw RuntimeError("INTERNAL ERROR: Invalid action: supported actions " + "are ['GET', 'PUT']"); + } + + // generate code for each action + if (action == slsDetectorDefs::GET_ACTION) { + if (args.size() == 0) { + if (det_id != -1) { + throw RuntimeError("Cannot execute v_limit at module level"); + } + auto t = det->getVoltageLimit(); + os << OutString(t) << '\n'; + } + } + + if (action == slsDetectorDefs::PUT_ACTION) { + if (args.size() == 1) { + if (det_id != -1) { + throw RuntimeError("Cannot execute v_limit at module level"); + } + auto arg0 = StringTo(args[0]); + det->setVoltageLimit(arg0); + os << args.front() << '\n'; + } + } + + return os.str(); +} + std::string Caller::vchip_comp_adc(int action) { std::ostringstream os; @@ -16636,9 +16714,11 @@ std::string Caller::vm_a(int action) { // generate code for each action if (action == slsDetectorDefs::GET_ACTION) { if (args.size() == 0) { - auto t = det->getMeasuredPower(defs::V_POWER_A, - std::vector{det_id}); - os << OutString(t) << '\n'; + if (det_id != -1) { + throw RuntimeError("Cannot execute vm_a at module level"); + } + auto t = det->getMeasuredPower(defs::V_POWER_A); + os << OutString(t) << " mV" << '\n'; } } @@ -16676,9 +16756,11 @@ std::string Caller::vm_b(int action) { // generate code for each action if (action == slsDetectorDefs::GET_ACTION) { if (args.size() == 0) { - auto t = det->getMeasuredPower(defs::V_POWER_B, - std::vector{det_id}); - os << OutString(t) << '\n'; + if (det_id != -1) { + throw RuntimeError("Cannot execute vm_b at module level"); + } + auto t = det->getMeasuredPower(defs::V_POWER_B); + os << OutString(t) << " mV" << '\n'; } } @@ -16716,9 +16798,11 @@ std::string Caller::vm_c(int action) { // generate code for each action if (action == slsDetectorDefs::GET_ACTION) { if (args.size() == 0) { - auto t = det->getMeasuredPower(defs::V_POWER_C, - std::vector{det_id}); - os << OutString(t) << '\n'; + if (det_id != -1) { + throw RuntimeError("Cannot execute vm_c at module level"); + } + auto t = det->getMeasuredPower(defs::V_POWER_C); + os << OutString(t) << " mV" << '\n'; } } @@ -16756,9 +16840,11 @@ std::string Caller::vm_d(int action) { // generate code for each action if (action == slsDetectorDefs::GET_ACTION) { if (args.size() == 0) { - auto t = det->getMeasuredPower(defs::V_POWER_D, - std::vector{det_id}); - os << OutString(t) << '\n'; + if (det_id != -1) { + throw RuntimeError("Cannot execute vm_d at module level"); + } + auto t = det->getMeasuredPower(defs::V_POWER_D); + os << OutString(t) << " mV" << '\n'; } } @@ -16796,9 +16882,11 @@ std::string Caller::vm_io(int action) { // generate code for each action if (action == slsDetectorDefs::GET_ACTION) { if (args.size() == 0) { - auto t = det->getMeasuredPower(defs::V_POWER_IO, - std::vector{det_id}); - os << OutString(t) << '\n'; + if (det_id != -1) { + throw RuntimeError("Cannot execute vm_io at module level"); + } + auto t = det->getMeasuredPower(defs::V_POWER_IO); + os << OutString(t) << " mV" << '\n'; } } diff --git a/slsDetectorSoftware/src/Caller.h b/slsDetectorSoftware/src/Caller.h index 20dba9fdc..20a5864e6 100644 --- a/slsDetectorSoftware/src/Caller.h +++ b/slsDetectorSoftware/src/Caller.h @@ -218,6 +218,7 @@ class Caller { std::string port(int action); std::string power(int action); std::string powerchip(int action); + std::string powerdac(int action); std::string powerindex(int action); std::string powerlist(int action); std::string powername(int action); @@ -417,10 +418,9 @@ class Caller { // applicable RegisterAddress getRegisterAddress(const std::string &saddr) const; BitAddress getBitAddress() const; - defs::dacIndex parsePowerIndex(int argIndex); - std::optional parseIfPowerIndex(int argIndex); defs::dacIndex parseDacIndex(int argIndex, bool isCtb); bool parseMV(int argIndex); + defs::powerIndex parsePowerIndex(int argIndex); FunctionMap functions{ {"list", &Caller::list}, @@ -588,6 +588,7 @@ class Caller { {"port", &Caller::port}, {"power", &Caller::power}, {"powerchip", &Caller::powerchip}, + {"powerdac", &Caller::powerdac}, {"powerindex", &Caller::powerindex}, {"powerlist", &Caller::powerlist}, {"powername", &Caller::powername}, diff --git a/slsDetectorSoftware/src/CallerSpecial.cpp b/slsDetectorSoftware/src/CallerSpecial.cpp index d93c8ff93..e52212186 100644 --- a/slsDetectorSoftware/src/CallerSpecial.cpp +++ b/slsDetectorSoftware/src/CallerSpecial.cpp @@ -1939,7 +1939,7 @@ std::string Caller::powerdac(int action) { return os.str(); } -defs::dacIndex Caller::parsePowerIndex(int argIndex) { +defs::powerIndex Caller::parsePowerIndex(int argIndex) { if (argIndex >= (int)args.size()) { throw RuntimeError("Invalid arguments. Power name is required."); } @@ -1948,7 +1948,7 @@ defs::dacIndex Caller::parsePowerIndex(int argIndex) { // power default names if (is_int(arg) || arg == "v_a" || arg == "v_b" || arg == "v_c" || arg == "v_d" || arg == "v_io" || arg == "v_chip") { - return StringTo(arg); + return StringTo(arg); } // power name diff --git a/slsDetectorSoftware/src/inferAction.cpp b/slsDetectorSoftware/src/inferAction.cpp index 357540a7d..25467d1d2 100644 --- a/slsDetectorSoftware/src/inferAction.cpp +++ b/slsDetectorSoftware/src/inferAction.cpp @@ -2278,6 +2278,22 @@ int InferAction::powerchip() { } } +int InferAction::powerdac() { + + if (args.size() == 1) { + return slsDetectorDefs::GET_ACTION; + } + + if (args.size() == 2) { + return slsDetectorDefs::PUT_ACTION; + } + + else { + + throw RuntimeError("Could not infer action: Wrong number of arguments"); + } +} + int InferAction::powerindex() { if (args.size() == 1) { diff --git a/slsDetectorSoftware/src/inferAction.h b/slsDetectorSoftware/src/inferAction.h index 67337707a..c3be8f075 100644 --- a/slsDetectorSoftware/src/inferAction.h +++ b/slsDetectorSoftware/src/inferAction.h @@ -172,6 +172,7 @@ class InferAction { int port(); int power(); int powerchip(); + int powerdac(); int powerindex(); int powerlist(); int powername(); @@ -507,6 +508,7 @@ class InferAction { {"port", &InferAction::port}, {"power", &InferAction::power}, {"powerchip", &InferAction::powerchip}, + {"powerdac", &InferAction::powerdac}, {"powerindex", &InferAction::powerindex}, {"powerlist", &InferAction::powerlist}, {"powername", &InferAction::powername},