#pragma once #include "IMachineryManager.h" #include "DiosBoardCtrlParams.h" namespace DIOS::Dev::Detail::MachineryECOM { class ISensorADController; class ISensorEncoderController; class ITubeAngleController; class ITubeHeightController; class IExposureController; class ILandmarkController; class ICollimatorController; class IOutputController; class ITubeHorizontalController; class MachineryManager : public IMachineryManager { public: MachineryManager(); ~MachineryManager(); public: static MachineryManager *Instance(); public: virtual void Initialize(IMechnicalComponentFactory *factory) override; virtual void OnCommunicationEstablished(ICommunicateEntity *communicate) override; virtual void *Resove(const std::string &name) override; protected: void LoadMotorTubeAngleCommunicateInterfaceIDs(); void LoadMotorTubeHeightCommunicateInterfaceIDs(); void LoadMotorTubeHorizontalCommunicateInterfaceIDs(); void LoadSensorADTubeAngleCommunicateInterfaceIDs(); void LoadSensorEncoderTubeAngleCommunicateInterfaceIDs(); void LoadSensorADTubeHeightCommunicateInterfaceIDs(); void LoadSensorEncoderTubeHeightCommunicateInterfaceIDs(); void LoadSensorADDetectorHeightCommunicateInterfaceIDs(); void LoadSensorEncoderDetectorHeightCommunicateInterfaceIDs(); void LoadSensorADTubeHorizontalCommunicateInterfaceIDs(); void LoadSensorEncoderTubeHorizontalCommunicateInterfaceIDs(); void LoadExposureCommunicateInterfaceIDs(); void LoadLandmarkCommunicateInterfaceIDs(); void LoadOutputSignalInterfaceIDs(); void LoadSensorADDetectorHorizontalCommunicateInterfaceIDs(); void LoadSensorEncoderDetectorHorizontalCommunicateInterfaceIDs(); private: void CreateComponents(); void DistributeServoDrive(); void SetFilterTimeOnComponents(); void SetupAutouploadOnComponents(); void SetupTubeAngleLimition(); void SetupExposureTrigger(); void SetupTubeAD(); void SetupMotorBrake(); void SetAttribute(GPIO_DI_ID ID, GPIO_DI_PARAM param); void SetAutoUpload(GPIO_DI_ID ID, GPIO_DI_PARAM param); private: static MachineryManager *m_instance; ICommunicateEntity *m_communicate; IMechnicalComponentFactory *m_mechnicalFactory; ITubeAngleController *m_motorTubeAngle; ITubeHeightController *m_motorTubeHeight; ISensorADController *m_adTubeAngle; ISensorADController *m_adTubeHeight; ISensorADController *m_adDetectorHeight; ISensorEncoderController *m_encoderTubeAngle; ISensorEncoderController *m_encoderTubeHeight; ISensorEncoderController *m_encoderDetectorHeight; IExposureController *m_exposure; ILandmarkController *m_landmark; ICollimatorController *m_collimator; IOutputController* m_tubeLineMotionSwitch; //ITubeHorizontalController* m_motorTubeHorizontal; ITubeHeightController* m_motorTubeHorizontal; ISensorADController* m_adTubeHorizontal; ISensorEncoderController* m_encoderTubeHorizontal; ISensorADController* m_adDetectorHorizontal; }; }