123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- #pragma once
- #include "ResDataObject.h"
- #include "CCOS.Dev.FPD.PZMedical.h"
- #include "include/NetCom.h"
- //#include <atomic>
- 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<FPDDevicePZMedical*, int>* m_pDPC2PanelID;
- map<int, FPDDevicePZMedical*>* 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<bool> 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;
- };
|