123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- #pragma once
- #include <filesystem>
- #include <iostream>
- #include <fstream>
- #include "ResDataObject.h"
- #include "CCOS.Dev.FPD.Rayence.h"
- #include "VADAVIntf.h"
- #include "GIniFile.h"
- //LogicClient* m_pSynClient;
- constexpr auto GET_DARK = 0;
- constexpr auto GET_BRIGHT = 1;
- constexpr auto CAL_OneShot = 2;
- constexpr auto CAL_Flu = 3;
- #ifndef EDETSTATUS
- #define EDETSTATUS
- enum class eDetStatus
- {
- DetStatus_NotInit,
- DetStatus_NotConn,
- DetStatus_Sleep,
- DetStatus_Standby,
- DetStatus_Work,
- DetStatus_Acquire,
- DetStatus_Offset,
- DetStatus_XrayCalibration,
- };
- #endif // !EDETSTATUS
- constexpr auto SCAN_EVENT_COUNT = 5;
- class Detector_Rayence
- {
- public:
- Detector_Rayence();
- ~Detector_Rayence();
- bool DriverEntry(void* pDrvDPC, ResDataObject& Configuration);
- bool Connect(void* pDrvDPC, const char* szWorkPath);
- bool SetAcqMode(std::string strMode);
- bool PrepareAcquisition(void* pDrvDPC);
- bool StartAcquisition(void* pDrvDPC);
- bool StopAcquisition(void* pDrvDPC);
- bool StartOffset(void* pDrvDPC, bool isAll, std::vector<DetectorMode>& m_vDetectorModeList);
- bool AbortOffset();
- bool ActiveCalibration(void* pDrvDPC, CCOS_CALIBRATION_TYPE eType);
- bool PrepareCalibration(void* pDrvDPC);
- bool StartCalibration(void* pDrvDPC);
- bool StopCalibration(void* pDrvDPC);
- void CALLBACK_Acquisition(tVDACQ_CallBackRec* ACBR);
- void CALLBACK_Dark_Acquisition(tVDACQ_CallBackRec* ACBR);
- void DisConnect();
- void EnterExamMode(int nExamMode);
- void CALLBACK_InfoMessage(int nCode, TCHAR* szMessage);
- void HandleCaptureRecvEvent(tVDACQ_CallBackRec* ACBR, bool bIsCaptureRaw);
- std::string GetFileVersion(std::string strFilePathName);
- float SetFluPPS(float fPPS);
- void GetFluPPS(float& fFluPPS);
- private:
- map<void*, int>* m_pDPC2PanelID;
- map<int, void*>* m_pPanelID2DPC;
- ResDataObject m_ModeConfig; //保存DPC模块下发的配置
- tVADAV_InterfaceRec m_Intf; //Rayence 调用接口的实例对象
- tVDACQ_CallBackRec* rACQ_CallBackRec; //用于接收回调返回数据的结构体
- tVDACQ_FGRec m_qFGRec;
- CCOS_CALIBRATION_TYPE m_eCaliType; // 记录当前校正模式
- eDetStatus m_eStatus; // 探测器状态
- CRITICAL_SECTION m_cs;
- HANDLE m_hOffsetThread;
- HANDLE m_hOffsetThreadStatus;
- std::string m_strWorkPath; //保存工作路径,用于加载SDK和配置
- std::string m_strCurrentExamType; //当前选中的曝光模式
- std::string m_strSDKPath;
- std::string m_strModulePath;
- std::string m_strCurrentLogicMode; //当前选中的LogicMode
- std::string m_strLastLogicMode; //上一次选中的LogicMode,避免重复设置
- int m_nPanelCount; //探测器数量
- int m_nCurrentPanelID; //模块中探测器的ID
- 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_nExiThreshold;//探测器上传的图像的阈值,只有大于这个阈值才认为是有射线照射后的图
- int m_nExamMode; //记录当前的工作界面
- int m_nSensitivity; //用于Rayence初始化时进行设置
- int m_nFrmWidth; //探测器采集图像的宽
- int m_nFrmHeight; //探测器采集图像的高
- int m_nBinningMode;
- int m_nImageIndex;
- int m_nExposureTime;
- int m_nRecvCount;
- int m_nFrmAveBufSize;
- int m_nAveCount;
- int m_nSkipNum;
- int m_nCalToAcqNum;
- int m_nCalModeId;
- int m_nCalBinning;
- bool m_bSaveRaw;
- bool m_bCalOffset;
- bool m_bCalGain;
- bool m_bCalBPM;
- bool m_bDoOffset;
- bool m_bAbortOffset;
- bool m_bRefreshAllMode;
- bool m_bOffsetBuffer;
- bool m_bRayenceConnect;
- bool m_bRayAcqing;
- float m_fFrameRate;
-
- WORD* m_pFullImgBuffer; //存储裁剪后的图像
-
- short* m_pFrm1x1Buffer;
- short* m_pFrm2x2Buffer;
- short* m_pOneShotBuffer;
- short* m_pDark1x1Buffer;
- short* m_pDark2x2Buffer;
- int* m_pFrm1x1AveBuffer;
- int* m_pFrm2x2AveBuffer;
- UINT m_nFlags;
- vector<DetectorMode> m_vecDetMode;
- private:
- eDetStatus GetRayenceDPCStatus();
- bool OpenDetector();
- bool LoadRayenceDLL();
- bool StartGainCalibration();
- bool SetRayenceDPCStatus(eDetStatus status);
- bool CalculateEXI(WORD* pImgData, int nImgWidth, int nImgHeight, int nImageBit, int nThreshold);
- bool CheckImageExi(WORD* pImgData, int nImgWidth, int nImgHeight, WORD dwExiThrethold);
- bool OpenRefreshOffset();
- static UINT RefreshOffsetThread(LPVOID pParam);
- bool PerformRefreshOffset();
- bool CloseRefreshOffset();
- void OnProcessImage(int CaptureFrame, bool bIsCaptureRaw);
- void OnRadImageEvt(int CaptureFrame, bool bIsCaptureRaw);
- 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);
- void OffsetProgressFeedback(int nEventID, int nParam1 = 0, const char* pszMsg = "", int nDetectorID = -1, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
- void OffsetStatusFeedback(int nEventID, int nParam1 = 0, const char* pszMsg = "", int nDetectorID = -1, float fParam2 = 0, int nPtrParamLen = 0, void* pParam = NULL);
-
- int CropImageMargin(LPVOID pDstData, int& nDstWidth, int& nDstHeight,
- LPVOID pScrData, int nSrcWidth, int nSrcHeight, int nBits,
- int nLeftMargin, int nTopMargin, int nRightMargin, int nBottomMargin);
- std::string SaveAveFrames(unsigned short* pBuf, TCHAR* pszFileName);
- int GetMedian(int nNumPixel, const unsigned short* pData, int nCurPixelPro);
- static void iDsp_FindMinMax(int nNumPix, const unsigned short* psData, int* piMin, int* piMax);
- static int* iDsp_BuildHistogram(int nNumPix, const unsigned short* psData, int* piMin, int* piMax);
- };
|