#pragma once #include "ITomoExamHandler.h" namespace DIOS::Dev::Detail::MachineryECOM { class TomoMotionStage; class IMotionStageArgs; enum TOMO_LOGIC_GATE_CHANNEL { TLG_CHANNEL_RESET = 0x000, TLG_CHANNEL_HANDSWITCH_READY = 0x001, TLG_CHANNEL_MOTION_READY = 0x010, TLG_CHANNEL_EXPOSURE_READY = 0x100, TLG_CHANNEL_PERFORM_READY = 0x111, }; class TomoExamHandler : public ITomoExamHandler { public: TomoExamHandler(); ~TomoExamHandler(); public: virtual void OnModelLoaded(IMotionModelManager *modelManager) override; virtual void OnCoordinatesLoaded(IPositionManager *coordinates) override; virtual void OnMotionEvent(const std::string &motionEventName) override; virtual RET_STATUS OnSelectExamMode(const char *pExamKey) override; virtual RET_STATUS OnSetTechParamsInfo(ResDataObject &pParam) override; virtual RET_STATUS OnFrameAcq() override; virtual RET_STATUS OnMoveMech(FLOAT pos) override; virtual RET_STATUS OnBlindRotateMech(FLOAT Angle) override; virtual RET_STATUS OnRotateMech(FLOAT Angle) override; virtual RET_STATUS OnActionMech(FLOAT Pos, FLOAT Angle) override; virtual RET_STATUS OnStopMech() override; virtual RET_STATUS OnStartMove(DOF_MECH mech, int nOrientation) override; virtual RET_STATUS OnStopMove(DOF_MECH mech) override; virtual RET_STATUS OnGetTomoResults(ResDataObject &resultAngle, ResDataObject &resultHeight) override; virtual RET_STATUS OnRecalculateTomoMotionParam() override; virtual RET_STATUS OnFramePrep() override; virtual RET_STATUS OnFrameError() override; virtual RET_STATUS OnFrameRecover() override; virtual RET_STATUS OnSeqError() override; virtual RET_STATUS OnSetFrameRate(FLOAT frameRate) override; virtual void OnHandSwitchGearFirstPressed() override; virtual void OnHandSwitchGearFirstReleased() override; virtual void OnHandSwitchGearSecondPressed() override; virtual void OnHandSwitchGearSecondReleased() override; virtual void OnPWMOffset(PWMOffsetPacket *pwmoff) override; virtual void OnXrayOn() override; virtual void OnXrayOff() override; virtual void OnTubeAngleEncoder(EncoderPacket *tubeangleEncoder) override; virtual void OnTubeHeightEncoder(EncoderPacket *tubeheightEncoder) override; virtual RET_STATUS OnWorkstationSwitch(const char* pWorkstation) override; private: void ChangeMotionModelStage(const std::string& stageName); BOOL ParseTechnicalParams(ResDataObject ¶mIn, ResDataObject ¶mOut); void NotifyTechParamsToDriver(ResDataObject &tomoTechnicals); void UpdateTomoTriggerGate(TOMO_LOGIC_GATE_CHANNEL channel); void OnTomoTriggerGateChanged(int gateStatus); void DoPerformTomo(); BOOL IsMovingEnable(); private: HAND_SWITCH_STATUS m_handSwitchState; BOOL m_modelLoaded; IPositionManager *m_postionManager; IMotionModelManager *m_modelManager; int m_tomoLogicGate; }; }