DIOS.Dev.FPD.iRayDM.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. /***************************************************************
  2. * File Name: CCOS.Dev.FPD.iRayDM.h
  3. * Detail: iRay detector module for DMOC
  4. * Author: Wangyuedong
  5. * Date: 2023-06-06
  6. ***************************************************************/
  7. #pragma once
  8. #pragma warning(disable:26812) //更倾向于 enum class 防止 enum 全局命名空间中的污染。
  9. #pragma warning(disable:28159) //使用GetTickCount足够了,无需使用GetTickCount64。
  10. #pragma warning(disable:26451) //忽略乘法溢出
  11. #pragma warning(disable:6258) //允许强制终止线程
  12. #include "CCOS.Dev.FPDDeviceMould.hpp"
  13. #include "TemperatureMould.hpp"
  14. #include "OEM.Acq.h"
  15. #include "OEM.Sync.h"
  16. #include "OEM.Calib.h"
  17. #include "OEM.DetectorCtrl.h"
  18. #include "DetectorConfiguration.h"
  19. #include "FPDErrorWarningProcess.h"
  20. #include "CalibrationProcess.h"
  21. #include "common_api.h"
  22. #include "IRayDMCtrl.h"
  23. #define CCOSDEVFPDIRAYDM_EXPORTS
  24. #ifdef CCOSDEVFPDIRAYDM_EXPORTS
  25. #define CCOSDEVFPDIRAYDM_API __declspec(dllexport)
  26. #else
  27. #define CCOSDEVFPDIRAYDM_API __declspec(dllimport)
  28. #endif
  29. namespace CCOS::Dev::Detail::Detector
  30. {
  31. //-----------------------------------------------------------------------------
  32. // IRay Driver manager handle
  33. //-----------------------------------------------------------------------------
  34. class CCOSDEVFPDIRAYDM_API IRayDriver : public FPDDriverMould
  35. {
  36. using super = FPDDriverMould;
  37. FPDDeviceIRay* dev;
  38. bool m_bConnect;
  39. ResDataObject m_ConfigAll;
  40. ResDataObject m_Configurations;
  41. ResDataObject m_DeviceConfig;
  42. std::unique_ptr <ResDataObject> m_pAttribute;
  43. std::unique_ptr <ResDataObject> m_pDescription;
  44. public:
  45. IRayDriver();
  46. virtual ~IRayDriver();
  47. virtual void Prepare() override;
  48. virtual bool Connect() override;
  49. virtual void Disconnect() override;
  50. virtual bool isConnected() const override;
  51. virtual auto CreateDevice(int index)->std::unique_ptr <IODevice> override;
  52. virtual std::string DriverProbe() override;
  53. virtual std::string GetResource() override;
  54. virtual std::string DeviceProbe() override;
  55. virtual bool GetDeviceConfig(std::string& Cfg) override;
  56. virtual bool SetDeviceConfig(std::string Cfg) override;
  57. bool GetDeviceConfigValue(ResDataObject config, const char* pInnerKey, int nPathID, string& strValue);
  58. bool SetDeviceConfigValue(ResDataObject config, const char* pInnerKey, int nPathID, const char* szValue);
  59. };
  60. //-----------------------------------------------------------------------------
  61. // FPDDeviceIRay
  62. //-----------------------------------------------------------------------------
  63. namespace nDetail = CCOS::Dev::Detail;
  64. class IRayCtrl;
  65. class CCOSDEVFPDIRAYDM_API FPDDeviceIRay : public FPDDeviceMould
  66. {
  67. private:
  68. using super = IODeviceDetail;
  69. ResDataObject* m_pPreviewImageHead;
  70. ResDataObject* m_pFullImageHead;
  71. IRayCtrl* m_pDetectors;
  72. std::unique_ptr <AcqUnit> m_AcqUnit;
  73. std::unique_ptr <SyncUnit> m_SyncUnit;
  74. std::unique_ptr <CalibUnit> m_CalibUnit;
  75. std::unique_ptr <DetectorCtrlUnit> m_DetectorCtrlUnit;
  76. std::unique_ptr <DeviceTemperatureMould> m_Temperature;
  77. std::unique_ptr <DeviceBatteryMould> m_Battery;
  78. std::unique_ptr <DeviceWifiMould> m_Wifi;
  79. std::unique_ptr <DetectorConfiguration> m_DetectorConfiguration;
  80. std::unique_ptr <FPDErrorWarning> m_WarnAndError;
  81. std::unique_ptr <CalibrationProcess> m_CalibProcess;
  82. int m_nDeviceIndex; //当前探测器的ID
  83. string g_strAppPath;
  84. string m_strWorkPath;
  85. HANDLE m_ExitEvt;
  86. bool m_bConnect2XCU;
  87. HANDLE m_hXCUresult;
  88. bool m_bXCUresult;
  89. string m_strXCUresult;
  90. ResDataObject m_ACQMODElist;
  91. DeviceIndexStruct m_stDeviceConfig;
  92. APP_STATUS m_eAppStatus; //DROC的当前状态,检查/校正/ATTACH界面
  93. WORD* m_pwFullImageData; //裁剪后的有效图像内存
  94. WORD* m_pwRawImageData; //原始图像内存
  95. WORD* m_pwPreviewImg; //preview内存
  96. SYSTEMTIME m_stImgCreateTime;
  97. float m_fBaseCalibTempGap;
  98. unsigned int m_nWorkStation;
  99. unsigned int m_nHWcrop;
  100. unsigned int m_nPanelRotate;
  101. unsigned int m_nCollimatorAlign;
  102. float m_fCollimatorWidth;
  103. float m_fCollimatorLen;
  104. float m_fAPRms;
  105. bool m_bHasGrid; // XCU通知有栅/无栅的状态
  106. int m_nGridLicense;
  107. bool m_bForceGridSuppress;
  108. //float m_fCalibTemperature1;
  109. //float m_fCalibTemperature2;
  110. //float m_fCalibTemperature;
  111. string m_strVoltage;
  112. string m_strLastError; //DLL反馈的错误内容
  113. string m_strCalibTime;
  114. string m_strLogFilePath;
  115. bool m_bDisConnected;
  116. bool m_bAttached;
  117. bool m_bCallFDConnectOver;
  118. bool m_bOpened; //初始化开始与否;初始化未开始,屏蔽DLL反馈的各种状态信息;
  119. bool m_bBatteryCharging; //电池充电与否的状态
  120. bool m_bRecoveringImage;//是否在恢复图像的流程中;若是,屏蔽其他错误,以防止干扰恢复图像的界面流程
  121. bool m_bAbortRecover; //放弃恢复图像(状态),恢复图像过程中中止,恢复图像失败的提示不再往上发送;目前不起作用
  122. int m_nRecoverImageTimes; // 恢复图像失败的次数,每2次提示用户一次
  123. bool m_bSendRecoverMessage;
  124. bool m_bUIConfirmRecover;
  125. bool m_bRecoverImageStatusInit;
  126. ResDataObject m_RecoverImageStatus;
  127. bool m_bSNListExisted;
  128. bool m_bUIReady;
  129. bool m_bImagePendingOrNot; //是否有未获取成功的图像
  130. bool m_bResetDetector; //是否reset探测器,暂时不用
  131. int m_nTemperCheckResult;
  132. int m_nXCUStatus;
  133. float m_fLTEthreshold;
  134. int m_nBatteryCapacity;
  135. int m_nBatteryCharges;
  136. float m_fBatteryTemperature;
  137. int m_nShockCounts;
  138. CCOS_CALIBRATION_TYPE m_nCalibrationType;
  139. int m_fDoseParam;// 校正用的曝光计量,发送到UI 且本地记录
  140. int m_nFullImgWidth; //有效图像的宽
  141. int m_nFullImgHeight; //有效图像的高
  142. int m_nTopOffset; //图像上边裁剪像素值
  143. int m_nBottomOffset; //图像下边裁剪像素值
  144. int m_nLeftOffset; //图像左侧裁剪像素值
  145. int m_nRightOffset; //图像右侧裁剪像素值
  146. int m_nImageBits; //图像位数
  147. float m_fFactorEXI2UGY; //探测器EXI -> UGY 转换系数
  148. bool m_bPreviewEnable; //是否显示preview image
  149. bool m_bTestSensitivity;
  150. bool m_bSaveRaw;
  151. int m_nXrayCalibNum;
  152. HANDLE m_OffsetCalibrationEvt;
  153. HANDLE m_PauseCalibrationEvt;
  154. HANDLE m_CompleteCalibrationEvt;
  155. HANDLE m_CrateCalibReportEvt;
  156. HANDLE m_WaitCalibDoseEvt;
  157. HANDLE m_WriteCumstomFileEvt;
  158. HANDLE m_hNotifyThread;
  159. DWORD m_NotifyThreadID;
  160. static DWORD WINAPI OnNotify(LPVOID pParam);
  161. HANDLE m_UploadCalibMapOver;
  162. HANDLE m_CalibGapEvt;
  163. int m_nGenWaitGap;
  164. int m_nConfXrayOnGap;
  165. bool m_bCalibReportFailed;
  166. int m_nActiveState;
  167. int m_nCurrentXCSStatus; //XCU定义的FD Status ;
  168. bool m_bDueDateWarnSend;
  169. float m_CalTemperlowWarn;
  170. float m_CalTemperupWarn;
  171. float m_LETCalTemperlowWarn;
  172. float m_LETCalTemperupWarn;
  173. bool m_CalTemperWarnInitialed;
  174. int m_lowBatteryBuda;
  175. bool m_pmsLoginStatus;
  176. ResDataObject m_CalibDoseList;
  177. // bool IsPanelSerialBeReset(string strPanelType, string strPanelSerial);
  178. // void SendInfoLog(string strLogKey, float bRealSN);
  179. // void SendInfoLog(string strLogKey, int bRealSN);
  180. // void SendInfoLog(string strLogKey, bool bRealSN);
  181. // void SendInfoLog(string strLogKey, string strValue = "");
  182. // void SendLog(string strLogKey, string strLogLevel, bool bRealSN, string strValue = "");
  183. // void InitializeCalibrationWarnTemperature(bool isLET);
  184. // void DoInitializeCalibrationWarnTemperature();
  185. // void DoInitializeLETCalibrationWarnTemperature();
  186. // bool OnInitResult(bool bSuccess);
  187. // bool LoadSensitivity();
  188. // int NewGridSuppressed(int nHeight, int nWidth, int nImageBits, unsigned short* puImageData);
  189. // void OnProcessTemperature(int nID, float fTemperature);
  190. // void InitializeTemperatureConfigs();
  191. // //bool SendModuleFPDInfo(bool bExist);
  192. // bool GetCalibrationTemper(bool ExpMode);
  193. // bool CompleteCalibration();
  194. // bool SaveConfigFile(bool bSendNotify);
  195. // bool SetAttachConfig();
  196. // void SendConnectStatusToUI(bool bConnectStatus);
  197. // string GetFileVersion(string strFilePathName);
  198. // void SendTemperatureValue(float fTemp);
  199. // void SendWifiValue(int nWifi);
  200. // void SendBatteryValue(int nBattery);
  201. // RET_STATUS PauseCalibration();
  202. // bool CheckCalibartionDue();
  203. // void AbortCalibration();
  204. // void StopCalibrationInside();
  205. // //向HW(转到发生器模块)发送当前探测器的状态
  206. // bool SendStatus2XCS(int nIndex, int nStatus);
  207. // void OnError(string strErrCode, string strErr = "");
  208. // void OnErrorX(string strErrCode);
  209. // //响应警告事件 nIndex:探测器ID strWarnCode:警告事件ID,strWarn:警告内容
  210. // void OnWarn(int nIndex, string strWarnCode, string strWarn = "");
  211. // void OnWarnX(string strWarnCode);
  212. // void SendAllError();
  213. // void ProcessTempreatureOnLostCommunicate();
  214. // void ResetAllError();
  215. public:
  216. FPDDeviceIRay(std::shared_ptr <IOEventCenter> center, string ConfigPath);
  217. ~FPDDeviceIRay();
  218. void Register();
  219. virtual std::string GetGUID() const override;
  220. virtual bool Prepare() override;
  221. // bool OpenXCU();
  222. // void SendMsg2XCU(string keyType, int Context);
  223. // void SendError2XCU(string strErrCode);
  224. // void ClearError2XCU(string strErrorCode);
  225. // void SendWarn2XCU(string strWarnCode);
  226. // bool GetMsgFromXCU(string keyType);
  227. // void SyncErrorList();
  228. void RegisterCtrl(nDetail::Dispatch* Dispatch);
  229. void RegisterAcq(nDetail::Dispatch* Dispatch);
  230. void RegisterSync(nDetail::Dispatch* Dispatch);
  231. void RegisterCalib(nDetail::Dispatch* Dispatch);
  232. void RegisterOthers(nDetail::Dispatch* Dispatch);
  233. bool CreateDevice();
  234. RET_STATUS Connect();
  235. RET_STATUS GetDeviceDictionary(std::string& out);
  236. RET_STATUS ActiveDetector(bool bActive);
  237. RET_STATUS SetAcqMode(int mode);
  238. RET_STATUS SetSyncMode(SYNC_MODE nSyncMode, HARDWARE_TRIGGER_MODE TriggerMode);
  239. RET_STATUS SetXwindow(float XwindowSize);
  240. RET_STATUS PrepareAcquisition();
  241. RET_STATUS StartAcquisition(string in = "");
  242. RET_STATUS StopAcquisition();
  243. RET_STATUS SetSID(int nSID);
  244. RET_STATUS ActiveCalibration(CCOS_CALIBRATION_TYPE in);
  245. RET_STATUS PrepareCalibration();
  246. RET_STATUS GetRequestedDose(string& strDose);
  247. RET_STATUS StartCalibration();
  248. RET_STATUS StopCalibration();
  249. RET_STATUS SetCorrectionType(CCOS_CORRECTION_TYPE in);
  250. RET_STATUS EnterExam(int nExamStatus);
  251. RET_STATUS ResetConnect();
  252. RET_STATUS DisConnectFPD();
  253. RET_STATUS RecoverImage(bool bRecoverIt);
  254. RET_STATUS GetRecoverImageState(string& strREI);
  255. RET_STATUS GetDetectorInfo(string& strFDI);
  256. RET_STATUS UploadCalibrationFiles(string strFileName);
  257. RET_STATUS ResetError();
  258. void OnFPDCallback(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam);
  259. void UnactiveBySDK(void* pActviedDPC);
  260. bool UpdateFDCalibList(bool bLTEenable, std::string strPanelSerial, std::string strPanelType);
  261. void SaveFailedCalibFile();
  262. bool GetCalibrationTime(bool ExpMode);
  263. private:
  264. bool LoadConfig();
  265. void SaveRaw(string RawName);
  266. void OnEventProcessConf(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam);
  267. void OnEventProcessInfo(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam);
  268. void OnEventProcessStatus(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam);
  269. void OnEventProcessData(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam);
  270. void OnEventProcessError(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam);
  271. void OnEventProcessWarning(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam);
  272. bool OnProcessImage(WORD* pImage, int nWidth, int nHeight, float fImageReferUGY = 2.5);
  273. bool OnProcessPreviewImage(WORD* pRawImage, int nWidth, int nHeight);
  274. bool OnProcessPreExpImage(WORD* pwRawImage, int nWidth, int nHeight);
  275. RET_STATUS XWindowOnNotify();
  276. RET_STATUS XWindowOffNotify();
  277. void PrevImageDateArrived(WORD* pImg);
  278. void FullImageDateArrived(WORD* pImg);
  279. void PreExpImageDateArrived(WORD* pImg);
  280. RET_STATUS AddFrameWithRawHead(IMAGE_VIEW_TYPE Type, WORD* pFrameBuff, DWORD FrameSize);
  281. string MakeImageHead(IMAGE_VIEW_TYPE Type);
  282. bool SaveRawImage(string strImageName, WORD* pwRawImage, int nHeight, int nWidth);
  283. public:
  284. bool m_bStatusInAEC;
  285. private:
  286. int m_nClinicalApplicationMode;
  287. int m_nFilterMode;
  288. };
  289. }