#pragma once #include #include #include "DIOS.Dev.IODevice.Detail.hpp" #include "DiosThread.h" #include "IODeviceWithSCF.tlh" #include "IODeviceWithSCF.tli" #include "DIOS.Dev.MSGMould.hpp" #include "DIOS.Dev.MECH.Mould.hpp" #include "DeliverModule.h" #include "LogicClient.h" #ifdef DIOSDEVMECHOTCSTITCH_EXPORTS #define _DIOSDEVMECHOTCSTITCH_API __declspec(dllexport) #else #define _DIOSDEVMECHOTCSTITCH_API __declspec(dllimport) #endif namespace nsSerialGPM = DIOS::Dev::MODLE::SerialGPM; enum OTC_MG_REGULATION_LEVEL { //故障等级 REG_ERRO, REG_WARN }; typedef enum _HAND_SWITCH { HAND_OFF, HAND_DWON1, HAND_DWON2, HAND_MAX }HAND_SWITCH; namespace DIOS::Dev::Detail::MECH { using cbFun = std::function ; struct tFrameMapItem { cbFun m_fFun; //处理函数 tFrameMapItem(); tFrameMapItem(cbFun f); tFrameMapItem& operator =(const tFrameMapItem& value); }; static const int TIMEOUTVALUE = 100; //----------------------------------------------------------------------------- // HanQingNormalDevice //----------------------------------------------------------------------------- class _DIOSDEVMECHOTCSTITCH_API HanQingNormalDevice : public IODeviceWithSCF , public MECHMould { using super = IODeviceWithSCF ; using superMech = MECHMould; public: HanQingNormalDevice(std::shared_ptr center, nsSCF::SCF SCF,string configfile=""); ~HanQingNormalDevice(); //上层继承 virtual std::string GetGUID() const override; RET_STATUS RefreshData(); //串口处理层 nsSerialGPM::CDeliverModule m_tDelivermodule; int m_nCMDType_WaitTime{ 0 }; int m_nCMDType_WaitACK{ 0 }; static void __stdcall ProcessClientData(const char* pData, unsigned long DataLength, void* lparam); static void __stdcall WriteLog(const char* pData, nsSerialGPM::LOG_V2_LEVEL level); RET_STATUS HWSendWaittimeCMD(char* strCommand, int lengh, int headLengh = 3); RET_STATUS HWSendWaitACKCMD(char* strCommand, int lengh, int headLengh = 3); //检查信息接口 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 MoveMech(string& value) override; virtual RET_STATUS StopMech(string& value) override; virtual RET_STATUS SetGrid(AttrKey::MECH_GRIDSTATE GridState) override; //遮光器 virtual RET_STATUS SetCollimator(ECOM_COLLIMATOR_INFO& curCollimator) override; virtual RET_STATUS SetFilter(int nFilter) override; //拼接相应接口 virtual RET_STATUS BeginStitching() 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; //HanQingNormal特有 RET_STATUS GetUnitStatus(bool sync = false); RET_STATUS GenNotify(string& key, string& value); //循环定义 static int m_iLoopTime; //循环间隔时间(毫秒) atomic_bool m_bLoopFlag{ false }; //轮询状态标志 HANDLE m_hExitEvent{ NULL };//退出事件 HANDLE m_hMoveBeginEvent{ NULL };//开始移动事件 //V3新方法 LogicClient* m_pGenClient{ nullptr }; //订阅Gen调用端 string m_strCurTransaction{"Mech_Gen"}; //消息追踪号 private: //错误上报 std::unique_ptr m_MSGUnit; HANDLE m_pHardwareStatusThread{ NULL }; //轮询线程句柄 HANDLE m_pGenStatusThread{ NULL }; //Gen线程句柄 bool StartLoopThread(); //启动轮询线程 static DWORD HardwareStatusThread(LPVOID pParam); //定时查询状态信息 static DWORD GenStatusThread(LPVOID pParam); //定时获取发生器状态 RET_STATUS HWSend(const char* strCommand, int lengh, bool reSend = false, int nTimeOut = TIMEOUTVALUE); //指令发送接口 void OnCallBack(); //处理指令回调函数 void Register(); //注册对外提供的属性、方法 void FireNotify(std::string key, std::string context); //向上层上报消息 void FireNotify(std::string key, const int context); //向上层上报消息 void FireNotify(std::string key, const float context); //向上层上报消息 bool HasErrorMessage(); //检查是否有错误消息 void FireErrorMessage(const bool Act, const int Code, const char* ResInfo = ""); //上报错误消息 void FireWarnMessage(const bool Act, const int Code, const char* ResInfo = ""); //上报告警消息 protected: ResDataObject m_MechConfig;//配置 int m_nFPDLengh{ 43 };//探测器长度 bool m_bIsBeginFlag{ false };//拼接开始标记 //发生器参数记录 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 _DIOSDEVMECHOTCSTITCH_API HanQingNormalDriver : public IODriverWithSCF { using super = IODriverWithSCF ; ResDataObject m_GenConfig; public: HanQingNormalDriver(); virtual ~HanQingNormalDriver(); virtual void Prepare() override; virtual bool Connect() override; virtual void Disconnect() override; virtual bool isConnected() const override; virtual auto CreateDevice(int index)->std::unique_ptr override; virtual void Dequeue(const char* Packet, DWORD Length) override; virtual void FireNotify(int code, std::string key, std::string content) 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; private: static PACKET_RET callbackPackageProcess(const char* RecData, DWORD nLength, DWORD& PacketLength); //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); }; }