»õ ÆÄÀÏ |
| | |
| | | #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; |
| | | } |