//====================================================================================================== // Copyright 2016, NaturalPoint Inc. //====================================================================================================== #pragma once #include #include "AnalogSystemBuildConfig.h" namespace tinyxml2wc { class XMLElement; } namespace AnalogSystem { class AnalogChannelDescriptor; class AnalogFrameBase; class IDeviceManager; class IPropVal; /// /// Interface for a Motive Device. Refer to PluginDeviceBase for details. /// class ANALOGSYSTEM_API IDevice { public: IDevice() = default; virtual ~IDevice() = default; // operations virtual bool Configure() = 0; virtual bool Deconfigure() = 0; virtual void Zero() = 0; virtual bool PrepareForSync() = 0; virtual bool PreCapture() = 0; virtual bool StartCapture() = 0; virtual bool StopCapture() = 0; virtual bool PostCapture() = 0; virtual bool IsCapturing() const = 0; // channels virtual int ChannelDescriptorCount() const = 0; virtual AnalogChannelDescriptor* ChannelDescriptor( int index ) = 0; virtual AnalogChannelDescriptor* ChannelDescriptor( const char* channelName ) = 0; virtual int ActiveChannelCount() const = 0; virtual int ChannelID( int index ) const = 0; virtual AnalogChannelDescriptor* ActiveChannelDescriptor( int index ) = 0; // data virtual AnalogFrameBase* BeginFrameUpdate( long DeviceFrameID, bool wait = true ) = 0; virtual void EndFrameUpdate() = 0; virtual void UpdateDriftCorrection( long mocapFrameID ) = 0; virtual const AnalogFrameBase* GetFrameByDeviceFrameID( long frameID ) const = 0; virtual const AnalogFrameBase* GetFrameByBufferIndex( int index ) const = 0; virtual int GetMostRecentFrameIndex() const = 0; virtual long GetMostRecentFrameID() const = 0; virtual bool MocapFrameIDToDeviceFrameIDs( long requestedMocapFrameID, long& deviceStart, long& deviceStop ) const = 0; // events virtual void OnPropertyChanged( const char* ) = 0; virtual void OnChannelPropertyChanged( const char* channelName, const char* propertyName ) = 0; virtual bool ValidatePropertyChange( const char* propertyName, const IPropVal& val ) = 0; // IProfileSubscriber Interface virtual std::wstring ProfileTypeName() const = 0; virtual std::wstring ProfileLabel() const = 0; virtual std::wstring ProfileDescription() const = 0; virtual void SaveToProfile( tinyxml2wc::XMLElement& saveTo ) const = 0; virtual bool LoadFromProfile( const tinyxml2wc::XMLElement& source ) = 0; // helpers virtual void SetDeviceManager( IDeviceManager* pDevManager ) = 0; virtual IDeviceManager* DeviceManager() = 0; virtual const char* LastError() const = 0; virtual int MessageFromHost( const char* ) const = 0; IDevice( const IDevice& other ) = delete; IDevice& operator=( const IDevice& other ) = delete; }; }