123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- #pragma once
- #include "ResDataObject.h"
- #include "CCOS.Dev.FPD.CareRayDR.h"
- #include "CareRayInterface.h"
- #include "include/errors.h"
- #include "include/structures.h"
- #include "ZSKKCalibration.h"
- constexpr auto SCAN_EVENT_COUNT = 7;
- 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);
- void EnterExamMode(int nExamMode);
- bool SetAcqMode(int nMode);
- bool SetSyncMode(int nSyncMode);
- bool PrepareAcquisition(FPDDeviceCareRay* pDrvDPC);
- bool StartAcquisition(FPDDeviceCareRay* pDrvDPC);
- bool StopAcquisition(FPDDeviceCareRay* pDrvDPC);
- bool ActiveCalibration(FPDDeviceCareRay* pDrvDPC, CCOS_CALIBRATION_TYPE eType);
- bool PrepareCalibration(FPDDeviceCareRay* pDrvDPC);
- bool StartCalibration(FPDDeviceCareRay* pDrvDPC);
- bool StopCalibration(FPDDeviceCareRay* pDrvDPC);
- bool AbortCalibration(FPDDeviceCareRay* pDrvDPC);
- bool CompleteCalibration(FPDDeviceCareRay* pDrvDPC);
- bool SaveCalibrationFile();
- void SetCalibRounds(int nCalibRounds);
- bool GetCalibrationStep(int nCalibCurrentCalibrationRound, int nCalibrationRounds, int nCalibCurrentExposureIndex, int nExposureNumCurrentRound);
- bool AcceptCalibration();
- bool RejectCalibration();
- CCOS_CALIBRATION_TYPE GetCalibType();
- bool GetCalibrationTime(int nDetectorID = -1);
- bool ActiveDetector(FPDDeviceCareRay* pDrvDPC, bool bActive);
- bool UpdateCalibMode(CCOS_CALIBRATION_MODE eCalibMode);
- void CallBackEvent(int eventID, Event* eventData);
- void SetNotifyStatusTimePeriod(int nTime);
- void SetReconnectTimePeriod(int nTime);
- private:
- map<FPDDeviceCareRay*, int>* m_pDPC2PanelID;
- map<int, FPDDeviceCareRay*>* m_pPanelID2DPC;
- int m_nPanelCount; //探测器数量
- ResDataObject m_ModeConfig; //保存DPC模块下发的配置
- std::string m_strCtrlWorkPath; //保存工作路径,用于加载SDK和配置
- int m_nCurrentPanelID;
- int m_nCurrentDetectorType;//枚举值
- string m_strDetectorType; //探测器类型
- HMODULE m_hCareRayDRModule; //加载SDK的句柄
- CPanelStatus *m_pStPanelStatus[2]; //康众SDK应该只支持双板
- int m_nSyncMode; //存储从配置文件读取到的同步模式
- int m_nCheckMode;//sdk的CheckMode
- int m_nCurrentLogicMode;//当前工作在配置文件的哪个工作模式下
- int m_nLastCheckMode;//上次采集时使用的采集模式
- bool m_bFetchable;//是否有图像可以获取
- //软同步是通过回调函数通知状态的 硬同步和AED都要主动查询状态,虽然都是query prog info 但是他俩使用的标志位也是不同的
- int m_nSdkSyncMode;//给SDK设置的同步模式
- int m_nImageWidth;
- int m_nImageHeight;
- int m_nWidthOffset;
- int m_nHeightOffset;
- int m_nRawImgWidth; //原始图像宽
- int m_nRawImgHeight; //原始图像高
- int m_nPreviewEnable;
- int m_nPreImgWidth;
- int m_nPreImgHeight;
- WORD* m_pRawImgBuffer; //原始图buffer
- WORD* m_pPreImgBuffer; //预览图buffer
- WORD* m_pImgBuffer; //裁剪后图像
- WORD* m_pDarkImage; //调用SDK获取暗场图像
- int m_nXwindow; //窗口积分时间
- int m_nDelayTime;
- int m_nWaitTime;
- AppStatus m_nAppStatus; //记录软件状态
- int m_nSaveRaw;
- bool m_bCancelFlag; //true: 取消曝光
- CCOS_CALIBRATION_MODE m_nCalibrationMode;//校正模式 ecom校正/厂商校正
- CCOS_CALIBRATION_TYPE m_eCaliType; // 记录当前校正类型
- CZSKKCalibrationCtrl* m_pZSKKCalib;
- int m_nImageSize; //通过SDK返回值算出的图像尺寸
- WORD* m_pFluFrameData;
- int m_nFluLastExpStatus;//DDR时上一次的曝光状态
- int m_nFluCurrentExpStatus;//DDR时当前的曝光状态
- int m_nMaxFrameId;//DDR出图的最大张数
- int m_nReceivedFrameId;//DDR时收到了多少张图
- int m_nCalibrationRounds;//校正总轮数
- int m_nCalibCurrentCalibrationRound;//当前校正轮数
- int m_nCalibCurrentExposureIndex;//当前轮次曝光第几次
- int m_nExposureNumCurrentRound;//当前轮次需要曝光的总次数
- bool m_bGetImageByCallBack;//当前模式是否是用回调取图
- int m_nNotifyStatusTimePeriod;//通知温度等状态信息的时间间隔
- int m_nReconnectTimePeriod;//重连的时间间隔
- HANDLE m_hRespond;//用于等待某个状态的到来或者某个动作的完成
- //辅助线程事件
- HANDLE m_hStopScanEvent; //退出辅助线程事件
- HANDLE m_hAcqEvent; //开始采集事件
- HANDLE m_hProcessImgEvent;//处理图像事件
- HANDLE m_hXWinOnEvent;
- HANDLE m_hDarkEvent; //开始dark校正
- HANDLE m_hGainEvent; //开始Rad Gain事件
- HANDLE m_hInitEvent;
- HANDLE m_hArrayEvent[SCAN_EVENT_COUNT];
- HANDLE m_hToggleEvent; //辅助线程退出通知事件
- HANDLE m_hFPDScanThread; //辅助线程
- HANDLE m_hFPDStatusThread;//扫描探测器温度、电量、wifi
- bool m_bExit;//退出辅助线程和查询探测器状态线程
- HANDLE m_hReconnectThread; //重连线程
- //辅助线程
- static unsigned __stdcall onFPDScanThread(PVOID pvoid);
- //查询温度、电量、wifi线程
- static unsigned __stdcall onFPDStatusThread(PVOID pvoid);
- //重连线程断线后开启
- static unsigned __stdcall onReconnectThread(PVOID pvoid);
- void InitSdkInterface();
- bool LoadDll(string strWorkPath);
- bool ConnectDetector();
- bool InitDetector();
- int ShowDetectorInfo();
- int ShowModeInfo();
- bool SetSdkSyncModeAndTime(int nSyncMode);
- bool WaitRespond(int nTimeOut = 65000, const char* szAction = "");
- void StopWaiting(const char* szAction = "");
- bool TestError(int nRet, const char* szFuncName = "Func", bool bShowTrue = true);
- void GetDetectorType(DetectorType eType, string& szType);
- //是否是移动探测器 linear-固定 portable-移动
- bool IsPortableFPD();
- void OnStartAcquisition();
- void OnProcessImg();
- void StartDarkCalibration();
- void StartGainCalibration();
- void InitFPD();
- int PerformSoftSyncAcq();
- int RadAcquisition();
- int DarkAcquisition();
- int QueryAutoProgInfo(bool bIsAED = true);
- int QueryRadProgInfo();
- void SaveRawFunc(WORD* pInImg, int nImgWidth, int nImgHeight, string strFrameID = "");
- bool SaveRawWithName(const char* pRawName, const WORD* pRawImg, int nWidth, int nHeight);
- 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);
- int FluAcquisitionByCallBack();
- int FluAcquisitionByGetImage();
- void PerformDualEnergyAcquisition();
- 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);
- CB_CR_connect_detector API_CR_connect_detector;
- CB_CR_disconnect_detector API_CR_disconnect_detector;
- CB_CR_reset_detector API_CR_reset_detector;
- CB_CR_set_check_mode API_CR_set_check_mode;
- CB_CR_set_sync_mode API_CR_set_sync_mode;
- CB_CR_set_cycle_time API_CR_set_cycle_time;
- CB_CR_set_normal_power API_CR_set_normal_power;
- CB_CR_set_save_power API_CR_set_save_power;
- CB_CR_permit_exposure API_CR_permit_exposure;
- CB_CR_start_acq_full_image API_CR_start_acq_full_image;
- CB_CR_start_acq_dark_full_image API_CR_start_acq_dark_full_image;
- CB_CR_start_acq_prev_image API_CR_start_acq_prev_image;
- CB_CR_start_acq_dark_prev API_CR_start_acq_dark_prev;
- CB_CR_start_acq_def_image API_CR_start_acq_def_image;
- CB_CR_start_acq_fluoro_image API_CR_start_acq_fluoro_image;
- CB_CR_start_acq_fluoro_dark_image API_CR_start_acq_fluoro_dark_image;
- CB_CR_stop_acq_frame API_CR_stop_acq_frame;
- CB_CR_stop_acq_frame_cleanup API_CR_stop_acq_frame_cleanup;
- CB_CR_set_user_correction API_CR_set_user_correction;
- CB_CR_get_user_correction API_CR_get_user_correction;
- CB_CR_set_dose API_CR_set_dose;
- CB_CR_get_active_detector_ID API_CR_get_active_detector_ID;
- CB_CR_set_active_detector API_CR_set_active_detector;
- CB_CR_get_dual_detector_state API_CR_get_dual_detector_state;
- CB_CR_set_smart_hand_switch API_CR_set_smart_hand_switch;
- CB_CR_get_SHS_status API_CR_get_SHS_status;
- CB_CR_get_wireless_ip API_CR_get_wireless_ip;
- CB_CR_set_wireless_ip API_CR_set_wireless_ip;
- CB_CR_get_station_mode_conf API_CR_get_station_mode_conf;
- CB_CR_set_station_mode_conf API_CR_set_station_mode_conf;
- CB_CR_get_temperature_cal_data API_CR_get_temperature_cal_data;
- CB_CR_check_temperature_slot API_CR_check_temperature_slot;
- CB_CR_get_API_Version API_CR_get_API_Version;
- CB_CR_get_conn_state API_CR_get_conn_state;
- CB_CR_get_detector_type API_CR_get_detector_type;
- CB_CR_get_detector_info API_CR_get_detector_info;
- CB_CR_get_mode_info API_CR_get_mode_info;
- CB_CR_get_status_info API_CR_get_status_info;
- CB_CR_get_status_info_Ex API_CR_get_status_info_Ex;
- CB_CR_get_image_attr API_CR_get_image_attr;
- CB_CR_get_image API_CR_get_image;
- CB_CR_get_preview_image API_CR_get_preview_image;
- CB_CR_get_unuploaded_img_info API_CR_get_unuploaded_img_info;
- CB_CR_query_prog_info API_CR_query_prog_info;
- CB_CR_inpaint_bad_pixels API_CR_inpaint_bad_pixels;
- CB_CR_select_cal_type API_CR_select_cal_type;
- CB_CR_get_cal_params API_CR_get_cal_params;
- CB_CR_set_offset_correction API_CR_set_offset_correction;
- CB_CR_cal_offset API_CR_cal_offset;
- CB_CR_linear_calibration API_CR_linear_calibration;
- CB_CR_portable_calibration API_CR_portable_calibration;
- CB_CR_execute_linear_cal API_CR_execute_linear_cal;
- CB_CR_execute_portable_cal API_CR_execute_portable_cal;
- CB_CR_stop_cal_procedure API_CR_stop_cal_procedure;
- CB_CR_start_fluoro_calibration API_CR_start_fluoro_calibration;
- CB_CR_query_calibration_status API_CR_query_calibration_status;
- CB_CR_do_gridpattern_filtration API_CR_do_gridpattern_filtration;
- CB_CR_register_callback API_CR_register_callback;
- CB_CR_send_exp_request API_CR_send_exp_request;
- CB_CR_ready_state_request API_CR_ready_state_request;
- CB_CR_start_soft_acquisition API_CR_start_soft_acquisition;
- CB_CR_set_AEC_integ_time API_CR_set_AEC_integ_time;
- CB_CR_register_AEC_callback API_CR_register_AEC_callback;
- CB_CR_start_AEC_acquire_process API_CR_start_AEC_acquire_process;
- CB_CR_get_one_key_cal API_CR_get_one_key_cal;
- CB_CR_check_img_for_factory_cal API_CR_check_img_for_factory_cal;
- CB_CR_download_factory_cal_files API_CR_download_factory_cal_files;
- CB_CR_execute_one_key_cal API_CR_execute_one_key_cal;
- CB_CR_start_acq_NDT_dark_image API_CR_start_acq_NDT_dark_image;
- CB_CR_execute_NDT_CAL API_CR_execute_NDT_CAL;
- CB_CR_correct_NDT_image API_CR_correct_NDT_image;
- CB_CR_set_NDT_frame_num API_CR_set_NDT_frame_num;
- CB_CR_finish_NDT_acquisition API_CR_finish_NDT_acquisition;
- CB_CR_check_NDT_CAL_Files API_CR_check_NDT_CAL_Files;
- };
|