PZMedicalCtrl.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. #pragma once
  2. #include "ResDataObject.h"
  3. #include "CCOS.Dev.FPD.PZMedical.h"
  4. #include "include/NetCom.h"
  5. //#include <atomic>
  6. constexpr auto SCAN_EVENT_COUNT = 7;
  7. #ifndef __PZRFAPI__
  8. #define __PZRFAPI__ typedef __declspec(dllimport)
  9. #endif
  10. __PZRFAPI__ BOOL(__cdecl* Func_COM_Init)();
  11. __PZRFAPI__ BOOL(__cdecl* Func_COM_Uninit)();
  12. __PZRFAPI__ BOOL(__cdecl* Func_COM_SetCfgFilePath)(CHAR* path);
  13. __PZRFAPI__ BOOL(__cdecl* Func_COM_List)(TComFpList* ptComFpList);
  14. __PZRFAPI__ BOOL(__cdecl* Func_COM_ListAdd)(CHAR* psn);
  15. __PZRFAPI__ BOOL(__cdecl* Func_COM_ListDel)(CHAR* psn);
  16. __PZRFAPI__ BOOL(__cdecl* Func_COM_ListClr)();
  17. __PZRFAPI__ BOOL(__cdecl* Func_COM_Open)(CHAR* psn);
  18. __PZRFAPI__ BOOL(__cdecl* Func_COM_Close)();
  19. __PZRFAPI__ BOOL(__cdecl* Func_COM_StopNet)();
  20. __PZRFAPI__ BOOL(__cdecl* Func_COM_StartNet)();
  21. __PZRFAPI__ BOOL(__cdecl* Func_COM_RegisterEvCallBack)(CHAR nEvent, FP_EVENT_CALLBACK funcallback);
  22. __PZRFAPI__ BOOL(__cdecl* Func_COM_SetPreCalibMode)(CHAR nCalMode);
  23. __PZRFAPI__ CHAR(__cdecl* Func_COM_GetPreCalibMode)();
  24. __PZRFAPI__ BOOL(__cdecl* Func_COM_SetCalibMode)(CHAR nCalMode);
  25. __PZRFAPI__ CHAR(__cdecl* Func_COM_GetCalibMode)();
  26. __PZRFAPI__ BOOL(__cdecl* Func_COM_HstAcq)();
  27. __PZRFAPI__ BOOL(__cdecl* Func_COM_AedAcq)();
  28. __PZRFAPI__ BOOL(__cdecl* Func_COM_Trigger)();
  29. __PZRFAPI__ BOOL(__cdecl* Func_COM_Prep)();
  30. __PZRFAPI__ BOOL(__cdecl* Func_COM_Acq)();
  31. __PZRFAPI__ BOOL(__cdecl* Func_COM_PrepAcq)();
  32. __PZRFAPI__ BOOL(__cdecl* Func_COM_SetAcq)();
  33. __PZRFAPI__ BOOL(__cdecl* Func_COM_ComAcq)();
  34. __PZRFAPI__ BOOL(__cdecl* Func_COM_ExposeReq)();
  35. __PZRFAPI__ BOOL(__cdecl* Func_COM_AedTrigger)();
  36. __PZRFAPI__ BOOL(__cdecl* Func_COM_AedPrep)();
  37. __PZRFAPI__ BOOL(__cdecl* Func_COM_Aed2Acq)();
  38. __PZRFAPI__ BOOL(__cdecl* Func_COM_Stop)();
  39. __PZRFAPI__ BOOL(__cdecl* Func_COM_Dst)();
  40. __PZRFAPI__ BOOL(__cdecl* Func_COM_Dacq)();
  41. __PZRFAPI__ BOOL(__cdecl* Func_COM_Dacqaed)();
  42. __PZRFAPI__ BOOL(__cdecl* Func_COM_Cbct)();
  43. __PZRFAPI__ BOOL(__cdecl* Func_COM_Cbct2)();
  44. __PZRFAPI__ BOOL(__cdecl* Func_COM_Dexit)();
  45. __PZRFAPI__ BOOL(__cdecl* Func_COM_Dprep)();
  46. __PZRFAPI__ BOOL(__cdecl* Func_COM_Cprep)();
  47. __PZRFAPI__ BOOL(__cdecl* Func_COM_Exprep)();
  48. __PZRFAPI__ BOOL(__cdecl* Func_COM_SetConfigId)(UCHAR ucConfigId);
  49. __PZRFAPI__ BOOL(__cdecl* Func_COM_GetConfigId)(UCHAR* ucConfigId);
  50. __PZRFAPI__ BOOL(__cdecl* Func_COM_SetModeId)(UCHAR ucModeId);
  51. __PZRFAPI__ BOOL(__cdecl* Func_COM_GetModeId)(UCHAR* ucModeId);
  52. __PZRFAPI__ BOOL(__cdecl* Func_COM_LoadFullCfg)(UCHAR ucModeId);
  53. __PZRFAPI__ BOOL(__cdecl* Func_COM_SaveFullCfg)(UCHAR ucModeId);
  54. __PZRFAPI__ BOOL(__cdecl* Func_COM_SetMetaData)(TMetaData tMetaData);
  55. __PZRFAPI__ BOOL(__cdecl* Func_COM_GetMetaData)(TMetaData* ptMetaData);
  56. __PZRFAPI__ BOOL(__cdecl* Func_COM_GetPreImg)();
  57. __PZRFAPI__ BOOL(__cdecl* Func_COM_AedAcqOffLine)();
  58. __PZRFAPI__ BOOL(__cdecl* Func_COM_AcqOffLineImage)();
  59. __PZRFAPI__ UINT32(__cdecl* Func_COM_GetNumOffLineImg)();
  60. __PZRFAPI__ BOOL(__cdecl* Func_COM_GetImageMode)(TImageMode* ptImageMode);
  61. __PZRFAPI__ BOOL(__cdecl* Func_COM_GetImageModeV)(TImageMode* ptImageMode);
  62. __PZRFAPI__ BOOL(__cdecl* Func_COM_GetImageShiftMode)(TImageShiftMode* ptImageShiftMode);
  63. __PZRFAPI__ BOOL(__cdecl* Func_COM_GetImageName)(CHAR* name);
  64. __PZRFAPI__ BOOL(__cdecl* Func_COM_ClrImageID)();
  65. __PZRFAPI__ BOOL(__cdecl* Func_COM_GetImageID)(UINT32* pimgID);
  66. __PZRFAPI__ BOOL(__cdecl* Func_COM_GetImage)(CHAR* pImageBuff);
  67. __PZRFAPI__ BOOL(__cdecl* Func_COM_GetImageV)(CHAR* pImageBuff);
  68. __PZRFAPI__ BOOL(__cdecl* Func_COM_ResetFP)();
  69. __PZRFAPI__ BOOL(__cdecl* Func_COM_FpTurnOff)();
  70. __PZRFAPI__ INT32(__cdecl* Func_COM_GetErrNo)();
  71. __PZRFAPI__ BOOL(__cdecl* Func_COM_SetFPConf)(TFPUserCfg* ptFpUserCfg);
  72. __PZRFAPI__ BOOL(__cdecl* Func_COM_GetFPConf)(TFPUserCfg* ptFpUserCfg);
  73. __PZRFAPI__ BOOL(__cdecl* Func_COM_SetRBConf)(TRBConf* ptRbConf);
  74. __PZRFAPI__ BOOL(__cdecl* Func_COM_GetRBConf)(TRBConf* ptRbConf);
  75. __PZRFAPI__ BOOL(__cdecl* Func_COM_LogPathSet)(CHAR* path);
  76. __PZRFAPI__ BOOL(__cdecl* Func_COM_GetFPsn)(CHAR* psn);
  77. __PZRFAPI__ BOOL(__cdecl* Func_COM_GetDllVer)(CHAR* pcSDKVer);
  78. //__PZRFAPI__ BOOL(__cdecl* Func_)();
  79. enum CfgID
  80. {
  81. Cfg_RAD = 0, //拍片模式
  82. Cfg_FLU = 1, //透视模式
  83. Cfg_Max = 2
  84. };
  85. class PZMedicalCtrl
  86. {
  87. public:
  88. PZMedicalCtrl();
  89. ~PZMedicalCtrl();
  90. bool DriverEntry(FPDDevicePZMedical* pDrvDPC, ResDataObject& Configuration);
  91. bool Connect(FPDDevicePZMedical* pDrvDPC, const char* szWorkPath);
  92. bool Disconnect();
  93. void EnterExamMode(int nExamMode);
  94. bool ActiveDetector(int nDetectorID);
  95. bool SetAcqMode(DetModeInfo DetModeInfo, DetCalibInfo DetCalibInfo, int nMode);
  96. bool PrepareAcquisition(FPDDevicePZMedical* pDrvDPC);
  97. bool StartAcquisition(FPDDevicePZMedical* pDrvDPC);
  98. bool StopAcquisition(FPDDevicePZMedical* pDrvDPC);
  99. bool ActiveCalibration(FPDDevicePZMedical* pDrvDPC, CCOS_CALIBRATION_TYPE eType);
  100. bool PrepareCalibration(FPDDevicePZMedical* pDrvDPC);
  101. bool StartCalibration(FPDDevicePZMedical* pDrvDPC);
  102. bool StopCalibration(FPDDevicePZMedical* pDrvDPC);
  103. bool ConfirmCalExposure();
  104. void RejectCalExposure();
  105. bool SetFluPPS(float fFluPPS);
  106. bool GetFluPPS(float& fFluPPS);
  107. bool StartOffset(int nMode);
  108. bool AbortOffset();
  109. public:
  110. bool m_bGrabStatus; //采集标志位
  111. private:
  112. bool LoadDll(string strWorkPath);
  113. bool FreeDll();
  114. bool InitDetector();
  115. bool ConnectDetector(int nDetectorID);
  116. bool DisconnectDetector(int nDetectorID);
  117. bool GetSetCalibMode(CHAR PreCalibMode, CHAR PostCalibMode); //先获取再设置校正模板策略
  118. bool GetImageInfo();
  119. bool SetSyncMode(int nSyncMode);
  120. bool WaitRespond(int nTimeOut = 65000, const char* szPosition = "");
  121. void GetRespond(const char* szPosition = "");
  122. bool TestError(int nRet, const char* szFuncName = "Func");
  123. static unsigned __stdcall onFPDScanThread(PVOID pvoid); //辅助线程
  124. void OnAcquireImage();
  125. void OnProcessImage();
  126. void OnRefreshOffset();
  127. void OnAcquireGainImage();
  128. bool StopAcquisition();
  129. bool GetEffectiveImage(WORD* pOutImg, WORD* pInImg, int nInWidth);
  130. double GetMean(WORD* imgNoHeader, int pixelNum);
  131. bool StartXWindowOffThread();
  132. static DWORD XWindowOffThread(LPVOID pParam);
  133. static BOOL __stdcall ProcessEvent(CHAR cEvent);
  134. void ConfFeedback(int nEventID, int nDetectorID = -1, const char* pszMsg = "", int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  135. void InfoFeedback(int nEventID, int nDetectorID = -1, int nParam1 = 0, float fParam2 = 0, const char* pszMsg = "", int nPtrParamLen = 0, void* pParam = NULL);
  136. void StatusFeedback(int nEventID, int nParam1 = 0, const char* pszMsg = "", int nDetectorID = -1, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  137. void DataFeedback(int nEventID, void* pParam = NULL, int nParam1 = 0, float fParam2 = 0, const char* pszMsg = "", int nPtrParamLen = 0, int nDetectorID = -1);
  138. void WarnFeedback(int nEventID, const char* pszMsg = "", int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL, int nDetectorID = -1);
  139. void ErrorFeedback(int nEventID, const char* pszMsg = "", int nDetectorID = -1, int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  140. bool SaveRawImage(const char* pImgName, const WORD* pRawImg, int nWidth, int nHeight);
  141. bool GetApplicationMode(int nAppModeKey = -1, int nAppModeID = -1, bool bReged = false);
  142. bool SetApplicationMode(int nAppCfgID, int nAppModeID);
  143. bool LoadCalibrationFile();
  144. bool UnLoadCalibrationFile();
  145. bool OpenStatusMonitor();
  146. static unsigned __stdcall onSatusMonitorThread(PVOID pvoid); //状态监控线程
  147. bool CloseStatusMonitor();
  148. bool StatusMonitor();
  149. bool CheckImageEXI(WORD* pImage, int nWidth, int nHeight, int nImageBit, int nThreshold, float fArea);
  150. private:
  151. int m_nLogicMode; //探测器曝光模式。0:RAD; 1:DAEC; 2:Dual Energy; 3: DDR; default:0;
  152. int m_nXWindowTime; //探测器曝光窗口时间(ms)。default:500ms
  153. bool m_bDetectorReady;
  154. map<FPDDevicePZMedical*, int>* m_pDPC2PanelID;
  155. map<int, FPDDevicePZMedical*>* m_pPanelID2DPC;
  156. int m_nPanelCount; //探测器数量
  157. ResDataObject m_ModeConfig; //保存DPC模块下发的配置
  158. std::string m_strWorkPath; //保存工作路径,进程路径
  159. std::string m_strSDKWorkDir; //SDK路径
  160. int m_nDetectorID; //SDK Detector ID: 1,2,3
  161. int m_nCurrentPanelID;
  162. SYNC_MODE m_eSyncMode; //同步模式
  163. HANDLE m_hStatusMonitorThread;
  164. HANDLE m_hExitStatusMonitorEvent;
  165. HANDLE m_hStatusMonitorToggleEvent;
  166. //int m_nImageWidth;
  167. //int m_nImageHeight;
  168. //int m_nWidthOffset;
  169. //int m_nHeightOffset;
  170. int m_nFrmHeaderLen; //图像头长度
  171. int m_nRawImgWidth; //SDK反馈的图像宽
  172. int m_nRawImgHeight; //SDK反馈的图像高
  173. WORD* m_pRawImgBuffer; //原始图
  174. WORD* m_pImgBuffer; //裁剪后图像
  175. unsigned short* m_pFluFrameBuffer; //动态图缓存
  176. int m_FluFrameNum; //记录DDR帧数,初始值为0
  177. int m_nExamMode; //记录工作界面
  178. bool m_bSaveRaw; //保存原图开关
  179. CCOS_CALIBRATION_TYPE m_eCaliType; // 记录当前校正模式
  180. bool m_bAbortOffset; //true: 终止校正
  181. int m_nGainNodeCount; //校正曝光的总节点个数
  182. int m_nGainNodeIndex; //校正曝光的节点Index
  183. int m_nGainExpCount; //校正曝光节点需要曝光的次数
  184. int m_nGainExpIndex; //校正曝光节点已曝光的次数
  185. //int m_nImageSize; //通过SDK返回值算出的图像尺寸
  186. bool m_bAutoOffsetMode; //是否自动刷新Offset模板
  187. bool m_bOffsetDone; //Offset是否完成
  188. float m_fFrameRate;
  189. DetModeInfo m_stModeInfo;
  190. DetCalibInfo m_stCalibInfo;
  191. HANDLE m_hRespond;
  192. //辅助线程事件
  193. HANDLE m_hFPDScanThread; //辅助线程
  194. HANDLE m_hInitEvent; //初始化事件
  195. //HANDLE m_hDisconnectEvent; //断开探测器连接
  196. HANDLE m_hAcqEvent; //开始Rad采集事件
  197. HANDLE m_hProcessImgEvent;
  198. HANDLE m_hXWinOnEvent;
  199. HANDLE m_hDarkEvent; //开始dark校正
  200. HANDLE m_hGainEvent; //开始Rad Gain事件
  201. HANDLE m_hStopScanEvent; //退出辅助线程事件
  202. HANDLE m_hArrayEvent[SCAN_EVENT_COUNT];
  203. HANDLE m_hToggleEvent; //辅助线程退出通知事件
  204. HANDLE m_hAcqReadyEvent; //采集Ready事件
  205. HANDLE m_hGainReadyEvent; //Rad Gain ready事件
  206. //atomic<bool> m_bStopAcpFlag{false};
  207. HANDLE m_pXWindowoffThread; //关窗线程
  208. HANDLE m_hWindowOffEvent; //关窗事件
  209. HMODULE m_hPZModule; //加载SDK的句柄
  210. Func_COM_Init API_COM_Init;
  211. Func_COM_Uninit API_COM_Uninit;
  212. Func_COM_SetCfgFilePath API_COM_SetCfgFilePath;
  213. Func_COM_LogPathSet API_COM_LogPathSet;
  214. Func_COM_GetFPsn API_COM_GetFPsn;
  215. Func_COM_GetDllVer API_COM_GetDllVer;
  216. Func_COM_List API_COM_List;
  217. Func_COM_ListAdd API_COM_ListAdd;
  218. Func_COM_ListDel API_COM_ListDel;
  219. Func_COM_Open API_COM_Open;
  220. Func_COM_Close API_COM_Close;
  221. Func_COM_StopNet API_COM_StopNet;
  222. Func_COM_StartNet API_COM_StartNet;
  223. Func_COM_RegisterEvCallBack API_COM_RegisterEvCallBack;
  224. Func_COM_SetPreCalibMode API_COM_SetPreCalibMode;
  225. Func_COM_GetPreCalibMode API_COM_GetPreCalibMode;
  226. Func_COM_SetCalibMode API_COM_SetCalibMode;
  227. Func_COM_GetCalibMode API_COM_GetCalibMode;
  228. Func_COM_HstAcq API_COM_HstAcq;
  229. Func_COM_AedAcq API_COM_AedAcq;
  230. Func_COM_Trigger API_COM_Trigger;
  231. Func_COM_Prep API_COM_Prep;
  232. Func_COM_Acq API_COM_Acq;
  233. Func_COM_PrepAcq API_COM_PrepAcq;
  234. Func_COM_SetAcq API_COM_SetAcq;
  235. Func_COM_ComAcq API_COM_ComAcq;
  236. Func_COM_ExposeReq API_COM_ExposeReq;
  237. Func_COM_AedTrigger API_COM_AedTrigger;
  238. Func_COM_AedPrep API_COM_AedPrep;
  239. Func_COM_Aed2Acq API_COM_Aed2Acq;
  240. Func_COM_Stop API_COM_Stop;
  241. Func_COM_Dst API_COM_Dst;
  242. Func_COM_Dacq API_COM_Dacq;
  243. Func_COM_Dacqaed API_COM_Dacqaed;
  244. Func_COM_Cbct API_COM_Cbct;
  245. Func_COM_Cbct2 API_COM_Cbct2;
  246. Func_COM_Dexit API_COM_Dexit;
  247. Func_COM_Dprep API_COM_Dprep;
  248. Func_COM_Cprep API_COM_Cprep;
  249. Func_COM_Exprep API_COM_Exprep;
  250. Func_COM_SetConfigId API_COM_SetConfigId;
  251. Func_COM_GetConfigId API_COM_GetConfigId;
  252. Func_COM_SetModeId API_COM_SetModeId;
  253. Func_COM_GetModeId API_COM_GetModeId;
  254. Func_COM_LoadFullCfg API_COM_LoadFullCfg;
  255. Func_COM_SaveFullCfg API_COM_SaveFullCfg;
  256. Func_COM_SetMetaData API_COM_SetMetaData;
  257. Func_COM_GetMetaData API_COM_GetMetaData;
  258. Func_COM_GetPreImg API_COM_GetPreImg;
  259. Func_COM_AedAcqOffLine API_COM_AedAcqOffLine;
  260. Func_COM_AcqOffLineImage API_COM_AcqOffLineImage;
  261. Func_COM_GetNumOffLineImg API_COM_GetNumOffLineImg;
  262. Func_COM_GetImageMode API_COM_GetImageMode;
  263. Func_COM_GetImageShiftMode API_COM_GetImageShiftMode;
  264. Func_COM_GetImageName API_COM_GetImageName;
  265. Func_COM_ClrImageID API_COM_ClrImageID;
  266. Func_COM_GetImageID API_COM_GetImageID;
  267. Func_COM_GetImage API_COM_GetImage;
  268. Func_COM_ResetFP API_COM_ResetFP;
  269. Func_COM_FpTurnOff API_COM_FpTurnOff;
  270. Func_COM_GetErrNo API_COM_GetErrNo;
  271. Func_COM_SetFPConf API_COM_SetFPConf;
  272. Func_COM_GetFPConf API_COM_GetFPConf;
  273. Func_COM_SetRBConf API_COM_SetRBConf;
  274. Func_COM_GetRBConf API_COM_GetRBConf;
  275. };