KonicaObject2.h 4.8 KB

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