UltrasonicProbeCtrl.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. #pragma once
  2. #include "ResDataObject.h"
  3. #include "CCOS.Dev.FPD.UltrasonicProbeDR.h"
  4. #include "UltrasonicInterface.h"
  5. //#include "CaptureWriterInterface.h"
  6. //#include "DataElementInterface.h"
  7. #include "ramzed_sdk.h"
  8. enum eDetectorStatus
  9. {
  10. DetectorStatus_NotIni,
  11. DetectorStatus_NotConn,
  12. DetectorStatus_Sleep,
  13. DetectorStatus_Standby,
  14. DetectorStatus_Work,
  15. DetectorStatus_Acquire,
  16. DetectorStatus_Offset,
  17. DetectorStatus_XrayCalibration,
  18. };
  19. class UltrasonicProbe
  20. {
  21. //探测器信息
  22. struct CPanelStatus
  23. {
  24. bool bLostTemplate; //是否缺少校正文件
  25. bool bPanelInReady; //探测器在ready状态
  26. bool bConnectStatus; //是否连接
  27. SYNC_MODE eSyncMode; //同步模式
  28. bool bConnErrorInInit; //初始化阶段的断线错误
  29. bool bInitError; //初始化错误,一般不可恢复
  30. string strPanelType; //探测器类型,AddDPC时赋值
  31. string strPanelSN; //探测器序列号,连接成功后获取信息时被赋值
  32. bool bIsPortable;
  33. bool bCharging;
  34. bool bStatusPolling;
  35. bool bDC_AED;
  36. bool bDarkCalibDone; //offset刷新结束
  37. bool bAEDDarkCalibDone;
  38. bool bLTEDarkCalibDone; //长曝光offset刷新结束
  39. string strModuleIP; //探测器IP地址,attach或收到init回调时赋值
  40. bool bBatteryTooLow;
  41. bool bImagePending;
  42. bool bIsLoadRef; //是否加载了校正文件,加载过了不用再次加载
  43. int nBattery; //电池电量
  44. bool bInitOK; //初始化过程探测器连接完毕,用于重连判断
  45. bool bNeedUpdateFW; //是否需要固件升级的标记位
  46. bool bSelftested; //Selftest执行完毕
  47. int nTotalShockNumber; //探测器的shocksenseor总数
  48. int nFWStatus; //探测器固件状态
  49. string strPartNumber; //产品编号,连接成功后获取信息时被赋值
  50. ResDataObject objPanelConfig;
  51. bool bHaveAutonumousMode; //是否支持离线采集
  52. bool bAutonumousMode; //true: 离线模式;false:在线模式
  53. CPanelStatus()
  54. {
  55. bLostTemplate = false;
  56. bPanelInReady = false;
  57. bConnectStatus = false;
  58. eSyncMode = SYNC_SOFTWARE; //默认使用软同步作为缺省值
  59. bConnErrorInInit = false;
  60. bInitError = false;
  61. strPanelType = "";
  62. strPanelSN = "";
  63. bIsPortable = false;
  64. bCharging = false;
  65. bStatusPolling = false;
  66. bDC_AED = false;
  67. bDarkCalibDone = false;
  68. bAEDDarkCalibDone = false;
  69. bLTEDarkCalibDone = false;
  70. strModuleIP = "";
  71. bBatteryTooLow = false;
  72. bImagePending = false;
  73. bIsLoadRef = false;
  74. nBattery = 0;
  75. bInitOK = false;
  76. bNeedUpdateFW = false;
  77. bSelftested = false;
  78. nTotalShockNumber = -1;
  79. nFWStatus = -1;
  80. strPartNumber = "";
  81. bHaveAutonumousMode = false;
  82. bAutonumousMode = false;
  83. }
  84. };
  85. public:
  86. UltrasonicProbe();
  87. ~UltrasonicProbe();
  88. bool DriverEntry(FPDDeviceUltrasonicProbe* pDrvDPC, ResDataObject& Configuration);
  89. bool Connect(FPDDeviceUltrasonicProbe* pDrvDPC, const char* szWorkPath);
  90. bool Disconnect();
  91. bool PrepareAcquisition(FPDDeviceUltrasonicProbe* pDrvDPC);
  92. bool StartAcquisition(FPDDeviceUltrasonicProbe* pDrvDPC);
  93. bool StopAcquisition(FPDDeviceUltrasonicProbe* pDrvDPC);
  94. bool ResetDetector(FPDDeviceUltrasonicProbe* pDrvDPC);
  95. bool SelectExamMode(int nLogicMode, FPDDeviceUltrasonicProbe* pDrvDPC);
  96. //bool ActiveCalibration(FPDDeviceUltrasonicProbe* pDrvDPC, CCOS_CALIBRATION_TYPE eType);
  97. //bool PrepareCalibration(FPDDeviceUltrasonicProbe* pDrvDPC);
  98. //bool StartCalibration(FPDDeviceUltrasonicProbe* pDrvDPC);
  99. //bool StopCalibration(FPDDeviceUltrasonicProbe* pDrvDPC);
  100. //bool SetReferenceNum(int nReferenceNum);
  101. //bool AcceptCalibration();
  102. //bool RejectCalibration();
  103. //bool SaveCalibrationFile();
  104. //bool GetCalibrationStep(int nCalibCurrentCalibrationRound, int nCalibrationRounds, int nCalibCurrentExposureIndex, int nExposureNumCurrentRound);
  105. //bool CompleteCalibration(FPDDeviceUltrasonicProbe* pDrvDPC);
  106. //bool GetCalibrationTime(int nDetectorID = -1);
  107. //RET_STATUS AbortCalibration(FPDDeviceUltrasonicProbe* pDrvDPC);
  108. //CCOS_CALIBRATION_TYPE GetUltrasonicProbeCtrlCalibType();
  109. DPC_State GetPZDPCState();
  110. //超声相关
  111. RET_STATUS SetFreeze(int nFreeze);
  112. RET_STATUS SwitchProbe(int nProbeType);//切换探头
  113. RET_STATUS SwitchProbeMode(int nProbeMode);//切换模式
  114. RET_STATUS SetBGain(int nGain);
  115. RET_STATUS SetBDepth(int nDepth);
  116. RET_STATUS SetBFrequency(float fFrequency);
  117. RET_STATUS SetBFocus(int nFocus);
  118. RET_STATUS SetBHarmonic(int nHarmonic);
  119. RET_STATUS SetBPower(int nPower);
  120. RET_STATUS SetBDynamicRange(int nRange);
  121. RET_STATUS GetBDepth(int& nDepth, float& fDepthCm);
  122. RET_STATUS GetBFrequency(float& fFrequency);
  123. RET_STATUS GetBGain(int& nGain);
  124. RET_STATUS GetBFocus(int& nFocus, float& fFocusCm);
  125. RET_STATUS GetBDynamicRange(int& nRange);
  126. RET_STATUS SetCRoi(int x1, int x2, int y1, int y2);
  127. RET_STATUS SetCGain(int nGain);
  128. RET_STATUS SetPostLevel(int nLevel);
  129. RET_STATUS SetMirror(int nMirror);
  130. RET_STATUS SetCFrequency(float fFrequency);
  131. RET_STATUS SetCSpeedWallFilter(int nSpeedWallFilter);
  132. RET_STATUS SetCRangeWallFilter(int nRangeWallFilter);
  133. RET_STATUS SetCPersistence(int nPersistence);
  134. RET_STATUS SetCLinearAngle(int nAngle);
  135. RET_STATUS SetCPrf(int nPrf);
  136. RET_STATUS GetCFrequency(float& fFrequency);
  137. RET_STATUS GetCGain(int& nGain);
  138. RET_STATUS GetCPrf(int& nPrf);
  139. RET_STATUS GetCLinearAngle(int& nAngle);
  140. //调节图像亮暗的
  141. RET_STATUS SetTgc1(int nTgc);
  142. RET_STATUS SetTgc2(int nTgc);
  143. RET_STATUS SetTgc3(int nTgc);
  144. RET_STATUS SetTgc4(int nTgc);
  145. RET_STATUS SetTgc5(int nTgc);
  146. RET_STATUS SetTgc6(int nTgc);
  147. RET_STATUS SetTgc7(int nTgc);
  148. RET_STATUS SetTgc8(int nTgc);
  149. private:
  150. map<FPDDeviceUltrasonicProbe*, int>* m_pDPC2PanelID;
  151. map<int, FPDDeviceUltrasonicProbe*>* m_pPanelID2DPC;
  152. int m_nPanelCount; //探测器数量
  153. std::string m_strWorkPath; //保存工作路径,用于加载SDK和配置
  154. int m_nCurrentPanelID;
  155. ResDataObject m_objFPDConfig; //保存DPC模块下发的配置
  156. CPanelStatus* m_pStPanelStatus[3];//探测器信息 内部还有自己的FPDConfig 注意赋值(为了以后连接多个板子用)
  157. DPC_State m_ePZDPCstate; //ctrl模块当前处于什么状态
  158. int m_nRawImgWidth; //SDK反馈的图像宽
  159. int m_nRawImgHeight; //SDK反馈的图像高
  160. int m_nLeftOffset;//左侧裁剪长度
  161. int m_nTopOffset;//上边裁剪长度
  162. int m_nRightOffset;//右侧裁剪长度
  163. int m_nBottomOffset;//下边裁剪长度
  164. int m_nImageWidth;//裁剪后的图像宽
  165. int m_nImageHeight;//裁剪后的图像高
  166. unsigned char* m_pRawImgBuffer24;//24位图buffer
  167. unsigned char* m_pRawImgBuffer32; //32位图buffer
  168. unsigned char* m_pImgBuffer; //处理后的图像buffer
  169. int m_nImgBits;
  170. int m_nPixelPitch;
  171. int m_nSaveRaw;
  172. int m_nFrameID;
  173. //bool m_bFirstInIDLE; //true 第一次收到探测器IDLE状态,主要用于校正流程
  174. //CCOS_CALIBRATION_TYPE m_eType; // 记录当前校正类型
  175. //int m_nOffsetImg; // 校正时暗场图数量
  176. //int m_nGainImg; // 校正时亮场图数量
  177. //bool m_bCalibrationOver; // true 当前阶段校正完成;false 当前阶段校正未完成
  178. //int m_nCalibrationRounds;//校正轮数
  179. bool m_bWired; //是否为有线连接
  180. eDetectorStatus m_eStatus; // 探测器状态
  181. //CCOS_CALIBRATION_MODE m_nCalibrationMode;//校正模式
  182. //int m_nCaliFailedCount; //记录增益校正失败次数,超过一定次数自动停止校正
  183. string m_strPanelType; //探测器类型。命名方式截取自config_Pixrad路径下的ini文件,以Detector3543EZe.ini为例,m_strPanelType=3543EZe
  184. bool m_bLoadedSDK; //true 已经加载了SDK,避免重复调用,主要用于ReInit流程
  185. bool m_bInitializedSDK; //true 已经init了SDK,避免重复调用,主要用于ReInit流程
  186. bool m_bConnectWaiting;//正在连接中
  187. int m_nCurrentMode; //记录探测器当前application mode
  188. ResDataObject m_ModeConfig;
  189. //int m_nCalibCurrentCalibrationRound;
  190. //int m_nCalibCurrentExposureIndex;
  191. //int m_nExposureNumCurrentRound;
  192. //bool m_bConfirmCaliRst; //true: 接受当前增益校正曝光结果
  193. //bool m_bAutoContinueCal; //true: SDK自动进行下一次增益开窗流程(一般是在当前增益合格);false: 手动触发SDK进行下一次增益
  194. //bool m_bAutonumousMode;
  195. //int m_nGainExposureNum;//gain校正曝光的总次数
  196. bool m_bOnlyHaveFpd;//当前环境是否只有探测器一个真实设备并且处于AED同步模式,其他设备是demo的 1-是 0-否 默认否
  197. ramzed_sdk* m_pRzsdk;//通过SDK的instance获取的类指针
  198. //test
  199. /*CCOS_Kernel::CCaptureWriter* m_pCaptureWriter;
  200. CCOS_DataElement::CDataElement* m_pMatrix;
  201. CCOS_DataElement::CDataElementGroup* m_pSenderGroup;
  202. CCOS_DataElement::CDataMgr* m_pDataMgr;*/
  203. bool m_bFirstImage;
  204. HMODULE m_hSdkModule; //SDK module
  205. HANDLE m_hRespond;
  206. HANDLE m_hFPDScanThread;
  207. HANDLE m_hStopScanEvent;
  208. HANDLE m_hProcessImgEvent;
  209. HANDLE m_hXWinOnEvent;
  210. HANDLE m_hInitFPDEvent;
  211. HANDLE m_hReInitEvent;
  212. HANDLE m_hArrayEvent[5];
  213. bool LoadSDK();
  214. bool InitSDK();
  215. int ConnectDetector();
  216. BOOL OnProcessLink(unsigned char probe_type);
  217. BOOL OnProcessDown();
  218. static DWORD __stdcall onFPDScanThread(PVOID pvoid);
  219. void OnProcessImg(unsigned char* frame_msg);
  220. void OnProcessInitFPD();
  221. void OnReInitFPD();
  222. void StopThread();
  223. void SaveRawFunc(unsigned char* pInImg, DWORD nFrameSize);
  224. bool SaveRawImage(const char* pImgName, const WORD* pRawImg, int nWidth, int nHeight);
  225. bool TestError(int nRet, const char* szFuncName = "Func");
  226. bool WaitRespond(int nTimeOut = 65000, const char* szPosition = "");
  227. void StopWaiting(const char* szPosition = "");
  228. bool SetFPDTplPath();
  229. void NotifyXWindowOn();
  230. void NotifyXWindowOff();
  231. void GetConnectionMode();
  232. void SetPZDPCState(DPC_State ePZDPCstate);
  233. void NotifyDetectorInfo();
  234. int CropImageMargin(LPVOID pDstData, int& nDstWidth, int& nDstHeight,
  235. LPVOID pScrData, int nSrcWidth, int nSrcHeight, int nBits,
  236. int nLeftMargin, int nTopMargin, int nRightMargin, int nBottomMargin);
  237. static void FuncLinkUpCallBack(unsigned char probe_type);
  238. static void FuncLinkDownCallBack(unsigned char probe_type);
  239. static void FuncImageCallBack(unsigned char* frame_msg);
  240. void ConfFeedback(int nEventID, int nDetectorID = -1, const char* pszMsg = "", int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  241. void InfoFeedback(int nEventID, int nDetectorID = -1, int nParam1 = 0, float fParam2 = 0, const char* pszMsg = "", int nPtrParamLen = 0, void* pParam = NULL);
  242. void StatusFeedback(int nEventID, int nParam1 = 0, const char* pszMsg = "", int nDetectorID = -1, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  243. void DataFeedback(int nEventID, void* pParam = NULL, int nParam1 = 0, float fParam2 = 0, const char* pszMsg = "", int nPtrParamLen = 0, int nDetectorID = -1);
  244. void WarnFeedback(int nEventID, const char* pszMsg = "", int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL, int nDetectorID = -1);
  245. void ErrorFeedback(int nEventID, const char* pszMsg = "", int nDetectorID = -1, int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
  246. };