From 9c13bc5af33d28bb217995597f88fe863db42442 Mon Sep 17 00:00:00 2001
From: LYW <leeyeanwoo@diteam.co.kr>
Date: 금, 01 4월 2022 10:59:55 +0900
Subject: [PATCH] AOI RawMessnger 동기화

---
 DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp |  149 +++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 143 insertions(+), 6 deletions(-)

diff --git a/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp b/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp
index ea5f9c5..d5d79d1 100644
--- a/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp
+++ b/DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp
@@ -5,6 +5,7 @@
 #include <process.h>
 #include "DitGlassRawClient.h"
 #include "GlassRawBase.h"
+#include <sstream>
 
 #ifdef _DEBUG
 #undef THIS_FILE
@@ -47,11 +48,14 @@
 BOOL CRawResultReader::openFile(char* pGlassID)
 {
 	CString strFileName;
-	CDitGlassRawClient	GlassRawClient;
-	GlassRawClient.ConnectServer();
-	CDitGlassRawClient* pShared = &GlassRawClient;
+	
+	/*< KJG 20211208 : #3696 DEL Start >*/
+	//CDitGlassRawClient	GlassRawClient;
+	//GlassRawClient.ConnectServer();
+	//CDitGlassRawClient* pShared = &GlassRawClient;
 
-	_grmDefectData* pGrmStack;
+	//_grmDefectData* pGrmStack;
+	/*< KJG 20211208 : #3696 DEL End >*/
 
 	strFileName.Format("%s\\%s", m_strLocalPath, pGlassID);
 
@@ -59,6 +63,14 @@
 
 	if (pf == NULL)
 		return FALSE;
+		
+	/*< KJG 20211208 : #3696 ADD Start >*/
+	CDitGlassRawClient	GlassRawClient;
+	GlassRawClient.ConnectServer();
+	CDitGlassRawClient* pShared = &GlassRawClient;
+
+	_grmDefectData* pGrmStack;
+	/*< KJG 20211208 : #3696 ADD End >*/
 
 	std::vector<_grmDefectData> vecStackDefect;
 	_grmDefectData StackDefect;
@@ -77,6 +89,21 @@
 		if (strlen(buffer) <= 0 || pStr == NULL)
 			break;
 
+		/* < KJG 20220225 - #3850 ADD Start >*/ 
+		if (strncmp(buffer, "DATA PANEL", 10) == 0)
+		{
+			pReadPoint = buffer;
+			CString strtemp;
+			pReadPoint = getParsingData(pReadPoint, 4, &strtemp);
+			pReadPoint = getParsingData(pReadPoint, 5, &strtemp);
+			pReadPoint = getParsingData(pReadPoint, 5, &strtemp);
+			pReadPoint = getParsingData(pReadPoint, 27, &strtemp);
+			pReadPoint = getParsingData(pReadPoint, 20, &strtemp);
+			pReadPoint = getParsingData(pReadPoint, 20, &strtemp);
+			pReadPoint = getParsingData(pReadPoint, 10, &strtemp);
+			strncpy(pShared->GetGlassData()->m_strRawMergeStepID, strtemp.GetBuffer(0), 10 + 1); // Null 문자 떄문에 +1
+		}
+		/* < KJG 20220225 - #3850 ADD End >*/
 		if (strncmp(buffer, "DATA DEFECT", 10)) continue; 
 
 		//Defect Stack Start
@@ -125,6 +152,12 @@
 				StackDefect.m_DefectJudgement = Judge_TR;
 			else if (strtemp == "PR")
 				StackDefect.m_DefectJudgement = Judge_PR;
+			/* < KJG 20220225 - #Index ADD Start >*/ 			
+			else if (strtemp == "NG")
+				StackDefect.m_DefectJudgement = Judge_NG;
+			else if (strtemp == "ND")
+				StackDefect.m_DefectJudgement = Judge_ND;
+			/* < KJG 20220225 - #Index ADD End >*/
 			else
 				StackDefect.m_StackInfo = Stack_Unknown;
 
@@ -151,6 +184,21 @@
 			pReadPoint = getParsingData(pReadPoint, 12, &temp); // 미사용
 			pReadPoint = getParsingData(pReadPoint, 12, &temp); // 미사용
 			pReadPoint = getParsingData(pReadPoint, 12, &strtemp); // ZoneNum m_sZonePixelCount[i]
+			
+			stringstream ConvertZone(strtemp.GetBuffer(0));
+			unsigned int nZoneHexValue;
+			short sZonePixelCount[16] = { 0 };
+			ConvertZone >> std::hex >> nZoneHexValue;
+			for (int i = 0; i < 16; i++)
+			{
+				if (nZoneHexValue & 1)
+				{
+					sZonePixelCount[i] = 1;
+				}
+				nZoneHexValue = nZoneHexValue >> 1;
+			}
+			memcpy_s(StackDefect.m_sZonePixelCount, sizeof(StackDefect.m_sZonePixelCount), sZonePixelCount, sizeof(sZonePixelCount));
+
 			pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_DefectSizeType
 			if (strtemp == "S")
 				StackDefect.m_DefectSizeType = SizeType_Small;
@@ -230,6 +278,24 @@
 			else
 				StackDefect.m_DefectType = DefectType_Unknown;
 	
+
+			pReadPoint = getParsingData(pReadPoint, 12, &strtemp); // Shrink
+			pReadPoint = getParsingData(pReadPoint, 12, &strtemp); // ZoneClassNum m_sZoneClassPixelCount[i]
+			stringstream ConvertClass(strtemp.GetBuffer(0));
+			unsigned int nClassHexValue;
+			short sZoneClassPixelCount[16] = { 0 };
+			ConvertClass >> std::hex >> nClassHexValue;
+			for (int i = 0; i < 16; i++)
+			{
+				if (nClassHexValue & 1)
+				{
+					sZoneClassPixelCount[i] = 1;
+				}
+				nClassHexValue = nClassHexValue >> 1;
+			}
+			memcpy_s(StackDefect.m_sZoneClassPixelCount, sizeof(StackDefect.m_sZoneClassPixelCount), sZoneClassPixelCount, sizeof(sZoneClassPixelCount));
+
+
 			vecStackDefect.push_back(StackDefect);
 		}
 	}
