12 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
13 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
16 auto Response =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::GetDeviceInfo, {});
19 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
23 InstrData->MinFrequency = Response.hardwareminfrequency();
24 InstrData->MaxFrequency = Response.hardwaremaxfrequency();
26 InstrData->SetMinExposureTime(Response.hardwareminexposuretime_ms());
27 InstrData->SetMaxExposureTime(Response.hardwaremaxexposuretime_ms());
37 ExitFuncImpl(dispatch_tag<ExitTask>(), Instance);
44 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
45 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
48 InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::Abort, {});
61 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
62 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
65 auto StateResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::GetState, {});
66 auto ExposureTimeResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::GetExposureTime, {});
67 auto FrequencyRangeResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::GetFrequencyRange, {});
68 auto SilentModeResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::GetSilentMode, {});
70 DynExpProto::NetworkSpectrometer::SpectrumMessage SpectrumResponse;
71 if (StateResponse.spectrumavailable())
72 SpectrumResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::GetSpectrum, {});
75 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
78 InstrData->CapturingProgress = StateResponse.has_progress() ? StateResponse.progress() : 0;
79 InstrData->SetCurrentExposureTime(ExposureTimeResponse.time_ms());
80 InstrData->SetCurrentLowerFrequency(FrequencyRangeResponse.lowerfrequency());
81 InstrData->SetCurrentUpperFrequency(FrequencyRangeResponse.upperfrequency());
82 InstrData->SetSilentModeEnabled(SilentModeResponse.enable());
84 if (StateResponse.spectrumavailable() && SpectrumResponse.spectrumavailable())
86 if (SpectrumResponse.resultmsg().result() != DynExpProto::NetworkSpectrometer::ResultType::OK)
91 for (
decltype(SpectrumResponse.samples_size()) i = 0; i < SpectrumResponse.samples_size(); ++i)
92 Spectrum.
GetSpectrum().insert({ SpectrumResponse.samples(i).frequency(), SpectrumResponse.samples(i).value() });
94 InstrData->SetSpectrum(std::move(Spectrum));
100 UpdateFuncImpl(dispatch_tag<UpdateTask>(), Instance);
107 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
108 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
111 DynExpProto::NetworkSpectrometer::ExposureTimeMessage Message;
112 Message.set_time_ms(ExposureTime.count());
114 InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::SetExposureTime, Message);
123 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
124 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
127 DynExpProto::NetworkSpectrometer::FrequencyRangeMessage Message;
128 Message.set_lowerfrequency(LowerFrequency);
129 Message.set_upperfrequency(UpperFrequency);
131 InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::SetFrequencyRange, Message);
140 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
141 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
144 DynExpProto::NetworkSpectrometer::SilentModeMessage Message;
145 Message.set_enable(Enable);
147 InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::SetSilentMode, Message);
156 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
157 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
160 auto Response =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::RecordSpectrumAsync, {});
161 if (Response.result() != DynExpProto::NetworkSpectrometer::ResultType::OK)
171 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(Instance.
InstrumentDataGetter());
172 StubPtr = InstrData->template GetStub<DynExpProto::NetworkSpectrometer::NetworkSpectrometer>();
175 InvokeStubFunc(StubPtr, &DynExpProto::NetworkSpectrometer::NetworkSpectrometer::Stub::Abort, {});
182 FrequencyUnit = FrequencyUnitType::Hz;
183 IntensityUnit = IntensityUnitType::Counts;
187 CapturingState = CapturingStateType::Ready;
188 CapturingProgress = 0.0;
190 ResetImpl(dispatch_tag<NetworkSpectrometerData>());
200 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(
GetInstrumentData());
202 return InstrData->GetFrequencyUnit();
207 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(
GetInstrumentData());
209 return InstrData->GetIntensityUnit();
214 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(
GetInstrumentData());
216 return InstrData->GetMinFrequency();
221 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkSpectrometer>(
GetInstrumentData());
223 return InstrData->GetMaxFrequency();
Implementation of a gRPC client instrument to access a remote spectrometer meta instrument.
void ResetImpl(dispatch_tag< gRPCInstrumentData< Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer > >) override final
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
void ExitFuncImpl(dispatch_tag< gRPCInstrumentTasks::ExitTask< Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer > >, DynExp::InstrumentInstance &Instance) override final
void InitFuncImpl(dispatch_tag< gRPCInstrumentTasks::InitTask< Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer > >, DynExp::InstrumentInstance &Instance) override final
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
virtual DynExp::TaskResultType RunChild(DynExp::InstrumentInstance &Instance) override
Runs the task. Override RunChild() to define a derived task's action(s). Any exception leaving RunChi...
void UpdateFuncImpl(dispatch_tag< gRPCInstrumentTasks::UpdateTask< Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer > >, DynExp::InstrumentInstance &Instance) override final
virtual SpectrometerData::FrequencyUnitType GetFrequencyUnit() const override
Determines the frequency (x-axis) unit of the spectra acquired by the derived instrument.
virtual double GetMaxFrequency() const override
Determines the maximal upper frequency limit where the spectrum acquisition can end.
virtual SpectrometerData::IntensityUnitType GetIntensityUnit() const override
Determines the intensity (y-axis) unit of the spectra acquired by the derived instrument.
virtual double GetMinFrequency() const override
Determines the minimal lower frequency limit where the spectrum acquisition can begin.
NetworkSpectrometer(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params)
void ResetImpl(dispatch_tag< gRPCInstrument< Spectrometer, 0, DynExpProto::NetworkSpectrometer::NetworkSpectrometer > >) override final
Type describing a spectrum as acquired by the Spectrometer instrument.
auto & GetSpectrum() const noexcept
Getter for Samples.
FrequencyUnitType
Supported spectrometer frequency units.
IntensityUnitType
Supported spectrometer intensity units.
Meta instrument for a spectrometer.
Data class for gRPCInstrument.
Defines a task for deinitializing an instrument within an instrument inheritance hierarchy....
Defines a task for initializing an instrument within an instrument inheritance hierarchy....
Defines a task for updating an instrument within an instrument inheritance hierarchy....
Meta instrument template for transforming meta instruments into network instruments,...
InstrumentDataTypeSyncPtrType GetInstrumentData(const std::chrono::milliseconds Timeout=GetInstrumentDataTimeoutDefault)
Locks the mutex of the instrument data class instance InstrumentData assigned to this InstrumentBase ...
Defines data for a thread belonging to a InstrumentBase instance. Refer to RunnableInstance.
const InstrumentBase::InstrumentDataGetterType InstrumentDataGetter
Getter for instrument's data. Refer to InstrumentBase::InstrumentDataGetterType.
Refer to ParamsBase::dispatch_tag.
const auto & GetOwner() const noexcept
Returns Owner.
Defines the return type of task functions.
DynExp's instrument namespace contains the implementation of DynExp instruments which extend DynExp's...
constexpr SpectrometerData::FrequencyUnitType ToSpectrometerUnitType(DynExpProto::Common::FrequencyUnitType Unit)
ResponseMsgType InvokeStubFunc(StubPtrType< gRPCStub > StubPtr, StubFuncPtrType< gRPCStub, RequestMsgType, ResponseMsgType > StubFunc, const RequestMsgType &RequestMsg)
Invokes a gRPC stub function as a remote procedure call. Waits for a fixed amount of time (2 seconds)...
std::shared_ptr< typename gRPCStub::Stub > StubPtrType
Alias for a pointer to a gRPC stub.
constexpr SpectrometerData::CapturingStateType ToSpectrometerStateType(DynExpProto::NetworkSpectrometer::StateType State)
std::unique_ptr< ParamsBase > ParamsBasePtrType
Alias for a pointer to the parameter system base class ParamsBase.
Accumulates include statements to provide a precompiled header.