From 039bde2990b5b015232b5da9ff4df0cf1d88ddac Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 금, 12 11월 2021 18:13:05 +0900
Subject: [PATCH] Ongoing60 #3708 CF AOI Review 전설비 AFM 세팅 모드 기능 추가

---
 ReviewSystem/ReviewSystem/DlgHardwareSettingMode.cpp   |  177 ++++++++++++++++++++++
 ReviewSystem/ReviewSystem/ReviewSystem.rc              |   44 +++++
 ReviewSystem/ReviewSystem/ReviewSystem.vcxproj.filters |    6 
 ReviewSystem/ReviewSystem/DlgLogo.h                    |    4 
 ReviewSystem/ReviewSystem/ReviewInterface.cpp          |   54 ++++++
 ReviewSystem/ReviewSystem/DlgLogo.cpp                  |    9 +
 ReviewSystem/ReviewSystem/ObserverInterface.h          |    3 
 ReviewSystem/ReviewSystem/ReviewSystemView.h           |    8 
 ReviewSystem/ReviewSystem/ReviewInterface.h            |   23 ++
 ReviewSystem/ReviewSystem/ReviewSystemView.cpp         |   11 +
 ReviewSystem/ReviewSystem/stdafx.h                     |    1 
 ReviewSystem/ReviewSystem/resource.h                   |   17 +
 ReviewSystem/ReviewSystem/DlgHardwareSettingMode.h     |   65 ++++++++
 ReviewSystem/ReviewSystem/ReviewSystem.vcxproj         |    2 
 ReviewSystem/ReviewSystem/ObserverInterface.cpp        |    7 
 15 files changed, 422 insertions(+), 9 deletions(-)

