DynExp
Highly flexible laboratory automation for dynamically changing experiments.
Loading...
Searching...
No Matches
NetworkAnalogOutModule.h
Go to the documentation of this file.
1// This file is part of DynExp.
2
9#pragma once
10
11#include "stdafx.h"
12#include "../MetaInstruments/AnalogOut.h"
14
15#include "NetworkAnalogOut.grpc.pb.h"
16
17namespace DynExpModule
18{
19 template <typename... gRPCServices>
20 class NetworkAnalogOutT;
21
22 template <typename... gRPCServices>
39
40 template <typename... gRPCServices>
55
56 template <typename... gRPCServices>
58 {
59 public:
60 using ObjectType = NetworkAnalogOutT<gRPCServices...>;
61 using ParamsType = NetworkAnalogOutParams<gRPCServices...>;
62
64 virtual ~NetworkAnalogOutConfigurator() = default;
65
66 private:
67 virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) const override { return DynExp::MakeParams<NetworkAnalogOutConfigurator>(ID, Core); }
68 };
69
70 template <typename... gRPCServices>
71 class NetworkAnalogOutT : public NetworkDataStreamInstrumentT<gRPCServices...>
72 {
73 public:
74 using ParamsType = NetworkAnalogOutParams<gRPCServices...>;
75 using ConfigType = NetworkAnalogOutConfigurator<gRPCServices...>;
76 using ModuleDataType = NetworkAnalogOutData<gRPCServices...>;
77 using ThisServiceType = DynExpProto::NetworkAnalogOut::NetworkAnalogOut;
78
79 constexpr static auto Name() noexcept { return "Network Analog Out"; }
80
83 virtual ~NetworkAnalogOutT() = default;
84
85 virtual std::string GetName() const override { return Name(); }
86
87 protected:
89 : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetHardwareLimits, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkAnalogOut::ValueLimitsMessage>
90 {
91 using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetHardwareLimits, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkAnalogOut::ValueLimitsMessage>;
92 using Base::ResponseMessage;
93
94 public:
95 CallDataGetHardwareLimits(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
96 : Base::TypedCallDataBase(OwningModule, &DynExpProto::NetworkAnalogOut::NetworkAnalogOut::AsyncService::RequestGetHardwareLimits) {}
97 virtual ~CallDataGetHardwareLimits() = default;
98
99 private:
100 virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
101 {
102 auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkAnalogOutT>(Instance.ModuleDataGetter());
103
104 ResponseMessage.set_lowerlimit(ModuleData->GetAnalogOut()->GetHardwareMinValue());
105 ResponseMessage.set_upperlimit(ModuleData->GetAnalogOut()->GetHardwareMaxValue());
106 }
107 };
108
110 : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetUserLimits, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkAnalogOut::ValueLimitsMessage>
111 {
112 using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetUserLimits, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkAnalogOut::ValueLimitsMessage>;
113 using Base::ResponseMessage;
114
115 public:
116 CallDataGetUserLimits(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
117 : Base::TypedCallDataBase(OwningModule, &DynExpProto::NetworkAnalogOut::NetworkAnalogOut::AsyncService::RequestGetUserLimits) {}
118 virtual ~CallDataGetUserLimits() = default;
119
120 private:
121 virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
122 {
123 auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkAnalogOutT>(Instance.ModuleDataGetter());
124
125 ResponseMessage.set_lowerlimit(ModuleData->GetAnalogOut()->GetUserMinValue());
126 ResponseMessage.set_upperlimit(ModuleData->GetAnalogOut()->GetUserMaxValue());
127 }
128 };
129
131 : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataHardwareResolution, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkAnalogOut::ValueResolutionMessage>
132 {
133 using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataHardwareResolution, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkAnalogOut::ValueResolutionMessage>;
134 using Base::ResponseMessage;
135
136 public:
137 CallDataHardwareResolution(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
138 : Base::TypedCallDataBase(OwningModule, &DynExpProto::NetworkAnalogOut::NetworkAnalogOut::AsyncService::RequestGetHardwareResolution) {}
139 virtual ~CallDataHardwareResolution() = default;
140
141 private:
142 virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
143 {
144 auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkAnalogOutT>(Instance.ModuleDataGetter());
145
146 ResponseMessage.set_resolution(ModuleData->GetAnalogOut()->GetHardwareResolution());
147 }
148 };
149
151 : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetValueUnit, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkAnalogOut::ValueUnitMessage>
152 {
153 using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataGetValueUnit, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkAnalogOut::ValueUnitMessage>;
154 using Base::ResponseMessage;
155
156 public:
157 CallDataGetValueUnit(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
158 : Base::TypedCallDataBase(OwningModule, &DynExpProto::NetworkAnalogOut::NetworkAnalogOut::AsyncService::RequestGetValueUnit) {}
159 virtual ~CallDataGetValueUnit() = default;
160
161 private:
162 virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
163 {
164 auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkAnalogOutT>(Instance.ModuleDataGetter());
165
166 ResponseMessage.set_unit(DynExpInstr::ToPrototUnitType(ModuleData->GetAnalogOut()->GetValueUnit()));
167 }
168 };
169
171 : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetAsync, ThisServiceType, DynExpProto::NetworkAnalogOut::SampleMessage, DynExpProto::Common::VoidMessage>
172 {
173 using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetAsync, ThisServiceType, DynExpProto::NetworkAnalogOut::SampleMessage, DynExpProto::Common::VoidMessage>;
174 using Base::RequestMessage;
175
176 public:
177 CallDataSetAsync(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
178 : Base::TypedCallDataBase(OwningModule, &DynExpProto::NetworkAnalogOut::NetworkAnalogOut::AsyncService::RequestSetAsync) {}
179 virtual ~CallDataSetAsync() = default;
180
181 private:
182 virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
183 {
184 auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkAnalogOutT>(Instance.ModuleDataGetter());
185
186 ModuleData->GetAnalogOut()->Set(RequestMessage.value());
187 }
188 };
189
191 : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetSync, ThisServiceType, DynExpProto::NetworkAnalogOut::SampleMessage, DynExpProto::Common::VoidMessage>
192 {
193 using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetSync, ThisServiceType, DynExpProto::NetworkAnalogOut::SampleMessage, DynExpProto::Common::VoidMessage>;
194 using Base::RequestMessage;
195
196 public:
197 CallDataSetSync(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
198 : Base::TypedCallDataBase(OwningModule, &DynExpProto::NetworkAnalogOut::NetworkAnalogOut::AsyncService::RequestSetSync) {}
199 virtual ~CallDataSetSync() = default;
200
201 private:
202 virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
203 {
204 auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkAnalogOutT>(Instance.ModuleDataGetter());
205
206 ModuleData->GetAnalogOut()->SetSync(RequestMessage.value());
207 }
208 };
209
211 : public gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetDefault, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::Common::VoidMessage>
212 {
213 using Base = gRPCModule<gRPCServices...>::template TypedCallDataBase<CallDataSetDefault, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::Common::VoidMessage>;
214
215 public:
216 CallDataSetDefault(const gRPCModule<gRPCServices...>* const OwningModule) noexcept
217 : Base::TypedCallDataBase(OwningModule, &DynExpProto::NetworkAnalogOut::NetworkAnalogOut::AsyncService::RequestSetDefault) {}
218 virtual ~CallDataSetDefault() = default;
219
220 private:
221 virtual void ProcessChildImpl(DynExp::ModuleInstance& Instance) override
222 {
223 auto ModuleData = DynExp::dynamic_ModuleData_cast<NetworkAnalogOutT>(Instance.ModuleDataGetter());
224
225 ModuleData->GetAnalogOut()->SetDefault();
226 }
227 };
228
229 private:
234
236
238 {
239 CallDataGetHardwareLimits::MakeCall(this, Instance);
240 CallDataGetUserLimits::MakeCall(this, Instance);
241 CallDataHardwareResolution::MakeCall(this, Instance);
242 CallDataGetValueUnit::MakeCall(this, Instance);
243 CallDataSetAsync::MakeCall(this, Instance);
244 CallDataSetSync::MakeCall(this, Instance);
245 CallDataSetDefault::MakeCall(this, Instance);
246
248 }
249
251
252 virtual void ValidateInstrType(const DynExpInstr::DataStreamInstrument* Instr) const override { DynExp::dynamic_Object_cast<typename ModuleDataType::InstrType>(Instr); }
253 };
254
259}
Implementation of a gRPC server module to provide remote access to a data stream instrument meta inst...
Meta instrument for a single analog output port based on the data stream, function generator,...
Definition AnalogOut.h:176
Implementation of the data stream meta instrument, which is a base class for all instruments reading/...
virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core) const override
Override to make derived classes call DynExp::MakeParams with the correct configurator type derived f...
void ResetImpl(DynExp::ModuleDataBase::dispatch_tag< NetworkDataStreamInstrumentData< gRPCServices... > >) override final
virtual void ResetImpl(DynExp::ModuleDataBase::dispatch_tag< NetworkAnalogOutData >)
virtual ~NetworkAnalogOutData()=default
DynExp::ParamsBase::DummyParam Dummy
virtual void ConfigureParamsImpl(DynExp::ParamsBase::dispatch_tag< NetworkAnalogOutParams >)
NetworkAnalogOutParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core)
virtual const char * GetParamClassTag() const noexcept override
This function is intended to be overridden once in each derived class returning the name of the respe...
virtual ~NetworkAnalogOutParams()=default
void ConfigureParamsImpl(DynExp::ParamsBase::dispatch_tag< NetworkDataStreamInstrumentParams< gRPCServices... > >) override final
CallDataGetHardwareLimits(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataGetHardwareLimits, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkAnalogOut::ValueLimitsMessage > Base
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataGetUserLimits, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkAnalogOut::ValueLimitsMessage > Base
CallDataGetUserLimits(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataGetValueUnit, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkAnalogOut::ValueUnitMessage > Base
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
CallDataGetValueUnit(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
CallDataHardwareResolution(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataHardwareResolution, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::NetworkAnalogOut::ValueResolutionMessage > Base
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataSetAsync, ThisServiceType, DynExpProto::NetworkAnalogOut::SampleMessage, DynExpProto::Common::VoidMessage > Base
CallDataSetAsync(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataSetDefault, ThisServiceType, DynExpProto::Common::VoidMessage, DynExpProto::Common::VoidMessage > Base
CallDataSetDefault(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
gRPCModule< gRPCServices... >::template TypedCallDataBase< CallDataSetSync, ThisServiceType, DynExpProto::NetworkAnalogOut::SampleMessage, DynExpProto::Common::VoidMessage > Base
virtual void ProcessChildImpl(DynExp::ModuleInstance &Instance) override
CallDataSetSync(const gRPCModule< gRPCServices... > *const OwningModule) noexcept
DynExpProto::NetworkAnalogOut::NetworkAnalogOut ThisServiceType
virtual void ValidateInstrType(const DynExpInstr::DataStreamInstrument *Instr) const override
void ResetImpl(DynExp::Object::dispatch_tag< NetworkDataStreamInstrumentT< gRPCServices... > >) override final
NetworkAnalogOutT(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params)
void CreateInitialCallDataObjectsImpl(DynExp::Object::dispatch_tag< NetworkDataStreamInstrumentT< gRPCServices... > >, DynExp::ModuleInstance &Instance) const override final
static constexpr auto Name() noexcept
virtual ~NetworkAnalogOutT()=default
virtual void CreateInitialCallDataObjectsImpl(DynExp::Object::dispatch_tag< NetworkAnalogOutT >, DynExp::ModuleInstance &Instance) const
virtual void ResetImpl(DynExp::Object::dispatch_tag< NetworkAnalogOutT >)
virtual std::string GetName() const override
Returns the name of this Object type.
Module template for building gRPC servers listening on TCP sockets for network instruments to connect...
Definition gRPCModule.h:116
DynExp's core class acts as the interface between the user interface and DynExp's internal data like ...
Definition DynExpCore.h:127
const std::unique_ptr< ModuleDataType > ModuleData
Module data belonging to this ModuleBase instance.
Definition Module.h:743
Refer to ParamsBase::dispatch_tag.
Definition Module.h:189
Defines data for a thread belonging to a ModuleBase instance. Refer to RunnableInstance.
Definition Module.h:793
const ModuleBase::ModuleDataGetterType ModuleDataGetter
Getter for module's data. Refer to ModuleBase::ModuleDataGetterType.
Definition Module.h:825
const std::thread::id OwnerThreadID
Thread id of the thread which has constructed (and owns) this Object instance.
Definition Object.h:2302
const ParamsBasePtrType Params
Pointer to the parameter class instance belonging to this Object instance.
Definition Object.h:2303
Refer to ParamsBase::dispatch_tag.
Definition Object.h:2018
Dummy parameter which is to be owned once by parameter classes that do not contain any other paramete...
Definition Object.h:522
const ItemIDType ID
ID of the Object this parameter class instance belongs to.
Definition Object.h:1779
const DynExpCore & Core
Reference to DynExp's core.
Definition Object.h:1780
Tag for function dispatching mechanism within this class used when derived classes are not intended t...
Definition Object.h:349
constexpr DynExpProto::Common::UnitType ToPrototUnitType(DataStreamInstrumentData::UnitType Unit)
DynExp's module namespace contains the implementation of DynExp modules which extend DynExp's core fu...
std::unique_ptr< ParamsBase > ParamsBasePtrType
Alias for a pointer to the parameter system base class ParamsBase.
Definition Object.h:1807
size_t ItemIDType
ID type of objects/items managed by DynExp.
Accumulates include statements to provide a precompiled header.