123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358 |
- /***************************************************************
- * File Name: CCOS.Dev.FPD.iRayDM.h
- * Detail: iRay detector module for DMOC
- * Author: Wangyuedong
- * Date: 2023-06-06
- ***************************************************************/
- #pragma once
- #pragma warning(disable:26812) //更倾向于 enum class 防止 enum 全局命名空间中的污染。
- #pragma warning(disable:28159) //使用GetTickCount足够了,无需使用GetTickCount64。
- #pragma warning(disable:26451) //忽略乘法溢出
- #pragma warning(disable:6258) //允许强制终止线程
- #include "CCOS.Dev.FPDDeviceMould.hpp"
- #include "TemperatureMould.hpp"
- #include "OEM.Acq.h"
- #include "OEM.Sync.h"
- #include "OEM.Calib.h"
- #include "OEM.DetectorCtrl.h"
- #include "DetectorConfiguration.h"
- #include "FPDErrorWarningProcess.h"
- #include "CalibrationProcess.h"
- #include "common_api.h"
- #include "IRayDMCtrl.h"
- #define CCOSDEVFPDIRAYDM_EXPORTS
- #ifdef CCOSDEVFPDIRAYDM_EXPORTS
- #define CCOSDEVFPDIRAYDM_API __declspec(dllexport)
- #else
- #define CCOSDEVFPDIRAYDM_API __declspec(dllimport)
- #endif
- namespace CCOS::Dev::Detail::Detector
- {
- //-----------------------------------------------------------------------------
- // IRay Driver manager handle
- //-----------------------------------------------------------------------------
- class CCOSDEVFPDIRAYDM_API IRayDriver : public FPDDriverMould
- {
- using super = FPDDriverMould;
- FPDDeviceIRay* dev;
- bool m_bConnect;
- ResDataObject m_ConfigAll;
- ResDataObject m_Configurations;
- ResDataObject m_DeviceConfig;
- std::unique_ptr <ResDataObject> m_pAttribute;
- std::unique_ptr <ResDataObject> m_pDescription;
- public:
- IRayDriver();
- virtual ~IRayDriver();
- 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 <IODevice> 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 GetDeviceConfigValue(ResDataObject config, const char* pInnerKey, int nPathID, string& strValue);
- bool SetDeviceConfigValue(ResDataObject config, const char* pInnerKey, int nPathID, const char* szValue);
- };
- //-----------------------------------------------------------------------------
- // FPDDeviceIRay
- //-----------------------------------------------------------------------------
- namespace nDetail = CCOS::Dev::Detail;
- class IRayCtrl;
- class CCOSDEVFPDIRAYDM_API FPDDeviceIRay : public FPDDeviceMould
- {
- private:
- using super = IODeviceDetail;
- ResDataObject* m_pPreviewImageHead;
- ResDataObject* m_pFullImageHead;
- IRayCtrl* m_pDetectors;
- std::unique_ptr <AcqUnit> m_AcqUnit;
- std::unique_ptr <SyncUnit> m_SyncUnit;
- std::unique_ptr <CalibUnit> m_CalibUnit;
- std::unique_ptr <DetectorCtrlUnit> m_DetectorCtrlUnit;
- std::unique_ptr <DeviceTemperatureMould> m_Temperature;
- std::unique_ptr <DeviceBatteryMould> m_Battery;
- std::unique_ptr <DeviceWifiMould> m_Wifi;
- std::unique_ptr <DetectorConfiguration> m_DetectorConfiguration;
- std::unique_ptr <FPDErrorWarning> m_WarnAndError;
- std::unique_ptr <CalibrationProcess> m_CalibProcess;
- int m_nDeviceIndex; //当前探测器的ID
- string g_strAppPath;
- string m_strWorkPath;
- HANDLE m_ExitEvt;
- bool m_bConnect2XCU;
- HANDLE m_hXCUresult;
- bool m_bXCUresult;
- string m_strXCUresult;
- ResDataObject m_ACQMODElist;
- DeviceIndexStruct m_stDeviceConfig;
- APP_STATUS m_eAppStatus; //DROC的当前状态,检查/校正/ATTACH界面
- WORD* m_pwFullImageData; //裁剪后的有效图像内存
- WORD* m_pwRawImageData; //原始图像内存
- WORD* m_pwPreviewImg; //preview内存
- SYSTEMTIME m_stImgCreateTime;
- float m_fBaseCalibTempGap;
- unsigned int m_nWorkStation;
- unsigned int m_nHWcrop;
- unsigned int m_nPanelRotate;
- unsigned int m_nCollimatorAlign;
- float m_fCollimatorWidth;
- float m_fCollimatorLen;
- float m_fAPRms;
- bool m_bHasGrid; // XCU通知有栅/无栅的状态
- int m_nGridLicense;
- bool m_bForceGridSuppress;
- //float m_fCalibTemperature1;
- //float m_fCalibTemperature2;
- //float m_fCalibTemperature;
- string m_strVoltage;
- string m_strLastError; //DLL反馈的错误内容
- string m_strCalibTime;
- string m_strLogFilePath;
- bool m_bDisConnected;
- bool m_bAttached;
- bool m_bCallFDConnectOver;
- bool m_bOpened; //初始化开始与否;初始化未开始,屏蔽DLL反馈的各种状态信息;
- bool m_bBatteryCharging; //电池充电与否的状态
- bool m_bRecoveringImage;//是否在恢复图像的流程中;若是,屏蔽其他错误,以防止干扰恢复图像的界面流程
- bool m_bAbortRecover; //放弃恢复图像(状态),恢复图像过程中中止,恢复图像失败的提示不再往上发送;目前不起作用
- int m_nRecoverImageTimes; // 恢复图像失败的次数,每2次提示用户一次
- bool m_bSendRecoverMessage;
- bool m_bUIConfirmRecover;
- bool m_bRecoverImageStatusInit;
- ResDataObject m_RecoverImageStatus;
- bool m_bSNListExisted;
- bool m_bUIReady;
- bool m_bImagePendingOrNot; //是否有未获取成功的图像
- bool m_bResetDetector; //是否reset探测器,暂时不用
- int m_nTemperCheckResult;
- int m_nXCUStatus;
- float m_fLTEthreshold;
- int m_nBatteryCapacity;
- int m_nBatteryCharges;
- float m_fBatteryTemperature;
- int m_nShockCounts;
- CCOS_CALIBRATION_TYPE m_nCalibrationType;
- int m_fDoseParam;// 校正用的曝光计量,发送到UI 且本地记录
- int m_nFullImgWidth; //有效图像的宽
- int m_nFullImgHeight; //有效图像的高
- int m_nTopOffset; //图像上边裁剪像素值
- int m_nBottomOffset; //图像下边裁剪像素值
- int m_nLeftOffset; //图像左侧裁剪像素值
- int m_nRightOffset; //图像右侧裁剪像素值
- int m_nImageBits; //图像位数
- float m_fFactorEXI2UGY; //探测器EXI -> UGY 转换系数
- bool m_bPreviewEnable; //是否显示preview image
- bool m_bTestSensitivity;
- bool m_bSaveRaw;
- int m_nXrayCalibNum;
- HANDLE m_OffsetCalibrationEvt;
- HANDLE m_PauseCalibrationEvt;
- HANDLE m_CompleteCalibrationEvt;
- HANDLE m_CrateCalibReportEvt;
- HANDLE m_WaitCalibDoseEvt;
- HANDLE m_WriteCumstomFileEvt;
- HANDLE m_hNotifyThread;
- DWORD m_NotifyThreadID;
- static DWORD WINAPI OnNotify(LPVOID pParam);
- HANDLE m_UploadCalibMapOver;
- HANDLE m_CalibGapEvt;
- int m_nGenWaitGap;
- int m_nConfXrayOnGap;
- bool m_bCalibReportFailed;
- int m_nActiveState;
- int m_nCurrentXCSStatus; //XCU定义的FD Status ;
- bool m_bDueDateWarnSend;
- float m_CalTemperlowWarn;
- float m_CalTemperupWarn;
- float m_LETCalTemperlowWarn;
- float m_LETCalTemperupWarn;
- bool m_CalTemperWarnInitialed;
- int m_lowBatteryBuda;
- bool m_pmsLoginStatus;
- ResDataObject m_CalibDoseList;
-
- // bool IsPanelSerialBeReset(string strPanelType, string strPanelSerial);
- // void SendInfoLog(string strLogKey, float bRealSN);
- // void SendInfoLog(string strLogKey, int bRealSN);
- // void SendInfoLog(string strLogKey, bool bRealSN);
- // void SendInfoLog(string strLogKey, string strValue = "");
- // void SendLog(string strLogKey, string strLogLevel, bool bRealSN, string strValue = "");
- // void InitializeCalibrationWarnTemperature(bool isLET);
- // void DoInitializeCalibrationWarnTemperature();
- // void DoInitializeLETCalibrationWarnTemperature();
- // bool OnInitResult(bool bSuccess);
- // bool LoadSensitivity();
- // int NewGridSuppressed(int nHeight, int nWidth, int nImageBits, unsigned short* puImageData);
- // void OnProcessTemperature(int nID, float fTemperature);
- // void InitializeTemperatureConfigs();
-
- // //bool SendModuleFPDInfo(bool bExist);
- // bool GetCalibrationTemper(bool ExpMode);
- // bool CompleteCalibration();
- // bool SaveConfigFile(bool bSendNotify);
- // bool SetAttachConfig();
- // void SendConnectStatusToUI(bool bConnectStatus);
- // string GetFileVersion(string strFilePathName);
- // void SendTemperatureValue(float fTemp);
- // void SendWifiValue(int nWifi);
- // void SendBatteryValue(int nBattery);
-
- // RET_STATUS PauseCalibration();
- // bool CheckCalibartionDue();
- // void AbortCalibration();
- // void StopCalibrationInside();
- // //向HW(转到发生器模块)发送当前探测器的状态
- // bool SendStatus2XCS(int nIndex, int nStatus);
- // void OnError(string strErrCode, string strErr = "");
- // void OnErrorX(string strErrCode);
- // //响应警告事件 nIndex:探测器ID strWarnCode:警告事件ID,strWarn:警告内容
- // void OnWarn(int nIndex, string strWarnCode, string strWarn = "");
- // void OnWarnX(string strWarnCode);
- // void SendAllError();
- // void ProcessTempreatureOnLostCommunicate();
- // void ResetAllError();
-
- public:
- FPDDeviceIRay(std::shared_ptr <IOEventCenter> center, string ConfigPath);
- ~FPDDeviceIRay();
- void Register();
- virtual std::string GetGUID() const override;
- virtual bool Prepare() override;
- // bool OpenXCU();
- // void SendMsg2XCU(string keyType, int Context);
- // void SendError2XCU(string strErrCode);
- // void ClearError2XCU(string strErrorCode);
- // void SendWarn2XCU(string strWarnCode);
- // bool GetMsgFromXCU(string keyType);
- // void SyncErrorList();
- void RegisterCtrl(nDetail::Dispatch* Dispatch);
- void RegisterAcq(nDetail::Dispatch* Dispatch);
- void RegisterSync(nDetail::Dispatch* Dispatch);
- void RegisterCalib(nDetail::Dispatch* Dispatch);
- void RegisterOthers(nDetail::Dispatch* Dispatch);
- bool CreateDevice();
- RET_STATUS Connect();
- RET_STATUS GetDeviceDictionary(std::string& out);
- RET_STATUS ActiveDetector(bool bActive);
- RET_STATUS SetAcqMode(int mode);
- RET_STATUS SetSyncMode(SYNC_MODE nSyncMode, HARDWARE_TRIGGER_MODE TriggerMode);
- RET_STATUS SetXwindow(float XwindowSize);
- RET_STATUS PrepareAcquisition();
- RET_STATUS StartAcquisition(string in = "");
- RET_STATUS StopAcquisition();
- RET_STATUS SetSID(int nSID);
- RET_STATUS ActiveCalibration(CCOS_CALIBRATION_TYPE in);
- RET_STATUS PrepareCalibration();
- RET_STATUS GetRequestedDose(string& strDose);
- RET_STATUS StartCalibration();
- RET_STATUS StopCalibration();
- RET_STATUS SetCorrectionType(CCOS_CORRECTION_TYPE in);
- RET_STATUS EnterExam(int nExamStatus);
- RET_STATUS ResetConnect();
- RET_STATUS DisConnectFPD();
- RET_STATUS RecoverImage(bool bRecoverIt);
- RET_STATUS GetRecoverImageState(string& strREI);
- RET_STATUS GetDetectorInfo(string& strFDI);
- RET_STATUS UploadCalibrationFiles(string strFileName);
- RET_STATUS ResetError();
-
- void OnFPDCallback(int nDetectorID, int nEventID, int nEventLevel, const char* pszMsg, int nParam1, float fParam2, int nPtrParamLen, void* pParam);
- void UnactiveBySDK(void* pActviedDPC);
-
- bool UpdateFDCalibList(bool bLTEenable, std::string strPanelSerial, std::string strPanelType);
- void SaveFailedCalibFile();
- bool GetCalibrationTime(bool ExpMode);
- private:
- bool LoadConfig();
- void SaveRaw(string RawName);
- 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);
- bool OnProcessImage(WORD* pImage, int nWidth, int nHeight, float fImageReferUGY = 2.5);
- bool OnProcessPreviewImage(WORD* pRawImage, int nWidth, int nHeight);
- bool OnProcessPreExpImage(WORD* pwRawImage, int nWidth, int nHeight);
- RET_STATUS XWindowOnNotify();
- RET_STATUS XWindowOffNotify();
- void PrevImageDateArrived(WORD* pImg);
- void FullImageDateArrived(WORD* pImg);
- void PreExpImageDateArrived(WORD* pImg);
- RET_STATUS AddFrameWithRawHead(IMAGE_VIEW_TYPE Type, WORD* pFrameBuff, DWORD FrameSize);
- string MakeImageHead(IMAGE_VIEW_TYPE Type);
- bool SaveRawImage(string strImageName, WORD* pwRawImage, int nHeight, int nWidth);
- public:
- bool m_bStatusInAEC;
- private:
- int m_nClinicalApplicationMode;
- int m_nFilterMode;
-
- };
- }
|