#pragma once //#include #include "IODeviceWithSCF.tlh" #include "IODeviceWithSCF.tli" #include "CCOS.Dev.IODevice.Detail.hpp" #include "CCOS.Dev.MSGMould.hpp" #include "CCOS.Dev.Generator.Mould.hpp" #include "DAP.BasicMoulds.hpp" #include "LogicClient.h" //#include "DeliverModule.h" #ifdef CCOSDEVGENIMD_EXPORTS #define _CCOSDEVGENIMD_API __declspec(dllexport) #else #define _CCOSDEVGENIMD_API __declspec(dllimport) #endif typedef struct tagGenAPFParam { int nWorkStation; int nFluType; int nABSMode; int nDoseLevel; int nFKVP; float fFMA; float fPPS; float fFMS;//Plus length tagGenAPFParam& operator=(const tagGenAPFParam& visit) { nWorkStation = visit.nWorkStation; nFluType = visit.nFluType; nABSMode = visit.nABSMode; nDoseLevel = visit.nDoseLevel; nFKVP = visit.nFKVP; fFMA = visit.fFMA; fPPS = visit.fPPS; fFMS = visit.fFMS; return *this; } }ECOM_GEN_APF_PARAMS; namespace CCOS::Dev::Detail::Generator { static const int TIMEOUTVALUE = 10; //----------------------------------------------------------------------------- // IMDDevice //----------------------------------------------------------------------------- namespace nDev = CCOS::Dev; namespace DevDAP = CCOS::Dev::Detail::DAP; class _CCOSDEVGENIMD_API IMDDevice : public IODeviceWithSCF ,public GeneratorMould { using super = IODeviceWithSCF ; using superGen = GeneratorMould; public: IMDDevice (std::shared_ptr center, nsSCF::SCF SCF); IMDDevice(std::shared_ptr center, nsSCF::SCF SCF,string configfile); ~IMDDevice (); void SubscribeSelf(ccos_mqtt_connection* conn) override; bool LoadConfig(string configfile); virtual std::string GetGUID() const override; private: RET_STATUS HWSend (char * strCommand, int nTimeOut = TIMEOUTVALUE); void OnCallBack (); std::unique_ptr m_DAP; std::unique_ptr m_MSGUnit; bool StartHardwareStatusThread(); static DWORD HardwareStatusThread(LPVOID pParam); HANDLE m_pHardwareStatusThread; string m_strCurrentSMState{""}; bool m_bLoadConfigFile{ false }; private: void Register(); public: virtual RET_STATUS IncKV() override; virtual RET_STATUS DecKV() override; virtual RET_STATUS SetKV(float value) override; virtual RET_STATUS IncMA() override; virtual RET_STATUS DecMA() override; virtual RET_STATUS SetMA(float value) override; virtual RET_STATUS IncMS() override; virtual RET_STATUS DecMS() override; virtual RET_STATUS SetMS(float value) override; virtual RET_STATUS IncMAS() override; virtual RET_STATUS DecMAS() override; virtual RET_STATUS SetMAS(float value) override; virtual RET_STATUS SetTechmode(int value) override; virtual RET_STATUS SetFocus(int value) override; virtual RET_STATUS SetAECDensity(int value) override; virtual RET_STATUS SetAECField(int value) override; virtual RET_STATUS SetAECFilm(int value) override; virtual RET_STATUS SetWS(const std::string value) override; virtual RET_STATUS SetAPR(const _tAPRArgs& t) override; virtual RET_STATUS QueryHE(int& value) override; virtual RET_STATUS QueryPostKV(float& value) override; virtual RET_STATUS QueryPostMA(float& value) override; virtual RET_STATUS QueryPostMS(float& value) override; virtual RET_STATUS QueryPostMAS(float& value) override; virtual RET_STATUS SetGenSynState(int value) override; virtual RET_STATUS SetGenState(int value) override; virtual RET_STATUS SetExpEnable() override; virtual RET_STATUS SetExpDisable()override; virtual RET_STATUS Reset()override; virtual RET_STATUS SetExpMode(std::string value) override; virtual RET_STATUS SetFrameRate(FLOAT frameRate) override; virtual RET_STATUS SetEXAMMode(std::string value) override; RET_STATUS Clear_DAP(); RET_STATUS GetValue_DAP(float& value); void StartMove(); void EndMove(); int GetGenState(); //LSY add bool GetFLIntTimer(); //透视 virtual RET_STATUS IncFluKV() override; //透视KV调节 virtual RET_STATUS DecFluKV() override; virtual RET_STATUS SetFluKV(float value) override; virtual RET_STATUS IncFluMA() override; //透视MA调节 virtual RET_STATUS DecFluMA() override; virtual RET_STATUS SetFluMA(float value) override; virtual RET_STATUS IncFluMS() override; //透视MS调节 virtual RET_STATUS DecFluMS() override; virtual RET_STATUS SetFluMS(float value) override; virtual RET_STATUS SetPPS(float frameRate) override; //脉冲透视帧率调节 virtual RET_STATUS INCPPS() override; virtual RET_STATUS DECPPS() override; virtual RET_STATUS SetPluseWidth(float fplusewidth) override; //设置脉宽 virtual RET_STATUS SetABSMode(int nMode) override; //设置自动亮度调节(ABS)模式 virtual RET_STATUS SetABSCurve(int curveNum) override; //ABS曲线调节 virtual RET_STATUS IncABSCurve() override; virtual RET_STATUS DecABSCurve() override; virtual RET_STATUS SetABSValue(float fABSValue) override; virtual RET_STATUS SetABSTargetEXI(float fEXIValue) override; virtual RET_STATUS SetAPF(const _tAPFArgs& t) override; //一次性设置透视参数 virtual float GetFluIntTimer() override; //获取透视周期时间 virtual float GetFluAccTimer() override; //获取透视曝光累计时间 virtual RET_STATUS ResetFluTimer(int ntype) override; //清空透视曝光累计时间 virtual RET_STATUS SetFluPre(int bPrepare) override; //设置透视预备阶段使能 virtual RET_STATUS SetFluEXP(int bPrepare) override; //设置透视曝光阶段使能 virtual RET_STATUS SetFLFMode(std::string value) override; //设置透视模式 virtual RET_STATUS SetFluMAG(int nsize) override; //设置MG:0 to 3 - sets Mag size, ASCII character for 255 - Mag selection disabled virtual RET_STATUS DisableMAG() override; virtual RET_STATUS SetFluDoseLever(int nlever) override; //设置透视剂量等级( 0,1,2 ) virtual RET_STATUS SetHalfDose(int nlever) override; //设置透视半价剂量 virtual RET_STATUS TransferRadCurve(int ncurve) override; //点片KV跟随透视,0-3 Set curve 0:disable virtual RET_STATUS SetGenCurrentSMState(std::string value); protected: RET_STATUS RefreshData (); RET_STATUS SetRPS(int rps);//设置连续点片帧率 private: void FireNotify (std::string key, std::string context); HANDLE m_hGenPostEvent; //暂时不使用了. _tAPRArgs m_t; //保存服务传入的参数 string m_strConfigPath; //imd generator confile. ResDataObject m_GenConfig; //driver's config file. ECOM_GEN_APF_PARAMS m_stParamsAPF; LogicClient* m_pSubSystemClient; std::string GetDynamicLibraryPath(); std::string GetFileVersion(std::string strFilePathName); bool m_bXrayonProcess{ false }; }; } //----------------------------------------------------------------------------- // IMDDriver //----------------------------------------------------------------------------- namespace CCOS::Dev::Detail::Generator { class _CCOSDEVGENIMD_API IMDDriver : public IODriverWithSCF { using super = IODriverWithSCF ; public: IMDDriver (); virtual ~IMDDriver (); public: virtual void Prepare () override; virtual bool DATA_ACTION 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; private: static PACKET_RET callbackPackageProcess (const char* RecData, DWORD nLength, DWORD& PacketLength); IMDDevice* m_pDevice{ nullptr }; }; }