#pragma once #include "ResDataObject.h" #include "CCOS.Dev.FPD.PZMedical.h" #include "include/NetCom.h" //#include constexpr auto SCAN_EVENT_COUNT = 7; #ifndef __PZRFAPI__ #define __PZRFAPI__ typedef __declspec(dllimport) #endif __PZRFAPI__ BOOL(__cdecl* Func_COM_Init)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Uninit)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_SetCfgFilePath)(CHAR* path); __PZRFAPI__ BOOL(__cdecl* Func_COM_List)(TComFpList* ptComFpList); __PZRFAPI__ BOOL(__cdecl* Func_COM_ListAdd)(CHAR* psn); __PZRFAPI__ BOOL(__cdecl* Func_COM_ListDel)(CHAR* psn); __PZRFAPI__ BOOL(__cdecl* Func_COM_ListClr)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Open)(CHAR* psn); __PZRFAPI__ BOOL(__cdecl* Func_COM_Close)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_StopNet)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_StartNet)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_RegisterEvCallBack)(CHAR nEvent, FP_EVENT_CALLBACK funcallback); __PZRFAPI__ BOOL(__cdecl* Func_COM_SetPreCalibMode)(CHAR nCalMode); __PZRFAPI__ CHAR(__cdecl* Func_COM_GetPreCalibMode)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_SetCalibMode)(CHAR nCalMode); __PZRFAPI__ CHAR(__cdecl* Func_COM_GetCalibMode)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_HstAcq)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_AedAcq)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Trigger)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Prep)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Acq)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_PrepAcq)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_SetAcq)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_ComAcq)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_ExposeReq)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_AedTrigger)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_AedPrep)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Aed2Acq)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Stop)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Dst)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Dacq)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Dacqaed)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Cbct)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Cbct2)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Dexit)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Dprep)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Cprep)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_Exprep)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_SetConfigId)(UCHAR ucConfigId); __PZRFAPI__ BOOL(__cdecl* Func_COM_GetConfigId)(UCHAR* ucConfigId); __PZRFAPI__ BOOL(__cdecl* Func_COM_SetModeId)(UCHAR ucModeId); __PZRFAPI__ BOOL(__cdecl* Func_COM_GetModeId)(UCHAR* ucModeId); __PZRFAPI__ BOOL(__cdecl* Func_COM_LoadFullCfg)(UCHAR ucModeId); __PZRFAPI__ BOOL(__cdecl* Func_COM_SaveFullCfg)(UCHAR ucModeId); __PZRFAPI__ BOOL(__cdecl* Func_COM_SetMetaData)(TMetaData tMetaData); __PZRFAPI__ BOOL(__cdecl* Func_COM_GetMetaData)(TMetaData* ptMetaData); __PZRFAPI__ BOOL(__cdecl* Func_COM_GetPreImg)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_AedAcqOffLine)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_AcqOffLineImage)(); __PZRFAPI__ UINT32(__cdecl* Func_COM_GetNumOffLineImg)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_GetImageMode)(TImageMode* ptImageMode); __PZRFAPI__ BOOL(__cdecl* Func_COM_GetImageModeV)(TImageMode* ptImageMode); __PZRFAPI__ BOOL(__cdecl* Func_COM_GetImageShiftMode)(TImageShiftMode* ptImageShiftMode); __PZRFAPI__ BOOL(__cdecl* Func_COM_GetImageName)(CHAR* name); __PZRFAPI__ BOOL(__cdecl* Func_COM_ClrImageID)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_GetImageID)(UINT32* pimgID); __PZRFAPI__ BOOL(__cdecl* Func_COM_GetImage)(CHAR* pImageBuff); __PZRFAPI__ BOOL(__cdecl* Func_COM_GetImageV)(CHAR* pImageBuff); __PZRFAPI__ BOOL(__cdecl* Func_COM_ResetFP)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_FpTurnOff)(); __PZRFAPI__ INT32(__cdecl* Func_COM_GetErrNo)(); __PZRFAPI__ BOOL(__cdecl* Func_COM_SetFPConf)(TFPUserCfg* ptFpUserCfg); __PZRFAPI__ BOOL(__cdecl* Func_COM_GetFPConf)(TFPUserCfg* ptFpUserCfg); __PZRFAPI__ BOOL(__cdecl* Func_COM_SetRBConf)(TRBConf* ptRbConf); __PZRFAPI__ BOOL(__cdecl* Func_COM_GetRBConf)(TRBConf* ptRbConf); __PZRFAPI__ BOOL(__cdecl* Func_COM_LogPathSet)(CHAR* path); __PZRFAPI__ BOOL(__cdecl* Func_COM_GetFPsn)(CHAR* psn); __PZRFAPI__ BOOL(__cdecl* Func_COM_GetDllVer)(CHAR* pcSDKVer); //__PZRFAPI__ BOOL(__cdecl* Func_)(); enum CfgID { Cfg_RAD = 0, //拍片模式 Cfg_FLU = 1, //透视模式 Cfg_Max = 2 }; class PZMedicalCtrl { public: PZMedicalCtrl(); ~PZMedicalCtrl(); bool DriverEntry(FPDDevicePZMedical* pDrvDPC, ResDataObject& Configuration); bool Connect(FPDDevicePZMedical* pDrvDPC, const char* szWorkPath); bool Disconnect(); void EnterExamMode(int nExamMode); bool ActiveDetector(int nDetectorID); bool SetAcqMode(DetModeInfo DetModeInfo, DetCalibInfo DetCalibInfo, int nMode); bool PrepareAcquisition(FPDDevicePZMedical* pDrvDPC); bool StartAcquisition(FPDDevicePZMedical* pDrvDPC); bool StopAcquisition(FPDDevicePZMedical* pDrvDPC); bool ActiveCalibration(FPDDevicePZMedical* pDrvDPC, CCOS_CALIBRATION_TYPE eType); bool PrepareCalibration(FPDDevicePZMedical* pDrvDPC); bool StartCalibration(FPDDevicePZMedical* pDrvDPC); bool StopCalibration(FPDDevicePZMedical* pDrvDPC); bool ConfirmCalExposure(); void RejectCalExposure(); bool SetFluPPS(float fFluPPS); bool GetFluPPS(float& fFluPPS); bool StartOffset(int nMode); bool AbortOffset(); public: bool m_bGrabStatus; //采集标志位 private: bool LoadDll(string strWorkPath); bool FreeDll(); bool InitDetector(); bool ConnectDetector(int nDetectorID); bool DisconnectDetector(int nDetectorID); bool GetSetCalibMode(CHAR PreCalibMode, CHAR PostCalibMode); //先获取再设置校正模板策略 bool GetImageInfo(); bool SetSyncMode(int nSyncMode); bool WaitRespond(int nTimeOut = 65000, const char* szPosition = ""); void GetRespond(const char* szPosition = ""); bool TestError(int nRet, const char* szFuncName = "Func"); static unsigned __stdcall onFPDScanThread(PVOID pvoid); //辅助线程 void OnAcquireImage(); void OnProcessImage(); void OnRefreshOffset(); void OnAcquireGainImage(); bool StopAcquisition(); bool GetEffectiveImage(WORD* pOutImg, WORD* pInImg, int nInWidth); double GetMean(WORD* imgNoHeader, int pixelNum); bool StartXWindowOffThread(); static DWORD XWindowOffThread(LPVOID pParam); static BOOL __stdcall ProcessEvent(CHAR cEvent); 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 SaveRawImage(const char* pImgName, const WORD* pRawImg, int nWidth, int nHeight); bool GetApplicationMode(int nAppModeKey = -1, int nAppModeID = -1, bool bReged = false); bool SetApplicationMode(int nAppCfgID, int nAppModeID); bool LoadCalibrationFile(); bool UnLoadCalibrationFile(); bool OpenStatusMonitor(); static unsigned __stdcall onSatusMonitorThread(PVOID pvoid); //状态监控线程 bool CloseStatusMonitor(); bool StatusMonitor(); bool CheckImageEXI(WORD* pImage, int nWidth, int nHeight, int nImageBit, int nThreshold, float fArea); private: int m_nLogicMode; //探测器曝光模式。0:RAD; 1:DAEC; 2:Dual Energy; 3: DDR; default:0; int m_nXWindowTime; //探测器曝光窗口时间(ms)。default:500ms bool m_bDetectorReady; map* m_pDPC2PanelID; map* m_pPanelID2DPC; int m_nPanelCount; //探测器数量 ResDataObject m_ModeConfig; //保存DPC模块下发的配置 std::string m_strWorkPath; //保存工作路径,进程路径 std::string m_strSDKWorkDir; //SDK路径 int m_nDetectorID; //SDK Detector ID: 1,2,3 int m_nCurrentPanelID; SYNC_MODE m_eSyncMode; //同步模式 HANDLE m_hStatusMonitorThread; HANDLE m_hExitStatusMonitorEvent; HANDLE m_hStatusMonitorToggleEvent; //int m_nImageWidth; //int m_nImageHeight; //int m_nWidthOffset; //int m_nHeightOffset; int m_nFrmHeaderLen; //图像头长度 int m_nRawImgWidth; //SDK反馈的图像宽 int m_nRawImgHeight; //SDK反馈的图像高 WORD* m_pRawImgBuffer; //原始图 WORD* m_pImgBuffer; //裁剪后图像 unsigned short* m_pFluFrameBuffer; //动态图缓存 int m_FluFrameNum; //记录DDR帧数,初始值为0 int m_nExamMode; //记录工作界面 bool m_bSaveRaw; //保存原图开关 CCOS_CALIBRATION_TYPE m_eCaliType; // 记录当前校正模式 bool m_bAbortOffset; //true: 终止校正 int m_nGainNodeCount; //校正曝光的总节点个数 int m_nGainNodeIndex; //校正曝光的节点Index int m_nGainExpCount; //校正曝光节点需要曝光的次数 int m_nGainExpIndex; //校正曝光节点已曝光的次数 //int m_nImageSize; //通过SDK返回值算出的图像尺寸 bool m_bAutoOffsetMode; //是否自动刷新Offset模板 bool m_bOffsetDone; //Offset是否完成 float m_fFrameRate; DetModeInfo m_stModeInfo; DetCalibInfo m_stCalibInfo; HANDLE m_hRespond; //辅助线程事件 HANDLE m_hFPDScanThread; //辅助线程 HANDLE m_hInitEvent; //初始化事件 //HANDLE m_hDisconnectEvent; //断开探测器连接 HANDLE m_hAcqEvent; //开始Rad采集事件 HANDLE m_hProcessImgEvent; HANDLE m_hXWinOnEvent; HANDLE m_hDarkEvent; //开始dark校正 HANDLE m_hGainEvent; //开始Rad Gain事件 HANDLE m_hStopScanEvent; //退出辅助线程事件 HANDLE m_hArrayEvent[SCAN_EVENT_COUNT]; HANDLE m_hToggleEvent; //辅助线程退出通知事件 HANDLE m_hAcqReadyEvent; //采集Ready事件 HANDLE m_hGainReadyEvent; //Rad Gain ready事件 //atomic m_bStopAcpFlag{false}; HANDLE m_pXWindowoffThread; //关窗线程 HANDLE m_hWindowOffEvent; //关窗事件 HMODULE m_hPZModule; //加载SDK的句柄 Func_COM_Init API_COM_Init; Func_COM_Uninit API_COM_Uninit; Func_COM_SetCfgFilePath API_COM_SetCfgFilePath; Func_COM_LogPathSet API_COM_LogPathSet; Func_COM_GetFPsn API_COM_GetFPsn; Func_COM_GetDllVer API_COM_GetDllVer; Func_COM_List API_COM_List; Func_COM_ListAdd API_COM_ListAdd; Func_COM_ListDel API_COM_ListDel; Func_COM_Open API_COM_Open; Func_COM_Close API_COM_Close; Func_COM_StopNet API_COM_StopNet; Func_COM_StartNet API_COM_StartNet; Func_COM_RegisterEvCallBack API_COM_RegisterEvCallBack; Func_COM_SetPreCalibMode API_COM_SetPreCalibMode; Func_COM_GetPreCalibMode API_COM_GetPreCalibMode; Func_COM_SetCalibMode API_COM_SetCalibMode; Func_COM_GetCalibMode API_COM_GetCalibMode; Func_COM_HstAcq API_COM_HstAcq; Func_COM_AedAcq API_COM_AedAcq; Func_COM_Trigger API_COM_Trigger; Func_COM_Prep API_COM_Prep; Func_COM_Acq API_COM_Acq; Func_COM_PrepAcq API_COM_PrepAcq; Func_COM_SetAcq API_COM_SetAcq; Func_COM_ComAcq API_COM_ComAcq; Func_COM_ExposeReq API_COM_ExposeReq; Func_COM_AedTrigger API_COM_AedTrigger; Func_COM_AedPrep API_COM_AedPrep; Func_COM_Aed2Acq API_COM_Aed2Acq; Func_COM_Stop API_COM_Stop; Func_COM_Dst API_COM_Dst; Func_COM_Dacq API_COM_Dacq; Func_COM_Dacqaed API_COM_Dacqaed; Func_COM_Cbct API_COM_Cbct; Func_COM_Cbct2 API_COM_Cbct2; Func_COM_Dexit API_COM_Dexit; Func_COM_Dprep API_COM_Dprep; Func_COM_Cprep API_COM_Cprep; Func_COM_Exprep API_COM_Exprep; Func_COM_SetConfigId API_COM_SetConfigId; Func_COM_GetConfigId API_COM_GetConfigId; Func_COM_SetModeId API_COM_SetModeId; Func_COM_GetModeId API_COM_GetModeId; Func_COM_LoadFullCfg API_COM_LoadFullCfg; Func_COM_SaveFullCfg API_COM_SaveFullCfg; Func_COM_SetMetaData API_COM_SetMetaData; Func_COM_GetMetaData API_COM_GetMetaData; Func_COM_GetPreImg API_COM_GetPreImg; Func_COM_AedAcqOffLine API_COM_AedAcqOffLine; Func_COM_AcqOffLineImage API_COM_AcqOffLineImage; Func_COM_GetNumOffLineImg API_COM_GetNumOffLineImg; Func_COM_GetImageMode API_COM_GetImageMode; Func_COM_GetImageShiftMode API_COM_GetImageShiftMode; Func_COM_GetImageName API_COM_GetImageName; Func_COM_ClrImageID API_COM_ClrImageID; Func_COM_GetImageID API_COM_GetImageID; Func_COM_GetImage API_COM_GetImage; Func_COM_ResetFP API_COM_ResetFP; Func_COM_FpTurnOff API_COM_FpTurnOff; Func_COM_GetErrNo API_COM_GetErrNo; Func_COM_SetFPConf API_COM_SetFPConf; Func_COM_GetFPConf API_COM_GetFPConf; Func_COM_SetRBConf API_COM_SetRBConf; Func_COM_GetRBConf API_COM_GetRBConf; };