CCOS.Dev.FPD.Demo.h 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. #define CCOSDEVFPDDEMO_API
  2. #define CCOSDEVFPDDEMO_C_API extern "C"
  3. #include <time.h>
  4. #include <sys/time.h>
  5. #include "CcosLock.h"
  6. #include "CCOS.Dev.FPDDeviceMould.hpp"
  7. #include "TemperatureMould.hpp"
  8. #include "OEM.Acq.h"
  9. #include "OEM.Sync.h"
  10. #include "OEM.Calib.h"
  11. #include "OEM.DetectorCtrl.h"
  12. #include "DetectorConfiguration.h"
  13. #include "FPDCtrlDefinition.h"
  14. #include "SeqImages.h"
  15. //#include "FPDErrorWarningProcess.h"
  16. namespace CCOS::Dev::Detail::Detector
  17. {
  18. class CCOSDEVFPDDEMO_API FPDDemoDriver : public FPDDriverMould
  19. {
  20. using super = FPDDriverMould;
  21. FPDDemoDevice* dev;
  22. bool m_bConnect;
  23. ResDataObject m_ConfigAll;
  24. ResDataObject m_Configurations;
  25. ResDataObject m_DeviceConfig;
  26. std::unique_ptr <ResDataObject> m_pAttribute;
  27. std::unique_ptr <ResDataObject> m_pDescription;
  28. public:
  29. FPDDemoDriver();
  30. virtual ~FPDDemoDriver();
  31. virtual void Prepare() override;
  32. virtual bool Connect() override;
  33. virtual void Disconnect();
  34. virtual bool isConnected() const override;
  35. virtual auto CreateDevice(int index)->std::unique_ptr <IODevice> override;
  36. virtual std::string DriverProbe() override;
  37. virtual std::string GetResource() override;
  38. virtual std::string DeviceProbe() override;
  39. virtual bool GetDeviceConfig(std::string& Cfg) override;
  40. virtual bool SetDeviceConfig(std::string Cfg) override;
  41. bool SaveConfigFile(bool bSendNotify);
  42. bool GetDeviceConfigValue(ResDataObject config, const char* pInnerKey, int nPathID, string& strValue);
  43. bool SetDeviceConfigValue(ResDataObject& config, const char* pInnerKey, int nPathID, const char* szValue);
  44. };
  45. namespace nDetail = CCOS::Dev::Detail;
  46. class CCOSDEVFPDDEMO_API FPDDemoDevice : public FPDDeviceMould, public CcosLock
  47. {
  48. enum DEMOEXAMMODE
  49. {
  50. DEMOEXAMMODE_RAD,
  51. DEMOEXAMMODE_PREVIEW,
  52. DEMOEXAMMODE_AEC_PREVIEW,
  53. DEMOEXAMMODE_FLU,
  54. DEMOEXAMMODE_MAX,
  55. };
  56. enum Mode750MT
  57. {
  58. modePreview,
  59. modeFULL,
  60. } m_mode750MT;
  61. using super = IODeviceDetail;
  62. std::unique_ptr <AcqUnit> m_AcqUnit;
  63. std::unique_ptr <SyncUnit> m_SyncUnit;
  64. std::unique_ptr <CalibUnit> m_CalibUnit;
  65. std::unique_ptr <DetectorCtrlUnit> m_DetectorCtrlUnit;
  66. std::unique_ptr <DeviceTemperatureMould> m_Temperature;
  67. std::unique_ptr <DeviceBatteryMould> m_Battery;
  68. std::unique_ptr <DeviceWifiMould> m_Wifi;
  69. std::unique_ptr <DetectorConfiguration> m_DetectorConfiguration;
  70. //std::unique_ptr <FPDErrorWarning> m_WarnAndError;
  71. std::string m_strWorkPath;
  72. ResDataObject m_ACQMODElist;
  73. DeviceIndexStruct m_stDeviceConfig;
  74. APP_STATUS m_eAppStatus; //APP的当前状态,检查/校正/ATTACH界面
  75. GlobalTime m_stImgCreateTime;
  76. CCOS_CALIBRATION_TYPE m_nCalibrationType;
  77. SeqImages* m_pSeqList;//for multiple acq mode
  78. DETECTOR_WORK_STATUS m_eWorkStatus; //存储DPC的workstatus,该值自己判断
  79. std::vector<std::string> m_vDemoImagePath;//存储DemoImage的路径
  80. ResDataObject m_ConfigAll; //存储所有配置信息
  81. ResDataObject m_Configurations; //存储配置信息CONFIGURATION部分
  82. ResDataObject* m_pPreviewImageHead;
  83. ResDataObject* m_pFullImageHead;
  84. int m_nCurrentLogicMode;//当前采集模式
  85. bool m_bPreviewEnable;
  86. int m_nPreviewWidth;
  87. int m_nPreviewHeight;
  88. int m_nFullWidth;
  89. int m_nFullHeight;
  90. int m_nBits;
  91. int m_nPixelSpacing;
  92. int m_nFrameRate;
  93. int m_nTotalFrameNum;//m_pSeqList中图像的总张数
  94. int m_nSendImageCountInStitch;
  95. unsigned short* pRadImgBuffer;
  96. bool m_bDcmLoaded;
  97. bool m_bIsSendFluFrame;//透视模式发送图片的flag true-发送 false-停止发送
  98. bool m_bRadMode;//true:rad模式
  99. bool m_bFluMode;//true:透视模式
  100. int m_nSendImageInterval;//透视时发送图像的间隔
  101. bool m_bFor750MT;
  102. float m_fFluPPS;//透视时发送图片的帧率(以秒为单位,例 60/s)
  103. pthread_t m_hFPDScanThread; //辅助线程,执行开窗、关窗等通知
  104. std::shared_ptr<LinuxEvent> m_AcqReqEvt;
  105. std::shared_ptr<LinuxEvent> m_StopReqEvt;
  106. std::shared_ptr<LinuxEvent> m_Exit;
  107. std::shared_ptr<LinuxEvent> m_SendFluFrame;//透视模式发送图片
  108. std::shared_ptr<LinuxEvent> m_hToggleEvent;
  109. DWORD m_AcqLoopCount;//当前模式下的需要采集的张数
  110. DWORD m_AcquiredCount;//当前模式下的已采集张数
  111. DWORD m_CalibrationRoundCount;
  112. DWORD m_CalibrationExpCount;//当前校正模式下的已采集张数
  113. bool Acq_Proc();
  114. bool LoadConfig();
  115. RET_STATUS StopAcquisition_Inside();
  116. RET_STATUS PauseCalibration();
  117. static void* onFPDScanThread(PVOID pvoid);
  118. bool MakeFrame(DEMOEXAMMODE eExamMode = DEMOEXAMMODE_MAX);
  119. bool ResetFrame();
  120. void SendFluFrame();
  121. bool LoadRadDemo(const char* pPath, int nImgSizeX, int nImgSizeY, int nBits = 16, int nPixelSpacing = 310); //Bits Pixel全用假值
  122. bool LoadDCMDemo(const char* pPath);
  123. RET_STATUS AddFrameWithRawHead(IMAGE_VIEW_TYPE Type, unsigned short* pFrameBuff, DWORD FrameSize);
  124. string MakeImageHead(IMAGE_VIEW_TYPE Type);
  125. void NotifyWindowOnAndOff();
  126. bool GetLogicMode(string& strAcqMode, int & nLogicMode);
  127. protected:
  128. void RegisterCtrl(nDetail::Dispatch* Dispatch);
  129. void RegisterAcq(nDetail::Dispatch* Dispatch);
  130. void RegisterSync(nDetail::Dispatch* Dispatch);
  131. void RegisterCalib(nDetail::Dispatch* Dispatch);
  132. void RegisterOthers(nDetail::Dispatch* Dispatch);
  133. public:
  134. FPDDemoDevice(std::shared_ptr <IOEventCenter> center, string ConfigPath);
  135. ~FPDDemoDevice();
  136. void Register();
  137. virtual std::string GetGUID() const override;
  138. virtual bool Prepare() override;
  139. bool CreateDevice();
  140. RET_STATUS Connect();
  141. RET_STATUS DisConnect();
  142. RET_STATUS SetAcqMode(string strAcqMode);
  143. RET_STATUS SetSyncMode(SYNC_MODE nSyncMode, HARDWARE_TRIGGER_MODE TriggerMode);
  144. RET_STATUS SetXwindow(float XwindowSize);
  145. RET_STATUS PrepareAcquisition();
  146. RET_STATUS StartAcquisition(string in = "");
  147. RET_STATUS StopAcquisition();
  148. RET_STATUS SetSID(int nSID);
  149. RET_STATUS ActiveCalibration(CCOS_CALIBRATION_TYPE in);
  150. RET_STATUS PrepareCalibration();
  151. RET_STATUS GetRequestedDose(std::string& strout);
  152. RET_STATUS StartCalibration();
  153. RET_STATUS StopCalibration();
  154. RET_STATUS SetCorrectionType(CCOS_CORRECTION_TYPE in);
  155. RET_STATUS EnterExam(int nExamStatus);
  156. RET_STATUS GetDetectorInfo(string& strFDI);
  157. RET_STATUS SetFluPPS(float fFluPPS);
  158. RET_STATUS SetDemoImage(string& strPath1, string& strPath2, string& strPath3);
  159. RET_STATUS ResetError();
  160. RET_STATUS ActiveSyncMode(int nSyncMode);
  161. void SendInfoLog(string strLogKey, float fValue);
  162. void SendInfoLog(string strLogKey, int nValue);
  163. void SendInfoLog(string strLogKey, bool bRealSN);
  164. void SendInfoLog(string strLogKey, string strValue = "");
  165. void SendLog(string strLogKey, string strLogLevel, bool bRealSN, string strValue = "");
  166. };
  167. }