KonicaObject.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. // KonicaObject.h: CKonicaObject 的声明
  2. #pragma once
  3. #include "resource.h" // 主符号
  4. #include "KonicaCom_i.h"
  5. #include "_IKonicaObjectEvents_CP.h"
  6. #include "KonicaInterface.h"
  7. #include <string>
  8. #include "Include/AerosdkDefine.h"
  9. #include "Include/AerosdkError.h"
  10. #include "Include/AerosdkStruct.h"
  11. #include "Include/AerosdkFunction.h"
  12. #include "CShareMemManager.h"
  13. #include <queue>
  14. #include <mutex>
  15. #if defined(_WIN32_WCE) && !defined(_CE_DCOM) && !defined(_CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA)
  16. #error "Windows CE 平台(如不提供完全 DCOM 支持的 Windows Mobile 平台)上无法正确支持单线程 COM 对象。定义 _CE_ALLOW_SINGLE_THREADED_OBJECTS_IN_MTA 可强制 ATL 支持创建单线程 COM 对象实现并允许使用其单线程 COM 对象实现。rgs 文件中的线程模型已被设置为“Free”,原因是该模型是非 DCOM Windows CE 平台支持的唯一线程模型。"
  17. #endif
  18. using namespace ATL;
  19. using namespace std;
  20. typedef enum _Sync_Mode {
  21. SYNC_MANUAL = 0,
  22. SYNC_SOFTWARE = 1,
  23. SYNC_HARDWARE = 2, //带ZSKK同步盒的硬同步
  24. SYNC_AED = 3,
  25. SYNC_HARDWARE_DIRECT = 4, //探测器、发生器直连的硬同步
  26. SYNC_MAX = 5,
  27. }SYNC_MODE;
  28. // CKonicaObject
  29. class ATL_NO_VTABLE CKonicaObject :
  30. public CComObjectRootEx<CComSingleThreadModel>,
  31. public CComCoClass<CKonicaObject, &CLSID_KonicaObject>,
  32. public IConnectionPointContainerImpl<CKonicaObject>,
  33. public CProxy_IKonicaObjectEvents<CKonicaObject>,
  34. public IDispatchImpl<IKonicaObject, &IID_IKonicaObject, &LIBID_KonicaComLib, /*wMajor =*/ 1, /*wMinor =*/ 0>
  35. {
  36. public:
  37. CKonicaObject();
  38. ~CKonicaObject();
  39. DECLARE_REGISTRY_RESOURCEID(106)
  40. BEGIN_COM_MAP(CKonicaObject)
  41. COM_INTERFACE_ENTRY(IKonicaObject)
  42. COM_INTERFACE_ENTRY(IDispatch)
  43. COM_INTERFACE_ENTRY(IConnectionPointContainer)
  44. END_COM_MAP()
  45. BEGIN_CONNECTION_POINT_MAP(CKonicaObject)
  46. CONNECTION_POINT_ENTRY(__uuidof(_IKonicaObjectEvents))
  47. END_CONNECTION_POINT_MAP()
  48. DECLARE_PROTECT_FINAL_CONSTRUCT()
  49. HRESULT FinalConstruct()
  50. {
  51. return S_OK;
  52. }
  53. void FinalRelease()
  54. {
  55. }
  56. //void TriggerEvent(int nEventType, int nParam, WORD* pImageBuffer, int nBufferSize);
  57. void CallBackEvent(int nType, unsigned int uintParam, char* pstrPanelId, int nXgboxNo);
  58. bool TestError(int nRet, const char* szFuncName = "Func", bool bShowTrue = true);
  59. void Initialize();
  60. bool WriteNotifyMessageToShareMemory(int nEventType, long nStartPosition, int nParam, WORD* pImageBuffer, int nBufferSize);
  61. void SaveRawFunc(WORD* pInImg, char* strFileName, int nImgWidth, int nImgHeight);
  62. bool WaitRespond(int nTimeOut = 30000, const char* szAction = "");
  63. void StopWaiting(const char* szAction = "");
  64. string GetStrEventType(int nEventType);
  65. string GetStrPanelStatus(int nPanelStatus);
  66. bool ImageResend(int nImageNo);
  67. bool ImageDelete(int nImageNo);
  68. public:
  69. //组件对外提供的接口
  70. STDMETHOD(LoadDLL)(BSTR strSdkPath);
  71. STDMETHOD(SetPanelType)(BSTR strPanelType);
  72. //STDMETHOD(SetCallBack)(ICallBackObject* pCallBack);
  73. //STDMETHOD(ReleaseCallBack)();
  74. STDMETHOD(OpenSdk)();
  75. STDMETHOD(OpenPanel)();
  76. STDMETHOD(OpenXgBox)(int nXgBoxNo);
  77. STDMETHOD(CloseSdk)();
  78. STDMETHOD(ClosePanel)();
  79. STDMETHOD(CloseXgBox)();
  80. STDMETHOD(SetPanelResolution)(int nResolution);
  81. STDMETHOD(GetPanelResolution)(int* pResolution);
  82. STDMETHOD(GetImageSize)(int nSizeMode, int nResolution, int* pWidth, int* pHeight);
  83. STDMETHOD(GetPanelSettingInfo)(CHAR* strPanelID, int* nPanelSize);
  84. STDMETHOD(GetPanelVersionInfo)(unsigned char* pDllVersion, unsigned char* pAllVersion, unsigned char* pFwComnBootVersion, unsigned char* pFwComnVersion, unsigned char* pFwPowerBootVersion, unsigned char* pFwPowerVersion, unsigned char* pFpgaVersion);
  85. STDMETHOD(GetPanelConservationInfo)(unsigned int* pShootCount);
  86. STDMETHOD(GetCradleConservationInfo)(int* pConnectCount);
  87. STDMETHOD(StartExposureSequenceIt)(int nXgBoxNo,int nImageNo,int nSyncMode,int nIntegrationTime);
  88. STDMETHOD(GetPanelStatusInfo)(int* pPanelStatus);
  89. STDMETHOD(CancelExposureSequence)(int nImageNo);
  90. STDMETHOD(SetSyncMode)(int nSyncMode);
  91. STDMETHOD(GetPanelBatteryInfo)(int* pBatteryValue, int* pBatteryStatus);
  92. STDMETHOD(GetPanelSignalInfo)(int* pSignalStrength);
  93. STDMETHOD(GetQueueData)(int* pMessageType);
  94. STDMETHOD(CheckImageEx)(int* pImageNo, int* pResolution);
  95. private:
  96. std::queue<int> m_queue;
  97. std::mutex mtx;
  98. CShareMem* m_pDataBuffer;
  99. ICallBackObject* m_pCallBackObject;
  100. StAerosdkLogInfo m_stLogInfo;
  101. char strAeroSDKini[MAX_PATH] = { 0 };
  102. char strPanelLog[MAX_PATH] = { 0 };
  103. char strXGBOXLog[MAX_PATH] = { 0 };
  104. char strECBLog[MAX_PATH] = { 0 };
  105. string m_strSdkPath;
  106. string m_strPanelType;
  107. int m_nXgboxNo;
  108. int m_nSyncMode;
  109. bool m_bOpenSdk;
  110. bool m_bConnect;
  111. bool m_bConnectXgbox;
  112. int m_nDetectorStatus;
  113. int m_nImageNo;
  114. int m_nPreImgWidth;
  115. int m_nPreImgHeight;
  116. int m_nRawImgWidth;
  117. int m_nRawImgHeight;
  118. WORD* m_pPreImgBuffer1; //预览图buffer
  119. WORD* m_pPreImgBuffer2; //预览图buffer
  120. WORD* m_pRawImgBuffer; //原始图buffer
  121. HANDLE m_hRespond;//用于等待某个状态的到来或者某个动作的完成
  122. int m_nResolution;//当前分辨率
  123. bool m_bHaveImageInDetector;//探测器内是否有图像
  124. };
  125. OBJECT_ENTRY_AUTO(__uuidof(KonicaObject), CKonicaObject)