SDC C-Project CF Review 프로그램
LYW
2022-04-01 9c13bc5af33d28bb217995597f88fe863db42442
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*/)
{
   /*