DynExp
Highly flexible laboratory automation for dynamically changing experiments.
Loading...
Searching...
No Matches
NetworkDigitalInInstr.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 "NetworkDigitalIn.pb.h"
15#include "NetworkDigitalIn.grpc.pb.h"
16
17namespace DynExpInstr
18{
19 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalIn, BaseInstr>, int>, typename... gRPCStubs>
20 class NetworkDigitalInT;
21
22 namespace NetworkDigitalInTasks
23 {
24 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalIn, BaseInstr>, int>, typename... gRPCStubs>
34
35 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalIn, BaseInstr>, int>, typename... gRPCStubs>
45
46 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalIn, BaseInstr>, int>, typename... gRPCStubs>
56 }
57
58 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalIn, BaseInstr>, int>, typename... gRPCStubs>
59 class NetworkDigitalInData : public NetworkDataStreamInstrumentData<BaseInstr, 0, gRPCStubs...>
60 {
61 public:
62 using InstrumentType = NetworkDigitalInT<BaseInstr, 0, gRPCStubs...>;
63
64 NetworkDigitalInData(size_t BufferSizeInSamples = 1)
65 : NetworkDataStreamInstrumentData<BaseInstr, 0, gRPCStubs...>(BufferSizeInSamples) {}
66 virtual ~NetworkDigitalInData() = default;
67
68 private:
73
75 };
76
77 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalIn, BaseInstr>, int>, typename... gRPCStubs>
99
100 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalIn, BaseInstr>, int>, typename... gRPCStubs>
102 {
103 public:
104 using ObjectType = NetworkDigitalInT<BaseInstr, 0, gRPCStubs...>;
105 using ParamsType = NetworkDigitalInParams<BaseInstr, 0, gRPCStubs...>;
106
108 virtual ~NetworkDigitalInConfigurator() = default;
109
110 private:
111 virtual DynExp::ParamsBasePtrType MakeParams(DynExp::ItemIDType ID, const DynExp::DynExpCore& Core) const override { return DynExp::MakeParams<NetworkDigitalInConfigurator>(ID, Core); }
112 };
113
114 template <typename BaseInstr, typename std::enable_if_t<std::is_base_of_v<DigitalIn, BaseInstr>, int>, typename... gRPCStubs>
115 class NetworkDigitalInT : public NetworkDataStreamInstrumentT<BaseInstr, 0, gRPCStubs...>
116 {
117 public:
118 using ParamsType = NetworkDigitalInParams<BaseInstr, 0, gRPCStubs...>;
119 using ConfigType = NetworkDigitalInConfigurator<BaseInstr, 0, gRPCStubs...>;
120 using InstrumentDataType = NetworkDigitalInData<BaseInstr, 0, gRPCStubs...>;
121 using StubType = DynExpProto::NetworkDigitalIn::NetworkDigitalIn;
122
123 constexpr static auto Name() noexcept { return "Network Digital In"; }
124
125 NetworkDigitalInT(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType&& Params)
126 : NetworkDataStreamInstrumentT<BaseInstr, 0, gRPCStubs...>(OwnerThreadID, std::move(Params)) {}
128
129 virtual std::string GetName() const override { return Name(); }
130
131 // Override in order to disable writing to an input instrument.
132 virtual void WriteData(DynExp::TaskBase::CallbackType CallbackFunc = nullptr) const override { DynExp::InstrumentBase::MakeAndEnqueueTask<DynExp::DefaultTask>(CallbackFunc); }
133
135 {
136 StubPtrType<StubType> StubPtr;
137 {
138 auto InstrData = dynamic_InstrumentData_cast<NetworkDigitalInT>(this->GetInstrumentData());
139 StubPtr = InstrData->template GetStub<StubType>();
140 } // InstrData unlocked here.
141
142 auto Response = InvokeStubFunc(StubPtr, &StubType::Stub::GetAsync, {});
143
144 return Response.value();
145 }
146
148 {
149 StubPtrType<StubType> StubPtr;
150 {
151 auto InstrData = dynamic_InstrumentData_cast<NetworkDigitalInT>(this->GetInstrumentData());
152 StubPtr = InstrData->template GetStub<StubType>();
153 } // InstrData unlocked here.
154
155 auto Response = InvokeStubFunc(StubPtr, &StubType::Stub::GetSync, {});
156
157 return Response.value();
158 }
159
160 private:
165
167
168 virtual std::unique_ptr<DynExp::InitTaskBase> MakeInitTask() const override { return DynExp::MakeTask<NetworkDigitalInTasks::InitTask<BaseInstr, 0, gRPCStubs...>>(); }
169 virtual std::unique_ptr<DynExp::ExitTaskBase> MakeExitTask() const override { return DynExp::MakeTask<NetworkDigitalInTasks::ExitTask<BaseInstr, 0, gRPCStubs...>>(); }
170 virtual std::unique_ptr<DynExp::UpdateTaskBase> MakeUpdateTask() const override { return DynExp::MakeTask<NetworkDigitalInTasks::UpdateTask<BaseInstr, 0, gRPCStubs...>>(); }
171 };
172
177}
Defines a meta instrument for a single digital input port to read a data stream consisting of digital...
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.
Definition DigitalIn.cpp:37
void DisableUserEditable()
Calls DynExp::ParamsBase::DisableUserEditable() on all bundled parameters.
Definition InputPort.cpp:49
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...
NetworkDigitalInData(size_t BufferSizeInSamples=1)
virtual ~NetworkDigitalInData()=default
void ResetImpl(DynExp::InstrumentDataBase::dispatch_tag< NetworkDataStreamInstrumentData< BaseInstr, 0, gRPCStubs... > >) override final
virtual void ResetImpl(DynExp::InstrumentDataBase::dispatch_tag< NetworkDigitalInData >)
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...
NetworkDigitalInParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core)
virtual void ConfigureParamsImpl(DynExp::ParamsBase::dispatch_tag< NetworkDigitalInParams >)
void ConfigureParamsImpl(DynExp::ParamsBase::dispatch_tag< NetworkDataStreamInstrumentParams< BaseInstr, 0, gRPCStubs... > >) override final
DynExp::ParamsBase::DummyParam Dummy
virtual ~NetworkDigitalInParams()=default
static constexpr auto Name() noexcept
virtual void WriteData(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
virtual DigitalInData::SampleStreamType::SampleType Get(DynExp::TaskBase::CallbackType CallbackFunc=nullptr) const override
virtual void ResetImpl(DynExp::Object::dispatch_tag< NetworkDigitalInT >)
virtual DigitalInData::SampleStreamType::SampleType GetSync() const override
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.
void ResetImpl(DynExp::Object::dispatch_tag< NetworkDataStreamInstrumentT< BaseInstr, 0, gRPCStubs... > >) override final
NetworkDigitalInT(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params)
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::NetworkDigitalIn::NetworkDigitalIn StubType
virtual std::unique_ptr< DynExp::ExitTaskBase > MakeExitTask() const override
Factory function for an exit task (ExitTaskBase). Override to define the desired deinitialization tas...
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
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)
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.
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.