DynExp
Highly flexible laboratory automation for dynamically changing experiments.
Loading...
Searching...
No Matches
NetworkAnalogInInstr.h
Go to the documentation of this file.
1// This file is part of DynExp.
2
8#pragma once
9
10#include "stdafx.h"
13
14#include "NetworkAnalogIn.pb.h"
15#include "NetworkAnalogIn.grpc.pb.h"
16
17namespace DynExpInstr
18{
19 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<AnalogIn, BaseInstr>, int>, typename... gRPCStubs>
20 class NetworkAnalogInT;
21
22 namespace NetworkAnalogInTasks
23 {
24 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<AnalogIn, BaseInstr>, int>, typename... gRPCStubs>
34
35 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<AnalogIn, BaseInstr>, int>, typename... gRPCStubs>
45
46 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<AnalogIn, BaseInstr>, int>, typename... gRPCStubs>
56 }
57
58 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<AnalogIn, BaseInstr>, int>, typename... gRPCStubs>
59 class NetworkAnalogInData : public NetworkDataStreamInstrumentData<BaseInstr, 0, gRPCStubs...>
60 {
61 public:
62 using InstrumentType = NetworkAnalogInT<BaseInstr, 0, gRPCStubs...>;
63
64 NetworkAnalogInData(size_t BufferSizeInSamples = 1)
65 : NetworkDataStreamInstrumentData<BaseInstr, 0, gRPCStubs...>(BufferSizeInSamples) {}
66 virtual ~NetworkAnalogInData() = default;
67
68 private:
73
75 };
76
77 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<AnalogIn, BaseInstr>, int>, typename... gRPCStubs>
99
100 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<AnalogIn, BaseInstr>, int>, typename... gRPCStubs>
102 {
103 public:
104 using ObjectType = NetworkAnalogInT<BaseInstr, 0, gRPCStubs...>;
105 using ParamsType = NetworkAnalogInParams<BaseInstr, 0, gRPCStubs...>;
106
108 virtual ~NetworkAnalogInConfigurator() = default;
109
110 private:
111 virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) const override { return DynExp::MakeParams<NetworkAnalogInConfigurator>(ID, Core); }
112 };
113
114 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<AnalogIn, BaseInstr>, int>, typename... gRPCStubs>
115 class NetworkAnalogInT : public NetworkDataStreamInstrumentT<BaseInstr, 0, gRPCStubs...>
116 {
117 public:
118 using ParamsType = NetworkAnalogInParams<BaseInstr, 0, gRPCStubs...>;
119 using ConfigType = NetworkAnalogInConfigurator<BaseInstr, 0, gRPCStubs...>;
120 using InstrumentDataType = NetworkAnalogInData<BaseInstr, 0, gRPCStubs...>;
121 using StubType = DynExpProto::NetworkAnalogIn::NetworkAnalogIn;
122
123 constexpr static auto Name() noexcept { return "Network Analog In"; }
124
125 NetworkAnalogInT(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType&& Params)
126 : NetworkDataStreamInstrumentT<BaseInstr, 0, gRPCStubs...>(OwnerThreadID, std::move(Params)) {}
127 virtual ~NetworkAnalogInT() {}
128
129 virtual std::string GetName() const override { return Name(); }
130
132 {
133 StubPtrType<StubType> StubPtr;
134 {
135 auto InstrData = dynamic_InstrumentData_cast<NetworkAnalogInT>(this->GetInstrumentData());
136 StubPtr = InstrData->template GetStub<StubType>();
137 } // InstrData unlocked here.
138
139 auto Response = InvokeStubFunc(StubPtr, &StubType::Stub::GetHardwareLimits, {});
140
141 return Response.lowerlimit();
142 }
143
145 {
146 StubPtrType<StubType> StubPtr;
147 {
148 auto InstrData = dynamic_InstrumentData_cast<NetworkAnalogInT>(this->GetInstrumentData());
149 StubPtr = InstrData->template GetStub<StubType>();
150 } // InstrData unlocked here.
151
152 auto Response = InvokeStubFunc(StubPtr, &StubType::Stub::GetHardwareLimits, {});
153
154 return Response.upperlimit();
155 }
156
158 {
159 StubPtrType<StubType> StubPtr;
160 {
161 auto InstrData = dynamic_InstrumentData_cast<NetworkAnalogInT>(this->GetInstrumentData());
162 StubPtr = InstrData->template GetStub<StubType>();
163 } // InstrData unlocked here.
164
165 auto Response = InvokeStubFunc(StubPtr, &StubType::Stub::GetHardwareResolution, {});
166
167 return Response.resolution();
168 }
169
171 {
172 StubPtrType<StubType> StubPtr;
173 {
174 auto InstrData = dynamic_InstrumentData_cast<NetworkAnalogInT>(this->GetInstrumentData());
175 StubPtr = InstrData->template GetStub<StubType>();
176 } // InstrData unlocked here.
177
178 auto Response = InvokeStubFunc(StubPtr, &StubType::Stub::GetValueUnit, {});
179
180 return ToDataStreamInstrumentUnitType(Response.unit());
181 }
182
183 // Override in order to disable writing to an input instrument.
184 virtual void WriteData(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<DynExp::DefaultTask>(CallbackFunc); }
185
187 {
188 StubPtrType<StubType> StubPtr;
189 {
190 auto InstrData = dynamic_InstrumentData_cast<NetworkAnalogInT>(this->GetInstrumentData());
191 StubPtr = InstrData->template GetStub<StubType>();
192 } // InstrData unlocked here.
193
194 auto Response = InvokeStubFunc(StubPtr, &StubType::Stub::GetAsync, {});
195
196 return Response.value();
197 }
198
200 {
201 StubPtrType<StubType> StubPtr;
202 {
203 auto InstrData = dynamic_InstrumentData_cast<NetworkAnalogInT>(this->GetInstrumentData());
204 StubPtr = InstrData->template GetStub<StubType>();
205 } // InstrData unlocked here.
206
207 auto Response = InvokeStubFunc(StubPtr, &StubType::Stub::GetSync, {});
208
209 return Response.value();
210 }
211
212 private:
217
219
220 virtual std::unique_ptr<DynExp::InitTaskBase> MakeInitTask() const override { return DynExp::MakeTask<NetworkAnalogInTasks::InitTask<BaseInstr, 0, gRPCStubs...>>(); }
221 virtual std::unique_ptr<DynExp::ExitTaskBase> MakeExitTask() const override { return DynExp::MakeTask<NetworkAnalogInTasks::ExitTask<BaseInstr, 0, gRPCStubs...>>(); }
222 virtual std::unique_ptr<DynExp::UpdateTaskBase> MakeUpdateTask() const override { return DynExp::MakeTask<NetworkAnalogInTasks::UpdateTask<BaseInstr, 0, gRPCStubs...>>(); }
223 };
224
229}
Defines a meta instrument for a single analog input port to read a data stream consisting of analog v...
Implementation of a gRPC client instrument to access a remote data stream meta instrument.
void DisableUserEditable()
Calls DynExp::ParamsBase::DisableUserEditable() on all bundled parameters.
Definition AnalogIn.cpp:17
SampleT SampleType
Alias for SampleT.
UnitType
Units which can be used for data stream instruments.
double ValueType
Data type to represent hardware limits on the sample values to write to the hardware adapter assigned...
void DisableUserEditable()
Calls DynExp::ParamsBase::DisableUserEditable() on all bundled parameters.
Definition InputPort.cpp:49
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::InstrumentDataBase::dispatch_tag< NetworkDataStreamInstrumentData< BaseInstr, 0, gRPCStubs... > >) override final
NetworkAnalogInData(size_t BufferSizeInSamples=1)
virtual ~NetworkAnalogInData()=default
virtual void ResetImpl(DynExp::InstrumentDataBase::dispatch_tag< NetworkAnalogInData >)
NetworkAnalogInParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core)
DynExp::ParamsBase::DummyParam Dummy
virtual void ConfigureParamsImpl(DynExp::ParamsBase::dispatch_tag< NetworkAnalogInParams >)
void ConfigureParamsImpl(DynExp::ParamsBase::dispatch_tag< NetworkDataStreamInstrumentParams< BaseInstr, 0, gRPCStubs... > >) override final
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 ~NetworkAnalogInParams()=default
virtual DataStreamInstrumentData::ValueType GetHardwareMinValue() const override
virtual DataStreamInstrumentData::ValueType GetHardwareMaxValue() const override
virtual std::unique_ptr< DynExp::UpdateTaskBase > MakeUpdateTask() const override
Factory function for an update task (UpdateTaskBase). Override to define the desired update task in d...
DynExpProto::NetworkAnalogIn::NetworkAnalogIn StubType
virtual std::unique_ptr< DynExp::InitTaskBase > MakeInitTask() const override
Factory function for an init task (InitTaskBase). Override to define the desired initialization task ...
virtual AnalogInData::SampleStreamType::SampleType GetSync() const
virtual std::unique_ptr< DynExp::ExitTaskBase > MakeExitTask() const override
Factory function for an exit task (ExitTaskBase). Override to define the desired deinitialization tas...
virtual void ResetImpl(DynExp::Object::dispatch_tag< NetworkAnalogInT >)
NetworkAnalogInT(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params)
static constexpr auto Name() noexcept
virtual std::string GetName() const override
Returns the name of this Object type.
void ResetImpl(DynExp::Object::dispatch_tag< NetworkDataStreamInstrumentT< BaseInstr, 0, gRPCStubs... > >) override final
virtual AnalogInData::SampleStreamType::SampleType Get(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const
virtual DataStreamInstrumentData::ValueType GetHardwareResolution() const override final
virtual void WriteData(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
virtual DataStreamInstrumentData::UnitType GetValueUnit() const override
void ExitFuncImpl(DynExp::ExitTaskBase::dispatch_tag< NetworkDataStreamInstrumentTasks::ExitTask< BaseInstr, 0, gRPCStubs... > >, DynExp::InstrumentInstance &Instance) override final
virtual void ExitFuncImpl(DynExp::ExitTaskBase::dispatch_tag< ExitTask >, DynExp::InstrumentInstance &Instance)
virtual void InitFuncImpl(DynExp::InitTaskBase::dispatch_tag< InitTask >, DynExp::InstrumentInstance &Instance)
void InitFuncImpl(DynExp::InitTaskBase::dispatch_tag< NetworkDataStreamInstrumentTasks::InitTask< BaseInstr, 0, gRPCStubs... > >, DynExp::InstrumentInstance &Instance) override final
virtual void UpdateFuncImpl(DynExp::UpdateTaskBase::dispatch_tag< UpdateTask >, DynExp::InstrumentInstance &Instance)
void UpdateFuncImpl(DynExp::UpdateTaskBase::dispatch_tag< NetworkDataStreamInstrumentTasks::UpdateTask< BaseInstr, 0, gRPCStubs... > >, DynExp::InstrumentInstance &Instance) override final
Data stream instrument for bidirectional gRPC communication.
DynExp's core class acts as the interface between the user interface and DynExp's internal data like ...
Definition DynExpCore.h:127
Refer to DynExp::ParamsBase::dispatch_tag.
Refer to DynExp::ParamsBase::dispatch_tag.
Refer to ParamsBase::dispatch_tag.
Definition Instrument.h:146
Defines data for a thread belonging to a InstrumentBase instance. Refer to RunnableInstance.
Definition Instrument.h:772
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
Tag for function dispatching mechanism within this class used when derived classes are not intended t...
Definition Object.h:349
std::function< void(const TaskBase &, ExceptionContainer &)> CallbackType
Type of a callback function which is invoked when a task has finished, failed or has been aborted....
Definition Instrument.h:939
Refer to DynExp::ParamsBase::dispatch_tag.
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 DataStreamInstrumentData::UnitType ToDataStreamInstrumentUnitType(DynExpProto::Common::UnitType Unit)
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.
std::unique_ptr< TaskT > MakeTask(ArgTs &&...Args)
Factory function to create a task to be enqueued in an instrument's task queue.
Definition Instrument.h:63
Accumulates include statements to provide a precompiled header.