DIOS.Dev.Generator.Mould.hpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. #pragma once
  2. #include <string>
  3. #include "DriverConfigInfo.hpp"
  4. #include "DIOS.Dev.IODevice.hpp"
  5. #include "DIOS.Dev.IODevice.Detail.hpp"
  6. #include "Generator.BasicMoulds.hpp"
  7. //#include "Logger.temp.h"
  8. namespace nsDetail = DIOS::Dev::Detail;
  9. #ifndef DIOSDEVGENDEVICEMOULD_EXPORTS
  10. #ifdef _WIN64
  11. #ifdef _DEBUG
  12. #pragma comment(lib, "DIOS.Dev.Generator.Mould64D.lib")
  13. #else
  14. #pragma comment(lib, "DIOS.Dev.Generator.Mould64.lib")
  15. #endif
  16. #else
  17. #ifdef _DEBUG
  18. #pragma comment(lib, "DIOS.Dev.Generator.MouldD.lib")
  19. #else
  20. #pragma comment(lib, "DIOS.Dev.Generator.MouldD.lib")
  21. #endif
  22. #endif
  23. #endif
  24. #ifdef DIOSDEVGENDEVICEMOULD_EXPORTS
  25. #define _DIOSDEVGENDEVICEMOULD_API __declspec(dllexport)
  26. #else
  27. #define _DIOSDEVGENDEVICEMOULD_API __declspec(dllimport)
  28. #endif
  29. #pragma warning (disable:4251) // warning C4251: class “DIOS::Dev::Detail::Generator::DoseUnit”需要有 dll 接口由 class“DIOS::Dev::Detail::Generator::GeneratorMould”的客户端使用
  30. namespace DIOS::Dev::Detail::Generator
  31. {
  32. //获取日志配置路径
  33. _DIOSDEVGENDEVICEMOULD_API string GetProcessDirectory();
  34. //获取配置文件中指定模块的版本号
  35. _DIOSDEVGENDEVICEMOULD_API bool GetVersion(string& version, HMODULE hMyModule);
  36. _DIOSDEVGENDEVICEMOULD_API bool GetVersion(string& version, ResDataObject& config);
  37. _DIOSDEVGENDEVICEMOULD_API bool GetVersion(string& version);
  38. _DIOSDEVGENDEVICEMOULD_API void TransJsonText(ResDataObject& config);
  39. //-----------------------------------------------------------------------------
  40. // DoseUnit
  41. //-----------------------------------------------------------------------------
  42. class _DIOSDEVGENDEVICEMOULD_API DoseUnit : public IOLogicUnit
  43. {
  44. public:
  45. DoseUnit() {};
  46. virtual ~DoseUnit() {};
  47. public:
  48. //设备参数
  49. std::unique_ptr<WORKSTATIONMould> m_WS;
  50. std::unique_ptr<GENHANDSWITCHMould> m_Handswitch;
  51. std::unique_ptr<TUBEINFOMould> m_TubeInfo;//add by wxx for demand574
  52. std::unique_ptr<TUBETARGETMATERIALMould> m_TubeTargetMaterial;
  53. std::unique_ptr<TUBEANGLEMould> m_TubeAngle;
  54. std::unique_ptr<TUBEHEATMould> m_HE;
  55. std::unique_ptr<GENSYNSTATEMould> m_GenSynState;
  56. std::unique_ptr<GENSTATEMould> m_GenState;
  57. std::unique_ptr<BATTERYCHARGSTATEMould> m_BatteryChargeState;
  58. std::unique_ptr<BATTERYPOWERSTATEMould> m_BatteryPowerState; //add by wxx for DEL项目补充V2del上的属性
  59. std::unique_ptr<REFERENCEAIRKERMAMould> m_ReferenceAirKerma;
  60. //静态参数
  61. std::unique_ptr<KVMould> m_KV;
  62. std::unique_ptr<MAMould> m_MA;
  63. std::unique_ptr<MSMould> m_MS;
  64. std::unique_ptr<MASMould> m_MAS;
  65. std::unique_ptr<TECHMODEMould> m_Techmode;
  66. std::unique_ptr<FOCUSMould> m_Focus;
  67. std::unique_ptr<AECFIELDMould> m_AECField;
  68. std::unique_ptr<AECFILMMould> m_AECFilm;
  69. std::unique_ptr<AECDENSITYMould> m_AECDensity;
  70. std::unique_ptr<GENHEATMould> m_GenHE; //add by wxx for DEL项目补充V2del上的属性
  71. std::unique_ptr<POSTKVMould> m_PostKV;
  72. std::unique_ptr<POSTMAMould> m_PostMA;
  73. std::unique_ptr<POSTMSMould> m_PostMS;
  74. std::unique_ptr<POSTMASMould> m_PostMAS;
  75. std::unique_ptr<TOTALEXPNUMMould> m_GenTotalExpNumber;
  76. std::unique_ptr<TOTALACQTIMESMould> m_GenTotalAcqTimes;
  77. std::unique_ptr<TUBECOOLTIMEMould> m_GenTubeCoolWaitTimes;
  78. std::unique_ptr<TUBEOVERLOADNUMMould> m_GenTubeOverLoadNumber;
  79. std::unique_ptr<CUREXPNUMMould> m_GenCurrentExpNumber;
  80. std::unique_ptr<EXPMODEMould> m_ExpMode;
  81. std::unique_ptr<EXAMMODEMould> m_EXAMMode;
  82. std::unique_ptr<FRAMERATEMould> m_FrameRate;
  83. std::unique_ptr<MODALITYMould> m_Modality;
  84. std::unique_ptr<KVLISTMould> m_KVList;
  85. std::unique_ptr<MASLISTMould> m_mAsList;
  86. float m_FocusSmall{ 0 };
  87. float m_FocusLarge{ 1 };
  88. //动态参数
  89. std::unique_ptr<FLUKVMould> m_FLKV;
  90. std::unique_ptr<FLUMAMould> m_FLMA;
  91. std::unique_ptr<FLUMSMould> m_FLMS;
  92. std::unique_ptr<FLAccTimeMould> m_FLAccTime;//透视累计时间
  93. std::string m_FLAccTimeUnit;//透视累计时间单位
  94. std::unique_ptr<FLUIntTimeMould> m_FLIntTime;//脉冲周期时间
  95. std::unique_ptr<PPSMould> m_PPS;//帧率
  96. std::unique_ptr<FLUModeMould> m_FLMode;//透视模式: 0-非透视, 1-连续,2-脉冲,3-高剂量连续,4-高剂量脉冲
  97. std::unique_ptr<FLUABSStatusMould> m_ABSStatus;//ABS状态: 0-ABS关闭, 1-ABS启用(KV only), 2 - ABS启用(KV/mA)
  98. std::unique_ptr<FLUMagMould> m_MagSize;//fluoro mag 0 to 3 - sets Mag size, ASCII character for 255 - Mag selection disabled
  99. std::unique_ptr<FLUDoseLevelMould> m_DoseLevel;//剂量模式,DOSE_LEVEL_LOW = 0, DOSE_LEVEL_NORMAL = 1, DOSE_LEVEL_HIGH = 2 ,后来由于需要分开cine的dose level和 透视的dose level 互不影响,所以约定 10以后的值 给cine 使用。
  100. std::unique_ptr<FLUCurveMould> m_Curve;//ABS曲线 0 = OFF, 1-3 = curve enabled
  101. //cine
  102. std::unique_ptr<FLUCineKVMould> m_CineFLKV;//
  103. std::unique_ptr<FLUCineMAMould> m_CineFLMA;//
  104. std::unique_ptr<FLUCineMSMould> m_CineFLMS;//
  105. };
  106. //-----------------------------------------------------------------------------
  107. // GeneratorMould
  108. //-----------------------------------------------------------------------------
  109. namespace nDev = DIOS::Dev;
  110. class _DIOSDEVGENDEVICEMOULD_API GeneratorMould
  111. {
  112. public:
  113. GeneratorMould ();
  114. ~GeneratorMould ();
  115. protected:
  116. virtual void Register(Dispatch* Dispatch);
  117. virtual void RegisterOther (Dispatch* Dispatch); // 子类可能希望注册更多的
  118. virtual void RegisterAEC(Dispatch* Dispatch);
  119. virtual void RegisterExpEnable(Dispatch* Dispatch);
  120. virtual void RegisterGeneratortoSyncStatus(Dispatch* Dispatch);
  121. virtual void RegisterRAD(Dispatch* Dispatch);
  122. virtual void RegisterFluoro(Dispatch* Dispatch);
  123. protected:
  124. //设备方法
  125. virtual RET_STATUS Reset() = 0;
  126. virtual RET_STATUS SetWS(const std::string value) = 0;
  127. virtual RET_STATUS SetGenSynState(int value) = 0;
  128. virtual RET_STATUS SetGenState(int value) = 0;
  129. virtual RET_STATUS SetExpEnable() = 0;
  130. virtual RET_STATUS SetExpDisable() = 0;
  131. virtual RET_STATUS QueryHE(int& value) = 0;
  132. virtual RET_STATUS SetExpMode(std::string value) = 0;
  133. virtual RET_STATUS SetFrameRate(FLOAT frameRate) = 0;
  134. virtual RET_STATUS SetEXAMMode(std::string value) = 0;
  135. virtual RET_STATUS SetCollimatorLight(WORD value) { return RET_STATUS::RET_SUCCEED; };//不要设置为纯虚,否则所有子类都得改
  136. virtual RET_STATUS ActiveSyncMode(_tSyncModeArgs value) { return RET_STATUS::RET_SUCCEED; };
  137. virtual RET_STATUS SetGenCurrentSMState(const std::string value);
  138. virtual RET_STATUS SimulateError(const std::string value) { return RET_STATUS::RET_SUCCEED; };
  139. //点片
  140. virtual RET_STATUS IncKV () = 0;
  141. virtual RET_STATUS DecKV () = 0;
  142. virtual RET_STATUS IncKVL();//add by wxx for task226:减少现有模块改造所以不写成纯虚
  143. virtual RET_STATUS DecKVL();
  144. virtual RET_STATUS SetKV (float value) = 0;
  145. virtual RET_STATUS IncMA () = 0;
  146. virtual RET_STATUS DecMA () = 0;
  147. virtual RET_STATUS IncMAL();//add by wxx for task226
  148. virtual RET_STATUS DecMAL();
  149. virtual RET_STATUS SetMA (float value) = 0;
  150. virtual RET_STATUS IncMS () = 0;
  151. virtual RET_STATUS DecMS () = 0;
  152. virtual RET_STATUS IncMSL();//add by wxx for task226
  153. virtual RET_STATUS DecMSL();
  154. virtual RET_STATUS SetMS (float value) = 0;
  155. virtual RET_STATUS IncMAS () = 0;
  156. virtual RET_STATUS DecMAS () = 0;
  157. virtual RET_STATUS IncMASL();//add by wxx for task226
  158. virtual RET_STATUS DecMASL();
  159. virtual RET_STATUS SetMAS (float value) = 0;
  160. virtual RET_STATUS SetTechmode (int value) = 0;
  161. virtual RET_STATUS SetFocus (int value) = 0;
  162. virtual RET_STATUS SetAECDensity (int value) = 0;
  163. virtual RET_STATUS IncAECDensity();//add by wxx for bug5681
  164. virtual RET_STATUS DecAECDensity();
  165. virtual RET_STATUS SetAECField (int value) = 0;
  166. virtual RET_STATUS SetAECFilm (int value) = 0;
  167. virtual RET_STATUS QueryPostKV(float& value) = 0;
  168. virtual RET_STATUS QueryPostMA(float& value) = 0;
  169. virtual RET_STATUS QueryPostMS(float& value) = 0;
  170. virtual RET_STATUS QueryPostMAS(float& value) = 0;
  171. virtual RET_STATUS SetAPR (const _tAPRArgs & t) = 0;
  172. virtual RET_STATUS SetAPRArray(vector<_tAPRArgs>& APRarray);
  173. //透视
  174. virtual RET_STATUS IncFluKV(); //透视KV调节
  175. virtual RET_STATUS DecFluKV();
  176. virtual RET_STATUS SetFluKV(float value);
  177. virtual RET_STATUS IncFluMA(); //透视MA调节
  178. virtual RET_STATUS DecFluMA();
  179. virtual RET_STATUS SetFluMA(float value);
  180. virtual RET_STATUS IncFluMS(); //透视MS调节
  181. virtual RET_STATUS DecFluMS();
  182. virtual RET_STATUS SetFluMS(float value);
  183. virtual RET_STATUS SetPPS(float frameRate); //脉冲透视帧率调节
  184. virtual RET_STATUS INCPPS();
  185. virtual RET_STATUS DECPPS();
  186. virtual RET_STATUS SetPluseWidth(float fplusewidth); //设置脉宽
  187. virtual RET_STATUS SetABSMode(int nMode); //设置自动亮度调节(ABS)模式
  188. virtual RET_STATUS SetABSCurve(int curveNum); //ABS曲线调节
  189. virtual RET_STATUS IncABSCurve();
  190. virtual RET_STATUS DecABSCurve();
  191. virtual RET_STATUS SetABSValue(float fABSValue);
  192. virtual RET_STATUS SetABSTargetEXI(float fEXIValue);
  193. virtual RET_STATUS SetAPF(const _tAPFArgs& t); //一次性设置透视参数
  194. virtual float GetFluIntTimer(); //获取透视周期时间
  195. virtual float GetFluAccTimer(); //获取透视曝光累计时间
  196. virtual RET_STATUS ResetFluTimer(int ntype); //清空透视曝光累计时间
  197. virtual RET_STATUS SetFluPre(int bPrepare); //设置透视预备阶段使能
  198. virtual RET_STATUS SetFluEXP(int bPrepare); //设置透视曝光阶段使能
  199. virtual RET_STATUS SetFLFMode(std::string value); //设置透视模式
  200. virtual RET_STATUS SetFluMAG(int nsize); //设置MG:0 to 3 - sets Mag size, ASCII character for 255 - Mag selection disabled
  201. virtual RET_STATUS DisableMAG();
  202. virtual RET_STATUS SetFluDoseLever(int nlever); //设置透视剂量等级( 0,1,2 )
  203. virtual RET_STATUS SetHalfDose(int nlever); //设置透视半价剂量
  204. virtual RET_STATUS TransferRadCurve(int ncurve); //点片KV跟随透视,0-3 Set curve 0:disable
  205. protected:
  206. DoseUnit m_DoseUnit;
  207. };
  208. }
  209. namespace DIOS::Dev::Detail::Generator
  210. {
  211. class _DIOSDEVGENDEVICEMOULD_API DriverMould : public DIOS::Dev::IODriver
  212. {
  213. public:
  214. DriverMould ();
  215. ~DriverMould ();
  216. virtual std::string GetGUID () const;
  217. virtual string GetConnectDLL(string& ConfigFileName);
  218. virtual ResDataObject GetConnectParam(string& ConfigFileName);
  219. protected:
  220. std::list <ConfigInfo> m_ConfigInfo;
  221. };
  222. }