123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- #pragma once
- #include <map>
- //转存文件内容使用
- #include <shellapi.h>
- #include "CcosLock.h"
- #include "ResDataObject.h"
- #include "DetectorDefinition.h"
- #include "CCOS.Dev.FPD.Yuying.h"
- #define Yuying_SCAN_NUM 4
- namespace nsDPC = CCOS::Dev::Detail::Detector;
- namespace CCOS::Dev::Detail::Detector
- {
- class YuyingCtrl : 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:
- YuyingCtrl();
- ~YuyingCtrl();
- bool Init(string strAppPath);
- bool DriverEntry(FPDDeviceYuying* pDrvDPC, ResDataObject& Configuration);
- bool ActivePanel(nsDPC::FPDDeviceYuying* pDrvDPC, bool bActive);
- bool EnterExam(APP_STATUS eStatus);
- bool Connect(FPDDeviceYuying* pDrvDPC, string strWorkPath);
- bool DisConnect(nsDPC::FPDDeviceYuying* pDrvDPC);
- bool ResetFPD(nsDPC::FPDDeviceYuying* pDrvDPC);
- bool SelectExamMode(int nLogicMode, nsDPC::FPDDeviceYuying* pDrvDPC);
- RET_STATUS StartAcquisition(nsDPC::FPDDeviceYuying* pDrvDPC);
- RET_STATUS StopAcquisition(nsDPC::FPDDeviceYuying* pDrvDPC);
- RET_STATUS PrepareAcquisition(nsDPC::FPDDeviceYuying* pDrvDPC);
- bool InitCalibration();
- bool GetYuyingPanelCalibItem();
- RET_STATUS ActiveCalibration(CCOS_CALIBRATION_TYPE Type, nsDPC::FPDDeviceYuying* pDrvDPC);
- RET_STATUS PrepareCalibration(nsDPC::FPDDeviceYuying* pDrvDPC);
- RET_STATUS StartCalibration(nsDPC::FPDDeviceYuying* pDrvDPC);
- RET_STATUS CompleteCalibration(nsDPC::FPDDeviceYuying* pDrvDPC);
- RET_STATUS AbortCalibration(nsDPC::FPDDeviceYuying* pDrvDPC);
- bool ConfirmCalibration();
- bool AcceptCalibration();
- bool RejectCalibration();
- bool CreateCalibrationFile();
- void OnEndCalibraion();
- bool ActiveSyncMode(nsDPC::FPDDeviceYuying* pDrvDPC, int nSyncMode);
- bool RecoverLastImage();
- bool RecoverLastImageAuto();
- bool CopyFile2Folder(string strSrcPath, string strDstPath);
- public:
- ResDataObject m_ModeConfig;
- APP_STATUS m_eAppStatus; //记录当前软件的工作状态(界面)
- int m_nCurrentMode; //记录探测器当前的采集模式
- int m_nImageWidth;
- int m_nImageHeight;
- int m_nLeftOffset; //图像左侧裁剪像素值
- int m_nTopOffset; //图像上边裁剪像素值
- int m_nRightOffset; //图像右侧裁剪像素值
- int m_nBottomOffset; //图像下边裁剪像素值
- int m_nRawImgWidth; //图像原始宽
- int m_nRawImgHeight; //图像原始高
- int m_nImgBits;
- int m_nPixelPitch;
- bool m_bPreviewEnable;
- float m_fFactorEXI2UGY; //探测器EXI -> UGY 转换系数
- int m_nPreviewWidth;
- int m_nPreviewHeight;
- CCOS_CALIBRATION_TYPE m_eCaliType; // 记录当前校正模式
- float m_fCurrentDose; // 记录当前的Dose要求
- int m_nSaveRaw; //0:不存; 1:预览图; 2:raw图; 4:实际尺寸图像;
- //int m_nGainNodeCount; //校正曝光的总节点个数
- //int m_nGainNodeIndex; //校正曝光的节点Index
- //int m_nGainExpCount; //校正曝光节点需要曝光的次数
- //int m_nGainExpIndex; //校正曝光节点已曝光的次数
- int m_nUpdateFPDID; //记录要固件升级的探测器ID
- private:
- bool LoadYuyingDLL(string strWorkPath);
- void FreeYuyingDLL();
- void StartInitFPDThread();
- static DWORD __stdcall onInitPanel(void* pParam); //初始化线程
- void Action_Init();
- bool DetectorInitProcess(int nPanelIndex, bool bFDAttach = false);
- void YuyingScanEventThread(); //监控线程
- static DWORD __stdcall onScanEvent(void* pParam); //初始化线程
- 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 SetMarsCorrection(int nPanelIndex);
- bool TestError(int nDetectorID, int nErrorStatus, std::string strAPI = "");
- bool CheckBattery(int nPanelIndex);
- bool ReadWifiStatus(int nPanelIndex);
- bool CheckWiFi(int nPanelIndex);
- bool CheckTemperature(int nPanelIndex);
- bool WaitRespond(int nTimeOut, const char* szPosition = "");
- void SendNotify(const char* szPosition = "");
- void ResetLock();
- bool StartOffsetThread();
- static DWORD OffsetThread(LPVOID pParam);
- bool StartXWindowOffThread();
- static DWORD XWindowOffThread(LPVOID pParam);
- bool DeleteOneFolder(string strSourceFolder);
- bool RecoverImage();
- bool OnEXIT();
- void DeleteHandle();
- bool FlipX(WORD* pData, int nWidth, int nHeight);
- bool FlipXRotate90(WORD* pData, int nWidth, int nHeight);
- bool IsConnected(string strIP);
- void OnProcessPreImg();
- 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, int 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, int nWorkMode);
- bool FPDLoadCorrectFiles(int nDetectorID, const char* szDetectorID);
- private:
- //句柄
- HMODULE m_hYuyingModule;
- Func_YI_Initialize_FPD_V4 API_YI_Initialize_FPD_V4;
- 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_FPD_Subtract_Offset API_YI_FPD_Subtract_Offset;
- Func_YI_ImageReady_Callback_Register API_YI_ImageReady_Callback_Register;
- Func_YI_ImageReady_Callback_Register_Ex API_YI_ImageReady_Callback_Register_Ex;
- Func_YI_SystemInfo_Callback_Register API_YI_SystemInfo_Callback_Register;
- Func_YI_SystemInfo_Callback_Register_Ex API_YI_SystemInfo_Callback_Register_Ex;
- 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_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_Get_Invalid_Region API_YI_FPD_Get_Invalid_Region;
- 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_FPD_DO_Correction API_YI_FPD_DO_Correction;
- Func_YI_FPD_Wifi_Re_Connect API_YI_FPD_Wifi_Re_Connect;
- Func_YI_FPD_Wifi_Set_Work_Mode API_YI_FPD_Wifi_Set_Work_Mode;
- Func_YI_FPD_Wifi_Get_Work_Mode API_YI_FPD_Wifi_Get_Work_Mode;
- Func_YI_FPD_Wifi_Set_Name API_YI_FPD_Wifi_Set_Name;
- Func_YI_FPD_Wifi_Set_Power_Down API_YI_FPD_Wifi_Set_Power_Down;
- Func_YI_FPD_Wifi_Set_IP_Address API_YI_FPD_Wifi_Set_IP_Address;
- Func_YI_FPD_Wifi_Set_Route_Info API_YI_FPD_Wifi_Set_Route_Info;
- HANDLE m_hArrayEvent[Yuying_SCAN_NUM];
- HANDLE m_hExitEvent;
- HANDLE m_hRecoverImage;
- HANDLE m_hCofirmCalib;
- HANDLE m_hEndCalibEvent;
- HANDLE m_hYuyingScanEnd;
- HANDLE m_hSharedEvent; //等待SDK回调句柄
- HANDLE m_hWindowOffEvent;
- HANDLE m_pOffsetThread;
- HANDLE m_pXWindowoffThread;
- HANDLE m_hScanEventThread;
- HANDLE m_hInitThread;
-
- string m_strAppPath; //模块工作目录
- string m_strWorkPath; //SDK工作路径
- int m_nPanelCount;
- int m_nDetectorID; //SDK探测器ID(1,2,3)
- int m_nDetectorIndex; //当前激活探测器的index(0,1,2)
- void* m_pCurrentDPC;
- map<FPDDeviceYuying*, int>* m_pDPC2PanelID;
- map<int, FPDDeviceYuying*>* m_pPanelID2DPC;
- DeviceIndexStruct m_stDeviceIndex[3]; //配置的探测器列表//不超过三块板
- ResDataObject m_ObjFPDsInfo[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_pwRawImageData; //原始图像内存
- WORD* m_pwPreviewImg; //预览图内存
- bool m_bInitialing; //是否在初始化过程中
- bool m_bInCalibrating;
- bool m_bInExposure;
- bool m_bAEDWorkFlag;
- int m_nDoseParam;// 校正用的曝光计量,发送到UI 且本地记录
- int m_nCalibDueSetting; // 校正文件的保质期天数
- int m_nCalibStatus;
- int m_nSID; //SID值
- //校正相关变量
- list<RefrenceCal> m_listCalibItem;
- list<RefrenceCal>::iterator m_iterCalibDose;
- int m_nCalibrationMode; //校正模式,ZSKK or Factory
- int m_nDefectExpTimes;
- int m_nDefectTotalTimes;
- int m_nGainExpTimes;
- int m_nGainTotalFrames;
- int m_nDefectTotalFrames;
- };
- }
|