From 4b0fb5029f49756780cc61950a78a30939ba3f4c Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 21 Aug 2019 12:45:08 +0200 Subject: [PATCH] WIP --- slsDetectorGui/include/qDrawPlot.h | 1 - slsDetectorGui/src/qDrawPlot.cpp | 7 +---- slsDetectorSoftware/include/Detector.h | 31 +++++++++++++++++++ .../include/multiSlsDetector.h | 10 ------ .../include/slsDetectorUsers.h | 8 ----- slsDetectorSoftware/src/Detector.cpp | 16 ++++++++++ slsDetectorSoftware/src/multiSlsDetector.cpp | 10 ------ slsDetectorSoftware/src/slsDetectorUsers.cpp | 4 --- 8 files changed, 48 insertions(+), 39 deletions(-) diff --git a/slsDetectorGui/include/qDrawPlot.h b/slsDetectorGui/include/qDrawPlot.h index 99898a72b..52ab92a23 100755 --- a/slsDetectorGui/include/qDrawPlot.h +++ b/slsDetectorGui/include/qDrawPlot.h @@ -74,7 +74,6 @@ class qDrawPlot : public QWidget, private Ui::PlotObject { void SetupPlots(); void GetStatistics(double &min, double &max, double &sum); void DetachHists(); - static void GetProgressCallBack(double currentProgress, void *this_pointer); static void GetAcquisitionFinishedCallBack(double currentProgress, int detectorStatus, void *this_pointer); static void GetDataCallBack(detectorData *data, uint64_t frameIndex, uint32_t subFrameIndex, void *this_pointer); std::string AcquireThread(); diff --git a/slsDetectorGui/src/qDrawPlot.cpp b/slsDetectorGui/src/qDrawPlot.cpp index 61972327c..b6b6606b9 100755 --- a/slsDetectorGui/src/qDrawPlot.cpp +++ b/slsDetectorGui/src/qDrawPlot.cpp @@ -64,7 +64,6 @@ void qDrawPlot::SetupWidgetWindow() { SetupPlots(); SetDataCallBack(true); myDet->registerAcquisitionFinishedCallback(&(GetAcquisitionFinishedCallBack), this); - myDet->registerProgressCallback(&(GetProgressCallBack), this); // future watcher to watch result of AcquireThread only because it uses signals/slots to handle acquire exception acqResultWatcher = new QFutureWatcher(); @@ -590,11 +589,6 @@ std::string qDrawPlot::AcquireThread() { return std::string(""); } -void qDrawPlot::GetProgressCallBack(double currentProgress, void *this_pointer) { - ((qDrawPlot *)this_pointer)->progress = currentProgress; - FILE_LOG(logDEBUG) << "Progress Call back successful"; -} - void qDrawPlot::GetAcquisitionFinishedCallBack(double currentProgress, int detectorStatus, void *this_pointer) { ((qDrawPlot *)this_pointer)->AcquisitionFinished(currentProgress, detectorStatus); FILE_LOG(logDEBUG) << "Acquisition Finished Call back successful"; @@ -606,6 +600,7 @@ void qDrawPlot::GetDataCallBack(detectorData *data, uint64_t frameIndex, uint32_ } void qDrawPlot::AcquisitionFinished(double currentProgress, int detectorStatus) { + progress = currentProgress; std::string status = slsDetectorDefs::runStatusType(static_cast(detectorStatus)); if (detectorStatus == slsDetectorDefs::ERROR) { diff --git a/slsDetectorSoftware/include/Detector.h b/slsDetectorSoftware/include/Detector.h index a683f9e37..679646a37 100644 --- a/slsDetectorSoftware/include/Detector.h +++ b/slsDetectorSoftware/include/Detector.h @@ -6,6 +6,8 @@ #include class multiSlsDetector; +class detectorData; + namespace sls { using ns = std::chrono::nanoseconds; class MacAddr; @@ -83,6 +85,35 @@ class Detector { /** [Jungfrau][Gotthard] */ void setSettings(defs::detectorSettings value, Positions pos = {}); + /************************************************** + * * + * Callbacks * + * * + * ************************************************/ + + /** + * register callback for end of acquisition + * @param func function to be called with parameters: + * current progress in percentage, detector status, pArg pointer + * @param pArg pointer that is returned in call back + */ + void registerAcquisitionFinishedCallback(void (*func)(double, int, void *), + void *pArg); + + /** + * register callback for accessing reconstructed complete images + * Receiver sends out images via zmq, the client reconstructs them into + * complete images. Therefore, it also enables zmq streaming from receiver + * and the client. + * @param func function to be called for each image with parameters: + * detector data structure, frame number, sub frame number (for eiger in 32 + * bit mode), pArg pointer + * @param pArg pointer that is returned in call back + */ + void registerDataCallback(void (*func)(detectorData *, uint64_t, uint32_t, + void *), + void *pArg); + /************************************************** * * * Acquisition Parameters * diff --git a/slsDetectorSoftware/include/multiSlsDetector.h b/slsDetectorSoftware/include/multiSlsDetector.h index abe0c2e78..f486d0010 100755 --- a/slsDetectorSoftware/include/multiSlsDetector.h +++ b/slsDetectorSoftware/include/multiSlsDetector.h @@ -1993,13 +1993,6 @@ class multiSlsDetector : public virtual slsDetectorDefs { */ void registerAcquisitionFinishedCallback(void (*func)(double, int, void *), void *pArg); - /** - * register callback for accessing detector progress - * @param func function to be called at the end of the acquisition. - * gets detector status and progress index as arguments - * @param pArg argument - */ - void registerProgressCallback(void (*func)(double, void *), void *pArg); /** * register calbback for accessing detector final data, @@ -2260,9 +2253,6 @@ class multiSlsDetector : public virtual slsDetectorDefs { void (*acquisition_finished)(double, int, void *){nullptr}; void *acqFinished_p{nullptr}; - void (*progress_call)(double, void *){nullptr}; - void *pProgressCallArg{nullptr}; - void (*dataReady)(detectorData *, uint64_t, uint32_t, void *){nullptr}; void *pCallbackArg{nullptr}; }; diff --git a/slsDetectorSoftware/include/slsDetectorUsers.h b/slsDetectorSoftware/include/slsDetectorUsers.h index eacf25992..c0f5ee46f 100755 --- a/slsDetectorSoftware/include/slsDetectorUsers.h +++ b/slsDetectorSoftware/include/slsDetectorUsers.h @@ -775,14 +775,6 @@ public: */ void registerAcquisitionFinishedCallback(void( *func)(double,int, void*), void *pArg); - /** - * register callback for accessing detector progress in client, - * @param func function to be called at the end of the acquisition. - * gets detector status and progress index as arguments - * @param pArg argument - */ - void registerProgressCallback(void( *func)(double,void*), void *pArg); - /** @short [usage strongly discouraged] sets parameters trough command line interface http://www.psi.ch/detectors/UsersSupportEN/slsDetectorClientHowTo.pdf \param command string as it would be written on the command line diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index f7a500897..566b00561 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -4,6 +4,8 @@ #include "multiSlsDetector.h" #include "slsDetector.h" #include "sls_detector_defs.h" +#include "detectorData.h" + namespace sls { using defs = slsDetectorDefs; @@ -82,6 +84,20 @@ void Detector::setSettings(defs::detectorSettings value, Positions pos) { pimpl->Parallel(&slsDetector::setSettings, pos, value); } +// Callback + +void Detector::registerAcquisitionFinishedCallback(void (*func)(double, int, + void *), + void *pArg) { + pimpl->registerAcquisitionFinishedCallback(func, pArg); +} + +void Detector::registerDataCallback(void (*func)(detectorData *, uint64_t, + uint32_t, void *), + void *pArg) { + pimpl->registerDataCallback(func, pArg); +} + // Acquisition Parameters Result Detector::getNumberOfFrames() const { diff --git a/slsDetectorSoftware/src/multiSlsDetector.cpp b/slsDetectorSoftware/src/multiSlsDetector.cpp index 3c3a29377..2183dcec7 100755 --- a/slsDetectorSoftware/src/multiSlsDetector.cpp +++ b/slsDetectorSoftware/src/multiSlsDetector.cpp @@ -3604,12 +3604,6 @@ void multiSlsDetector::registerAcquisitionFinishedCallback( acqFinished_p = pArg; } -void multiSlsDetector::registerProgressCallback(void (*func)(double, void *), - void *pArg) { - progress_call = func; - pProgressCallArg = pArg; -} - void multiSlsDetector::registerDataCallback( void (*userCallback)(detectorData *, uint64_t, uint32_t, void *), void *pArg) { @@ -3733,10 +3727,6 @@ int multiSlsDetector::acquire() { sem_post(&sem_newRTAcquisition); dataProcessingThread.join(); - if (progress_call != nullptr) { - progress_call(getCurrentProgress(), pProgressCallArg); - } - if (acquisition_finished != nullptr) { acquisition_finished(getCurrentProgress(), getRunStatus(), acqFinished_p); diff --git a/slsDetectorSoftware/src/slsDetectorUsers.cpp b/slsDetectorSoftware/src/slsDetectorUsers.cpp index 7dd0069a8..acab7f2a9 100755 --- a/slsDetectorSoftware/src/slsDetectorUsers.cpp +++ b/slsDetectorSoftware/src/slsDetectorUsers.cpp @@ -383,10 +383,6 @@ void slsDetectorUsers::registerAcquisitionFinishedCallback(void( *func)(double,i detector.registerAcquisitionFinishedCallback(func,pArg); } -void slsDetectorUsers::registerProgressCallback(void( *func)(double,void*), void *pArg) { - detector.registerProgressCallback(func,pArg); -} - void slsDetectorUsers::putCommand(const std::string& command){ multiSlsDetectorClient(command, slsDetectorDefs::PUT_ACTION, &detector); }