From 7a8bcf49a42947e2142546f8e7713c47c4e811fe Mon Sep 17 00:00:00 2001 From: vargheseg <19566373+vargheseg@users.noreply.github.com> Date: Wed, 23 Sep 2020 08:56:10 +0200 Subject: [PATCH] Support zmq publishing form cs to app. The adapter publishes value changes made from the control system side for the following types: DoocsSpectrum DoocsIfff DoocsProcessArray DoocsProcessScalar --- include/DoocsProcessArray.h | 19 +++++++++++++++++++ include/DoocsProcessScalar.h | 19 +++++++++++++++++++ src/DoocsIfff.cc | 19 +++++++++++++++++++ src/DoocsSpectrum.cc | 19 +++++++++++++++++++ 4 files changed, 76 insertions(+) diff --git a/include/DoocsProcessArray.h b/include/DoocsProcessArray.h index 490b803..4c5d8eb 100644 --- a/include/DoocsProcessArray.h +++ b/include/DoocsProcessArray.h @@ -50,6 +50,25 @@ namespace ChimeraTK { void set(EqAdr* eqAdr, EqData* data1, EqData* data2, EqFct* eqFct) override { DOOCS_T::set(eqAdr, data1, data2, eqFct); sendToDevice(); + // send data via ZeroMQ if enabled + if(publishZMQ) { + auto timestamp = _processArray->getVersionNumber().getTime(); + auto seconds = std::chrono::system_clock::to_time_t(timestamp); + auto microseconds = std::chrono::duration_cast<std::chrono::microseconds>( + timestamp - std::chrono::system_clock::from_time_t(seconds)) + .count(); + dmsg_info info; + memset(&info, 0, sizeof(info)); + info.sec = seconds; + info.usec = microseconds; + if(_macroPulseNumberSource != nullptr) { + info.ident = _macroPulseNumberSource->accessData(0); + } + else { + info.ident = 0; + } + this->send(&info); + } } /** diff --git a/include/DoocsProcessScalar.h b/include/DoocsProcessScalar.h index 4f8cbe3..b68e712 100644 --- a/include/DoocsProcessScalar.h +++ b/include/DoocsProcessScalar.h @@ -148,6 +148,25 @@ namespace ChimeraTK { else { throw ChimeraTK::logic_error("Trying to write to a non-writable variable"); } + // send data via ZeroMQ if enabled + if(_publishZMQ) { + auto timestamp = _processScalar->getVersionNumber().getTime(); + auto seconds = std::chrono::system_clock::to_time_t(timestamp); + auto microseconds = std::chrono::duration_cast<std::chrono::microseconds>( + timestamp - std::chrono::system_clock::from_time_t(seconds)) + .count(); + dmsg_info info; + memset(&info, 0, sizeof(info)); + info.sec = seconds; + info.usec = microseconds; + if(_macroPulseNumberSource != nullptr) { + info.ident = _macroPulseNumberSource->accessData(0); + } + else { + info.ident = 0; + } + this->send(&info); + } } /** diff --git a/src/DoocsIfff.cc b/src/DoocsIfff.cc index b3ee22a..4e66597 100644 --- a/src/DoocsIfff.cc +++ b/src/DoocsIfff.cc @@ -132,6 +132,25 @@ namespace ChimeraTK { void DoocsIfff::set(EqAdr* eqAdr, EqData* data1, EqData* data2, EqFct* eqFct) { D_ifff::set(eqAdr, data1, data2, eqFct); // inherited functionality fill the local doocs buffer sendToApplication(); + + if(_publishZMQ) { + auto timestamp = _i1Value->getVersionNumber().getTime(); + auto seconds = std::chrono::system_clock::to_time_t(timestamp); + auto microseconds = std::chrono::duration_cast<std::chrono::microseconds>( + timestamp - std::chrono::system_clock::from_time_t(seconds)) + .count(); + dmsg_info info; + memset(&info, 0, sizeof(info)); + info.sec = seconds; + info.usec = microseconds; + if(_macroPulseNumberSource != nullptr) { + info.ident = _macroPulseNumberSource->accessData(0); + } + else { + info.ident = 0; + } + this->send(&info); + } } void DoocsIfff::auto_init(void) { diff --git a/src/DoocsSpectrum.cc b/src/DoocsSpectrum.cc index 70725d6..5fcd87c 100644 --- a/src/DoocsSpectrum.cc +++ b/src/DoocsSpectrum.cc @@ -62,6 +62,25 @@ namespace ChimeraTK { D_spectrum::set(eqAdr, data1, data2, eqFct); modified = true; sendToDevice(); + + if(publishZMQ) { + auto timestamp = _processArray->getVersionNumber().getTime(); + auto seconds = std::chrono::system_clock::to_time_t(timestamp); + auto microseconds = std::chrono::duration_cast<std::chrono::microseconds>( + timestamp - std::chrono::system_clock::from_time_t(seconds)) + .count(); + dmsg_info info; + memset(&info, 0, sizeof(info)); + info.sec = seconds; + info.usec = microseconds; + if(_macroPulseNumberSource != nullptr) { + info.ident = _macroPulseNumberSource->accessData(0); + } + else { + info.ident = 0; + } + this->send(&info); + } } void DoocsSpectrum::auto_init(void) { -- GitLab