From 9cbd9e554f9956b3b945b51602f1d4a3fa0353e1 Mon Sep 17 00:00:00 2001 From: LYW <leeyeanwoo@diteam.co.kr> Date: 목, 08 7월 2021 17:24:24 +0900 Subject: [PATCH] Ongoing60 #3486 CF AOI Review Review History 프로그램 테스트 및 적용 --- ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp | 183 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 183 insertions(+), 0 deletions(-) diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp b/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp new file mode 100644 index 0000000..85f4cab --- /dev/null +++ b/ReviewHistory/ReveiwHistory/DitGlassRawServer.cpp @@ -0,0 +1,183 @@ +#include "StdAfx.h" +#include "DitGlassRawServer.h" + +CDitGlassRawServer::CDitGlassRawServer(void) +: m_mxCommandProcess(FALSE, MUTEX_RAWMESSENGER) +{ + m_hMapBasicInfo = NULL; + m_hMapGlassData = NULL; + + m_pGlassRawInfo = NULL; + m_pGlassRawData = NULL; + + m_nLastCommandIdx = -1; +} + +CDitGlassRawServer::~CDitGlassRawServer(void) +{ + if (m_hMapBasicInfo!=NULL) + { + ::UnmapViewOfFile(m_hMapBasicInfo); + m_pGlassRawInfo = NULL; + } + + if (m_hMapGlassData!=NULL) + { + ::UnmapViewOfFile(m_hMapGlassData); + m_pGlassRawData = NULL; + } +} + + +BOOL CDitGlassRawServer::CreateServer( int nCellNum /*= 100*/, int nDefectNum /*= 2000*/ ) +{ + if(CreateGlassRawInfo() == FALSE) + { + return FALSE; + } + + + if(sizeof(_grmGlassData) != m_pGlassRawInfo->m_nSizeOfGlassData + || sizeof(_grmBlockData) != m_pGlassRawInfo->m_nSizeOfBlockData + || sizeof(_grmCellData) != m_pGlassRawInfo->m_nSizeOfCellData + || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfDefectData + || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfStackData) + { + return FALSE; + } + + m_pGlassRawInfo->m_nGlassMaxDataNum = 1; + m_pGlassRawInfo->m_nBlockMaxDataNum = 1; + m_pGlassRawInfo->m_nCellMaxDataNum = nCellNum; + m_pGlassRawInfo->m_nDefectMaxDataNum = nDefectNum; + m_pGlassRawInfo->m_nStackMaxDataNum = nDefectNum; + + m_pGlassRawInfo->m_nGlassRawDataSize; + { + int nDataNum = 0; + + m_pGlassRawInfo->m_nGlassDataPoint = nDataNum; + nDataNum += m_pGlassRawInfo->m_nSizeOfGlassData + m_pGlassRawInfo->m_nSizeOfGlassData%4; + + m_pGlassRawInfo->m_nBlockDataPoint = nDataNum; + nDataNum += m_pGlassRawInfo->m_nSizeOfBlockData + m_pGlassRawInfo->m_nSizeOfBlockData%4; + + m_pGlassRawInfo->m_nCellDataPoint = nDataNum; + nDataNum += (m_pGlassRawInfo->m_nSizeOfCellData + m_pGlassRawInfo->m_nSizeOfCellData%4)*nCellNum; + + m_pGlassRawInfo->m_nDefectDataPoint = nDataNum; + nDataNum += (m_pGlassRawInfo->m_nSizeOfDefectData + m_pGlassRawInfo->m_nSizeOfDefectData%4)*nDefectNum; + + m_pGlassRawInfo->m_nStackDataPoint = nDataNum; + nDataNum += (m_pGlassRawInfo->m_nSizeOfStackData + m_pGlassRawInfo->m_nSizeOfStackData % 4)*nDefectNum; + + m_pGlassRawInfo->m_nGlassRawDataSize = nDataNum; + } + + + if(CreateGlassRawData() == FALSE) + { + return FALSE; + } + + return TRUE; +} + + +BOOL CDitGlassRawServer::CreateGlassRawInfo() +{ + if(m_hMapBasicInfo == NULL) + { + BOOL bCreateMem = TRUE; + + m_hMapBasicInfo = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE + , 0, sizeof(_grmDitGlassRawInfo), SHAREDMEMNAME_BASICINFO); + + if (::GetLastError() == ERROR_ALREADY_EXISTS) + { + m_hMapBasicInfo = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_BASICINFO); + bCreateMem = FALSE; + } + + 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; + } + + //0으로 초기화 + if(bCreateMem && m_pGlassRawInfo) + { + ZeroMemory(m_pGlassRawInfo,sizeof(_grmDitGlassRawInfo)); + + m_pGlassRawInfo->m_nSizeOfGlassData = sizeof(_grmGlassData) ; + m_pGlassRawInfo->m_nSizeOfBlockData = sizeof(_grmBlockData); + m_pGlassRawInfo->m_nSizeOfCellData = sizeof(_grmCellData); + m_pGlassRawInfo->m_nSizeOfDefectData = sizeof(_grmDefectData); + m_pGlassRawInfo->m_nSizeOfStackData = sizeof(_grmDefectData); + + int bytealign = m_pGlassRawInfo->m_nSizeOfGlassData%4; + } + + } + + + + return TRUE; +} + +BOOL CDitGlassRawServer::CreateGlassRawData() +{ + int nGlassRawSharedSize = (int)(m_pGlassRawInfo->m_nGlassRawDataSize); + + if(m_hMapGlassData == NULL) + { + BOOL bCreateMem = TRUE; + + m_hMapGlassData = ::CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE + , 0, nGlassRawSharedSize, SHAREDMEMNAME_GLASSDATA); + + if (::GetLastError() == ERROR_ALREADY_EXISTS) + { + m_hMapGlassData = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_GLASSDATA); + bCreateMem = FALSE; + } + + 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; + } + + //0으로 초기화 + if(bCreateMem && m_pGlassRawData) ZeroMemory(m_pGlassRawData,sizeof(char)*nGlassRawSharedSize); + } + + 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; +} -- Gitblit v1.9.3