From 572aebd50409d2f11183d6ebbb9d12fe9041e7a5 Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 화, 17 8월 2021 18:47:48 +0900
Subject: [PATCH] Ongoing100 #3561 CF AOI Review Align 카메라 끊김 현상 조치

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

diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp b/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp
new file mode 100644
index 0000000..e88e79b
--- /dev/null
+++ b/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp
@@ -0,0 +1,190 @@
+#include "StdAfx.h"
+#include "DitGlassRawServer.h"
+
+CDitGlassRawServer::CDitGlassRawServer(void)
+: m_mxCommandProcess(FALSE, MUTEX_RAWMESSENGER)
+{
+	m_hMapBasicInfo = NULL;
+	m_hMapGlassData = NULL;
+
+	m_pGlassRawInfo = NULL;
+	m_pGlassRawData = NULL;
+
+	m_nLastCommandIdx = -1;
+}
+
+CDitGlassRawServer::~CDitGlassRawServer(void)
+{
+	if (m_hMapBasicInfo!=NULL)
+	{
+		::UnmapViewOfFile(m_hMapBasicInfo);
+		m_pGlassRawInfo = NULL;
+	}
+
+	if (m_hMapGlassData!=NULL)
+	{
+		::UnmapViewOfFile(m_hMapGlassData);
+		m_pGlassRawData = NULL;
+	}
+}
+
+
+BOOL CDitGlassRawServer::CreateServer( int nCellNum /*= 100*/, int nDefectNum /*= 2000*/ )
+{
+	if(CreateGlassRawInfo() == FALSE)
+	{
+		return FALSE;
+	}
+
+
+	if(sizeof(_grmGlassData) != m_pGlassRawInfo->m_nSizeOfGlassData
+		|| sizeof(_grmBlockData) != m_pGlassRawInfo->m_nSizeOfBlockData
+		|| sizeof(_grmCellData) != m_pGlassRawInfo->m_nSizeOfCellData
+		|| sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfDefectData
+		|| sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfStackData
+		|| sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfRawMergeData)
+	{
+		return FALSE;
+	}
+
+	m_pGlassRawInfo->m_nGlassMaxDataNum = 1;
+	m_pGlassRawInfo->m_nBlockMaxDataNum = 1;
+	m_pGlassRawInfo->m_nCellMaxDataNum = nCellNum;
+	m_pGlassRawInfo->m_nDefectMaxDataNum = nDefectNum;
+	m_pGlassRawInfo->m_nStackMaxDataNum = nDefectNum;
+	m_pGlassRawInfo->m_nRawMergeMaxDataNum = nDefectNum;
+
+	m_pGlassRawInfo->m_nGlassRawDataSize;
+	{
+		int nDataNum = 0;
+
+		m_pGlassRawInfo->m_nGlassDataPoint = nDataNum;
+		nDataNum += m_pGlassRawInfo->m_nSizeOfGlassData + m_pGlassRawInfo->m_nSizeOfGlassData%4;
+
+		m_pGlassRawInfo->m_nBlockDataPoint = nDataNum;
+		nDataNum += m_pGlassRawInfo->m_nSizeOfBlockData + m_pGlassRawInfo->m_nSizeOfBlockData%4;
+		
+		m_pGlassRawInfo->m_nCellDataPoint = nDataNum;
+		nDataNum += (m_pGlassRawInfo->m_nSizeOfCellData + m_pGlassRawInfo->m_nSizeOfCellData%4)*nCellNum;
+		
+		m_pGlassRawInfo->m_nDefectDataPoint = nDataNum;
+		nDataNum += (m_pGlassRawInfo->m_nSizeOfDefectData + m_pGlassRawInfo->m_nSizeOfDefectData%4)*nDefectNum;
+
+		m_pGlassRawInfo->m_nStackDataPoint = nDataNum;
+		nDataNum += (m_pGlassRawInfo->m_nSizeOfStackData + m_pGlassRawInfo->m_nSizeOfStackData % 4)*nDefectNum;
+		
+		m_pGlassRawInfo->m_nRawMergeDataPoint = nDataNum;
+		nDataNum += (m_pGlassRawInfo->m_nSizeOfRawMergeData + m_pGlassRawInfo->m_nSizeOfRawMergeData % 4)*nDefectNum;
+
+		m_pGlassRawInfo->m_nGlassRawDataSize = nDataNum;
+	}
+	
+
+	if(CreateGlassRawData() == FALSE)
+	{
+		return FALSE;
+	}
+
+	return TRUE;
+}
+
+
+BOOL CDitGlassRawServer::CreateGlassRawInfo()
+{
+	if(m_hMapBasicInfo == NULL)
+	{
+		BOOL bCreateMem = TRUE;
+
+		m_hMapBasicInfo = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE
+			, 0, sizeof(_grmDitGlassRawInfo), SHAREDMEMNAME_BASICINFO);
+
+		if (::GetLastError() == ERROR_ALREADY_EXISTS)
+		{
+			m_hMapBasicInfo = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_BASICINFO);
+			bCreateMem = FALSE;
+		}
+
+		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;
+		}
+
+		//0으로 초기화
+		if(bCreateMem && m_pGlassRawInfo)
+		{
+			ZeroMemory(m_pGlassRawInfo,sizeof(_grmDitGlassRawInfo));
+			
+			m_pGlassRawInfo->m_nSizeOfGlassData  = sizeof(_grmGlassData) ;
+			m_pGlassRawInfo->m_nSizeOfBlockData =  sizeof(_grmBlockData);
+			m_pGlassRawInfo->m_nSizeOfCellData = sizeof(_grmCellData);
+			m_pGlassRawInfo->m_nSizeOfDefectData = sizeof(_grmDefectData);
+			m_pGlassRawInfo->m_nSizeOfStackData = sizeof(_grmDefectData);
+			m_pGlassRawInfo->m_nSizeOfRawMergeData = sizeof(_grmDefectData);
+
+			int bytealign = m_pGlassRawInfo->m_nSizeOfGlassData%4;
+		}
+		
+	}
+
+	
+
+	return TRUE;
+}
+
+BOOL CDitGlassRawServer::CreateGlassRawData()
+{
+	int nGlassRawSharedSize = (int)(m_pGlassRawInfo->m_nGlassRawDataSize);
+
+	if(m_hMapGlassData == NULL)
+	{
+		BOOL bCreateMem = TRUE;
+
+		m_hMapGlassData = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE
+			, 0, nGlassRawSharedSize, SHAREDMEMNAME_GLASSDATA);
+
+		if (::GetLastError() == ERROR_ALREADY_EXISTS)
+		{
+			m_hMapGlassData = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_GLASSDATA);
+			bCreateMem = FALSE;
+		}
+
+		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;
+		}
+
+		//0으로 초기화
+		if(bCreateMem && m_pGlassRawData) ZeroMemory(m_pGlassRawData,sizeof(char)*nGlassRawSharedSize);
+	}
+	
+	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];
+	m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint];
+
+	return TRUE;
+}

--
Gitblit v1.9.3