From c1776086892745db5657efc18bbc4b8f57810afe Mon Sep 17 00:00:00 2001 From: lrlunin Date: Mon, 11 May 2026 09:02:12 +0200 Subject: [PATCH] renamed functions, add SetFileName method, format JSON parameters order --- .../autocomplete/bash_autocomplete.sh | 10 +-- .../autocomplete/zsh_autocomplete.sh | 10 +-- slsDetectorSoftware/generator/commands.yaml | 4 +- .../generator/extended_commands.yaml | 44 +++++------ slsDetectorSoftware/include/sls/Detector.h | 2 +- slsDetectorSoftware/src/Caller.cpp | 78 +++++++++---------- slsDetectorSoftware/src/Caller.h | 4 +- slsDetectorSoftware/src/Detector.cpp | 2 +- slsDetectorSoftware/src/inferAction.cpp | 24 +++--- slsDetectorSoftware/src/inferAction.h | 4 +- slsReceiverSoftware/src/DataStreamer.cpp | 33 ++++---- slsReceiverSoftware/src/DataStreamer.h | 5 +- slsReceiverSoftware/src/Implementation.cpp | 12 ++- 13 files changed, 120 insertions(+), 112 deletions(-) diff --git a/slsDetectorSoftware/generator/autocomplete/bash_autocomplete.sh b/slsDetectorSoftware/generator/autocomplete/bash_autocomplete.sh index 5b2609253..0fdd93044 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 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_restreamstop 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_streamdummyheader 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 @@ -2299,10 +2299,6 @@ __rx_realudpsocksize() { FCN_RETURN="" return 0 } -__rx_restreamstop() { -FCN_RETURN="" -return 0 -} __rx_roi() { FCN_RETURN="" return 0 @@ -2333,6 +2329,10 @@ __rx_stop() { FCN_RETURN="" return 0 } +__rx_streamdummyheader() { +FCN_RETURN="" +return 0 +} __rx_tcpport() { FCN_RETURN="" if [[ ${IS_GET} -eq 0 ]]; then diff --git a/slsDetectorSoftware/generator/autocomplete/zsh_autocomplete.sh b/slsDetectorSoftware/generator/autocomplete/zsh_autocomplete.sh index c02683d52..3da9f237e 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 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_restreamstop 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_streamdummyheader 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 @@ -2223,10 +2223,6 @@ __rx_realudpsocksize() { FCN_RETURN="" return 0 } -__rx_restreamstop() { -FCN_RETURN="" -return 0 -} __rx_roi() { FCN_RETURN="" return 0 @@ -2257,6 +2253,10 @@ __rx_stop() { FCN_RETURN="" return 0 } +__rx_streamdummyheader() { +FCN_RETURN="" +return 0 +} __rx_tcpport() { FCN_RETURN="" if [[ ${IS_GET} -eq 0 ]]; then diff --git a/slsDetectorSoftware/generator/commands.yaml b/slsDetectorSoftware/generator/commands.yaml index 8e151dcec..03a59ede3 100644 --- a/slsDetectorSoftware/generator/commands.yaml +++ b/slsDetectorSoftware/generator/commands.yaml @@ -1698,12 +1698,12 @@ rx_stop: PUT: function: stopReceiver -rx_restreamstop: +rx_streamdummyheader: inherit_actions: EXECUTE_SET_COMMAND help: "\n\tSends ZMQ dummy header. The detector related fields are not set, the receiver related fields are set." actions: PUT: - function: restreamRxStop + function: streamRxDummyHeader readout: inherit_actions: EXECUTE_SET_COMMAND_NOID diff --git a/slsDetectorSoftware/generator/extended_commands.yaml b/slsDetectorSoftware/generator/extended_commands.yaml index cf28927e4..f284c0a2e 100644 --- a/slsDetectorSoftware/generator/extended_commands.yaml +++ b/slsDetectorSoftware/generator/extended_commands.yaml @@ -8965,28 +8965,6 @@ rx_realudpsocksize: \ to kernel bookkeeping." infer_action: true template: true -rx_restreamstop: - actions: - PUT: - args: - - arg_types: [] - argc: 0 - cast_input: [] - check_det_id: false - convert_det_id: true - function: restreamRxStop - input: [] - input_types: [] - output: - - '"successful"' - require_det_id: true - store_result_in_t: false - command_name: rx_restreamstop - function_alias: rx_restreamstop - help: "\n\tSends ZMQ dummy header. The detector related fields are not set, the\ - \ receiver related fields are set." - infer_action: true - template: true rx_roi: actions: GET: @@ -9139,6 +9117,28 @@ rx_stop: \ data file (if file write enabled)." infer_action: true template: true +rx_streamdummyheader: + actions: + PUT: + args: + - arg_types: [] + argc: 0 + cast_input: [] + check_det_id: false + convert_det_id: true + function: streamRxDummyHeader + input: [] + input_types: [] + output: + - '"successful"' + require_det_id: true + store_result_in_t: false + command_name: rx_streamdummyheader + function_alias: rx_streamdummyheader + help: "\n\tSends ZMQ dummy header. The detector related fields are not set, the\ + \ receiver related fields are set." + infer_action: true + template: true rx_tcpport: actions: GET: diff --git a/slsDetectorSoftware/include/sls/Detector.h b/slsDetectorSoftware/include/sls/Detector.h index ac5932939..1203b41ad 100644 --- a/slsDetectorSoftware/include/sls/Detector.h +++ b/slsDetectorSoftware/include/sls/Detector.h @@ -1162,7 +1162,7 @@ class Detector { */ void setRxZmqHwm(const int limit); - void restreamRxStop(Positions pos = {}) const; + void streamRxDummyHeader(Positions pos = {}) const; ///@} /** @name Eiger Specific */ diff --git a/slsDetectorSoftware/src/Caller.cpp b/slsDetectorSoftware/src/Caller.cpp index 1ebd9ccd9..b2212d542 100644 --- a/slsDetectorSoftware/src/Caller.cpp +++ b/slsDetectorSoftware/src/Caller.cpp @@ -10932,45 +10932,6 @@ std::string Caller::rx_realudpsocksize(int action) { return os.str(); } -std::string Caller::rx_restreamstop(int action) { - - std::ostringstream os; - // print help - if (action == slsDetectorDefs::HELP_ACTION) { - os << R"V0G0N( - Sends ZMQ dummy header. The detector related fields are not set, the receiver related fields are set. )V0G0N" - << std::endl; - return os.str(); - } - - // check if action and arguments are valid - if (action == slsDetectorDefs::PUT_ACTION) { - if (1 && args.size() != 0) { - throw RuntimeError("Wrong number of arguments for action PUT"); - } - - if (args.size() == 0) { - } - - } - - else { - - throw RuntimeError( - "INTERNAL ERROR: Invalid action: supported actions are ['PUT']"); - } - - // generate code for each action - if (action == slsDetectorDefs::PUT_ACTION) { - if (args.size() == 0) { - det->restreamRxStop(std::vector{det_id}); - os << "successful" << '\n'; - } - } - - return os.str(); -} - std::string Caller::rx_silent(int action) { std::ostringstream os; @@ -11170,6 +11131,45 @@ std::string Caller::rx_stop(int action) { return os.str(); } +std::string Caller::rx_streamdummyheader(int action) { + + std::ostringstream os; + // print help + if (action == slsDetectorDefs::HELP_ACTION) { + os << R"V0G0N( + Sends ZMQ dummy header. The detector related fields are not set, the receiver related fields are set. )V0G0N" + << std::endl; + return os.str(); + } + + // check if action and arguments are valid + if (action == slsDetectorDefs::PUT_ACTION) { + if (1 && args.size() != 0) { + throw RuntimeError("Wrong number of arguments for action PUT"); + } + + if (args.size() == 0) { + } + + } + + else { + + throw RuntimeError( + "INTERNAL ERROR: Invalid action: supported actions are ['PUT']"); + } + + // generate code for each action + if (action == slsDetectorDefs::PUT_ACTION) { + if (args.size() == 0) { + det->streamRxDummyHeader(std::vector{det_id}); + os << "successful" << '\n'; + } + } + + return os.str(); +} + std::string Caller::rx_tcpport(int action) { std::ostringstream os; diff --git a/slsDetectorSoftware/src/Caller.h b/slsDetectorSoftware/src/Caller.h index 2e1f89284..5b5633297 100644 --- a/slsDetectorSoftware/src/Caller.h +++ b/slsDetectorSoftware/src/Caller.h @@ -264,12 +264,12 @@ class Caller { std::string rx_padding(int action); std::string rx_printconfig(int action); std::string rx_realudpsocksize(int action); - std::string rx_restreamstop(int action); std::string rx_roi(int action); std::string rx_silent(int action); std::string rx_start(int action); std::string rx_status(int action); std::string rx_stop(int action); + std::string rx_streamdummyheader(int action); std::string rx_tcpport(int action); std::string rx_threads(int action); std::string rx_udpsocksize(int action); @@ -636,12 +636,12 @@ class Caller { {"rx_padding", &Caller::rx_padding}, {"rx_printconfig", &Caller::rx_printconfig}, {"rx_realudpsocksize", &Caller::rx_realudpsocksize}, - {"rx_restreamstop", &Caller::rx_restreamstop}, {"rx_roi", &Caller::rx_roi}, {"rx_silent", &Caller::rx_silent}, {"rx_start", &Caller::rx_start}, {"rx_status", &Caller::rx_status}, {"rx_stop", &Caller::rx_stop}, + {"rx_streamdummyheader", &Caller::rx_streamdummyheader}, {"rx_tcpport", &Caller::rx_tcpport}, {"rx_threads", &Caller::rx_threads}, {"rx_udpsocksize", &Caller::rx_udpsocksize}, diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index eeb0833f1..de8e0f6f9 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -1636,7 +1636,7 @@ void Detector::setRxZmqHwm(const int limit) { } } -void Detector::restreamRxStop(Positions pos) const { +void Detector::streamRxDummyHeader(Positions pos) const { pimpl->Parallel(&Module::restreamStopFromReceiver, pos); } diff --git a/slsDetectorSoftware/src/inferAction.cpp b/slsDetectorSoftware/src/inferAction.cpp index 70ccfdca6..d3c8cd23d 100644 --- a/slsDetectorSoftware/src/inferAction.cpp +++ b/slsDetectorSoftware/src/inferAction.cpp @@ -2887,18 +2887,6 @@ int InferAction::rx_realudpsocksize() { } } -int InferAction::rx_restreamstop() { - - if (args.size() == 0) { - return slsDetectorDefs::PUT_ACTION; - } - - else { - - throw RuntimeError("Could not infer action: Wrong number of arguments"); - } -} - int InferAction::rx_roi() { throw RuntimeError("sls_detector is disabled for command: rx_roi. Use " @@ -2951,6 +2939,18 @@ int InferAction::rx_stop() { } } +int InferAction::rx_streamdummyheader() { + + if (args.size() == 0) { + return slsDetectorDefs::PUT_ACTION; + } + + else { + + throw RuntimeError("Could not infer action: Wrong number of arguments"); + } +} + int InferAction::rx_tcpport() { if (args.size() == 0) { diff --git a/slsDetectorSoftware/src/inferAction.h b/slsDetectorSoftware/src/inferAction.h index 13850cdef..6baa59d66 100644 --- a/slsDetectorSoftware/src/inferAction.h +++ b/slsDetectorSoftware/src/inferAction.h @@ -215,12 +215,12 @@ class InferAction { int rx_padding(); int rx_printconfig(); int rx_realudpsocksize(); - int rx_restreamstop(); int rx_roi(); int rx_silent(); int rx_start(); int rx_status(); int rx_stop(); + int rx_streamdummyheader(); int rx_tcpport(); int rx_threads(); int rx_udpsocksize(); @@ -552,12 +552,12 @@ class InferAction { {"rx_padding", &InferAction::rx_padding}, {"rx_printconfig", &InferAction::rx_printconfig}, {"rx_realudpsocksize", &InferAction::rx_realudpsocksize}, - {"rx_restreamstop", &InferAction::rx_restreamstop}, {"rx_roi", &InferAction::rx_roi}, {"rx_silent", &InferAction::rx_silent}, {"rx_start", &InferAction::rx_start}, {"rx_status", &InferAction::rx_status}, {"rx_stop", &InferAction::rx_stop}, + {"rx_streamdummyheader", &InferAction::rx_streamdummyheader}, {"rx_tcpport", &InferAction::rx_tcpport}, {"rx_threads", &InferAction::rx_threads}, {"rx_udpsocksize", &InferAction::rx_udpsocksize}, diff --git a/slsReceiverSoftware/src/DataStreamer.cpp b/slsReceiverSoftware/src/DataStreamer.cpp index 9478a5289..51c8dc679 100644 --- a/slsReceiverSoftware/src/DataStreamer.cpp +++ b/slsReceiverSoftware/src/DataStreamer.cpp @@ -29,6 +29,10 @@ void DataStreamer::SetGeneralData(GeneralData *g) { generalData = g; } void DataStreamer::SetFileIndex(uint64_t value) { fileIndex = value; } +void DataStreamer::SetFileName(const std::string &fname) { + fileNametoStream = fname; +} + void DataStreamer::SetNumberofPorts(xy np) { numPorts = np; } void DataStreamer::SetFlipRows(bool fd) { @@ -61,11 +65,10 @@ void DataStreamer::SetPortROI(ROI roi) { } } -void DataStreamer::ResetParametersforNewAcquisition(const std::string &fname) { +void DataStreamer::ResetParametersforNewAcquisition() { StopRunning(); startedFlag = false; firstIndex = 0; - fileNametoStream = fname; } void DataStreamer::RecordFirstIndex(uint64_t fnum, size_t firstImageIndex) { @@ -202,36 +205,36 @@ int DataStreamer::SendDataHeader(sls_detector_header header, uint32_t size) { zmqHeader zHeader = prepareRxZmqHeader(); zHeader.data = true; - // parameter coming from the detector (raw and derived) - uint64_t frameIndex = header.frameNumber - firstIndex; - uint64_t acquisitionIndex = header.frameNumber; - - zHeader.acqIndex = acquisitionIndex; + // parameter from detector header zHeader.column = header.column; - zHeader.completeImage = - (header.packetNumber < generalData->packetsPerFrame ? false : true); zHeader.detSpec1 = header.detSpec1; zHeader.detSpec2 = header.detSpec2; zHeader.detSpec3 = header.detSpec3; zHeader.detSpec4 = header.detSpec4; zHeader.detType = header.detType; zHeader.expLength = header.expLength; - zHeader.frameIndex = frameIndex; zHeader.frameNumber = header.frameNumber; - zHeader.imageSize = size; zHeader.modId = header.modId; zHeader.packetNumber = header.packetNumber; - zHeader.progress = - 100 * ((double)(frameIndex + 1) / (double)(nTotalFrames)); zHeader.row = header.row; zHeader.timestamp = header.timestamp; zHeader.version = header.version; + // parameter derived from header and receiver + uint64_t frameIndex = header.frameNumber - firstIndex; + uint64_t acquisitionIndex = header.frameNumber; + zHeader.acqIndex = acquisitionIndex; + zHeader.completeImage = + (header.packetNumber < generalData->packetsPerFrame ? false : true); + zHeader.frameIndex = frameIndex; + zHeader.imageSize = size; + zHeader.progress = + 100 * ((double)(frameIndex + 1) / (double)(nTotalFrames)); + return zmqSocket->SendHeader(index, zHeader); } -void DataStreamer::RestreamStop(const std::string &fname) { - fileNametoStream = fname; +void DataStreamer::RestreamStop() { if (!SendDummyHeader()) { throw RuntimeError("Could not restream Dummy Header via ZMQ for port " + std::to_string(zmqSocket->GetPortNumber())); diff --git a/slsReceiverSoftware/src/DataStreamer.h b/slsReceiverSoftware/src/DataStreamer.h index ba4abcb5f..da659873f 100644 --- a/slsReceiverSoftware/src/DataStreamer.h +++ b/slsReceiverSoftware/src/DataStreamer.h @@ -33,6 +33,7 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject { void SetGeneralData(GeneralData *g); void SetFileIndex(uint64_t value); + void SetFileName(const std::string &fname); void SetNumberofPorts(xy np); void SetFlipRows(bool fd); void SetQuadEnable(bool value); @@ -41,7 +42,7 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject { SetAdditionalJsonHeader(const std::map &json); void SetPortROI(ROI roi); - void ResetParametersforNewAcquisition(const std::string &fname); + void ResetParametersforNewAcquisition(); /** * Creates Zmq Sockets * (throws an exception if it couldnt create zmq sockets) @@ -50,7 +51,7 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject { */ void CreateZmqSockets(uint16_t port, int hwm); void CloseZmqSocket(); - void RestreamStop(const std::string &fname); + void RestreamStop(); private: /** diff --git a/slsReceiverSoftware/src/Implementation.cpp b/slsReceiverSoftware/src/Implementation.cpp index d46c3956b..e13e9e5e2 100644 --- a/slsReceiverSoftware/src/Implementation.cpp +++ b/slsReceiverSoftware/src/Implementation.cpp @@ -844,8 +844,10 @@ void Implementation::shutDownUDPSockets() { void Implementation::restreamStop() { std::string fnametostream = (filePath / fileName).string(); - for (const auto &it : dataStreamer) - it->RestreamStop(fnametostream); + for (const auto &it : dataStreamer) { + it->SetFileName(fnametostream); + it->RestreamStop(); + } LOG(logINFO) << "Restreaming Dummy Header via ZMQ successful"; } @@ -857,8 +859,10 @@ void Implementation::ResetParametersforNewAcquisition() { if (dataStreamEnable) { std::string fnametostream = (filePath / fileName).string(); - for (const auto &it : dataStreamer) - it->ResetParametersforNewAcquisition(fnametostream); + for (const auto &it : dataStreamer) { + it->ResetParametersforNewAcquisition(); + it->SetFileName(fnametostream); + } } }