12 #include "../MetaInstruments/TimeTagger.h"
15 #include "NetworkTimeTagger.grpc.pb.h"
19 template <
typename... gRPCServices>
20 class NetworkTimeTaggerT;
22 template <
typename... gRPCServices>
35 for (
int NumTries = 0;
true; ++NumTries)
58 template <
typename... gRPCServices>
65 virtual const char*
GetParamClassTag() const noexcept
override {
return "NetworkTimeTaggerParams"; }
74 template <
typename... gRPCServices>
88 template <
typename... gRPCServices>
97 constexpr
static auto Name() noexcept {
return "Network Time Tagger"; }
107 :
public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetHardwareInfo, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::HardwareInfoMessage>
109 using Base =
gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetHardwareInfo, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::HardwareInfoMessage>;
110 using Base::ResponseMessage;
114 : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestGetHardwareInfo) {}
120 auto StreamSizeMsg = std::make_unique<DynExpProto::NetworkTimeTagger::HardwareInfoMessage>();
124 ResponseMessage.set_mininputthresholdinvolts(
Instrument->GetMinThresholdInVolts());
125 ResponseMessage.set_maxinputthresholdinvolts(
Instrument->GetMaxThresholdInVolts());
126 ResponseMessage.set_timingresolutioninpicoseconds(
Instrument->GetResolution().count());
131 :
public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetBufferInfo, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::BufferInfoMessage>
133 using Base =
gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetBufferInfo, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::BufferInfoMessage>;
134 using Base::ResponseMessage;
138 : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestGetBufferInfo) {}
144 auto StreamSizeMsg = std::make_unique<DynExpProto::NetworkTimeTagger::BufferInfoMessage>();
148 ResponseMessage.set_buffersizeinsamples(
Instrument->GetBufferSize());
153 :
public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetStreamMode, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::StreamModeMessage>
155 using Base =
gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetStreamMode, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::StreamModeMessage>;
156 using Base::ResponseMessage;
160 : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestGetStreamMode) {}
166 auto StreamSizeMsg = std::make_unique<DynExpProto::NetworkTimeTagger::StreamModeMessage>();
169 auto InstrData = DynExp::dynamic_InstrumentData_cast<DynExpInstr::TimeTagger>(
Instrument->GetInstrumentData());
171 ResponseMessage.set_streammode(InstrData->GetStreamMode() == DynExpInstr::TimeTaggerData::StreamModeType::Counts ?
172 DynExpProto::NetworkTimeTagger::StreamModeType::Counts : DynExpProto::NetworkTimeTagger::StreamModeType::Events);
177 :
public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetStreamMode, ThisServiceType, DynExpProto::NetworkTimeTagger::StreamModeMessage, DynExpProto::Common::VoidMessage>
179 using Base =
gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetStreamMode, ThisServiceType, DynExpProto::NetworkTimeTagger::StreamModeMessage, DynExpProto::Common::VoidMessage>;
180 using Base::RequestMessage;
184 : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestSetStreamMode) {}
192 auto InstrData = DynExp::dynamic_InstrumentData_cast<DynExpInstr::TimeTagger>(
Instrument->GetInstrumentData());
194 InstrData->SetStreamMode(RequestMessage.streammode() == DynExpProto::NetworkTimeTagger::StreamModeType::Counts ?
195 DynExpInstr::TimeTaggerData::StreamModeType::Counts : DynExpInstr::TimeTaggerData::StreamModeType::Events);
200 :
public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataClearBuffer, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::Common::VoidMessage>
202 using Base =
gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataClearBuffer, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::Common::VoidMessage>;
206 : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestClearBuffer) {}
220 :
public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataConfigureInput, ThisServiceType, DynExpProto::NetworkTimeTagger::ConfigureInputMessage, DynExpProto::Common::VoidMessage>
222 using Base =
gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataConfigureInput, ThisServiceType, DynExpProto::NetworkTimeTagger::ConfigureInputMessage, DynExpProto::Common::VoidMessage>;
223 using Base::RequestMessage;
227 : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestConfigureInput) {}
236 Instrument->ConfigureInput(RequestMessage.userisingedge(), RequestMessage.thresholdinvolts());
241 :
public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetExposureTime, ThisServiceType, DynExpProto::NetworkTimeTagger::ExposureTimeMessage, DynExpProto::Common::VoidMessage>
243 using Base =
gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetExposureTime, ThisServiceType, DynExpProto::NetworkTimeTagger::ExposureTimeMessage, DynExpProto::Common::VoidMessage>;
244 using Base::RequestMessage;
248 : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestSetExposureTime) {}
262 :
public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetCoincidenceWindow, ThisServiceType, DynExpProto::NetworkTimeTagger::CoincidenceWindowMessage, DynExpProto::Common::VoidMessage>
264 using Base =
gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetCoincidenceWindow, ThisServiceType, DynExpProto::NetworkTimeTagger::CoincidenceWindowMessage, DynExpProto::Common::VoidMessage>;
265 using Base::RequestMessage;
269 : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestSetCoincidenceWindow) {}
283 :
public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetInputDelay, ThisServiceType, DynExpProto::NetworkTimeTagger::InputDelayMessage, DynExpProto::Common::VoidMessage>
285 using Base =
gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetInputDelay, ThisServiceType, DynExpProto::NetworkTimeTagger::InputDelayMessage, DynExpProto::Common::VoidMessage>;
286 using Base::RequestMessage;
290 : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestSetInputDelay) {}
304 :
public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetHBTActive, ThisServiceType, DynExpProto::NetworkTimeTagger::HBTActiveMessage, DynExpProto::Common::VoidMessage>
306 using Base =
gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetHBTActive, ThisServiceType, DynExpProto::NetworkTimeTagger::HBTActiveMessage, DynExpProto::Common::VoidMessage>;
307 using Base::RequestMessage;
311 : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestSetHBTActive) {}
320 Instrument->SetHBTActive(RequestMessage.enable());
325 :
public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataConfigureHBT, ThisServiceType, DynExpProto::NetworkTimeTagger::ConfigureHBTMessage, DynExpProto::Common::VoidMessage>
327 using Base =
gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataConfigureHBT, ThisServiceType, DynExpProto::NetworkTimeTagger::ConfigureHBTMessage, DynExpProto::Common::VoidMessage>;
328 using Base::RequestMessage;
332 : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestConfigureHBT) {}
346 :
public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataResetHBT, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::Common::VoidMessage>
348 using Base =
gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataResetHBT, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::Common::VoidMessage>;
352 : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestResetHBT) {}
366 :
public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetHBTResults, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::HBTResultsMessage>
368 using Base =
gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetHBTResults, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkTimeTagger::HBTResultsMessage>;
369 using Base::ResponseMessage;
373 : Base::TypedCallDataBase(OwningModule, &ThisServiceType::AsyncService::RequestGetHBTResults) {}
379 auto StreamSizeMsg = std::make_unique<DynExpProto::NetworkTimeTagger::BufferInfoMessage>();
382 auto InstrData = DynExp::dynamic_InstrumentData_cast<DynExpInstr::TimeTagger>(
Instrument->GetInstrumentData());
384 ResponseMessage.set_enabled(InstrData->GetHBTResults().Enabled);
385 ResponseMessage.set_eventcounts(Util::NumToT<google::protobuf::uint64>(InstrData->GetHBTResults().EventCounts));
386 ResponseMessage.set_integrationtimeinmicroseconds(Util::NumToT<google::protobuf::uint64>(InstrData->GetHBTResults().IntegrationTime.count()));
388 for (
const auto& Sample : InstrData->GetHBTResults().ResultVector)
390 auto BasicSampleMsg = ResponseMessage.add_results();
391 BasicSampleMsg->set_value(Sample.Value);
392 BasicSampleMsg->set_time(Sample.Time);
407 CallDataGetHardwareInfo::MakeCall(
this, Instance);
408 CallDataGetBufferInfo::MakeCall(
this, Instance);
409 CallDataGetStreamMode::MakeCall(
this, Instance);
410 CallDataSetStreamMode::MakeCall(
this, Instance);
411 CallDataClearBuffer::MakeCall(
this, Instance);
412 CallDataConfigureInput::MakeCall(
this, Instance);
413 CallDataSetExposureTime::MakeCall(
this, Instance);
414 CallDataSetCoincidenceWindow::MakeCall(
this, Instance);
415 CallDataSetInputDelay::MakeCall(
this, Instance);
416 CallDataSetHBTActive::MakeCall(
this, Instance);
417 CallDataConfigureHBT::MakeCall(
this, Instance);
418 CallDataResetHBT::MakeCall(
this, Instance);
419 CallDataGetHBTResults::MakeCall(
this, Instance);
Implementation of a gRPC server module to provide remote access to a data stream instrument meta inst...
Implementation of the data stream meta instrument, which is a base class for all instruments reading/...
Module template for building gRPC servers listening on TCP sockets for network instruments to connect...
DynExp's core class acts as the interface between the user interface and DynExp's internal data like ...
Base class for modules. Modules implement programs on their own (e.g. measurement protocols or server...
const std::unique_ptr< ModuleDataType > ModuleData
Module data belonging to this ModuleBase instance.
Configurator class for ModuleBase.
Data structure to contain data which is synchronized in between different threads....
Refer to ParamsBase::dispatch_tag.
Defines data for a thread belonging to a ModuleBase instance. Refer to RunnableInstance.
const ModuleBase::ModuleDataGetterType ModuleDataGetter
Getter for module's data. Refer to ModuleBase::ModuleDataGetterType.
Parameter class for ModuleBase.
const std::thread::id OwnerThreadID
Thread id of the thread which has constructed (and owns) this Object instance.
const ParamsBasePtrType Params
Pointer to the parameter class instance belonging to this Object instance.
Refer to ParamsBase::dispatch_tag.
Dummy parameter which is to be owned once by parameter classes that do not contain any other paramete...
const ItemIDType ID
ID of the Object this parameter class instance belongs to.
const DynExpCore & Core
Reference to DynExp's core.
Tag for function dispatching mechanism within this class used when derived classes are not intended t...
Thrown when an operation timed out before it could be completed, especially used for locking shared d...
DynExp's module namespace contains the implementation of DynExp modules which extend DynExp's core fu...
NetworkTimeTaggerT< typename NetworkDataStreamInstrument::ThisServiceType, DynExpProto::NetworkTimeTagger::NetworkTimeTagger > NetworkTimeTagger
Explicit instantiation of derivable class NetworkTimeTaggerT to create the network time tagger module...
constexpr auto Instrument
std::unique_ptr< ParamsBase > ParamsBasePtrType
Alias for a pointer to the parameter system base class ParamsBase.
size_t ItemIDType
ID type of objects/items managed by DynExp.
std::chrono::duration< double, std::pico > picoseconds
Extends std::chrono by a duration data type for picoseconds.
Accumulates include statements to provide a precompiled header.