KonicaCtrl.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. #pragma once
  2. #include "ResDataObject.h"
  3. #include "CCOS.Dev.FPD.KonicaDR.h"
  4. #include "KonicaInterface.h"
  5. #include "include/AerosdkError.h"
  6. #include "include/AerosdkStruct.h"
  7. #include "include/AerosdkDefine.h"
  8. #include "ZSKKCalibration.h"
  9. constexpr auto SCAN_EVENT_COUNT = 5;
  10. class KonicaCtrl
  11. {
  12. enum class eDetStatus
  13. {
  14. DetStatus_NotIni,
  15. DetStatus_NotConn,
  16. DetStatus_Sleep,
  17. DetStatus_Standby,
  18. DetStatus_Work,
  19. DetStatus_Acquire,
  20. DetStatus_Offset,
  21. DetStatus_XrayCalibration,
  22. };
  23. //探测器信息
  24. struct CPanelStatus
  25. {
  26. bool bInitOver; //是否初始化完成
  27. bool bConnectState; //是否连接
  28. SYNC_MODE eSyncMode; //同步模式
  29. int nSoftAcqState;
  30. eDetStatus eFPDStatus; //探测器状态
  31. CPanelStatus()
  32. {
  33. bInitOver = false;
  34. bConnectState = false;
  35. eSyncMode = SYNC_SOFTWARE; //暂时使用软同步作为缺省值
  36. nSoftAcqState = 0;
  37. eFPDStatus = eDetStatus::DetStatus_NotIni;
  38. }
  39. };
  40. public:
  41. KonicaCtrl();
  42. ~KonicaCtrl();
  43. bool DriverEntry(FPDDeviceKonica* pDrvDPC, ResDataObject& Configuration);
  44. bool Connect(FPDDeviceKonica* pDrvDPC, const char* szWorkPath);
  45. void EnterExamMode(int nExamMode);
  46. bool SetAcqMode(int nMode);
  47. bool ActiveSyncMode(int nSyncMode);
  48. bool PrepareAcquisition(FPDDeviceKonica* pDrvDPC);
  49. bool StartAcquisition(FPDDeviceKonica* pDrvDPC);
  50. bool StopAcquisition(FPDDeviceKonica* pDrvDPC);
  51. bool ActiveCalibration(FPDDeviceKonica* pDrvDPC, CCOS_CALIBRATION_TYPE eType);
  52. bool PrepareCalibration(FPDDeviceKonica* pDrvDPC);
  53. bool StartCalibration(FPDDeviceKonica* pDrvDPC);
  54. bool StopCalibration(FPDDeviceKonica* pDrvDPC);
  55. bool AbortCalibration(FPDDeviceKonica* pDrvDPC);
  56. bool CompleteCalibration(FPDDeviceKonica* pDrvDPC);
  57. bool SaveCalibrationFile();
  58. void SetCalibRounds(int nCalibRounds);
  59. bool GetCalibrationStep(int nCalibCurrentCalibrationRound, int nCalibrationRounds, int nCalibCurrentExposureIndex, int nExposureNumCurrentRound);
  60. bool AcceptCalibration();
  61. bool RejectCalibration();
  62. CCOS_CALIBRATION_TYPE GetCalibType();
  63. bool GetCalibrationTime(int nDetectorID = -1);
  64. bool ActiveDetector(FPDDeviceKonica* pDrvDPC, bool bActive);
  65. bool UpdateCalibMode(CCOS_CALIBRATION_MODE eCalibMode);
  66. void CallBackEvent(int nType, unsigned int uintParam, char* pstrPanelId, int nXgboxNo);
  67. void SetNotifyStatusTimePeriod(int nTime);
  68. void SetReconnectTimePeriod(int nTime);
  69. private:
  70. map<FPDDeviceKonica*, int>* m_pDPC2PanelID;
  71. map<int, FPDDeviceKonica*>* m_pPanelID2DPC;
  72. int m_nPanelCount; //探测器数量
  73. ResDataObject m_ModeConfig; //保存DPC模块下发的配置
  74. std::string m_strWorkPath; //保存工作路径,用于加载SDK和配置
  75. int m_nCurrentPanelID;
  76. string m_strDetectorType; //探测器类型 A9YF-01649
  77. HMODULE m_hSDKModule; //加载SDK的句柄
  78. CPanelStatus *m_pStPanelStatus[2]; //康众SDK应该只支持双板
  79. int m_nSyncMode; //每次进检查子系统会调用 ActiveSyncMode 进行激活同步模式操作
  80. int m_nCurrentLogicMode;//当前工作在配置文件的哪个工作模式下
  81. //软同步是通过回调函数通知状态的 硬同步和AED都要主动查询状态,虽然都是query prog info 但是他俩使用的标志位也是不同的
  82. int m_nImageWidth;
  83. int m_nImageHeight;
  84. int m_nWidthOffset;
  85. int m_nHeightOffset;
  86. //A9YF-01649(AeroDR 3 1417HD2) Normal resolution W:1744 H:2128 High resolution W:3488 H:4256
  87. //A5DP-50072(AeroDR 1417HQ) Normal resolution W:1994 H:2430
  88. int m_nRawImgWidth; //原始图像宽
  89. int m_nRawImgHeight; //原始图像高
  90. int m_nPreviewEnable;
  91. //A9YF-01649(AeroDR 3 1417HD2) Normal resolution W:436 H:532 High resolution W:872 H:1064
  92. //A5DP-50072(AeroDR 1417HQ) Normal resolution W:498 H:607
  93. int m_nPreImgWidth;
  94. int m_nPreImgHeight;
  95. WORD* m_pRawImgBuffer; //原始图buffer
  96. WORD* m_pPreImgBuffer; //预览图buffer
  97. WORD* m_pImgBuffer; //裁剪后图像
  98. int m_nXwindow; //窗口积分时间
  99. int m_nImageNo;
  100. AppStatus m_nAppStatus; //记录软件状态
  101. int m_nSaveRaw;
  102. CCOS_CALIBRATION_MODE m_nCalibrationMode;//校正模式 ecom校正/厂商校正
  103. CCOS_CALIBRATION_TYPE m_eCaliType; // 记录当前校正类型
  104. CZSKKCalibrationCtrl* m_pZSKKCalib;
  105. int m_nCalibrationRounds;//校正总轮数
  106. int m_nCalibCurrentCalibrationRound;//当前校正轮数
  107. int m_nCalibCurrentExposureIndex;//当前轮次曝光第几次
  108. int m_nExposureNumCurrentRound;//当前轮次需要曝光的总次数
  109. int m_nNotifyStatusTimePeriod;//通知温度等状态信息的时间间隔
  110. int m_nReconnectTimePeriod;//重连的时间间隔
  111. int m_nDetectorStatus;
  112. int m_nXgboxNo;//要做成从模型文件中读取的
  113. bool m_bConnectXgbox;
  114. HANDLE m_hRespond;//用于等待某个状态的到来或者某个动作的完成
  115. //辅助线程事件
  116. HANDLE m_hStopScanEvent; //退出辅助线程事件
  117. HANDLE m_hProcessImgEvent;//处理图像事件
  118. HANDLE m_hDarkEvent; //开始dark校正
  119. HANDLE m_hGainEvent; //开始Rad Gain事件
  120. HANDLE m_hInitEvent;
  121. HANDLE m_hArrayEvent[SCAN_EVENT_COUNT];
  122. HANDLE m_hToggleEvent; //辅助线程退出通知事件
  123. HANDLE m_hFPDScanThread; //辅助线程
  124. HANDLE m_hFPDStatusThread;//扫描探测器温度、电量、wifi
  125. bool m_bExit;//退出辅助线程和查询探测器状态线程
  126. HANDLE m_hReconnectThread; //重连线程
  127. //辅助线程
  128. static unsigned __stdcall onFPDScanThread(PVOID pvoid);
  129. //查询温度、电量、wifi线程
  130. static unsigned __stdcall onFPDStatusThread(PVOID pvoid);
  131. //重连线程断线后开启
  132. static unsigned __stdcall onReconnectThread(PVOID pvoid);
  133. void InitSdkInterface();
  134. bool LoadDll(string strWorkPath);
  135. bool OpenDetector();
  136. bool InitDetector();
  137. int ShowDetectorInfo();
  138. bool WaitRespond(int nTimeOut = 65000, const char* szAction = "");
  139. void StopWaiting(const char* szAction = "");
  140. bool TestError(int nRet, const char* szFuncName = "Func", bool bShowTrue = true);
  141. void OnProcessImg();
  142. void StartDarkCalibration();
  143. void StartGainCalibration();
  144. void InitFPD();
  145. void SaveRawFunc(WORD* pInImg, int nImgWidth, int nImgHeight, string strFrameID = "");
  146. bool GetEffectiveImage(WORD* pOutImg, WORD* pInImg, int nInWidth);
  147. bool IsConnected(string strIP);
  148. void Initialize(StAerosdkLogInfo* sLogInfo, char* strSdkPath, char* strAeroSDKini, char* strPanelLog, char* strXGBOXLog, char* strECBLog);
  149. void ConfFeedback(int nEventID, int nDetectorID = -1, const char* pszMsg = "", int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  150. void InfoFeedback(int nEventID, int nDetectorID = -1, int nParam1 = 0, float fParam2 = 0, const char* pszMsg = "", int nPtrParamLen = 0, void* pParam = NULL);
  151. void StatusFeedback(int nEventID, int nParam1 = 0, const char* pszMsg = "", int nDetectorID = -1, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  152. void DataFeedback(int nEventID, void* pParam = NULL, int nParam1 = 0, float fParam2 = 0, const char* pszMsg = "", int nPtrParamLen = 0, int nDetectorID = -1);
  153. void WarnFeedback(int nEventID, const char* pszMsg = "", int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL, int nDetectorID = -1);
  154. void ErrorFeedback(int nEventID, const char* pszMsg = "", int nDetectorID = -1, int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  155. KonicaAerosdkOpen API_AerosdkOpen;//
  156. KonicaAerosdkClose API_AerosdkClose;//
  157. KonicaAerosdkOpenPanel API_AerosdkOpenPanel;//
  158. KonicaAerosdkClosePanel API_AerosdkClosePanel;//
  159. KonicaAerosdkChangePriorityConnecttionOfPanel API_AerosdkChangePriorityConnecttionOfPanel;//文档中没有
  160. KonicaAerosdkOpenXgbox API_AerosdkOpenXgbox;//
  161. KonicaAerosdkCloseXgbox API_AerosdkCloseXgbox;//
  162. KonicaAerosdkStartExposureSequence API_AerosdkStartExposureSequence;//不建议使用
  163. KonicaAerosdkStartExposureSequenceIt API_AerosdkStartExposureSequenceIt;//建议使用
  164. KonicaAerosdkSetReadyBusy API_AerosdkSetReadyBusy;//硬同步使用
  165. KonicaAerosdkCancelExposureSequence API_AerosdkCancelExposureSequence;//
  166. KonicaAerosdkCheckImage API_AerosdkCheckImage;//不建议使用
  167. KonicaAerosdkStartImageResendingSequence API_AerosdkStartImageResendingSequence;
  168. KonicaAerosdkStartImageResendingSequenceWithMode API_AerosdkStartImageResendingSequenceWithMode;
  169. KonicaAerosdkStartImageDeleteSequence API_AerosdkStartImageDeleteSequence;
  170. KonicaAerosdkStartPanelUpdateSequence API_AerosdkStartPanelUpdateSequence;
  171. KonicaAerosdkStartXgboxUpdateSequence API_AerosdkStartXgboxUpdateSequence;
  172. KonicaAerosdkGetImageSize API_AerosdkGetImageSize;//不建议使用
  173. KonicaAerosdkGetPreviewImage API_AerosdkGetPreviewImage;//
  174. KonicaAerosdkGetImage API_AerosdkGetImage;//
  175. KonicaAerosdkSetWirelessMode API_AerosdkSetWirelessMode;
  176. KonicaAerosdkChangePowerMode API_AerosdkChangePowerMode;//切换待机状态和睡眠状态(低功耗)
  177. KonicaAerosdkGetPanelConnectStatus API_AerosdkGetPanelConnectStatus;//基本不用
  178. KonicaAerosdkGetPanelStatusInfo API_AerosdkGetPanelStatusInfo;//
  179. KonicaAerosdkGetPanelBatteryInfo API_AerosdkGetPanelBatteryInfo;//
  180. KonicaAerosdkGetPanelSignalInfo API_AerosdkGetPanelSignalInfo;//
  181. KonicaAerosdkGetPanelSettingInfo API_AerosdkGetPanelSettingInfo;//
  182. KonicaAerosdkGetPanelVersionInfo API_AerosdkGetPanelVersionInfo;//
  183. KonicaAerosdkGetPanelConservationInfo API_AerosdkGetPanelConservationInfo;//
  184. KonicaAerosdkGetCradleConservationInfo API_AerosdkGetCradleConservationInfo;//
  185. KonicaAerosdkGetPanelLog API_AerosdkGetPanelLog;
  186. KonicaAerosdkGetPanelLastError API_AerosdkGetPanelLastError;//
  187. KonicaAerosdkGetXgboxConnectStatus API_AerosdkGetXgboxConnectStatus;
  188. KonicaAerosdkGetXgboxStatusInfo API_AerosdkGetXgboxStatusInfo;
  189. KonicaAerosdkGetXgboxSettingInfo API_AerosdkGetXgboxSettingInfo;
  190. KonicaAerosdkGetXgboxVersionInfo API_AerosdkGetXgboxVersionInfo;
  191. KonicaAerosdkGetXgboxConservationInfo API_AerosdkGetXgboxConservationInfo;
  192. KonicaAerosdkGetXgboxLog API_AerosdkGetXgboxLog;
  193. KonicaAerosdkGetXgboxLastError API_AerosdkGetXgboxLastError;//
  194. KonicaAerosdkStartGainCalibrationSequence API_AerosdkStartGainCalibrationSequence;
  195. KonicaAerosdkCancelGainCalibrationSequence API_AerosdkCancelGainCalibrationSequence;
  196. KonicaAerosdkStartDarkCalibrationSequence API_AerosdkStartDarkCalibrationSequence;
  197. KonicaAerosdkGetCalibSignalPercent API_AerosdkGetCalibSignalPercent;
  198. KonicaAerosdkSetPanelReady API_AerosdkSetPanelReady;//AeroSync 时使用
  199. KonicaAerosdkSetSsidForSharedPanel API_AerosdkSetSsidForSharedPanel;
  200. KonicaAerosdkSetPanelSensitivity API_AerosdkSetPanelSensitivity;
  201. KonicaAerosdkGetPanelGenarationInfo API_AerosdkGetPanelGenarationInfo;
  202. KonicaAerosdkGetPanelResolutionInfo API_AerosdkGetPanelResolutionInfo;//
  203. KonicaAerosdkGetImageSizeEx API_AerosdkGetImageSizeEx;//建议使用
  204. KonicaAerosdkCheckImageEx API_AerosdkCheckImageEx;//建议使用 检查探测器内部是否有剩余图像 图像重传逻辑时使用
  205. KonicaAerosdkSetPanelResolution API_AerosdkSetPanelResolution;//
  206. KonicaAerosdkChangeMovingGridSetting API_AerosdkChangeMovingGridSetting;
  207. KonicaAerosdkGetPanelAlignmentInfo API_AerosdkGetPanelAlignmentInfo;//面板对齐信息
  208. };