diff --git a/ReviewSystem/ReviewSystem/DlgHardwareSettingMode.cpp b/ReviewSystem/ReviewSystem/DlgHardwareSettingMode.cpp
new file mode 100644
index 0000000..c06e299
--- /dev/null
+++ b/ReviewSystem/ReviewSystem/DlgHardwareSettingMode.cpp
@@ -0,0 +1,177 @@
+癤�// DlgHardwareSettingMode.cpp: 援ы쁽 �뙆�씪
+//
+
+#include "stdafx.h"
+#include "ReviewSystem.h"
+#include "DlgHardwareSettingMode.h"
+#include "afxdialogex.h"
+
+
+// DlgHardwareSettingMode ���솕 �긽�옄
+
+IMPLEMENT_DYNAMIC(DlgHardwareSettingMode, CDialogEx)
+
+DlgHardwareSettingMode::DlgHardwareSettingMode(CWnd* pParent /*=nullptr*/)
+	: CDialogEx(IDD_DLG_HARDWARE_SETTING_MODE, pParent)
+{
+
+}
+
+DlgHardwareSettingMode::~DlgHardwareSettingMode()
+{
+}
+
+void DlgHardwareSettingMode::DoDataExchange(CDataExchange* pDX)
+{
+	CDialogEx::DoDataExchange(pDX);
+	DDX_Control(pDX, IDC_BUTTON_REVIEW_CAM_CONNECT, m_ctrlReviewCamConnect);
+	DDX_Control(pDX, IDC_BUTTON_REVIEW_CAM_DISCONNECT, m_ctrlReviewCamDisConnect);
+	DDX_Control(pDX, IDC_BUTTON_ALIGN_CAM_CONNECT, m_ctrlAlignCamConnect);
+	DDX_Control(pDX, IDC_BUTTON_ALIGN_CAM_DISCONNECT, m_ctrlAlignCamDisConnect);
+	DDX_Control(pDX, IDC_BUTTON_AFM_CONNECT, m_ctrlAFMConnect);
+	DDX_Control(pDX, IDC_BUTTON_AFM_DISCONNECT, m_ctrlAFMDisConnect);
+}
+
+
+BEGIN_MESSAGE_MAP(DlgHardwareSettingMode, CDialogEx)
+	ON_WM_CTLCOLOR()
+
+	ON_BN_CLICKED(IDC_BUTTON_REVIEW_CAM_CONNECT, &DlgHardwareSettingMode::OnBnClickedButtonReviewCamConnect)
+	ON_BN_CLICKED(IDC_BUTTON_REVIEW_CAM_DISCONNECT, &DlgHardwareSettingMode::OnBnClickedButtonReviewCamDisconnect)
+	ON_BN_CLICKED(IDC_BUTTON_ALIGN_CAM_CONNECT, &DlgHardwareSettingMode::OnBnClickedButtonAlignCamConnect)
+	ON_BN_CLICKED(IDC_BUTTON_ALIGN_CAM_DISCONNECT, &DlgHardwareSettingMode::OnBnClickedButtonAlignCamDisconnect)
+	ON_BN_CLICKED(IDC_BUTTON_AFM_CONNECT, &DlgHardwareSettingMode::OnBnClickedButtonAfmConnect)
+	ON_BN_CLICKED(IDC_BUTTON_AFM_DISCONNECT, &DlgHardwareSettingMode::OnBnClickedButtonAfmDisconnect)
+END_MESSAGE_MAP()
+
+
+// DlgHardwareSettingMode 硫붿떆吏� 泥섎━湲�
+
+
+HBRUSH DlgHardwareSettingMode::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
+{
+	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
+
+	// TODO:  �뿬湲곗꽌 DC�쓽 �듅�꽦�쓣 蹂�寃쏀빀�땲�떎.
+	pDC->SetBkColor(RGB(25, 25, 25));
+
+	// TODO:  湲곕낯媛믪씠 �쟻�떦�븯吏� �븡�쑝硫� �떎瑜� 釉뚮윭�떆瑜� 諛섑솚�빀�땲�떎.
+	return hbr;
+}
+
+
+BOOL DlgHardwareSettingMode::OnInitDialog()
+{
+	CDialogEx::OnInitDialog();
+	SetBackgroundColor(RGB(255, 255, 210));
+	// TODO:  �뿬湲곗뿉 異붽� 珥덇린�솕 �옉�뾽�쓣 異붽��빀�땲�떎.
+	CString strFont = _T("MS Sans Serif");
+	m_ctrlReviewCamConnect.SetFontStatic(strFont, 9, RGB(240, 240, 240), FS_CENTER | FS_BOLD);
+	m_ctrlReviewCamConnect.SetBackground(RGB(10, 10, 10));
+	m_ctrlReviewCamConnect.SetWindowText(_T("CONNECT"));
+
+	m_ctrlReviewCamDisConnect.SetFontStatic(strFont, 9, RGB(240, 240, 240), FS_CENTER | FS_BOLD);
+	m_ctrlReviewCamDisConnect.SetBackground(RGB(10, 10, 10));
+	m_ctrlReviewCamDisConnect.SetWindowText(_T("DISCONNECT"));
+
+	m_ctrlAlignCamConnect.SetFontStatic(strFont, 9, RGB(240, 240, 240), FS_CENTER | FS_BOLD);
+	m_ctrlAlignCamConnect.SetBackground(RGB(10, 10, 10));
+	m_ctrlAlignCamConnect.SetWindowText(_T("CONNECT"));
+
+	m_ctrlAlignCamDisConnect.SetFontStatic(strFont, 9, RGB(240, 240, 240), FS_CENTER | FS_BOLD);
+	m_ctrlAlignCamDisConnect.SetBackground(RGB(10, 10, 10));
+	m_ctrlAlignCamDisConnect.SetWindowText(_T("DISCONNECT"));
+
+	m_ctrlAFMConnect.SetFontStatic(strFont, 9, RGB(240, 240, 240), FS_CENTER | FS_BOLD);
+	m_ctrlAFMConnect.SetBackground(RGB(10, 10, 10));
+	m_ctrlAFMConnect.SetWindowText(_T("CONNECT"));
+
+	m_ctrlAFMDisConnect.SetFontStatic(strFont, 9, RGB(240, 240, 240), FS_CENTER | FS_BOLD);
+	m_ctrlAFMDisConnect.SetBackground(RGB(10, 10, 10));
+	m_ctrlAFMDisConnect.SetWindowText(_T("DISCONNECT"));
+
+	return TRUE;  // return TRUE unless you set the focus to a control
+				  // �삁�쇅: OCX �냽�꽦 �럹�씠吏��뒗 FALSE瑜� 諛섑솚�빐�빞 �빀�땲�떎.
+}
+
+
+
+void DlgHardwareSettingMode::OnBnClickedButtonReviewCamConnect()
+{
+	// TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎.
+	if (m_pDHM2P->IDHM2P_InitReviewCamera())
+	{
+		m_pDHM2P->IDHM2P_ConnectReviewCamera();
+		m_ctrlReviewCamDisConnect.SetBackground(RGB(10, 10, 10));
+		m_ctrlReviewCamConnect.SetBackground(RGB(10, 255, 10));
+		g_pLog->DisplayMessage(_T("[HWSettingMode] ReviewCam Connect Success"));
+	}
+	else
+	{
+		g_pLog->DisplayMessage(_T("[HWSettingMode] ReviewCam Connect Fail!"));
+	}
+}
+
+
+void DlgHardwareSettingMode::OnBnClickedButtonReviewCamDisconnect()
+{
+	// TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎.
+	m_pDHM2P->IDHM2P_DisconnectReviewCamera();
+	m_pDHM2P->IDHM2P_DeinitReviewCamera();
+	m_pDHM2P->IDHM2P_ClearCameraControlObserverVector();
+	m_ctrlReviewCamConnect.SetBackground(RGB(10, 10, 10));
+	m_ctrlReviewCamDisConnect.SetBackground(RGB(200, 0, 0));
+	g_pLog->DisplayMessage(_T("[HWSettingMode] ReviewCam DisConnect Success"));
+}
+
+
+void DlgHardwareSettingMode::OnBnClickedButtonAlignCamConnect()
+{
+	// TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎.
+	if (m_pDHM2P->IDHM2P_InitAlignCamera())
+	{
+		m_ctrlAlignCamDisConnect.SetBackground(RGB(10, 10, 10));
+		m_ctrlAlignCamConnect.SetBackground(RGB(10, 255, 10));
+		g_pLog->DisplayMessage(_T("[HWSettingMode] AlignCamera Connect Success"));
+	}
+	else
+	{
+		g_pLog->DisplayMessage(_T("[HWSettingMode] AlignCamera Connect Fail!"));
+	}
+}
+
+
+void DlgHardwareSettingMode::OnBnClickedButtonAlignCamDisconnect()
+{
+	// TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎.
+	m_pDHM2P->IDHM2P_DeinitAlignCamera();
+	m_ctrlAlignCamConnect.SetBackground(RGB(10, 10, 10));
+	m_ctrlAlignCamDisConnect.SetBackground(RGB(200, 0, 0));
+	g_pLog->DisplayMessage(_T("[HWSettingMode] AlignCamera DisConnect Success"));
+}
+
+
+void DlgHardwareSettingMode::OnBnClickedButtonAfmConnect()
+{
+	// TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎.
+	if (m_pDHM2P->IDHM2P_InitAFMControl())
+	{
+		m_ctrlAFMDisConnect.SetBackground(RGB(10, 10, 10));
+		m_ctrlAFMConnect.SetBackground(RGB(10, 255, 10));
+		g_pLog->DisplayMessage(_T("[HWSettingMode] Afm Connect Success"));
+	}
+	else
+	{
+		g_pLog->DisplayMessage(_T("[HWSettingMode] Afm Connect Fail!"));
+	}
+}
+
+
+void DlgHardwareSettingMode::OnBnClickedButtonAfmDisconnect()
+{
+	// TODO: �뿬湲곗뿉 而⑦듃濡� �븣由� 泥섎━湲� 肄붾뱶瑜� 異붽��빀�땲�떎.
+	m_pDHM2P->IDHM2P_DeinitAFMControl();
+	m_ctrlAFMConnect.SetBackground(RGB(10, 10, 10));
+	m_ctrlAFMDisConnect.SetBackground(RGB(200, 0, 0));
+	g_pLog->DisplayMessage(_T("[HWSettingMode] Afm DisConnect Success"));
+}
diff --git a/ReviewSystem/ReviewSystem/DlgHardwareSettingMode.h b/ReviewSystem/ReviewSystem/DlgHardwareSettingMode.h
new file mode 100644
index 0000000..5ba8f84
--- /dev/null
+++ b/ReviewSystem/ReviewSystem/DlgHardwareSettingMode.h
@@ -0,0 +1,65 @@
+癤�#include "CHCommonControls/FontStatic.h"
+#pragma once
+
+interface IDialogHardwareSettingMode2Parent
+{
+	//virtual BOOL DAC2P_GetAlignImage(int nType, int nIndex, CCHImageData* pImageData) = 0;
+
+	// review camera
+	virtual int		IDHM2P_InitReviewCamera() = 0;
+	virtual void	IDHM2P_DeinitReviewCamera() = 0;
+	virtual int		IDHM2P_ConnectReviewCamera() = 0;
+	virtual void	IDHM2P_DisconnectReviewCamera() = 0;
+	virtual void	IDHM2P_ClearCameraControlObserverVector() = 0;
+
+	// AFM Control
+	virtual int		IDHM2P_InitAFMControl() = 0;
+	virtual void	IDHM2P_DeinitAFMControl() = 0;
+
+	// align camera
+	virtual int		IDHM2P_InitAlignCamera() = 0;
+	virtual void	IDHM2P_DeinitAlignCamera() = 0;
+
+};
+
+// DlgHardwareSettingMode ���솕 �긽�옄
+
+class DlgHardwareSettingMode : public CDialogEx
+{
+	DECLARE_DYNAMIC(DlgHardwareSettingMode)
+
+public:
+	DlgHardwareSettingMode(CWnd* pParent = nullptr);   // �몴以� �깮�꽦�옄�엯�땲�떎.
+	virtual ~DlgHardwareSettingMode();
+
+// ���솕 �긽�옄 �뜲�씠�꽣�엯�땲�떎.
+#ifdef AFX_DESIGN_TIME
+	enum { IDD = IDD_DLG_HARDWARE_SETTING_MODE };
+#endif
+
+protected:
+	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 吏��썝�엯�땲�떎.
+
+public:
+	void SetDHM2P(IDialogHardwareSettingMode2Parent* pDHM2P) { m_pDHM2P = pDHM2P; }
+
+protected:
+	IDialogHardwareSettingMode2Parent* m_pDHM2P;
+
+	DECLARE_MESSAGE_MAP()
+public:
+	afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
+	virtual BOOL OnInitDialog();
+	afx_msg void OnBnClickedButtonReviewCamConnect();
+	afx_msg void OnBnClickedButtonReviewCamDisconnect();
+	afx_msg void OnBnClickedButtonAlignCamConnect();
+	afx_msg void OnBnClickedButtonAlignCamDisconnect();
+	afx_msg void OnBnClickedButtonAfmConnect();
+	afx_msg void OnBnClickedButtonAfmDisconnect();
+	CFontStatic m_ctrlReviewCamConnect;
+	CFontStatic m_ctrlReviewCamDisConnect;
+	CFontStatic m_ctrlAlignCamConnect;
+	CFontStatic m_ctrlAlignCamDisConnect;
+	CFontStatic m_ctrlAFMConnect;
+	CFontStatic m_ctrlAFMDisConnect;
+};
diff --git a/ReviewSystem/ReviewSystem/DlgLogo.cpp b/ReviewSystem/ReviewSystem/DlgLogo.cpp
index c6e4f90..0efb761 100644
--- a/ReviewSystem/ReviewSystem/DlgLogo.cpp
+++ b/ReviewSystem/ReviewSystem/DlgLogo.cpp
@@ -49,6 +49,7 @@
 ON_STN_CLICKED(IDC_STATIC_LOGO, &CDlgLogo::OnStnClickedStaticLogo)
 ON_BN_CLICKED(IDC_BUTTON5, &CDlgLogo::OnBnClickedButton5)
 ON_BN_CLICKED(IDC_BUTTON6, &CDlgLogo::OnClickedButton6)
