IRayCtrl.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. #pragma once
  2. #include <map>
  3. //转存文件内容使用
  4. #include <shellapi.h>
  5. #include "ResDataObject.h"
  6. #include "IRayDefinition.h"
  7. #include "CCOS.Dev.FPD.iRay.h"
  8. //SDK头文件
  9. #include "IRaySDK/include/IRayFpdSys.h"
  10. #include "IRaySDK/include/IRayFpdSysEx.h"
  11. #include "IRaySDK/include/IRayCmdDef.h"
  12. #define IRAY_SCAN_NUM 5
  13. namespace nsDPC = CCOS::Dev::Detail::Detector;
  14. namespace CCOS::Dev::Detail::Detector
  15. {
  16. class IRayCtrl
  17. {
  18. public:
  19. IRayCtrl();
  20. ~IRayCtrl();
  21. bool Init(string strAppPath);
  22. void ProcessEvent(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, int nParam2, int nPtrParamLen, void* pParam);
  23. bool AddDPCs(nsDPC::FPDDeviceIRay* pDrvDPC, ResDataObject& Configuration, DeviceIndexStruct& DeviceStruct );
  24. bool DelDPCs(nsDPC::FPDDeviceIRay* pDrvDPC);
  25. bool ActivePanel(nsDPC::FPDDeviceIRay* pDrvDPC, bool bActive);
  26. bool SwithPanel(int nPanelId);
  27. bool EnterExam(APP_STATUS eStatus);
  28. bool Connect(string strAppPath, nsDPC::FPDDeviceIRay* pDrvDPC);
  29. bool DisConnect(nsDPC::FPDDeviceIRay* pDrvDPC);
  30. bool ResetFPD(nsDPC::FPDDeviceIRay* pDrvDPC);
  31. RET_STATUS SetSyncMode(SYNC_MODE nSyncMode, HARDWARE_TRIGGER_MODE TriggerMode);
  32. bool SetAcqMode(nsDPC::FPDDeviceIRay* pDrvDPC, int nLogicMode, DetModeInfo& AcqModeInfo);
  33. RET_STATUS PrepareAcquisition(nsDPC::FPDDeviceIRay* pDrvDPC);
  34. RET_STATUS StartAcquisition(nsDPC::FPDDeviceIRay* pDrvDPC);
  35. RET_STATUS StopAcquisition(nsDPC::FPDDeviceIRay* pDrvDPC);
  36. bool InitCalibration();
  37. bool GetiRayPanelCalibItem();
  38. RET_STATUS ActiveCalibration(CCOS_CALIBRATION_TYPE Type, nsDPC::FPDDeviceIRay* pDrvDPC);
  39. RET_STATUS PrepareCalibration(nsDPC::FPDDeviceIRay* pDrvDPC);
  40. RET_STATUS StartCalibration(nsDPC::FPDDeviceIRay* pDrvDPC);
  41. RET_STATUS CompleteCalibration(nsDPC::FPDDeviceIRay* pDrvDPC);
  42. RET_STATUS AbortCalibration(nsDPC::FPDDeviceIRay* pDrvDPC);
  43. RET_STATUS OnUpdateFirmware(nsDPC::FPDDeviceIRay* pDrvDPC);
  44. bool ConfirmCalibration();
  45. bool AcceptCalibration();
  46. bool RejectCalibration();
  47. bool CreateCalibrationFile();
  48. void OnEndCalibraion();
  49. bool UploadCalibrationFiles(nsDPC::FPDDeviceIRay* pDrvDPC, string strFileName);
  50. bool RecoverLastImage();
  51. bool RecoverLastImageAuto();
  52. bool SaveFailedCalibFiles(int nDetectorID, bool bExpMode);
  53. bool CopyFile2Folder(string strSrcPath, string strDstPath);
  54. bool WriteCumstomFile(int nDetectorID);
  55. bool CancelImageRecover();
  56. bool SetFluPPS(float fFluPPS);
  57. bool GetFluPPS(float& fFluPPS);
  58. bool StartOffset(bool isAll);
  59. bool AbortOffset();
  60. public:
  61. bool m_bCalibResultFailed;
  62. string m_strWorkPath; //工作路径
  63. APP_STATUS m_eAppStatus; //记录当前软件的工作状态(界面)
  64. int m_nCurrentMode; //记录探测器当前application mode
  65. string m_strCurrentExamType;
  66. int m_nImageWidth;
  67. int m_nImageHeight;
  68. int m_nHeightOffset;
  69. int m_nBottomOffset;
  70. int m_nWidthOffset;
  71. int m_nRightOffset;
  72. int m_nRawImgWidth; //图像原始宽
  73. int m_nRawImgHeight; //图像原始高
  74. int m_nImgBits;
  75. int m_nPixelPitch;
  76. bool m_bPreviewEnable;
  77. float m_fFactorEXI2UGY; //探测器EXI -> UGY 转换系数
  78. int m_nPreviewWidth;
  79. int m_nPreviewHeight;
  80. CCOS_CALIBRATION_TYPE m_eCaliType; // 记录当前校正模式
  81. float m_fCurrentDose; // 记录当前的Dose要求
  82. int m_nCaliFailedCount; //记录增益校正失败次数,超过一定次数自动停止校正
  83. bool m_bGainPreparing; //true: 正在进入增益校正状态
  84. bool m_bGainProcess; //true: 处于增益曝光的一次小循环当中(WindowOn ~ SDK返回当前曝光结果)
  85. bool m_bConfirmCaliRst; //true: 接受当前增益校正曝光结果
  86. bool m_bSaveRaw; //false:不存; true:存原图;
  87. bool m_bPreviewImg; //false:不要预览图; true:要预览图
  88. //int m_nGainNodeCount; //校正曝光的总节点个数
  89. //int m_nGainNodeIndex; //校正曝光的节点Index
  90. //int m_nGainExpCount; //校正曝光节点需要曝光的次数
  91. //int m_nGainExpIndex; //校正曝光节点已曝光的次数
  92. int m_nUpdateFPDID; //记录要固件升级的探测器ID
  93. bool m_bIsImageRecovering; //是否处于图像恢复流程
  94. bool m_bGrabStatus; //采集状态
  95. int m_nFrameID; //动态图一次采集的ID
  96. int m_nExiThreshold; //EXI检测阈值
  97. private:
  98. bool LoadIRayDLL(string strWorkPath);
  99. void FreeIRayDLL();
  100. FPDRESULT IrayFnInvoke(int nDetectorID, int nCommandID, IRayCmdParam pars[], int nParCount);
  101. void StartInitFPDThread();
  102. static DWORD _stdcall onInitPanel(void* pParam); //初始化线程
  103. void Action_Init();
  104. bool DetectorInitProcess(int nPanelIndex, bool bFetchCalibration = false);
  105. bool RetryConnect(int nPanelIndex);
  106. bool OnInitStatus(int nPanelIndex, ENUM_PANEL_EVENT_STATE ePanelState);
  107. void ScanAddHandle();
  108. void iRayScanEventThread(); //监控线程
  109. static DWORD __stdcall onScanEvent(void* pParam); //初始化线程
  110. static DWORD __stdcall onUpdateFWThread(PVOID pvoid);
  111. void ConfFeedback(int nEventID, int nDetectorID = -1, const char* pszMsg = "", int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  112. void InfoFeedback(int nEventID, int nDetectorID = -1, int nParam1 = 0, float fParam2 = 0, const char* pszMsg = "", int nPtrParamLen = 0, void* pParam = NULL);
  113. void StatusFeedback(int nEventID, int nParam1 = 0, const char* pszMsg = "", int nDetectorID = -1, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  114. void DataFeedback(int nEventID, void* pParam = NULL, int nParam1 = 0, float fParam2 = 0, const char* pszMsg = "", int nPtrParamLen = 0, int nDetectorID = -1);
  115. void WarnFeedback(int nEventID, const char* pszMsg = "", int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL, int nDetectorID = -1);
  116. void ErrorFeedback(int nEventID, const char* pszMsg = "", int nDetectorID = -1, int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  117. void OnProcessTaskResult(int nDetectorID, int nParam1, int nParam2, bool bResult);
  118. void OnProcessTaskResult2(int nDetectorID, int nParam1, int nParam2, bool bResult); //用此函数单独处理task_start & tast_canceled
  119. bool ClearCorrection(int nPanelIndex);
  120. bool SetPrepCapMode(int nDetectorID, int nPrepCapMode);
  121. bool SetSelfCapEnable(int nDetectorID, int nSelfCapEnable);
  122. bool SetSelfClearEnable(int nDetectorID, int nSelfClearEnable);
  123. bool SetDynaOffsetGapTime(int nDetectorID, int nDynaOffsetGapTime);
  124. bool SetInnerSubFlowAttr(int nDetectorID, int nInnerSubFlow);
  125. bool SetXWindowDelay(int nDetectorID, int nXWidnowTime);
  126. bool GetExpWindowTime(int nDetectorID, int& nExpWindowTime);
  127. bool SetExpWindowTime(int nDetectorID, int nExpWindow);
  128. bool GetDetectorStatus(int nDetectorID, int& state);
  129. bool GetAttr(int nDetectorID, int nAttrID, int& nValue);
  130. bool GetAttr(int nDetectorID, int nAttrID, float& fValue);
  131. bool GetAttr(int nDetectorID, int nAttrID, char* pszAttr);
  132. bool SetAttr(int nDetectorID, int nAttrID, int nValue);
  133. bool TestError(int nDetectorID, int nErrorStatus, bool bPopUp = true);
  134. bool ReadBatteryStatus(int nPanelIndex);
  135. bool CheckBattery(int nPanelIndex);
  136. bool GetBatterySN(int nDetectorID, char* inoutSN);
  137. bool GetBatteryExist(int nDetectorID, int& nExist);
  138. bool GetBatteryRemaining(int nDetectorID, int& nRemaining);
  139. bool GetBatteryChargingStatus(int nDetectorID, int& nStatus);
  140. bool GetFPDTempT1(int nDetectorID, float& fTempT1);
  141. bool GetFPDTempT2(int nDetectorID, float& fTempT2);
  142. bool GetHallSensor(int nDetectorID, int& nPosition);
  143. bool GetLifeTime(int nDetectorID, int& nLifeTime);
  144. bool GetPowerOnCount(int nDetectorID, int& nPowerOnCount);
  145. bool GetCorrectionOption(int nDetectorID, int& nOption);
  146. bool GetFWUpdateProgress(int nDetectorID, int& nOption);
  147. bool ReadWifiStatus(int nPanelIndex);
  148. bool CheckWiFi(int nPanelIndex);
  149. bool CheckTemperature(int nPanelIndex);
  150. bool ReadTempStatus(int nPanelIndex);
  151. bool ReadLivingTime(int nDetectorID);
  152. bool CheckLivingTime(int nDetectorID);
  153. bool GetProductNo(int nDetectorID, int&);
  154. bool GetSrcIP(int nDetectorID, char* pszUROM_SrcIP);
  155. bool GetSerialNo(int nDetectorID, char* pszUROM_SerialNo);
  156. bool GetMainVersion(int nDetectorID, char* pszMainVersion);
  157. bool GetReadVersion(int nDetectorID, char* pszReadVersion);
  158. bool GetMcuVersion(int nDetectorID, char* pszMcuVersion);
  159. bool GetArmVersion(int nDetectorID, char* pszArmVersion);
  160. bool GetSyncMode(int nDetectorID, int& nTriggerMode);
  161. bool GetKernelVersion(int nDetectorID, char* pszKernelVersion);
  162. bool GetDelayTime(int nDetectorID, int& nDelayTime);
  163. bool SetDelayTime(int nDetectorID, int nDelayTime);
  164. bool SetCorrectFile();
  165. bool GetCorrectFileIndex(int& nGainMapIndex, int& nDefectMapIndex);
  166. bool GetWifiLinkQuality(int nDetectorID, int& nQuality);
  167. bool GetROMInfo(int nPanelIndex);
  168. bool GetHVGSignalStatus(int nDetectorID);
  169. bool SetDetectorCorrection(int nDetectorID, int nCorrectionType);
  170. bool SetDetectorFluSync(int nDetectorID, int nFluSync);
  171. bool GetXWindowDelay(int nDetectorID, int& nXWidnowTime);
  172. bool GetPrepCapMode(int nDetectorID, int& nPrepCapMode);
  173. bool GetConnState(int nDetectorID, int& nConnState);
  174. bool GetSelfCapEnable(int nDetectorID, int& nSelfCapEnable);
  175. bool GetSelfClearEnable(int nDetectorID, int& nSelfClearEnable);
  176. bool GetDynaOffsetGapTime(int nDetectorID, int& nDynOffsetGapTime);
  177. bool WriteRom(int nDetectorID);
  178. int SetSyncMode(int nPanelIndex, int nSetSyncMode);
  179. int SetInnerSubFlow(int nDetectorID, int nInnerSubFlow);
  180. int SetCapModeFunc(int nDetectorID, int nSetCapMode);
  181. int SetFPDCalParam(int nDetectorID, int nSetSelfCapEnable, int nSetSelfClearEnable);
  182. bool SetDetectorWorkMode(int nDetectorID, int nMode);
  183. bool SetDetectorXWindow(int nDetectorID, int nDelayTime, int nXWindowTime, int nClearAcqTime);
  184. bool OffsetCalibration();
  185. bool OffsetProcess(int nDetectorID, int nMode);
  186. bool SetAppMode(int nDetectorID, int nMode);
  187. bool WaitRespond(int nTimeOut);
  188. void SendNotify();
  189. void ResetLock();
  190. void Pausetime(DWORD dwSpan);
  191. bool WaitReady(int nPanelIndex, int nMs);
  192. bool StartXWindowOffThread();
  193. static DWORD XWindowOffThread(LPVOID pParam);
  194. void DisconnectFD(int nDetectorID);
  195. bool IsFWNeedUpdate(int nDetectorID);
  196. bool UpdateFirmware(int nPanelIndex, bool bUpdate);
  197. bool UploadCalibFileFromFD(int nDetectorID, int nIndex, string strFileName, bool bGain);
  198. bool DownloadCalibrationFileToFD(bool bGainFile, bool bExpMode);
  199. bool DownloadUserDefectFileToFD(bool bLTE);
  200. bool DownloadfromDetector(int nDetectorID);
  201. bool DeleteOneFolder(string strSourceFolder);
  202. bool CleanCalibFiles(int nDetectorID, bool bExpMode);
  203. bool CheckLastImageStatus(int nDetectorID);
  204. bool RecoverImage();
  205. bool OnEXIT();
  206. void DeleteHandle();
  207. bool GetCalibrationTime(int nDetectorID, bool bExpMode);
  208. void GetFwName(string strFirmPath, string& strFirmwareName);
  209. bool FlipX(WORD* pData, int nWidth, int nHeight);
  210. bool FlipXRotate90(WORD* pData, int nWidth, int nHeight);
  211. bool IsConnected(string strIP);
  212. bool ModifyConfigIni(string strIniPath, string strSN, string strIP);
  213. void OnProcessPreImg();
  214. void OnProcessImg();
  215. bool GetEffectiveImage(WORD* pOutImg, WORD* pInImg, int nInWidth);
  216. HANDLE m_pHardwareStatusThread;
  217. HANDLE m_hEndHWStatusThreadEvent;
  218. HANDLE m_hHWStatusThreadEndEvent;
  219. bool StartHardwareStatusThread();
  220. static DWORD HardwareStatusThread(LPVOID pParam);
  221. bool GetHardwareStatus();
  222. bool GetConnectionStatus(int nDetectorID);
  223. bool SaveRawImage(const char* pImgName, const WORD* pRawImg, int nWidth, int nHeight);
  224. bool CheckImageEXI(WORD* pImage, int nWidth, int nHeight, int nImageBit, int nThreshold, float fArea);
  225. bool SetOffsetModeScope();
  226. private:
  227. //句柄
  228. HMODULE m_hIRayModule;
  229. FnCreate m_fpCreate;
  230. FnDestroy m_fpDestroy;
  231. FnGetAttr m_fpGetAttr;
  232. FnSetAttr m_fpSetAttr;
  233. FnInvoke m_fpInvoke;
  234. FnRegisterScanNotify m_pRegisterScanNotify;
  235. FnScanOnce m_pScanOnce;
  236. FnGetErrInfo m_pFnGetErrorInfo;
  237. FnAbort m_pfAbort;
  238. FnOpenDefectTemplateFile m_pfOpenDefectTemplateFile;
  239. FnCloseDefectTemplateFile m_pfCloseDefectTemplateFile;
  240. HANDLE m_hInitThread;
  241. HANDLE m_hArrayEvent[IRAY_SCAN_NUM];
  242. HANDLE m_hExitEvent;
  243. HANDLE m_hRecoverImage;
  244. HANDLE m_hCofirmCalib;
  245. HANDLE m_hEndCalibEvent;
  246. HANDLE m_hOffsetEvent;
  247. HANDLE m_hIRayScanEnd;
  248. HANDLE m_hSharedEvent; //等待SDK回调句柄
  249. HANDLE m_hWindowOffEvent;
  250. HANDLE m_pXWindowoffThread;
  251. HANDLE m_hScanEventThread;
  252. string g_strAppPath;
  253. int m_nPanelCount;
  254. int m_nDetectorID; //SDK探测器ID(1,2,3)
  255. int m_nDetectorIndex; //当前激活探测器的index(0,1,2)
  256. FPDDeviceIRay* m_pCurrentDPC;
  257. map<FPDDeviceIRay*, int>* m_pDPC2PanelID;
  258. map<int, FPDDeviceIRay*>* m_pPanelID2DPC;
  259. DeviceIndexStruct m_stDeviceIndex[3]; //配置的探测器列表//不超过三块板
  260. ResDataObject m_ObjFPDsInfo[3]; //存储探测器数量和类型
  261. ResDataObject m_ModeConfig;
  262. WORD* m_pwRawImageData; //原始图像内存
  263. WORD* m_pwPreviewImg; //preview内存
  264. map<int, int> m_mapLogicModeOperationMode; //<nLogicMode, nOperationMode>
  265. int m_nCmdConnectResult;
  266. DeviceErrorInfor m_WarnRes; //warn配置文件列表
  267. DeviceErrorInfor m_ErrRes; //error配置文件列表
  268. DeviceErrorList m_ErrList; //当前错误列表
  269. DeviceErrorList m_ErrListTemp; //初始化时未发送到UI的ERROR
  270. DeviceErrorList m_WarnList; //当前错误列表
  271. bool m_bInitialing; //是否在初始化过程中
  272. bool m_bBatteryCharging; //电池充电与否的状态
  273. bool m_bRecoveringImage;//是否在恢复图像的流程中;若是,屏蔽其他错误,以防止干扰恢复图像的界面流程
  274. bool m_bAbortRecover; //放弃恢复图像(状态),恢复图像过程中中止,恢复图像失败的提示不再往上发送;目前不起作用
  275. bool m_bSetCorrectFile;
  276. bool m_bForceGridSuppress;
  277. bool m_bInCalibrating;
  278. bool m_bInExposure;
  279. bool m_bWindowOn; //曝光窗口是否打开了
  280. bool m_bFDAttaching;
  281. bool m_bShowAttachInfo;
  282. bool m_bFirmwareUpdating;
  283. int m_nDoseParam;// 校正用的曝光计量,发送到UI 且本地记录
  284. int m_nRequireTimer; //查询WIFI电量的周期,Patient界面 10分钟检查一次
  285. int m_nRecoverImageTimes; // 恢复图像失败的次数,每2次提示用户一次
  286. int m_nCalibDueSetting; // 校正文件的保质期天数
  287. int m_nOldDay; //校正日期定期检查的上次时间(某一天)
  288. int m_nCalibStatus;
  289. int m_nSID; //SID值
  290. int m_nBatteryCapacity;
  291. int m_nBatteryCharges;
  292. int m_nGridLicense;
  293. float m_fCalibTemperature1;
  294. float m_fCalibTemperature2;
  295. float m_fCalibTemperature;
  296. float m_fTemperatureMin;
  297. float m_fTemperatureMax;
  298. float m_fGradientMean;
  299. float m_fGradientStdDev;
  300. //校正相关变量
  301. list<RefrenceCal> m_listCalibItem;
  302. list<RefrenceCal>::iterator m_iterCalibDose;
  303. int m_nCalibrationMode; //校正模式,ZSKK or Factory
  304. int m_nDefectExpTimes;
  305. int m_nDefectTotalTimes;
  306. int m_nGainExpTimes;
  307. int m_nGainTotalFrames;
  308. int m_nDefectTotalFrames;
  309. int m_nLastExpFDIndex;
  310. int m_nCorrectionType;
  311. //其他
  312. bool m_bImageRecoverBeCanceled;
  313. bool m_bOffsetAll;
  314. float m_fFrameRate;
  315. };
  316. }