123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- // KonicaObject.h: CKonicaObject 的声明
- #pragma once
- #include "resource.h" // 主符号
- #include "KonicaCom_i.h"
- #include "_IKonicaObjectEvents_CP.h"
- #include "KonicaInterface.h"
- #include <string>
- #include "Include/AerosdkDefine.h"
- #include "Include/AerosdkError.h"
- #include "Include/AerosdkStruct.h"
- #include "Include/AerosdkFunction.h"
- #include "CShareMemManager.h"
- #include <queue>
- #include <mutex>
- #if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
- #error "Windows CE 平台(如不提供完全 DCOM 支持的 Windows Mobile 平台)上无法正确支持单线程 COM 对象。定义 _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA 可强制 ATL 支持创建单线程 COM 对象实现并允许使用其单线程 COM 对象实现。rgs 文件中的线程模型已被设置为“Free”,原因是该模型是非 DCOM Windows CE 平台支持的唯一线程模型。"
- #endif
- using namespace ATL;
- using namespace std;
- typedef enum _Sync_Mode {
- SYNC_MANUAL = 0,
- SYNC_SOFTWARE = 1,
- SYNC_HARDWARE = 2, //带ZSKK同步盒的硬同步
- SYNC_AED = 3,
- SYNC_HARDWARE_DIRECT = 4, //探测器、发生器直连的硬同步
- SYNC_MAX = 5,
- }SYNC_MODE;
- // CKonicaObject
- class ATL_NO_VTABLE CKonicaObject :
- public CComObjectRootEx<CComSingleThreadModel>,
- public CComCoClass<CKonicaObject, &CLSID_KonicaObject>,
- public IConnectionPointContainerImpl<CKonicaObject>,
- public CProxy_IKonicaObjectEvents<CKonicaObject>,
- public IDispatchImpl<IKonicaObject, &IID_IKonicaObject, &LIBID_KonicaComLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
- {
- public:
- CKonicaObject();
- ~CKonicaObject();
- DECLARE_REGISTRY_RESOURCEID(106)
- BEGIN_COM_MAP(CKonicaObject)
- COM_INTERFACE_ENTRY(IKonicaObject)
- COM_INTERFACE_ENTRY(IDispatch)
- COM_INTERFACE_ENTRY(IConnectionPointContainer)
- END_COM_MAP()
- BEGIN_CONNECTION_POINT_MAP(CKonicaObject)
- CONNECTION_POINT_ENTRY(__uuidof(_IKonicaObjectEvents))
- END_CONNECTION_POINT_MAP()
- DECLARE_PROTECT_FINAL_CONSTRUCT()
- HRESULT FinalConstruct()
- {
- return S_OK;
- }
- void FinalRelease()
- {
- }
- //void TriggerEvent(int nEventType, int nParam, WORD* pImageBuffer, int nBufferSize);
- void CallBackEvent(int nType, unsigned int uintParam, char* pstrPanelId, int nXgboxNo);
- bool TestError(int nRet, const char* szFuncName = "Func", bool bShowTrue = true);
- void Initialize();
- bool WriteNotifyMessageToShareMemory(int nEventType, long nStartPosition, int nParam, WORD* pImageBuffer, int nBufferSize);
- void SaveRawFunc(WORD* pInImg, char* strFileName, int nImgWidth, int nImgHeight);
- bool WaitRespond(int nTimeOut = 30000, const char* szAction = "");
- void StopWaiting(const char* szAction = "");
- string GetStrEventType(int nEventType);
- string GetStrPanelStatus(int nPanelStatus);
- bool ImageResend(int nImageNo);
- bool ImageDelete(int nImageNo);
- public:
- //组件对外提供的接口
- STDMETHOD(LoadDLL)(BSTR strSdkPath);
- STDMETHOD(SetPanelType)(BSTR strPanelType);
- //STDMETHOD(SetCallBack)(ICallBackObject* pCallBack);
- //STDMETHOD(ReleaseCallBack)();
- STDMETHOD(OpenSdk)();
- STDMETHOD(OpenPanel)();
- STDMETHOD(OpenXgBox)(int nXgBoxNo);
- STDMETHOD(CloseSdk)();
- STDMETHOD(ClosePanel)();
- STDMETHOD(CloseXgBox)();
- STDMETHOD(SetPanelResolution)(int nResolution);
- STDMETHOD(GetPanelResolution)(int* pResolution);
- STDMETHOD(GetImageSize)(int nSizeMode, int nResolution, int* pWidth, int* pHeight);
- STDMETHOD(GetPanelSettingInfo)(CHAR* strPanelID, int* nPanelSize);
- STDMETHOD(GetPanelVersionInfo)(unsigned char* pDllVersion, unsigned char* pAllVersion, unsigned char* pFwComnBootVersion, unsigned char* pFwComnVersion, unsigned char* pFwPowerBootVersion, unsigned char* pFwPowerVersion, unsigned char* pFpgaVersion);
- STDMETHOD(GetPanelConservationInfo)(unsigned int* pShootCount);
- STDMETHOD(GetCradleConservationInfo)(int* pConnectCount);
- STDMETHOD(StartExposureSequenceIt)(int nXgBoxNo,int nImageNo,int nSyncMode,int nIntegrationTime);
- STDMETHOD(GetPanelStatusInfo)(int* pPanelStatus);
- STDMETHOD(CancelExposureSequence)(int nImageNo);
- STDMETHOD(SetSyncMode)(int nSyncMode);
- STDMETHOD(GetPanelBatteryInfo)(int* pBatteryValue, int* pBatteryStatus);
- STDMETHOD(GetPanelSignalInfo)(int* pSignalStrength);
- STDMETHOD(GetQueueData)(int* pMessageType);
- STDMETHOD(CheckImageEx)(int* pImageNo, int* pResolution);
-
- private:
- std::queue<int> m_queue;
- std::mutex mtx;
- CShareMem* m_pDataBuffer;
- ICallBackObject* m_pCallBackObject;
- StAerosdkLogInfo m_stLogInfo;
- char strAeroSDKini[MAX_PATH] = { 0 };
- char strPanelLog[MAX_PATH] = { 0 };
- char strXGBOXLog[MAX_PATH] = { 0 };
- char strECBLog[MAX_PATH] = { 0 };
- string m_strSdkPath;
- string m_strPanelType;
- int m_nXgboxNo;
- int m_nSyncMode;
- bool m_bOpenSdk;
- bool m_bConnect;
- bool m_bConnectXgbox;
- int m_nDetectorStatus;
- int m_nImageNo;
- int m_nPreImgWidth;
- int m_nPreImgHeight;
- int m_nRawImgWidth;
- int m_nRawImgHeight;
- WORD* m_pPreImgBuffer1; //预览图buffer
- WORD* m_pPreImgBuffer2; //预览图buffer
- WORD* m_pRawImgBuffer; //原始图buffer
- HANDLE m_hRespond;//用于等待某个状态的到来或者某个动作的完成
- int m_nResolution;//当前分辨率
- bool m_bHaveImageInDetector;//探测器内是否有图像
- };
- OBJECT_ENTRY_AUTO(__uuidof(KonicaObject), CKonicaObject)
|