123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312 |
- #pragma once
- #include <filesystem>
- #include <iostream>
- #include <fstream>
- #include "ResDataObject.h"
- #include "CCOS.Dev.FPD.CareRayDR.h"
- #include "CareRayAPI.h"
- #include "errors.h"
- #include "CrStructure.h"
- #include "ZSKKCalibration.h"
- constexpr auto SCAN_EVENT_COUNT = 9;
- #ifndef __CARERAYAPI__
- #define __CARERAYAPI__ typedef __declspec(dllimport)
- #endif
- __CARERAYAPI__ int(__cdecl* Func_CrInitializeLibrary)();
- __CARERAYAPI__ int(__cdecl* Func_CrDeinitializeLibrary)();
- __CARERAYAPI__ void(__cdecl* Func_CrGetLastIntlMsg)(char*, int);
- __CARERAYAPI__ int(__cdecl* Func_CrGetConfigItemValue)(const char*, char*);
- __CARERAYAPI__ int(__cdecl* Func_CrSetConfigItemValue)(const char*, const char*);
- __CARERAYAPI__ int(__cdecl* Func_CrRegisterEventCallbackFun)(CrCallbackFunPtr);
- __CARERAYAPI__ int(__cdecl* Func_CrGetDetectorIndexAndIPAddress)(CrDetrIdxAndIPAddr*, int*);
- __CARERAYAPI__ int(__cdecl* Func_CrConnect)(int);
- __CARERAYAPI__ int(__cdecl* Func_CrResetDetector)(int, int);
- __CARERAYAPI__ int(__cdecl* Func_CrDisconnect)(int);
- __CARERAYAPI__ int(__cdecl* Func_CrGetSystemInformation)(int, CrSystemInfo*);
- __CARERAYAPI__ int(__cdecl* Func_CrGetApplicationMode)(int, CrModeInfo*, int*);
- __CARERAYAPI__ int(__cdecl* Func_CrRegisterApplicationMode)(int, int, int, float*, float*, int, int, int, int);
- __CARERAYAPI__ int(__cdecl* Func_CrSetFrameFilter)(int, int, const char*);
- __CARERAYAPI__ int(__cdecl* Func_CrGetModeInfoByAppModeKey)(int, int, CrModeInfo*);
- __CARERAYAPI__ int(__cdecl* Func_CrGetRegedInfoByAppModeKey)(int, int, CrRegModeInfo*);
- __CARERAYAPI__ int(__cdecl* Func_CrGetModeInfoByModeId)(int, int, CrModeInfo*);
- __CARERAYAPI__ int(__cdecl* Func_CrLoadReference)(int, int);
- __CARERAYAPI__ int(__cdecl* Func_CrUnloadReference)(int, int);
- __CARERAYAPI__ int(__cdecl* Func_CrStartAcquisition)(int, int, int);
- __CARERAYAPI__ int(__cdecl* Func_CrStartDarkAcquisition)(int, int, bool, bool);
- __CARERAYAPI__ int(__cdecl* Func_CrStartDarkAcquisitionWithCorrOpt)(int, int, unsigned int);
- __CARERAYAPI__ int(__cdecl* Func_CrStopAcquisition)(int);
- __CARERAYAPI__ int(__cdecl* Func_CrStartDarkCalibration)(int, int, int, int);
- __CARERAYAPI__ int(__cdecl* Func_CrStartGainCalibration)(int, int);
- __CARERAYAPI__ int(__cdecl* Func_CrStopCalibration)(int);
- __CARERAYAPI__ int(__cdecl* Func_CrGetAcquisitionStatInfo)(int, CrAcquisitionStatInfo*);
- __CARERAYAPI__ int(__cdecl* Func_CrQueryCalibrationStatus)(int, CrCalibrationInfo*);
- __CARERAYAPI__ int(__cdecl* Func_CrQueryReferenceStatus)(int, int, CrRefStatusInfo*);
- __CARERAYAPI__ int(__cdecl* Func_CrGetDefectInfo)(int, const int, CrDefectInfo*);
- __CARERAYAPI__ int(__cdecl* Func_CrGetPositionDefectInfo)(int, const int, CrDefectInfo*, int);
- __CARERAYAPI__ int(__cdecl* Func_CrQueryAcquisitionStatus)(int, CrExpProgress*);
- __CARERAYAPI__ int(__cdecl* Func_CrQueryAedExposureProgress)(int, CrAedExpProgress*);
- __CARERAYAPI__ int(__cdecl* Func_CrPermitExposure)(int);
- __CARERAYAPI__ int(__cdecl* Func_CrRequestExposure)(int);
- __CARERAYAPI__ int(__cdecl* Func_CrGetImage)(int, char*, int, int);
- __CARERAYAPI__ int(__cdecl* Func_CrGetNoHeaderImage)(int, char*, int, int);
- __CARERAYAPI__ int(__cdecl* Func_CrGetDetrStatus)(int, CrDetrStatus*);
- __CARERAYAPI__ int(__cdecl* Func_CrGetConnectionStatus)(int, CrConnectionStatus*);
- __CARERAYAPI__ int(__cdecl* Func_CrStartAcquisitionWithCorrOpt)(int, int, unsigned int, int);
- __CARERAYAPI__ int(__cdecl* Func_CrGetDaecActiveAreas)(int, CrDaecAreaInfo*, int*, int*);
- __CARERAYAPI__ int(__cdecl* Func_CrSetDaecActiveAreas)(int, CrDaecAreaInfo*, int, int);
- __CARERAYAPI__ int(__cdecl* Func_CrGetBatteryInfos)(int, CrBatteryInfo*, int*);
- __CARERAYAPI__ int(__cdecl* Func_CrGetWirelessStatus)(int, CrWirelessStatus*);
- class Detector_CareRayDR
- {
- enum class eDetStatus
- {
- DetStatus_NotIni,
- DetStatus_NotConn,
- DetStatus_Sleep,
- DetStatus_Standby,
- DetStatus_Work,
- DetStatus_Acquire,
- DetStatus_Offset,
- DetStatus_XrayCalibration,
- };
- //探测器信息
- struct CPanelStatus
- {
- bool bInitOver; //是否初始化完成
- bool bConnectState; //是否连接
- SYNC_MODE eSyncMode; //同步模式
- int nSoftAcqState;
- eDetStatus eFPDStatus; //探测器状态
- CPanelStatus()
- {
- bInitOver = false;
- bConnectState = false;
- eSyncMode = SYNC_SOFTWARE; //暂时使用软同步作为缺省值
- nSoftAcqState = 0;
- eFPDStatus = eDetStatus::DetStatus_NotIni;
- }
- };
- public:
- Detector_CareRayDR();
- ~Detector_CareRayDR();
- bool DriverEntry(FPDDeviceCareRay* pDrvDPC, ResDataObject& Configuration);
- bool Connect(FPDDeviceCareRay* pDrvDPC, const char* szWorkPath);
- bool Disconnect();
- void EnterExamMode(int nExamMode);
- bool SetAcqMode(int nMode);
- bool PrepareAcquisition(FPDDeviceCareRay* pDrvDPC);
- bool StartAcquisition(FPDDeviceCareRay* pDrvDPC);
- bool StopAcquisition(FPDDeviceCareRay* pDrvDPC);
- bool RequestXray(FPDDeviceCareRay* pDrvDPC);
- bool ActiveCalibration(FPDDeviceCareRay* pDrvDPC, CCOS_CALIBRATION_TYPE eType);
- bool PrepareCalibration(FPDDeviceCareRay* pDrvDPC);
- bool StartCalibration(FPDDeviceCareRay* pDrvDPC);
- bool StopCalibration(FPDDeviceCareRay* pDrvDPC);
- bool ConfirmCalExposure();
- void RejectCalExposure();
- RET_STATUS AbortCalibration(FPDDeviceCareRay* pDrvDPC);
- bool CompleteCalibration(FPDDeviceCareRay* pDrvDPC);
- bool SaveCalibrationFile();
- bool SetCalibRounds(int nCalibRounds);
- bool GetCalibrationStep(int nCalibCurrentCalibrationRound, int nCalibrationRounds, int nCalibCurrentExposureIndex, int nExposureNumCurrentRound);
- void OnProcessDarkEnd();
- bool AcceptCalibration();
- bool RejectCalibration();
- CCOS_CALIBRATION_TYPE GetCalibType();
- bool GetCalibrationTime(int nDetectorID = -1);
- void ProcessCREvent(int eventID, CrEvent* eventData);
- private:
- map<FPDDeviceCareRay*, int>* m_pDPC2PanelID;
- map<int, FPDDeviceCareRay*>* m_pPanelID2DPC;
- ResDataObject m_ModeConfig; //保存DPC模块下发的配置
- CPanelStatus* m_pStPanelStatus[2]; //
- int m_nPanelCount; //探测器数量
- int m_nCurrentPanelID;
- int m_nSyncMode; //记录选择模式时使用的同步模式
- int m_nImageWidth;
- int m_nImageHeight;
- int m_nWidthOffset;
- int m_nHeightOffset;
-
- std::string m_strWorkPath; //保存工作路径,用于加载SDK和配置
-
- HMODULE m_hCareRayDRModule; //加载SDK的句柄
-
-
- //软同步是通过回调函数通知状态的 硬同步和AED都要主动查询状态,虽然都是query prog info 但是他俩使用的标志位也是不同的
-
- int m_nRawImgWidth; //SDK反馈的图像宽
- int m_nRawImgHeight; //SDK反馈的图像高
- int m_nDetectorNum;
- WORD* m_pRawImgBuffer; //原始图
- WORD* m_pImgBuffer; //裁剪后图像
- WORD* m_pDarkImage; //一键校正时获取的暗场图像
- bool m_bSaveRaw;
- CCOS_CALIBRATION_TYPE m_eCaliType; // 记录当前校正类型
- int m_nCheckMode;//sdk的CheckMode
- int m_nCurrentLogicMode;
- CCOS_CALIBRATION_MODE m_nCalibrationMode;//校正模式 ecom校正/厂商校正
- WORD* m_pFluFrameData;
- int m_nCalibrationRounds;//校正轮数
- int m_nCalibCurrentCalibrationRound;//当前校正轮数
- int m_nCalibCurrentExposureIndex;//当前轮次曝光第几次
- int m_nExposureNumCurrentRound;//当前轮次需要曝光的总次数
- CZSKKCalibrationCtrl* m_pZSKKCalib;
- string m_strDetectorType; //探测器类型
- bool m_bOnlyHaveFpd;//当前环境是否只有探测器一个真实设备并且处于AED同步模式,其他设备是demo的 1-是 0-否 默认否
- int m_nGainImg; // 校正时接受的亮场图数量
- int m_nGainExposureNum;//gain校正曝光的总次数
- int m_nDetectorID;
- int m_nAppModeKey;
- int m_nModeID;
- int m_nFrameRate;
- int m_nTriggerType;
- int m_nExtIntegrationTime;
- int m_nGainLevel;
- int m_nDualEnergyFrameNum;
- bool m_bExitRadAcqStatus;
- bool m_bExitDualAcqStatus;
- bool m_bDualEnergyFirstExpEnableDone;
- bool m_bDualEnergySecondExpEnable;
- HANDLE m_hRespond;//用于等待某个状态的到来或者某个动作的完成
- //辅助线程事件
- HANDLE m_hInitEvent;
- HANDLE m_hExitEvent; //退出辅助线程事件
- HANDLE m_hReConnectEvent;
- HANDLE m_hSwitchEvent;
- HANDLE m_hLoadCalibrationEvent;
- HANDLE m_hRadEvent;
- HANDLE m_hDualEnergyEvent;
- HANDLE m_hOffsetEvent;
- HANDLE m_hGainEvent; //开始Rad Gain事件
- HANDLE m_hDetectorScanToggleEvnet;
- HANDLE m_hArrayEvent[8];
- HANDLE m_hToggleEvent; //辅助线程退出通知事件
- HANDLE m_hFPDScanThread; //辅助线程
- HANDLE m_hRadAcquisitionThread;
- HANDLE m_hDualEnergyAcquisitionThread;
- HANDLE m_hStatusMonitorThread;
- HANDLE m_hExitStatusMonitorEvent;
- HANDLE m_hStatusMonitorToggleEvent;
- HANDLE m_hExitRadAcqStatus;
- HANDLE m_hExitDualAcqStatus;
- void InitSdkInterface();
- bool LoadDll(string strWorkPath);
- bool ReleaseDll();
- bool OpenDetector();
- bool InitDetector();
- bool OpenStatusMonitor();
- static unsigned __stdcall CareRayStatusMonitorThread(PVOID pvoid);
- bool StatusMonitor();
- bool CloseStatusMonitor();
- bool CloseDetectorScan();
- int ShowModeInfo();
- bool SetApplicationMode();
- bool LoadCalibrationFiles();
- bool WaitRespond(int nTimeOut = 65000, const char* szAction = "");
- void StopWaiting(const char* szAction = "");
- bool TestError(int nErrorCode);
- //辅助线程
- static unsigned __stdcall onFPDScanThread(PVOID pvoid);
- void OnStartDarkCalibration();
- void OnAcquireGainImage();
- void OnReconnectFPD();
- void OnProcessInitFPD();
- int DarkAcquisition();
- int QueryAutoProgInfo(bool bIsAED = true);
- int QueryRadProgInfo();
- void SaveRawFunc(WORD* pInImg, int nImgWidth, int nImgHeight, string strFrameID = "");
- bool GetEffectiveImage(WORD* pOutImg, WORD* pInImg, int nInWidth);
- bool SetUserCorrection(bool bLoad);
- double GetMean(WORD* imgNoHeader, int pixelNum);
- eDetStatus GetCareRayDPCStatus(int nDetectorIndex = -1);
- bool SetCareRayDPCStatus(eDetStatus status, int nDetectorIndex = -1);
- bool IsConnected(string strIP);
- bool GetTriggerType(int nTriggerModeID);
- bool CheckConnection();
- bool ReConnectFPD();
- bool OpenRadAcquisition();
- static UINT RadAcquisitionThread(LPVOID pParam);
- bool PerformRadAcquisition();
- bool CloseRadAcquisition();
- bool OpenDualEnergyAcquisition();
- static UINT DualEnergyAcquisitionThread(LPVOID pParam);
- bool PerformDualEnergyAcquisition();
- bool CloseDualEnergyAcquisition();
- void ConfFeedback(int nEventID, int nDetectorID = -1, const char* pszMsg = "", int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
- void InfoFeedback(int nEventID, int nDetectorID = -1, int nParam1 = 0, float fParam2 = 0, const char* pszMsg = "", int nPtrParamLen = 0, void* pParam = NULL);
- void StatusFeedback(int nEventID, int nParam1 = 0, const char* pszMsg = "", int nDetectorID = -1, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
- void DataFeedback(int nEventID, void* pParam = NULL, int nParam1 = 0, float fParam2 = 0, const char* pszMsg = "", int nPtrParamLen = 0, int nDetectorID = -1);
- void WarnFeedback(int nEventID, const char* pszMsg = "", int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL, int nDetectorID = -1);
- void ErrorFeedback(int nEventID, const char* pszMsg = "", int nDetectorID = -1, int nParam1 = 0, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
- Func_CrInitializeLibrary API_CrInitializeLibrary;
- Func_CrDeinitializeLibrary API_CrDeinitializeLibrary;
- Func_CrGetLastIntlMsg API_CrGetLastIntlMsg;
- Func_CrGetConfigItemValue API_CrGetConfigItemValue;
- Func_CrSetConfigItemValue API_CrSetConfigItemValue;
- Func_CrRegisterEventCallbackFun API_CrRegisterEventCallbackFun;
- Func_CrGetDetectorIndexAndIPAddress API_CrGetDetectorIndexAndIPAddress;
- Func_CrConnect API_CrConnect;
- Func_CrResetDetector API_CrResetDetector;
- Func_CrDisconnect API_CrDisconnect;
- Func_CrGetSystemInformation API_CrGetSystemInformation;
- Func_CrGetApplicationMode API_CrGetApplicationMode;
- Func_CrRegisterApplicationMode API_CrRegisterApplicationMode;
- Func_CrSetFrameFilter API_CrSetFrameFilter;
- Func_CrGetModeInfoByAppModeKey API_CrGetModeInfoByAppModeKey;
- Func_CrGetRegedInfoByAppModeKey API_CrGetRegedInfoByAppModeKey;
- Func_CrGetModeInfoByModeId API_CrGetModeInfoByModeId;
- Func_CrLoadReference API_CrLoadReference;
- Func_CrUnloadReference API_CrUnloadReference;
- Func_CrStartAcquisition API_CrStartAcquisition;
- Func_CrStartDarkAcquisition API_CrStartDarkAcquisition;
- Func_CrStartDarkAcquisitionWithCorrOpt API_CrStartDarkAcquisitionWithCorrOpt;
- Func_CrStopAcquisition API_CrStopAcquisition;
- Func_CrStartDarkCalibration API_CrStartDarkCalibration;
- Func_CrStartGainCalibration API_CrStartGainCalibration;
- Func_CrStopCalibration API_CrStopCalibration;
- Func_CrGetAcquisitionStatInfo API_CrGetAcquisitionStatInfo;
- Func_CrQueryCalibrationStatus API_CrQueryCalibrationStatus;
- Func_CrQueryReferenceStatus API_CrQueryReferenceStatus;
- Func_CrGetDefectInfo API_CrGetDefectInfo;
- Func_CrGetPositionDefectInfo API_CrGetPositionDefectInfo;
- Func_CrQueryAcquisitionStatus API_CrQueryAcquisitionStatus;
- Func_CrQueryAedExposureProgress API_CrQueryAedExposureProgress;
- Func_CrPermitExposure API_CrPermitExposure;
- Func_CrRequestExposure API_CrRequestExposure;
- Func_CrGetImage API_CrGetImage;
- Func_CrGetNoHeaderImage API_CrGetNoHeaderImage;
- Func_CrGetDetrStatus API_CrGetDetrStatus;
- Func_CrGetConnectionStatus API_CrGetConnectionStatus;
- Func_CrStartAcquisitionWithCorrOpt API_CrStartAcquisitionWithCorrOpt;
- Func_CrGetDaecActiveAreas API_CrGetDaecActiveAreas;
- Func_CrSetDaecActiveAreas API_CrSetDaecActiveAreas;
- Func_CrGetBatteryInfos API_CrGetBatteryInfos;
- Func_CrGetWirelessStatus API_CrGetWirelessStatus;
- };
|