123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- #pragma once
- #include <map>
- #include <filesystem>
- #include <iostream>
- //转存文件内容使用
- #include <shellapi.h>
- #include "CcosLock.h"
- #include "ResDataObject.h"
- #include "DetectorDefinition.h"
- #include "CCOS.Dev.FPD.XiuYuan.h"
- #include "ZSKKCalibration.h"
- #define XiuYuan_SCAN_NUM 1
- namespace nsDPC = CCOS::Dev::Detail::Detector;
- namespace CCOS::Dev::Detail::Detector
- {
- class XiuYuanCtrl : public CcosLock
- {
- class _AutoLocker
- {
- CcosLock* m_lockObj;
- public:
- _AutoLocker(CcosLock *lockObj,DWORD timeout = INFINITE)
- :m_lockObj(lockObj)
- {
- m_lockObj->Thread_Lock(timeout);
- }
- ~_AutoLocker()
- {
- if (m_lockObj)
- {
- m_lockObj->Thread_UnLock();
- }
- }
- };
- 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:
- XiuYuanCtrl();
- ~XiuYuanCtrl();
- bool Init(string strAppPath);
- bool DriverEntry(FPDDeviceXiuYuan* pDrvDPC, ResDataObject& Configuration);
- bool ActiveDetector(nsDPC::FPDDeviceXiuYuan* pDrvDPC, bool bActive);
- bool EnterExam(APP_STATUS eStatus);
- bool Connect(FPDDeviceXiuYuan* pDrvDPC, string strWorkPath);
- bool DisConnect(nsDPC::FPDDeviceXiuYuan* pDrvDPC);
- bool SetAcqMode(string strLogicMode);
- RET_STATUS StartAcquisition(nsDPC::FPDDeviceXiuYuan* pDrvDPC);
- RET_STATUS StopAcquisition(nsDPC::FPDDeviceXiuYuan* pDrvDPC);
- RET_STATUS PrepareAcquisition(nsDPC::FPDDeviceXiuYuan* pDrvDPC);
- bool ActiveCalibration(nsDPC::FPDDeviceXiuYuan* pDrvDPC, CCOS_CALIBRATION_TYPE Type);
- bool PrepareCalibration(nsDPC::FPDDeviceXiuYuan* pDrvDPC);
- bool StartCalibration(nsDPC::FPDDeviceXiuYuan* pDrvDPC);
- bool StopCalibration(FPDDeviceXiuYuan* pDrvDPC);
- bool CompleteCalibration(nsDPC::FPDDeviceXiuYuan* pDrvDPC);
- bool AbortCalibration(nsDPC::FPDDeviceXiuYuan* pDrvDPC);
- void SetCalibRounds(int nCalibRounds);
- bool GetCalibrationStep(int nCalibCurrentCalibrationRound, int nCalibrationRounds, int nCalibCurrentExposureIndex, int nExposureNumCurrentRound);
- bool AcceptCalibration();
- bool RejectCalibration();
- CCOS_CALIBRATION_TYPE GetCalibType();
- bool UpdateCalibMode(CCOS_CALIBRATION_MODE eCalibMode);
- bool SaveCalibrationFile();
- bool SetSyncMode(int nSyncMode);
- void SetNotifyStatusTimePeriod(int nTime);
- void SetReconnectTimePeriod(int nTime);
- public:
- APP_STATUS m_eAppStatus; //记录当前软件的工作状态(界面)
- ResDataObject m_ModeConfig;
- CCOS_CALIBRATION_TYPE m_eCaliType; // 记录当前校正模式
- CZSKKCalibrationCtrl* m_pZSKKCalib;
- int m_nImageWidth;
- int m_nImageHeight;
- int m_nRawImgWidth; //图像原始宽
- int m_nRawImgHeight; //图像原始高
- int m_nWidthOffset; //图像左侧裁剪像素值
- int m_nHeightOffset; //图像上边裁剪像素值
- int m_nImgBits;
- int m_nPixelPitch;
- int m_nNotifyStatusTimePeriod;//通知温度等状态信息的时间间隔
- int m_nReconnectTimePeriod;//重连的时间间隔
- int m_nSyncMode;
- private:
- bool LoadXiuYuanDLL(string strWorkPath);
- void FreeXiuYuanDLL();
- bool DetectorInitProcess(int nPanelIndex, bool bFDAttach = false);
- 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);
- bool TestError(int nDetectorID, int nErrorStatus, std::string strAPI = "");
- bool StartXWindowOffThread();
- static DWORD XWindowOffThread(LPVOID pParam);
- bool OnEXIT();
- void DeleteHandle();
- bool IsConnected(string strIP);
- void OnProcessImg();
- bool GetEffectiveImage(WORD* pOutImg, WORD* pInImg, int nInWidth);
- bool SaveRawImage(const char* pImgName, const WORD* pRawImg, int nWidth, int nHeight);
- static bool ImageReadyCallbackProcess(const char* pImage, unsigned long iFlag);
- static bool SystemInfoCallbackProcess(SystemInfoCode iCodeIndex, const char* sContent);
- bool onImageReadyCallbackProcess(const char* pImage, int iFlag);
- bool onSystemInfoCallbackProcess(SystemInfoCode iCodeIndex, const char* sContent);
- bool SetDetectorWorkMode(int nDetectorID, const char* szFPD, FpdMode* stWorkMode);
- bool FPDLoadCorrectFiles(int nDetectorID, const char* szDetectorID);
- private:
- //句柄
- HMODULE m_hXiuYuanModule;
- Func_YI_Initialize_FPD_V4 API_YI_Initialize_FPD_V4;
- Func_YI_FPD_Close API_YI_FPD_Close;
- Func_YI_FPD_Set_Work_Mode API_YI_FPD_Set_Work_Mode;
- Func_YI_FPD_Stop_Capture_Image API_YI_FPD_Stop_Capture_Image;
- Func_YI_FPD_Get_Configure_Common API_YI_FPD_Get_Configure_Common;
- Func_YI_FPD_Set_Configure_Common API_YI_FPD_Set_Configure_Common;
- Func_YI_FPD_Get_Configure_SyncOut_Mode API_YI_FPD_Get_Configure_SyncOut_Mode;
- Func_YI_FPD_Set_Configure_SyncOut_Mode API_YI_FPD_Set_Configure_SyncOut_Mode;
- Func_YI_FPD_Restore_Factory_Settings API_YI_FPD_Restore_Factory_Settings;
- Func_YI_Subtract_Offset API_YI_Subtract_Offset;
- Func_YI_ImageReady_Callback_Register API_YI_ImageReady_Callback_Register;
- Func_YI_SystemInfo_Callback_Register API_YI_SystemInfo_Callback_Register;
- Func_YI_Get_Callback_Image_Size API_YI_Get_Callback_Image_Size;
- Func_YI_GetLastErrorCode API_YI_GetLastErrorCode;
- Func_YI_Set_Save_Log_Flag API_YI_Set_Save_Log_Flag;
- Func_YI_FPD_Get_Invalid_Region API_YI_FPD_Get_Invalid_Region;
- Func_YI_GetLoacalIPs_V4 API_YI_GetLoacalIPs_V4;
- Func_YI_Set_Image_Save_State API_YI_Set_Image_Save_State;
- Func_YI_Set_Image_Save_Path API_YI_Set_Image_Save_Path;
- Func_YI_FPD_Get_FPD_TYPE API_YI_FPD_Get_FPD_TYPE;
- Func_YI_FPD_Write_Configure_Common_To_File API_YI_FPD_Write_Configure_Common_To_File;
- Func_YI_FPD_Read_Configure_Common_From_File API_YI_FPD_Read_Configure_Common_From_File;
- Func_YI_FPD_Write_Configure_SyncOut_To_File API_YI_FPD_Write_Configure_SyncOut_To_File;
- Func_YI_FPD_Read_Configure_SyncOut_From_File API_YI_FPD_Read_Configure_SyncOut_From_File;
- Func_YI_FPD_Capture_Image API_YI_FPD_Capture_Image;
- Func_YI_FPD_Capture_Prepare API_YI_FPD_Capture_Prepare;
- Func_YI_Load_Gain_Tmp_File API_YI_Load_Gain_Tmp_File;
- Func_YI_Load_Defect_Tmp_File API_YI_Load_Defect_Tmp_File;
- Func_YI_Load_Offset_Tmp_File API_YI_Load_Offset_Tmp_File;
- Func_YI_Load_AED_Offset_Tmp_File API_YI_Load_AED_Offset_Tmp_File;
- Func_YI_Set_Correct_Type API_YI_Set_Correct_Type;
- Func_YI_GainCalibrate API_YI_GainCalibrate;
- Func_YI_OffsetCalibrate API_YI_OffsetCalibrate;
- Func_YI_DefectCalibrate API_YI_DefectCalibrate;
- Func_YI_AEDOffsetCalibrate API_YI_AEDOffsetCalibrate;
- Func_YI_SetWorkMode API_YI_SetWorkMode;
- Func_YI_GetWorkMode API_YI_GetWorkMode;
- Func_YI_SetDosage API_YI_SetDosage;
- Func_YI_SetROIRegion API_YI_SetROIRegion;
- Func_YI_ThermalSensor API_YI_ThermalSensor;
- Func_YI_1256Parameter API_YI_1256Parameter;
- Func_YI_Restart API_YI_Restart;
- Func_YI_Reset API_YI_Reset;
- Func_YI_GetStatus API_YI_GetStatus;
- Func_YI_GetVersion API_YI_GetVersion;
- Func_YI_FPD_FreeBuffer API_YI_FPD_FreeBuffer;
-
- HANDLE m_hArrayEvent[XiuYuan_SCAN_NUM];
- HANDLE m_hExitEvent;
- HANDLE m_hXiuYuanScanEnd;
- HANDLE m_hWindowOffEvent;
- HANDLE m_pOffsetThread;
- HANDLE m_pXWindowoffThread;
- HANDLE m_hScanEventThread;
- HANDLE m_hInitThread;
-
- string m_strAppPath; //模块工作目录
- string m_strWorkPath; //SDK工作路径
- string m_strDetectorType; //探测器类型
- string m_strAcqMode;
- int m_nPanelCount;
- int m_nDetectorID; //SDK探测器ID(1,2,3)
- int m_nDetectorIndex; //当前激活探测器的index(0,1,2)
- map<FPDDeviceXiuYuan*, int>* m_pDPC2PanelID;
- map<int, FPDDeviceXiuYuan*>* m_pPanelID2DPC;
- DeviceIndexStruct m_stDeviceIndex[3]; //配置的探测器列表//不超过三块板
- CPanelStatus* m_pStPanelStatus[2]; //
- std::vector<std::string> m_vecDetectorID; //SDK探测器ID
- HANDLE m_pHardwareStatusThread;
- HANDLE m_hEndHWStatusThreadEvent;
- HANDLE m_hHWStatusThreadEndEvent;
- WORD* m_pImgBuffer; //裁剪后图像内存
- WORD* m_pRawImgBuffer; //原始图像内存
- bool m_bInCalibrating;
- bool m_bInExposure;
- bool m_bAEDWorkFlag;
- bool m_bCancelFlag; //true: 取消曝光
- bool m_bSaveRaw;
- bool m_bTemperatureEnable;
- bool m_bBatteryEnable;
- bool m_bWifiEnable;
- bool m_bConnectStatus;
- bool m_bFreeBuffer;
- bool m_bStandbyFlag;
- int m_nDoseParam;// 校正用的曝光计量,发送到UI 且本地记录
- int m_nCalibStatus;
- int m_nCalibrationRounds;//校正总轮数
- int m_nCalibCurrentCalibrationRound;//当前校正轮数
- int m_nCalibCurrentExposureIndex;//当前轮次曝光第几次
- int m_nExposureNumCurrentRound;//当前轮次需要曝光的总次数
- int m_nExpWindowMode;
- int m_nXWindow;
- //校正相关变量
- list<RefrenceCal> m_listCalibItem;
- list<RefrenceCal>::iterator m_iterCalibDose;
- CCOS_CALIBRATION_MODE m_nCalibrationMode;//校正模式 ecom校正/厂商校正
- int m_nDefectExpTimes;
- int m_nDefectTotalTimes;
- int m_nGainExpTimes;
- int m_nGainTotalFrames;
- int m_nDefectTotalFrames;
- };
- }
|