|
DynExp
Highly flexible laboratory automation for dynamically changing experiments.
|
This template class provides basic functionality to design hardware adapters for instruments which communicate via gRPC. Derive from this abstract class to design respective hardware adapters. More...
#include <HardwareAdaptergRPC.h>
Inheritance diagram for DynExpHardware::gRPCHardwareAdapter< gRPCStub >:Public Types | |
| using | ParamsType = gRPCHardwareAdapterParams< gRPCStub > |
Type of the parameter class belonging to this Object type. Declare this alias in every derived class with the respective parameter class accompanying the derived Object. " | |
| using | ConfigType = gRPCHardwareAdapterConfigurator< gRPCStub > |
Type of the configurator class belonging to this Object type. Declare this alias in every derived class with the respective configurator class accompanying the derived Object. | |
| using | gRPCStubType = gRPCStub |
| gRPCStub gRPC stub class which is used to transfer data. | |
Public Types inherited from DynExp::HardwareAdapterBase | |
| using | ParamsType = HardwareAdapterParamsBase |
Type of the parameter class belonging to this Object type. Declare this alias in every derived class with the respective parameter class accompanying the derived Object. " | |
| using | ConfigType = HardwareAdapterConfiguratorBase |
Type of the configurator class belonging to this Object type. Declare this alias in every derived class with the respective configurator class accompanying the derived Object. | |
Public Types inherited from DynExp::Object | |
| using | ParamsType = ParamsBase |
Type of the parameter class belonging to this Object type. Declare this alias in every derived class with the respective parameter class accompanying the derived Object. | |
| using | ParamsTypeSyncPtrType = Util::SynchronizedPointer< ParamsType > |
| Alias for the return type of Object::GetParams(). Parameters wrapped into Util::SynchronizedPointer can be accessed in a thread-safe way. | |
| using | ParamsConstTypeSyncPtrType = Util::SynchronizedPointer< const ParamsType > |
| Alias for the return type of Object::GetParams() const. Parameters wrapped into Util::SynchronizedPointer can be accessed in a thread-safe way. | |
| using | ConfigType = ConfiguratorBase |
Type of the configurator class belonging to this Object type. Declare this alias in every derived class with the respective configurator class accompanying the derived Object. | |
| using | ParamsGetterType = Util::CallableMemberWrapper< Object, decltype(&Object::GetParams)> |
| Invoking an instance of this alias is supposed to call Object::GetParams() of the instance the Util::CallableMemberWrapper has been constructed with. | |
Public Member Functions | |
| gRPCHardwareAdapter (const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params) | |
| virtual | ~gRPCHardwareAdapter () |
| virtual std::string | GetName () const override |
Returns the name of this Object type. | |
| virtual std::string | GetCategory () const override |
Returns the category of this Object type. | |
Public Member Functions inherited from DynExp::HardwareAdapterBase | |
| HardwareAdapterBase (const std::thread::id OwnerThreadID, ParamsBasePtrType &&Params) | |
| Constructs a hardware adapter instance. | |
| virtual | ~HardwareAdapterBase ()=0 |
| void | ResetException () const |
| Sets LastException to nullptr in a thread-safe way. | |
| bool | IsConnected () const noexcept |
| Determines the connection status of the hardware interface. | |
Public Member Functions inherited from Util::INonCopyable | |
| INonCopyable (const INonCopyable &)=delete | |
| INonCopyable & | operator= (const INonCopyable &)=delete |
Public Member Functions inherited from DynExp::Object | |
| ItemIDType | GetID () const noexcept |
Returns the ID of this Object instance. Thread-safe since ID is const. | |
| std::string | GetCategoryAndName () const |
Builds a string from an Object's category and name to allow the user to identify an Object's type. | |
| void | EnsureReadyState (bool IsAutomaticStartup) |
Ensures that this Object instance is ready by possibly starting its worker thread or by opening connections to hardware devices. | |
| void | CheckLinkedObjectStates () const |
Checks whether Object instances this instance uses are in a ready state. Override CheckLinkedObjectStatesChild() to implement this behavior. | |
| void | Reset () |
Resets this Object instance (including all its derived classes) by calling ResetImpl(). A reset implies that the derived classes reload all their parameters from Params and that all LinkedObjectWrapper instances owned by this Object instance become invalidated. | |
| void | BlockIfUnused (const std::chrono::milliseconds Timeout=Util::ILockable::DefaultTimeout) |
Blocks this Object instance setting Object::IsBlocked to true. Refer to Object::IsBlocked for the consequences. | |
| ParamsConstTypeSyncPtrType | GetParams (const std::chrono::milliseconds Timeout=GetParamsTimeoutDefault) const |
Locks the mutex of the parameter class instance Params assigned to this Object instance and returns a pointer to the locked Params. | |
| ParamsTypeSyncPtrType | GetParams (const std::chrono::milliseconds Timeout=GetParamsTimeoutDefault) |
Locks the mutex of the parameter class instance Params assigned to this Object instance and returns a pointer to the locked Params. | |
| auto | GetObjectName (const std::chrono::milliseconds Timeout=GetParamsTimeoutDefault) const |
Returns the name of this Object instance. | |
| bool | IsSharedUsageEnabled (const std::chrono::milliseconds Timeout=GetParamsTimeoutDefault) const |
Returns whether shared usage has been enabled for this Object instance. Refer to ParamsBase::UsageType. | |
| void | SetWarning (std::string Description, int ErrorCode) const |
| Setter for Object::Warning. Sets the warning by a description and an error code. | |
| void | SetWarning (const Util::Exception &e) const |
Setter for Object::Warning. Sets the warning by retrieving the warning data from an exception e. | |
| void | ClearWarning () const |
| Resets Object::Warning. | |
| auto | GetWarning () const |
| Returns Object::Warning in a thread-safe way by copying its internal data. | |
| std::exception_ptr | GetException (const std::chrono::milliseconds Timeout=Util::ILockable::DefaultTimeout) const |
Returns a pointer to the exception which has caused this Object instance to fail. | |
| bool | IsReady () const |
Returns wheter this Object instance is ready (e.g. it is running or connected to a hardware device) and not blocked (refer to Object::IsBlocked). | |
| auto | GetUseCount (const std::chrono::milliseconds Timeout=Util::ILockable::DefaultTimeout) const |
| Counts the registered useres in a thread-safe way. | |
| bool | IsUnused (const std::chrono::milliseconds Timeout=Util::ILockable::DefaultTimeout) const |
Returns whether this Object instance is used by other instances. | |
| auto | GetUserIDs (const std::chrono::milliseconds Timeout=Util::ILockable::DefaultTimeout) const |
| Returns a list of the IDs of the registered users in a thread-safe way. | |
| auto | GetUserNamesString (const std::chrono::milliseconds Timeout=Util::ILockable::DefaultTimeout) const |
| Builds a string describing which users are registered containing their object names, categories and type names in a thread-safe way. | |
Static Public Member Functions | |
| static constexpr auto | Name () noexcept |
| Every derived class has to redefine this function. | |
| static constexpr auto | Category () noexcept |
| Every derived class has to redefine this function. | |
Static Public Member Functions inherited from DynExp::HardwareAdapterBase | |
| static constexpr auto | Category () noexcept |
| Every derived class has to redefine this function. | |
Static Public Member Functions inherited from DynExp::Object | |
| static std::string | CategoryAndNameToStr (const std::string &Category, const std::string &Name) |
Builds a string from an Object's category and name to allow the user to identify an Object's type. | |
Private Member Functions | |
| void | ResetImpl (dispatch_tag< HardwareAdapterBase >) override final |
| virtual void | ResetImpl (dispatch_tag< gRPCHardwareAdapter >) |
| void | EnsureReadyStateChild () override final |
Ensures that this Object instance is ready by possibly starting its worker thread or by opening connections to hardware devices. | |
| bool | IsReadyChild () const override final |
Returns wheter this Object instance is ready (e.g. it is running or connected to a hardware device) and not blocked (refer to Object::IsBlocked). | |
| bool | IsConnectedChild () const noexcept override final |
| Determines the connection status of the hardware interface. | |
Override | |
Override by derived class. | |
| virtual void | OpenUnsafeChild () |
| Override to add additional initialization steps. Gets executed after the gRPC connection has been established. | |
| virtual void | CloseUnsafeChild () |
| Override to add additional termination steps. Gets executed before the gRPC connection is disconnected. | |
Private Attributes | |
| std::unique_ptr< typename gRPCStub::Stub > | StubPtr |
| Pointer to the gRPC stub. | |
Not thread-safe | |
These functions must be called by a function calling | |
| gRPCStub::Stub & | GetStubUnsafe () const |
| Getter for the gRPC stub. | |
| void | CheckError (const grpc::Status Result, const std::source_location Location=std::source_location::current()) const |
Checks whether Result denotes an error state. If this is the case, a respective gRPCException is constructed from Result and thrown. | |
| bool | IsOpenedUnsafe () const noexcept |
Checks whether the gRPCHardwareAdapter is connected to a server. | |
| void | OpenUnsafe () |
| Establishes the connection to a gRPC server creating a new gRPC stub, which is stored in StubPtr. | |
| void | CloseUnsafe () |
| Closes the connection to a gRPC server. StubPtr becomes nullptr. | |
Additional Inherited Members | |
Public Attributes inherited from DynExp::Object | |
| LinkedObjectWrapperOnlyType | LinkedObjectWrapperOnly |
Allow exclusive access to some of Object's private methods to any LinkedObjectWrapper<T>. | |
Static Public Attributes inherited from DynExp::HardwareAdapterBase | |
| static constexpr auto | ShortTimeoutDefault = std::chrono::milliseconds(10) |
| Default timeout e.g. used as a default for calls to Object::GetException(). | |
| static constexpr auto | HardwareOperationTimeout = std::chrono::milliseconds(100) |
| Default timeout used to lock the mutex provided by the base class Util::ILockable to synchronize access to the hardware interface in between multiple instrument threads. | |
Static Public Attributes inherited from Util::ILockable | |
| static constexpr std::chrono::milliseconds | DefaultTimeout = std::chrono::milliseconds(10) |
| Duration which is used as a default timeout within all methods of this class if no different duration is passed to them. | |
Static Public Attributes inherited from DynExp::Object | |
| static constexpr std::chrono::milliseconds | GetParamsTimeoutDefault = std::chrono::milliseconds(100) |
Default timeout used by Object::GetParams() to lock the mutex of the parameter instance assigned to this Object instance. | |
Protected Types inherited from Util::ILockable | |
| using | MutexType = std::timed_mutex |
| using | LockType = std::unique_lock< MutexType > |
Protected Member Functions inherited from DynExp::HardwareAdapterBase | |
| void | ThrowException (std::exception_ptr Exception) const |
Stores Exception in LastException, wraps it in a Util::ForwardedException and throws the wrapped excetion by calling Util::ForwardException(). | |
| void | ThrowExceptionUnsafe (std::exception_ptr Exception) const |
Stores Exception in LastException, wraps it in a Util::ForwardedException and throws the wrapped excetion by calling Util::ForwardException(). | |
| void | SetExceptionUnsafe (std::exception_ptr Exception) const |
Stores Exception in LastException. | |
| auto | GetExceptionUnsafe () const |
| Getter for LastException. | |
Protected Member Functions inherited from Util::ILockable | |
| ILockable ()=default | |
| ~ILockable ()=default | |
| LockType | AcquireLock (const std::chrono::milliseconds Timeout=DefaultTimeout) const |
| Locks the internal mutex. Blocks until the mutex is locked or until the timeout duration is exceeded. | |
Protected Member Functions inherited from Util::INonCopyable | |
| constexpr | INonCopyable ()=default |
| ~INonCopyable ()=default | |
Protected Member Functions inherited from DynExp::Object | |
| Object (const std::thread::id OwnerThreadID, ParamsBasePtrType &&Params) | |
Constructs an Object instance. | |
| virtual | ~Object ()=0 |
| void | EnsureCallFromOwningThread () const |
Asserts that the call to this function is performed from the thread which constructed this Object instance (the thread with the id stored in Object::OwnerThreadID). | |
| ParamsTypeSyncPtrType | GetNonConstParams (const std::chrono::milliseconds Timeout=GetParamsTimeoutDefault) const |
Allows derived Objects to edit their own parameters - even in const task functions (for instruments) or event functions (for modules). | |
| auto | LockUserList (const std::chrono::milliseconds Timeout=Util::ILockable::DefaultTimeout) |
| Locks the user list for thread-safe manipulation. | |
| void | DeregisterAllUnsafe () |
| Deregisters all users and notifies them that they need to check the states of their used linked objects. | |
| auto | GetUseCountUnsafe () |
| auto | GetUserNamesStringUnsafe () const |
| bool | IsUnusedUnsafe () |
Returns whether this Object instance is used by other instances (not thread-safe). | |
This template class provides basic functionality to design hardware adapters for instruments which communicate via gRPC. Derive from this abstract class to design respective hardware adapters.
| gRPCStub | gRPC stub class which is used to transfer data. |
Definition at line 89 of file HardwareAdaptergRPC.h.
| using DynExpHardware::gRPCHardwareAdapter< gRPCStub >::ConfigType = gRPCHardwareAdapterConfigurator<gRPCStub> |
Type of the configurator class belonging to this Object type. Declare this alias in every derived class with the respective configurator class accompanying the derived Object.
Definition at line 93 of file HardwareAdaptergRPC.h.
| using DynExpHardware::gRPCHardwareAdapter< gRPCStub >::gRPCStubType = gRPCStub |
gRPCStub gRPC stub class which is used to transfer data.
Definition at line 94 of file HardwareAdaptergRPC.h.
| using DynExpHardware::gRPCHardwareAdapter< gRPCStub >::ParamsType = gRPCHardwareAdapterParams<gRPCStub> |
Type of the parameter class belonging to this Object type. Declare this alias in every derived class with the respective parameter class accompanying the derived Object. "
"
Definition at line 92 of file HardwareAdaptergRPC.h.
|
inline |
| Params | |
| OwnerThreadID | Thread id of the thread owning the Object instance to be constructed. |
| Params | Parameter class instance to be assigned to the Object instance to be constructed. |
| Util::InvalidArgException | is thrown if OwnerThreadID is an invalid thread id or if Params is nullptr. |
Definition at line 99 of file HardwareAdaptergRPC.h.
|
virtual |
Definition at line 177 of file HardwareAdaptergRPC.h.
|
inlinestaticconstexprnoexcept |
Every derived class has to redefine this function.
Definition at line 97 of file HardwareAdaptergRPC.h.
|
protected |
Checks whether Result denotes an error state. If this is the case, a respective gRPCException is constructed from Result and thrown.
| Result | gRPC status code. Refer to gRPC documentation. |
| Location | Location from which this function is called. Do not pass anything. |
Definition at line 193 of file HardwareAdaptergRPC.h.
|
private |
Closes the connection to a gRPC server. StubPtr becomes nullptr.
Definition at line 262 of file HardwareAdaptergRPC.h.
|
inlineprivatevirtual |
Override to add additional termination steps. Gets executed before the gRPC connection is disconnected.
Definition at line 170 of file HardwareAdaptergRPC.h.
|
finaloverrideprivatevirtual |
Ensures that this Object instance is ready by possibly starting its worker thread or by opening connections to hardware devices.
Implements DynExp::HardwareAdapterBase.
Definition at line 214 of file HardwareAdaptergRPC.h.
|
inlineoverridevirtual |
Returns the category of this Object type.
Reimplemented from DynExp::HardwareAdapterBase.
Reimplemented in DynExpHardware::SIPulseStreamerHardwareAdapter.
Definition at line 104 of file HardwareAdaptergRPC.h.
|
inlineoverridevirtual |
Returns the name of this Object type.
Implements DynExp::Object.
Reimplemented in DynExpHardware::SIPulseStreamerHardwareAdapter.
Definition at line 103 of file HardwareAdaptergRPC.h.
|
protected |
Getter for the gRPC stub.
| Util::NotAvailableException | is thrown if IsOpenedUnsafe() returns false. |
Definition at line 184 of file HardwareAdaptergRPC.h.
|
finaloverrideprivatevirtualnoexcept |
Determines the connection status of the hardware interface.
Implements DynExp::HardwareAdapterBase.
Definition at line 233 of file HardwareAdaptergRPC.h.
|
inlineprotectednoexcept |
Checks whether the gRPCHardwareAdapter is connected to a server.
Definition at line 130 of file HardwareAdaptergRPC.h.
|
finaloverrideprivatevirtual |
Returns wheter this Object instance is ready (e.g. it is running or connected to a hardware device) and not blocked (refer to Object::IsBlocked).
Object instance is ready, false otherwise. Implements DynExp::Object.
Definition at line 222 of file HardwareAdaptergRPC.h.
|
inlinestaticconstexprnoexcept |
Every derived class has to redefine this function.
Definition at line 96 of file HardwareAdaptergRPC.h.
|
private |
Establishes the connection to a gRPC server creating a new gRPC stub, which is stored in StubPtr.
Definition at line 248 of file HardwareAdaptergRPC.h.
|
inlineprivatevirtual |
Override to add additional initialization steps. Gets executed after the gRPC connection has been established.
Reimplemented in DynExpHardware::SIPulseStreamerHardwareAdapter.
Definition at line 165 of file HardwareAdaptergRPC.h.
|
inlineprivatevirtual |
Reimplemented in DynExpHardware::SIPulseStreamerHardwareAdapter.
Definition at line 135 of file HardwareAdaptergRPC.h.
|
finaloverrideprivate |
Definition at line 203 of file HardwareAdaptergRPC.h.
|
private |
Pointer to the gRPC stub.
Definition at line 173 of file HardwareAdaptergRPC.h.