123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- #pragma once
- #include "CCOS.Dev.FPD.HaoBoRF.h"
- #include "HaoBoInterface.h"
- enum eDetStatus
- {
- DetStatus_NotIni,
- DetStatus_NotConn,
- DetStatus_Sleep,
- DetStatus_Standby,
- DetStatus_Acquire,
- DetStatus_OffsetCalibration,
- DetStatus_GainCalibration,
- };
- constexpr auto SCAN_EVENT_COUNT = 5;
- constexpr auto OFFSET_EVENT_COUNT = 4;
- class Detector_HaoBoRF
- {
- public:
- Detector_HaoBoRF();
- ~Detector_HaoBoRF();
- bool DriverEntry(void* pDrvDPC, ResDataObject& Configuration, const char* szWorkPath);
- bool Connect(void* pDrvDPC);
- void DisConnect();
- void EnterExamMode(int nExamMode);
- bool SetAcqMode(int nMode);
- bool SetExposureTimes(int nTimes);
- bool PrepareAcquisition(void* pDrvDPC);
- bool StartAcquisition(void* pDrvDPC);
- bool StopAcquisition(void* pDrvDPC);
- bool ActiveCalibration(void* pDrvDPC, CCOS_CALIBRATION_TYPE eType);
- bool PrepareCalibration(void* pDrvDPC);
- bool StartCalibration(void* pDrvDPC);
- bool StopCalibration(void* pDrvDPC);
- float SetFluPPS(float fPPS);
- void GetFluPPS(float& fFluPPS);
- bool RefreshAllOffset();
- void OnRefreshOffset();
- void AbortFreshOffset();
- void SetAbortOffsetEvent();
- void SetFreshAllOffsetEvent();
- void SetfreshOffsetEvent();
- void UpdateModeInRunning(int nMode,float fFrequency);
- void PrintDetectorCfg(RegCfgInfo* pCfg);
- bool GetPanelInfo();
- void* m_nFpdHandle;//SDK初始化后返回的句柄
- int m_nMaxImgWidth; //图像原始尺寸
- int m_nMaxImgHeight; //图像原始尺寸
- int m_nRawImageWidth; //实际出图尺寸
- int m_nRawImageHeight; //实际出图尺寸
- int m_nImageWidth; //裁剪后的尺寸
- int m_nImageHeight; //裁剪后的尺寸
- int m_nFrameID;
- WORD* m_pRawImgBuffer; //存储未裁剪的图像
- WORD* m_pFullImgBuffer; //存储裁剪后的图像
- //辅助线程事件
- static unsigned __stdcall onFPDScanThread(PVOID pvoid);
- HANDLE m_hFPDScanThread; //辅助线程
- HANDLE m_hArrayEvent[SCAN_EVENT_COUNT];
- HANDLE m_hStopScanEvent; //退出辅助线程事件
- HANDLE m_hAcqEvent; //开始Rad采集事件
- HANDLE m_hGainEvent; //开始Rad Gain事件
- HANDLE m_hDarkEvent; //开始dark校正
- HANDLE m_hProcessImgEvent; //处理图像
- static unsigned __stdcall RefreshOffsetThread(PVOID pvoid);
- HANDLE m_hOffsetThread;
- HANDLE m_hOffsetEvent[OFFSET_EVENT_COUNT];
- HANDLE m_hStopOffsetEvent;
- HANDLE m_hStartAllOffset;
- HANDLE m_hStartOffset;
- HANDLE m_hAbortOffset;
- 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);
- API_HBI_Init HBI_Init;//
- API_HBI_Destroy HBI_Destroy;//
- API_HBI_ConnectDetector HBI_ConnectDetector;//
- API_HBI_DisConnectDetector HBI_DisConnectDetector;//
- API_HBI_RegEventCallBackFun HBI_RegEventCallBackFun;//
- API_HBI_GetFPDSerialNumber HBI_GetFPDSerialNumber;//
- API_HBI_GetSDKVerion HBI_GetSDKVerion;//
- API_HBI_GetFirmareVerion HBI_GetFirmareVerion;//
- API_HBI_GetError HBI_GetError;//
- API_HBI_GetFpdCfgInfo HBI_GetFpdCfgInfo;//
- API_HBI_GetImageProperty HBI_GetImageProperty;//
- API_HBI_LiveAcquisition HBI_LiveAcquisition;//
- API_HBI_StopAcquisition HBI_StopAcquisition;//
- API_HBI_SetSelfDumpingTime HBI_SetSelfDumpingTime;//设置采集时间间隔(动态平板)(未使用)
- API_HBI_TriggerAndCorrectApplay HBI_TriggerAndCorrectApplay;//设置触发模式和图像校正使能(工作站)新版本(未使用)
- API_HBI_UpdateTriggerMode HBI_UpdateTriggerMode;
- API_HBI_UpdateCorrectEnable HBI_UpdateCorrectEnable;//更新图像固件校正使能 (未使用)
- API_HBI_SetBinning HBI_SetBinning;
- API_HBI_GenerateTemplate HBI_GenerateTemplate;//快速生成校正模板,可用于刷暗场
- API_HBI_TriggerBinningAcqTime HBI_TriggerBinningAcqTime;//设置触发模式、binning方式以及帧率(采集图像时间间隔)
- API_HBI_IsMutilMode HBI_IsMutilMode;//是否支持多mode
- private:
- map<void*, int>* m_pDPC2PanelID;
- map<int, void*>* m_pPanelID2DPC;
- int m_nPanelCount; //探测器数量
- ResDataObject m_ModeConfig; //保存DPC模块下发的配置
- std::string m_strCtrlWorkPath; //保存工作路径,用于加载SDK和配置
- int m_nCurrentPanelID; //模块中探测器的ID
- bool m_bConnected; //true: 探测器连接成功
- int m_nCurrentLogicMode; //当前选中的LogicMode
- int m_nModeID;//自定义探测器采集模式ID
- int m_nGainLevel;//亮场增益值
- //CF时发送图片的帧率(以秒为单位,例 60/s)PF设置帧率后,由于探测器开窗信号是由外部触发的,故帧率由外部信号决定(当外部触发信号频率大于最大帧率时,由最大帧率决定)
- float m_fFrameRate; //采集帧率
- int m_nTriggerMode; //触发模式
- int m_nSaveRaw;
- CCOS_CALIBRATION_TYPE m_eCaliType; // 记录当前校正模式
- eDetStatus m_eStatus; // 探测器状态
- int m_nCropLeft;//左侧裁剪
- int m_nCropRight;//右侧裁剪
- int m_nCropTop;//上边裁剪
- int m_nCropBottom;//下边裁剪
- int m_nExiThreshold;//探测器上传的图像的阈值,只有大于这个阈值才认为是有射线照射后的图
- int m_nImageBits;
- int m_nDropImgNum; //曝光已经丢图张数
- int m_nDropImgCount; //曝光总丢图张数
- int m_nExamMode; //记录当前的工作界面
- ULONGLONG m_dwBeginTime;
- ULONGLONG m_dwEndTime;
- int m_nDelayTime; //从收到曝光信号到取图的延时时间
- bool m_bValidImage; //是否已经发送合适的点片图像
- bool m_bFirstImage;//是否是开始采集后探测器推的第一张图
- HMODULE m_hSDKModule; //加载SDK动态库的句柄
- bool m_bLoaded;//SDK库文件是否加载
- int nPGALevel;
- int nBinning;
- int nPrepareTime;
- COMM_CFG commCfg;
- int nLiveAcqTime;//透视时的采集间隔,可以通过设置采集间隔控制上图时的帧率
- bool LoadDll(string strWorkPath);
- bool ConnectDetector();
- bool TestError(int nErrorCode, const char* szFuncName = "Func");
- void OnProcessImage(int nWidth, int nHeight, int nFrameID = -1);
- bool StartDarkCalibration();
- bool StartGainCalibration();
- void OnAcquireImage();
- void OnAcquireGainImage();
- void OnStartDarkCalibration();
- eDetStatus GetDpcStatus();
- bool SetDpcStatus(eDetStatus status);
- bool LoadCalibrationFiles();
- int CropImageMargin(LPVOID pDstData, int& nDstWidth, int& nDstHeight,
- LPVOID pScrData, int nSrcWidth, int nSrcHeight, int nBits,
- int nLeftMargin, int nTopMargin, int nRightMargin, int nBottomMargin);
-
- bool CheckTimeLimit(ULONGLONG dwBeginTime, ULONGLONG dwEndTime);
- bool CalculateEXI(WORD* pImgData, int nImgWidth, int nImgHeight, int nImageBit, int nThreshold);
- bool CheckImageExi(WORD* pImgData, int nImgWidth, int nImgHeight, WORD dwExiThrethold);
- void SaveImage(int nIndex,bool bImageCrop);
- int GetPGA(unsigned short usValue);
-
- };
|