diff --git a/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c index adbb07e8d..d91f32b25 100644 --- a/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/ctbDetectorServer/slsDetectorFunctionList.c @@ -554,7 +554,7 @@ void setupDetector() { // clear roi { int ret = OK, retvalsize = 0; - setROI(0, rois, &ret, &retvalsize); + setROI(0, rois, &retvalsize, &ret); } } @@ -617,6 +617,7 @@ int getChannels() { } if (digitalEnable) nchans += NCHAN_DIGITAL; + FILE_LOG(logINFO, ("\tNumber of Channels calculated: %d\n", nchans)) return nchans; } @@ -674,13 +675,13 @@ ROI* setROI(int n, ROI arg[], int *retvalsize, int *ret) { int iroi = 0; // for every roi for (iroi = 0; iroi < n; ++iroi) { - FILE_LOG(logINFO, ("\t%d: (%d, %d)\n", arg[iroi].xmin, arg[iroi].xmax)); + FILE_LOG(logINFO, ("\t%d: (%d, %d)\n", iroi, arg[iroi].xmin, arg[iroi].xmax)); // swap if xmin > xmax if (arg[iroi].xmin > arg[iroi].xmax) { int temp = arg[iroi].xmin; arg[iroi].xmin = arg[iroi].xmax; arg[iroi].xmax = temp; - FILE_LOG(logINFORED, ("\tCorrected %d: (%d, %d)\n", arg[iroi].xmin, arg[iroi].xmax)); + FILE_LOG(logINFORED, ("\tCorrected %d: (%d, %d)\n", iroi, arg[iroi].xmin, arg[iroi].xmax)); } int ich = 0; // for the roi specified diff --git a/slsDetectorServers/gotthardDetectorServer/gitInfo.txt b/slsDetectorServers/gotthardDetectorServer/gitInfo.txt index 5f19a6dae..b21c49227 100644 --- a/slsDetectorServers/gotthardDetectorServer/gitInfo.txt +++ b/slsDetectorServers/gotthardDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorPackage/slsDetectorServers/gotthardDetectorServer URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -Repsitory UUID: 9d9251293d1a0b5300b8d7191949cf01de1c7b81 -Revision: 21 +Repsitory UUID: 0765b330f116fd47b84c065d89789f4996573f23 +Revision: 24 Branch: refactor Last Changed Author: Dhanya_Thattil -Last Changed Rev: 4255 -Last Changed Date: 2019-01-15 10:22:16.000000002 +0100 ./.target-makefrag +Last Changed Rev: 4381 +Last Changed Date: 2019-03-06 13:42:29.000000002 +0100 ./.target-makefrag diff --git a/slsDetectorServers/gotthardDetectorServer/gitInfoGotthard.h b/slsDetectorServers/gotthardDetectorServer/gitInfoGotthard.h index 2ec106b03..00178b691 100644 --- a/slsDetectorServers/gotthardDetectorServer/gitInfoGotthard.h +++ b/slsDetectorServers/gotthardDetectorServer/gitInfoGotthard.h @@ -1,6 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" -#define GITREPUUID "9d9251293d1a0b5300b8d7191949cf01de1c7b81" +#define GITREPUUID "0765b330f116fd47b84c065d89789f4996573f23" #define GITAUTH "Dhanya_Thattil" -#define GITREV 0x4255 -#define GITDATE 0x20190115 +#define GITREV 0x4381 +#define GITDATE 0x20190306 #define GITBRANCH "refactor" diff --git a/slsDetectorServers/gotthardDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/gotthardDetectorServer/slsDetectorFunctionList.c index 7269d9562..817d08543 100644 --- a/slsDetectorServers/gotthardDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/gotthardDetectorServer/slsDetectorFunctionList.c @@ -1522,7 +1522,10 @@ int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t FILE_LOG(logINFO, ("\twaited %d loops to start\n", loop)); FILE_LOG(logINFO, ("\tWaiting for acquisition to end (frames left: %lld)\n", (long long int)getTimeLeft(FRAME_NUMBER))); - waitForAcquisitionFinish(); + // wait for status to be done + while(runBusy()){ + usleep(500); + } // set to previous parameters FILE_LOG(logINFO, ("\tSetting previous parameters:\n" diff --git a/slsDetectorServers/moenchDetectorServer/gitInfo.txt b/slsDetectorServers/moenchDetectorServer/gitInfo.txt index 0d7a5cb1b..4104822de 100644 --- a/slsDetectorServers/moenchDetectorServer/gitInfo.txt +++ b/slsDetectorServers/moenchDetectorServer/gitInfo.txt @@ -1,9 +1,9 @@ Path: slsDetectorPackage/slsDetectorServers/moenchDetectorServer URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -Repsitory UUID: 08bd2378f4956ea9a0b75381872854b3b129288f -Revision: 9 +Repsitory UUID: 0765b330f116fd47b84c065d89789f4996573f23 +Revision: 13 Branch: refactor Last Changed Author: Dhanya_Thattil -Last Changed Rev: 4372 -Last Changed Date: 2019-03-05 09:35:29.000000002 +0100 ./RegisterDefs.h +Last Changed Rev: 4381 +Last Changed Date: 2019-03-06 13:42:29.000000002 +0100 ./RegisterDefs.h diff --git a/slsDetectorServers/moenchDetectorServer/gitInfoMoench.h b/slsDetectorServers/moenchDetectorServer/gitInfoMoench.h index a8039ff72..00178b691 100644 --- a/slsDetectorServers/moenchDetectorServer/gitInfoMoench.h +++ b/slsDetectorServers/moenchDetectorServer/gitInfoMoench.h @@ -1,6 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" -#define GITREPUUID "08bd2378f4956ea9a0b75381872854b3b129288f" +#define GITREPUUID "0765b330f116fd47b84c065d89789f4996573f23" #define GITAUTH "Dhanya_Thattil" -#define GITREV 0x4372 -#define GITDATE 0x20190305 +#define GITREV 0x4381 +#define GITDATE 0x20190306 #define GITBRANCH "refactor" diff --git a/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c index 1107dd15f..1ed4daeb2 100644 --- a/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/moenchDetectorServer/slsDetectorFunctionList.c @@ -533,12 +533,12 @@ void setupDetector() { setTiming(DEFAULT_TIMING_MODE); // ensuring normal readout (only option for moench) - bus_w(addr, bus_r(addr) & (~CONFIG_DSBL_ANLG_OTPT_MSK) & (~CONFIG_ENBLE_DGTL_OTPT_MSK)); + bus_w(CONFIG_REG, bus_r(CONFIG_REG) & (~CONFIG_DSBL_ANLG_OTPT_MSK) & (~CONFIG_ENBLE_DGTL_OTPT_MSK)); // clear roi { int ret = OK, retvalsize = 0; - setROI(0, rois, &ret, &retvalsize); + setROI(0, rois, &retvalsize, &ret); } } @@ -600,6 +600,7 @@ int getChannels() { } if (digitalEnable) nchans += NCHAN_DIGITAL; + FILE_LOG(logINFO, ("\tNumber of Channels calculated: %d\n", nchans)) return nchans; } @@ -657,13 +658,13 @@ ROI* setROI(int n, ROI arg[], int *retvalsize, int *ret) { int iroi = 0; // for every roi for (iroi = 0; iroi < n; ++iroi) { - FILE_LOG(logINFO, ("\t%d: (%d, %d)\n", arg[iroi].xmin, arg[iroi].xmax)); + FILE_LOG(logINFO, ("\t%d: (%d, %d)\n", iroi, arg[iroi].xmin, arg[iroi].xmax)); // swap if xmin > xmax if (arg[iroi].xmin > arg[iroi].xmax) { int temp = arg[iroi].xmin; arg[iroi].xmin = arg[iroi].xmax; arg[iroi].xmax = temp; - FILE_LOG(logINFORED, ("\tCorrected %d: (%d, %d)\n", arg[iroi].xmin, arg[iroi].xmax)); + FILE_LOG(logINFORED, ("\tCorrected %d: (%d, %d)\n", iroi, arg[iroi].xmin, arg[iroi].xmax)); } int ich = 0; // for the roi specified diff --git a/slsDetectorServers/slsDetectorServer/AD9252.h b/slsDetectorServers/slsDetectorServer/AD9252.h index 580fd805e..db378113a 100755 --- a/slsDetectorServers/slsDetectorServer/AD9252.h +++ b/slsDetectorServers/slsDetectorServer/AD9252.h @@ -142,7 +142,7 @@ void AD9252_Set(int addr, int val) { codata = val + (addr << 8); FILE_LOG(logINFO, ("\tSetting ADC SPI Register. Wrote 0x%04x at 0x%04x\n", val, addr)); serializeToSPI(AD9252_Reg, codata, AD9252_CsMask, AD9252_ADC_NUMBITS, - AD9252_ClkMask, AD9252_DigMask, AD9252_DigOffset); + AD9252_ClkMask, AD9252_DigMask, AD9252_DigOffset, 0); } /** diff --git a/slsDetectorServers/slsDetectorServer/blackfin.h b/slsDetectorServers/slsDetectorServer/blackfin.h index 391ef06c2..604797148 100755 --- a/slsDetectorServers/slsDetectorServer/blackfin.h +++ b/slsDetectorServers/slsDetectorServer/blackfin.h @@ -168,7 +168,6 @@ int mapCSP0(void) { (long long unsigned int)CSP0BASE, (long long unsigned int)(CSP0BASE+MEM_SIZE))); FILE_LOG(logINFO, ("Status Register: %08x\n", bus_r(STATUS_REG))); - FILE_LOG(logINFO, ("looka t me Register: %08x\n", bus_r(LOOK_AT_ME_REG))); }else FILE_LOG(logINFO, ("Memory already mapped before\n")); return OK; diff --git a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c index 2b5679f47..4d9c4b9f4 100755 --- a/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/slsDetectorServer_funcs.c @@ -2193,11 +2193,29 @@ int send_update(int file_des) { if (n < 0) return printSocketReadError(); #endif - // #samples -#if defined(CHIPTESTBOARDD) || defined(MOENCHD) + // #samples, roi +#if defined(CHIPTESTBOARDD) || defined(MOENCHD) || defined(GOTTHARDD) i64 = setTimer(SAMPLES,GET_FLAG); n = sendData(file_des,&i64,sizeof(i64),INT64); if (n < 0) return printSocketReadError(); + + // roi + ROI* retval = NULL; + ROI arg[1]; + int ret = OK, nretval = 0; + retval = setROI(-1, arg, &nretval, &ret); + //retvalsize could be swapped during sendData + int nretval1 = nretval; + sendData(file_des, &nretval1, sizeof(nretval1), INT32); + int iloop = 0; + for(iloop = 0; iloop < nretval; ++iloop) { + sendData(file_des, &retval[iloop].xmin, sizeof(int), INT32); + sendData(file_des, &retval[iloop].xmax, sizeof(int), INT32); + sendData(file_des, &retval[iloop].ymin, sizeof(int), INT32); + sendData(file_des, &retval[iloop].ymax, sizeof(int), INT32); + } + + #endif if (lockStatus == 0) { diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index 7f9b79593..a46414d0c 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -293,7 +293,6 @@ void slsDetector::setDetectorSpecificParameters(detectorType type, detParameterL list.nGappixelsY = 0; break; case CHIPTESTBOARD: - case MOENCH: list.nChanX = 36; list.nChanY = 1; list.nChipX = 1; @@ -302,6 +301,16 @@ void slsDetector::setDetectorSpecificParameters(detectorType type, detParameterL list.dynamicRange = 16; list.nGappixelsX = 0; list.nGappixelsY = 0; + break; + case MOENCH: + list.nChanX = 32; + list.nChanY = 1; + list.nChipX = 1; + list.nChipY = 1; + list.nDacs = 8; + list.dynamicRange = 16; + list.nGappixelsX = 0; + list.nGappixelsY = 0; break; case EIGER: list.nChanX = 256; @@ -461,9 +470,9 @@ void slsDetector::initializeDetectorStructure(detectorType type) { thisDetector->gappixels * thisDetector->nGappixels[Y]) * thisDetector->dynamicRange / 8; - // special for jctb + // update #nchans and databytes, as it depends on #samples, roi, readoutflags (ctb only) if (thisDetector->myDetectorType == CHIPTESTBOARD || thisDetector->myDetectorType == MOENCH) { - getTotalNumberOfChannels(); + updateTotalNumberOfChannels(); } /** calculates the memory offsets for @@ -740,42 +749,44 @@ std::string slsDetector::getDetectorTypeAsString() { } int slsDetector::getTotalNumberOfChannels() { - FILE_LOG(logDEBUG1) << "Get total number of channels"; - - if (thisDetector->myDetectorType == CHIPTESTBOARD || thisDetector->myDetectorType == MOENCH) { - if (thisDetector->roFlags & DIGITAL_ONLY) { - thisDetector->nChan[X] = 4; - } else if (thisDetector->roFlags & ANALOG_AND_DIGITAL) { - thisDetector->nChan[X] = 36; - } else { - thisDetector->nChan[X] = 32; - } - if (thisDetector->nChan[X] >= 32) { - if (thisDetector->nROI > 0) { - thisDetector->nChan[X] -= 32; - for (int iroi = 0; iroi < thisDetector->nROI; ++iroi) { - thisDetector->nChan[X] += - thisDetector->roiLimits[iroi].xmax - - thisDetector->roiLimits[iroi].xmin + 1; - } - } - } - thisDetector->nChans = thisDetector->nChan[X]; - thisDetector->dataBytes = thisDetector->nChans * thisDetector->nChips * 2 * thisDetector->timerValue[SAMPLES]; - } - - FILE_LOG(logDEBUG1) << "Total number of channels: " << thisDetector->nChans * thisDetector->nChips << ". Data bytes: " << thisDetector->dataBytes; - return thisDetector->nChans * thisDetector->nChips; } +void slsDetector::updateTotalNumberOfChannels() { + if (thisDetector->myDetectorType == CHIPTESTBOARD || thisDetector->myDetectorType == MOENCH) { + + // default number of channels + thisDetector->nChan[X] = 32; + + // if roi, recalculate #nchanX + if (thisDetector->nROI > 0) { + thisDetector->nChan[X] = 0; + for (int iroi = 0; iroi < thisDetector->nROI; ++iroi) { + thisDetector->nChan[X] += + (thisDetector->roiLimits[iroi].xmax - + thisDetector->roiLimits[iroi].xmin + 1); + } + } + + // add digital signals depending on readout flags + if (thisDetector->myDetectorType == CHIPTESTBOARD && + (thisDetector->roFlags & DIGITAL_ONLY || thisDetector->roFlags & ANALOG_AND_DIGITAL)) { + thisDetector->nChan[X] += 4; + } + + // recalculate derived parameters chans and databytes + thisDetector->nChans = thisDetector->nChan[X]; + thisDetector->dataBytes = thisDetector->nChans * thisDetector->nChips * + (thisDetector->dynamicRange / 8) * thisDetector->timerValue[SAMPLES]; + FILE_LOG(logDEBUG1) << "Number of Channels:" << thisDetector->nChans << " Databytes: " << thisDetector->dataBytes; + } +} + int slsDetector::getTotalNumberOfChannels(dimension d) { - getTotalNumberOfChannels(); return thisDetector->nChan[d] * thisDetector->nChip[d]; } int slsDetector::getTotalNumberOfChannelsInclGapPixels(dimension d) { - getTotalNumberOfChannels(); return (thisDetector->nChan[d] * thisDetector->nChip[d] + thisDetector->gappixels * thisDetector->nGappixels[d]); } @@ -1111,7 +1122,31 @@ int slsDetector::updateDetectorNoWait(sls::ClientSocket &client) { if (i64 >= 0) { thisDetector->timerValue[SAMPLES] = i64; } - getTotalNumberOfChannels(); + } + + // roi + if (thisDetector->myDetectorType == CHIPTESTBOARD || thisDetector->myDetectorType == MOENCH|| thisDetector->myDetectorType == GOTTHARD) { + n += client.receiveData(&i32, sizeof(i32)); + thisDetector->nROI = i32; + for (int i = 0; i < thisDetector->nROI; ++i) { + n += client.receiveData(&i32, sizeof(i32)); + thisDetector->roiLimits[i].xmin = i32; + n += client.receiveData(&i32, sizeof(i32)); + thisDetector->roiLimits[i].xmax = i32; + n += client.receiveData(&i32, sizeof(i32)); + thisDetector->roiLimits[i].ymin = i32; + n += client.receiveData(&i32, sizeof(i32)); + thisDetector->roiLimits[i].xmax = i32; + } + // moench (send to processor) + if (thisDetector->myDetectorType == MOENCH) { + sendROIToProcessor(); + } + } + + // update #nchans and databytes, as it depends on #samples, roi, readoutflags (ctb only) + if (thisDetector->myDetectorType == CHIPTESTBOARD || thisDetector->myDetectorType == MOENCH) { + updateTotalNumberOfChannels(); } @@ -1906,6 +1941,11 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t) { } else { FILE_LOG(logDEBUG1) << getTimerType(index) << ": " << retval; thisDetector->timerValue[index] = retval; + // update #nchans and databytes, as it depends on #samples, roi, readoutflags (ctb only) + if (index == SAMPLES && + (thisDetector->myDetectorType == CHIPTESTBOARD || thisDetector->myDetectorType == MOENCH)) { + updateTotalNumberOfChannels(); + } if (ret == FORCE_UPDATE) { client.close(); ret = updateDetector(); @@ -2084,6 +2124,7 @@ int slsDetector::setDynamicRange(int n) { } } + // only for eiger // setting dr consequences on databytes shm // (a get can also change timer value, hence check difference) if (olddr != thisDetector->dynamicRange) { @@ -2094,9 +2135,6 @@ int slsDetector::setDynamicRange(int n) { (thisDetector->nChip[Y] * thisDetector->nChan[Y] + thisDetector->gappixels * thisDetector->nGappixels[Y]) * retval / 8; - if (thisDetector->myDetectorType == CHIPTESTBOARD || thisDetector->myDetectorType == MOENCH) { - getTotalNumberOfChannels(); - } FILE_LOG(logDEBUG1) << "Data bytes " << thisDetector->dataBytes; FILE_LOG(logDEBUG1) << "Data bytes including gap pixels" << thisDetector->dataBytesInclGapPixels; } @@ -2248,6 +2286,10 @@ int slsDetector::setReadOutFlags(readOutFlags flag) { } else { FILE_LOG(logDEBUG1) << "Readout flag: " << retval; thisDetector->roFlags = (readOutFlags)retval; + // update #nchans and databytes, as it depends on #samples, roi, readoutflags (ctb only) + if (thisDetector->myDetectorType == CHIPTESTBOARD) { + updateTotalNumberOfChannels(); + } } } if (ret == FORCE_UPDATE) { @@ -3114,6 +3156,17 @@ int slsDetector::setCounterBit(int i) { return retval; } +int slsDetector::sendROIToProcessor() { + std::ostringstream os; + os << "[" << thisDetector->roiLimits[0].xmin << ", " << thisDetector->roiLimits[0].xmax << ", " << + thisDetector->roiLimits[0].ymin << ", " << thisDetector->roiLimits[0].ymax << "]"; + std::string sroi = os.str(); + std::string result = setAdditionalJsonParameter("roi", sroi); + if (result == sroi) + return OK; + return FAIL; +} + int slsDetector::setROI(int n, ROI roiLimits[]) { // sort ascending order for (int i = 0; i < n; ++i) { @@ -3138,35 +3191,29 @@ int slsDetector::setROI(int n, ROI roiLimits[]) { int ret = sendROI(n, roiLimits); if(ret==FAIL) setErrorMask((getErrorMask())|(COULDNOT_SET_ROI)); + // moench (send to processor) + if (thisDetector->myDetectorType == MOENCH) { + sendROIToProcessor(); + } + // update #nchans and databytes, as it depends on #samples, roi, readoutflags (ctb only) if (thisDetector->myDetectorType == CHIPTESTBOARD || thisDetector->myDetectorType == MOENCH) { - getTotalNumberOfChannels(); - - // moench (send to processor) - if (thisDetector->myDetectorType == MOENCH) { - std::ostringstream os; - os << "[" << roiLimits[0].xmin << ", " << roiLimits[0].xmax << ", " << - roiLimits[0].ymin << ", " << roiLimits[0].ymax << "]"; - std::string sroi = os.str(); - std::string result = setAdditionalJsonParameter("roi", sroi); - if (result == sroi) - return OK; - return FAIL; - } + updateTotalNumberOfChannels(); } return ret; } slsDetectorDefs::ROI *slsDetector::getROI(int &n) { - sendROI(-1, nullptr); - n = thisDetector->nROI; + sendROI(-1, nullptr); + n = thisDetector->nROI; + // moench - get json header(due to different clients, diff shm) (get roi is from detector: updated anyway) + if (thisDetector->myDetectorType == MOENCH) { + getAdditionalJsonHeader(); + } + // update #nchans and databytes, as it depends on #samples, roi, readoutflags (ctb only) if (thisDetector->myDetectorType == CHIPTESTBOARD || thisDetector->myDetectorType == MOENCH) { - getTotalNumberOfChannels(); - // moench - get json header(due to different clients, diff shm) (get roi is from detector: updated anyway) - if (thisDetector->myDetectorType == MOENCH) { - getAdditionalJsonHeader(); - } + updateTotalNumberOfChannels(); } - return thisDetector->roiLimits; + return thisDetector->roiLimits; } int slsDetector::getNRoi() { diff --git a/slsDetectorSoftware/slsDetector/slsDetector.h b/slsDetectorSoftware/slsDetector/slsDetector.h index a2bfb6911..74239311e 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.h +++ b/slsDetectorSoftware/slsDetector/slsDetector.h @@ -377,13 +377,18 @@ public: */ int setDetectorType(detectorType type=GET_DETECTOR_TYPE); - /** * Returns the total number of channels from shared memory * @returns the total number of channels */ int getTotalNumberOfChannels(); + /** + * Update total number of channels (chiptestboard or moench) + * depending on the number of samples, roi, readout flags(ctb) + */ + void updateTotalNumberOfChannels(); + /** * Returns the total number of channels in dimension d from shared memory * @param d dimension d @@ -1067,6 +1072,12 @@ public: */ int setCounterBit(int i = -1); + /** + * send ROI to processor (moench only) + * @returns OK or FAIL + */ + int sendROIToProcessor(); + /** * Set ROI (Gotthard) * At the moment only one set allowed diff --git a/slsReceiverSoftware/include/GeneralData.h b/slsReceiverSoftware/include/GeneralData.h index 43574d7e9..28e26969c 100644 --- a/slsReceiverSoftware/include/GeneralData.h +++ b/slsReceiverSoftware/include/GeneralData.h @@ -213,7 +213,7 @@ public: * @param s number of samples * @param t tengiga enable */ - virtual void setImageSize(std::vector i, int s, bool t, slsDetectorDefs::readOutFlags f = slsDetectorDefs::GET_READOUT_FLAGS) { + virtual void setImageSize(std::vector r, int s, bool t, slsDetectorDefs::readOutFlags f = slsDetectorDefs::GET_READOUT_FLAGS) { cprintf(RED,"setImageSize is a generic function that should be overloaded by a derived class\n"); }; @@ -555,15 +555,18 @@ public: * @param s number of samples * @param t tengiga enable */ - void setImageSize(std::vector i, int s, bool t, slsDetectorDefs::readOutFlags f = slsDetectorDefs::GET_READOUT_FLAGS) { + void setImageSize(std::vector r, int s, bool t, slsDetectorDefs::readOutFlags f = slsDetectorDefs::GET_READOUT_FLAGS) { int nchans = 0; if (f != slsDetectorDefs::GET_READOUT_FLAGS) { // analog channels if (f == slsDetectorDefs::NORMAL_READOUT || f & slsDetectorDefs::ANALOG_AND_DIGITAL) { nchans += NCHAN_ANALOG; // if roi - if (i.size()) { - nchans = abs(i[0].xmax - i[0].xmin); + if (r.size()) { + nchans = 0; + for (auto &roi : r) { + nchans += (roi.xmax - roi.xmin + 1); + } } } // digital channels @@ -575,18 +578,20 @@ public: nPixelsY = s; // 10G if (t) { - // fixed values - dataSize = 0; // FIXME: fix when firmware written - packetSize = headerSizeinPacket + dataSize; - packetsPerFrame = 0; // FIXME: fix when firmware written - imageSize = dataSize*packetsPerFrame; // FIXME: OR fix when firmware written - } + headerSizeinPacket = 22; + dataSize = 8192; + packetSize = headerSizeinPacket + dataSize; + imageSize = nPixelsX * nPixelsY * 2; + packetsPerFrame = ceil((double)imageSize / (double)packetSize); + standardheader = false; } // 1g udp (via fifo readout) else { - dataSize = UDP_PACKET_DATA_BYTES; - packetSize = headerSizeinPacket + dataSize; - imageSize = nchans * NUM_BYTES_PER_PIXEL * s; - packetsPerFrame = ceil((double)imageSize / (double)UDP_PACKET_DATA_BYTES); + headerSizeinPacket = sizeof(slsDetectorDefs::sls_detector_header); + dataSize = UDP_PACKET_DATA_BYTES; + packetSize = headerSizeinPacket + dataSize; + imageSize = nPixelsX * nPixelsY * 2; + packetsPerFrame = ceil((double)imageSize / (double)UDP_PACKET_DATA_BYTES); + standardheader = true; } } @@ -658,12 +663,15 @@ private: * @param s number of samples * @param t tengiga enable */ - void setImageSize(std::vector i, int s, bool t, + void setImageSize(std::vector r, int s, bool t, slsDetectorDefs::readOutFlags f = slsDetectorDefs::GET_READOUT_FLAGS) { int nchans = NCHAN_ANALOG; // if roi - if (i.size()) { - nchans = abs(i[0].xmax - i[0].xmin); + if (r.size()) { + nchans = 0; + for (auto &roi : r) { + nchans += abs(roi.xmax - roi.xmin) + 1; + } } nPixelsX = nchans; diff --git a/slsReceiverSoftware/src/slsReceiverImplementation.cpp b/slsReceiverSoftware/src/slsReceiverImplementation.cpp index a94faa196..f4ffb5162 100644 --- a/slsReceiverSoftware/src/slsReceiverImplementation.cpp +++ b/slsReceiverSoftware/src/slsReceiverImplementation.cpp @@ -480,6 +480,9 @@ int slsReceiverImplementation::setReadOutFlags(const readOutFlags f) { flag.append("nooverflow "); FILE_LOG(logINFO) << "ReadoutFlags: " << flag; + if (myDetectorType == CHIPTESTBOARD) { + FILE_LOG (logINFO) << "Packets per Frame: " << (generalData->packetsPerFrame); + } return OK; } @@ -672,6 +675,7 @@ int slsReceiverImplementation::setROI(const std::vector i) } std::string message = sstm.str(); FILE_LOG(logINFO) << message; + FILE_LOG (logINFO) << "Packets per Frame: " << (generalData->packetsPerFrame); return OK; } @@ -844,6 +848,7 @@ int slsReceiverImplementation::setTenGigaEnable(const bool b) { return FAIL; } FILE_LOG(logINFO) << "Ten Giga: " << stringEnable(tengigaEnable); + FILE_LOG (logINFO) << "Packets per Frame: " << (generalData->packetsPerFrame); return OK; }