#pragma once #include #include "DIOS.Dev.IODevice.Detail.hpp" #include "DIOS.Dev.MECH.Mould.hpp" #include "DiosThread.h" #include "IODeviceWithSCF.tlh" #include "IODeviceWithSCF.tli" #include "DIOS.Dev.MSGMould.hpp" #include #ifndef DIOSDEVMECHDEMO_EXPORTS #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "DIOS.Dev.Mech.Demo64D.lib") #else #pragma comment(lib, "DIOS.Dev.Mech.Demo64.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "DIOS.Dev.Mech.DemoD.lib") #else #pragma comment(lib, "DIOS.Dev.Mech.Demo.lib") #endif #endif #endif #ifdef DIOSDEVMECHDEMO_EXPORTS #define _DIOSDEVMECHDEMO_API __declspec(dllexport) #else #define _DIOSDEVMECHDEMO_API __declspec(dllimport) #endif namespace DIOS::Dev::Detail::MECH { namespace nsDev = DIOS::Dev; class DemoDevice : public IODeviceDetail, public MECHMould { using super = IODeviceDetail; using superMech = MECHMould; public: DemoDevice(std::shared_ptr center,string configfile=""); ~DemoDevice(); virtual std::string GetGUID() const override; //检查信息接口 virtual RET_STATUS SetStudyInfo(ResDataObject& pParam) override; virtual RET_STATUS SetViewInfo(ResDataObject& pParam)override; virtual RET_STATUS SetPatientInfo(ResDataObject& pParam) override; //系统指令 virtual RET_STATUS Reset()override; //重置错误 virtual RET_STATUS SetTechParamsInfo(ResDataObject& pParam) override; virtual RET_STATUS SetPositionNumber(int pn) override; virtual RET_STATUS SetSID(float value) override; virtual RET_STATUS SetSOD(float value) override; virtual RET_STATUS MoveToHome(string& value) override; virtual RET_STATUS MoveMech(string& value) override; virtual RET_STATUS StopMech(string& value) override; virtual RET_STATUS SetGrid(AttrKey::MECH_GRIDSTATE GridState) override; virtual RET_STATUS SetAutoTracking(int nAutoTracking) override; //拼接 virtual RET_STATUS BeginStitching() override; virtual RET_STATUS InitStitching() override; virtual RET_STATUS EndStitching() override; virtual RET_STATUS SetupStitching(string& value) override; virtual RET_STATUS AcceptStitchingImage() override; virtual RET_STATUS RejectStitchingImage() override; virtual RET_STATUS CancelStitching() override; virtual RET_STATUS CompleteStitching() override; virtual RET_STATUS NewExtraView() override; virtual RET_STATUS RepeatStitching() override; virtual RET_STATUS SetAutoPosiitonNo(int nPN) override; //牛头 virtual RET_STATUS SetExpEnable(bool nExpEnabled) override; virtual RET_STATUS SetWS(int nWS) override; virtual RET_STATUS SetKV(int nKV) override; virtual RET_STATUS SetMA(float fMA) override; virtual RET_STATUS SetMS(float fMS) override; virtual RET_STATUS SetMAS(float fMAS) override; virtual RET_STATUS SetFO(int nFO) override; virtual RET_STATUS SetTechMode(int nET) override; virtual RET_STATUS SetAECField(int nAECFieldSel) override; virtual RET_STATUS SetDensity(float nAECDensity) override; virtual RET_STATUS SetBodySize(string strSize) override; //遮光器 virtual RET_STATUS SetCollimator(ECOM_COLLIMATOR_INFO& curCollimator) override; virtual RET_STATUS SetFilter(int nFilter) override; protected: void OnCallBack(); //处理指令回调函数 void Register(); //注册对外提供的属性、方法 //bool StartHardwareStatusThread(); //启动轮询线程 //static DWORD HardwareStatusThread(LPVOID pParam); //定时查询状态信息 void FireNotify(std::string key, std::string context); //向上层上报消息 void FireNotify(std::string key, int context); //向上层上报消息 void FireErrorMessage(const bool Act, const int Code, const char* ResInfo = ""); //上报错误消息 void FireWarnMessage(const bool Act, const int Code, const char* ResInfo = ""); //上报告警消息 private: ResDataObject m_MechConfig; //配置文件结构体 unique_ptr m_MSGUnit; //错误消息上报 ECOM_COLLIMATOR_INFO m_Collimator; //遮光器数据 int m_nFPDLengh{ 43 };//探测器长度 //拼接计划使用 int m_nMinAngle{ -150 };//标装-170~170,球管旋转90度是水平正对立柱 int m_nMaxAngle{ 150 }; int m_nMinHeight{ 22 };//标装20~200,球管中心是最低22,最高198 int m_nMaxHeight{ 198 }; //发生器参数记录 int m_nWS{ 0 }; int m_nKV{ 0 }; int m_fMA{ 0 }; int m_fMS{ 0 }; int m_fMAS{ 0 }; int m_nFocus{ 0 }; int m_nET{ 0 }; int m_nAECField{ 0 }; int m_nAECFilm{ 0 }; int m_nAECDensity{ 0 }; int m_nBodySize{ 0 }; }; } //----------------------------------------------------------------------------- // DEMODriver //----------------------------------------------------------------------------- namespace DIOS::Dev::Detail::MECH { class _DIOSDEVMECHDEMO_API DemoDriver : public IODriverWithSCF { using super = IODriverWithSCF ; ResDataObject m_MechConfig; public: DemoDriver(); virtual ~DemoDriver(); public: virtual void Prepare() override; virtual bool Connect() override; virtual void Disconnect() override; virtual bool isConnected() const override; virtual void Dequeue(const char* Packet, DWORD Length) override; virtual void FireNotify(int code, std::string key, std::string content) override; virtual auto CreateDevice(int index)->std::unique_ptr override; virtual std::string DriverProbe() override; virtual std::string GetResource() override; virtual std::string DeviceProbe() override; virtual bool GetDeviceConfig(std::string& Cfg) override; virtual bool SetDeviceConfig(std::string Cfg) override; DemoDevice* m_pDrMechDev{ nullptr }; private: static PACKET_RET callbackPackageProcess(const char* RecData, DWORD nLength, DWORD& PacketLength); bool m_bDemoConnected{ false }; //在 DEMO 模式下 //for webconfig ResDataObject m_DeviceConfigSend; ResDataObject m_DeviceConfig; string g_strAppPath; ResDataObject m_ConfigAll; //存储当前的配置,用于修改配置时写回文件 ResDataObject m_Configurations; //存储当前配置中“CONFIGURATION”节点的内容 std::unique_ptr m_pAttribute; std::unique_ptr m_pDescription; bool SaveConfigFile(bool bSendNotify); bool GetDeviceConfigValue(ResDataObject config, const char* pInnerKey, int nPathID, string& strValue); bool SetDeviceConfigValue(ResDataObject& config, const char* pInnerKey, int nPathID, const char* szValue); }; }