DIOS.Dev.FPD.AxsDM.h 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. #pragma once
  2. #include "CCOS.Dev.FPDDeviceMould.hpp"
  3. #include "OemAcq.h"
  4. #include "OemSync.h"
  5. #include "OemCtrl.h"
  6. #include "OemCalib.h"
  7. #include "DetectorConfiguration.h"
  8. #include "CCOS.Dev.MSGMould.hpp"
  9. #include "FPDErrorWarningProcess.h"
  10. #include "logicClient.h"
  11. #ifdef CCOSDEVFPDAXSDM_EXPORTS
  12. #define CCOSDEVFPDAXSDM_API __declspec(dllexport)
  13. #else
  14. #define CCOSDEVFPDAXSDM_API __declspec(dllimport)
  15. #endif
  16. namespace CCOS::Dev::Detail::Detector
  17. {
  18. class CCOSDEVFPDAXSDM_API CAXSDriver : public FPDDriverMould
  19. {
  20. CFPDDeviceAXS* m_pObjDev;
  21. bool m_bConnect; //driver是否连接的标记位
  22. ResDataObject m_DeviceConfig;//GetDeviceConfig时使用
  23. ResDataObject m_ConfigAll; //存储当前的配置,用于修改配置时写回文件
  24. ResDataObject m_Configurations; //存储当前配置中“CONFIGURATION”节点的内容
  25. std::unique_ptr <ResDataObject> m_pAttribute;
  26. std::unique_ptr <ResDataObject> m_pDescription;
  27. public:
  28. CAXSDriver();
  29. virtual ~CAXSDriver();
  30. virtual void Prepare() override;
  31. virtual bool Connect() override;
  32. virtual void Disconnect() override;
  33. virtual bool isConnected() const override;
  34. virtual auto CreateDevice(int index)->std::unique_ptr <IODevice> override;
  35. virtual std::string DriverProbe() override;
  36. virtual std::string GetResource() override;
  37. virtual std::string DeviceProbe() override;
  38. virtual bool GetDeviceConfig(std::string& Cfg) override;
  39. virtual bool SetDeviceConfig(std::string Cfg) override;
  40. bool SaveConfigFile(bool bSendNotify);
  41. bool GetDeviceConfigValue(ResDataObject config, const char* pInnerKey, int nPathID, string& strValue);
  42. bool SetDeviceConfigValue(ResDataObject& config, const char* pInnerKey, int nPathID, const char* szValue);
  43. };
  44. namespace nsDetail = CCOS::Dev::Detail;
  45. class CCOSDEVFPDAXSDM_API CFPDDeviceAXS : public FPDDeviceMould
  46. {
  47. using super = IODeviceDetail; //IODeviceDetail类的别名声明
  48. std::unique_ptr <DetectorCtrlUnit> m_DetectorCtrlUnit;
  49. std::unique_ptr <AcqUnit> m_AcqUnit;
  50. std::unique_ptr <SyncUnit> m_SyncUnit;
  51. std::unique_ptr <CalibUnit> m_CalibUnit;
  52. std::unique_ptr <DeviceTemperatureMould> m_Temperature;
  53. std::unique_ptr <DeviceBatteryMould> m_Battery;
  54. std::unique_ptr <DeviceWifiMould> m_Wifi;
  55. std::unique_ptr <DetectorConfiguration> m_DetectorConfiguration;
  56. std::unique_ptr <FPDErrorWarning> m_WarnAndError;
  57. PVOID m_pDetectors;
  58. ResDataObject m_ACQMODElist;//采集模式列表
  59. DeviceIndexStruct m_stDeviceConfig;//探测器配置信息
  60. std::string m_strWorkPath;
  61. bool m_bPreviewEnable; //是否显示preview image
  62. int m_nPreViewImgWidth; //预览图像的宽
  63. int m_nPreViewImgHeight; //预览图像的高
  64. //2816*3584已经是探测器裁剪过的,原图是2816*3650*2=20556800
  65. int m_nImgWidth; //有效图像的宽
  66. int m_nImgHeight; //有效图像的高
  67. int m_nImgBits;//图像位数
  68. ResDataObject* m_pPreviewImageHead;
  69. ResDataObject* m_pImageHead;
  70. WORD* m_pwPreviewImg; //preview内存
  71. WORD* m_pwRawImageData; //原始图像内存
  72. WORD* m_pwImageData; //裁剪后的有效图像内存
  73. int m_nAngle;
  74. int m_nPixelSpacing;
  75. float m_fDose;
  76. float m_fDoseParam;// 校正用的曝光计量,发送到UI 且本地记录
  77. APP_STATUS m_eAppStatus;
  78. bool m_bConnect;
  79. SYSTEMTIME m_stImgCreateTime; //记录图像生成时间(软同步使用开窗时间),用于填写dicom
  80. SYNC_MODE m_eSyncMode;
  81. ResDataObject m_CalibDoseList; //加载平板自己的校正剂量配置
  82. CCOS_CALIBRATION_MODE m_eCalibMode;//校正方式 0-ZSKK 1-OTHER
  83. int m_nCalibTotalExposureNum; //校正时需要曝光总次数
  84. int m_nCalibCurrentCalibrationRound; //当前处于校正曝光第几轮
  85. int m_nCalibCurrentExposureIndex; //当前轮校正曝光第几次
  86. int m_nCalibCurrentExposureNum; //亮场校正时实际接受曝光的总次数(有效)
  87. float m_fFactorEXI2UGY; //探测器EXI -> UGY 转换系数
  88. bool m_bForceGridSuppress;
  89. bool m_bAttached;
  90. int m_nBatteryCapacity;
  91. int m_nBatteryCharges;
  92. float m_fBatteryTemperature;
  93. bool m_bImagePendingOrNot; //是否有未获取成功的图像
  94. bool m_bResetDetector; //是否reset探测器,暂时不用
  95. int m_nShockCounts;
  96. bool m_bOnlyHaveFpd;//当前系统是否只配置了一个真实的探测器并且处于AED同步模式,其他设备没有或者是demo的 1-是 0-否 默认否
  97. bool m_bFirstGetCalibImageLeft;//是否是第一次获取厂商校正需要曝光的次数
  98. int m_nAcqMode;//当前采集模式
  99. public:
  100. CFPDDeviceAXS(std::shared_ptr<IOEventCenter> center, std::string strConfigPath);
  101. ~CFPDDeviceAXS();
  102. virtual std::string GetGUID() const override;
  103. virtual bool Prepare() override;
  104. bool CreateDevice();
  105. void Register();
  106. RET_STATUS Connect();
  107. RET_STATUS EnterExam(int nExamMode);
  108. RET_STATUS ActiveDetector(int nDetectorIndex, bool bActive);
  109. RET_STATUS SetAcqMode(string strAcqMode);
  110. RET_STATUS PrepareAcquisition();
  111. RET_STATUS StartAcquisition(string in = "");
  112. RET_STATUS StopAcquisition();
  113. RET_STATUS ActiveCalibration(CCOS_CALIBRATION_TYPE eType);
  114. RET_STATUS PrepareCalibration();
  115. RET_STATUS GetRequestedDose(std::string& strDose);
  116. RET_STATUS SetRequestedDose(std::string strDose);
  117. RET_STATUS StartCalibration();
  118. RET_STATUS StopCalibration();
  119. RET_STATUS AcceptCalibration();
  120. RET_STATUS RejectCalibration();
  121. RET_STATUS SaveCalibrationFile(bool bSaveFlag);
  122. RET_STATUS GetCalibrationStep(int nDetectorID, string& strCalibrationStepInfo);
  123. RET_STATUS PauseCalibration();
  124. RET_STATUS Reset();//重置探测器
  125. RET_STATUS GetDetectorInfo(string& strFDI);
  126. RET_STATUS ResetConnect();
  127. RET_STATUS SetExposureTimes(int nTimes);
  128. bool CompleteCalibration();
  129. void AbortCalibration();
  130. void OnFPDCallback(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam);
  131. void NotifyXWindowOn();
  132. void NotifyXWindowOff();
  133. bool GetOnlyHaveFpd();//获取环境中是否只有平板这一个真实设备的配置项
  134. int GetGainExposureNum();//获取gain校正曝光总次数
  135. void FullImageDateArrived(WORD* pImg);
  136. bool GetLogicMode(string& strAcqMode, int& nLogicMode);
  137. private:
  138. bool LoadConfig();
  139. void SendTemperatureValue(float fValue);
  140. void SendWifiValue(int nValue);
  141. void SendBatteryValue(int nValue);
  142. void OnEventProcessConf(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam);
  143. void OnEventProcessInfo(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam);
  144. void OnEventProcessStatus(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam);
  145. void OnEventProcessData(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam);
  146. void OnEventProcessError(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam);
  147. void OnEventProcessWarning(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam);
  148. bool OnProcessPreviewImage(WORD* pRawImage, int nWidth, int nHeight);
  149. void PrevImageDateArrived(WORD* pImg);
  150. RET_STATUS AddFrameWithRawHead(IMAGE_VIEW_TYPE Type, WORD* pFrameBuff, DWORD FrameSize);
  151. string MakeImageHead(IMAGE_VIEW_TYPE Type);
  152. bool OnProcessImage(WORD* pImage, int nWidth, int nHeight, float fImageReferUGY = 2.5);
  153. void OnProcessTemperature(int nID, float fTemperature);
  154. protected:
  155. void RegisterCtrl(nsDetail::Dispatch* Dispatch);
  156. void RegisterAcq(nsDetail::Dispatch* Dispatch);
  157. void RegisterSync(nsDetail::Dispatch* Dispatch);
  158. void RegisterCalib(nsDetail::Dispatch* Dispatch);
  159. void RegisterOthers(nsDetail::Dispatch* Dispatch);
  160. void RegisterAutonumous(nsDetail::Dispatch* Dispatch);
  161. };
  162. } //end namespace CCOS::Dev::Detail::Detector