PZMedicalCtrl.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. #pragma once
  2. #include "ResDataObject.h"
  3. #include "CCOS.Dev.FPD.PZMedicalDM.h"
  4. #include "PZMedicalLib.h"
  5. #include "ZSKKCalibration.h"
  6. enum eDetStatus
  7. {
  8. DetStatus_NotIni,
  9. DetStatus_NotConn,
  10. DetStatus_Sleep,
  11. DetStatus_Standby,
  12. DetStatus_Work,
  13. DetStatus_Acquire,
  14. DetStatus_Offset,
  15. DetStatus_XrayCalibration,
  16. };
  17. enum eDetOperationMode
  18. {
  19. PIX_OM_RAD = 1,
  20. PIX_OM_TOMO,
  21. PIX_OM_AED = 4
  22. };
  23. enum eDetPixImgType
  24. {
  25. PIX_IMG_NONE,
  26. PIX_IMG_PRE,
  27. PIX_IMG_RAW,
  28. PIX_IMG_FULL = 4
  29. };
  30. class PZMedicalCtrl
  31. {
  32. //探测器信息
  33. struct CPanelStatus
  34. {
  35. bool bLostTemplate; //是否缺少校正文件
  36. bool bPanelInReady; //探测器在ready状态
  37. bool bConnectStatus; //是否连接
  38. SYNC_MODE eSyncMode; //同步模式
  39. bool bConnErrorInInit; //初始化阶段的断线错误
  40. bool bInitError; //初始化错误,一般不可恢复
  41. string strPanelType; //探测器类型,AddDPC时赋值
  42. string strPanelSN; //探测器序列号,连接成功后获取信息时被赋值
  43. bool bIsPortable;
  44. bool bCharging;
  45. bool bStatusPolling;
  46. bool bDC_AED;
  47. bool bDarkCalibDone; //offset刷新结束
  48. bool bAEDDarkCalibDone;
  49. bool bLTEDarkCalibDone; //长曝光offset刷新结束
  50. string strModuleIP; //探测器IP地址,attach或收到init回调时赋值
  51. bool bBatteryTooLow;
  52. bool bImagePending;
  53. bool bIsLoadRef; //是否加载了校正文件,加载过了不用再次加载
  54. int nBattery; //电池电量
  55. bool bInitOK; //初始化过程探测器连接完毕,用于重连判断
  56. bool bNeedUpdateFW; //是否需要固件升级的标记位
  57. bool bSelftested; //Selftest执行完毕
  58. int nTotalShockNumber; //探测器的shocksenseor总数
  59. int nFWStatus; //探测器固件状态
  60. string strPartNumber; //产品编号,连接成功后获取信息时被赋值
  61. ResDataObject objPanelConfig;
  62. bool bHaveAutonumousMode; //是否支持离线采集
  63. bool bAutonumousMode; //true: 离线模式;false:在线模式
  64. CPanelStatus()
  65. {
  66. bLostTemplate = false;
  67. bPanelInReady = false;
  68. bConnectStatus = false;
  69. eSyncMode = SYNC_SOFTWARE; //默认使用软同步作为缺省值
  70. bConnErrorInInit = false;
  71. bInitError = false;
  72. strPanelType = "";
  73. strPanelSN = "";
  74. bIsPortable = false;
  75. bCharging = false;
  76. bStatusPolling = false;
  77. bDC_AED = false;
  78. bDarkCalibDone = false;
  79. bAEDDarkCalibDone = false;
  80. bLTEDarkCalibDone = false;
  81. strModuleIP = "";
  82. bBatteryTooLow = false;
  83. bImagePending = false;
  84. bIsLoadRef = false;
  85. nBattery = 0;
  86. bInitOK = false;
  87. bNeedUpdateFW = false;
  88. bSelftested = false;
  89. nTotalShockNumber = -1;
  90. nFWStatus = -1;
  91. strPartNumber = "";
  92. bHaveAutonumousMode = false;
  93. bAutonumousMode = false;
  94. }
  95. };
  96. public:
  97. PZMedicalCtrl();
  98. ~PZMedicalCtrl();
  99. bool DriverEntry(FPDDevicePZMedical* pDrvDPC, ResDataObject& Configuration);
  100. bool Connect(FPDDevicePZMedical* pDrvDPC, const char* szWorkPath);
  101. bool Disconnect();
  102. void EnterExamMode(int nExamMode);
  103. bool PrepareAcquisition(FPDDevicePZMedical* pDrvDPC);
  104. bool StartAcquisition(FPDDevicePZMedical* pDrvDPC);
  105. bool StopAcquisition(FPDDevicePZMedical* pDrvDPC);
  106. bool ActiveCalibration(FPDDevicePZMedical* pDrvDPC, CCOS_CALIBRATION_TYPE eType);
  107. bool PrepareCalibration(FPDDevicePZMedical* pDrvDPC);
  108. bool StartCalibration(FPDDevicePZMedical* pDrvDPC);
  109. bool StopCalibration(FPDDevicePZMedical* pDrvDPC);
  110. bool ResetDetector(FPDDevicePZMedical* pDrvDPC);
  111. bool SetReferenceNum(int nReferenceNum);
  112. bool SetAcqMode(int nLogicMode, FPDDevicePZMedical* pDrvDPC);
  113. bool AcceptCalibration();
  114. bool RejectCalibration();
  115. bool SaveCalibrationFile();
  116. bool GetCalibrationStep(int nCalibCurrentCalibrationRound, int nCalibrationRounds, int nCalibCurrentExposureIndex, int nExposureNumCurrentRound);
  117. bool CompleteCalibration(FPDDevicePZMedical* pDrvDPC);
  118. bool GetCalibrationTime(int nDetectorID = -1);
  119. RET_STATUS AbortCalibration(FPDDevicePZMedical* pDrvDPC);
  120. CCOS_CALIBRATION_TYPE GetPZMedicalCtrlCalibType();
  121. PZDPC_State GetPZDPCState();
  122. private:
  123. map<FPDDevicePZMedical*, int>* m_pDPC2PanelID;
  124. map<int, FPDDevicePZMedical*>* m_pPanelID2DPC;
  125. int m_nPanelCount; //探测器数量
  126. std::string m_strWorkPath; //保存工作路径,用于加载SDK和配置
  127. int m_nCurrentPanelID;
  128. ResDataObject m_objFPDConfig; //保存DPC模块下发的配置
  129. CPanelStatus* m_pStPanelStatus[3];//探测器信息 内部还有自己的FPDConfig 注意赋值(为了以后连接多个板子用)
  130. std::string m_strTplDarkPath; // references\serialnumber\dark
  131. std::string m_strTplFloodPath; // references\serialnumber\flood
  132. PZDPC_State m_ePZDPCstate; //DPC或ctrl模块当前处于什么状态
  133. int m_nImageWidth;//裁剪后的图像宽
  134. int m_nImageHeight;//裁剪后的图像高
  135. int m_nWidthOffset;//左侧裁剪宽度
  136. int m_nHeightOffset;//上方裁剪宽度
  137. int m_nRawImgWidth; //SDK反馈的图像宽
  138. int m_nRawImgHeight; //SDK反馈的图像高
  139. WORD* m_pRawImgBuffer; //原始图buffer
  140. WORD* m_pImgBuffer; //处理后的图像buffer
  141. int m_nSaveRaw;
  142. int m_nImgBits;
  143. int m_nPixelPitch;
  144. APP_STATUS m_nAppStatus;//记录工作界面
  145. CCOS_CALIBRATION_TYPE m_eType; // 记录当前校正类型
  146. int m_nOffsetImg; // 校正时暗场图数量
  147. int m_nGainImg; // 校正时亮场图数量
  148. PZ_CALIBRATION_State m_eCalState;//探测器校正状态
  149. bool m_bCalibrationOver; // true 当前阶段校正完成;false 当前阶段校正未完成
  150. bool m_bWired; //是否为有线连接
  151. CHAR m_cFpCurStat; //探测器当前的工作模式SDK
  152. int m_nCalibrationRounds;//校正轮数
  153. eDetStatus m_eStatus; // 探测器状态
  154. CCOS_CALIBRATION_MODE m_nCalibrationMode;//校正模式
  155. CZSKKCalibrationCtrl* m_pZSKKCalib;
  156. string m_strPanelType; //探测器类型 3025ZF
  157. bool m_bLoadedSDK; //true 已经加载了SDK,避免重复调用,主要用于ReInit流程
  158. bool m_bInitializedSDK; //true 已经init了SDK,避免重复调用,主要用于ReInit流程
  159. bool m_bConnectWaiting;
  160. ResDataObject m_ModeConfig;
  161. int m_nCalibCurrentCalibrationRound;
  162. int m_nCalibCurrentExposureIndex;
  163. int m_nExposureNumCurrentRound;
  164. bool m_bConfirmCaliRst; //true: 接受当前增益校正曝光结果
  165. bool m_bAutoContinueCal; //true: SDK自动进行下一次增益开窗流程(一般是在当前增益合格);false: 手动触发SDK进行下一次增益
  166. bool m_bAutonumousMode;
  167. int m_nGainExposureNum;//gain校正曝光的总次数
  168. int m_nHeartCount;//心跳回调次数
  169. int m_nCurrentLogicMode;
  170. HMODULE m_hPZSDKModule; //SDK module
  171. HANDLE m_hRespond;
  172. HANDLE m_hToggleEvent; //辅助线程退出通知事件
  173. HANDLE m_hFPDScanThread;
  174. HANDLE m_hStopScanEvent;
  175. HANDLE m_hProcessImgEvent;
  176. HANDLE m_hXWinOnEvent;
  177. HANDLE m_hInitFPDEvent;
  178. HANDLE m_hReInitEvent;
  179. HANDLE m_hDarkEndEvent; //dark校正结束
  180. HANDLE m_hArrayEvent[6];
  181. //校正线程以及相应事件
  182. HANDLE m_hCalibrationThread;
  183. HANDLE m_hPZMPrepare; //校正流程准备,修改配置
  184. HANDLE m_hPZMStartOffset; //调用api,开始采集暗场图
  185. HANDLE m_hPZMInOffset; //调用api,继续采集暗场图 或 停止采集
  186. HANDLE m_hPZMStartAED; // 废弃,不参与
  187. HANDLE m_hPZMEndAED; //废弃,不参与
  188. HANDLE m_hPZMStartGain; //调用api,开始采集亮场图
  189. HANDLE m_hPZMInGain; //调用api,继续采集亮场图 或者 停止采集
  190. HANDLE m_hEndCalibEvent;
  191. HANDLE m_hPZMEndEvent; //生成校正文件;恢复配置
  192. HANDLE m_hPZMCalibration[9];
  193. bool LoadSDK();
  194. bool InitSDK();
  195. int ConnectDetector();
  196. bool InitDetector();
  197. BOOL OnProcessLink(char cEvent);
  198. BOOL OnProcessBreak(char cEvent);
  199. BOOL OnProcessImage(char cEvent);
  200. BOOL OnProcessHeartBeat(char cEvent);
  201. static DWORD __stdcall onFPDScanThread(PVOID pvoid);
  202. void OnProcessImg();
  203. void OnProcessInitFPD();
  204. void OnReInitFPD();
  205. void OnProcessDarkEnd();
  206. void StopThread();
  207. static DWORD __stdcall onCalibrationThread(PVOID pvoid);
  208. bool OnProcessCalibration();
  209. void SaveRawFunc(WORD* pInImg, int nImgWidth, int nImgHeight);
  210. bool SaveRawImage(const char* pImgName, const WORD* pRawImg, int nWidth, int nHeight);
  211. bool GetEffectiveImage(WORD* pOutImg, WORD* pInImg, int nInWidth);
  212. bool TestError(BOOL nRet, const char* szFuncName = "Func");
  213. bool WaitRespond(int nTimeOut = 65000, const char* szPosition = "");
  214. void StopWaiting(const char* szPosition = "");
  215. bool SetFPDTplPath();
  216. bool SetFPDCalibrationMode();
  217. void ConfFeedback(int nEventID, int nDetectorID = -1, const char* pszMsg = "", int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  218. void InfoFeedback(int nEventID, int nDetectorID = -1, int nParam1 = 0, float fParam2 = 0, const char* pszMsg = "", int nPtrParamLen = 0, void* pParam = NULL);
  219. void StatusFeedback(int nEventID, int nParam1 = 0, const char* pszMsg = "", int nDetectorID = -1, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  220. void DataFeedback(int nEventID, void* pParam = NULL, int nParam1 = 0, float fParam2 = 0, const char* pszMsg = "", int nPtrParamLen = 0, int nDetectorID = -1);
  221. void WarnFeedback(int nEventID, const char* pszMsg = "", int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL, int nDetectorID = -1);
  222. void ErrorFeedback(int nEventID, const char* pszMsg = "", int nDetectorID = -1, int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  223. void GetConnectionMode();
  224. void SetPZDPCState(PZDPC_State ePZDPCstate);
  225. void NotifyDetectorInfo();
  226. static BOOL __stdcall FuncLinkUpCallBack(char cEvent);
  227. static BOOL __stdcall FuncLinkDownCallBack(char cEvent);
  228. static BOOL __stdcall FuncImageCallBack(char cEvent);
  229. static BOOL __stdcall FuncHeartBeatCallBack(char cEvent);
  230. static BOOL __stdcall FuncReadyCallBack(char cEvent);
  231. static BOOL __stdcall FuncExposeCallBack(char cEvent);
  232. static BOOL __stdcall FuncExposeEndCallBack(char cEvent);
  233. static BOOL __stdcall FuncOffsetDoneCallBack(char cEvent);
  234. static BOOL __stdcall FuncAedA1CallBack(char cEvent);
  235. static BOOL __stdcall FuncAedA2CallBack(char cEvent);
  236. static BOOL __stdcall FuncImageStartCallBack(char cEvent);
  237. static BOOL __stdcall FuncImageEndCallBack(char cEvent);
  238. static BOOL __stdcall FuncBattLow1CallBack(char cEvent);
  239. static BOOL __stdcall FuncBattLow2CallBack(char cEvent);
  240. PZ_COM_Init API_COM_Init;
  241. PZ_COM_List API_COM_List;
  242. PZ_COM_Open API_COM_Open;
  243. PZ_COM_Close API_COM_Close;
  244. PZ_COM_RegisterEvCallBack API_COM_RegisterEvCallBack;
  245. PZ_COM_SetCalibMode API_COM_SetCalibMode;
  246. PZ_COM_GetCalibMode API_COM_GetCalibMode;
  247. PZ_COM_Trigger API_COM_Trigger;
  248. PZ_COM_AedAcq API_COM_AedAcq;
  249. PZ_COM_HstAcq API_COM_HstAcq;
  250. PZ_COM_Prep API_COM_Prep;
  251. PZ_COM_ExposeReq API_COM_ExposeReq;
  252. PZ_COM_Stop API_COM_Stop;
  253. PZ_COM_GetImageMode API_COM_GetImageMode;
  254. PZ_COM_GetImageShiftMode API_COM_GetImageShiftMode;
  255. PZ_COM_GetImage API_COM_GetImage;
  256. PZ_COM_SetAllTpl API_COM_SetAllTpl;//Load all templates,including offset,defect and gain template.
  257. PZ_COM_GenOffsetTpl API_COM_GenOffsetTpl;
  258. PZ_COM_GenGainTpl API_COM_GenGainTpl;
  259. PZ_COM_GenDefectTpl API_COM_GenDefectTpl;
  260. PZ_COM_TplPathSet API_COM_TplPathSet;
  261. PZ_COM_TplPathGet API_COM_TplPathGet;
  262. PZ_COM_LogPathSet API_COM_LogPathSet;
  263. PZ_COM_GetFPType API_COM_GetFPType;
  264. PZ_COM_SetAedCorrKB API_COM_SetAedCorrKB;
  265. PZ_COM_GetDllVer API_COM_GetDllVer;
  266. PZ_COM_GetFPInfo API_COM_GetFPInfo;
  267. PZ_COM_GetFPConf API_COM_GetFPConf;
  268. PZ_COM_SetFPConf API_COM_SetFPConf;
  269. PZ_COM_GetWifiMode API_COM_GetWifiMode;
  270. PZ_COM_GetFPStatus API_COM_GetFPStatus;
  271. PZ_COM_GetFPCurStatus API_COM_GetFPCurStatus;
  272. PZ_COM_GetFPsn API_COM_GetFPsn;
  273. PZ_COM_GetFPWireState API_COM_GetFPWireState;
  274. PZ_COM_GetFPLicense API_COM_GetFPLicense;
  275. PZ_COM_AedTrigger API_COM_AedTrigger;
  276. PZ_COM_ResetFP API_COM_ResetFP;
  277. PZ_COM_GetErrNo API_COM_GetErrNo;
  278. PZ_COM_GetXwin API_COM_GetXwin;
  279. PZ_COM_SetXwin API_COM_SetXwin;
  280. PZ_COM_GetRBConf API_COM_GetRBConf;
  281. PZ_COM_SetRBConf API_COM_SetRBConf;
  282. };