diff --git a/slsDetectorServers/eigerDetectorServer/Beb.c b/slsDetectorServers/eigerDetectorServer/Beb.c index 90512c7b1..ab602b475 100644 --- a/slsDetectorServers/eigerDetectorServer/Beb.c +++ b/slsDetectorServers/eigerDetectorServer/Beb.c @@ -1251,20 +1251,20 @@ int Beb_GetNextFrameNumber(uint64_t *retval, int tengigaEnable) { else { uint64_t left10g = - Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_1G_LEFT_MSB_OFST); - temp = Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_1G_LEFT_LSB_OFST); + Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_10G_LEFT_MSB_OFST); + temp = Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_10G_LEFT_LSB_OFST); left10g = ((left10g << 32) | temp) >> 16; ++left10g; // increment for firmware uint64_t right10g = - Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_1G_LEFT_MSB_OFST); - temp = Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_1G_LEFT_LSB_OFST); + Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_10G_LEFT_MSB_OFST); + temp = Beb_Read32(csp0base, UDP_HEADER_GET_FNUM_10G_LEFT_LSB_OFST); right10g = ((right10g << 32) | temp) >> 16; Beb_close(fd, csp0base); ++right10g; // increment for firmware if (left10g != right10g) { - LOG(logERROR, ("Retrieved inconsistent frame numbers from `0g left " + LOG(logERROR, ("Retrieved inconsistent frame numbers from 10g left " "%llu and right %llu\n", (long long int)left10g, (long long int)right10g)); *retval = (left10g > right10g) diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index 025370bf7..94b4630cb 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -783,6 +783,25 @@ void Detector::startDetectorReadout() { void Detector::stopDetector(Positions pos) { pimpl->Parallel(&Module::stopAcquisition, pos); + + // validate consistent frame numbers + switch (getDetectorType().squash()) { + case defs::EIGER: + case defs::JUNGFRAU: + case defs::MOENCH: + case defs::CHIPTESTBOARD: { + auto res = getNextFrameNumber(pos); + if (!res.equal()) { + uint64_t maxVal = 0; + for (auto it : res) { + maxVal = std::max(maxVal, it); + } + setNextFrameNumber(maxVal + 1); + } + } break; + default: + break; + } } Result Detector::getDetectorStatus(Positions pos) const { @@ -1563,7 +1582,6 @@ std::vector Detector::getGainModeList() const { return std::vector{ defs::DYNAMIC, defs::FORCE_SWITCH_G1, defs::FORCE_SWITCH_G2, defs::FIX_G1, defs::FIX_G2, defs::FIX_G0}; - break; default: throw RuntimeError("Gain mode is not implemented for this detector."); }