From b354c153b0074e5d54371bc05b12edbe8e613a19 Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 월, 09 8월 2021 10:50:06 +0900
Subject: [PATCH] Ongoing50 #3561 CF AOI Review Align 카메라 끊김 현상 조치

---
 ReviewHistory/ReveiwHistory/DitGlassRawClient.cpp |  223 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 223 insertions(+), 0 deletions(-)

diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawClient.cpp b/ReviewHistory/ReveiwHistory/DitGlassRawClient.cpp
new file mode 100644
index 0000000..c37e6e5
--- /dev/null
+++ b/ReviewHistory/ReveiwHistory/DitGlassRawClient.cpp
@@ -0,0 +1,223 @@
+#include "StdAfx.h"
+#include "DitGlassRawClient.h"
+
+CDitGlassRawClient::CDitGlassRawClient(void)
+: m_mxCommandProcess(FALSE, MUTEX_RAWMESSENGER)
+{
+	m_hMapBasicInfo = NULL;
+	m_hMapGlassData = NULL;
+
+	m_pGlassRawInfo = NULL;
+	m_pGlassRawData = NULL;
+
+	m_nLastCommandIdx = -1;
+}
+
+CDitGlassRawClient::~CDitGlassRawClient(void)
+{
+	if (m_hMapBasicInfo!=NULL)
+	{
+		::UnmapViewOfFile(m_hMapBasicInfo);
+		m_pGlassRawInfo = NULL;
+	}
+
+	if (m_hMapGlassData!=NULL)
+	{
+		::UnmapViewOfFile(m_hMapGlassData);
+		m_pGlassRawData = NULL;
+	}
+}
+
+BOOL CDitGlassRawClient::ConnectServer()
+{
+	if(isConnect()) return TRUE;
+
+	if(ConnectGlassRawInfo() == FALSE)
+	{
+		return FALSE;
+	}
+
+	if(ConnectGlassRawData() == FALSE)
+	{
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+BOOL CDitGlassRawClient::ConnectGlassRawInfo()
+{
+	if(m_hMapBasicInfo == NULL)
+	{
+		m_hMapBasicInfo = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_BASICINFO);
+
+		if (m_hMapBasicInfo)
+		{
+			m_pGlassRawInfo = (_grmDitGlassRawInfo*)::MapViewOfFile(m_hMapBasicInfo, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(_grmDitGlassRawInfo));
+		}
+
+		if(m_hMapBasicInfo == NULL || m_pGlassRawInfo == NULL)
+		{
+			if (m_hMapBasicInfo!=NULL)
+			{
+				::UnmapViewOfFile(m_hMapBasicInfo);
+				m_pGlassRawInfo = NULL;
+			}
+			m_pGlassRawInfo = NULL;
+			return FALSE;
+		}
+	}
+
+	return TRUE;
+}
+
+BOOL CDitGlassRawClient::ConnectGlassRawData()
+{
+	SIZE_T nGlassRawSharedSize = m_pGlassRawInfo->m_nGlassRawDataSize;
+
+	if(m_hMapGlassData == NULL)
+	{
+		m_hMapGlassData = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_GLASSDATA);
+
+		if (m_hMapGlassData)
+		{
+			m_pGlassRawData = (char*)::MapViewOfFile(m_hMapGlassData, FILE_MAP_ALL_ACCESS, 0, 0, nGlassRawSharedSize);
+		}
+
+		if(m_hMapGlassData == NULL || m_pGlassRawData == NULL)
+		{
+			if (m_hMapGlassData != NULL)
+			{
+				::UnmapViewOfFile(m_hMapGlassData);
+				m_pGlassRawData = NULL;
+			}
+			m_pGlassRawData = NULL;
+			return FALSE;
+		}
+	}
+	m_pGlassData  = (_grmGlassData*)&m_pGlassRawData[m_pGlassRawInfo->m_nGlassDataPoint];
+	m_pBlockData  = (_grmBlockData*)&m_pGlassRawData[m_pGlassRawInfo->m_nBlockDataPoint];
+	m_pCellData   = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint];
+	m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint];
+	m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint];
+
+	return TRUE;
+}
+
+BOOL CDitGlassRawClient::WriteAOIRawFile()
+{
+	return SetCommand(grcWriteRaw);
+}
+
+BOOL CDitGlassRawClient::WriteAOIRawBinFile()
+{
+	return SetCommand(grcWriteBin);
+}
+
+BOOL CDitGlassRawClient::ReadAOIRawBinFile()
+{
+	return SetCommand(grcReadBin);
+}
+
+BOOL CDitGlassRawClient::WriteReviewRawBinFile()
+{
+	return SetCommand(grcReviewWriteBIn);
+}
+
+BOOL CDitGlassRawClient::SetCommand( emGlassRawCommand nCmd )
+{
+	if(m_pGlassRawInfo == NULL) return FALSE;
+
+	m_mxCommandProcess.Lock();
+
+	int nCmdId = (m_pGlassRawInfo->m_nCommandIdxWrite+1) % COMMAND_MAXCOUNT;
+
+	if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)//占쏙옙占쏙옙 占쏙옙占쌕는곤옙占쏙옙 占쏙옙큘占쏙옙 占쏙옙占쌜곤옙 占싼뱄옙占쏙옙 占쏙옙占쌀다는곤옙!! [占쏙옙占쏙옙占쏙옙 2018/11/12]
+	{
+		m_pGlassRawInfo->m_nCommandIdxRead++;//占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占� 占싹놂옙占쏙옙 占쏙옙占쏙옙占싼댐옙. [占쏙옙占쏙옙占쏙옙 2018/11/12]
+	}
+
+	m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nCommand = (short)nCmd;
+	m_pGlassRawInfo->m_nCommandBuffer[nCmdId].strParam;
+	m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nResult = -1; //-1占쏙옙占쏙옙占쏙옙, 0占쏙옙占쏙옙, 1占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/13]
+
+
+	m_nLastCommandIdx = m_pGlassRawInfo->m_nCommandIdxWrite = nCmdId;
+
+	m_mxCommandProcess.Unlock();
+
+	return TRUE;
+}
+
+emAOIProcStep CDitGlassRawClient::GetProcessStep()
+{
+	if(isConnect() == FALSE) return APS_None;
+
+	if(m_pGlassRawInfo)
+	{
+		return m_pGlassRawInfo->m_ClientProcStep;
+	}
+
+	return APS_None;
+}
+
+BOOL CDitGlassRawClient::SetGlassLoading()
+{
+	if(isConnect() == FALSE) return FALSE;
+	m_pGlassRawInfo->m_ClientProcStep = APS_GlassLoading;
+	m_pGlassData->m_bStackRead = FALSE;
+	return SetCommand(grcSequenceGlassLoading);
+}
+
+BOOL CDitGlassRawClient::SetInspectEnd()
+{
+	if(isConnect() == FALSE) return FALSE;
+	m_pGlassRawInfo->m_ClientProcStep = APS_InspectEnd;
+	return SetCommand(grcSequenceInspectEnd);
+}
+
+BOOL CDitGlassRawClient::SetReviewStart()
+{
+	if(isConnect() == FALSE) return FALSE;
+	m_pGlassRawInfo->m_ClientProcStep = APS_ReviewStart;
+	return SetCommand(grcSequenceReviewStart);
+}
+
+BOOL CDitGlassRawClient::SetReviewEnd()
+{
+	if(isConnect() == FALSE) return FALSE;
+	m_pGlassRawInfo->m_ClientProcStep = APS_ReviewEnd;
+	return SetCommand(grcSequenceReviewEnd);
+}
+
+BOOL CDitGlassRawClient::SetReviewComtomize()
+{
+	if(isConnect() == FALSE) return FALSE;
+	m_pGlassRawInfo->m_ClientProcStep = APS_CustomReviewRead;
+	return SetCommand(grcSequenceCustomReviewDataRead);
+}
+
+void CDitGlassRawClient::RemoveReviewDefects()
+{
+	int nDefectNum = m_pGlassData->m_nDefectNum;
+	int nRightDefectNum = 0;//占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占십울옙 占쏙옙치占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙
+	int nDefectDeleteNum = 0;
+	for(int i=nDefectNum-1; i>=0; i--)
+	{
+		if(m_pDefectData[i].m_ReviewDefect.m_nPlanType > 0 &&
+			m_pDefectData[i].m_ReviewDefect.m_nPlanType != 1000	)
+		{
+			nDefectDeleteNum++;
+			if(nRightDefectNum)
+			{
+				memcpy(&m_pDefectData[i], &m_pDefectData[i+1], sizeof(_grmDefectData)*nRightDefectNum);
+			}
+		}
+		else
+		{
+			nRightDefectNum++;
+		}
+	}
+
+	m_pGlassData->m_nDefectNum = nDefectNum-nDefectDeleteNum;
+}

--
Gitblit v1.9.3