From a6552335164ce062567b76aa7d097fd046129474 Mon Sep 17 00:00:00 2001 From: LYW <leeyeanwoo@diteam.co.kr> Date: 금, 23 7월 2021 10:07:55 +0900 Subject: [PATCH] Ongoing90 #3517 CF AOI Review 자가진단 기능 개선 --- 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