//====================================================================================================== // Copyright 2016, NaturalPoint Inc. //====================================================================================================== #pragma once #include #include "AnalogSystemBuildConfig.h" namespace AnalogSystem { class IDeviceFactory; class IDevice; /// Error message type enum MessageType { MessageType_StatusInfo = 0, // To be displayed as info item in StatusLog Panel MessageType_StatusError, // To be displayed as error item in StatusLog Panel MessageType_StatusErrorAggregate, // To be displayed as error item in StatusLog Panel (aggregate) MessageType_DialogError, // To be displayed as error MessageBox (critical stop) MessageType_Internal, // Do not display MessageType_RequestRestart, // Device requests restart MessageType_PrepareForSync, // Prepare device for live sync startup MessageType_RequestResync, // request resync MessageType_UpdateFromProfile, // apply profile settings to device MessageType_Hotplug_Add, // add device after startup (hotplugged) MessageType_Hotplug_Remove // remove device after startup (hotplugged) }; /// App run mode state enum AppRunMode { RunMode_Undefined = -1, RunMode_Live = 0, RunMode_Recording = 1, RunMode_Playback = 2 }; /// Plugin to Motive communication interface class ANALOGSYSTEM_API IDeviceManager { public: IDeviceManager() = default; virtual ~IDeviceManager() = default; /// Registers the device factory with Motive. 1 Factory per device instance. /// The plugin device factory virtual void RegisterDeviceFactory( std::unique_ptr df ) = 0; /// Dynamically add device (hotplug) from Motive's list of devices. /// The device factorye virtual bool AddDevice( std::unique_ptr df ) = 0; /// Dynamically remove a device (hotplug) from Motive's list of devices. /// The plugin device virtual bool RemoveDevice( const char* deviceName ) = 0; /// Notifies Motive when device configuration requires an application configuration update. /// The plugin device virtual bool UpdateDeviceConfiguration( IDevice* pDevice ) = 0; /// Notifies Motive with a message. virtual void MessageToHost( const char* message, int messageType = 0 ) = 0; /// Notifies Motive with a message. /// The plugin device virtual void MessageToHost( IDevice* pDevice, const char* message, int messageType = 0 ) = 0; /// Gets the number of slaves associated with a master device. /// The master device. virtual int SlaveDeviceCount( IDevice* pMasterDevice ) = 0; /// Get a slave deive by index /// The master device. /// Slave index. virtual IDevice* SlaveDevice( IDevice* pMasterDevice, int slaveIndex ) = 0; /// Get a device by serial number /// Deviceserial number virtual IDevice* GetDevice( const char* serial ) = 0; /// Gets current app playback state virtual AppRunMode HostRunMode() = 0; /// Gets an Motive application-wide setting virtual bool GetProperty(const char* propertyName, char** propertyValue) = 0; IDeviceManager( const IDeviceManager& other ) = delete; IDeviceManager& operator=( const IDeviceManager& other ) = delete; }; }