SDC C-Project CF Review 프로그램
LYW
2021-09-27 b9b6752e83c701cc67241923d2b74dc3a963d243
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;
}