123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- #pragma once
- #include "ResDataObject.h"
- #include "CCOS.Dev.FPD.UltrasonicProbeDR.h"
- #include "UltrasonicInterface.h"
- //#include "CaptureWriterInterface.h"
- //#include "DataElementInterface.h"
- #include "ramzed_sdk.h"
- enum eDetectorStatus
- {
- DetectorStatus_NotIni,
- DetectorStatus_NotConn,
- DetectorStatus_Sleep,
- DetectorStatus_Standby,
- DetectorStatus_Work,
- DetectorStatus_Acquire,
- DetectorStatus_Offset,
- DetectorStatus_XrayCalibration,
- };
- class UltrasonicProbe
- {
- //探测器信息
- 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:
- UltrasonicProbe();
- ~UltrasonicProbe();
- bool DriverEntry(FPDDeviceUltrasonicProbe* pDrvDPC, ResDataObject& Configuration);
- bool Connect(FPDDeviceUltrasonicProbe* pDrvDPC, const char* szWorkPath);
- bool Disconnect();
- bool PrepareAcquisition(FPDDeviceUltrasonicProbe* pDrvDPC);
- bool StartAcquisition(FPDDeviceUltrasonicProbe* pDrvDPC);
- bool StopAcquisition(FPDDeviceUltrasonicProbe* pDrvDPC);
- bool ResetDetector(FPDDeviceUltrasonicProbe* pDrvDPC);
- bool SelectExamMode(int nLogicMode, FPDDeviceUltrasonicProbe* pDrvDPC);
- //bool ActiveCalibration(FPDDeviceUltrasonicProbe* pDrvDPC, CCOS_CALIBRATION_TYPE eType);
- //bool PrepareCalibration(FPDDeviceUltrasonicProbe* pDrvDPC);
- //bool StartCalibration(FPDDeviceUltrasonicProbe* pDrvDPC);
- //bool StopCalibration(FPDDeviceUltrasonicProbe* pDrvDPC);
- //bool SetReferenceNum(int nReferenceNum);
- //bool AcceptCalibration();
- //bool RejectCalibration();
- //bool SaveCalibrationFile();
- //bool GetCalibrationStep(int nCalibCurrentCalibrationRound, int nCalibrationRounds, int nCalibCurrentExposureIndex, int nExposureNumCurrentRound);
- //bool CompleteCalibration(FPDDeviceUltrasonicProbe* pDrvDPC);
- //bool GetCalibrationTime(int nDetectorID = -1);
- //RET_STATUS AbortCalibration(FPDDeviceUltrasonicProbe* pDrvDPC);
- //CCOS_CALIBRATION_TYPE GetUltrasonicProbeCtrlCalibType();
- DPC_State GetPZDPCState();
- //超声相关
- RET_STATUS SetFreeze(int nFreeze);
- RET_STATUS SwitchProbe(int nProbeType);//切换探头
- RET_STATUS SwitchProbeMode(int nProbeMode);//切换模式
- RET_STATUS SetBGain(int nGain);
- RET_STATUS SetBDepth(int nDepth);
- RET_STATUS SetBFrequency(float fFrequency);
- RET_STATUS SetBFocus(int nFocus);
- RET_STATUS SetBHarmonic(int nHarmonic);
- RET_STATUS SetBPower(int nPower);
- RET_STATUS SetBDynamicRange(int nRange);
- RET_STATUS GetBDepth(int& nDepth, float& fDepthCm);
- RET_STATUS GetBFrequency(float& fFrequency);
- RET_STATUS GetBGain(int& nGain);
- RET_STATUS GetBFocus(int& nFocus, float& fFocusCm);
- RET_STATUS GetBDynamicRange(int& nRange);
- RET_STATUS SetCRoi(int x1, int x2, int y1, int y2);
- RET_STATUS SetCGain(int nGain);
- RET_STATUS SetPostLevel(int nLevel);
- RET_STATUS SetMirror(int nMirror);
- RET_STATUS SetCFrequency(float fFrequency);
- RET_STATUS SetCSpeedWallFilter(int nSpeedWallFilter);
- RET_STATUS SetCRangeWallFilter(int nRangeWallFilter);
- RET_STATUS SetCPersistence(int nPersistence);
- RET_STATUS SetCLinearAngle(int nAngle);
- RET_STATUS SetCPrf(int nPrf);
- RET_STATUS GetCFrequency(float& fFrequency);
- RET_STATUS GetCGain(int& nGain);
- RET_STATUS GetCPrf(int& nPrf);
- RET_STATUS GetCLinearAngle(int& nAngle);
- //调节图像亮暗的
- RET_STATUS SetTgc1(int nTgc);
- RET_STATUS SetTgc2(int nTgc);
- RET_STATUS SetTgc3(int nTgc);
- RET_STATUS SetTgc4(int nTgc);
- RET_STATUS SetTgc5(int nTgc);
- RET_STATUS SetTgc6(int nTgc);
- RET_STATUS SetTgc7(int nTgc);
- RET_STATUS SetTgc8(int nTgc);
- private:
- map<FPDDeviceUltrasonicProbe*, int>* m_pDPC2PanelID;
- map<int, FPDDeviceUltrasonicProbe*>* m_pPanelID2DPC;
- int m_nPanelCount; //探测器数量
- std::string m_strWorkPath; //保存工作路径,用于加载SDK和配置
- int m_nCurrentPanelID;
- ResDataObject m_objFPDConfig; //保存DPC模块下发的配置
- CPanelStatus* m_pStPanelStatus[3];//探测器信息 内部还有自己的FPDConfig 注意赋值(为了以后连接多个板子用)
- DPC_State m_ePZDPCstate; //ctrl模块当前处于什么状态
- int m_nRawImgWidth; //SDK反馈的图像宽
- int m_nRawImgHeight; //SDK反馈的图像高
- int m_nLeftOffset;//左侧裁剪长度
- int m_nTopOffset;//上边裁剪长度
- int m_nRightOffset;//右侧裁剪长度
- int m_nBottomOffset;//下边裁剪长度
- int m_nImageWidth;//裁剪后的图像宽
- int m_nImageHeight;//裁剪后的图像高
- unsigned char* m_pRawImgBuffer24;//24位图buffer
- unsigned char* m_pRawImgBuffer32; //32位图buffer
- unsigned char* m_pImgBuffer; //处理后的图像buffer
- int m_nImgBits;
- int m_nPixelPitch;
- int m_nSaveRaw;
- int m_nFrameID;
- //bool m_bFirstInIDLE; //true 第一次收到探测器IDLE状态,主要用于校正流程
- //CCOS_CALIBRATION_TYPE m_eType; // 记录当前校正类型
- //int m_nOffsetImg; // 校正时暗场图数量
- //int m_nGainImg; // 校正时亮场图数量
- //bool m_bCalibrationOver; // true 当前阶段校正完成;false 当前阶段校正未完成
- //int m_nCalibrationRounds;//校正轮数
- bool m_bWired; //是否为有线连接
- eDetectorStatus m_eStatus; // 探测器状态
- //CCOS_CALIBRATION_MODE m_nCalibrationMode;//校正模式
- //int m_nCaliFailedCount; //记录增益校正失败次数,超过一定次数自动停止校正
- string m_strPanelType; //探测器类型。命名方式截取自config_Pixrad路径下的ini文件,以Detector3543EZe.ini为例,m_strPanelType=3543EZe
- bool m_bLoadedSDK; //true 已经加载了SDK,避免重复调用,主要用于ReInit流程
- bool m_bInitializedSDK; //true 已经init了SDK,避免重复调用,主要用于ReInit流程
- bool m_bConnectWaiting;//正在连接中
- int m_nCurrentMode; //记录探测器当前application mode
- 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校正曝光的总次数
- bool m_bOnlyHaveFpd;//当前环境是否只有探测器一个真实设备并且处于AED同步模式,其他设备是demo的 1-是 0-否 默认否
- ramzed_sdk* m_pRzsdk;//通过SDK的instance获取的类指针
- //test
- /*CCOS_Kernel::CCaptureWriter* m_pCaptureWriter;
- CCOS_DataElement::CDataElement* m_pMatrix;
- CCOS_DataElement::CDataElementGroup* m_pSenderGroup;
- CCOS_DataElement::CDataMgr* m_pDataMgr;*/
- bool m_bFirstImage;
- HMODULE m_hSdkModule; //SDK module
- HANDLE m_hRespond;
- HANDLE m_hFPDScanThread;
- HANDLE m_hStopScanEvent;
- HANDLE m_hProcessImgEvent;
- HANDLE m_hXWinOnEvent;
- HANDLE m_hInitFPDEvent;
- HANDLE m_hReInitEvent;
- HANDLE m_hArrayEvent[5];
- bool LoadSDK();
- bool InitSDK();
- int ConnectDetector();
- BOOL OnProcessLink(unsigned char probe_type);
- BOOL OnProcessDown();
- static DWORD __stdcall onFPDScanThread(PVOID pvoid);
- void OnProcessImg(unsigned char* frame_msg);
- void OnProcessInitFPD();
- void OnReInitFPD();
- void StopThread();
- void SaveRawFunc(unsigned char* pInImg, DWORD nFrameSize);
- bool SaveRawImage(const char* pImgName, const WORD* pRawImg, int nWidth, int nHeight);
- bool TestError(int nRet, const char* szFuncName = "Func");
- bool WaitRespond(int nTimeOut = 65000, const char* szPosition = "");
- void StopWaiting(const char* szPosition = "");
- bool SetFPDTplPath();
- void NotifyXWindowOn();
- void NotifyXWindowOff();
- void GetConnectionMode();
- void SetPZDPCState(DPC_State ePZDPCstate);
- void NotifyDetectorInfo();
- int CropImageMargin(LPVOID pDstData, int& nDstWidth, int& nDstHeight,
- LPVOID pScrData, int nSrcWidth, int nSrcHeight, int nBits,
- int nLeftMargin, int nTopMargin, int nRightMargin, int nBottomMargin);
- static void FuncLinkUpCallBack(unsigned char probe_type);
- static void FuncLinkDownCallBack(unsigned char probe_type);
- static void FuncImageCallBack(unsigned char* frame_msg);
- 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);
-
- };
|