123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361 |
- #pragma once
- #include "ResDataObject.h"
- #include "CCOS.Dev.FPD.AxsDM.h"
- #include "AxsFunc.h"
- #include "ZSKKCalibration.h"
- #define CALIBRATION_EVENT_COUNT 6
- #define ASSIST_EVENT_COUNT 8
- 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
- };
- enum HW_EXPOSURE_MDOE
- {
- EM_ERROR = 0,
- EM_NORMAL, //normal exposure mode
- EM_AEC, //AEC exposure mode
- EM_AEC_TIME = 2,
- EM_DE, //Dual Energy exposure mode
- EM_HDR, //HDR exposure mode
- EM_STITCHING, //Stitching mode
- EM_WARMUP,
- EM_AEC_FILTER,
- EM_AEC_KV,
- EM_QC,
- EM_VET_QUICK,
- EM_TOMO,
- EM_DDR
- };
- enum eAcqMode
- {
- ACQ_UNKNOWN = 0,
- RAD,
- AEC,//AEC
- FLU
- };
- class CAXSCtrl
- {
- public:
- CAXSCtrl();
- ~CAXSCtrl();
- bool DriverEntry(CFPDDeviceAXS* pDrvDPC, ResDataObject& Configuration);
- bool Connect(CFPDDeviceAXS* pDrvDPC, const char* szWorkPath);
- bool Disconnect();
- void EnterExamMode(int nExamMode);
- bool SetAcqMode(int nLogicMode, CFPDDeviceAXS* pDrvDPC);
- void SetSynMode(int nMode);
- bool PrepareAcquisition(CFPDDeviceAXS* pDrvDPC);
- bool SelectExamMode(int nLogicMode, CFPDDeviceAXS* pDrvDPC);
- bool StartAcquisition(CFPDDeviceAXS* pDrvDPC);
- bool StopAcquisition(CFPDDeviceAXS* pDrvDPC);
- bool ActiveCalibration(CFPDDeviceAXS* pDrvDPC, CCOS_CALIBRATION_TYPE eType);
- bool PrepareCalibration(CFPDDeviceAXS* pDrvDPC);
- bool StartCalibration(CFPDDeviceAXS* pDrvDPC);
- bool StopCalibration(CFPDDeviceAXS* pDrvDPC);
- bool ResetDetector(CFPDDeviceAXS* pDrvDPC);
- bool SetReferenceNum(int nReferenceNum);
- bool GetCalibrationStep(int nCalibCurrentCalibrationRound, int nCalibrationRounds, int nCalibCurrentExposureIndex, int nExposureNumCurrentRound);
- bool AcceptCalibration();
- bool RejectCalibration();
- bool AbortCalibration();
- bool SaveCalibrationFile();
- bool CompleteCalibration(CFPDDeviceAXS* pDrvDPC);
- bool NotifyCalibrationTime(int nDetectorID = -1);
- void SetCalibMode(CCOS_CALIBRATION_MODE eCalibMode);
- CCOS_CALIBRATION_TYPE GetCAXSCtrlCalibType();
- PZDPC_State GetPZDPCState();
- int GetCalImagesLeftCount();//厂商校正时获取剩余需要曝光的次数
- void eventCallback(PEGASUS_EventType myEvent, PEGASUS_ErrorCode err, void* pContext);
- void multiEventCallback(PEGASUS_MultiEventType myEvent, PEGASUS_ErrorCode err, int sequenceId, int imageIndex);
- private:
- //探测器信息
- 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;
- }
- };
- map<CFPDDeviceAXS*, int>* m_pDPC2PanelID;
- map<int, CFPDDeviceAXS*>* m_pPanelID2DPC;
- CPanelStatus* m_pStPanelStatus[3];//探测器信息 内部还有自己的FPDConfig 注意赋值(为了以后连接多个板子用)
- int m_nPanelCount; //探测器数量
- std::string m_strWorkPath; //保存工作路径,用于加载SDK和配置
- int m_nCurrentPanelID;
- ResDataObject m_objFPDConfig; //保存DPC模块下发的配置
- std::string m_strTplDarkPath; // references\serialnumber\dark
- std::string m_strTplFloodPath; // references\serialnumber\flood
- PZDPC_State m_ePZDPCstate; //DPC或ctrl模块当前处于什么状态
- bool m_bHavePreview;//是否有预览图
- int m_nImageMode;//图像类型
- int m_nAecImageWidth;//预览图宽
- int m_nAecImageHeight;//预览图高
- int m_nAecImageSize;//宽(22)*高(28)*像素大小(4)=2464
- int m_nAecImageBits;//AEC图像位数--------------
- int m_nAecPixelSize;//像素大小(用来计算图像占用多少字节)默认4
- int m_nRawImgWidth; //原始图像宽
- int m_nRawImgHeight; //原始图像高
- int m_nRawImageSize;//宽(2816)*高(3650)*像素大小(2)= 20556800
- int m_nRawImageBits;//原始图图像位数-----------------
- int m_nRawPixelSize;//像素大小(用来计算图像占用多少字节)默认2
- int m_nLeftOffset;//左侧裁剪长度
- int m_nTopOffset;//上边裁剪长度
- int m_nRightOffset;//右侧裁剪长度
- int m_nBottomOffset;//下边裁剪长度-----------------
- int m_nImageWidth;//有效图像宽
- int m_nImageHeight;//有效图像高
- int m_nImageSize;//宽(2816)*高(3584)*像素大小(2)= 20185088
- int m_nImageBits;//有效图图像位数----------------
- int m_nImagePixelSize;//像素大小(用来计算图像占用多少字节)默认2
- WORD* m_pAecImgBuffer;//预览图buffer
- WORD* m_pRawImgBuffer; //原始图buffer
- WORD* m_pImgBuffer; //有效图像buffer
- int m_nPixelPitch;
- int m_nSequenceId;//图像序列ID
- int m_nImageIndex;//有几张图像需要恢复
- int m_nSaveRaw; //0:不存; 1:预览图; 2:raw图; 4:实际尺寸图像;
- int m_nExamMode; //记录工作界面
- CCOS_CALIBRATION_MODE m_nCalibrationMode;//校正模式 0-ZSKK 1-OTHER
- CCOS_CALIBRATION_TYPE m_eType; // 记录当前校正类型
- PZ_CALIBRATION_State m_eCalState;//探测器校正状态
- bool m_bCalibrationOver; // true 正常结束校正(校正路程走完) false 异常结束校正(流程没走完就结束)
- //切换平板需要重置初始值
- PEGASUS_State m_detectorState;//探测器状态
- CZSKKCalibrationCtrl* m_pZSKKCalib;
- string m_strPanelType; //探测器类型。命名方式截取自config_Pixrad路径下的ini文件,以Detector3543EZe.ini为例,m_strPanelType=3543EZe
- string m_strSerialNumber;//探测器SN
- bool m_bLoadedSDK; //true 已经加载了SDK,避免重复调用,主要用于ReInit流程
- bool m_bInitializedSDK; //true 已经init了SDK,避免重复调用,主要用于ReInit流程
- ResDataObject m_ModeConfig;
- int m_nCalibrationRounds;//总的校正轮数
- int m_nCalibCurrentCalibrationRound;//当前处于的校正轮数
- int m_nExposureNumCurrentRound;//当前校正轮数需要曝光的总次数
- int m_nCalibCurrentExposureIndex;//当前校正轮数第几次曝光
- bool m_bOnlyHaveFpd;//当前环境是否只有探测器一个真实设备并且处于AED同步模式,其他设备是demo的 1-是 0-否 默认否
- PEGASUS_Context m_context;
- eAcqMode m_nCurrentAcqMode; //记录探测器当前采集模式
- PEGASUS_TargetFilter m_targetFilter;
- PEGASUS_Image m_ResultImage;
- bool m_bReadyForExp;//探测器是否ready
- bool m_bChangeAcqProperties;//探测器切换采集模式是否成功
- UINT_PTR m_nTimerHardWare;//定时获取平板参数
- bool m_bShutDownFlag;//是否调用了shutdown接口
- bool m_bTimeOutFlag;//是否曝光超时
- LogicClient* m_pAcqUnitCient; // CCOS/DEVICE/Detector/+/+/+/Notify/#
- //end
- HMODULE m_hPZSDKModule; //SDK module
- HANDLE m_hRespond;//等待探测器响应时使用
- bool m_bExitGetInfoThread;//退出获取探测器信息线程的标志
- HANDLE m_hDetectorInfoThread;//探测器信息获取线程,例如温度
- bool m_bExitFpdScanThread;//退出辅助线程的标志
- //辅助线程相关
- HANDLE m_hFPDScanThread;
- HANDLE m_hStopScanEvent;
- HANDLE m_hAecImgEvent;
- HANDLE m_hCorrectedImgEvent;
- HANDLE m_hXWinOnEvent;
- HANDLE m_hInitFPDEvent;
- HANDLE m_hReInitEvent;
- HANDLE m_hRecoverImage;
- HANDLE m_hArrayEvent[ASSIST_EVENT_COUNT];
- //end
- bool m_bExitCalibrationThread;//退出校正线程的标志
- //校正线程以及相应事件
- HANDLE m_hCalibrationThread;
- HANDLE m_hStopCalibEvent; //退出校正线程
- HANDLE m_hPZMStartOffset; //调用api,开始采集暗场图
- HANDLE m_hPZMInOffset; //调用api 停止采集暗场图
- HANDLE m_hPZMStartGain; //调用api,开始采集亮场图
- HANDLE m_hPZMInGain; //调用api,停止采集亮场图
- HANDLE m_hEndCalibEvent;//结束校正 可能是正常结束,可能是异常结束,正常结束就重新生成校正文件,异常结束就重新加载之前的校正文件
- HANDLE m_hPZMCalibration[CALIBRATION_EVENT_COUNT];
- //end
- bool LoadSdkDll();
- PEGASUS_ErrorCode InitSDK();
- bool LoadZskkMap();
- PEGASUS_ErrorCode GetDetectorInfo();
- static DWORD __stdcall onFPDScanThread(PVOID pvoid);
- void OnProcessAecImg();
- void OnProcessCorrectedImg();
- void OnProcessInitFPD();
- void OnReInitFPD();
- void OnRecoverImage();
- void OnProcessGenNotify();
- 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);
- int CropImageMargin(LPVOID pDstData, int& nDstWidth, int& nDstHeight,
- LPVOID pScrData, int nSrcWidth, int nSrcHeight, int nBits,
- int nLeftMargin, int nTopMargin, int nRightMargin, int nBottomMargin);
- bool TestError(PEGASUS_ErrorCode nRet, const char* szFuncName = "Func");
- bool WaitRespond(int nTimeOut = 65000, const char* szPosition = "");
- void StopWaiting(const char* szPosition = "");
- bool SetFPDTplPath();
- void SetPZDPCState(PZDPC_State ePZDPCstate);
- void GetConfigParam();
- bool StartContinuousAcquisition();
- void ShowExposureParam(PEGASUS_ExposureData& expData);
- bool ChangeAcqProperties(int nAcqMode);
- static DWORD __stdcall OnGetFpdInfo(PVOID pvoid);
- //回调
- 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);
-
- AXS_PEGASUS_RegisterProgressionCallback API_PEGASUS_RegisterProgressionCallback;
- AXS_PEGASUS_Initialize API_PEGASUS_Initialize;
- AXS_PEGASUS_QuickInitialize API_PEGASUS_QuickInitialize;
- AXS_PEGASUS_Shutdown API_PEGASUS_Shutdown;//并没有断开连接,只是进入了低功耗模式
- AXS_PEGASUS_LoadContext API_PEGASUS_LoadContext;
- AXS_PEGASUS_DetailedInformation API_PEGASUS_DetailedInformation;
- AXS_PEGASUS_SystemDetailedInformation API_PEGASUS_SystemDetailedInformation;
- AXS_PEGASUS_Information API_PEGASUS_Information;
- AXS_PEGASUS_CalibrationInformation API_PEGASUS_CalibrationInformation;
- AXS_PEGASUS_GetCalibrationInformation API_PEGASUS_GetCalibrationInformation;
- AXS_PEGASUS_GetCalibrationInformationUsingType API_PEGASUS_GetCalibrationInformationUsingType;
- AXS_PEGASUS_IsReadyForExposure API_PEGASUS_IsReadyForExposure;
- AXS_PEGASUS_Acquire API_PEGASUS_Acquire;
- AXS_PEGASUS_AbortAcquire API_PEGASUS_AbortAcquire;
- AXS_PEGASUS_StartContinuousAcquisition API_PEGASUS_StartContinuousAcquisition;
- //AXS_PEGASUS_StartContinuousAcquisitionEx API_PEGASUS_StartContinuousAcquisitionEx;//EX是厂商为了向后兼容加的,我们用不带EX的函数就行
- AXS_PEGASUS_ChangeContinuousAcquisitionProperties API_PEGASUS_ChangeContinuousAcquisitionProperties;
- //AXS_PEGASUS_ChangeContinuousAcquisitionPropertiesEx API_PEGASUS_ChangeContinuousAcquisitionPropertiesEx;
- AXS_PEGASUS_GetContinuousAcquisitionProperties API_PEGASUS_GetContinuousAcquisitionProperties;
- //AXS_PEGASUS_GetContinuousAcquisitionPropertiesEx API_PEGASUS_GetContinuousAcquisitionPropertiesEx;
- AXS_PEGASUS_OverrideTargetFilter API_PEGASUS_OverrideTargetFilter;
- AXS_PEGASUS_GetAecImage API_PEGASUS_GetAecImage;
- AXS_PEGASUS_GetCorrectedImage API_PEGASUS_GetCorrectedImage;
- AXS_PEGASUS_GetInformationOfFirstAvailableImage API_PEGASUS_GetInformationOfFirstAvailableImage;
- AXS_PEGASUS_StartSingleAcquisition API_PEGASUS_StartSingleAcquisition;
- AXS_PEGASUS_PrepareForExposure API_PEGASUS_PrepareForExposure;
- AXS_PEGASUS_TriggerAcquisition API_PEGASUS_TriggerAcquisition;
- AXS_PEGASUS_RecoverImage API_PEGASUS_RecoverImage;
- //AXS_PEGASUS_RecoverImageEx API_PEGASUS_RecoverImageEx;
- AXS_PEGASUS_CancelImageRecovery API_PEGASUS_CancelImageRecovery;
- AXS_PEGASUS_RecoverLastSequenceID API_PEGASUS_RecoverLastSequenceID;
- AXS_PEGASUS_Calibrate API_PEGASUS_Calibrate;//开始GAIN校正,会回调ready事件
- //AXS_PEGASUS_CalibrateEx API_PEGASUS_CalibrateEx;
- AXS_PEGASUS_GetNbrCalImagesLeft API_PEGASUS_GetNbrCalImagesLeft;//厂商校正时获取剩余需要曝光的次数(有效曝光次数)
- AXS_PEGASUS_AbortCalibration API_PEGASUS_AbortCalibration;
- AXS_PEGASUS_AddImageToCalibration API_PEGASUS_AddImageToCalibration;//接受当前曝光
- AXS_PEGASUS_RejectCalibrationImage API_PEGASUS_RejectCalibrationImage;//拒绝当前曝光
- AXS_PEGASUS_AutoCalibrate API_PEGASUS_AutoCalibrate;
- AXS_PEGASUS_CalibrateUsingType API_PEGASUS_CalibrateUsingType;
- AXS_PEGASUS_StopComServer API_PEGASUS_StopComServer;
- AXS_PEGASUS_GetLogLevel API_PEGASUS_GetLogLevel;
- AXS_PEGASUS_SetLogLevel API_PEGASUS_SetLogLevel;
- AXS_PEGASUS_SelfTest API_PEGASUS_SelfTest;
- AXS_PEGASUS_Sleep API_PEGASUS_Sleep;
- AXS_PEGASUS_ServiceImageInformation API_PEGASUS_ServiceImageInformation;
- AXS_PEGASUS_GetServiceImage API_PEGASUS_GetServiceImage;
- AXS_PEGASUS_UpdateDefectMap API_PEGASUS_UpdateDefectMap;
- AXS_PEGASUS_GetWeakDefect API_PEGASUS_GetWeakDefect;
- AXS_PEGASUS_UpdateWeakDefect API_PEGASUS_UpdateWeakDefect;
- AXS_PEGASUS_GetErrorDescription API_PEGASUS_GetErrorDescription;
- AXS_PEGASUS_GetEventDescription API_PEGASUS_GetEventDescription;
- AXS_PEGASUS_GetMultiEventDescription API_PEGASUS_GetMultiEventDescription;
- AXS_PEGASUS_GetDebugDump API_PEGASUS_GetDebugDump;
- AXS_PEGASUS_GetDetectorTypeDescription API_PEGASUS_GetDetectorTypeDescription;
- AXS_PEGASUS_GetProductTypeDescription API_PEGASUS_GetProductTypeDescription;
- AXS_PEGASUS_GetContextCodeDescription API_PEGASUS_GetContextCodeDescription;
- AXS_PEGASUS_GetDetectorStateDescription API_PEGASUS_GetDetectorStateDescription;
- AXS_PEGASUS_GetPegasusStateDescription API_PEGASUS_GetPegasusStateDescription;
- AXS_PEGASUS_GetLogLevelCodeDescription API_PEGASUS_GetLogLevelCodeDescription;
- AXS_PEGASUS_GetSelfTestTypeDescription API_PEGASUS_GetSelfTestTypeDescription;
- AXS_PEGASUS_GetTargetFilterTypeDescription API_PEGASUS_GetTargetFilterTypeDescription;
- AXS_PEGASUS_GetFocusTypeDescription API_PEGASUS_GetFocusTypeDescription;
- AXS_PEGASUS_GetServiceImageTypeDescription API_PEGASUS_GetServiceImageTypeDescription;
- AXS_PEGASUS_GetPixelFormatDescription API_PEGASUS_GetPixelFormatDescription;
- AXS_PEGASUS_GetDefectTypeDescription API_PEGASUS_GetDefectTypeDescription;
- AXS_PEGASUS_GetCalibrationTypeDescription API_PEGASUS_GetCalibrationTypeDescription;
- AXS_PEGASUS_GetAvailableContext API_PEGASUS_GetAvailableContext;
- AXS_PEGASUS_Entry API_PEGASUS_Entry;
- AXS_PEGASUS_Exit API_PEGASUS_Exit;
- AXS_PEGASUS_TerminateAcquisition API_PEGASUS_TerminateAcquisition;
- };
|