13 #include "../MetaInstruments/LockinAmplifier.h"
18 #include "../include/ZI/ziAPI.h"
29 const std::source_location Location = std::source_location::current()) noexcept
40 virtual const char*
GetParamClassTag() const noexcept
override {
return "ZILabOneHardwareAdapterParams"; }
43 "Descriptor of the ZI instrument to connect with" };
45 "Interface to use for establishing a connection to the ZI instrument's data server. This is only used if the connection to the data server is not established automatically." };
73 constexpr
static bool DetermineOverload(
double PosInputLoad,
double NegInputLoad) {
return PosInputLoad > 0.95 || NegInputLoad < -0.95; }
75 constexpr
static auto Name() noexcept {
return "ZI LabOne"; }
76 constexpr
static auto Category() noexcept {
return "I/O"; }
82 virtual std::string
GetName()
const override {
return Name(); }
90 double StartAcquisition(uint8_t Demodulator,
size_t NumSamples,
size_t NumRuns = 1,
bool AverageRuns =
false)
const;
98 std::vector<DynExpInstr::LockinAmplifierDefs::LockinSample>
GetAcquiredData()
const;
130 void SetEnabled(uint8_t Demodulator,
bool Enabled)
const;
138 void ResetImpl(dispatch_tag<HardwareAdapterBase>)
override final;
146 void CheckError(const ZILabOneHardwareAdapterSyms::ZIResult_enum Result,
147 const std::source_location Location = std::source_location::current()) const;
154 void StartAcquisitionUnsafe(uint8_t Demodulator,
size_t NumSamples,
size_t NumRuns,
bool AverageRuns) const;
198 void WriteIntUnsafe(const std::
string& Path,
long long Value) const;
Implementation of DynExp hardware adapter objects.
ZILabOneException(std::string Description, const int ErrorCode, const std::source_location Location=std::source_location::current()) noexcept
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...
virtual ~ZILabOneHardwareAdapterConfigurator()=default
ZILabOneHardwareAdapterConfigurator()=default
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...
Param< TextList > Interface
ZILabOneHardwareAdapterParams(DynExp::ItemIDType ID, const DynExp::DynExpCore &Core)
void ConfigureParamsImpl(dispatch_tag< HardwareAdapterParamsBase >) override final
virtual void ConfigureParamsImpl(dispatch_tag< ZILabOneHardwareAdapterParams >)
Param< TextList > DeviceDescriptor
virtual ~ZILabOneHardwareAdapterParams()=default
double GetDemodPhaseUnsafe(uint8_t Demodulator) const
double GetOscillatorFrequency(uint8_t Oscillator) const
void ForceTrigger() const
bool IsInputOverloadUnsafe(SignalInputType SignalInput) const
void SetTriggerModeUnsafe(DynExpInstr::LockinAmplifierDefs::TriggerModeType TriggerMode, uint8_t Demodulator, uint8_t TriggerChannel) const
bool IsReadyChild() const override final
Returns wheter this Object instance is ready (e.g. it is running or connected to a hardware device) a...
double GetDemodTimeConstantUnsafe(uint8_t Demodulator) const
constexpr static bool DetermineOverload(double PosInputLoad, double NegInputLoad)
void SetDemodPhaseUnsafe(uint8_t Demodulator, double Phase) const
double GetDemodSamplingRateUnsafe(uint8_t Demodulator) const
bool GetEnabled(uint8_t Demodulator) const
bool IsInputOverload(SignalInputType SignalInput) const
bool IsOpened() const noexcept
double GetAcquisitionProgress() const
virtual void ResetImpl(dispatch_tag< ZILabOneHardwareAdapter >)
ZILabOneHardwareAdapterSyms::ZIModuleHandle DAQModuleHandle
constexpr static auto Name() noexcept
double GetDemodSamplingRate(uint8_t Demodulator) const
double ReadDoubleUnsafe(const std::string &Path) const
double GetDemodPhase(uint8_t Demodulator) const
ZILabOneHardwareAdapter(const std::thread::id OwnerThreadID, DynExp::ParamsBasePtrType &&Params)
ZILabOneHardwareAdapterSyms::ZIConnection ZIConnection
virtual std::string GetName() const override
Returns the name of this Object type.
void StopAcquisitionUnsafe() const
double GetOscillatorFrequencyUnsafe(uint8_t Oscillator) const
void EnsureReadyStateChild() override final
Ensures that this Object instance is ready by possibly starting its worker thread or by opening conne...
void SetTriggerEdgeUnsafe(DynExpInstr::LockinAmplifierDefs::TriggerEdgeType TriggerEdge) const
long long ReadIntUnsafe(const std::string &Path) const
void AutoAdjustDemodPhase(uint8_t Demodulator) const
void ResetImpl(dispatch_tag< HardwareAdapterBase >) override final
double GetDemodTimeConstant(uint8_t Demodulator) const
double GetPosInputLoad(SignalInputType SignalInput) const
virtual ~ZILabOneHardwareAdapter()
void ConfigureInput(SignalInputType SignalInput, uint8_t Demodulator) const
double GetInputRangeUnsafe(SignalInputType SignalInput) const
void AutoAdjustDemodPhaseUnsafe(uint8_t Demodulator) const
double GetInputRange(SignalInputType SignalInput) const
void AutoAdjustInputRangeUnsafe(SignalInputType SignalInput) const
void SetDemodFilterOrder(uint8_t Demodulator, uint8_t FilterOrder) const
double GetAcquisitionProgressUnsafe() const
std::vector< DynExpInstr::LockinAmplifierDefs::LockinSample > GetAcquiredDataUnsafe() const
void SetTriggerEdge(DynExpInstr::LockinAmplifierDefs::TriggerEdgeType TriggerEdge) const
void ForceTriggerUnsafe() const
uint8_t GetDemodFilterOrder(uint8_t Demodulator) const
void ClearAcquiredData() const
double GetPosInputLoadUnsafe(SignalInputType SignalInput) const
DynExpInstr::LockinAmplifierDefs::TriggerModeType GetTriggerMode() const
std::atomic< bool > Opened
void SetDemodTimeConstantUnsafe(uint8_t Demodulator, double TimeConstant) const
bool GetEnabledUnsafe(uint8_t Demodulator) const
bool HasFinishedAcquisitionUnsafe() const
virtual std::string GetCategory() const override
Returns the category of this Object type.
void WriteDoubleUnsafe(const std::string &Path, double Value) const
DynExpInstr::LockinAmplifierDefs::TriggerEdgeType GetTriggerEdgeUnsafe() const
void SetDemodTimeConstant(uint8_t Demodulator, double TimeConstant) const
void AutoAdjustInputRange(SignalInputType SignalInput) const
void SetTriggerMode(DynExpInstr::LockinAmplifierDefs::TriggerModeType TriggerMode, uint8_t Demodulator=0, uint8_t TriggerChannel=1) const
void SetDemodPhase(uint8_t Demodulator, double Phase) const
void SetDemodSamplingRate(uint8_t Demodulator, double SamplingRate) const
void SetEnabledUnsafe(uint8_t Demodulator, bool Enabled) const
double StartAcquisition(uint8_t Demodulator, size_t NumSamples, size_t NumRuns=1, bool AverageRuns=false) const
double GetNegInputLoadUnsafe(SignalInputType SignalInput) const
constexpr static auto Category() noexcept
double GetNegInputLoad(SignalInputType SignalInput) const
void ClearAcquiredDataUnsafe() const
void SetDemodSamplingRateUnsafe(uint8_t Demodulator, double SamplingRate) const
DynExpInstr::LockinAmplifierDefs::TriggerEdgeType GetTriggerEdge() const
DynExpInstr::LockinAmplifierDefs::TriggerModeType GetTriggerModeUnsafe() const
void CheckError(const ZILabOneHardwareAdapterSyms::ZIResult_enum Result, const std::source_location Location=std::source_location::current()) const
void SetInputRangeUnsafe(SignalInputType SignalInput, double InputRange) const
std::string DeviceDescriptor
std::vector< DynExpInstr::LockinAmplifierDefs::LockinSample > GetAcquiredData() const
void SetDemodFilterOrderUnsafe(uint8_t Demodulator, uint8_t FilterOrder) const
bool IsConnectedChild() const noexcept override final
Determines the connection status of the hardware interface.
std::string SignalInputTypeToCmdStr(SignalInputType SignalInput) const
void ConfigureInputUnsafe(SignalInputType SignalInput, uint8_t Demodulator) const
uint8_t GetDemodFilterOrderUnsafe(uint8_t Demodulator) const
void StartAcquisitionUnsafe(uint8_t Demodulator, size_t NumSamples, size_t NumRuns, bool AverageRuns) const
void SetInputRange(SignalInputType SignalInput, double InputRange) const
bool HasFinishedAcquisition() const
void WriteIntUnsafe(const std::string &Path, long long Value) const
void SetEnabled(uint8_t Demodulator, bool Enabled) const
void StopAcquisition() const
DynExp's core class acts as the interface between the user interface and DynExp's internal data like ...
Defines the base class for a hardware adapter object. Hardware adapters describe interfaces/connectio...
Configurator class for HardwareAdapterBase.
Parameter class for HardwareAdapterBase.
HardwareAdapterParamsBase(ItemIDType ID, const DynExpCore &Core)
Constructs the parameters for a HardwareAdapterBase instance.
const std::thread::id OwnerThreadID
Thread id of the thread which has constructed (and owns) this Object instance.
const ParamsBasePtrType Params
Pointer to the parameter class instance belonging to this Object instance.
Refer to ParamsBase::dispatch_tag.
const ItemIDType ID
ID of the Object this parameter class instance belongs to.
const DynExpCore & Core
Reference to DynExp's core.
Tag for function dispatching mechanism within this class used when derived classes are not intended t...
DynExp exceptions are derived from this class. It contains basic information about the cause of the e...
Exception(std::string Description, const ErrorType Type=ErrorType::Error, const int ErrorCode=-1, const std::source_location Location=std::source_location::current()) noexcept
Constructs an exception. Constructor is noexcept, although std::runtime_error() might throw std::bad_...
const int ErrorCode
DynExp error code from DynExpErrorCodes::DynExpErrorCodes
DynExp's hardware namespace contains the implementation of DynExp hardware adapters which extend DynE...
TriggerEdgeType
Type to determine at which edge of a trigger signal to trigger. Not a strongly-typed enum to allow us...
TriggerModeType
Type to determine the trigger mode. Not a strongly-typed enum to allow using the enumeration in a Dyn...
DynExp's instrument namespace contains the implementation of DynExp instruments which extend DynExp's...
std::unique_ptr< ParamsBase > ParamsBasePtrType
Alias for a pointer to the parameter system base class ParamsBase.
size_t ItemIDType
ID type of objects/items managed by DynExp.
DynExp's Util namespace contains commonly used functions and templates as well as extensions to Qt an...
ErrorType
DynExp's error types
Accumulates include statements to provide a precompiled header.