#pragma once #include "IMachineryManager.h" namespace DIOS::Dev::Detail::MachineryECOM { class ICircularController; class ISwingController; class IExposureController; class ICollimatorController; class ISensorEncoderController; class ILandmarkController; class IOutputController; class CArmMachineryManager : public IMachineryManager { public: CArmMachineryManager(); ~CArmMachineryManager(); public: static CArmMachineryManager *Instance(); public: virtual void Initialize(IMechnicalComponentFactory *factory) override; virtual void OnCommunicationEstablished(ICommunicateEntity *communicate) override; virtual void *Resove(const std::string &name) override; private: void CreateComponents(); void DistributeServoDrive(); void LoadSwingCommunicateInterfaceIDs(); void LoadCircularCommunicateInterfaceIDs(); void LoadSwingEncoderCommunicateInterfaceIDs(); void LoadCircularEncoderCommunicateInterfaceIDs(); void LoadExposureCommunicateInterfaceIDs(); void LoadLandmarkCommunicateInterfaceIDs(); void LoadOutputSignalInterfaceIDs(); void SetFilterTimeOnComponents(); void SetupAutouploadOnComponents(); void SetupPFSTrigger(); private: static CArmMachineryManager *m_instance; ICommunicateEntity *m_communicate; IMechnicalComponentFactory *m_mechnicalFactory; ICircularController *m_cirular; ISwingController *m_swing; IExposureController *m_exposure; ICollimatorController *m_collimator; ISensorEncoderController *m_encoderCircular; ISensorEncoderController *m_encoderSwing; ILandmarkController *m_landmark; IOutputController* m_fluoroSwitch; }; }