From b4d9a6a09d98c5afb065faf5a9795f28f4f43e11 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 17 May 2018 12:34:18 +0200 Subject: [PATCH] slsReceiver, slsDetector(eiger server), client: added sub period to receiver, fixed eiger subperiod updates to client, added subperiod and subexptime to users, fixed hdf5 warnings --- slsDetectorGui/gitInfo.txt | 17 +--- slsDetectorGui/include/gitInfoGui.h | 7 +- .../bin/eigerDetectorServer_developer | Bin 297671 -> 297671 bytes slsDetectorSoftware/gitInfo.txt | 17 +--- slsDetectorSoftware/slsDetector/gitInfoLib.h | 8 +- .../slsDetector/slsDetector.cpp | 15 ++- .../slsDetector/slsDetectorBase.h | 6 +- .../slsDetector/slsDetectorUsers.cpp | 19 ++++ .../slsDetector/slsDetectorUsers.h | 16 +++ .../slsDetectorServer_funcs.c | 6 ++ slsReceiverSoftware/gitInfo.txt | 17 +--- slsReceiverSoftware/include/BinaryFile.h | 6 +- .../include/BinaryFileStatic.h | 57 ++++++----- slsReceiverSoftware/include/DataProcessor.h | 6 +- slsReceiverSoftware/include/File.h | 27 ++++-- slsReceiverSoftware/include/HDF5File.h | 6 +- slsReceiverSoftware/include/HDF5FileStatic.h | 37 +++++-- .../include/UDPBaseImplementation.h | 15 +++ slsReceiverSoftware/include/UDPInterface.h | 13 +++ slsReceiverSoftware/include/gitInfoReceiver.h | 7 +- slsReceiverSoftware/src/BinaryFile.cpp | 11 ++- slsReceiverSoftware/src/DataProcessor.cpp | 4 +- slsReceiverSoftware/src/HDF5File.cpp | 12 ++- .../src/UDPBaseImplementation.cpp | 91 +++++++++++++----- .../src/UDPStandardImplementation.cpp | 2 +- .../src/slsReceiverTCPIPInterface.cpp | 6 ++ 26 files changed, 284 insertions(+), 144 deletions(-) diff --git a/slsDetectorGui/gitInfo.txt b/slsDetectorGui/gitInfo.txt index cd47a074f..4e2bb5792 100644 --- a/slsDetectorGui/gitInfo.txt +++ b/slsDetectorGui/gitInfo.txt @@ -1,18 +1,9 @@ Path: slsDetectorsPackage/slsDetectorGui URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -<<<<<<< HEAD -Repsitory UUID: ab06c33107ecfeb4741d49407903ff80286cf75b -Revision: 492 -Branch: developer -Last Changed Author: Anna_Bergamaschi -Last Changed Rev: 3731 -Last Changed Date: 2018-03-15 12:27:06.000000002 +0100 ./src/qTabMeasurement.cpp -======= -Repsitory UUID: fe2ba8621b33bc00f51c8cd4d33e98b7d4ebfa41 -Revision: 493 +Repsitory UUID: 51fd9ed423b7a8fb45a76b4f48316537c4fb0f5d +Revision: 505 Branch: developer Last Changed Author: Dhanya_Thattil -Last Changed Rev: 3747 -Last Changed Date: 2018-03-27 17:30:53.000000002 +0200 ./include/qTabMeasurement.h ->>>>>>> 7cd35f24b87501374fbaf45693a2adf16dfae3e3 +Last Changed Rev: 3818 +Last Changed Date: 2018-05-15 13:48:54.000000002 +0200 ./src/qTabSettings.cpp diff --git a/slsDetectorGui/include/gitInfoGui.h b/slsDetectorGui/include/gitInfoGui.h index fccb5d12c..f57d0eb74 100644 --- a/slsDetectorGui/include/gitInfoGui.h +++ b/slsDetectorGui/include/gitInfoGui.h @@ -1,7 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" - -#define GITREPUUID "fe2ba8621b33bc00f51c8cd4d33e98b7d4ebfa41" +#define GITREPUUID "51fd9ed423b7a8fb45a76b4f48316537c4fb0f5d" #define GITAUTH "Dhanya_Thattil" -#define GITREV 0x3747 -#define GITDATE 0x20180327 +#define GITREV 0x3818 +#define GITDATE 0x20180515 #define GITBRANCH "developer" diff --git a/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer_developer b/slsDetectorSoftware/eigerDetectorServer/bin/eigerDetectorServer_developer index e47c322608d3404f8f926fd23afab95eecb2b027..b98c544462d6ce6667e82a68298215f8ec2241ac 100755 GIT binary patch delta 26944 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 diff --git a/slsDetectorSoftware/gitInfo.txt b/slsDetectorSoftware/gitInfo.txt index 2a9dec6de..88fb04df0 100644 --- a/slsDetectorSoftware/gitInfo.txt +++ b/slsDetectorSoftware/gitInfo.txt @@ -1,18 +1,9 @@ Path: slsDetectorsPackage/slsDetectorSoftware URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -<<<<<<< HEAD -Repsitory UUID: ab06c33107ecfeb4741d49407903ff80286cf75b -Revision: 1846 -Branch: developer -Last Changed Author: Anna_Bergamaschi -Last Changed Rev: 3731 -Last Changed Date: 2018-03-15 12:30:34.000000002 +0100 ./threadFiles/ThreadPool.o -======= -Repsitory UUID: b8bdbf4da61f95b88893b02ddabc2491b16fa10f -Revision: 1852 +Repsitory UUID: 51fd9ed423b7a8fb45a76b4f48316537c4fb0f5d +Revision: 1906 Branch: developer Last Changed Author: Dhanya_Thattil -Last Changed Rev: 3746 -Last Changed Date: 2018-03-27 10:47:02.000000002 +0200 ./slsDetector/slsDetector.o ->>>>>>> 7cd35f24b87501374fbaf45693a2adf16dfae3e3 +Last Changed Rev: 3818 +Last Changed Date: 2018-05-17 10:41:55.000000002 +0200 ./slsDetector/slsDetector.o diff --git a/slsDetectorSoftware/slsDetector/gitInfoLib.h b/slsDetectorSoftware/slsDetector/gitInfoLib.h index 6e7baa985..315130b93 100644 --- a/slsDetectorSoftware/slsDetector/gitInfoLib.h +++ b/slsDetectorSoftware/slsDetector/gitInfoLib.h @@ -1,8 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" - -#define GITREPUUID "b8bdbf4da61f95b88893b02ddabc2491b16fa10f" +#define GITREPUUID "51fd9ed423b7a8fb45a76b4f48316537c4fb0f5d" #define GITAUTH "Dhanya_Thattil" -#define GITREV 0x3746 -#define GITDATE 0x20180327 - +#define GITREV 0x3818 +#define GITDATE 0x20180517 #define GITBRANCH "developer" diff --git a/slsDetectorSoftware/slsDetector/slsDetector.cpp b/slsDetectorSoftware/slsDetector/slsDetector.cpp index d4b3b2c71..f353cf50e 100644 --- a/slsDetectorSoftware/slsDetector/slsDetector.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetector.cpp @@ -4156,6 +4156,10 @@ int slsDetector::updateDetectorNoWait() { //retval=setSubFrameExposureTime(tns); n += controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); thisDetector->timerValue[SUBFRAME_ACQUISITION_TIME]=retval; + + //retval=setSubFramePeriod(tns); + n += controlSocket->ReceiveDataOnly( &retval,sizeof(int64_t)); + thisDetector->timerValue[SUBFRAME_PERIOD]=retval; } //retval=setPeriod(tns); @@ -4781,6 +4785,7 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t){ //send acquisiton time/period/subexptime/frame/cycles/samples to receiver if((index==FRAME_NUMBER)||(index==FRAME_PERIOD)||(index==CYCLES_NUMBER)|| (index==ACQUISITION_TIME) || (index==SUBFRAME_ACQUISITION_TIME) || + (index==SUBFRAME_PERIOD) || (index==SAMPLES_JCTB) || (index==STORAGE_CELL_NUMBER)){ string timername = getTimerType(index); if(ret != FAIL){ @@ -4802,7 +4807,7 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t){ #endif } #ifdef VERBOSE - // set period/exptime/subexptime + // set period/exptime/subexptime/subperiod else std::cout << "Setting/Getting " << timername << " " << index << " to/from receiver " << args[1] << std::endl; #endif @@ -4824,8 +4829,7 @@ int64_t slsDetector::setTimer(timerIndex index, int64_t t){ setErrorMask((getErrorMask())|(RECEIVER_ACQ_PERIOD_NOT_SET)); break; case SUBFRAME_ACQUISITION_TIME: - setErrorMask((getErrorMask())|(RECEIVER_TIMER_NOT_SET)); - break; + case SUBFRAME_PERIOD: case SAMPLES_JCTB: setErrorMask((getErrorMask())|(RECEIVER_TIMER_NOT_SET)); break; @@ -6403,6 +6407,7 @@ string slsDetector::setReceiver(string receiverIP){ std::cout << "frame period:" << thisDetector->timerValue[FRAME_PERIOD] << endl; std::cout << "frame number:" << thisDetector->timerValue[FRAME_NUMBER] << endl; std::cout << "sub exp time:" << thisDetector->timerValue[SUBFRAME_ACQUISITION_TIME] << endl; + std::cout << "sub period:" << thisDetector->timerValue[SUBFRAME_PERIOD] << endl; std::cout << "dynamic range:" << thisDetector->dynamicRange << endl << endl; std::cout << "flippeddatax:" << thisDetector->flippedData[d] << endl; std::cout << "10GbE:" << thisDetector->tenGigaEnable << endl << endl; @@ -6437,8 +6442,10 @@ string slsDetector::setReceiver(string receiverIP){ setTimer(FRAME_PERIOD,thisDetector->timerValue[FRAME_PERIOD]); setTimer(FRAME_NUMBER,thisDetector->timerValue[FRAME_NUMBER]); setTimer(ACQUISITION_TIME,thisDetector->timerValue[ACQUISITION_TIME]); - if(thisDetector->myDetectorType == EIGER) + if(thisDetector->myDetectorType == EIGER) { setTimer(SUBFRAME_ACQUISITION_TIME,thisDetector->timerValue[SUBFRAME_ACQUISITION_TIME]); + setTimer(SUBFRAME_PERIOD,thisDetector->timerValue[SUBFRAME_PERIOD]); + } if(thisDetector->myDetectorType == JUNGFRAUCTB) setTimer(SAMPLES_JCTB,thisDetector->timerValue[SAMPLES_JCTB]); setDynamicRange(thisDetector->dynamicRange); diff --git a/slsDetectorSoftware/slsDetector/slsDetectorBase.h b/slsDetectorSoftware/slsDetector/slsDetectorBase.h index 2936760a5..cbf613149 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorBase.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorBase.h @@ -374,6 +374,7 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef virtual int64_t setTimer(timerIndex index, int64_t t=-1)=0; int64_t setExposureTime(int64_t t=-1){return setTimer(ACQUISITION_TIME,t);}; int64_t setSubFrameExposureTime(int64_t t=-1){return setTimer(SUBFRAME_ACQUISITION_TIME,t);}; + int64_t setSubFramePeriod(int64_t t=-1){return setTimer(SUBFRAME_PERIOD,t);}; int64_t setExposurePeriod(int64_t t=-1){return setTimer(FRAME_PERIOD,t);}; int64_t setDelayAfterTrigger(int64_t t=-1){return setTimer(DELAY_AFTER_TRIGGER,t);}; int64_t setNumberOfGates(int64_t t=-1){return setTimer(GATES_NUMBER,t);}; @@ -833,8 +834,8 @@ virtual int enableDataStreamingFromReceiver(int enable=-1)=0; }}; /** returns string from timer index - \param s can be FRAME_NUMBER,ACQUISITION_TIME,FRAME_PERIOD, DELAY_AFTER_TRIGGER,GATES_NUMBER,PROBES_NUMBER, CYCLES_NUMBER, ACTUAL_TIME,MEASUREMENT_TIME, PROGRESS,MEASUREMENTS_NUMBER,FRAMES_FROM_START,FRAMES_FROM_START_PG,SAMPLES_JCTB,SUBFRAME_ACQUISITION_TIME,STORAGE_CELL_NUMBER - \returns string frame_number,acquisition_time,frame_period, delay_after_trigger,gates_number,probes_number, cycles_number, actual_time,measurement_time, progress,measurements_number,frames_from_start,frames_from_start_pg,samples_jctb,subframe_acquisition_time,storage_cell_number + \param s can be FRAME_NUMBER,ACQUISITION_TIME,FRAME_PERIOD, DELAY_AFTER_TRIGGER,GATES_NUMBER,PROBES_NUMBER, CYCLES_NUMBER, ACTUAL_TIME,MEASUREMENT_TIME, PROGRESS,MEASUREMENTS_NUMBER,FRAMES_FROM_START,FRAMES_FROM_START_PG,SAMPLES_JCTB,SUBFRAME_ACQUISITION_TIME,STORAGE_CELL_NUMBER, SUBFRAME_PERIOD + \returns string frame_number,acquisition_time,frame_period, delay_after_trigger,gates_number,probes_number, cycles_number, actual_time,measurement_time, progress,measurements_number,frames_from_start,frames_from_start_pg,samples_jctb,subframe_acquisition_time,storage_cell_number, subframe_period */ static string getTimerType(timerIndex t){ \ switch (t) { \ @@ -853,6 +854,7 @@ virtual int enableDataStreamingFromReceiver(int enable=-1)=0; case FRAMES_FROM_START_PG: return string("frames_from_start_pg"); \ case SAMPLES_JCTB: return string("samples_jctb"); \ case SUBFRAME_ACQUISITION_TIME: return string("subframe_acquisition_time"); \ + case SUBFRAME_PERIOD: return string("subframe_period"); \ case STORAGE_CELL_NUMBER: return string("storage_cell_number"); \ default: return string("unknown"); \ }}; diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUsers.cpp b/slsDetectorSoftware/slsDetector/slsDetectorUsers.cpp index 0d12a25c3..66757b484 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUsers.cpp +++ b/slsDetectorSoftware/slsDetector/slsDetectorUsers.cpp @@ -403,3 +403,22 @@ int slsDetectorUsers::setTenGigabitEthernet(int i) { int slsDetectorUsers::getNMods() { return myDetector->getNMods(); } + +double slsDetectorUsers::setSubFrameExposureTime(double t, bool inseconds){ + int64_t tms = (int64_t)(t * (1E+9)); + if (t < 0) tms = -1; + if(!inseconds) + return myDetector->setSubFrameExposureTime((int64_t)t); + else + return ((1E-9) * (double)myDetector->setSubFrameExposureTime(tms)); +} + +double slsDetectorUsers::setSubFrameExposurePeriod(double t, bool inseconds){ + int64_t tms = (int64_t)(t * (1E+9)); + if (t < 0) tms = -1; + if(!inseconds) + return myDetector->setSubFramePeriod((int64_t)t); + else + return ((1E-9) * (double)myDetector->setSubFramePeriod(tms)); +} + diff --git a/slsDetectorSoftware/slsDetector/slsDetectorUsers.h b/slsDetectorSoftware/slsDetector/slsDetectorUsers.h index b30e118d1..6a5693f6b 100644 --- a/slsDetectorSoftware/slsDetector/slsDetectorUsers.h +++ b/slsDetectorSoftware/slsDetector/slsDetectorUsers.h @@ -711,6 +711,22 @@ class slsDetectorUsers */ int getNMods(); + /** + * Set sub frame exposure time (only for Eiger) + * @param i sub frame exposure time (-1 gets) + * @param inseconds true if the value is in s, else ns + * @returns sub frame exposure time in ns, or s if specified + */ + double setSubFrameExposureTime(double t=-1, bool inseconds=false); + + /** + * Set sub frame period (only for Eiger) + * @param i sub frame period (-1 gets) + * @param inseconds true if the value is in s, else ns + * @returns sub frame period in ns, or s if specified + */ + double setSubFrameExposurePeriod(double t=-1, bool inseconds=false); + /************************************************************************ STATIC FUNCTIONS diff --git a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c index b5e9e6177..32fffae28 100755 --- a/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c +++ b/slsDetectorSoftware/slsDetectorServer/slsDetectorServer_funcs.c @@ -3587,6 +3587,12 @@ int send_update(int file_des) { #endif n = sendData(file_des,&retval,sizeof(int64_t),INT64); if (n < 0) return printSocketReadError(); + +#ifdef SLS_DETECTOR_FUNCTION_LIST + retval=setTimer(SUBFRAME_PERIOD,GET_FLAG); +#endif + n = sendData(file_des,&retval,sizeof(int64_t),INT64); + if (n < 0) return printSocketReadError(); #endif diff --git a/slsReceiverSoftware/gitInfo.txt b/slsReceiverSoftware/gitInfo.txt index 811a55fc1..7101a2cc5 100644 --- a/slsReceiverSoftware/gitInfo.txt +++ b/slsReceiverSoftware/gitInfo.txt @@ -1,18 +1,9 @@ Path: slsDetectorsPackage/slsReceiverSoftware URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git -<<<<<<< HEAD -Repsitory UUID: ab06c33107ecfeb4741d49407903ff80286cf75b -Revision: 765 -Branch: developer -Last Changed Author: Anna_Bergamaschi -Last Changed Rev: 3731 -Last Changed Date: 2018-03-15 12:27:06.000000002 +0100 ./src/slsReceiverTCPIPInterface.cpp -======= -Repsitory UUID: b8bdbf4da61f95b88893b02ddabc2491b16fa10f -Revision: 767 +Repsitory UUID: 51fd9ed423b7a8fb45a76b4f48316537c4fb0f5d +Revision: 791 Branch: developer Last Changed Author: Dhanya_Thattil -Last Changed Rev: 3746 -Last Changed Date: 2018-03-27 10:43:44.000000002 +0200 ./src/slsReceiverTCPIPInterface.cpp ->>>>>>> 7cd35f24b87501374fbaf45693a2adf16dfae3e3 +Last Changed Rev: 3818 +Last Changed Date: 2018-05-17 09:23:53.000000002 +0200 ./include/HDF5FileStatic.h diff --git a/slsReceiverSoftware/include/BinaryFile.h b/slsReceiverSoftware/include/BinaryFile.h index 3d1e46d0b..ac6f7a4e3 100644 --- a/slsReceiverSoftware/include/BinaryFile.h +++ b/slsReceiverSoftware/include/BinaryFile.h @@ -63,12 +63,14 @@ class BinaryFile : private virtual slsReceiverDefs, public File, public BinaryFi * @param nx number of pixels in x direction * @param ny number of pixels in y direction * @param at acquisition time - * @param at sub exposure time + * @param st sub exposure time + * @param sp sub period * @param ap acquisition period * @returns OK or FAIL */ int CreateMasterFile(bool en, uint32_t size, - uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t ap); + uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t sp, + uint64_t ap); /** * Close Current File diff --git a/slsReceiverSoftware/include/BinaryFileStatic.h b/slsReceiverSoftware/include/BinaryFileStatic.h index 2558486a7..78091d55c 100644 --- a/slsReceiverSoftware/include/BinaryFileStatic.h +++ b/slsReceiverSoftware/include/BinaryFileStatic.h @@ -109,12 +109,15 @@ class BinaryFileStatic { * @param acquisitionTime acquisition time * @param acquisitionPeriod acquisition period * @param subexposuretime sub exposure time + * @param subperiod sub period * @param version version of software for binary writing * @returns 0 for success and 1 for fail */ static int CreateMasterDataFile(FILE*& fd, string fname, bool owenable, - uint32_t dr, bool tenE, uint32_t size, uint32_t nPixelsX, uint32_t nPixelsY, uint64_t nf, - uint64_t acquisitionTime, uint64_t subexposuretime, uint64_t acquisitionPeriod, double version) + uint32_t dr, bool tenE, uint32_t size, + uint32_t nPixelsX, uint32_t nPixelsY, uint64_t nf, + uint64_t acquisitionTime, uint64_t subexposuretime, + uint64_t subperiod, uint64_t acquisitionPeriod, double version) { if(!owenable){ if (NULL == (fd = fopen((const char *) fname.c_str(), "wx"))){ @@ -130,32 +133,33 @@ class BinaryFileStatic { time_t t = time(0); char message[MAX_STR_LENGTH]; sprintf(message, - "Version : %.1f\n" - "Dynamic Range : %d\n" - "Ten Giga : %d\n" - "Image Size : %d bytes\n" - "x : %d pixels\n" - "y : %d pixels\n" - "Total Frames : %lld\n" - "Exptime (ns) : %lld\n" - "SubExptime (ns) : %lld\n" - "Period (ns) : %lld\n" - "Timestamp : %s\n\n" + "Version : %.1f\n" + "Dynamic Range : %d\n" + "Ten Giga : %d\n" + "Image Size : %d bytes\n" + "x : %d pixels\n" + "y : %d pixels\n" + "Total Frames : %lld\n" + "Exptime (ns) : %lld\n" + "SubExptime (ns) : %lld\n" + "SubPeriod(ns) : %lld\n" + "Period (ns) : %lld\n" + "Timestamp : %s\n\n" "#Frame Header\n" - "Frame Number : 8 bytes\n" - "SubFrame Number/ExpLength : 4 bytes\n" - "Packet Number : 4 bytes\n" - "Bunch ID : 8 bytes\n" - "Timestamp : 8 bytes\n" - "Module Id : 2 bytes\n" - "X Coordinate : 2 bytes\n" - "Y Coordinate : 2 bytes\n" - "Z Coordinate : 2 bytes\n" - "Debug : 4 bytes\n" - "Round Robin Number : 2 bytes\n" - "Detector Type : 1 byte\n" - "Header Version : 1 byte\n" + "Frame Number : 8 bytes\n" + "SubFrame Number/ExpLength : 4 bytes\n" + "Packet Number : 4 bytes\n" + "Bunch ID : 8 bytes\n" + "Timestamp : 8 bytes\n" + "Module Id : 2 bytes\n" + "X Coordinate : 2 bytes\n" + "Y Coordinate : 2 bytes\n" + "Z Coordinate : 2 bytes\n" + "Debug : 4 bytes\n" + "Round Robin Number : 2 bytes\n" + "Detector Type : 1 byte\n" + "Header Version : 1 byte\n" , version, dr, @@ -166,6 +170,7 @@ class BinaryFileStatic { (long long int)nf, (long long int)acquisitionTime, (long long int)subexposuretime, + (long long int)subperiod, (long long int)acquisitionPeriod, ctime(&t)); if (strlen(message) > MAX_STR_LENGTH) { diff --git a/slsReceiverSoftware/include/DataProcessor.h b/slsReceiverSoftware/include/DataProcessor.h index 6d10e6159..be2f24800 100644 --- a/slsReceiverSoftware/include/DataProcessor.h +++ b/slsReceiverSoftware/include/DataProcessor.h @@ -173,11 +173,13 @@ class DataProcessor : private virtual slsReceiverDefs, public ThreadObject { * @param en ten giga enable * @param nf number of frames * @param at acquisition time - * @param at sub exposure time + * @param st sub exposure time + * @param sp sub period * @param ap acquisition period * @returns OK or FAIL */ - int CreateNewFile(bool en, uint64_t nf, uint64_t at, uint64_t st, uint64_t ap); + int CreateNewFile(bool en, uint64_t nf, uint64_t at, uint64_t st, + uint64_t sp, uint64_t ap); /** * Closes files diff --git a/slsReceiverSoftware/include/File.h b/slsReceiverSoftware/include/File.h index cf024bc26..9eaa48177 100644 --- a/slsReceiverSoftware/include/File.h +++ b/slsReceiverSoftware/include/File.h @@ -89,7 +89,8 @@ class File : private virtual slsReceiverDefs { * @returns OK or FAIL */ virtual int CreateFile(uint64_t fnum){ - cprintf(RED,"This is a generic function CreateFile that should be overloaded by a derived class\n"); + cprintf(RED,"This is a generic function CreateFile that should be " + "overloaded by a derived class\n"); return OK; } @@ -97,14 +98,16 @@ class File : private virtual slsReceiverDefs { * Close Current File */ virtual void CloseCurrentFile() { - cprintf(RED,"This is a generic function CloseCurrentFile that should be overloaded by a derived class\n"); + cprintf(RED,"This is a generic function CloseCurrentFile that should be " + "overloaded by a derived class\n"); } /** * Close Files */ virtual void CloseAllFiles() { - cprintf(RED,"This is a generic function that should be overloaded by a derived class\n"); + cprintf(RED,"This is a generic function that should be overloaded " + "by a derived class\n"); } /** @@ -115,7 +118,8 @@ class File : private virtual slsReceiverDefs { * @param OK or FAIL */ virtual int WriteToFile(char* buffer, int buffersize, uint64_t fnum, uint32_t nump) { - cprintf(RED,"This is a generic function WriteToFile that should be overloaded by a derived class\n"); + cprintf(RED,"This is a generic function WriteToFile that " + "should be overloaded by a derived class\n"); return FAIL; } @@ -126,13 +130,16 @@ class File : private virtual slsReceiverDefs { * @param nx number of pixels in x direction * @param ny number of pixels in y direction * @param at acquisition time - * @param at sub exposure time + * @param st sub exposure time + * @param sp sub period * @param ap acquisition period * @returns OK or FAIL */ virtual int CreateMasterFile(bool en, uint32_t size, - uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t ap) { - cprintf(RED,"This is a generic function CreateMasterFile that should be overloaded by a derived class\n"); + uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, + uint64_t sp, uint64_t ap) { + cprintf(RED,"This is a generic function CreateMasterFile that " + "should be overloaded by a derived class\n"); return OK; } @@ -143,7 +150,8 @@ class File : private virtual slsReceiverDefs { * @param ny number of pixels in y direction */ virtual void SetNumberofPixels(uint32_t nx, uint32_t ny) { - cprintf(RED,"This is a generic function SetNumberofPixels that should be overloaded by a derived class\n"); + cprintf(RED,"This is a generic function SetNumberofPixels that " + "should be overloaded by a derived class\n"); } /** @@ -151,7 +159,8 @@ class File : private virtual slsReceiverDefs { * @param numf number of images caught */ virtual void EndofAcquisition(uint64_t numf) { - cprintf(RED,"This is a generic function EndofAcquisition that should be overloaded by a derived class\n"); + cprintf(RED,"This is a generic function EndofAcquisition that " + "should be overloaded by a derived class\n"); } protected: diff --git a/slsReceiverSoftware/include/HDF5File.h b/slsReceiverSoftware/include/HDF5File.h index 200d5c0d2..f5aafd9de 100644 --- a/slsReceiverSoftware/include/HDF5File.h +++ b/slsReceiverSoftware/include/HDF5File.h @@ -99,12 +99,14 @@ class HDF5File : private virtual slsReceiverDefs, public File, public HDF5FileSt * @param nx number of pixels in x direction * @param ny number of pixels in y direction * @param at acquisition time - * @param at sub exposure time + * @param st sub exposure time + * @param sp sub period * @param ap acquisition period * @returns OK or FAIL */ int CreateMasterFile(bool en, uint32_t size, - uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t ap); + uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t sp, + uint64_t ap); /** * End of Acquisition diff --git a/slsReceiverSoftware/include/HDF5FileStatic.h b/slsReceiverSoftware/include/HDF5FileStatic.h index 29c24e730..32c62fd50 100644 --- a/slsReceiverSoftware/include/HDF5FileStatic.h +++ b/slsReceiverSoftware/include/HDF5FileStatic.h @@ -232,13 +232,16 @@ public: * @param nf number of images * @param acquisitionTime acquisition time * @param subexposuretime sub exposure time + * @param subperiod sub period * @param acquisitionPeriod acquisition period * @param version version of software for hdf5 writing * @returns 0 for success and 1 for fail */ static int CreateMasterDataFile(H5File*& fd, string fname, bool owenable, - uint32_t dr, bool tenE, uint32_t size, uint32_t nPixelsx, uint32_t nPixelsy, uint64_t nf, - uint64_t acquisitionTime, uint64_t subexposuretime, uint64_t acquisitionPeriod, double version) + uint32_t dr, bool tenE, uint32_t size, + uint32_t nPixelsx, uint32_t nPixelsy, uint64_t nf, + uint64_t acquisitionTime, uint64_t subexposuretime, + uint64_t subperiod, uint64_t acquisitionPeriod, double version) { try { Exception::dontPrint(); //to handle errors @@ -246,9 +249,13 @@ public: FileAccPropList flist; flist.setFcloseDegree(H5F_CLOSE_STRONG); if(!owenable) - fd = new H5File( fname.c_str(), H5F_ACC_EXCL, NULL, flist ); + fd = new H5File( fname.c_str(), H5F_ACC_EXCL, + FileCreatPropList::DEFAULT, + flist ); else - fd = new H5File( fname.c_str(), H5F_ACC_TRUNC, NULL, flist ); + fd = new H5File( fname.c_str(), H5F_ACC_TRUNC, + FileCreatPropList::DEFAULT, + flist ); //variables DataSpace dataspace = DataSpace (H5S_SCALAR); @@ -313,6 +320,12 @@ public: attribute = dataset.createAttribute("unit",strdatatype, dataspace); attribute.write(strdatatype, string("ns")); + //SubPeriod + dataset = group5.createDataSet ( "sub period", PredType::STD_U64LE, dataspace ); + dataset.write ( &subperiod, PredType::STD_U64LE); + attribute = dataset.createAttribute("unit",strdatatype, dataspace); + attribute.write(strdatatype, string("ns")); + //Period dataset = group5.createDataSet ( "acquisition period", PredType::STD_U64LE, dataspace ); dataset.write ( &acquisitionPeriod, PredType::STD_U64LE); @@ -374,9 +387,13 @@ public: FileAccPropList fapl; fapl.setFcloseDegree(H5F_CLOSE_STRONG); if(!owenable) - fd = new H5File( fname.c_str(), H5F_ACC_EXCL, NULL,fapl ); + fd = new H5File( fname.c_str(), H5F_ACC_EXCL, + FileCreatPropList::DEFAULT, + fapl ); else - fd = new H5File( fname.c_str(), H5F_ACC_TRUNC, NULL, fapl ); + fd = new H5File( fname.c_str(), H5F_ACC_TRUNC, + FileCreatPropList::DEFAULT, + fapl ); //attributes - version double dValue=version; @@ -678,9 +695,13 @@ public: FileAccPropList fapl; fapl.setFcloseDegree(H5F_CLOSE_STRONG); if(!owenable) - newfd = new H5File( newFileName.c_str(), H5F_ACC_EXCL, NULL,fapl ); + newfd = new H5File( newFileName.c_str(), H5F_ACC_EXCL, + FileCreatPropList::DEFAULT, + fapl ); else - newfd = new H5File( newFileName.c_str(), H5F_ACC_TRUNC, NULL, fapl ); + newfd = new H5File( newFileName.c_str(), H5F_ACC_TRUNC, + FileCreatPropList::DEFAULT, + fapl ); //dataspace and dataset DataSpace* newDataspace; if (rank == 3) { diff --git a/slsReceiverSoftware/include/UDPBaseImplementation.h b/slsReceiverSoftware/include/UDPBaseImplementation.h index 4eb725e3a..2bfe08e36 100644 --- a/slsReceiverSoftware/include/UDPBaseImplementation.h +++ b/slsReceiverSoftware/include/UDPBaseImplementation.h @@ -206,6 +206,12 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter */ uint64_t getSubExpTime() const; + /** + * Get Sub Period + * @return Sub Period + */ + uint64_t getSubPeriod() const; + /* * Get Number of Frames expected by receiver from detector * The data receiver status will change from running to idle when it gets this number of frames FIXME: (Not implemented) @@ -445,6 +451,13 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter */ void setSubExpTime(const uint64_t i); + /** + * Set Sub Period + * @param i Period + * @return OK or FAIL + */ + void setSubPeriod(const uint64_t i); + /** * Set Number of Frames expected by receiver from detector * The data receiver status will change from running to idle when it gets this number of frames @@ -682,6 +695,8 @@ class UDPBaseImplementation : protected virtual slsReceiverDefs, public UDPInter uint64_t acquisitionTime; /** Sub Exposure Time */ uint64_t subExpTime; + /** Sub Period */ + uint64_t subPeriod; /** Frame Number */ uint64_t numberOfFrames; /** Samples Number */ diff --git a/slsReceiverSoftware/include/UDPInterface.h b/slsReceiverSoftware/include/UDPInterface.h index 763c1b5ba..68fe9d1d2 100644 --- a/slsReceiverSoftware/include/UDPInterface.h +++ b/slsReceiverSoftware/include/UDPInterface.h @@ -294,6 +294,12 @@ class UDPInterface { */ virtual uint64_t getSubExpTime() const = 0; + /** + * Get Sub Period + * @return Sub Period + */ + virtual uint64_t getSubPeriod() const = 0; + /* * Get Number of Frames expected by receiver from detector * The data receiver status will change from running to idle when it gets this number of frames FIXME: (for Leo? Not implemented) @@ -531,6 +537,13 @@ class UDPInterface { */ virtual void setSubExpTime(const uint64_t i) = 0; + /** + * Set Sub Period + * @param i Period + * @return OK or FAIL + */ + virtual void setSubPeriod(const uint64_t i) = 0; + /** * Set Number of Frames expected by receiver from detector * The data receiver status will change from running to idle when it gets this number of frames FIXME: (for Leo? Not implemented) diff --git a/slsReceiverSoftware/include/gitInfoReceiver.h b/slsReceiverSoftware/include/gitInfoReceiver.h index d94293f8c..315130b93 100644 --- a/slsReceiverSoftware/include/gitInfoReceiver.h +++ b/slsReceiverSoftware/include/gitInfoReceiver.h @@ -1,7 +1,6 @@ #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" - -#define GITREPUUID "b8bdbf4da61f95b88893b02ddabc2491b16fa10f" +#define GITREPUUID "51fd9ed423b7a8fb45a76b4f48316537c4fb0f5d" #define GITAUTH "Dhanya_Thattil" -#define GITREV 0x3746 -#define GITDATE 0x20180327 +#define GITREV 0x3818 +#define GITDATE 0x20180517 #define GITBRANCH "developer" diff --git a/slsReceiverSoftware/src/BinaryFile.cpp b/slsReceiverSoftware/src/BinaryFile.cpp index 4e6ff5de9..8aed19db3 100644 --- a/slsReceiverSoftware/src/BinaryFile.cpp +++ b/slsReceiverSoftware/src/BinaryFile.cpp @@ -84,19 +84,22 @@ int BinaryFile::WriteToFile(char* buffer, int buffersize, uint64_t fnum, uint32_ int BinaryFile::CreateMasterFile(bool en, uint32_t size, - uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t ap) { + uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t sp, + uint64_t ap) { //beginning of every acquisition numFramesInFile = 0; numActualPacketsInFile = 0; if (master && (*detIndex==0)) { - masterFileName = BinaryFileStatic::CreateMasterFileName(filePath, fileNamePrefix, *fileIndex); + masterFileName = BinaryFileStatic::CreateMasterFileName(filePath, + fileNamePrefix, *fileIndex); if(!silentMode) { FILE_LOG(logINFO) << "Master File: " << masterFileName; } - return BinaryFileStatic::CreateMasterDataFile(masterfd, masterFileName, *overWriteEnable, + return BinaryFileStatic::CreateMasterDataFile(masterfd, masterFileName, + *overWriteEnable, *dynamicRange, en, size, nx, ny, *numImages, - at, st, ap, BINARY_WRITER_VERSION); + at, st, sp, ap, BINARY_WRITER_VERSION); } return OK; } diff --git a/slsReceiverSoftware/src/DataProcessor.cpp b/slsReceiverSoftware/src/DataProcessor.cpp index 393cd3052..7729309b2 100644 --- a/slsReceiverSoftware/src/DataProcessor.cpp +++ b/slsReceiverSoftware/src/DataProcessor.cpp @@ -245,12 +245,12 @@ void DataProcessor::SetupFileWriter(bool fwe, int* nd, char* fname, char* fpath, } // only the first file -int DataProcessor::CreateNewFile(bool en, uint64_t nf, uint64_t at, uint64_t st, uint64_t ap) { +int DataProcessor::CreateNewFile(bool en, uint64_t nf, uint64_t at, uint64_t st, uint64_t sp, uint64_t ap) { if (file == NULL) return FAIL; file->CloseAllFiles(); if (file->CreateMasterFile(en, generalData->imageSize, generalData->nPixelsX, generalData->nPixelsY, - at, st, ap) == FAIL) + at, st, sp, ap) == FAIL) return FAIL; if (file->CreateFile(currentFrameIndex) == FAIL) return FAIL; diff --git a/slsReceiverSoftware/src/HDF5File.cpp b/slsReceiverSoftware/src/HDF5File.cpp index 413dfb910..28356d994 100644 --- a/slsReceiverSoftware/src/HDF5File.cpp +++ b/slsReceiverSoftware/src/HDF5File.cpp @@ -163,7 +163,8 @@ int HDF5File::WriteToFile(char* buffer, int buffersize, uint64_t fnum, uint32_t int HDF5File::CreateMasterFile(bool en, uint32_t size, - uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t ap) { + uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t sp, + uint64_t ap) { //beginning of every acquisition numFramesInFile = 0; @@ -171,12 +172,15 @@ int HDF5File::CreateMasterFile(bool en, uint32_t size, if (master && (*detIndex==0)) { virtualfd = 0; - masterFileName = HDF5FileStatic::CreateMasterFileName(filePath, fileNamePrefix, *fileIndex); + masterFileName = HDF5FileStatic::CreateMasterFileName(filePath, + fileNamePrefix, *fileIndex); if(!silentMode) FILE_LOG(logINFO) << "Master File: " << masterFileName; pthread_mutex_lock(&Mutex); - int ret = HDF5FileStatic::CreateMasterDataFile(masterfd, masterFileName, *overWriteEnable, - *dynamicRange, en, size, nx, ny, *numImages, at, st, ap, HDF5_WRITER_VERSION); + int ret = HDF5FileStatic::CreateMasterDataFile(masterfd, masterFileName, + *overWriteEnable, + *dynamicRange, en, size, nx, ny, *numImages, at, st, sp, ap, + HDF5_WRITER_VERSION); pthread_mutex_unlock(&Mutex); return ret; } diff --git a/slsReceiverSoftware/src/UDPBaseImplementation.cpp b/slsReceiverSoftware/src/UDPBaseImplementation.cpp index d1ab17173..a8917849f 100644 --- a/slsReceiverSoftware/src/UDPBaseImplementation.cpp +++ b/slsReceiverSoftware/src/UDPBaseImplementation.cpp @@ -47,6 +47,7 @@ void UDPBaseImplementation::initializeMembers(){ acquisitionPeriod = 0; acquisitionTime = 0; subExpTime = 0; + subPeriod = 0; numberOfFrames = 0; numberOfSamples = 0; dynamicRange = 16; @@ -103,11 +104,13 @@ UDPBaseImplementation::~UDPBaseImplementation(){} /**initial parameters***/ int* UDPBaseImplementation::getMultiDetectorSize() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return (int*) numDet;} + return (int*) numDet; +} int UDPBaseImplementation::getDetectorPositionId() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return detID;} + return detID; +} char *UDPBaseImplementation::getDetectorHostname() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; @@ -136,7 +139,8 @@ bool UDPBaseImplementation::getGapPixelsEnable() const { /***file parameters***/ slsReceiverDefs::fileFormat UDPBaseImplementation::getFileFormat() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return fileFormatType;} + return fileFormatType; +} char *UDPBaseImplementation::getFileName() const{ @@ -167,46 +171,56 @@ char *UDPBaseImplementation::getFilePath() const{ uint64_t UDPBaseImplementation::getFileIndex() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return fileIndex;} + return fileIndex; +} int UDPBaseImplementation::getScanTag() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return scanTag;} + return scanTag; +} bool UDPBaseImplementation::getFileWriteEnable() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return fileWriteEnable;} + return fileWriteEnable; +} bool UDPBaseImplementation::getOverwriteEnable() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return overwriteEnable;} + return overwriteEnable; +} bool UDPBaseImplementation::getDataCompressionEnable() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return dataCompressionEnable;} + return dataCompressionEnable; +} /***acquisition count parameters***/ uint64_t UDPBaseImplementation::getTotalFramesCaught() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return 0;} + return 0; +} uint64_t UDPBaseImplementation::getFramesCaught() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return 0;} + return 0; +} int64_t UDPBaseImplementation::getAcquisitionIndex() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return -1;} + return -1; +} /***connection parameters***/ uint32_t UDPBaseImplementation::getUDPPortNumber() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return udpPortNum[0];} + return udpPortNum[0]; +} uint32_t UDPBaseImplementation::getUDPPortNumber2() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return udpPortNum[1];} + return udpPortNum[1]; +} char *UDPBaseImplementation::getEthernetInterface() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; @@ -221,39 +235,53 @@ char *UDPBaseImplementation::getEthernetInterface() const{ /***acquisition parameters***/ int UDPBaseImplementation::getShortFrameEnable() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return shortFrameEnable;} + return shortFrameEnable; +} uint32_t UDPBaseImplementation::getFrameToGuiFrequency() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return frameToGuiFrequency;} + return frameToGuiFrequency; +} uint32_t UDPBaseImplementation::getFrameToGuiTimer() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return frameToGuiTimerinMS;} + return frameToGuiTimerinMS; +} bool UDPBaseImplementation::getDataStreamEnable() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return dataStreamEnable;} + return dataStreamEnable; +} uint64_t UDPBaseImplementation::getAcquisitionPeriod() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return acquisitionPeriod;} + return acquisitionPeriod; +} uint64_t UDPBaseImplementation::getAcquisitionTime() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return acquisitionTime;} + return acquisitionTime; +} uint64_t UDPBaseImplementation::getSubExpTime() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return subExpTime;} + return subExpTime; +} + +uint64_t UDPBaseImplementation::getSubPeriod() const{ + FILE_LOG(logDEBUG) << __AT__ << " starting"; + return subPeriod; +} uint64_t UDPBaseImplementation::getNumberOfFrames() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return numberOfFrames;} + return numberOfFrames; +} uint64_t UDPBaseImplementation::getNumberofSamples() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return numberOfSamples;} + return numberOfSamples; +} uint32_t UDPBaseImplementation::getDynamicRange() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; @@ -261,11 +289,13 @@ uint32_t UDPBaseImplementation::getDynamicRange() const{ bool UDPBaseImplementation::getTenGigaEnable() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return tengigaEnable;} + return tengigaEnable; +} uint32_t UDPBaseImplementation::getFifoDepth() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return fifoDepth;} + return fifoDepth; +} /***receiver status***/ slsReceiverDefs::runStatus UDPBaseImplementation::getStatus() const{ @@ -278,11 +308,13 @@ uint32_t UDPBaseImplementation::getSilentMode() const{ int UDPBaseImplementation::getActivate() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return activated;} + return activated; +} uint32_t UDPBaseImplementation::getStreamingPort() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; - return streamingPort;} + return streamingPort; +} char *UDPBaseImplementation::getStreamingSourceIP() const{ FILE_LOG(logDEBUG) << __AT__ << " starting"; @@ -529,6 +561,13 @@ void UDPBaseImplementation::setSubExpTime(const uint64_t i){ FILE_LOG(logINFO) << "Sub Exposure Time: " << (double)subExpTime/(1E9) << "s"; } +void UDPBaseImplementation::setSubPeriod(const uint64_t i){ + FILE_LOG(logDEBUG) << __AT__ << " starting"; + + subPeriod = i; + FILE_LOG(logINFO) << "Sub Exposure Time: " << (double)subPeriod/(1E9) << "s"; +} + int UDPBaseImplementation::setNumberOfFrames(const uint64_t i){ FILE_LOG(logDEBUG) << __AT__ << " starting"; diff --git a/slsReceiverSoftware/src/UDPStandardImplementation.cpp b/slsReceiverSoftware/src/UDPStandardImplementation.cpp index e00ada285..ddf75cfd6 100644 --- a/slsReceiverSoftware/src/UDPStandardImplementation.cpp +++ b/slsReceiverSoftware/src/UDPStandardImplementation.cpp @@ -764,7 +764,7 @@ int UDPStandardImplementation::SetupWriter() { bool error = false; for (unsigned int i = 0; i < dataProcessor.size(); ++i) if (dataProcessor[i]->CreateNewFile(tengigaEnable, - numberOfFrames, acquisitionTime, subExpTime, acquisitionPeriod) == FAIL) { + numberOfFrames, acquisitionTime, subExpTime, subPeriod, acquisitionPeriod) == FAIL) { error = true; break; } diff --git a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp index 958144903..fd387202c 100644 --- a/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp +++ b/slsReceiverSoftware/src/slsReceiverTCPIPInterface.cpp @@ -1054,6 +1054,9 @@ int slsReceiverTCPIPInterface::set_timer() { case SUBFRAME_ACQUISITION_TIME: receiverBase->setSubExpTime(index[1]); break; + case SUBFRAME_PERIOD: + receiverBase->setSubPeriod(index[1]); + break; case SAMPLES_JCTB: if (myDetectorType != JUNGFRAUCTB) { ret = FAIL; @@ -1086,6 +1089,9 @@ int slsReceiverTCPIPInterface::set_timer() { case SUBFRAME_ACQUISITION_TIME: retval=receiverBase->getSubExpTime(); break; + case SUBFRAME_PERIOD: + retval=receiverBase->getSubPeriod(); + break; case SAMPLES_JCTB: if (myDetectorType != JUNGFRAUCTB) { ret = FAIL;