#pragma once #include "ICBCTExamHandler.h" namespace DIOS::Dev::Detail::MachineryECOM { enum CBCT_LOGIC_GATE_CHANNEL { CBCTLG_CHANNEL_RESET, CBCTLG_CHANNEL_HANDSWITCH_READY = 0x001, CBCTLG_CHANNEL_MOTION_READY = 0x010, CBCTLG_CHANNEL_EXPOSURE_READY = 0x100, CBCTLG_CHANNEL_PERFORM_READY = 0x111, }; class CBCTExamHandler : public ICBCTExamHandler { public: CBCTExamHandler(); ~CBCTExamHandler(); public: virtual void OnModelLoaded(IMotionModelManager *modelManager) override; virtual void OnCoordinatesLoaded(IPositionManager *coordinates) override; virtual RET_STATUS OnSelectExamMode(const char *pExamKey) override; virtual RET_STATUS OnSetTechParamsInfo(ResDataObject& pParam) override; virtual void OnMotionEvent(const std::string &motionEventName) 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 OnScanningSwitch(DOF_MECH mech) override; virtual RET_STATUS OnFrameAcq() 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 OnGetExposurePositions(ResDataObject &resultAngle, ResDataObject &resultHeight) override; private: BOOL ParseTechnicalParams(ResDataObject ¶min, ResDataObject ¶mout); void NotifyTechParamsToDriver(ResDataObject &technics); void ChangeMotionModelStage(const std::string &stageName); void UpdateCBCTTriggerGate(CBCT_LOGIC_GATE_CHANNEL channel); void OnCBCTTriggerGateChanged(int gateStatus); void DoPerformCBCT(); bool IsMovingEnable(); private: HAND_SWITCH_STATUS m_handSwitchState; BOOL m_modelLoaded; IPositionManager *m_postionManager; IMotionModelManager *m_modelManager; int m_cbctPerformGate; DOF_MECH m_mechCBCT; }; }