#pragma once #include "CCOS.Dev.FPDDeviceMould.hpp" #include "OemAcq.h" #include "OemSync.h" #include "OemCtrl.h" #include "OemCalib.h" #include "DetectorConfiguration.h" #define CCOSDEVFPDAPI __declspec(dllexport) namespace CCOS::Dev::Detail::Detector { class CCOSDEVFPDAPI UltrasonicProbeDriver : public FPDDriverMould { FPDDeviceUltrasonicProbe* m_pObjDev; bool m_bDriverConnect; //driver是否连接的标记位 ResDataObject m_DeviceConfig; ResDataObject m_ConfigAll; //存储当前的配置,用于修改配置时写回文件 ResDataObject m_Configurations; //存储当前配置中“CONFIGURATION”节点的内容 std::unique_ptr m_pAttribute; std::unique_ptr m_pDescription; public: UltrasonicProbeDriver(); virtual ~UltrasonicProbeDriver(); 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 CCOSDEVFPDAPI FPDDeviceUltrasonicProbe : 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_DetectorConfiguration; std::unique_ptr m_Temperature; std::unique_ptr m_Battery; std::unique_ptr m_Wifi; PVOID m_pDetectors; DeviceIndexStruct m_stDeviceConfig; std::string m_strWorkPath; int m_nHavePreview;//是否由预览图 int m_nPreImgWidth; //预览图图像的宽 int m_nPreImgHeight; //预览图图像的高 int m_nPreImageBits; //预览图图像位数 int m_nImageWidth;//向上推图的图像的高 int m_nImageHeight; //向上推图的图像的宽 int m_nImageBits;//向上推图的图像位数 int m_nPixelSpacing; int m_nSensitivity; APP_STATUS m_eAppStatus; bool m_bConnect; unsigned char* m_pwRawImageData; //保存Ctrl回调的图像内存 unsigned char* m_pwPreviewImg; //保存Ctrl回调的preview内存 SYSTEMTIME m_stImgCreateTime; //记录图像生成时间(软同步使用开窗时间),用于填写dicom SYNC_MODE m_eSyncMode; //HANDLE m_PauseCalibrationEvt; //HANDLE m_WaitCalibDoseEvt; //ResDataObject m_CalibDoseList; //加载平板自己的校正剂量配置 //int m_nCalibTotalExposureNum; //校正曝光总次数 //int m_nCalibCurrentCalibrationRound; //校正曝光第几轮 //int m_nCalibCurrentExposureIndex; //校正曝光第几次 //int m_nCalibCurrentExposureNum; //已校正曝光总次数 //int m_nXrayCalibNum; ResDataObject* m_pFullImageHead; ResDataObject* m_pPreviewImageHead; float m_fFactorEXI2UGY; //探测器EXI -> UGY 转换系数 bool m_bForceGridSuppress; bool m_bAttached; //float m_fDoseParam;// 校正用的曝光计量,发送到UI 且本地记录 int m_nBatteryCapacity; int m_nBatteryCharges; float m_fBatteryTemperature; //HANDLE m_UploadCalibMapOver; bool m_bResetDetector; //是否reset探测器,暂时不用 int m_nShockCounts; bool m_bOnlyHaveFpd;//当前系统是否只配置了一个真实的探测器并且处于AED同步模式,其他设备没有或者是demo的 1-是 0-否 默认否 public: FPDDeviceUltrasonicProbe(std::shared_ptr center, std::string strConfigPath); ~FPDDeviceUltrasonicProbe(); virtual std::string GetGUID() const override; virtual bool Prepare() override; bool CreateDevice(); void Register(); RET_STATUS Connect(); RET_STATUS EnterExam(int nExamMode); RET_STATUS ActiveDetector(int nDetectorIndex, bool bActive); RET_STATUS SetAcqMode(int nMode); 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 AcceptCalibration(); //RET_STATUS RejectCalibration(); //RET_STATUS SaveCalibrationFile(bool bSaveFlag); //RET_STATUS GetCalibrationStep(int nDetectorID, string& strCalibrationStepInfo); //RET_STATUS PauseCalibration(); RET_STATUS Reset();//重置探测器 RET_STATUS GetDetectorInfo(string& strFDI); RET_STATUS ResetConnect(); //bool CompleteCalibration(); //void AbortCalibration(); //超声相关 RET_STATUS SetFreeze(int nFreeze); RET_STATUS SwitchProbe(int nProbeType);//切换探头 RET_STATUS SwitchProbeMode(int nProbeMode);//切换模式 RET_STATUS SetBGain(int nGain); RET_STATUS SetBDepth(int nDepth); RET_STATUS SetBFrequency(float fFrequency); RET_STATUS SetBFocus(int nFocus); RET_STATUS SetBHarmonic(int nHarmonic); RET_STATUS SetBPower(int nPower); RET_STATUS SetBDynamicRange(int nRange); RET_STATUS GetBDepth(int& nDepth, float& fDepthCm); RET_STATUS GetBFrequency(float& fFrequency); RET_STATUS GetBGain(int& nGain); RET_STATUS GetBFocus(int& nFocus, float& fFocusCm); RET_STATUS GetBDynamicRange(int& nRange); RET_STATUS SetCRoi(int x1, int x2, int y1, int y2); RET_STATUS SetCGain(int nGain); RET_STATUS SetPostLevel(int nLevel); RET_STATUS SetMirror(int nMirror); RET_STATUS SetCFrequency(float fFrequency); RET_STATUS SetCSpeedWallFilter(int nSpeedWallFilter); RET_STATUS SetCRangeWallFilter(int nRangeWallFilter); RET_STATUS SetCPersistence(int nPersistence); RET_STATUS SetCLinearAngle(int nAngle); RET_STATUS SetCPrf(int nPrf); RET_STATUS GetCFrequency(float& fFrequency); RET_STATUS GetCGain(int& nGain); RET_STATUS GetCPrf(int& nPrf); RET_STATUS GetCLinearAngle(int& nAngle); //调节图像亮暗的 RET_STATUS SetTgc1(int nTgc); RET_STATUS SetTgc2(int nTgc); RET_STATUS SetTgc3(int nTgc); RET_STATUS SetTgc4(int nTgc); RET_STATUS SetTgc5(int nTgc); RET_STATUS SetTgc6(int nTgc); RET_STATUS SetTgc7(int nTgc); RET_STATUS SetTgc8(int nTgc); void OnFPDCallback(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam); void NotifyXWindowOn(); void NotifyXWindowOff(); bool GetOnlyHaveFpd();//获取环境中是否只有平板这一个真实设备的配置项 //int GetGainExposureNum();//获取gain校正曝光总次数 private: bool LoadConfig(); void SendTemperatureValue(float fValue); void SendWifiValue(int nValue); void SendBatteryValue(int nValue); string MakeImageHead(IMAGE_VIEW_TYPE Type); RET_STATUS AddFrameWithRawHead(IMAGE_VIEW_TYPE Type, unsigned char* pFrameBuff, DWORD FrameSize); bool OnProcessPreviewImage(unsigned char* pRawImage, DWORD FrameSize); bool OnProcessImage(unsigned char* pImage, DWORD FrameSize); void OnProcessTemperature(int nID, float fTemperature); 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); void RegisterAutonumous(nsDetail::Dispatch* Dispatch); }; } //end namespace CCOS::Dev::Detail::Detector