+ON_BN_CLICKED(IDC_BUTTON_HW_SETTING_MODE, &CDlgLogo::OnBnClickedButtonHwSettingMode)
 END_MESSAGE_MAP()
 
 
@@ -298,3 +299,11 @@
 	// 	g_pLog->DisplayMessage(_T("[ReviewProcessor] History Open"));
 	/*< LYW 20211109 - #3662 Delete End >*/
 }
+
+
+void CDlgLogo::OnBnClickedButtonHwSettingMode()
+{
+	m_pDL2P->IDL2P_OpenHWSettingTool();
+	g_pLog->DisplayMessage(_T("[ReviewProcessor] HW SettingMode Start"));
+	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
+}
diff --git a/ReviewSystem/ReviewSystem/DlgLogo.h b/ReviewSystem/ReviewSystem/DlgLogo.h
index b36ef27..b141036 100644
--- a/ReviewSystem/ReviewSystem/DlgLogo.h
+++ b/ReviewSystem/ReviewSystem/DlgLogo.h
@@ -9,6 +9,9 @@
 	virtual void	IDL2P_DisplayMessage(const TCHAR* lpstrFormat, ...) = 0;
 	virtual void   IDL2P_OpenOffSetTool() = 0;
 	virtual void   IDL2P_OpenHistoryTool() = 0;
