#include "stdafx.h" #include "CArmDPCHandler.h" #include "CommunicateEntityFactory.h" #include "PacketDispatcherFactory.h" #include "IPacketDispatcher.h" #include "ICommunicateEntity.h" #include "PositionManager.h" #include "..\\LogicDeviceHandSwitch.h" #include "..\\LogicDeviceCollimator.h" #include "LogicDeviceMechCarm.h" #include "LogicDeviceManager.h" #include "ServoDriveManager.h" #include "ServoDriveFactory.h" #include "MechnicalComponentFactory.h" #include "MotionModelManager.h" #include "MotionModelFactory.h" #include "DeviceHandlerManager.h" #include "DeviceHandlerFactory.h" #include "ExamHandlerManager.h" #include "..\\ServoDriveNameDef.h" #include "CArmWorkflowManager.h" #include "CArmMachineryManager.h" #include "CArmMachineryManager.h" #include "CArmExamHandlerFactory.h" #include "MechnicalMonitor.h" #include "CarmImplPositionManager.h" #include "..\\ExamHandlerNameDef.h" #include "MotionModelNameDef.h" using namespace DIOS::Dev::Detail::MachineryECOM; CArmDPCHandler *CArmDPCHandler::m_instance = nullptr; CArmDPCHandler::CArmDPCHandler() { } CArmDPCHandler::~CArmDPCHandler() { } CArmDPCHandler *CArmDPCHandler::Instance() { if (m_instance == nullptr) { m_instance = new CArmDPCHandler(); } return m_instance; } void CArmDPCHandler::OnDriverEntry( MachineryECOMDriver* dpc, ICommunicateEntity*& outcommunicate, IPacketDispatcher*& outdispatcher, bool& outstatus) { outcommunicate = CommunicateEntityFactory::Instance()->CreateSingleton(COMMUNICATE_ENTITY_DIOSBOARD); outdispatcher = PacketDispatcherFactory::Instance()->CreateSingleton(GENERAL_DISPATCHER); if (outdispatcher) { outdispatcher->Initialize(CArmWorkflowManager::Instance()); } if (!outcommunicate || !((ICommunicateEntity *)outcommunicate)->Initialize((IPacketDispatcher*)outdispatcher)) { outstatus = false; } outstatus = true; } void CArmDPCHandler::OnSetDriverWorkPath(const char *workPath) { std::vector servoNamelist; servoNamelist.push_back(SERVO_DRIVE_TUBE_CIRCULAR); servoNamelist.push_back(SERVO_DRIVE_TUBE_SWING); //Add model list here. std::map modelList; modelList[MOTION_MODLE_CBCT] = MOTION_MODEL_TYPE_CBCT; modelList[MOTION_MODLE_CARM_GENERAL] = MOTION_MODEL_TYPE_CARM_GENERAL; modelList[MOTION_MODLE_CARM_RESTE] = MOTION_MODEL_TYPE_CARM_RESET; //Add examhandler list here. std::map examhandlerlist; examhandlerlist[CBCT_EXAMHANDLER] = EXAM_HANDLER_CBCT; examhandlerlist[CARM_GENERAL_EXAMHANDLER] = EXAM_HANDLER_CARM_COMMON; examhandlerlist[CARM_RESETHANDLER] = EXAM_HANDLER_CARM_RESET; ServoDriveManager::Instance()->Initialize(ServoDriveFactory::Instance(), servoNamelist); CArmMachineryManager::Instance()->Initialize(MechnicalComponentFactory::Instance()); PositionManager::Instance()->Attach(new CarmImplPositionManager()); PositionManager::Instance()->Initialize(CArmMachineryManager::Instance()); MotionModelManager::Instance()->Initialize( MotionModelFactory::Instance(), CArmMachineryManager::Instance(), PositionManager::Instance(), modelList); MechnicalMonitor::Instance()->Initialize(PositionManager::Instance(), CARM_TUBE_SWING, CARM_TUBE_CIRCULAR); ExamHandlerManager::Instance()->Initialize( CArmExamHandlerFactory::Instance(), PositionManager::Instance(), MotionModelManager::Instance(), examhandlerlist); DeviceHandlerManager::Instance()->Initialize(DeviceHandlerFactory::Instance()); } void CArmDPCHandler::OnConnected(ICommunicateEntity *communicate) { CArmMachineryManager::Instance()->OnCommunicationEstablished(communicate); } void CArmDPCHandler::OnLoadLogicDevices(MachineryECOMDriver* dpc) { LogicDeviceManager::Instance()->LoadLogicDevice(LOGICDEVICE_MECH_CARM, new LogicDeviceMechCarm(dpc)); LogicDeviceManager::Instance()->LoadLogicDevice(LOGICDEVICE_MECH_HSW, new LogicDeviceHandSwitch(dpc)); LogicDeviceManager::Instance()->LoadLogicDevice(LOGICDEVICE_MECH_COLLIMATOR, new LogicDeviceCollimator(dpc)); PositionManager::Instance()->SetNotifyLogicDevice(dpc); } void CArmDPCHandler::OnNitifyReadyStatus(MachineryECOMDriver* dpc) { }