12 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(Instance.
InstrumentDataGetter());
13 StubPtr = InstrData->template GetStub<DynExpProto::NetworkLaser::NetworkLaser>();
16 auto Response =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkLaser::NetworkLaser::Stub::GetDeviceInfo, {});
19 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(Instance.
InstrumentDataGetter());
23 InstrData->HardwareMinFrequency = Response.hardwareminfrequency();
24 InstrData->HardwareMaxFrequency = Response.hardwaremaxfrequency();
25 InstrData->HardwareMinIntensity = Response.hardwareminintensity();
26 InstrData->HardwareMaxIntensity = Response.hardwaremaxintensity();
27 InstrData->HardwareMinScanRange = Response.hardwareminscanrange();
28 InstrData->HardwareMaxScanRange = Response.hardwaremaxscanrange();
29 InstrData->HardwareMinScanRate = Response.hardwareminscanrate();
30 InstrData->HardwareMaxScanRate = Response.hardwaremaxscanrate();
31 InstrData->HardwareModeHopFreeTuningRange = Response.hardwaremodehopfreetuningrange();
41 ExitFuncImpl(dispatch_tag<ExitTask>(), Instance);
48 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(Instance.
InstrumentDataGetter());
49 StubPtr = InstrData->template GetStub<DynExpProto::NetworkLaser::NetworkLaser>();
52 InvokeStubFunc(StubPtr, &DynExpProto::NetworkLaser::NetworkLaser::Stub::Disable, {});
65 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(Instance.
InstrumentDataGetter());
66 StubPtr = InstrData->template GetStub<DynExpProto::NetworkLaser::NetworkLaser>();
69 auto StateResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkLaser::NetworkLaser::Stub::GetState, {});
70 auto FrequencyResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkLaser::NetworkLaser::Stub::GetFrequency, {});
71 auto IntensityResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkLaser::NetworkLaser::Stub::GetIntensity, {});
72 auto ScanRangeResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkLaser::NetworkLaser::Stub::GetScanRange, {});
73 auto ScanRateResponse =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkLaser::NetworkLaser::Stub::GetScanRate, {});
76 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(Instance.
InstrumentDataGetter());
79 InstrData->SetFrequencyValue(FrequencyResponse.frequency());
80 InstrData->SetIntensityValue(IntensityResponse.intensity());
81 InstrData->SetScanRangeValue(ScanRangeResponse.scanrangeinfrequnit());
82 InstrData->SetScanRateValue(ScanRateResponse.scanrateinfrequnitpersecond());
86 UpdateFuncImpl(dispatch_tag<UpdateTask>(), Instance);
93 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(Instance.
InstrumentDataGetter());
94 StubPtr = InstrData->template GetStub<DynExpProto::NetworkLaser::NetworkLaser>();
97 DynExpProto::NetworkLaser::FrequencyMessage Message;
98 Message.set_frequency(Frequency);
100 auto Response =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkLaser::NetworkLaser::Stub::SetFrequency, Message);
102 static const std::string ErrorMsg =
"Failed to set laser frequency.";
103 if (Response.result() == DynExpProto::NetworkLaser::ResultType::InvalidValue)
105 else if (Response.result() == DynExpProto::NetworkLaser::ResultType::InvalidMethod)
107 else if (Response.result() != DynExpProto::NetworkLaser::ResultType::OK)
117 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(Instance.
InstrumentDataGetter());
118 StubPtr = InstrData->template GetStub<DynExpProto::NetworkLaser::NetworkLaser>();
121 DynExpProto::NetworkLaser::IntensityMessage Message;
122 Message.set_intensity(Intensity);
124 auto Response =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkLaser::NetworkLaser::Stub::SetIntensity, Message);
126 static const std::string ErrorMsg =
"Failed to set laser intensity.";
127 if (Response.result() == DynExpProto::NetworkLaser::ResultType::InvalidValue)
129 else if (Response.result() == DynExpProto::NetworkLaser::ResultType::InvalidMethod)
131 else if (Response.result() != DynExpProto::NetworkLaser::ResultType::OK)
141 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(Instance.
InstrumentDataGetter());
142 StubPtr = InstrData->template GetStub<DynExpProto::NetworkLaser::NetworkLaser>();
145 DynExpProto::NetworkLaser::ScanRangeMessage Message;
146 Message.set_scanrangeinfrequnit(ScanRange);
148 auto Response =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkLaser::NetworkLaser::Stub::SetScanRange, Message);
150 static const std::string ErrorMsg =
"Failed to set laser scan range.";
151 if (Response.result() == DynExpProto::NetworkLaser::ResultType::InvalidValue)
153 else if (Response.result() == DynExpProto::NetworkLaser::ResultType::InvalidMethod)
155 else if (Response.result() != DynExpProto::NetworkLaser::ResultType::OK)
165 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(Instance.
InstrumentDataGetter());
166 StubPtr = InstrData->template GetStub<DynExpProto::NetworkLaser::NetworkLaser>();
169 DynExpProto::NetworkLaser::ScanRateMessage Message;
170 Message.set_scanrateinfrequnitpersecond(ScanRate);
172 auto Response =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkLaser::NetworkLaser::Stub::SetScanRate, Message);
174 static const std::string ErrorMsg =
"Failed to set laser scan rate.";
175 if (Response.result() == DynExpProto::NetworkLaser::ResultType::InvalidValue)
177 else if (Response.result() == DynExpProto::NetworkLaser::ResultType::InvalidMethod)
179 else if (Response.result() != DynExpProto::NetworkLaser::ResultType::OK)
189 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(Instance.
InstrumentDataGetter());
190 StubPtr = InstrData->template GetStub<DynExpProto::NetworkLaser::NetworkLaser>();
193 auto Response =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkLaser::NetworkLaser::Stub::Enable, {});
195 static const std::string ErrorMsg =
"Failed to enable laser emission.";
196 if (Response.result() == DynExpProto::NetworkLaser::ResultType::InvalidMethod)
198 else if (Response.result() != DynExpProto::NetworkLaser::ResultType::OK)
208 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(Instance.
InstrumentDataGetter());
209 StubPtr = InstrData->template GetStub<DynExpProto::NetworkLaser::NetworkLaser>();
212 InvokeStubFunc(StubPtr, &DynExpProto::NetworkLaser::NetworkLaser::Stub::Disable, {});
221 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(Instance.
InstrumentDataGetter());
222 StubPtr = InstrData->template GetStub<DynExpProto::NetworkLaser::NetworkLaser>();
225 auto Response =
InvokeStubFunc(StubPtr, &DynExpProto::NetworkLaser::NetworkLaser::Stub::ScanContinuously, {});
227 static const std::string ErrorMsg =
"Failed to scan laser emission.";
228 if (Response.result() == DynExpProto::NetworkLaser::ResultType::InvalidMethod)
230 else if (Response.result() != DynExpProto::NetworkLaser::ResultType::OK)
240 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(Instance.
InstrumentDataGetter());
241 StubPtr = InstrData->template GetStub<DynExpProto::NetworkLaser::NetworkLaser>();
244 InvokeStubFunc(StubPtr, &DynExpProto::NetworkLaser::NetworkLaser::Stub::DisableScan, {});
251 FrequencyUnit = FrequencyUnitType::Hz;
252 IntensityUnit = IntensityUnitType::Power_W;
253 HardwareMinFrequency = 0.0;
254 HardwareMaxFrequency = 0.0;
255 HardwareMinIntensity = 0.0;
256 HardwareMaxIntensity = 0.0;
257 HardwareMinScanRange = 0.0;
258 HardwareMaxScanRange = 0.0;
259 HardwareMinScanRate = 0.0;
260 HardwareMaxScanRate = 0.0;
261 HardwareModeHopFreeTuningRange = 0.0;
263 LaserState = LaserStateType::Ready;
265 ResetImpl(dispatch_tag<NetworkLaserData>());
275 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(
GetInstrumentData());
277 return InstrData->GetFrequencyUnit();
282 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(
GetInstrumentData());
284 return InstrData->GetIntensityUnit();
289 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(
GetInstrumentData());
291 return InstrData->GetMinFrequency();
296 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(
GetInstrumentData());
298 return InstrData->GetMaxFrequency();
303 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(
GetInstrumentData());
305 return InstrData->GetMinIntensity();
310 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(
GetInstrumentData());
312 return InstrData->GetMaxIntensity();
317 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(
GetInstrumentData());
319 return InstrData->GetMinScanRange();
324 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(
GetInstrumentData());
326 return InstrData->GetMaxScanRange();
331 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(
GetInstrumentData());
333 return InstrData->GetMinScanRate();
338 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(
GetInstrumentData());
340 return InstrData->GetMaxScanRate();
345 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkLaser>(
GetInstrumentData());
347 return InstrData->GetModeHopFreeTuningRange();
Implementation of a gRPC client instrument to access a remote laser meta instrument.
FrequencyUnitType
Supported laser frequency units.
IntensityUnitType
Supported laser intensity units.
Meta instrument for a laser.
void ResetImpl(dispatch_tag< gRPCInstrumentData< Laser, 0, DynExpProto::NetworkLaser::NetworkLaser > >) 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 ExitFuncImpl(dispatch_tag< gRPCInstrumentTasks::ExitTask< Laser, 0, DynExpProto::NetworkLaser::NetworkLaser > >, DynExp::InstrumentInstance &Instance) override final
void InitFuncImpl(dispatch_tag< gRPCInstrumentTasks::InitTask< Laser, 0, DynExpProto::NetworkLaser::NetworkLaser > >, 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...
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< Laser, 0, DynExpProto::NetworkLaser::NetworkLaser > >, DynExp::InstrumentInstance &Instance) override final
virtual double GetMinScanRate() const override
Determines the minimal frequency scan rate. The default implementation returns 0.0,...
virtual double GetMinFrequency() const override
Determines the minimal emission frequency. The default implementation returns GetMaxFrequency() which...
virtual LaserData::FrequencyUnitType GetFrequencyUnit() const override
Determines the frequency unit.
virtual double GetMaxScanRange() const override
Determines the maximal frequency scan range. The default implementation returns 0....
virtual double GetMaxScanRate() const override
Determines the maximal frequency scan rate. The default implementation returns 0.0,...
virtual double GetMinScanRange() const override
Determines the minimal frequency scan range. The default implementation returns 0....
NetworkLaser(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params)
virtual LaserData::IntensityUnitType GetIntensityUnit() const override
Determines the intensity unit.
virtual double GetModeHopFreeTuningRange() const override
Determines the mode hop free tuning range. The default implementation returns 0.0,...
virtual double GetMinIntensity() const override
Determines the minimal emission intensity. The default implementation returns GetMaxIntensity() which...
virtual double GetMaxIntensity() const override
Determines the maximal emission intensity.
virtual double GetMaxFrequency() const override
Determines the maximal emission frequency.
void ResetImpl(dispatch_tag< gRPCInstrument< Laser, 0, DynExpProto::NetworkLaser::NetworkLaser > >) override final
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...
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 LaserData::FrequencyUnitType ToLaserUnitType(DynExpProto::Common::FrequencyUnitType Unit)
constexpr LaserData::LaserStateType ToLaserStateType(DynExpProto::NetworkLaser::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.