DynExp
Highly flexible laboratory automation for dynamically changing experiments.
Loading...
Searching...
No Matches
NetworkDigitalOutInstr.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 "NetworkDigitalOut.pb.h"
15#include "NetworkDigitalOut.grpc.pb.h"
16
17namespace DynExpInstr
18{
19 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalOut, BaseInstr>, int>, typename... gRPCStubs>
20 class NetworkDigitalOutT;
21
22 namespace NetworkDigitalOutTasks
23 {
24 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalOut, BaseInstr>, int>, typename... gRPCStubs>
34
35 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalOut, BaseInstr>, int>, typename... gRPCStubs>
45
46 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalOut, BaseInstr>, int>, typename... gRPCStubs>
56
57 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalOut, BaseInstr>, int>, typename... gRPCStubs>
59 {
60 public:
62
63 private:
65 {
66 DynExpProto::NetworkDigitalOut::SampleMessage SampleMsg;
67 SampleMsg.set_value(Sample != 0);
68
70 {
71 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkDigitalOutT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
72 StubPtr = InstrData->template GetStub<DynExpProto::NetworkDigitalOut::NetworkDigitalOut>();
73 } // InstrData unlocked here.
74
75 InvokeStubFunc(StubPtr, &DynExpProto::NetworkDigitalOut::NetworkDigitalOut::Stub::SetAsync, SampleMsg);
76
77 return {};
78 }
79
81 };
82
83 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalOut, BaseInstr>, int>, typename... gRPCStubs>
85 {
86 public:
88
89 private:
91 {
93 {
94 auto InstrData = DynExp::dynamic_InstrumentData_cast<NetworkDigitalOutT<BaseInstr, 0, gRPCStubs...>>(Instance.InstrumentDataGetter());
95 StubPtr = InstrData->template GetStub<DynExpProto::NetworkDigitalOut::NetworkDigitalOut>();
96 } // InstrData unlocked here.
97
98 InvokeStubFunc(StubPtr, &DynExpProto::NetworkDigitalOut::NetworkDigitalOut::Stub::SetDefault, {});
99
100 return {};
101 }
102 };
103 }
104
105 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalOut, BaseInstr>, int>, typename... gRPCStubs>
106 class NetworkDigitalOutData : public NetworkDataStreamInstrumentData<BaseInstr, 0, gRPCStubs...>
107 {
108 public:
109 using InstrumentType = NetworkDigitalOutT<BaseInstr, 0, gRPCStubs...>;
110
111 NetworkDigitalOutData(size_t BufferSizeInSamples = 1)
112 : NetworkDataStreamInstrumentData<BaseInstr, 0, gRPCStubs...>(BufferSizeInSamples) {}
113 virtual ~NetworkDigitalOutData() = default;
114
115 private:
120
122 };
123
124 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalOut, BaseInstr>, int>, typename... gRPCStubs>
146
147 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalOut, BaseInstr>, int>, typename... gRPCStubs>
149 {
150 public:
151 using ObjectType = NetworkDigitalOutT<BaseInstr, 0, gRPCStubs...>;
152 using ParamsType = NetworkDigitalOutParams<BaseInstr, 0, gRPCStubs...>;
153
156
157 private:
158 virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) const override { return DynExp::MakeParams<NetworkDigitalOutConfigurator>(ID, Core); }
159 };
160
161 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalOut, BaseInstr>, int>, typename... gRPCStubs>
162 class NetworkDigitalOutT : public NetworkDataStreamInstrumentT<BaseInstr, 0, gRPCStubs...>
163 {
164 public:
165 using ParamsType = NetworkDigitalOutParams<BaseInstr, 0, gRPCStubs...>;
166 using ConfigType = NetworkDigitalOutConfigurator<BaseInstr, 0, gRPCStubs...>;
167 using InstrumentDataType = NetworkDigitalOutData<BaseInstr, 0, gRPCStubs...>;
168 using StubType = DynExpProto::NetworkDigitalOut::NetworkDigitalOut;
169
170 constexpr static auto Name() noexcept { return "Network Digital Out"; }
171
172 NetworkDigitalOutT(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType&& Params)
173 : NetworkDataStreamInstrumentT<BaseInstr, 0, gRPCStubs...>(OwnerThreadID, std::move(Params)) {}
175
176 virtual std::string GetName() const override { return Name(); }
177
178 // Override in order to disable reading from an output instrument.
179 virtual void ReadData(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<DynExp::DefaultTask>(CallbackFunc); }
180
181 virtual void Set(DigitalOutData::SampleStreamType::SampleType Sample, DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkDigitalOutTasks::SetTask<BaseInstr, 0, gRPCStubs...>>(Sample, CallbackFunc); }
182 virtual void SetDefault(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<NetworkDigitalOutTasks::SetDefaultTask<BaseInstr, 0, gRPCStubs...>>(CallbackFunc); }
183
184 virtual void SetSync(DigitalOutData::SampleStreamType::SampleType Sample) const override
185 {
186 DynExpProto::NetworkDigitalOut::SampleMessage SampleMsg;
187 SampleMsg.set_value(Sample != 0);
188
189 StubPtrType<StubType> StubPtr;
190 {
191 auto InstrData = dynamic_InstrumentData_cast<NetworkDigitalOutT>(this->GetInstrumentData());
192 StubPtr = InstrData->template GetStub<StubType>();
193 } // InstrData unlocked here.
194
195 InvokeStubFunc(StubPtr, &StubType::Stub::SetSync, SampleMsg);
196 }
197
198 private:
203
205
207
208 virtual std::unique_ptr<DynExp::InitTaskBase> MakeInitTask() const override { return DynExp::MakeTask<NetworkDigitalOutTasks::InitTask<BaseInstr, 0, gRPCStubs...>>(); }
209 virtual std::unique_ptr<DynExp::ExitTaskBase> MakeExitTask() const override { return DynExp::MakeTask<NetworkDigitalOutTasks::ExitTask<BaseInstr, 0, gRPCStubs...>>(); }
210 virtual std::unique_ptr<DynExp::UpdateTaskBase> MakeUpdateTask() const override { return DynExp::MakeTask<NetworkDigitalOutTasks::UpdateTask<BaseInstr, 0, gRPCStubs...>>(); }
211 };
212
217}
Defines a meta instrument for a single digital output port to write a data stream consisting of digit...
Implementation of a gRPC client instrument to access a remote data stream meta instrument.
SampleT SampleType
Alias for SampleT.
void DisableUserEditable()
Calls DynExp::ParamsBase::DisableUserEditable() on all bundled parameters.
Data stream instrument for bidirectional gRPC communication.
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
virtual void ResetImpl(DynExp::InstrumentDataBase::dispatch_tag< NetworkDigitalOutData >)
NetworkDigitalOutData(size_t BufferSizeInSamples=1)
virtual ~NetworkDigitalOutData()=default
void ConfigureParamsImpl(DynExp::ParamsBase::dispatch_tag< NetworkDataStreamInstrumentParams< BaseInstr, 0, gRPCStubs... > >) override final
virtual ~NetworkDigitalOutParams()=default
NetworkDigitalOutParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core)
virtual void ConfigureParamsImpl(DynExp::ParamsBase::dispatch_tag< NetworkDigitalOutParams >)
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...
static constexpr auto Name() noexcept
virtual void ReadData(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
virtual void ResetImpl(DynExp::Object::dispatch_tag< NetworkDigitalOutT >)
virtual std::unique_ptr< DynExp::InitTaskBase > MakeInitTask() const override
Factory function for an init task (InitTaskBase). Override to define the desired initialization task ...
virtual std::string GetName() const override
Returns the name of this Object type.
virtual Util::FeatureTester< FunctionGenerator::WaveformCapsType > GetWaveformCapsChild() const override
void ResetImpl(DynExp::Object::dispatch_tag< NetworkDataStreamInstrumentT< BaseInstr, 0, gRPCStubs... > >) override final
virtual void Set(DigitalOutData::SampleStreamType::SampleType Sample, DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
virtual void SetDefault(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
NetworkDigitalOutT(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params)
virtual void SetSync(DigitalOutData::SampleStreamType::SampleType Sample) const override
virtual std::unique_ptr< DynExp::ExitTaskBase > MakeExitTask() const override
Factory function for an exit task (ExitTaskBase). Override to define the desired deinitialization tas...
DynExpProto::NetworkDigitalOut::NetworkDigitalOut StubType
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...
virtual void ExitFuncImpl(DynExp::ExitTaskBase::dispatch_tag< ExitTask >, DynExp::InstrumentInstance &Instance)
void ExitFuncImpl(DynExp::ExitTaskBase::dispatch_tag< NetworkDataStreamInstrumentTasks::ExitTask< BaseInstr, 0, gRPCStubs... > >, DynExp::InstrumentInstance &Instance) override final
void InitFuncImpl(DynExp::InitTaskBase::dispatch_tag< NetworkDataStreamInstrumentTasks::InitTask< BaseInstr, 0, gRPCStubs... > >, DynExp::InstrumentInstance &Instance) override final
virtual void InitFuncImpl(DynExp::InitTaskBase::dispatch_tag< InitTask >, DynExp::InstrumentInstance &Instance)
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...
SetTask(DigitalOutData::SampleStreamType::SampleType Sample, CallbackType CallbackFunc) noexcept
const DigitalOutData::SampleStreamType::SampleType Sample
void UpdateFuncImpl(DynExp::UpdateTaskBase::dispatch_tag< NetworkDataStreamInstrumentTasks::UpdateTask< BaseInstr, 0, gRPCStubs... > >, DynExp::InstrumentInstance &Instance) override final
virtual void UpdateFuncImpl(DynExp::UpdateTaskBase::dispatch_tag< UpdateTask >, DynExp::InstrumentInstance &Instance)
void DisableUserEditable()
Calls DynExp::ParamsBase::DisableUserEditable() on all bundled parameters.
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.
void MakeAndEnqueueTask(ArgTs &&...Args) const
Calls MakeTask() to construct a new task and subsequently enqueues the task into the instrument's tas...
Definition Instrument.h:627
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
const InstrumentBase::InstrumentDataGetterType InstrumentDataGetter
Getter for instrument's data. Refer to InstrumentBase::InstrumentDataGetterType.
Definition Instrument.h:791
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
Base class for all tasks being processed by instruments. The class must not contain public virtual fu...
Definition Instrument.h:892
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
TaskBase(CallbackType CallbackFunc=nullptr) noexcept
Constructs an instrument task.
Definition Instrument.h:979
const CallbackType CallbackFunc
This callback function is called after the task has finished (either successfully or not) with a refe...
Defines the return type of task functions.
Definition Instrument.h:824
Refer to DynExp::ParamsBase::dispatch_tag.
Holds a bitset containing flags to indicate which features a certain instrument/ module etc....
Definition Util.h:1231
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.
auto dynamic_InstrumentData_cast(Util::SynchronizedPointer< From > &&InstrumentDataPtr)
Casts the data base class From into a derived InstrumentBase's (To) data class keeping the data locke...
Definition Instrument.h:810
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.