#pragma once #include "CCOS.Dev.FPDDeviceMould.hpp" #include "OemAcq.h" #include "OemSync.h" #include "OemCtrl.h" #include "OemCalib.h" #include "DetectorConfiguration.h" #pragma warning(disable:26812) //枚举类型“ENUM_PANEL_EVENT_STATE”未设定范围。相比于 "enum",首选 "enum class" (Enum.3) #pragma warning(disable:26451) //算术溢出 : 使用 4 字节值上的运算符 * ,然后将结果转换到 8 字节值。在调用运算符 * 之前将值强制转换为宽类型可避免溢出(io.2)。 #pragma warning(disable:6258) //允许线程清理 #pragma warning(disable:28159) //无需考虑使用“GetTickCount64”而不是“GetTickCount”。 #ifdef CCOSDEVFPD_EXPORTS #define CCOSDEVFPD_API __declspec(dllexport) #else #define CCOSDEVFPD_API __declspec(dllimport) #endif class PZMedicalCtrl; namespace CCOS::Dev::Detail::Detector { class CCOSDEVFPD_API PZMedicalDriver : public FPDDriverMould { FPDDevicePZMedical* pObjDev; bool m_bConnect; //driver是否连接的标记位 //*** 配置文件相关成员变量begin *** ResDataObject m_DeviceConfig; ResDataObject m_ConfigAll; //存储当前的配置,用于修改配置时写回文件 ResDataObject m_Configurations; //存储当前配置中“CONFIGURATION”节点的内容 std::unique_ptr m_pAttribute; std::unique_ptr m_pDescription; //*** 配置文件相关成员变量end *** public: PZMedicalDriver(); virtual ~PZMedicalDriver(); virtual void Prepare() override; virtual bool Connect() override; virtual void Disconnect() override; virtual bool isConnected() const override; virtual auto CreateDevice(int index)->std::unique_ptr override; virtual std::string DriverProbe() override; virtual std::string GetResource() override; virtual std::string DeviceProbe() override; virtual bool GetDeviceConfig(std::string& Cfg) override; virtual bool SetDeviceConfig(std::string Cfg) override; bool SaveConfigFile(bool bSendNotify); bool GetDeviceConfigValue(ResDataObject config, const char* pInnerKey, int nPathID, string& strValue); bool SetDeviceConfigValue(ResDataObject config, const char* pInnerKey, int nPathID, const char* szValue); }; namespace nsDetail = CCOS::Dev::Detail; class CCOSDEVFPD_API FPDDevicePZMedical : public FPDDeviceMould { using super = IODeviceDetail; //IODeviceDetail类的别名声明 std::unique_ptr m_DetectorCtrlUnit; std::unique_ptr m_AcqUnit; std::unique_ptr m_SyncUnit; std::unique_ptr m_CalibUnit; std::unique_ptr m_Temperature; std::unique_ptr m_Battery; std::unique_ptr m_Wifi; std::unique_ptr m_DetectorConfiguration; //std::unique_ptr m_WarnAndError; PZMedicalCtrl* m_pDetector; DeviceIndexStruct m_stDeviceConfig; std::string m_strWorkPath; //进程路径 //int m_nImageHeight; //int m_nImageWidth; /*int m_nCropLeft; int m_nCropRight; int m_nCropTop; int m_nCropBottom; int m_nRawImgHeight; int m_nRawImgWidth;*/ //int m_nImgBits; //int m_nAngle; //int m_nPixelSpacing; //int m_nSensitivity; //float m_fDose; WORD* m_pImgBuffer; APP_STATUS m_eAppStatus; bool m_bConnect; //设备是否连接 SYSTEMTIME m_stImgCreateTime; //记录图像生成时间(软同步使用开窗时间),用于填写dicom SYNC_MODE m_eSyncMode; //同步模式 float m_fFactorEXI2UGY; //探测器EXI -> UGY 转换系数 int m_nCurrentMode; //已选择的模式 float m_fCurrentDetectorTemperature; //当前探测器的温度 DetModeInfo m_stModeInfo; DetCalibInfo m_stCalibInfo; float m_fCurrentPPS; //上层设置的帧率 public: FPDDevicePZMedical(std::shared_ptr center, std::string strConfigPath); ~FPDDevicePZMedical(); virtual std::string GetGUID() const override; virtual bool Prepare() override; bool CreateDevice(); void Register(); void OnFPDCallback(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam); RET_STATUS Connect(); RET_STATUS EnterExam(int nExamMode); RET_STATUS SetAcqMode(std::string strAcqMode); //RET_STATUS SetSyncMode(SYNC_MODE eSyncMode, HARDWARE_TRIGGER_MODE eTriggerMode); //RET_STATUS SetXwindow(float fXwindowSize); RET_STATUS ActiveDetector(bool bActive); RET_STATUS GetSyncMode(SYNC_MODE &eSyncMode); RET_STATUS PrepareAcquisition(); RET_STATUS StartAcquisition(string in); RET_STATUS StopAcquisition(); RET_STATUS ActiveCalibration(CCOS_CALIBRATION_TYPE eType); RET_STATUS PrepareCalibration(); RET_STATUS GetRequestedDose(string& strDose); RET_STATUS StartCalibration(); RET_STATUS StopCalibration(); RET_STATUS SetFluPPS(float fFluPPS); RET_STATUS GetFluPPS(float& fFluPPS); bool Support_DarkCalib(); bool Support_XrayCalib(); bool Support_HaveImageCalib(); RET_STATUS GetCalibrationStep(int nDetectorID, std::string& strCalibrationStepInfo); RET_STATUS AcceptCalibration(); RET_STATUS RejectCalibration(); RET_STATUS SaveCalibrationFile(bool bSaveFlag); RET_STATUS StartOffset(bool isAll); RET_STATUS AbortOffset(); RET_STATUS UpdateModeInRunning(std::vector& vAcqModeList); private: void SendTemperatureValue(float fValue); void SendWifiValue(int nValue); void SendBatteryValue(int nValue); bool LoadConfig(); void OnEventProcessConf(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam); void OnEventProcessInfo(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam); void OnEventProcessStatus(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam); void OnEventProcessData(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam); void OnEventProcessError(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam); void OnEventProcessWarning(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam); protected: void RegisterCtrl(nsDetail::Dispatch* Dispatch); void RegisterAcq(nsDetail::Dispatch* Dispatch); void RegisterSync(nsDetail::Dispatch* Dispatch); void RegisterCalib(nsDetail::Dispatch* Dispatch); void RegisterOthers(nsDetail::Dispatch* Dispatch); }; } //end namespace CCOS::Dev::Detail::Detector