YuyingCtrl.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. #pragma once
  2. #include <map>
  3. //转存文件内容使用
  4. #include <shellapi.h>
  5. #include "CcosLock.h"
  6. #include "ResDataObject.h"
  7. #include "DetectorDefinition.h"
  8. #include "CCOS.Dev.FPD.Yuying.h"
  9. #define Yuying_SCAN_NUM 4
  10. namespace nsDPC = CCOS::Dev::Detail::Detector;
  11. namespace CCOS::Dev::Detail::Detector
  12. {
  13. class YuyingCtrl : public CcosLock
  14. {
  15. class _AutoLocker
  16. {
  17. CcosLock* m_lockObj;
  18. public:
  19. _AutoLocker(CcosLock *lockObj,DWORD timeout = INFINITE)
  20. :m_lockObj(lockObj)
  21. {
  22. m_lockObj->Thread_Lock(timeout);
  23. }
  24. ~_AutoLocker()
  25. {
  26. if (m_lockObj)
  27. {
  28. m_lockObj->Thread_UnLock();
  29. }
  30. }
  31. };
  32. public:
  33. YuyingCtrl();
  34. ~YuyingCtrl();
  35. bool Init(string strAppPath);
  36. bool AddDPCs(nsDPC::FPDDeviceYuying* pDrvDPC, ResDataObject& Configuration, DeviceIndexStruct& DeviceStruct );
  37. bool DelDPCs(nsDPC::FPDDeviceYuying* pDrvDPC);
  38. bool ActivePanel(nsDPC::FPDDeviceYuying* pDrvDPC, bool bActive);
  39. bool SwithPanel(int nPanelId);
  40. bool EnterExam(APP_STATUS eStatus);
  41. bool Connect(string strAppPath, nsDPC::FPDDeviceYuying* pDrvDPC);
  42. bool DisConnect(nsDPC::FPDDeviceYuying* pDrvDPC);
  43. bool ResetFPD(nsDPC::FPDDeviceYuying* pDrvDPC);
  44. RET_STATUS SetSyncMode(SYNC_MODE nSyncMode, HARDWARE_TRIGGER_MODE TriggerMode);
  45. bool SelectExamMode(int nLogicMode, nsDPC::FPDDeviceYuying* pDrvDPC);
  46. RET_STATUS StartAcquisition(nsDPC::FPDDeviceYuying* pDrvDPC);
  47. RET_STATUS StopAcquisition(nsDPC::FPDDeviceYuying* pDrvDPC);
  48. RET_STATUS PrepareAcquisition(nsDPC::FPDDeviceYuying* pDrvDPC);
  49. bool InitCalibration();
  50. bool GetYuyingPanelCalibItem();
  51. RET_STATUS ActiveCalibration(CCOS_CALIBRATION_TYPE Type, nsDPC::FPDDeviceYuying* pDrvDPC);
  52. RET_STATUS PrepareCalibration(nsDPC::FPDDeviceYuying* pDrvDPC);
  53. RET_STATUS StartCalibration(nsDPC::FPDDeviceYuying* pDrvDPC);
  54. RET_STATUS CompleteCalibration(nsDPC::FPDDeviceYuying* pDrvDPC);
  55. RET_STATUS AbortCalibration(nsDPC::FPDDeviceYuying* pDrvDPC);
  56. RET_STATUS OnUpdateFirmware(nsDPC::FPDDeviceYuying* pDrvDPC);
  57. bool ConfirmCalibration();
  58. bool AcceptCalibration();
  59. bool RejectCalibration();
  60. bool CreateCalibrationFile();
  61. void OnEndCalibraion();
  62. bool ActiveSyncMode(nsDPC::FPDDeviceYuying* pDrvDPC, int nSyncMode);
  63. bool UploadCalibrationFiles(nsDPC::FPDDeviceYuying* pDrvDPC, string strFileName);
  64. bool RecoverLastImage();
  65. bool RecoverLastImageAuto();
  66. bool SaveFailedCalibFiles(int nDetectorID, bool bExpMode);
  67. bool CopyFile2Folder(string strSrcPath, string strDstPath);
  68. bool WriteCumstomFile(int nDetectorID);
  69. bool CancelImageRecover();
  70. public:
  71. ResDataObject m_ModeConfig;
  72. APP_STATUS m_eAppStatus; //记录当前软件的工作状态(界面)
  73. int m_nCurrentMode; //记录探测器当前的采集模式
  74. int m_nImageWidth;
  75. int m_nImageHeight;
  76. int m_nLeftOffset; //图像左侧裁剪像素值
  77. int m_nTopOffset; //图像上边裁剪像素值
  78. int m_nRightOffset; //图像右侧裁剪像素值
  79. int m_nBottomOffset; //图像下边裁剪像素值
  80. int m_nRawImgWidth; //图像原始宽
  81. int m_nRawImgHeight; //图像原始高
  82. int m_nImgBits;
  83. int m_nPixelPitch;
  84. bool m_bPreviewEnable;
  85. float m_fFactorEXI2UGY; //探测器EXI -> UGY 转换系数
  86. int m_nPreviewWidth;
  87. int m_nPreviewHeight;
  88. CCOS_CALIBRATION_TYPE m_eCaliType; // 记录当前校正模式
  89. float m_fCurrentDose; // 记录当前的Dose要求
  90. int m_nSaveRaw; //0:不存; 1:预览图; 2:raw图; 4:实际尺寸图像;
  91. //int m_nGainNodeCount; //校正曝光的总节点个数
  92. //int m_nGainNodeIndex; //校正曝光的节点Index
  93. //int m_nGainExpCount; //校正曝光节点需要曝光的次数
  94. //int m_nGainExpIndex; //校正曝光节点已曝光的次数
  95. int m_nUpdateFPDID; //记录要固件升级的探测器ID
  96. private:
  97. bool LoadYuyingDLL(string strWorkPath);
  98. void FreeYuyingDLL();
  99. void StartInitFPDThread();
  100. static DWORD __stdcall onInitPanel(void* pParam); //初始化线程
  101. void Action_Init();
  102. bool DetectorInitProcess(int nPanelIndex, bool bFDAttach = false);
  103. bool RetryConnect(int nPanelIndex);
  104. bool OnInitStatus(int nPanelIndex, ENUM_PANEL_EVENT_STATE ePanelState);
  105. void YuyingScanEventThread(); //监控线程
  106. static DWORD __stdcall onScanEvent(void* pParam); //初始化线程
  107. static DWORD __stdcall onUpdateFWThread(PVOID pvoid);
  108. void ConfFeedback(int nEventID, int nDetectorID = -1, const char* pszMsg = "", int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  109. void InfoFeedback(int nEventID, int nDetectorID = -1, int nParam1 = 0, float fParam2 = 0, const char* pszMsg = "", int nPtrParamLen = 0, void* pParam = NULL);
  110. void StatusFeedback(int nEventID, int nParam1 = 0, const char* pszMsg = "", int nDetectorID = -1, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  111. void DataFeedback(int nEventID, void* pParam = NULL, int nParam1 = 0, float fParam2 = 0, const char* pszMsg = "", int nPtrParamLen = 0, int nDetectorID = -1);
  112. void WarnFeedback(int nEventID, const char* pszMsg = "", int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL, int nDetectorID = -1);
  113. void ErrorFeedback(int nEventID, const char* pszMsg = "", int nDetectorID = -1, int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  114. bool ClearCorrection(int nPanelIndex);
  115. bool SetMarsCorrection(int nPanelIndex);
  116. bool TestError(int nDetectorID, int nErrorStatus, std::string strAPI = "");
  117. bool ReadBatteryStatus(int nPanelIndex);
  118. bool CheckBattery(int nPanelIndex);
  119. bool ReadWifiStatus(int nPanelIndex);
  120. bool CheckWiFi(int nPanelIndex);
  121. bool CheckTemperature(int nPanelIndex);
  122. bool ReadTempStatus(int nPanelIndex);
  123. bool WaitRespond(int nTimeOut, const char* szPosition = "");
  124. void SendNotify(const char* szPosition = "");
  125. void ResetLock();
  126. void Pausetime(DWORD dwSpan);
  127. bool StartOffsetThread();
  128. static DWORD OffsetThread(LPVOID pParam);
  129. bool StartXWindowOffThread();
  130. static DWORD XWindowOffThread(LPVOID pParam);
  131. void DisconnectFD(int nDetectorID);
  132. bool IsFWNeedUpdate(int nDetectorID);
  133. bool UpdateFirmware(int nPanelIndex, bool bUpdate);
  134. bool UploadCalibFileFromFD(int nDetectorID, int nIndex, string strFileName, bool bGain);
  135. bool DownloadCalibrationFileToFD(bool bGainFile, bool bExpMode);
  136. bool DownloadUserDefectFileToFD(bool bLTE);
  137. bool ReadCumstomFile(int nDetectorID);
  138. bool DownloadfromDetector(int nDetectorID);
  139. bool BackupCalibFiles(int nDetectorID, bool bDownload, bool bExpMode);
  140. bool DeleteOneFolder(string strSourceFolder);
  141. bool CleanCalibFiles(int nDetectorID, bool bExpMode);
  142. bool CleanCalibReport(int nDetectorID, bool bExpMode);
  143. bool RestoreSensitivity(int nDetectorID);
  144. bool RestoreCalibReport(int nDetectorID, bool bExpMode);
  145. bool CheckLastImageStatus(int nDetectorID);
  146. bool RecoverImage();
  147. bool OnEXIT();
  148. void DeleteHandle();
  149. bool GetCalibrationTime(int nDetectorID, bool bExpMode);
  150. bool FlipX(WORD* pData, int nWidth, int nHeight);
  151. bool FlipXRotate90(WORD* pData, int nWidth, int nHeight);
  152. bool IsConnected(string strIP);
  153. void OnProcessPreImg();
  154. void OnProcessImg();
  155. bool GetEffectiveImage(WORD* pOutImg, WORD* pInImg, int nInWidth);
  156. bool StartHardwareStatusThread();
  157. static DWORD HardwareStatusThread(LPVOID pParam);
  158. bool GetHardwareStatus();
  159. bool SaveRawImage(const char* pImgName, const WORD* pRawImg, int nWidth, int nHeight);
  160. static bool ImageReadyCallbackProcess(const char* pImage, int iFlag);
  161. static bool SystemInfoCallbackProcess(SystemInfoCode iCodeIndex, const char* sContent);
  162. bool onImageReadyCallbackProcess(const char* pImage, int iFlag);
  163. bool onSystemInfoCallbackProcess(SystemInfoCode iCodeIndex, const char* sContent);
  164. bool SetDetectorWorkMode(int nDetectorID, const char* szFPD, int nWorkMode);
  165. bool FPDLoadCorrectFiles(int nDetectorID, const char* szDetectorID);
  166. private:
  167. //句柄
  168. HMODULE m_hYuyingModule;
  169. Func_YI_Initialize_FPD_V4 API_YI_Initialize_FPD_V4;
  170. Func_YI_FPD_Set_Work_Mode API_YI_FPD_Set_Work_Mode;
  171. Func_YI_FPD_Stop_Capture_Image API_YI_FPD_Stop_Capture_Image;
  172. Func_YI_FPD_Get_Configure_Common API_YI_FPD_Get_Configure_Common;
  173. Func_YI_FPD_Set_Configure_Common API_YI_FPD_Set_Configure_Common;
  174. Func_YI_FPD_Get_Configure_SyncOut_Mode API_YI_FPD_Get_Configure_SyncOut_Mode;
  175. Func_YI_FPD_Set_Configure_SyncOut_Mode API_YI_FPD_Set_Configure_SyncOut_Mode;
  176. Func_YI_FPD_Restore_Factory_Settings API_YI_FPD_Restore_Factory_Settings;
  177. Func_YI_FPD_Subtract_Offset API_YI_FPD_Subtract_Offset;
  178. Func_YI_ImageReady_Callback_Register API_YI_ImageReady_Callback_Register;
  179. Func_YI_ImageReady_Callback_Register_Ex API_YI_ImageReady_Callback_Register_Ex;
  180. Func_YI_SystemInfo_Callback_Register API_YI_SystemInfo_Callback_Register;
  181. Func_YI_SystemInfo_Callback_Register_Ex API_YI_SystemInfo_Callback_Register_Ex;
  182. Func_YI_Get_Callback_Image_Size API_YI_Get_Callback_Image_Size;
  183. Func_YI_GetLastErrorCode API_YI_GetLastErrorCode;
  184. Func_YI_Set_Save_Log_Flag API_YI_Set_Save_Log_Flag;
  185. Func_YI_GetLoacalIPs_V4 API_YI_GetLoacalIPs_V4;
  186. Func_YI_Set_Image_Save_State API_YI_Set_Image_Save_State;
  187. Func_YI_Set_Image_Save_Path API_YI_Set_Image_Save_Path;
  188. Func_YI_FPD_Get_FPD_TYPE API_YI_FPD_Get_FPD_TYPE;
  189. Func_YI_FPD_Get_Invalid_Region API_YI_FPD_Get_Invalid_Region;
  190. Func_YI_FPD_Capture_Image API_YI_FPD_Capture_Image;
  191. Func_YI_FPD_Capture_Prepare API_YI_FPD_Capture_Prepare;
  192. Func_YI_Load_Gain_Tmp_File API_YI_Load_Gain_Tmp_File;
  193. Func_YI_Load_Defect_Tmp_File API_YI_Load_Defect_Tmp_File;
  194. Func_YI_Load_Offset_Tmp_File API_YI_Load_Offset_Tmp_File;
  195. Func_YI_Load_AED_Offset_Tmp_File API_YI_Load_AED_Offset_Tmp_File;
  196. Func_YI_Set_Correct_Type API_YI_Set_Correct_Type;
  197. Func_YI_FPD_DO_Correction API_YI_FPD_DO_Correction;
  198. Func_YI_FPD_Wifi_Re_Connect API_YI_FPD_Wifi_Re_Connect;
  199. Func_YI_FPD_Wifi_Set_Work_Mode API_YI_FPD_Wifi_Set_Work_Mode;
  200. Func_YI_FPD_Wifi_Get_Work_Mode API_YI_FPD_Wifi_Get_Work_Mode;
  201. Func_YI_FPD_Wifi_Set_Name API_YI_FPD_Wifi_Set_Name;
  202. Func_YI_FPD_Wifi_Set_Power_Down API_YI_FPD_Wifi_Set_Power_Down;
  203. Func_YI_FPD_Wifi_Set_IP_Address API_YI_FPD_Wifi_Set_IP_Address;
  204. Func_YI_FPD_Wifi_Set_Route_Info API_YI_FPD_Wifi_Set_Route_Info;
  205. HANDLE m_hArrayEvent[Yuying_SCAN_NUM];
  206. HANDLE m_hExitEvent;
  207. HANDLE m_hRecoverImage;
  208. HANDLE m_hCofirmCalib;
  209. HANDLE m_hEndCalibEvent;
  210. HANDLE m_hYuyingScanEnd;
  211. HANDLE m_hSharedEvent; //等待SDK回调句柄
  212. HANDLE m_hWindowOffEvent;
  213. HANDLE m_pOffsetThread;
  214. HANDLE m_pXWindowoffThread;
  215. HANDLE m_hScanEventThread;
  216. HANDLE m_hInitThread;
  217. string m_strAppPath; //模块工作目录
  218. string m_strWorkPath; //SDK工作路径
  219. int m_nPanelCount;
  220. int m_nDetectorID; //SDK探测器ID(1,2,3)
  221. int m_nDetectorIndex; //当前激活探测器的index(0,1,2)
  222. void* m_pCurrentDPC;
  223. map<FPDDeviceYuying*, int>* m_pDPC2PanelID;
  224. map<int, FPDDeviceYuying*>* m_pPanelID2DPC;
  225. DeviceIndexStruct m_stDeviceIndex[3]; //配置的探测器列表//不超过三块板
  226. ResDataObject m_ObjFPDsInfo[3]; //存储探测器数量和类型
  227. std::vector<std::string> m_vecDetectorID; //SDK探测器ID
  228. HANDLE m_pHardwareStatusThread;
  229. HANDLE m_hEndHWStatusThreadEvent;
  230. HANDLE m_hHWStatusThreadEndEvent;
  231. WORD* m_pImgBuffer; //裁剪后图像内存
  232. WORD* m_pwRawImageData; //原始图像内存
  233. WORD* m_pwPreviewImg; //预览图内存
  234. bool m_bInitialing; //是否在初始化过程中
  235. bool m_bForceGridSuppress;
  236. bool m_bInCalibrating;
  237. bool m_bInExposure;
  238. int m_nDoseParam;// 校正用的曝光计量,发送到UI 且本地记录
  239. int m_nCalibDueSetting; // 校正文件的保质期天数
  240. int m_nCalibStatus;
  241. int m_nSID; //SID值
  242. //校正相关变量
  243. list<RefrenceCal> m_listCalibItem;
  244. list<RefrenceCal>::iterator m_iterCalibDose;
  245. int m_nCalibrationMode; //校正模式,ZSKK or Factory
  246. int m_nDefectExpTimes;
  247. int m_nDefectTotalTimes;
  248. int m_nGainExpTimes;
  249. int m_nGainTotalFrames;
  250. int m_nDefectTotalFrames;
  251. };
  252. }