+	/*< LYW 20211112 - #3708 ADD Start >*/
+	virtual void   IDL2P_OpenHWSettingTool() = 0;
+	/*< LYW 20211112 - #3708 ADD End >*/
 };
 
 interface
@@ -68,4 +71,5 @@
 	afx_msg void OnBnClickedButton5();
 	afx_msg void OnClickedButton6();
 	CButton m_ctrlHistory;
+	afx_msg void OnBnClickedButtonHwSettingMode();
 };
diff --git a/ReviewSystem/ReviewSystem/ObserverInterface.cpp b/ReviewSystem/ReviewSystem/ObserverInterface.cpp
index 911075a..adcf1fb 100644
--- a/ReviewSystem/ReviewSystem/ObserverInterface.cpp
+++ b/ReviewSystem/ReviewSystem/ObserverInterface.cpp
@@ -25,6 +25,13 @@
 	m_obsUpdateReviewProcessStatus.clear();
 }
 
+void CObserverInterface::ClearCameraControlObserverVector()
+{
+	m_obsUpdateCameraControl.clear();
+}
+
+
+
 // Map Option
 void CObserverInterface::UpdateDefectFilter(const SDefectFilter* pDefectFilter)
 {
diff --git a/ReviewSystem/ReviewSystem/ObserverInterface.h b/ReviewSystem/ReviewSystem/ObserverInterface.h
index 3608d75..36e5307 100644
--- a/ReviewSystem/ReviewSystem/ObserverInterface.h
+++ b/ReviewSystem/ReviewSystem/ObserverInterface.h
@@ -10,6 +10,9 @@
 	CObserverInterface(void);
 	virtual ~CObserverInterface(void);
 	void	ClearAllObserverVector();
+	/*< LYW 20211112 - #3708 ADD Start >*/
+	void	ClearCameraControlObserverVector();
+	/*< LYW 20211112 - #3708 ADD End >*/
 
 	// Map Option
 	void	UpdateDefectFilter(const SDefectFilter* pDefectFilter);
diff --git a/ReviewSystem/ReviewSystem/ReviewInterface.cpp b/ReviewSystem/ReviewSystem/ReviewInterface.cpp
index cdc9778..369a290 100644
--- a/ReviewSystem/ReviewSystem/ReviewInterface.cpp
+++ b/ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -1183,6 +1183,10 @@
 			BOOL bConnection = pCameraControlReview->GetConnected();
 			pConnectionStatus->m_vecReviewCameraStatus.push_back(bConnection);
 
+			/*< LYW 20211112 - #3708 ADD Start >*/
+			g_pLog->DisplayMessage(_T("[ReviewCamera] %d is connected"), nModuleIndex);
+			/*< LYW 20211112 - #3708 ADD End >*/
+
 			nModuleIndex++; // module status++
 		} // for HeaderIdx
 	} // for nGantryIdx
