From 489fccb25c575968a4e2f9e5e6cb410574f91cde Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 18 Jun 2020 17:10:53 +0200 Subject: [PATCH] removed GET_ flags, replaced -1 with GET_FLAG --- slsDetectorSoftware/src/CmdProxy.cpp | 12 +- slsDetectorSoftware/src/Module.cpp | 105 +++++++--------- slsDetectorSoftware/src/Module.h | 4 +- slsReceiverSoftware/src/ClientInterface.cpp | 3 +- slsSupportLib/include/sls_detector_defs.h | 126 +++++++------------- 5 files changed, 95 insertions(+), 155 deletions(-) diff --git a/slsDetectorSoftware/src/CmdProxy.cpp b/slsDetectorSoftware/src/CmdProxy.cpp index bd5284b23..6dedea34d 100644 --- a/slsDetectorSoftware/src/CmdProxy.cpp +++ b/slsDetectorSoftware/src/CmdProxy.cpp @@ -1186,9 +1186,9 @@ std::string CmdProxy::Threshold(int action) { os << OutString(t) << '\n'; } else if (action == defs::PUT_ACTION) { if (args.size() == 1) { - det->setThresholdEnergy(StringTo(args[0]), - slsDetectorDefs::GET_SETTINGS, true, - {det_id}); + auto t = det->getSettings({det_id}).tsquash( + "Inconsistent settings between detectors"); + det->setThresholdEnergy(StringTo(args[0]), t, true, {det_id}); } else if (args.size() == 2) { det->setThresholdEnergy( StringTo(args[0]), @@ -1216,9 +1216,9 @@ std::string CmdProxy::ThresholdNoTb(int action) { throw sls::RuntimeError("cannot get"); } else if (action == defs::PUT_ACTION) { if (args.size() == 1) { - det->setThresholdEnergy(StringTo(args[0]), - slsDetectorDefs::GET_SETTINGS, false, - {det_id}); + auto t = det->getSettings({det_id}).tsquash( + "Inconsistent settings between detectors"); + det->setThresholdEnergy(StringTo(args[0]), t, false, {det_id}); } else if (args.size() == 2) { det->setThresholdEnergy( StringTo(args[0]), diff --git a/slsDetectorSoftware/src/Module.cpp b/slsDetectorSoftware/src/Module.cpp index 794232b1a..725d9bafe 100644 --- a/slsDetectorSoftware/src/Module.cpp +++ b/slsDetectorSoftware/src/Module.cpp @@ -142,7 +142,7 @@ void Module::updateNumberOfDetector(slsDetectorDefs::xy det) { } slsDetectorDefs::detectorSettings Module::getSettings() { - auto r = sendToDetector(F_SET_SETTINGS, -1); + auto r = sendToDetector(F_SET_SETTINGS, GET_FLAG); return static_cast(r); } @@ -176,7 +176,7 @@ void Module::loadSettingsFile(const std::string &fname) { } int Module::getAllTrimbits() { - return sendToDetector(F_SET_ALL_TRIMBITS, -1); + return sendToDetector(F_SET_ALL_TRIMBITS, GET_FLAG); } void Module::setAllTrimbits(int val) { @@ -242,36 +242,27 @@ void Module::setDelayAfterTrigger(int64_t value) { } int64_t Module::getNumberOfFramesLeft() const { - int64_t retval = -1; - sendToDetectorStop(F_GET_FRAMES_LEFT, nullptr, retval); - return retval; + return sendToDetectorStop(F_GET_FRAMES_LEFT); } int64_t Module::getNumberOfTriggersLeft() const { - int64_t retval = -1; - sendToDetectorStop(F_GET_TRIGGERS_LEFT, nullptr, retval); - return retval; + return sendToDetectorStop(F_GET_TRIGGERS_LEFT); } int64_t Module::getDelayAfterTriggerLeft() const { - int64_t retval = -1; - sendToDetectorStop(F_GET_DELAY_AFTER_TRIGGER_LEFT, nullptr, retval); - return retval; + return sendToDetectorStop(F_GET_DELAY_AFTER_TRIGGER_LEFT); } int64_t Module::getPeriodLeft() const { - int64_t retval = -1; - sendToDetectorStop(F_GET_PERIOD_LEFT, nullptr, retval); - return retval; + return sendToDetectorStop(F_GET_PERIOD_LEFT); } slsDetectorDefs::timingMode Module::getTimingMode() { - return sendToDetector(F_SET_TIMING_MODE, -1); + return sendToDetector(F_SET_TIMING_MODE, GET_FLAG); } void Module::setTimingMode(timingMode value) { - timingMode retval = GET_TIMING_MODE; - sendToDetector(F_SET_TIMING_MODE, static_cast(value), retval); + sendToDetector(F_SET_TIMING_MODE, static_cast(value)); if (shm()->useReceiverFlag) { sendToReceiver(F_SET_RECEIVER_TIMING_MODE, value, nullptr); } @@ -310,7 +301,7 @@ void Module::setClockFrequency(int clkIndex, int value) { } int Module::getDAC(dacIndex index, bool mV) { - int args[]{static_cast(index), static_cast(mV), -1}; + int args[]{static_cast(index), static_cast(mV), GET_FLAG}; return sendToDetector(F_SET_DAC, args); } @@ -320,7 +311,7 @@ void Module::setDAC(int val, dacIndex index, bool mV) { } bool Module::getPowerChip() { - int arg = -1; + int arg = GET_FLAG; return sendToDetector(F_POWER_CHIP, arg); } @@ -640,17 +631,16 @@ std::string Module::printReceiverConfiguration() { } bool Module::getTenGiga() { - int arg = -1; + int arg = GET_FLAG; return static_cast(sendToDetector(F_ENABLE_TEN_GIGA, arg)); } void Module::setTenGiga(bool value) { int arg = static_cast(value); - int retval = -1; - sendToDetector(F_ENABLE_TEN_GIGA, arg, retval); + auto retval = sendToDetector(F_ENABLE_TEN_GIGA, arg); sendToDetectorStop(F_ENABLE_TEN_GIGA, arg); arg = retval; - if (shm()->useReceiverFlag && arg != -1) { + if (shm()->useReceiverFlag && arg != GET_FLAG) { sendToReceiver(F_ENABLE_RECEIVER_TEN_GIGA, arg); } } @@ -769,9 +759,8 @@ int Module::getReceiverPort() const { return shm()->rxTCPPort; } int Module::setReceiverPort(int port_number) { if (port_number >= 0 && port_number != shm()->rxTCPPort) { if (shm()->useReceiverFlag) { - int retval = -1; - sendToReceiver(F_SET_RECEIVER_PORT, port_number, retval); - shm()->rxTCPPort = retval; + shm()->rxTCPPort = + sendToReceiver(F_SET_RECEIVER_PORT, port_number); } else { shm()->rxTCPPort = port_number; } @@ -780,7 +769,7 @@ int Module::setReceiverPort(int port_number) { } int Module::getReceiverFifoDepth() { - int arg = -1; + int arg = GET_FLAG; return sendToReceiver(F_SET_RECEIVER_FIFO_DEPTH, arg); } @@ -815,7 +804,7 @@ void Module::setPartialFramesPadding(bool padding) { } int64_t Module::getReceiverUDPSocketBufferSize() const { - int64_t arg = -1; + int64_t arg = GET_FLAG; return sendToReceiver(F_RECEIVER_UDP_SOCK_BUF_SIZE, arg); } @@ -828,7 +817,7 @@ void Module::setReceiverUDPSocketBufferSize(int64_t udpsockbufsize) { } bool Module::getReceiverLock() { - int arg = -1; + int arg = GET_FLAG; return static_cast(sendToReceiver(F_LOCK_RECEIVER, arg)); } @@ -954,7 +943,7 @@ void Module::setReceiverStreamingFrequency(int freq) { } int Module::getReceiverStreamingTimer() { - int arg = -1; + int arg = GET_FLAG; return sendToReceiver(F_RECEIVER_STREAMING_TIMER, arg); } @@ -1001,7 +990,7 @@ void Module::setClientStreamingIP(const sls::IpAddr ip) { // Eiger Specific int Module::getDynamicRange() { - return sendToDetector(F_SET_DYNAMIC_RANGE, -1); + return sendToDetector(F_SET_DYNAMIC_RANGE, GET_FLAG); } void Module::setDynamicRange(int n) { @@ -1120,7 +1109,7 @@ void Module::setOverFlowMode(const bool enable) { } bool Module::getFlippedDataX() { - return sendToReceiver(F_SET_FLIPPED_DATA_RECEIVER, -1); + return sendToReceiver(F_SET_FLIPPED_DATA_RECEIVER, GET_FLAG); } void Module::setFlippedDataX(bool value) { @@ -1191,7 +1180,7 @@ int64_t Module::getMeasuredSubFramePeriod() const { } bool Module::getActivate() { - int arg = -1; + int arg = GET_FLAG; auto retval = sendToDetector(F_ACTIVATE, arg); auto retval2 = sendToDetectorStop(F_ACTIVATE, arg); if (retval != retval2) { @@ -1222,7 +1211,7 @@ void Module::setDeactivatedRxrPaddingMode(bool padding) { } bool Module::getCounterBit() { - int arg = -1; + int arg = GET_FLAG; return (!static_cast(sendToDetector(F_SET_COUNTER_BIT, arg))); } @@ -1257,7 +1246,7 @@ void Module::setQuad(const bool enable) { // Jungfrau Specific int Module::getThresholdTemperature() { - int arg = -1; + int arg = GET_FLAG; auto retval = sendToDetectorStop(F_THRESHOLD_TEMP, arg); if (retval != 0) { retval /= 1000; @@ -1275,7 +1264,7 @@ void Module::setThresholdTemperature(int val) { } bool Module::getTemperatureControl() { - int arg = -1; + int arg = GET_FLAG; return static_cast(sendToDetectorStop(F_TEMP_CONTROL, arg)); } @@ -1284,7 +1273,7 @@ void Module::setTemperatureControl(bool val) { } int Module::getTemperatureEvent() { - int arg = -1; + int arg = GET_FLAG; return sendToDetectorStop(F_TEMP_EVENT, arg); } @@ -1294,7 +1283,7 @@ void Module::resetTemperatureEvent() { } bool Module::getAutoComparatorDisableMode() { - int arg = -1; + int arg = GET_FLAG; return static_cast(sendToDetector(F_AUTO_COMP_DISABLE, arg)); } @@ -1311,7 +1300,7 @@ void Module::setNumberOfAdditionalStorageCells(int value) { } int Module::getStorageCellStart() { - int arg = -1; + int arg = GET_FLAG; return sendToDetector(F_STORAGE_CELL_START, arg); } @@ -1696,7 +1685,7 @@ void Module::setReadoutMode(const slsDetectorDefs::readoutMode mode) { } int Module::getExternalSamplingSource() { - return setExternalSamplingSource(-1); + return setExternalSamplingSource(GET_FLAG); } int Module::setExternalSamplingSource(int value) { @@ -1704,7 +1693,7 @@ int Module::setExternalSamplingSource(int value) { } bool Module::getExternalSampling() { - int arg = -1; + int arg = GET_FLAG; return sendToDetector(F_EXTERNAL_SAMPLING, arg); } @@ -1746,7 +1735,7 @@ void Module::setDigitalIODelay(uint64_t pinMask, int delay) { } bool Module::getLEDEnable() { - int arg = -1; + int arg = GET_FLAG; return static_cast(sendToDetector(F_LED, arg)); } @@ -1773,7 +1762,7 @@ void Module::setPattern(const std::string &fname) { } uint64_t Module::getPatternIOControl() { - int64_t arg = -1; + int64_t arg = GET_FLAG; return sendToDetector(F_SET_PATTERN_IO_CONTROL, arg); } @@ -1782,7 +1771,7 @@ void Module::setPatternIOControl(uint64_t word) { } uint64_t Module::getPatternClockControl() { - int64_t arg = -1; + int64_t arg = GET_FLAG; return sendToDetector(F_SET_PATTERN_CLOCK_CONTROL, arg); } @@ -1791,7 +1780,8 @@ void Module::setPatternClockControl(uint64_t word) { } uint64_t Module::getPatternWord(int addr) { - uint64_t args[]{static_cast(addr), static_cast(-1)}; + uint64_t args[]{static_cast(addr), + static_cast(GET_FLAG)}; return sendToDetector(F_SET_PATTERN_WORD, args); } @@ -1801,7 +1791,7 @@ void Module::setPatternWord(int addr, uint64_t word) { } std::array Module::getPatternLoopAddresses(int level) { - int args[]{level, -1, -1}; + int args[]{level, GET_FLAG, GET_FLAG}; std::array retvals{}; sendToDetector(F_SET_PATTERN_LOOP_ADDRESSES, args, retvals); return retvals; @@ -1814,7 +1804,7 @@ void Module::setPatternLoopAddresses(int level, int start, int stop) { } int Module::getPatternLoopCycles(int level) { - int args[]{level, -1}; + int args[]{level, GET_FLAG}; return sendToDetector(F_SET_PATTERN_LOOP_CYCLES, args); } @@ -1824,7 +1814,7 @@ void Module::setPatternLoopCycles(int level, int n) { } int Module::getPatternWaitAddr(int level) { - int args[]{level, -1}; + int args[]{level, GET_FLAG}; return sendToDetector(F_SET_PATTERN_WAIT_ADDR, args); } @@ -1834,7 +1824,8 @@ void Module::setPatternWaitAddr(int level, int addr) { } uint64_t Module::getPatternWaitTime(int level) { - uint64_t args[]{static_cast(level), static_cast(-1)}; + uint64_t args[]{static_cast(level), + static_cast(GET_FLAG)}; return sendToDetector(F_SET_PATTERN_WAIT_TIME, args); } @@ -2069,7 +2060,7 @@ int Module::setStopPort(int port_number) { } bool Module::getLockDetector() { - int arg = -1; + int arg = GET_FLAG; return static_cast(sendToDetector(F_LOCK_SERVER, arg)); } @@ -2618,10 +2609,6 @@ void Module::updateRateCorrection() { void Module::setThresholdEnergyAndSettings(int e_eV, detectorSettings isettings, bool trimbits) { - // if settings provided, use that, else use the shared memory variable - detectorSettings is = - ((isettings != GET_SETTINGS) ? isettings : getSettings()); - // verify e_eV exists in trimEneregies[] if (shm()->trimEnergies.empty() || (e_eV < shm()->trimEnergies.front()) || (e_eV > shm()->trimEnergies.back())) { @@ -2636,7 +2623,7 @@ void Module::setThresholdEnergyAndSettings(int e_eV, detectorSettings isettings, sls_detector_module myMod{shm()->myDetectorType}; if (!interpolate) { - std::string settingsfname = getTrimbitFilename(is, e_eV); + std::string settingsfname = getTrimbitFilename(isettings, e_eV); LOG(logDEBUG1) << "Settings File is " << settingsfname; myMod = readSettingsFile(settingsfname, trimbits); } else { @@ -2649,8 +2636,8 @@ void Module::setThresholdEnergyAndSettings(int e_eV, detectorSettings isettings, break; } } - std::string settingsfname1 = getTrimbitFilename(is, trim1); - std::string settingsfname2 = getTrimbitFilename(is, trim2); + std::string settingsfname1 = getTrimbitFilename(isettings, trim1); + std::string settingsfname2 = getTrimbitFilename(isettings, trim2); LOG(logDEBUG1) << "Settings Files are " << settingsfname1 << " and " << settingsfname2; auto myMod1 = readSettingsFile(settingsfname1, trimbits); @@ -2665,10 +2652,10 @@ void Module::setThresholdEnergyAndSettings(int e_eV, detectorSettings isettings, linearInterpolation(e_eV, trim1, trim2, myMod1.tau, myMod2.tau); } - myMod.reg = is; + myMod.reg = isettings; myMod.eV = e_eV; setModule(myMod, trimbits); - if (getSettings() != is) { + if (getSettings() != isettings) { throw RuntimeError("setThresholdEnergyAndSettings: Could not set " "settings in detector"); } diff --git a/slsDetectorSoftware/src/Module.h b/slsDetectorSoftware/src/Module.h index 96e744d37..58a5cf9c9 100644 --- a/slsDetectorSoftware/src/Module.h +++ b/slsDetectorSoftware/src/Module.h @@ -293,8 +293,8 @@ class Module : public virtual slsDetectorDefs { int64_t getSubDeadTime(); void setSubDeadTime(int64_t value); int getThresholdEnergy(); - void setThresholdEnergy(int e_eV, detectorSettings isettings = GET_SETTINGS, - bool trimbits = true); + void setThresholdEnergy(int e_eV, detectorSettings isettings, + bool trimbits); std::string getSettingsDir(); std::string setSettingsDir(const std::string &dir); bool getParallelMode(); diff --git a/slsReceiverSoftware/src/ClientInterface.cpp b/slsReceiverSoftware/src/ClientInterface.cpp index 65ce7e4c3..aff796209 100644 --- a/slsReceiverSoftware/src/ClientInterface.cpp +++ b/slsReceiverSoftware/src/ClientInterface.cpp @@ -1088,8 +1088,7 @@ int ClientInterface::set_flipped_data(Interface &socket) { } int ClientInterface::set_file_format(Interface &socket) { - fileFormat f = GET_FILE_FORMAT; - socket.Receive(f); + auto f = socket.Receive(); if (f < 0 || f > NUM_FILE_FORMATS) { throw RuntimeError("Invalid file format: " + std::to_string(f)); } diff --git a/slsSupportLib/include/sls_detector_defs.h b/slsSupportLib/include/sls_detector_defs.h index 373f0707f..203e0f132 100644 --- a/slsSupportLib/include/sls_detector_defs.h +++ b/slsSupportLib/include/sls_detector_defs.h @@ -50,7 +50,6 @@ /** maximum unit size of program sent to detector */ #define MAX_FPGAPROGRAMSIZE (2 * 1024 * 1024) -/** get flag form most functions */ #define GET_FLAG -1 #define DEFAULT_DET_MAC "00:aa:bb:cc:dd:ee" @@ -73,7 +72,6 @@ class slsDetectorDefs { /** Type of the detector */ enum detectorType { - GET_DETECTOR_TYPE = -1, GENERIC, EIGER, GOTTHARD, @@ -85,20 +83,17 @@ class slsDetectorDefs { }; /** return values */ - enum { - OK, /**< function succeeded */ - FAIL /**< function failed */ - }; + enum { OK, FAIL }; /** staus mask */ enum runStatus { - IDLE, /**< detector ready to start acquisition - no data in memory */ - ERROR, /**< error i.e. normally fifo full */ - WAITING, /**< waiting for trigger or gate signal */ - RUN_FINISHED, /**< acquisition not running but data in memory */ - TRANSMITTING, /**< acquisition running and data in memory */ - RUNNING, /**< acquisition running, no data in memory */ - STOPPED /**< acquisition stopped externally */ + IDLE, + ERROR, + WAITING, + RUN_FINISHED, + TRANSMITTING, + RUNNING, + STOPPED }; /** @@ -121,22 +116,19 @@ class slsDetectorDefs { */ typedef struct { - uint64_t frameNumber; /**< is the frame number */ - uint32_t expLength; /**< is the subframe number (32 bit eiger) or real - time exposure time in 100ns (others) */ - uint32_t packetNumber; /**< is the packet number */ - uint64_t bunchId; /**< is the bunch id from beamline */ - uint64_t timestamp; /**< is the time stamp with 10 MHz clock */ - uint16_t modId; /**< is the unique module id (unique even for left, - right, top, bottom) */ - uint16_t row; /**< is the row index in the complete detector system */ - uint16_t - column; /**< is the column index in the complete detector system */ - uint16_t reserved; /**< is reserved */ - uint32_t debug; /**< is for debugging purposes */ - uint16_t roundRNumber; /**< is the round robin set number */ - uint8_t detType; /**< is the detector type see :: detectorType */ - uint8_t version; /**< is the version number of this structure format */ + uint64_t frameNumber; + uint32_t expLength; + uint32_t packetNumber; + uint64_t bunchId; + uint64_t timestamp; + uint16_t modId; + uint16_t row; + uint16_t column; + uint16_t reserved; + uint32_t debug; + uint16_t roundRNumber; + uint8_t detType; + uint8_t version; } sls_detector_header; #ifdef __cplusplus @@ -149,37 +141,27 @@ class slsDetectorDefs { }; #endif enum frameDiscardPolicy { - GET_FRAME_DISCARD_POLICY = -1, /**< to get the missing packet mode */ - NO_DISCARD, /**< pad incomplete packets with -1, default mode */ - DISCARD_EMPTY_FRAMES, /**< discard incomplete frames, fastest mode, save - space, not suitable for multiple modules */ - DISCARD_PARTIAL_FRAMES, /**< ignore missing packets, must check with - packetsMask for data integrity, fast mode and - suitable for multiple modules */ + NO_DISCARD, + DISCARD_EMPTY_FRAMES, + DISCARD_PARTIAL_FRAMES, NUM_DISCARD_POLICIES }; - enum fileFormat { - GET_FILE_FORMAT = -1, /**< the receiver will return its file format */ - BINARY, /**< binary format */ - HDF5, /**< hdf5 format */ - NUM_FILE_FORMATS - }; + enum fileFormat { BINARY, HDF5, NUM_FILE_FORMATS }; /** @short structure for a region of interest xmin,xmax,ymin,ymax define the limits of the region */ - #ifdef __cplusplus struct ROI { - int xmin{-1}; /**< is the roi xmin (in channel number) */ - int xmax{-1}; /**< is the roi xmax (in channel number)*/ + int xmin{-1}; + int xmax{-1}; } __attribute__((packed)); #else typedef struct { - int xmin; /**< is the roi xmin (in channel number) */ - int xmax; /**< is the roi xmax (in channel number)*/ + int xmin; + int xmax; } ROI; #endif @@ -191,10 +173,7 @@ typedef struct { /** dimension indexes */ - enum dimension { - X = 0, /**< X dimension */ - Y = 1 /**< Y dimension */ - }; + enum dimension { X, Y }; #ifdef __cplusplus struct xy { @@ -219,12 +198,11 @@ typedef struct { communication mode using external signals */ enum timingMode { - GET_TIMING_MODE = -1, /**