@@ -250,7 +316,10 @@
 	pShared->GetGlassData()->m_nRawMergeNum = m_vecStackDefect.size(); // RawMerge
 	pShared->GetGlassData()->m_bRawMergeRead = TRUE;
 
-	AKLOG("Import Vector Size : %d", m_vecStackDefect.size());
+	/* < KJG 20220225 - #3850 MOD Start >*/ 
+	//AKLOG("Import Vector Size : %d", m_vecStackDefect.size());
+	AKLOG("Import Vector Size : [%s]%d", pShared->GetGlassData()->m_strRawMergeStepID, m_vecStackDefect.size());
+	/* < KJG 20220225 - #3850 MOD End >*/
 	return TRUE;
 }
 
@@ -289,7 +358,7 @@
 	return &pBuf[nLen + 1]; //구분자 건너 뛰어서 다음 읽을 포인트 넘겨준다
 }
 
-BOOL CRawResultReader::readOptionFile(char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/)
+BOOL CRawResultReader::readOptionFile(char* pFileName /*= "D:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/)
 {
 	if (pFileName == NULL) pFileName = m_strConfigFile;
 
@@ -363,7 +432,56 @@
 
 	pThis->m_nThreadStackFileReadFlag = 0;
 }
+/* <LJC 20211122 : #3820 ADD Start> */
+void CRawResultReader::ProcessResultFileRead(void * pArg)
+{
+	CRawResultReader* pThis = (CRawResultReader*)pArg;
 
+	pThis->m_nThreadStackFileReadFlag = 1;
+	int nReadFailCount = 0;
+	int nThreadCount = 0;
+	CString strGlassID;
+
+	while (pThis->m_nThreadStackFileReadFlag == 1)
+	{
+		if (pThis->m_nProcessState == RPS_CmdFileRead) //스택파일 읽기 수행 [김태현 2019/1/12]
+		{
+			strGlassID = pThis->m_strGlassID;
+
+			pThis->m_nProcessState = RPS_StateFileRead;
+			nThreadCount = 0;
+			nReadFailCount = 0;
+
+			AKLOG("RawMerge File Read Start : %s\\%s", pThis->m_strLocalPath, strGlassID);
+			Sleep(3000);
+			while (pThis->m_nProcessState == RPS_StateFileRead && pThis->m_nThreadStackFileReadFlag == 1)
+			{
+				if (pThis->openFile(strGlassID.GetBuffer(0)) == TRUE)
+				{
+					pThis->m_nProcessState = RPS_ResultReadOK;
+					AKLOG("RawMerge File Read Complete ");
+					break;
+				}
+				nReadFailCount++;
+				AKLOG("RawMerge File Read Try : %d", nReadFailCount);
+				if (nReadFailCount > 10)
+				{
+					pThis->m_nProcessState = RPS_ResultReadFail;
+					break;
+				}
+				Sleep(50);
+			}
+			if (pThis->m_nProcessState != RPS_ResultReadOK)
+			{
+				pThis->m_nProcessState = RPS_ResultReadFail;
+			}
+		}
+		if (nReadFailCount)
+			Sleep(500);
+	}
+	pThis->m_nThreadStackFileReadFlag = 0;
+}
+/* <LJC 20211122 : #3820 ADD End> */
 BOOL CRawResultReader::RawMergeFileReadStart(char* pGlassID)
 {
 	if (m_nThreadStackFileReadFlag == 0)
@@ -382,7 +500,26 @@
 	
 	return TRUE;
 }
+/* <LJC 20211122 : #3820 ADD Start> */
+BOOL CRawResultReader::ProcessRawMergeFileReadStart(char * pGlassID)
+{
 
+	if (m_nThreadStackFileReadFlag == 0)
+	{
+		ProcessResultFileRead(this);
+	}
+	if (m_nProcessState == RPS_StateFileRead)
+	{
+		m_nProcessState = RPS_CmdFileStop;
+		while (m_nProcessState == RPS_CmdFileStop) Sleep(0);
+	}
+
+	m_strGlassID = pGlassID;
+	m_nProcessState = RPS_CmdFileRead;
+
+	return TRUE;
+}
+/* <LJC 20211122 : #3820 ADD End> */
 BOOL CRawResultReader::RawMergeFileReadStop(BOOL bWait/*=TRUE*/)
 {
 	/*

--
Gitblit v1.9.3