@@ -8615,6 +8619,56 @@
 	m_pView->ShowHistoryTool();
 }
 
+void CReviewInterface::IDL2P_OpenHWSettingTool()
+{
+	m_pView->ShowHWSettingMode();
+}
+
+int CReviewInterface::IDHM2P_InitReviewCamera()
+{
+	return InitReviewCamera();
+}
+
+void CReviewInterface::IDHM2P_DeinitReviewCamera()
+{
+	DeinitReviewCamera();
+}
+
+int CReviewInterface::IDHM2P_ConnectReviewCamera()
+{
+	return ConnectReviewCamera();
+}
+
+void CReviewInterface::IDHM2P_DisconnectReviewCamera()
+{
+	DisconnectReviewCamera();
+}
+
+void CReviewInterface::IDHM2P_ClearCameraControlObserverVector()
+{
+	ClearCameraControlObserverVector();
+}
+
+int CReviewInterface::IDHM2P_InitAFMControl()
+{
+	return InitAFMControl();
+}
+
+void CReviewInterface::IDHM2P_DeinitAFMControl()
+{
+	DeinitAFMControl();
+}
+
+int CReviewInterface::IDHM2P_InitAlignCamera()
+{
+	return InitAlignCamera();
+}
+
+void CReviewInterface::IDHM2P_DeinitAlignCamera()
+{
+	DeinitAlignCamera();
+}
+
 //181203
 BOOL CReviewInterface::IRP2P_SaveDefectMap(const CString& strPath)
 {
diff --git a/ReviewSystem/ReviewSystem/ReviewInterface.h b/ReviewSystem/ReviewSystem/ReviewInterface.h
index b2249db..68d13a0 100644
--- a/ReviewSystem/ReviewSystem/ReviewInterface.h
+++ b/ReviewSystem/ReviewSystem/ReviewInterface.h
@@ -46,6 +46,7 @@
 #include "DlgCommand.h"
 #include "DlgReviewPopUp.h"
 #include "DlgReviewHistoryTool.h"
+#include "DlgHardwareSettingMode.h"
 
 #include "CHTotalPitchMeasure/TotalPitchMeasure.h"
 #include "CHResultFileManager/StringRaw.h"
@@ -107,7 +108,8 @@
 							public IDialogReviewPopUP2Parent,
 	                        public IDiagnosisProcessor2Parent,
 							public IDialogReviewOffSet2Parent,
-							public IDialogReviewHistory2Parent
+							public IDialogReviewHistory2Parent,
+							public IDialogHardwareSettingMode2Parent
 {
 public:
 	CReviewInterface(void);
@@ -516,6 +518,25 @@
 	virtual void	IDL2P_DisplayMessage(const TCHAR* lpstrFormat, ...);
 	virtual void   IDL2P_OpenOffSetTool();
 	virtual void   IDL2P_OpenHistoryTool();
+	/*< LYW 20211112 - #3708 ADD Start >*/
+	virtual void IDL2P_OpenHWSettingTool();
+	/*< LYW 20211112 - #3708 ADD End >*/
+
+	// dialog HardwareSettingMode 2 Parent
+	// review camera
+	virtual int		IDHM2P_InitReviewCamera();
+	virtual void	IDHM2P_DeinitReviewCamera();
+	virtual int		IDHM2P_ConnectReviewCamera();
+	virtual void	IDHM2P_DisconnectReviewCamera();
+	virtual void	IDHM2P_ClearCameraControlObserverVector();
+
+	// AFM Control
+	virtual int		IDHM2P_InitAFMControl();
+	virtual void	IDHM2P_DeinitAFMControl();
+
+	// align camera
+	virtual int		IDHM2P_InitAlignCamera();
+	virtual void	IDHM2P_DeinitAlignCamera();
 
 protected:
 	// Motor Control command
diff --git a/ReviewSystem/ReviewSystem/ReviewSystem.rc b/ReviewSystem/ReviewSystem/ReviewSystem.rc
index fc957db..26e8d80 100644
--- a/ReviewSystem/ReviewSystem/ReviewSystem.rc
+++ b/ReviewSystem/ReviewSystem/ReviewSystem.rc
@@ -509,13 +509,14 @@
 STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU
 FONT 8, "MS Shell Dlg", 400, 0, 0x1
 BEGIN
-    CONTROL         IDD_DLG_TAB_LOG,IDC_STATIC_LOGO,"Static",SS_BITMAP | NOT WS_VISIBLE,3,4,97,90
+    CONTROL         IDD_DLG_TAB_LOG,IDC_STATIC_LOGO,"Static",SS_BITMAP | NOT WS_VISIBLE,3,5,97,90
     PUSHBUTTON      "Left",IDC_BUTTON_LEFT,5,68,28,14
     PUSHBUTTON      "Center",IDC_BUTTON_CENTER,39,68,27,14
     PUSHBUTTON      "Right",IDC_BUTTON_RIGHT,71,68,25,14
     CONTROL         "Reduce",IDC_CHECK_REDUCE,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | WS_TABSTOP,28,49,49,16
-    PUSHBUTTON      "OFFSET",IDC_BUTTON5,65,11,33,14
-    PUSHBUTTON      "History",IDC_BUTTON6,6,11,33,14
+    PUSHBUTTON      "OFFSET",IDC_BUTTON5,68,7,30,14
+    PUSHBUTTON      "History",IDC_BUTTON6,6,7,29,14
+    PUSHBUTTON      "H / W",IDC_BUTTON_HW_SETTING_MODE,35,7,33,14
 END
 
 IDD_DLG_RESULT_GRAPH DIALOGEX 0, 0, 409, 264
@@ -956,6 +957,30 @@
     CONTROL         "Custom1",IDC_ALIGN_GRID_ORIGIN_INFO,"MFCGridCtrl",WS_TABSTOP,7,4,233,30
 END
 
+IDD_DLG_HARDWARE_SETTING_MODE DIALOGEX 0, 0, 309, 176
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
+CAPTION "HardWare Setting Mode"
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+    DEFPUSHBUTTON   "확인",IDOK,198,155,50,14
+    PUSHBUTTON      "취소",IDCANCEL,252,155,50,14
+    GROUPBOX        "ReviewCamera",IDC_STATIC_REVIEW_CAMERA,14,14,86,103
+    GROUPBOX        "Connect",IDC_STATIC,19,25,76,39
+    GROUPBOX        "DisConnect",IDC_STATIC,19,69,76,39
+    GROUPBOX        "Align Camera",IDC_STATIC,111,14,86,103
+    GROUPBOX        "Connect",IDC_STATIC,117,25,76,39
+    GROUPBOX        "DisConnect",IDC_STATIC,117,69,76,39
+    GROUPBOX        "AFM",IDC_STATIC,207,14,86,103
+    GROUPBOX        "Connect",IDC_STATIC,213,25,76,39
+    GROUPBOX        "DisConnect",IDC_STATIC,213,69,76,39
+    PUSHBUTTON      "Connect",IDC_BUTTON_AFM_CONNECT,220,38,63,18
+    PUSHBUTTON      "DisConnect",IDC_BUTTON_AFM_DISCONNECT,220,85,63,17
+    PUSHBUTTON      "Connect",IDC_BUTTON_ALIGN_CAM_CONNECT,124,38,63,18
+    PUSHBUTTON      "DisConnect",IDC_BUTTON_ALIGN_CAM_DISCONNECT,124,84,63,18
+    PUSHBUTTON      "Connect",IDC_BUTTON_REVIEW_CAM_CONNECT,26,39,63,19
+    PUSHBUTTON      "DisConnect",IDC_BUTTON_REVIEW_CAM_DISCONNECT,26,84,63,19
+END
+
 
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -1339,6 +1364,14 @@
         TOPMARGIN, 4
         BOTTOMMARGIN, 82
     END
+
+    IDD_DLG_HARDWARE_SETTING_MODE, DIALOG
+    BEGIN
+        LEFTMARGIN, 7
+        RIGHTMARGIN, 302
+        TOPMARGIN, 7
+        BOTTOMMARGIN, 169
+    END
 END
 #endif    // APSTUDIO_INVOKED
 
@@ -1448,6 +1481,11 @@
     0
 END
 
+IDD_DLG_HARDWARE_SETTING_MODE AFX_DIALOG_LAYOUT
+BEGIN
+    0
+END
+
 
 /////////////////////////////////////////////////////////////////////////////
 //
diff --git a/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj b/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj
index 0b78cfd..42aee71 100644
--- a/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj
+++ b/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj
@@ -238,6 +238,7 @@
     <ClCompile Include="DlgGlassAndConnectionInfo.cpp" />
     <ClCompile Include="DlgGlassInfo.cpp" />
     <ClCompile Include="DlgGraph.cpp" />
+    <ClCompile Include="DlgHardwareSettingMode.cpp" />
     <ClCompile Include="DlgLog.cpp" />
     <ClCompile Include="DlgLogMessage.cpp" />
     <ClCompile Include="DlgLogo.cpp" />
@@ -332,6 +333,7 @@
     <ClInclude Include="DlgGlassAndConnectionInfo.h" />
     <ClInclude Include="DlgGlassInfo.h" />
     <ClInclude Include="DlgGraph.h" />
+    <ClInclude Include="DlgHardwareSettingMode.h" />
     <ClInclude Include="DlgLog.h" />
     <ClInclude Include="DlgLogMessage.h" />
     <ClInclude Include="DlgLogo.h" />
diff --git a/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj.filters b/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj.filters
index b117443..9174e2e 100644
--- a/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj.filters
+++ b/ReviewSystem/ReviewSystem/ReviewSystem.vcxproj.filters
@@ -276,6 +276,9 @@
     <ClCompile Include="DlgAlignHistory.cpp">
       <Filter>�냼�뒪 �뙆�씪</Filter>
     </ClCompile>
+    <ClCompile Include="DlgHardwareSettingMode.cpp">
+      <Filter>�냼�뒪 �뙆�씪</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="CameraControlAlign.h">
@@ -551,6 +554,9 @@
     <ClInclude Include="DlgAlignHistory.h">
       <Filter>�뿤�뜑 �뙆�씪</Filter>
     </ClInclude>
+    <ClInclude Include="DlgHardwareSettingMode.h">
+      <Filter>�뿤�뜑 �뙆�씪</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="res\ReviewSystem.ico">
diff --git a/ReviewSystem/ReviewSystem/ReviewSystemView.cpp b/ReviewSystem/ReviewSystem/ReviewSystemView.cpp
index 1fc9553..0df4407 100644
--- a/ReviewSystem/ReviewSystem/ReviewSystemView.cpp
+++ b/ReviewSystem/ReviewSystem/ReviewSystemView.cpp
@@ -479,6 +479,12 @@
 		m_DlgOffSetTool->Create(IDD_DLG_REVIEW_OFFSET_TOOL, this);
 		m_DlgOffSetTool->SetDDL2P(static_cast<IDialogReviewOffSet2Parent*>(pMainFrame));
 
+		/*< LYW 20211112 - #3708 ADD Start >*/
+		m_DlgHardWareSettingMode = new DlgHardwareSettingMode(this);
+		m_DlgHardWareSettingMode->Create(IDD_DLG_HARDWARE_SETTING_MODE, this);
+		m_DlgHardWareSettingMode->SetDHM2P(static_cast<IDialogHardwareSettingMode2Parent*>(pMainFrame));
+		/*< LYW 20211112 - #3708 ADD End >*/
+
 		/*< LYW 20211109 - #3662 Delete Start >*/
 		////Review HistoryTool �깮�꽦
 		//m_DlgHistoryTool = new CDlgReviewHistoryTool(this);
@@ -919,6 +925,11 @@
 	m_DlgHistoryTool->GetHistoryList();
 }
 
+void CReviewSystemView::ShowHWSettingMode()
+{
+	m_DlgHardWareSettingMode->ShowWindow(SW_SHOW);
+}
+
 //181203
 BOOL CReviewSystemView::SaveDefectMap( const CString& strPath )
 {
diff --git a/ReviewSystem/ReviewSystem/ReviewSystemView.h b/ReviewSystem/ReviewSystem/ReviewSystemView.h
index e5670a5..b6848ce 100644
--- a/ReviewSystem/ReviewSystem/ReviewSystemView.h
+++ b/ReviewSystem/ReviewSystem/ReviewSystemView.h
@@ -32,6 +32,7 @@
 #include "DlgReviewPopUp.h"
 #include "DlgReviewOffSetTool.h"
 #include "DlgReviewHistoryTool.h"
+#include "DlgHardwareSettingMode.h"
 
 class CSys_SystemManager;
 class CSys_GlassTypeManager;
@@ -100,6 +101,9 @@
 	
 	void ShowOffSetTool();
 	void ShowHistoryTool();
+	/*< LYW 20211112 - #3708 ADD Start >*/
+	void ShowHWSettingMode();
+	/*< LYW 20211112 - #3708 ADD End >*/
 	DlgReviewOffSetTool* GetReviewOffSetToolHandle() { return m_DlgOffSetTool; }
 
 	CDlgReviewHistoryTool* GetReviewHistoryToolHandle() { return m_DlgHistoryTool; }
@@ -161,7 +165,9 @@
 	BOOL					isReviewPopUp;
 	DlgReviewOffSetTool*	m_DlgOffSetTool;
 	CDlgReviewHistoryTool*	m_DlgHistoryTool;	
-	
+	/*< LYW 20211112 - #3708 ADD Start >*/
+	DlgHardwareSettingMode* m_DlgHardWareSettingMode;
+	/*< LYW 20211112 - #3708 ADD End >*/
 
 // �깮�꽦�맂 硫붿떆吏� 留� �븿�닔
 protected:
diff --git a/ReviewSystem/ReviewSystem/resource.h b/ReviewSystem/ReviewSystem/resource.h
index e2ce045..2fe97fb 100644
--- a/ReviewSystem/ReviewSystem/resource.h
+++ b/ReviewSystem/ReviewSystem/resource.h
@@ -1,6 +1,6 @@
 //{{NO_DEPENDENCIES}}
-// Microsoft Visual C++에서 생성한 포함 파일입니다.
-// ReviewSystem.rc에서 사용되고 있습니다.
+// Microsoft Visual C++�뿉�꽌 �깮�꽦�븳 �룷�븿 �뙆�씪�엯�땲�떎.
+// ReviewSystem.rc�뿉�꽌 �궗�슜�릺怨� �엳�뒿�땲�떎.
 //
 #define IDCANCEL                        2
 #define IDD_ABOUTBOX                    100
@@ -68,6 +68,7 @@
 #define IDD_DLG_DEFECT_MAP_TAB          374
 #define IDD_DLG_ALIGN_TAB               376
 #define IDB_BITMAP2                     379
+#define IDD_DLG_HARDWARE_SETTING_MODE   381
 #define IDC_RADIO1                      1001
 #define IDC_RADIO_ZOOM_LEVEL_0          1001
 #define IDC_RADIO_IMAGE_MODE_0          1001
@@ -315,6 +316,8 @@
 #define IDC_EDIT_REVIEW_PANEL_POS_Y4    1109
 #define IDC_BT_CAMERA_GRAB              1109
 #define IDC_BUTTION_TARGET_POS          1109
+#define IDC_BUTTON_HW_SETTING_MODE      1109
+#define IDC_BUTTON_AFM_CONNECT          1109
 #define IDC_GRID_ALIGN_INFO             1110
 #define IDC_EDIT_UPDATE_NOTE            1110
 #define IDC_BUTTON4                     1110
@@ -330,17 +333,22 @@
 #define IDC_EDIT_REVIEW_PANEL_POS_Y5    1111
 #define IDC_LOGIN_STATUS                1112
 #define IDC_EDIT_REVIEW_PANEL_POS_X6    1112
+#define IDC_BUTTON_AFM_DISCONNECT       1112
 #define IDC_EDIT_REVIEW_PANEL_POS_Y6    1113
+#define IDC_BUTTON_ALIGN_CAM_CONNECT    1113
 #define IDC_TAB1                        1115
 #define IDC_TAB_CTRL                    1115
 #define IDC_SELF_DIAGNOSIS_TAB_MAIN     1115
 #define IDC_GO_WSI                      1116
 #define IDC_CHECK_USE_WSI_CONTROL       1116
+#define IDC_BUTTON_ALIGN_CAM_DISCONNECT 1116
 #define IDC_CHECK4                      1117
 #define IDC_SELECT_OFFSET_ON            1117
+#define IDC_BUTTON_REVIEW_CAM_CONNECT   1117
 #define IDC_CHECK5                      1118
 #define IDC_NOT_USE_CENTER_POS          1118
 #define IDC_CHECK_USE_SIMULATION        1118
+#define IDC_BUTTON_REVIEW_CAM_DISCONNECT 1120
 #define IDC_LIST1                       1121
 #define IDC_LIST_CONTROL_DEFOCUS_LIST   1121
 #define IDC_LIST                        1121
@@ -436,6 +444,7 @@
 #define IDC_EDIT_WARN_STANDARD          1186
 #define IDC_EDIT_HARD_STANDARD          1187
 #define IDC_BUTTON_STANDARD_SAVE        1188
+#define IDC_STATIC_REVIEW_CAMERA        1189
 #define ID_INS_HOOK                     32772
 #define ID_UNINS_HOOK                   32773
 
@@ -443,9 +452,9 @@
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE        381
+#define _APS_NEXT_RESOURCE_VALUE        383
 #define _APS_NEXT_COMMAND_VALUE         32775
-#define _APS_NEXT_CONTROL_VALUE         1189
+#define _APS_NEXT_CONTROL_VALUE         1190
 #define _APS_NEXT_SYMED_VALUE           346
 #endif
 #endif
diff --git a/ReviewSystem/ReviewSystem/stdafx.h b/ReviewSystem/ReviewSystem/stdafx.h
index 3aec9fe..7f74d18 100644
--- a/ReviewSystem/ReviewSystem/stdafx.h
+++ b/ReviewSystem/ReviewSystem/stdafx.h
@@ -215,6 +215,7 @@
 #include <afxcontrolbars.h>
 #include <afxcontrolbars.h>
 #include <afxcontrolbars.h>
+#include <afxcontrolbars.h>
 
 enum MsgSystem2Rev
 {

--
Gitblit v1.9.3