#pragma once namespace DIOS::Dev::Detail::MachineryECOM { enum DOF_MECH { TOMO_TUBE_ANGLE, TOMO_TUBE_HEIGHT, TOMO_TUBE_HORIZONTAL, TOMO_DETECTOR_HEIGHT, TOMO_DETECTOR_HORIZONTAL, CARM_TUBE_SWING, CARM_TUBE_CIRCULAR, MECH_ALL, }; enum LANDMARK_TYPE { LANDMARK_HIGH, LANDMARK_LOW, }; const std::string NOTIFY_KEY_SYSTEM_READY = "MachineryReady"; const std::string NOTIFY_KEY_ALIGNSTATUS = "AlignStatus"; class IMachineryManager; class IPositionManager { public: IPositionManager(){} virtual ~IPositionManager(){} public: public: virtual void Initialize(IMachineryManager *machmanager) = 0; virtual float GetLandmarkPosition(DOF_MECH dof,LANDMARK_TYPE landmarkType) = 0; virtual float GetCurrentAbsolutePhysical(DOF_MECH dof) = 0; virtual float GetPhysicalPerMotorPulse(DOF_MECH dof) = 0; virtual float GetCurrentPhysical(DOF_MECH dof) = 0; virtual int GetCurrentSensorValue(DOF_MECH dof) = 0; virtual float ConvertSensorValue(const std::string &componentName, int sensorValue) = 0; virtual int ConvertPhysicsValue(const std::string &componentName, float physicsValue) = 0; virtual DWORD ConvertMotorStepValue(const std::string &componentName, float physicsOffset) = 0; virtual DWORD ConvertMotorSpeed(const std::string &componentName, float speed) = 0; virtual void ResetSystem() = 0; virtual BOOL IsSystemReady() = 0; virtual int IsTomoMotionLimitationStatus() = 0; virtual BOOL IsNeedCenterAdjust() = 0; virtual void SetNotifyLogicDevice(MachineryECOMDriver* logicdriver) = 0; virtual void NotifyAlignStatus(BOOL isAligned) = 0; virtual void NotifySystemIsReady() = 0; virtual void NotifySystemIsTomoMotionLimitation(int nLimitaionStatus) = 0; virtual void ResetSystem(const std::string &componentName) = 0; virtual BOOL IsSystemReady(const std::string &componentName) = 0; virtual void NotifySystemIsReady(const std::string &componentName) = 0; }; }