#pragma once #include "CCOS.Dev.FPDDeviceMould.hpp" #include "OEMAcq.h" #include "OEMSync.h" #include "OEMCalib.h" #include "OEMCtrl.h" //#include "DetectorCtrlDefinition.h" #include "DetectorConfiguration.h" #ifdef CCOSDEVFPDCARERAYRF_EXPORTS #define CCOSDEVFPDCARERAYRF_API __declspec(dllexport) #else #define CCOSDEVFPDCARERAYRF_API __declspec(dllimport) #endif namespace CCOS::Dev::Detail::Detector { class CCOSDEVFPDCARERAYRF_API TeledyneDalsaDriver : public FPDDriverMould { FPDDeviceTeledyneDalsa* pObjDev; bool m_bConnect; //driver是否连接的标记位 ResDataObject m_DeviceConfig; ResDataObject m_ConfigAll; //存储当前的配置,用于修改配置时写回文件 ResDataObject m_Configurations; //存储当前配置中“CONFIGURATION”节点的内容 std::unique_ptr m_pAttribute; std::unique_ptr m_pDescription; public: TeledyneDalsaDriver(); virtual ~TeledyneDalsaDriver(); 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; bool GetDeviceConfig(std::string& Cfg); bool SetDeviceConfig(std::string Cfg); 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 CCOSDEVFPDCARERAYRF_API FPDDeviceTeledyneDalsa : 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; PVOID m_pDetector; ResDataObject m_ACQMODElist; 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; ResDataObject m_CalibDoseList; public: FPDDeviceTeledyneDalsa(std::shared_ptr center, std::string strConfigPath); ~FPDDeviceTeledyneDalsa(); virtual std::string GetGUID() const override; virtual bool Prepare() override; bool CreateDevice(); void Register(); RET_STATUS Connect(); RET_STATUS SetAcqMode(int nMode); RET_STATUS EnterExam(int nExamMode); //RET_STATUS SetSyncMode(SYNC_MODE eSyncMode, HARDWARE_TRIGGER_MODE eTriggerMode); //RET_STATUS SetXwindow(float fXwindowSize); RET_STATUS PrepareAcquisition(); RET_STATUS StartAcquisition(); RET_STATUS StopAcquisition(); RET_STATUS SetXrayOnNum(); RET_STATUS SetExposureTimes(int nTimes); RET_STATUS ActiveCalibration(CCOS_CALIBRATION_TYPE eType); RET_STATUS PrepareCalibration(); RET_STATUS GetRequestedDose(std::string& strDose); RET_STATUS StartCalibration(); RET_STATUS StopCalibration(); //RET_STATUS SetCorrectionType(CCOS_CORRECTION_TYPE eType); bool Support_DarkCalib(); bool Support_XrayCalib(); void OnFPDCallback(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam); private: 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); }; } //end namespace CCOS::Dev::Detail::Detector