123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- #pragma once
- #include "ResDataObject.h"
- #include "CCOS.Dev.FPD.PZMedicalDM.h"
- #include "PZMedicalLib.h"
- #include "ZSKKCalibration.h"
- enum eDetStatus
- {
- DetStatus_NotIni,
- DetStatus_NotConn,
- DetStatus_Sleep,
- DetStatus_Standby,
- DetStatus_Work,
- DetStatus_Acquire,
- DetStatus_Offset,
- DetStatus_XrayCalibration,
- };
- enum eDetOperationMode
- {
- PIX_OM_RAD = 1,
- PIX_OM_TOMO,
- PIX_OM_AED = 4
- };
- enum eDetPixImgType
- {
- PIX_IMG_NONE,
- PIX_IMG_PRE,
- PIX_IMG_RAW,
- PIX_IMG_FULL = 4
- };
- class PZMedicalCtrl
- {
- //探测器信息
- struct CPanelStatus
- {
- bool bLostTemplate; //是否缺少校正文件
- bool bPanelInReady; //探测器在ready状态
- bool bConnectStatus; //是否连接
- SYNC_MODE eSyncMode; //同步模式
- bool bConnErrorInInit; //初始化阶段的断线错误
- bool bInitError; //初始化错误,一般不可恢复
- string strPanelType; //探测器类型,AddDPC时赋值
- string strPanelSN; //探测器序列号,连接成功后获取信息时被赋值
- bool bIsPortable;
- bool bCharging;
- bool bStatusPolling;
- bool bDC_AED;
- bool bDarkCalibDone; //offset刷新结束
- bool bAEDDarkCalibDone;
- bool bLTEDarkCalibDone; //长曝光offset刷新结束
- string strModuleIP; //探测器IP地址,attach或收到init回调时赋值
- bool bBatteryTooLow;
- bool bImagePending;
- bool bIsLoadRef; //是否加载了校正文件,加载过了不用再次加载
- int nBattery; //电池电量
- bool bInitOK; //初始化过程探测器连接完毕,用于重连判断
- bool bNeedUpdateFW; //是否需要固件升级的标记位
- bool bSelftested; //Selftest执行完毕
- int nTotalShockNumber; //探测器的shocksenseor总数
- int nFWStatus; //探测器固件状态
- string strPartNumber; //产品编号,连接成功后获取信息时被赋值
- ResDataObject objPanelConfig;
- bool bHaveAutonumousMode; //是否支持离线采集
- bool bAutonumousMode; //true: 离线模式;false:在线模式
- CPanelStatus()
- {
- bLostTemplate = false;
- bPanelInReady = false;
- bConnectStatus = false;
- eSyncMode = SYNC_SOFTWARE; //默认使用软同步作为缺省值
- bConnErrorInInit = false;
- bInitError = false;
- strPanelType = "";
- strPanelSN = "";
- bIsPortable = false;
- bCharging = false;
- bStatusPolling = false;
- bDC_AED = false;
- bDarkCalibDone = false;
- bAEDDarkCalibDone = false;
- bLTEDarkCalibDone = false;
- strModuleIP = "";
- bBatteryTooLow = false;
- bImagePending = false;
- bIsLoadRef = false;
- nBattery = 0;
- bInitOK = false;
- bNeedUpdateFW = false;
- bSelftested = false;
- nTotalShockNumber = -1;
- nFWStatus = -1;
- strPartNumber = "";
- bHaveAutonumousMode = false;
- bAutonumousMode = false;
- }
- };
- public:
- PZMedicalCtrl();
- ~PZMedicalCtrl();
- bool DriverEntry(FPDDevicePZMedical* pDrvDPC, ResDataObject& Configuration);
- bool Connect(FPDDevicePZMedical* pDrvDPC, const char* szWorkPath);
- bool Disconnect();
- void EnterExamMode(int nExamMode);
- 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 ResetDetector(FPDDevicePZMedical* pDrvDPC);
- bool SetReferenceNum(int nReferenceNum);
- bool SetAcqMode(int nLogicMode, FPDDevicePZMedical* pDrvDPC);
- bool AcceptCalibration();
- bool RejectCalibration();
- bool SaveCalibrationFile();
- bool GetCalibrationStep(int nCalibCurrentCalibrationRound, int nCalibrationRounds, int nCalibCurrentExposureIndex, int nExposureNumCurrentRound);
- bool CompleteCalibration(FPDDevicePZMedical* pDrvDPC);
- bool GetCalibrationTime(int nDetectorID = -1);
- RET_STATUS AbortCalibration(FPDDevicePZMedical* pDrvDPC);
- CCOS_CALIBRATION_TYPE GetPZMedicalCtrlCalibType();
- PZDPC_State GetPZDPCState();
- private:
- map<FPDDevicePZMedical*, int>* m_pDPC2PanelID;
- map<int, FPDDevicePZMedical*>* m_pPanelID2DPC;
- int m_nPanelCount; //探测器数量
- std::string m_strWorkPath; //保存工作路径,用于加载SDK和配置
- int m_nCurrentPanelID;
- ResDataObject m_objFPDConfig; //保存DPC模块下发的配置
- CPanelStatus* m_pStPanelStatus[3];//探测器信息 内部还有自己的FPDConfig 注意赋值(为了以后连接多个板子用)
- std::string m_strTplDarkPath; // references\serialnumber\dark
- std::string m_strTplFloodPath; // references\serialnumber\flood
- PZDPC_State m_ePZDPCstate; //DPC或ctrl模块当前处于什么状态
- int m_nImageWidth;//裁剪后的图像宽
- int m_nImageHeight;//裁剪后的图像高
- int m_nWidthOffset;//左侧裁剪宽度
- int m_nHeightOffset;//上方裁剪宽度
- int m_nRawImgWidth; //SDK反馈的图像宽
- int m_nRawImgHeight; //SDK反馈的图像高
- WORD* m_pRawImgBuffer; //原始图buffer
- WORD* m_pImgBuffer; //处理后的图像buffer
- int m_nSaveRaw;
- int m_nImgBits;
- int m_nPixelPitch;
- APP_STATUS m_nAppStatus;//记录工作界面
- CCOS_CALIBRATION_TYPE m_eType; // 记录当前校正类型
- int m_nOffsetImg; // 校正时暗场图数量
- int m_nGainImg; // 校正时亮场图数量
- PZ_CALIBRATION_State m_eCalState;//探测器校正状态
- bool m_bCalibrationOver; // true 当前阶段校正完成;false 当前阶段校正未完成
- bool m_bWired; //是否为有线连接
- CHAR m_cFpCurStat; //探测器当前的工作模式SDK
- int m_nCalibrationRounds;//校正轮数
- eDetStatus m_eStatus; // 探测器状态
- CCOS_CALIBRATION_MODE m_nCalibrationMode;//校正模式
- CZSKKCalibrationCtrl* m_pZSKKCalib;
- string m_strPanelType; //探测器类型 3025ZF
- bool m_bLoadedSDK; //true 已经加载了SDK,避免重复调用,主要用于ReInit流程
- bool m_bInitializedSDK; //true 已经init了SDK,避免重复调用,主要用于ReInit流程
- bool m_bConnectWaiting;
- ResDataObject m_ModeConfig;
- int m_nCalibCurrentCalibrationRound;
- int m_nCalibCurrentExposureIndex;
- int m_nExposureNumCurrentRound;
- bool m_bConfirmCaliRst; //true: 接受当前增益校正曝光结果
- bool m_bAutoContinueCal; //true: SDK自动进行下一次增益开窗流程(一般是在当前增益合格);false: 手动触发SDK进行下一次增益
- bool m_bAutonumousMode;
- int m_nGainExposureNum;//gain校正曝光的总次数
- int m_nHeartCount;//心跳回调次数
- int m_nCurrentLogicMode;
- HMODULE m_hPZSDKModule; //SDK module
- HANDLE m_hRespond;
- HANDLE m_hToggleEvent; //辅助线程退出通知事件
- HANDLE m_hFPDScanThread;
- HANDLE m_hStopScanEvent;
- HANDLE m_hProcessImgEvent;
- HANDLE m_hXWinOnEvent;
- HANDLE m_hInitFPDEvent;
- HANDLE m_hReInitEvent;
- HANDLE m_hDarkEndEvent; //dark校正结束
- HANDLE m_hArrayEvent[6];
-
- //校正线程以及相应事件
- HANDLE m_hCalibrationThread;
- HANDLE m_hPZMPrepare; //校正流程准备,修改配置
- HANDLE m_hPZMStartOffset; //调用api,开始采集暗场图
- HANDLE m_hPZMInOffset; //调用api,继续采集暗场图 或 停止采集
- HANDLE m_hPZMStartAED; // 废弃,不参与
- HANDLE m_hPZMEndAED; //废弃,不参与
- HANDLE m_hPZMStartGain; //调用api,开始采集亮场图
- HANDLE m_hPZMInGain; //调用api,继续采集亮场图 或者 停止采集
- HANDLE m_hEndCalibEvent;
- HANDLE m_hPZMEndEvent; //生成校正文件;恢复配置
- HANDLE m_hPZMCalibration[9];
- bool LoadSDK();
- bool InitSDK();
- int ConnectDetector();
- bool InitDetector();
- BOOL OnProcessLink(char cEvent);
- BOOL OnProcessBreak(char cEvent);
- BOOL OnProcessImage(char cEvent);
- BOOL OnProcessHeartBeat(char cEvent);
- static DWORD __stdcall onFPDScanThread(PVOID pvoid);
- void OnProcessImg();
- void OnProcessInitFPD();
- void OnReInitFPD();
- void OnProcessDarkEnd();
- void StopThread();
- static DWORD __stdcall onCalibrationThread(PVOID pvoid);
- bool OnProcessCalibration();
- void SaveRawFunc(WORD* pInImg, int nImgWidth, int nImgHeight);
- bool SaveRawImage(const char* pImgName, const WORD* pRawImg, int nWidth, int nHeight);
- bool GetEffectiveImage(WORD* pOutImg, WORD* pInImg, int nInWidth);
- bool TestError(BOOL nRet, const char* szFuncName = "Func");
- bool WaitRespond(int nTimeOut = 65000, const char* szPosition = "");
- void StopWaiting(const char* szPosition = "");
- bool SetFPDTplPath();
- bool SetFPDCalibrationMode();
- 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);
- void GetConnectionMode();
- void SetPZDPCState(PZDPC_State ePZDPCstate);
- void NotifyDetectorInfo();
- static BOOL __stdcall FuncLinkUpCallBack(char cEvent);
- static BOOL __stdcall FuncLinkDownCallBack(char cEvent);
- static BOOL __stdcall FuncImageCallBack(char cEvent);
- static BOOL __stdcall FuncHeartBeatCallBack(char cEvent);
- static BOOL __stdcall FuncReadyCallBack(char cEvent);
- static BOOL __stdcall FuncExposeCallBack(char cEvent);
- static BOOL __stdcall FuncExposeEndCallBack(char cEvent);
- static BOOL __stdcall FuncOffsetDoneCallBack(char cEvent);
- static BOOL __stdcall FuncAedA1CallBack(char cEvent);
- static BOOL __stdcall FuncAedA2CallBack(char cEvent);
- static BOOL __stdcall FuncImageStartCallBack(char cEvent);
- static BOOL __stdcall FuncImageEndCallBack(char cEvent);
- static BOOL __stdcall FuncBattLow1CallBack(char cEvent);
- static BOOL __stdcall FuncBattLow2CallBack(char cEvent);
- PZ_COM_Init API_COM_Init;
- PZ_COM_List API_COM_List;
- PZ_COM_Open API_COM_Open;
- PZ_COM_Close API_COM_Close;
- PZ_COM_RegisterEvCallBack API_COM_RegisterEvCallBack;
- PZ_COM_SetCalibMode API_COM_SetCalibMode;
- PZ_COM_GetCalibMode API_COM_GetCalibMode;
- PZ_COM_Trigger API_COM_Trigger;
- PZ_COM_AedAcq API_COM_AedAcq;
- PZ_COM_HstAcq API_COM_HstAcq;
- PZ_COM_Prep API_COM_Prep;
- PZ_COM_ExposeReq API_COM_ExposeReq;
- PZ_COM_Stop API_COM_Stop;
- PZ_COM_GetImageMode API_COM_GetImageMode;
- PZ_COM_GetImageShiftMode API_COM_GetImageShiftMode;
- PZ_COM_GetImage API_COM_GetImage;
- PZ_COM_SetAllTpl API_COM_SetAllTpl;//Load all templates,including offset,defect and gain template.
- PZ_COM_GenOffsetTpl API_COM_GenOffsetTpl;
- PZ_COM_GenGainTpl API_COM_GenGainTpl;
- PZ_COM_GenDefectTpl API_COM_GenDefectTpl;
- PZ_COM_TplPathSet API_COM_TplPathSet;
- PZ_COM_TplPathGet API_COM_TplPathGet;
- PZ_COM_LogPathSet API_COM_LogPathSet;
- PZ_COM_GetFPType API_COM_GetFPType;
- PZ_COM_SetAedCorrKB API_COM_SetAedCorrKB;
- PZ_COM_GetDllVer API_COM_GetDllVer;
- PZ_COM_GetFPInfo API_COM_GetFPInfo;
- PZ_COM_GetFPConf API_COM_GetFPConf;
- PZ_COM_SetFPConf API_COM_SetFPConf;
- PZ_COM_GetWifiMode API_COM_GetWifiMode;
- PZ_COM_GetFPStatus API_COM_GetFPStatus;
- PZ_COM_GetFPCurStatus API_COM_GetFPCurStatus;
- PZ_COM_GetFPsn API_COM_GetFPsn;
- PZ_COM_GetFPWireState API_COM_GetFPWireState;
- PZ_COM_GetFPLicense API_COM_GetFPLicense;
- PZ_COM_AedTrigger API_COM_AedTrigger;
- PZ_COM_ResetFP API_COM_ResetFP;
- PZ_COM_GetErrNo API_COM_GetErrNo;
- PZ_COM_GetXwin API_COM_GetXwin;
- PZ_COM_SetXwin API_COM_SetXwin;
- PZ_COM_GetRBConf API_COM_GetRBConf;
- PZ_COM_SetRBConf API_COM_SetRBConf;
- };
|