#pragma once #include #include "DriverConfigInfo.hpp" #include "Generator.BasicMoulds.hpp" #include "CCOS.Dev.IODevice.Detail.hpp" //#include "Logger.temp.h" namespace nsDetail = CCOS::Dev::Detail; #define _CCOSDEVGENDEVICEMOULD_API namespace CCOS::Dev::Detail::Generator { //获取日志配置路径 _CCOSDEVGENDEVICEMOULD_API string GetProcessDirectory(); std::string GetElfNoteVersion(const std::string& filename); //获取配置文件中指定模块的版本号 _CCOSDEVGENDEVICEMOULD_API bool GetVersion(string& version, void* hMyModule); _CCOSDEVGENDEVICEMOULD_API bool GetVersion(string& version, ResDataObject& config); _CCOSDEVGENDEVICEMOULD_API bool GetVersion(string& version); _CCOSDEVGENDEVICEMOULD_API void TransJsonText(ResDataObject& config); //----------------------------------------------------------------------------- // DoseUnit //----------------------------------------------------------------------------- class _CCOSDEVGENDEVICEMOULD_API DoseUnit : public IOLogicUnit { public: DoseUnit() {}; virtual ~DoseUnit() {}; public: //设备参数 std::unique_ptr m_WS; std::unique_ptr m_Handswitch; std::unique_ptr m_TubeInfo;//add by wxx for demand574 std::unique_ptr m_TubeTargetMaterial; std::unique_ptr m_TubeAngle; std::unique_ptr m_HE; std::unique_ptr m_GenSynState; std::unique_ptr m_GenState; std::unique_ptr m_BatteryChargeState; std::unique_ptr m_BatteryPowerState; //add by wxx for DEL项目补充V2del上的属性 std::unique_ptr m_ReferenceAirKerma; //静态参数 std::unique_ptr m_KV; std::unique_ptr m_MA; std::unique_ptr m_MS; std::unique_ptr m_MAS; std::unique_ptr m_Techmode; std::unique_ptr m_Focus; std::unique_ptr m_AECField; std::unique_ptr m_AECFilm; std::unique_ptr m_AECDensity; std::unique_ptr m_GenHE; std::unique_ptr m_PostKV; std::unique_ptr m_PostMA; std::unique_ptr m_PostMS; std::unique_ptr m_PostMAS; std::unique_ptr m_GenTotalExpNumber; std::unique_ptr m_GenTotalAcqTimes; std::unique_ptr m_GenTubeCoolWaitTimes; std::unique_ptr m_GenTubeOverLoadNumber; std::unique_ptr m_GenCurrentExpNumber; std::unique_ptr m_ExpMode; std::unique_ptr m_EXAMMode; std::unique_ptr m_FrameRate; std::unique_ptr m_Modality; std::unique_ptr m_KVList; std::unique_ptr m_mAsList; float m_FocusSmall{ 0 }; float m_FocusLarge{ 1 }; //动态参数 std::unique_ptr m_FLKV; std::unique_ptr m_FLMA; std::unique_ptr m_FLMS; std::unique_ptr m_FLAccTime;//透视累计时间 std::string m_FLAccTimeUnit;//透视累计时间单位 std::unique_ptr m_FLIntTime;//脉冲周期时间 std::unique_ptr m_PPS;//帧率 std::unique_ptr m_FLMode;//透视模式: 0-非透视, 1-连续,2-脉冲,3-高剂量连续,4-高剂量脉冲 std::unique_ptr m_ABSStatus;//ABS状态: 0-ABS关闭, 1-ABS启用(KV only), 2 - ABS启用(KV/mA) std::unique_ptr m_MagSize;//fluoro mag 0 to 3 - sets Mag size, ASCII character for 255 - Mag selection disabled std::unique_ptr m_DoseLevel;//剂量模式,DOSE_LEVEL_LOW = 0, DOSE_LEVEL_NORMAL = 1, DOSE_LEVEL_HIGH = 2 ,后来由于需要分开cine的dose level和 透视的dose level 互不影响,所以约定 10以后的值 给cine 使用。 std::unique_ptr m_Curve;//ABS曲线 0 = OFF, 1-3 = curve enabled //cine std::unique_ptr m_CineFLKV;// std::unique_ptr m_CineFLMA;// std::unique_ptr m_CineFLMS;// }; //----------------------------------------------------------------------------- // GeneratorMould //----------------------------------------------------------------------------- namespace nDev = CCOS::Dev; class _CCOSDEVGENDEVICEMOULD_API GeneratorMould { public: GeneratorMould (); ~GeneratorMould (); protected: virtual void Register(Dispatch* Dispatch); virtual void RegisterOther (Dispatch* Dispatch); // 子类可能希望注册更多的 virtual void RegisterAEC(Dispatch* Dispatch); virtual void RegisterExpEnable(Dispatch* Dispatch); virtual void RegisterGeneratortoSyncStatus(Dispatch* Dispatch); virtual void RegisterRAD(Dispatch* Dispatch); virtual void RegisterFluoro(Dispatch* Dispatch); protected: //设备方法 virtual RET_STATUS Reset() = 0; virtual RET_STATUS SetWS(const std::string value) = 0; virtual RET_STATUS SetGenSynState(int value) = 0; virtual RET_STATUS SetGenState(int value) = 0; virtual RET_STATUS SetExpEnable() = 0; virtual RET_STATUS SetExpDisable() = 0; virtual RET_STATUS QueryHE(int& value) = 0; virtual RET_STATUS SetExpMode(std::string value) = 0; virtual RET_STATUS SetFrameRate(float frameRate) = 0; virtual RET_STATUS SetEXAMMode(std::string value) = 0; virtual RET_STATUS SetCollimatorLight(unsigned short value) { return RET_STATUS::RET_SUCCEED; };//不要设置为纯虚,否则所有子类都得改 virtual RET_STATUS ActiveSyncMode(_tSyncModeArgs value) { return RET_STATUS::RET_SUCCEED; }; virtual RET_STATUS SetGenCurrentSMState(const std::string value); virtual RET_STATUS SimulateError(const std::string value) { return RET_STATUS::RET_SUCCEED; }; //点片 virtual RET_STATUS IncKV () = 0; virtual RET_STATUS DecKV () = 0; virtual RET_STATUS IncKVL();//add by wxx for task226:减少现有模块改造所以不写成纯虚 virtual RET_STATUS DecKVL(); virtual RET_STATUS SetKV (float value) = 0; virtual RET_STATUS IncMA () = 0; virtual RET_STATUS DecMA () = 0; virtual RET_STATUS IncMAL();//add by wxx for task226 virtual RET_STATUS DecMAL(); virtual RET_STATUS SetMA (float value) = 0; virtual RET_STATUS IncMS () = 0; virtual RET_STATUS DecMS () = 0; virtual RET_STATUS IncMSL();//add by wxx for task226 virtual RET_STATUS DecMSL(); virtual RET_STATUS SetMS (float value) = 0; virtual RET_STATUS IncMAS () = 0; virtual RET_STATUS DecMAS () = 0; virtual RET_STATUS IncMASL();//add by wxx for task226 virtual RET_STATUS DecMASL(); virtual RET_STATUS SetMAS (float value) = 0; virtual RET_STATUS SetTechmode (int value) = 0; virtual RET_STATUS SetFocus (int value) = 0; virtual RET_STATUS SetAECDensity (int value) = 0; virtual RET_STATUS IncAECDensity();//add by wxx for bug5681 virtual RET_STATUS DecAECDensity(); virtual RET_STATUS SetAECField (int value) = 0; virtual RET_STATUS SetAECFilm (int value) = 0; virtual RET_STATUS QueryPostKV(float& value) = 0; virtual RET_STATUS QueryPostMA(float& value) = 0; virtual RET_STATUS QueryPostMS(float& value) = 0; virtual RET_STATUS QueryPostMAS(float& value) = 0; virtual RET_STATUS SetAPR (const _tAPRArgs & t) = 0; virtual RET_STATUS SetAPRArray(vector<_tAPRArgs>& APRarray); //透视 virtual RET_STATUS IncFluKV(); //透视KV调节 virtual RET_STATUS DecFluKV(); virtual RET_STATUS SetFluKV(float value); virtual RET_STATUS IncFluMA(); //透视MA调节 virtual RET_STATUS DecFluMA(); virtual RET_STATUS SetFluMA(float value); virtual RET_STATUS IncFluMS(); //透视MS调节 virtual RET_STATUS DecFluMS(); virtual RET_STATUS SetFluMS(float value); virtual RET_STATUS SetPPS(float frameRate); //脉冲透视帧率调节 virtual RET_STATUS INCPPS(); virtual RET_STATUS DECPPS(); virtual RET_STATUS SetPluseWidth(float fplusewidth); //设置脉宽 virtual RET_STATUS SetABSMode(int nMode); //设置自动亮度调节(ABS)模式 virtual RET_STATUS SetABSCurve(int curveNum); //ABS曲线调节 virtual RET_STATUS IncABSCurve(); virtual RET_STATUS DecABSCurve(); virtual RET_STATUS SetABSValue(float fABSValue); virtual RET_STATUS SetABSTargetEXI(float fEXIValue); virtual RET_STATUS SetAPF(const _tAPFArgs& t); //一次性设置透视参数 virtual float GetFluIntTimer(); //获取透视周期时间 virtual float GetFluAccTimer(); //获取透视曝光累计时间 virtual RET_STATUS ResetFluTimer(int ntype); //清空透视曝光累计时间 virtual RET_STATUS SetFluPre(int bPrepare); //设置透视预备阶段使能 virtual RET_STATUS SetFluEXP(int bPrepare); //设置透视曝光阶段使能 virtual RET_STATUS SetFLFMode(std::string value); //设置透视模式 virtual RET_STATUS SetFluMAG(int nsize); //设置MG:0 to 3 - sets Mag size, ASCII character for 255 - Mag selection disabled virtual RET_STATUS DisableMAG(); virtual RET_STATUS SetFluDoseLever(int nlever); //设置透视剂量等级( 0,1,2 ) virtual RET_STATUS SetHalfDose(int nlever); //设置透视半价剂量 virtual RET_STATUS TransferRadCurve(int ncurve); //点片KV跟随透视,0-3 Set curve 0:disable protected: DoseUnit m_DoseUnit; }; } namespace CCOS::Dev::Detail::Generator { class _CCOSDEVGENDEVICEMOULD_API DriverMould : public CCOS::Dev::IODriver { public: DriverMould (); ~DriverMould (); virtual std::string GetGUID () const; virtual string GetConnectDLL(string& ConfigFileName); virtual ResDataObject GetConnectParam(string& ConfigFileName); protected: std::list m_ConfigInfo; }; }