#pragma once #include "CCOS.Dev.FPDDeviceMould.hpp" #include "OemAcq.h" #include "OemSync.h" #include "OemCtrl.h" #include "OemCalib.h" #include "DetectorConfiguration.h" #include "FPDErrorWarningProcess.h" #ifdef CCOSFPD_EXPORTS #define CCOSDEVDR_CLASS __declspec(dllexport) #else #define CCOSDEVDR_CLASS __declspec(dllimport) #endif namespace CCOS::Dev::Detail::Detector { class CCOSDEVDR_CLASS KonicaDriver : public FPDDriverMould { FPDDeviceKonica* pObjDev; ResDataObject m_DeviceConfig; ResDataObject m_ConfigAll; //存储当前的配置,用于修改配置时写回文件 ResDataObject m_Configurations; //存储当前配置中“CONFIGURATION”节点的内容 std::unique_ptr m_pAttribute; std::unique_ptr m_pDescription; public: KonicaDriver(); virtual ~KonicaDriver(); bool m_bDriverConnect; //driver是否连接的标记位 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 CCOSDEVDR_CLASS FPDDeviceKonica : 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; std::string m_strWorkPath; int m_nFullImageHeight; int m_nFullImageWidth; int m_nPreviewEnable; int m_nPreviewImageWidth; int m_nPreviewImageHeight; int m_nImgBits; int m_nAngle; int m_nPixelSpacing; int m_nSensitivity; WORD* m_pFullImgBuffer; WORD* m_pPreviewImgBuffer; AppStatus m_eAppStatus;//记录软件状态 bool m_bDeviceConnect; SYSTEMTIME m_stSystemTime; //记录图像生成时间(软同步使用开窗时间),用于填写dicom SYNC_MODE m_eSyncMode; float m_fFactorEXI2UGY; //探测器EXI -> UGY 转换系数 ResDataObject m_CalibDoseList; //ZSKK校正时加载校正剂量配置 int m_nTargetCalibExi;// 校正时图像需要达到的EXI值 康众1500cwII增益校正 7500-12500 EXI范围 int m_nCalibTotalExposureNum; //校正曝光总次数 int m_nCalibCurrentCalibrationRound; //校正曝光第几轮 int m_nCalibCurrentExposureIndex; //当前轮点击Accept 曝光第几次 int m_nCalibCurrentExposureNum; //点击Accept 接受曝光的总次数 bool m_bEnterAcqStatus;//探测器是否真正进入了采集状态,与通知工作流事件触发的状态不同,这个是真正的状态 CCOS_CALIBRATION_TYPE m_CalibType; public: DeviceIndexStruct m_stDeviceConfig; public: FPDDeviceKonica(std::shared_ptr center, std::string strConfigPath); ~FPDDeviceKonica(); virtual std::string GetGUID() const override; virtual bool Prepare() override; bool CreateDevice(); void Register(); RET_STATUS Connect(); RET_STATUS EnterExam(int nExamMode); RET_STATUS SetAcqMode(string strAcqMode); 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(std::string& strDose); RET_STATUS SetRequestedDose(std::string strDose); RET_STATUS StartCalibration(); RET_STATUS StopCalibration(); RET_STATUS GetCalibrationStep(int nDetectorID, string& strCalibrationStepInfo); RET_STATUS AcceptCalibration(); RET_STATUS RejectCalibration(); RET_STATUS SaveCalibrationFile(bool bSaveFlag); RET_STATUS ActiveSyncMode(int nSyncMode); RET_STATUS ActiveDetector(bool bActive); RET_STATUS UpdateCalibMode(CCOS_CALIBRATION_MODE eCalibMode); RET_STATUS UpdateNotifyStatusTimePeriod(int nTime); RET_STATUS UpdateReconnectTimePeriod(int nTime); RET_STATUS SetResolution(int nResolution); RET_STATUS UpdateLastCalibrationDate(std::string in); RET_STATUS UpdateCalibrationFileExpireTime(std::string in); RET_STATUS UpdateCalibrationFileExpirationReminder(std::string in); RET_STATUS GetDetectorInfo(string& strInfo); void AbortCalibration(); bool CompleteCalibration(); void OnFPDCallback(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam); bool Support_DarkCalib(); bool Support_XrayCalib(); bool GetLogicMode(string& strAcqMode, int& nLogicMode); string MakeImageHead(IMAGE_VIEW_TYPE Type); 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); }; }