From e5fa774d622d6852fe8e1f033045aed221649108 Mon Sep 17 00:00:00 2001 From: LYW <leeyeanwoo@diteam.co.kr> Date: 금, 15 10월 2021 13:24:54 +0900 Subject: [PATCH] Ongoing80 #3662 CF AOI Review 전설비 알람 발생 조치 --- ReviewHistory/ReveiwHistory/GlassRawDemo.cpp | 1432 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 1,432 insertions(+), 0 deletions(-) diff --git a/ReviewHistory/ReveiwHistory/GlassRawDemo.cpp b/ReviewHistory/ReveiwHistory/GlassRawDemo.cpp new file mode 100644 index 0000000..d7e5708 --- /dev/null +++ b/ReviewHistory/ReveiwHistory/GlassRawDemo.cpp @@ -0,0 +1,1432 @@ +癤�#include "StdAfx.h" +#include "GlassRawDemo.h" +#include "akLoggerExt.h" +#include "MacroResultFile.h" +#include "akCore/akFileUtil.h" +#include "akGridData.h" + +//#include "AOIDefinitionType.h" +//#include "AOIDefinition.h" + +#define LOCAL_INDEX_PATH "D:\\DIT_ResultData\\Index\\" +#define LOCAL_REV_IMAGE_PATH "D:\\ResultData\\Upload\\Image\\" +#define LOCAL_AOI_IMAGE_PATH "D:\\Image\\Defect\\" +#define LOCAL_MURA_IMAGE_PATH "D:\\DIT_ResultData\\Mura\\IMG\\" +#define LOCAL_DEEP_PATH "D:\\DIT_ResultData\\Deeplearning\\" + +#define LOCAL_AOIRAWDFS_PATH "D:\\DIT_ResultData\\Raw" +#define LOCAL_AOIRAWBIN_PATH "D:\\DIT_ResultData\\RawBin" +#define NETWORK_AOIRAWDFS_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\Raw" +#define NETWORK_AOIRAWBIN_PATH "\\\\126.100.100.1\\d\\DIT_ResultData\\RawBin" + + + +CGlassRawDemo::CGlassRawDemo(void) +{ + CreateDirectory(LOCAL_AOIRAWDFS_PATH, NULL); + CreateDirectory(LOCAL_AOIRAWBIN_PATH, NULL); + m_MuraResultFile.readOptionFile("C:\\DIT_Review\\ReviewServerConfig\\MacroInfo.cfg"); + + m_GlassRawRTMS.SetMuraResult(&m_MuraResultFile); +} + +CGlassRawDemo::~CGlassRawDemo(void) +{ +} + +BOOL CGlassRawDemo::SequenceGlassLoading( CgrmGlassRawData* pData ) +{ + /* //�뒪�깮湲곕뒫 + if(0)//m_StackResult.getStackUse()) + { + SendMessageFTPDownloadDataFile(pData->GetGlassData(0)); + if(IsUseDuglex(pData)) SendMessageFTPDownloadDataFile(pData->GetGlassData(1)); + + m_StackResult[0].StackFileReadStart(pData->GetGlassData(0)->m_strGlassID); + if(IsUseDuglex(pData)) m_StackResult[1].StackFileReadStart(pData->GetGlassData(1)->m_strGlassID); + } + */ + + return TRUE; +} + +BOOL CGlassRawDemo::SequenceInspectEnd( CgrmGlassRawData* pData ) +{ + m_tmReviewEnd = m_tmReviewStart = CTime::GetCurrentTime(); + m_tmFileCreateTime = CTime::GetCurrentTime(); + + //�뿬湲곗뿉�꽌 �씪�씤蹂꾨줈 �뙆�씪紐�, �샊�� Path �쐞移� 寃곗젙�븯硫대맖. AOIServer �샊�� ReviewServer�뿉�꽌 �븞�빐�룄�맖 [源��깭�쁽2019/9/4] + pData->GetGlassData()->m_strFileName; + { + _grmGlassData* pGlassData = pData->GetGlassData(); + CTime CurrTime = pGlassData->m_tmGlassLoading; + CString strTime=_T(""), strFileName=_T(""); + strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), + CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); + strFileName.Format("%s_%s.bin", pGlassData->m_strGlassID, strTime.GetBuffer(0)); + + strcpy(pData->GetGlassData()->m_strFileName, strFileName.GetBuffer(0)); + } + strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH); + + if(!WriteBinFile(pData)) + return FALSE; + + return TRUE; +} + +BOOL CGlassRawDemo::SequenceReviewStart( CgrmGlassRawData* pData ) +{ + m_tmReviewStart = m_tmReviewEnd = CTime::GetCurrentTime(); + + //�뿬湲곗뿉�꽌 �씪�씤蹂꾨줈 �뙆�씪紐�, �샊�� Path �쐞移� 寃곗젙�븯硫대맖. AOIServer �샊�� ReviewServer�뿉�꽌 �븞�빐�룄�맖 [源��깭�쁽2019/9/4] + pData->GetGlassData()->m_strFileName; + strcpy(pData->GetGlassData()->m_strPath, NETWORK_AOIRAWBIN_PATH); + //strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH); + + CString strFindFile; + int nCloseTime = 600*100000;//sec + int nReTryTime = 30; + { + CTime tmReviewLoading = CTime::GetCurrentTime(); + CString strWild; + strWild.Format("%s\\%s_*.*", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strGlassID); + CakFileUtil akFileFinder; + while(nReTryTime--) + { + akFileFinder.FindFile(strWild.GetBuffer(0), FALSE); + VECFINDDATA* pFindData = akFileFinder.getFindData(); + int nFileNamePos = strlen(akFileFinder.getProcessPath()); + std::map<LONGLONG, CString> mapSpanFileName; + for(int i=0; i<pFindData->size(); i++) + { + char* pFileName = &((*pFindData)[i]).name[nFileNamePos]; + { + CakParser parser; + parser.process(pFileName, "_."); + if(parser.getTokNum() < 4) continue; + + int nDataTime[8]={}; + { + int nTokIndex=0; + const char* pGlassId = parser.getTokStr(nTokIndex++); + char* pDate = &pFileName[parser.getTokPos(nTokIndex++)]; + char* pTime = &pFileName[parser.getTokPos(nTokIndex++)]; + + nDataTime[0] = (pDate[0]-'0')*1000 + (pDate[1]-'0')*100 + (pDate[2]-'0')*10+ (pDate[3]-'0')*1; + nDataTime[1] = (pDate[4]-'0')*10+ (pDate[5]-'0')*1; + nDataTime[2] = (pDate[6]-'0')*10+ (pDate[7]-'0')*1; + nDataTime[3] = (pTime[0]-'0')*10+ (pTime[1]-'0')*1; + nDataTime[4] = (pTime[2]-'0')*10+ (pTime[3]-'0')*1; + nDataTime[5] = (pTime[4]-'0')*10+ (pTime[5]-'0')*1; + } + + CTime tmTemp(nDataTime[0], nDataTime[1], nDataTime[2], nDataTime[3], nDataTime[4], nDataTime[5] ); + CTimeSpan tmSpan = tmReviewLoading-tmTemp; + mapSpanFileName.insert(std::make_pair(tmSpan.GetTotalSeconds(), pFileName)); + } + } + + if(mapSpanFileName.empty() == FALSE) + { + if(mapSpanFileName.begin()->first < nCloseTime) + { + //媛��옣 理쒓렐 寃곌낵�뙆�씪 李얘린 �꽦怨� [源��깭�쁽 2019/7/17] + strFindFile = mapSpanFileName.begin()->second; + break; + } + } + akFileFinder.clear(); + Sleep(100); + } + } + + if(strFindFile.IsEmpty()) return FALSE; + + strcpy(pData->GetGlassData()->m_strFileName, strFindFile.GetBuffer(0)); + + + if(!ReadBinFile(pData)) + return FALSE; + + strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH); + + return TRUE; +} + + +BOOL CGlassRawDemo::SequenceReviewEnd( CgrmGlassRawData* pData ) +{ + m_tmReviewEnd = CTime::GetCurrentTime(); + m_tmFileCreateTime = CTime::GetCurrentTime(); + + //�뿬湲곗뿉�꽌 �씪�씤蹂꾨줈 �뙆�씪紐�, �샊�� Path �쐞移� 寃곗젙�븯硫대맖. AOIServer �샊�� ReviewServer�뿉�꽌 �븞�빐�룄�맖 [源��깭�쁽2019/9/4] + pData->GetGlassData()->m_strFileName; + strcpy(pData->GetGlassData()->m_strPath, NETWORK_AOIRAWDFS_PATH); + + if(0) ReadMuraFile(pData); + + if(WriteAOIFile(pData) == FALSE) + return FALSE; + + if(0) + { + _grmGlassData* pGlassData = pData->GetGlassData(); + + SendMessageFTPUploadRaw(pGlassData); + SendMessageFTPUploadImage(pGlassData, FTPCMD_REVIEW_IMAGE); + SendMessageFTPUploadImage(pGlassData, FTPCMD_AOI_IMAGE); + SendMessageFTPUploadImage(pGlassData, FTPCMD_MURA_IMAGE); + SendMessageFTPUploadLinkFile(pGlassData); + + } + + + + + return TRUE; +} + +BOOL CGlassRawDemo::SequenceFtpUpload( char* pRawFilePathName ) +{ + + CTime tmFileCreate; + _grmGlassData GlassData; + _grmGlassData* pGlassData = &GlassData; + + //�젙蹂� �뼸�뼱�삤湲� [源��깭�쁽 2019/1/25] + { + //"D:\\DIT_ResultData\\Raw\\"; + //6CCF01P7_HPANELID_20190125_002545.csv + + char* pFileName = CakFileUtil::getFileName(pRawFilePathName); + char* pext = CakFileUtil::getFileExt(pRawFilePathName); + + if(!strcmp(pext, "csv") == FALSE) return FALSE; + + CakParser parser; + parser.process(pFileName, "_."); + if(parser.getTokNum() < 5) return FALSE; + + strcpy(pGlassData->m_strOperID, parser.getTokStr(0)); + strcpy(pGlassData->m_strGlassID, parser.getTokStr(1)); + char* pDate = &pFileName[parser.getTokPos(2)]; + char* pTime = &pFileName[parser.getTokPos(3)]; + int nData[8]={}; + nData[0] = (pDate[0]-'0')*1000 + (pDate[1]-'0')*100 + (pDate[2]-'0')*10+ (pDate[3]-'0')*1; + nData[1] = (pDate[4]-'0')*10+ (pDate[5]-'0')*1; + nData[2] = (pDate[6]-'0')*10+ (pDate[7]-'0')*1; + nData[3] = (pTime[0]-'0')*10+ (pTime[1]-'0')*1; + nData[4] = (pTime[2]-'0')*10+ (pTime[3]-'0')*1; + nData[5] = (pTime[4]-'0')*10+ (pTime[5]-'0')*1; + + CTime tmTemp(nData[0], nData[1], nData[2], nData[3], nData[4], nData[5] ); + tmFileCreate = tmTemp; + + FILE* pf = fopen(pRawFilePathName, "r"); + if(pf) + { + char buffer[512]; + fgets(buffer, 512, pf); + if(buffer[0] != 'H') return FALSE; + fgets(buffer, 512, pf); + fgets(buffer, 512, pf); + + fgets(buffer, 512, pf);buffer[strlen(buffer)-1] = 0; + strcpy(pGlassData->m_strEquipID, &buffer[strlen("EQUIP_TYPE:")]); + + fgets(buffer, 512, pf);buffer[strlen(buffer)-1] = 0; + strcpy(pGlassData->m_strStepID, &buffer[strlen("EQUIP_ID:")]); + } + else + { + return FALSE; + } + + + CakFileUtil::getPath(pGlassData->m_strPath, 256, pRawFilePathName); + + } + + + + m_tmReviewEnd = m_tmReviewStart = tmFileCreate; + + + SendMessageFTPUploadRaw(pGlassData); + SendMessageFTPUploadImage(pGlassData, FTPCMD_REVIEW_IMAGE); + SendMessageFTPUploadImage(pGlassData, FTPCMD_AOI_IMAGE); + SendMessageFTPUploadImage(pGlassData, FTPCMD_MURA_IMAGE);//�뾾�쑝硫� �떎�뙣 �븯寃좎� + SendMessageFTPUploadLinkFile(pGlassData); + + + return TRUE; +} + + +BOOL CGlassRawDemo::WriteAOIFile( CgrmGlassRawData* pData ) +{ + BOOL bResult = TRUE; + + bResult &= MakeAOIFile(pData); + bResult &= MakeAnaFile(pData); + + m_GlassRawRTMS.WriteAOIFile(pData); + + AKLOG("WriteAOIFile Complete"); + return bResult; +} + +BOOL CGlassRawDemo::MakeAOIFile( CgrmGlassRawData* pData ) +{ + _grmGlassData* pGlass = pData->GetGlassData(); + CString strFilePathName; + CString strFileName;//�뙆�씪�깮�꽦 �떆媛� �븣臾몄뿉 �뿬湲곗꽌 �젙�솗�븯寃� �뙆�씪紐� �떎�떆 �젙�젙 + { + //Glass �젙蹂� + CTime CurrTime = m_tmReviewEnd; + CString strTime; + strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), + CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); + strFileName.Format("%s_%s.csv", pGlass->m_strGlassID, strTime); + } + + strFilePathName.Format("%s\\%s", pGlass->m_strPath, strFileName);//pGlass->m_strFileName); + //strFilePathName.Format("C:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName); + + + //FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); + FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); + if(pf == NULL) + { + AKLOG("MakeAOIFile Fail : [%s]", strFilePathName.GetBuffer(0)); + return FALSE; + } + + + + CString strBuffer; + CString strLine; + + ////////////////////////////////////////////////////////////////////////// + //HEDER + fprintf(pf, "HEADER_BEGIN\n"); + { + makeDataHeader(strLine, pGlass); + fprintf(pf, "%s", strLine); + } + fprintf(pf, "HEADER_END\n\n"); + + ////////////////////////////////////////////////////////////////////////// + //GLASS_DATA + fprintf(pf, "GLASS_DATA_BEGIN\n"); + { + fprintf(pf, "GLASS_ID,OWNER_CODE,OWNER_TYPE,PRODUCT_ID,PROCESS_ID,PRODUCT_GROUP,LOT_ID,CST_ID,SLOT_ID,PRE_PROCESS_ID,PRE_EQP_ID,PRE_CHAMBER_ID,PRE_RECIPE_ID,GROUP_ID,AUTOSAMPLEFLAG\n"); + + makeDataGlass(strLine, pGlass); + fprintf(pf, "%s\n", strLine); + } + fprintf(pf, "GLASS_DATA_END\n\n"); + + ////////////////////////////////////////////////////////////////////////// + //BLOCK_SUMMARY + fprintf(pf, "BLOCK_SUMMARY_BEGIN\n"); + { + fprintf(pf, "BLOCK_ID,BLOCK_JUDGE_AOI,BLOCK_JUDGE_MURA,BLOCK_JUDGE_ATS,BLOCK_JUDGE_TEG,TT_PANEL,OK_PANEL,NG_PANEL,X1_PANEL,X2_PANEL,X3_PANEL,X4_PANEL,X5_PANEL,X6_PANEL,X7_PANEL,X8_PANEL,X9_PANEL,TT_DEFECT_CNT,S_SIZE_DEFECT_CNT,M_SIZE_DEFECT_CNT,L_SIZE_DEFECT_CNT,TT_MURA_CNT,POINT_MURA_CNT,LINE_MURA_CNT,AREA_MURA_CNT,GLASS_ID_DCR,POINT_1,POINT_2,POINT_3,POINT_4,POINT_5\n"); + + int nBlockNum = 1; + for(int i=0; i<nBlockNum; i++) + { + makeDataBlock(strLine, pData->GetBlockData(i)); + fprintf(pf, "%s\n", strLine); + } + } + fprintf(pf, "BLOCK_SUMMARY_END\n\n"); + + ////////////////////////////////////////////////////////////////////////// + //PANEL_SUMMARY + fprintf(pf, "PANEL_SUMMARY_BEGIN\n"); + { + fprintf(pf, "PANEL_ID,PANEL_JUDGE_AOI,PANEL_JUDGE_MURA,PANEL_JUDGE,TT_DEFECT,TT_MURA,PANEL_ID_2D,PANEL_FLAG,PANEL_GRADE,X_D,Y_D,X_A,Y_A,DELTA_X,DELTA_Y,OK_DEFECT,NG_DEFECT,X1_DEFECT,X2_DEFECT,X3_DEFECT,X4_DEFECT,X5_DEFECT,X6_DEFECT,X7_DEFECT,X8_DEFECT,X9_DEFECT,IJP1,IJP2,IJP3,IJP4,IJP5,IJP6,IJP7,IJP8,Mark1,Mark2,Mark3,Mark4,Mark5,Mark6,Mark7,Mark8\n"); + + for(int iCell = 0; iCell < pData->GetGlassData()->m_nCellNum; iCell++) + { + _grmCellData* pCell = pData->GetCellData(iCell); + makeDataCell(strLine, pData, pCell); + fprintf(pf, "%s\n", strLine); + } + } + fprintf(pf, "PANEL_SUMMARY_END\n\n"); + + ////////////////////////////////////////////////////////////////////////// + //DEFECT_DATA + fprintf(pf, "DEFECT_DATA_BEGIN\n"); + { + fprintf(pf, "PANEL_ID,DEFECT_NO1,DEFECT_NO2,UPDATE_TIME,STEP_1ST,RECIPE_1ST,STEP_CURRENT,RECIPE_CURRENT,GATE1,DATA1,"); + fprintf(pf, "GATE2,DATA2,X1,Y1,X2,Y2,AOI_DEFECT_TYPE,AOI_GRAY_H,AOI_GRAY_L,AOI_GRAY_AVE,"); + fprintf(pf, "AOI_DEFECT_AREA,AOI_DEFECT_LGT,AOI_DEFECT_WID,AOI_DEFECT_HGT,AOI_DEFECT_WIH,AOI_DEFECT_SIZE,DEFECT_PIX,MASK_DEFECT,REPEAT_DEFECT,DEFECT_IMAGE_DATA,"); + fprintf(pf, "AOI_CCD_NO,AOI_REVIEW_NO,OP_ID_1ST,OP_ID_2ND,OP_ID_CURRENT,DEFECT_JUGDE_1ST,DEFECT_JUGDE_2ND,DEFECT_JUGDE_CURRENT,DEFECT_REASON1,DEFECT_REASON2,"); + fprintf(pf, "DEFECT_REASON3,WSI_JUDGE,MURA_GRAY_H,MURA_GRAY_L,MURA_GRAY_AVE,MURA_AREA,MURA_LGT,MURA_WID,MURA_HGT,MURA_SIZE,"); + fprintf(pf, "MURA_PIX,MURA_TYPE,MURA_JUDGE,MURA_GRADE,MURA_IMAGE_DATA,RSRV1,RSRV2,RSRV3,RSRV4,RSRV5,"); + fprintf(pf, "RSRV6,RSRV7,RSRV8,RSRV9,FILE_NAME\n"); + + for(int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++) + { + _grmDefectData* pDefect = pData->GetDefectData(iDefect); + if(makeDataDefect(strLine, pData, pDefect)) + { + fprintf(pf, "%s\n", strLine); + } + } + fprintf(pf, "DEFECT_DATA_END\n\n"); + } + + + AKLOG("MakeAOIFile Complete : [%s]", strFilePathName.GetBuffer(0)); + fclose(pf); + return TRUE; +} + +BOOL CGlassRawDemo::MakeAnaFile( CgrmGlassRawData* pData ) +{ + return TRUE; + + CString strFilePathName; + strFilePathName.Format("%s\\%sana", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strFileName); + + FILE* pf = fopen(strFilePathName.GetBuffer(0), "w"); + if(pf == NULL) + { + AKLOG("MakeAOIFile Fail : [%s]", strFilePathName.GetBuffer(0)); + return FALSE; + } + + fprintf(pf, "%s\n", pData->GetGlassData()->m_strGlassID); + fprintf(pf, "m_strImageName, m_strDefectCode, UMCenterAlignX, UMCenterAlignY, m_nLevelSrcMin, m_nLevelSrcMax, m_nLevelSrcAvg, m_nLevelRefMin, m_nLevelRefMax, m_nLevelRefAvg, m_nLevelDiffMin, m_nLevelDiffMax, m_nLevelDiffAvg"); + for(int i=0; i<MAX_ZONE_NUM; i++) fprintf(pf, ",Zone%02d", i); + fprintf(pf, ", m_sDefectPeak, m_nPixelSize, DefectType, UMSize, Density, ScrtRatio, MergeState"); + fprintf(pf, "\n"); + + for(int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++) + { + _grmDefectData* pDefect = pData->GetDefectData(iDefect); + if(pData->GetGlassData()->m_nScanCoordinateY == 1) //遺꾪뙋�꽕鍮꾩쓽 寃쎌슦 XY諛섏쟾 + { + fprintf(pf, "%s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d", + pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignY / 1000.0, (double)pDefect->m_nUMCenterAlignX / 1000.0, + pDefect->m_nLevelSrcMin, pDefect->m_nLevelSrcMax, pDefect->m_nLevelSrcAvg, + pDefect->m_nLevelRefMin, pDefect->m_nLevelRefMax, pDefect->m_nLevelRefAvg, + pDefect->m_nLevelDiffMin, pDefect->m_nLevelDiffMax, pDefect->m_nLevelDiffAvg); + for(int iz=0; iz<MAX_ZONE_NUM; iz++) + { + fprintf(pf, ",%d", pDefect->m_sZonePixelCount[iz]); + } + fprintf(pf, ",%d, %d, %d, %d, %d, %d, %d", + pDefect->m_sDefectPeak, pDefect->m_nPixelSize, pDefect->m_DefectType, (int)pDefect->m_nUMSize, pDefect->m_nDensity, pDefect->m_nScratchRatio, pDefect->m_bMergeState); + + fprintf(pf, ", %d, %d, %d, %d, %d", pDefect->m_nAngle, pDefect->m_nMajor, pDefect->m_nMinor, pDefect->m_nCompact, pDefect->m_nThickness); + + fprintf(pf, "\n"); + } + else + { + fprintf(pf, "%s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d", + pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignX / 1000.0, (double)pDefect->m_nUMCenterAlignY / 1000.0, + pDefect->m_nLevelSrcMin, pDefect->m_nLevelSrcMax, pDefect->m_nLevelSrcAvg, + pDefect->m_nLevelRefMin, pDefect->m_nLevelRefMax, pDefect->m_nLevelRefAvg, + pDefect->m_nLevelDiffMin, pDefect->m_nLevelDiffMax, pDefect->m_nLevelDiffAvg); + for(int iz=0; iz<MAX_ZONE_NUM; iz++) + { + fprintf(pf, ",%d", pDefect->m_sZonePixelCount[iz]); + } + fprintf(pf, ",%d, %d, %d, %d, %d, %d, %d", + pDefect->m_sDefectPeak, pDefect->m_nPixelSize, pDefect->m_DefectType, (int)pDefect->m_nUMSize, pDefect->m_nDensity, pDefect->m_nScratchRatio, pDefect->m_bMergeState); + + fprintf(pf, ", %d, %d, %d, %d, %d", pDefect->m_nAngle, pDefect->m_nMajor, pDefect->m_nMinor, pDefect->m_nCompact, pDefect->m_nThickness); + + fprintf(pf, "\n"); + } + } + AKLOG("MakeAnaFile Complete %s", strFilePathName); + fclose(pf); + + return TRUE; +} + +void CGlassRawDemo::makeDataHeader( CString& strLine, _grmGlassData* pGlassData ) +{ + strLine.Empty(); + CString strValue; + CString strDiv = ","; + + CString strCurDateTime; + { + CTime Time = m_tmReviewEnd; + strCurDateTime.Format("%04d/%02d/%02d_%d:%02d:%02d", + Time.GetYear(), Time.GetMonth(), Time.GetDay(), + Time.GetHour(), Time.GetMinute(), Time.GetSecond()); + } + strValue.Format("FILE_VERSION:%.1lf\n", 1.0); + strLine += strValue; + strValue.Format("FILE_CREATED_TIME:%s\n", strCurDateTime); + strLine += strValue; + strValue.Format("EQUIP_TYPE:%s\n", pGlassData->m_strEquipID); + strLine += strValue; + strValue.Format("EQUIP_ID:%s\n", pGlassData->m_strStepID); + strLine += strValue; + strValue.Format("CONTENT:%s\n", _T("GLASS_DATA/EQP_GLASS_DATA/BLOCK_SUMMARY/PANEL_SUMMARY/DEFECT_DATA")); + strLine += strValue; +} +void CGlassRawDemo::makeDataGlass( CString& strLine, _grmGlassData* pGlassData ) +{ + strLine.Empty(); + CString strValue; + CString strDiv = ","; + + //臾쇰쪟�젙蹂� �뙆�떛�빐�꽌 媛�吏�怨� �삤湲� CString strProcessID, strProductID, strLotID, strSlotID; + { + std::map<CString, CString> mapTransData; + + CString strTemp; + strTemp.Format("D:\\DIT_ResultData\\DownloadData\\%s.dat", pGlassData->m_strGlassID); + + FILE *pFile = fopen(strTemp.GetBuffer(0), "r"); + if(pFile) + { + const int MAX_BUFFER = 1024; + char buffer[MAX_BUFFER]; + CString strKey; + CString strValue; + char* pFlagPos; + char* pEndFlagPos; + char* pTest = "��"; + while (fgets(buffer, MAX_BUFFER, pFile) != '\0') + { + pFlagPos = strchr(buffer, '='); + + if(pFlagPos == NULL) continue; + + if(pEndFlagPos = strchr(pFlagPos, -29)) //"��"�걹�뿉 �엳�뒗 end臾몄옄�뿴 �젣嫄� + pEndFlagPos[0] = 0; + + pFlagPos[0] = 0; // = �씠嫄� 0�쑝濡� 留뚮뱾�뼱�꽌 Key, Value 遺꾨━ + + strKey = buffer; + strValue = &pFlagPos[1]; + + strValue.Remove(' ');//�샊�떆 紐⑤�� 怨듬갚 �젣嫄� [源��깭�쁽 2019/1/31] + + mapTransData.insert(std::make_pair(strKey, strValue)); + } + fclose(pFile); + } + + //GlassData�뿉 媛믪쓣 �꽔�뼱以� [源��깭�쁽 2019/1/31] + strcpy(pGlassData->m_strSLotID, mapTransData["Slot_ID"].GetBuffer(0)); + strcpy(pGlassData->m_strProductID, mapTransData["Product_ID"].GetBuffer(0)); + strcpy(pGlassData->m_strProcessID, mapTransData["Process_ID"].GetBuffer(0)); + strcpy(pGlassData->m_strLotID, mapTransData["Lot_ID"].GetBuffer(0)); + } + + + strValue.Format("%s", pGlassData->m_strGlassID); //1. Glass ID + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strOwnerCode); //2. OWNER_CODE + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strOwnerType); //3. OWNER_TYPE + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strProductID); //4. PRODUCT_ID + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strProcessID); //5. PROCESS_ID + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strProductGroup); //6. PRODUCT_GROUP + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strLotID); //7. LOT_ID + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strCSTID); //8. CST_ID + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strSLotID); //9.SLOT_ID + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strProcessID); //10.PRE_PROCESS_ID + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strEquipID); //11.PRE_EQP_ID + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strPreChamerID); //12.PRE_CHAMBER_ID + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strPreRecipeID); //13.PRE_RECIPE_ID + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strGroupID); //14.GROUP_ID + strLine += strValue+strDiv; + strValue.Format("%c", pGlassData->m_cAutoSampleFlag); //15.AUTOSAMPLEFLAG + strLine += strValue; + + +} + +void CGlassRawDemo::makeDataBlock( CString& strLine, _grmBlockData* pBlockData ) +{ + strLine.Empty(); + CString strValue; + CString strDiv = ","; + + strValue.Format("%s", pBlockData->m_strBlockID); //1. BLOCK_ID + strLine += strValue+strDiv; + strValue.Format("%c", pBlockData->m_cBlockJudgeAOI); //2. BLOCK_JUDGE_AOI + strLine += strValue+strDiv; + strValue.Format("%c", 'G'); //3. BLOCK_JUDGE_MURA + strLine += strValue+strDiv; + strValue.Format("%c", pBlockData->m_cBlockJudgeATS); //4. BLOCK_JUDGE_ATS + strLine += strValue+strDiv; + strValue.Format("%c", pBlockData->m_cBlockJudgeTEG); //5. BLOCK_JUDGE_TEG + strLine += strValue+strDiv; + strValue.Format("%d", 0); //6. TT_PANEL + strLine += strValue+strDiv; + strValue.Format("%d", 0); //7. OK_PANEL(Count) + strLine += strValue+strDiv; + strValue.Format("%d", 0); //8. NG_PANEL(Count) + strLine += strValue+strDiv; + strValue.Format("%d", 0); //9. X1_PANEL(Count) + strLine += strValue+strDiv; + strValue.Format("%d", 0); //10. X2_PANEL(Count) + strLine += strValue+strDiv; + strValue.Format("%d", 0); //11. X3_PANEL(Count) + strLine += strValue+strDiv; + strValue.Format("%d", 0); //12. X4_PANEL(Count) + strLine += strValue+strDiv; + strValue.Format("%d", 0); //13. X5_PANEL(Count) + strLine += strValue+strDiv; + strValue.Format("%d", 0); //14. X6_PANEL(Count) + strLine += strValue+strDiv; + strValue.Format("%d", 0); //15. X7_PANEL(Count) + strLine += strValue+strDiv; + strValue.Format("%d", 0); //16. X8_PANEL(Count) + strLine += strValue+strDiv; + strValue.Format("%d", 0); //17. X9_PANEL(Count) + strLine += strValue+strDiv; + strValue.Format("%d", 0); //18. TT_DEFECT_CNT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //19. S_SIZE_DFECT_CNT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //20. M_SIZE_DFECT_CNT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //21. L_SIZE_DFECT_CNT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //22. GLASS_ID_DCR + strLine += strValue+strDiv; + strValue.Format("%d", 0); //23. TT_MURA_CNT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //24. POINT_MURA_CNT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //25. LINE_MURA_CNT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //26. AREA_MURA_CNT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //27. POINT_1 + strLine += strValue+strDiv; + strValue.Format("%d", 0); //28. POINT_2 + strLine += strValue+strDiv; + strValue.Format("%d", 0); //29. POINT_3 + strLine += strValue+strDiv; + strValue.Format("%d", 0); //30. POINT_4 + strLine += strValue+strDiv; + strValue.Format("%d", 0); //31. POINT_5 + strLine += strValue; +} + + +void CGlassRawDemo::makeDataCell( CString& strLine, CgrmGlassRawData* pData, _grmCellData* pCellData ) +{ + strLine.Empty(); + CString strValue; + CString strDiv = ","; + + CString strJudgeCode = "O"; + CString strLastCode = "O"; + { + switch (pCellData->m_nJudgement) + { + case 0/*Judge_OK*/: strJudgeCode = "G"; break; + case 2/*Judge_NG*/: strJudgeCode = "N"; break; + case 10/*Judge_Rework*/: strJudgeCode = "O"; break; + case 1/*Judge_RP*/: strJudgeCode = "O"; break; + case 6/*Judge_Review*/: strJudgeCode = "O"; break; + case 7/*Judge_RC*/: strJudgeCode = "O"; break; + } + } + strLastCode = strJudgeCode; + + strValue.Format("%s%s", pData->GetGlassData()->m_strGlassID, pCellData->m_strCellName); //1. PANEL_ID + strLine += strValue+strDiv; + strValue.Format("%s", strJudgeCode); //2. PANEL_JUDGE_AOI + strLine += strValue+strDiv; + strValue.Format("%s", "O"); //3. PANEL_JUDGE_MURA + strLine += strValue+strDiv; + strValue.Format("%s", strLastCode); //4. PANEL_JUDGE + strLine += strValue+strDiv; + strValue.Format("%d", pCellData->getTotalDefectNum()); //5. tt_DEFECT + strLine += strValue+strDiv; + strValue.Format("%d", m_MuraResultFile.GetDefectNum(pCellData->m_nCellID)); //6. tt_MURA + strLine += strValue+strDiv; + strValue.Format("%s", "A*"); //7. PANEL_ID_2D + strLine += strValue+strDiv; + strValue.Format("%d", pCellData->m_nJudgeFlag); //8. PANEL_FLAG + strLine += strValue+strDiv; + strValue.Format("%d", pCellData->m_nJudgeGlade); //9. PANEL_GRADE + strLine += strValue+strDiv; + strValue.Format("%d", pCellData->m_rectCellLeft); //10. X_D + strLine += strValue+strDiv; + strValue.Format("%d", pCellData->m_rectCellTop); //11. Y_D + strLine += strValue+strDiv; + strValue.Format("%d", pCellData->m_rectCellRight-pCellData->m_rectCellLeft); //12. X_A + strLine += strValue+strDiv; + strValue.Format("%d", pCellData->m_rectCellBottom-pCellData->m_rectCellTop); //13. Y_A + strLine += strValue+strDiv; + strValue.Format("%d", 0); //14. DELTA_X + strLine += strValue+strDiv; + strValue.Format("%d", 0); //15. DELTA_Y + strLine += strValue+strDiv; + strValue.Format("%d", pCellData->m_nDefectNumJudgeOKWhite + pCellData->m_nDefectNumJudgeOKBlack); //16. OK_DEFECT + strLine += strValue+strDiv; + strValue.Format("%d", pCellData->m_nDefectNumJudgeNG); //17. NG_DEFECT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //18. X1_DEFECT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //19. X2_DEFECT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //20. X3_DEFECT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //21. X4_DEFECT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //22. X5_DEFECT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //23. X6_DEFECT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //24. X7_DEFECT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //25. X8_DEFECT + strLine += strValue+strDiv; + strValue.Format("%d", 0); //26. X9_DEFECT + strLine += strValue+strDiv; + strValue.Format("%s", "0"); //27. IJP1 + strLine += strValue+strDiv; + strValue.Format("%s", "0"); //28. IJP2 + strLine += strValue+strDiv; + strValue.Format("%s", "0"); //29. IJP3 + strLine += strValue+strDiv; + strValue.Format("%s", "0"); //30. IJP4 + strLine += strValue+strDiv; + strValue.Format("%s", "0"); //31. IJP5 + strLine += strValue+strDiv; + strValue.Format("%s", "0"); //32. IJP6 + strLine += strValue+strDiv; + strValue.Format("%s", "0"); //33. IJP7 + strLine += strValue+strDiv; + strValue.Format("%s", "0"); //34. IJP8 + strLine += strValue+strDiv; + strValue.Format("%d", 0); //35. Mark1 + strLine += strValue+strDiv; + strValue.Format("%d", 0); //36. Mark2 + strLine += strValue+strDiv; + strValue.Format("%d", 0); //37. Mark3 + strLine += strValue+strDiv; + strValue.Format("%d", 0); //38. Mark4 + strLine += strValue+strDiv; + strValue.Format("%d", 0); //39. Mark5 + strLine += strValue+strDiv; + strValue.Format("%d", 0); //40. Mark6 + strLine += strValue+strDiv; + strValue.Format("%d", 0); //41. Mark7 + strLine += strValue+strDiv; + strValue.Format("%d", 0); //42. Mark8 + strLine += strValue; + +} + +BOOL CGlassRawDemo::makeDataDefect( CString& strLine, CgrmGlassRawData* pData, _grmDefectData* pDefectData ) +{ + strLine.Empty(); + CString strValue; + CString strDiv = ","; + + _grmGlassData* pGlassData = pData->GetGlassData(); + _grmCellData* pCellData = pData->GetCellData(pDefectData->m_nCellIdx); + + if(pDefectData->m_ReviewDefect.m_nPlanType == 1000 //aoi寃고븿 + //pDefectData->m_ReviewDefect.m_nPlanType == 999 + ) return FALSE; + + CString strUpdateTime; + { + CTime Time = pGlassData->m_tmInspectionEND; + strUpdateTime.Format("%04d/%02d/%02d_%d:%02d:%02d", + Time.GetYear(), Time.GetMonth(), Time.GetDay(), + Time.GetHour(), Time.GetMinute(), Time.GetSecond()); + +// CTime Time = pGlassData->m_tmInspectionEND; +// strUpdateTime.Format("%04d%02d%02d%02d%02d", +// Time.GetYear(), Time.GetMonth(), Time.GetDay(), +// Time.GetHour(), Time.GetMinute()); + } + + CString strStepFirst;//泥ル쾲吏� �뒪�깮 [源��깭�쁽 2018/12/5] + { + if(pDefectData->m_strStackFirst[0]) + { + strStepFirst =pDefectData->m_strStackFirst; + } + else + { + strStepFirst = pGlassData->m_strStepID; + } + } + + strValue.Format("%s%s", pData->GetGlassData()->m_strGlassID, pCellData->m_strCellName); //1. CELL ID + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nDefectID); //2. DEFECT_NO1 + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nDefectID); //3. DEFECT_NO2 + strLine += strValue+strDiv; + strValue.Format("%s", strUpdateTime); //4. UPDATE_TIME + strLine += strValue+strDiv; + strValue.Format("%s", strStepFirst); //5. STEP_1ST + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strRecipeName); //6. RECIPE_1ST + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strStepID); //7. STEP_CURRENT + strLine += strValue+strDiv; + strValue.Format("%s", pGlassData->m_strRecipeName); //8. RECIPE_CURRENT + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nCellGate); //9. GATE1, ��蹂� Gate�씪�씤(�뼹�씪�씤 蹂댁젙 �쟾) + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nCellData); //10. DATA1, ��蹂� Data�씪�씤(�뼹�씪�씤 蹂댁젙 �쟾) + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nCellGateAlign); //11. GATE2, ��蹂� Gate�씪�씤(�뼹�씪�씤 蹂댁젙 �썑) + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nCellDataAlign); //12. DATA2, ��蹂� Data�씪�씤(�뼹�씪�씤 蹂댁젙 �썑) + strLine += strValue+strDiv; + + + + //_grmGlassData* pGlass = pData->GetGlassData(); + + + + // x,y醫뚰몴 mm�떒�쐞 �냼�닔�젏 �꽭�옄由ш퉴吏� �몴�쁽 (怨좉컼�궗 �슂泥�) - 2019-01-30 HJH + if(pGlassData->m_nScanCoordinateY == 1) //遺꾪뙋�꽕鍮꾩쓽 寃쎌슦 XY諛섏쟾 + { + strValue.Format("%.3lf", pDefectData->m_nUMCenterAlignY / 1000.0); //13. X1, um�떒�쐞 X醫뚰몴 (Glass Center 湲곗�, �뼹�씪�씤蹂댁젙 �썑) + strLine += strValue+strDiv; + strValue.Format("%.3lf", pDefectData->m_nUMCenterAlignX / 1000.0); //14. Y1, um�떒�쐞 Y醫뚰몴 (Glass Center 湲곗�, �뼹�씪�씤蹂댁젙 �썑) + strLine += strValue+strDiv; + strValue.Format("%.3lf", pDefectData->m_nUMCellY / 1000.0); //15. X2, �� �썝�젏 湲곗� x 醫뚰몴 + strLine += strValue+strDiv; + strValue.Format("%.3lf", pDefectData->m_nUMCellX / 1000.0); //16. Y2, �� �썝�젏 湲곗� y 醫뚰몴 + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_DefectType); //17. AOI_DEFECT_TYPE, SERVER_DefectType + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nLevelSrcMax); //18. AOI_GRAY_H, 寃고븿 諛앷린 Max + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nLevelSrcMin); //19. AOI_GRAY_L, 寃고븿 諛앷린 Min + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nLevelSrcAvg); //20. AOI_GRAY_AVE, 寃고븿 諛앷린 Avg + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nPixelSize); //21. AOI_DEFECT_AREA + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nDefectRScale); //22. AOI_DEFECT_LGT, 寃고븿 湲몄씠 + strLine += strValue+strDiv; + strValue.Format("%s", GetDefectInfoToString(DMT_DefectSizeType, pDefectData->m_DefectSizeType)); //23. AOI_DEFECT_WID , <- 190106 怨좉컼 �떞�떦�옄 �슂泥� �궎�겙�뿬�옄 �궗�씠利덊��엯�쑝濡쒕줈 蹂�寃� + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_sPixelWidth); //24. AOI_DEFECT_HGT + } + else + { + strValue.Format("%.3lf", pDefectData->m_nUMCenterAlignX / 1000.0); //13. X1, um�떒�쐞 X醫뚰몴 (Glass Center 湲곗�, �뼹�씪�씤蹂댁젙 �썑) + strLine += strValue+strDiv; + strValue.Format("%.3lf", pDefectData->m_nUMCenterAlignY / 1000.0); //14. Y1, um�떒�쐞 Y醫뚰몴 (Glass Center 湲곗�, �뼹�씪�씤蹂댁젙 �썑) + strLine += strValue+strDiv; + strValue.Format("%.3lf", pDefectData->m_nUMCellX / 1000.0); //15. X2, �� �썝�젏 湲곗� x 醫뚰몴 + strLine += strValue+strDiv; + strValue.Format("%.3lf", pDefectData->m_nUMCellY / 1000.0); //16. Y2, �� �썝�젏 湲곗� y 醫뚰몴 + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_DefectType); //17. AOI_DEFECT_TYPE, SERVER_DefectType + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nLevelSrcMax); //18. AOI_GRAY_H, 寃고븿 諛앷린 Max + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nLevelSrcMin); //19. AOI_GRAY_L, 寃고븿 諛앷린 Min + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nLevelSrcAvg); //20. AOI_GRAY_AVE, 寃고븿 諛앷린 Avg + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nPixelSize); //21. AOI_DEFECT_AREA + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nDefectRScale); //22. AOI_DEFECT_LGT, 寃고븿 湲몄씠 + strLine += strValue+strDiv; + strValue.Format("%s", GetDefectInfoToString(DMT_DefectSizeType, pDefectData->m_DefectSizeType)); //23. AOI_DEFECT_WID, <- 190106 怨좉컼 �떞�떦�옄 �슂泥� �궎�겙�뿬�옄 �궗�씠利덊��엯�쑝濡쒕줈 蹂�寃� + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_sPixelHeight); //24. AOI_DEFECT_HGT + } + + + + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_DefectSizeType); //25. AOI_DEFECT_WIH, SERVER_DefectSizeType + strLine += strValue+strDiv; + strValue.Format("%.3f", pDefectData->m_nUMSize); //26. AOI_DEFECT_SIZE + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nPixelSize); //27. DEFECT_PIX + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_DefectSubType == 2 ? 1:0); //28. MASK_DEFECT, �븳 Glass�뿉�꽌 諛쒓껄�맂 留덉뒪�겕寃고븿 臾띠쓬�쓽 + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_DefectSubType == 3 ? 1:0); //29. REPEAT_DEFECT, �뿰�냽寃고븿諛쒓껄�쐞�븳 �룞�씪醫뚰몴 諛섎났�닔 + strLine += strValue+strDiv; + strValue.Format("%s", pDefectData->m_ReviewDefect.m_strRevImageName); //30. DEFECT_IMAGE_DATA + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_nDefectIdx); //31. AOI_CCD_NO + strLine += strValue+strDiv; + strValue.Format("%d", pDefectData->m_ReviewDefect.m_nShotIndex); //32. AOI_REVIEW_NO + strLine += strValue+strDiv; + strValue.Format("%s", "A*"); //33. OP_ID_1ST + strLine += strValue+strDiv; + strValue.Format("%s", "A*"); //34. OP_ID_2ND + strLine += strValue+strDiv; + strValue.Format("%s", "A*"); //35. OP_ID_CURRENT + strLine += strValue+strDiv; + strValue.Format("%s", GetDefectInfoToString(DMT_DefectSizeType, pDefectData->m_DefectJudgement)); //36. DEFECT_JUGDE_1ST + strLine += strValue+strDiv; + strValue.Format("%s", "O"); //37. DEFECT_JUGDE_2ND + strLine += strValue+strDiv; + strValue.Format("%s", GetDefectInfoToString(DMT_DefectSizeType, pDefectData->m_DefectJudgement)); //38. DEFECT_JUGDE_CURRENT + strLine += strValue+strDiv; + strValue.Format("%s", "A"); //39. DEFECT_REASON1 + strLine += strValue+strDiv; + strValue.Format("%s", "A"); //40. DEFECT_REASON2 + strLine += strValue+strDiv; + strValue.Format("%s", "A"); //41. DEFECT_REASON3 + strLine += strValue+strDiv; + strValue.Format("%.2lf", pDefectData->m_ReviewDefect.m_fWsi_ResultData[1]);//42. WSI_JUDGE + strLine += strValue+strDiv; + //KMS - 20190128 MuraDefect �궡�슜 異붽� + _MacroDefect* pMuraDefect = m_MuraResultFile.FindDefect(pDefectData->m_nUMCenterAlignX, pDefectData->m_nUMCenterAlignY); + _MacroDefect MuraDefect; + if(pMuraDefect) MuraDefect = *pMuraDefect; + strValue.Format("%d", MuraDefect.G_MAX); //43. MURA_GRAY_H + strLine += strValue+strDiv; + strValue.Format("%d", MuraDefect.G_MIN); //44. MURA_GRAY_L + strLine += strValue+strDiv; + strValue.Format("%d", MuraDefect.G_AVG); //45. MURA_GRAY_AVE + strLine += strValue+strDiv; + strValue.Format("%d", MuraDefect.SIZE_S); //46. MURA_AREA + strLine += strValue+strDiv; + strValue.Format("%d", MuraDefect.SIZE_L); //47. MURA_LGT + strLine += strValue+strDiv; + strValue.Format("%d", MuraDefect.SIZE_W); //48. MURA_WID + strLine += strValue+strDiv; + strValue.Format("%d", MuraDefect.COORD_Y1); //49. MURA_HGT + strLine += strValue+strDiv; + strValue.Format("%d", MuraDefect.SIZE_S); //50. MURA_SIZE + strLine += strValue+strDiv; + strValue.Format("%d", MuraDefect.COORD_PX1); //51. MURA_PIX + strLine += strValue+strDiv; + strValue.Format("%s", MuraDefect.MAIN_TYPE.GetBuffer(0)); //52. MURA_TYPE + strLine += strValue+strDiv; + strValue.Format("%s", MuraDefect.JUDGE.GetBuffer(0)); //53. MURA_JUDGE + strLine += strValue+strDiv; + strValue.Format("%s", MuraDefect.SUB_TYPE.GetBuffer(0)); //54. MURA_GRADE + strLine += strValue+strDiv; + strValue.Format("%s", MuraDefect.IMG_FILE_NAME.GetBuffer(0)); //55. MURA_IMAGE_DATA + strLine += strValue+strDiv; + strValue.Format("%s", "*"); //56. RSRV1 + strLine += strValue+strDiv; + strValue.Format("%s", "*"); //57. RSRV2 + strLine += strValue+strDiv; + strValue.Format("%s", "*"); //58. RSRV3 + strLine += strValue+strDiv; + strValue.Format("%s", "*"); //59. RSRV4 + strLine += strValue+strDiv; + strValue.Format("%s", "*"); //60. RSRV5 + strLine += strValue+strDiv; + strValue.Format("%s", "*"); //61. RSRV6 + strLine += strValue+strDiv; + strValue.Format("%s", "*"); //62. RSRV7 + strLine += strValue+strDiv; + strValue.Format("%s", "*"); //63. RSRV8 + strLine += strValue+strDiv; + strValue.Format("%s", "*"); //64. RSRV9 + strLine += strValue+strDiv; + strValue.Format("%s", pDefectData->m_strAoiImageName); //65. FILE_NAME + strLine += strValue; + + return TRUE; +} + +BOOL CGlassRawDemo::ReadMuraFile( CgrmGlassRawData* pData ) +{ + if(m_MuraResultFile.m_strServerResultRawPath.IsEmpty() == FALSE)//�씫�� 寃곌낵 �뙆�씪 蹂듭궗,�궘�젣 �깭�쁽[2017/3/29] + { + CString strMacroFilePath; + { + strMacroFilePath.Format("%s\\%s_*.dat", m_MuraResultFile.m_strMacroResultRawPath, pData->GetGlassData()->m_strGlassID); + + CFileFind FF; + + if (FF.FindFile(strMacroFilePath)) + { + FF.FindNextFile(); + strMacroFilePath = FF.GetFilePath(); + FF.Close(); + } + else + { + AKLOG("Find Macro File Fail. [%s]", strMacroFilePath); + return FALSE; + } + } + + + CString strMacroResultTargetPath; + strMacroResultTargetPath.Format("%s\\%s.dat", m_MuraResultFile.m_strServerResultRawPath, pData->GetGlassData()->m_strGlassID); + + if(TRUE == CopyFile(strMacroFilePath,strMacroResultTargetPath,FALSE)) + { + if(m_MuraResultFile.openFile(strMacroResultTargetPath.GetBuffer(0)) == TRUE) + { + AKLOG("Macro File Read Success : %dItem", m_MuraResultFile.GetDefectNum()); + //DeleteFile(strMacroResultTargetPath); //�궘�젣�뒗 hddspacectrl�씠 �븯�뒗 寃껋쑝濡� �넻�씪 + } + else + { + AKLOG("Macro File Read Fail[%s]", strMacroFilePath); + //DeleteFile(strMacroResultTargetPath); //�궘�젣�뒗 hddspacectrl�씠 �븯�뒗 寃껋쑝濡� �넻�씪 + return FALSE; + } + } + } + + //臾대씪 �씠誘몄� 蹂듭궗(ftp�뾽濡쒕뱶瑜� �쐞�븿) [源��깭�쁽 2018/12/5] + if(m_MuraResultFile.m_strMacroResultImagePath.IsEmpty() == FALSE && m_MuraResultFile.m_strServerResultImagePath.IsEmpty() == FALSE)//�씠誘몄� �뙆�씪 蹂듭궗 �깭�쁽[2017/3/29] + { + CString strMacroImageSrcPath; + CString strMacroImageTarPath; + + strMacroImageSrcPath.Format("%s\\%s", m_MuraResultFile.m_strMacroResultImagePath, pData->GetGlassData()->m_strGlassID); + strMacroImageTarPath.Format("%s\\%s", m_MuraResultFile.m_strServerResultImagePath, pData->GetGlassData()->m_strGlassID); + + AKLOG("Macro Image File Copy Start[%s]", strMacroImageTarPath); + CakFileUtil::CopyFolder(strMacroImageSrcPath.GetBuffer(0), strMacroImageTarPath.GetBuffer(0), FALSE); + AKLOG("Macro Image File Copy End"); + } + + return TRUE; +} + + +void CGlassRawDemo::SendMessageFTPUploadLinkFile( _grmGlassData* pGlassData ) +{ + if(pGlassData == NULL) return; + HWND hWnd = ::FindWindow(NULL, "FTPUploader"); + if(hWnd == NULL) return; + + char strServerFolder[256] = {}; + char strServerFile[256] = {}; + char strLocalFolder[256] = {}; + char pLocalFile[256] = {}; + GetFormatDescription(FTPCMD_LINK, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); + + CFTPCopyDataParam upParam; + strcpy(upParam.m_strServer_FolderName, strServerFolder); + strcpy(upParam.m_strServer_FileName, strServerFile); + strcpy(upParam.m_strLocal_FolderName, strLocalFolder); + strcpy(upParam.m_strLocal_FileName, pLocalFile); + strcpy(upParam.m_strServer_SignalFolderName, ""); + strcpy(upParam.m_strServer_SignalFileName, ""); + upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); + upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); + upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_UpFile; + + COPYDATASTRUCT cds; + cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawUpload; + cds.cbData = sizeof(CFTPCopyDataParam); + cds.lpData = &upParam; + + DWORD dwReturn = 0; + if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) + { + } + +} + +void CGlassRawDemo::SendMessageFTPUploadRaw( _grmGlassData* pGlassData ) +{ + if(pGlassData == NULL) return; + HWND hWnd = ::FindWindow(NULL, "FTPUploader"); + if(hWnd == NULL) return; + + char strServerFolder[256] = {}; + char strServerFile[256] = {}; + char strLocalFolder[256] = {}; + char pLocalFile[256] = {}; + GetFormatDescription(FTPCMD_RAW, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); + + CFTPCopyDataParam upParam; + strcpy(upParam.m_strServer_FolderName, strServerFolder); + strcpy(upParam.m_strServer_FileName, strServerFile); + strcpy(upParam.m_strLocal_FolderName, strLocalFolder); + strcpy(upParam.m_strLocal_FileName, pLocalFile); + strcpy(upParam.m_strServer_SignalFolderName, ""); + strcpy(upParam.m_strServer_SignalFileName, ""); + upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); + upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); + upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_UpFile; + + COPYDATASTRUCT cds; + cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawUpload; + cds.cbData = sizeof(CFTPCopyDataParam); + cds.lpData = &upParam; + + DWORD dwReturn = 0; + if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) + { + } + +} + +void CGlassRawDemo::SendMessageFTPDownloadStack( _grmGlassData* pGlassData ) +{ + if(pGlassData == NULL) return; + HWND hWnd = ::FindWindow(NULL, "FTPUploader"); + if(hWnd == NULL) return; + + char strServerFolder[256] = {}; + char strServerFile[256] = {}; + char strLocalFolder[256] = {}; + char pLocalFile[256] = {}; + GetFormatDescription(FTPCMD_STACK, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); + + CFTPCopyDataParam upParam; + strcpy(upParam.m_strServer_FolderName, strServerFolder); + strcpy(upParam.m_strServer_FileName, strServerFile); + strcpy(upParam.m_strLocal_FolderName, strLocalFolder); + strcpy(upParam.m_strLocal_FileName, pLocalFile); + strcpy(upParam.m_strServer_SignalFolderName, ""); + strcpy(upParam.m_strServer_SignalFileName, ""); + upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); + upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); + upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_DownFile; + + COPYDATASTRUCT cds; + cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawDownload; + cds.cbData = sizeof(CFTPCopyDataParam); + cds.lpData = &upParam; + + DWORD dwReturn = 0; + if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) + { + } +} + +void CGlassRawDemo::SendMessageFTPDownloadDataFile( _grmGlassData* pGlassData ) +{ + if(pGlassData == NULL) return; + HWND hWnd = ::FindWindow(NULL, "FTPDownloader"); + if(hWnd == NULL) return; + + char strServerFolder[256] = {}; + char strServerFile[256] = {}; + char strLocalFolder[256] = {}; + char pLocalFile[256] = {}; + + //GetFormatDescription(FTPCMD_DATAFILE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); + { + CString strGlassIDOrg = pGlassData->m_strGlassID; + CString strGlassID = strGlassIDOrg.Left(12); + sprintf(strServerFolder, "%s", pGlassData->m_strCassetteSequenceNo); + sprintf(strServerFile, "%s.dat", strGlassID.GetBuffer(0)); + sprintf(strLocalFolder, "D:\\DIT_ResultData\\DownloadData"); + sprintf(pLocalFile, "%s.dat", strGlassID.GetBuffer(0)); + } + + CFTPCopyDataParam upParam; + strcpy(upParam.m_strServer_FolderName, strServerFolder); + strcpy(upParam.m_strServer_FileName, strServerFile); + strcpy(upParam.m_strLocal_FolderName, strLocalFolder); + strcpy(upParam.m_strLocal_FileName, pLocalFile); + strcpy(upParam.m_strServer_SignalFolderName, ""); + strcpy(upParam.m_strServer_SignalFileName, ""); + upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); + upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); + upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_DownFile; + + COPYDATASTRUCT cds; + cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawDownload; + cds.cbData = sizeof(CFTPCopyDataParam); + cds.lpData = &upParam; + + DWORD dwReturn = 0; + if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) + { + } +} + +void CGlassRawDemo::SendMessageFTPUploadImage( _grmGlassData* pGlassData, emFTPCommand sort) +{ + if(pGlassData == NULL) return; + HWND hWnd = ::FindWindow(NULL, "FTPUploader"); + if(hWnd == NULL) return; + + char strServerFolder[256] = {}; + char strServerFile[32];// = "*.*"; + char strLocalFolder[256] = {}; + char strLocalFile[32];// = "*.*"; + + GetFormatDescription(sort, strServerFolder, strServerFile, strLocalFolder, strLocalFile, pGlassData); + +// if(0)//test +// { +// sprintf(strServerFolder, "HDD1/DIT/TestC"); +// } + + CFTPCopyDataParam upParam; + strcpy(upParam.m_strServer_FolderName, strServerFolder); + strcpy(upParam.m_strServer_FileName, strServerFile); + strcpy(upParam.m_strLocal_FolderName, strLocalFolder); + strcpy(upParam.m_strLocal_FileName, strLocalFile); + strcpy(upParam.m_strServer_SignalFolderName, ""); + strcpy(upParam.m_strServer_SignalFileName, ""); + upParam.m_nCreateSignalFile = FALSE; + upParam.m_nSendResultCode = FALSE; + upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_UpFile; + + COPYDATASTRUCT cds; + cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawUpload; //<--�슂嫄� �굹以묒뿉 援щ텇 + cds.cbData = sizeof(CFTPCopyDataParam); + cds.lpData = &upParam; + + DWORD dwReturn = 0; + if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) + { + } +} + + +BOOL CGlassRawDemo::SendMessageFTPUploadIndexFile( _grmGlassData* pGlassData ) +{ + if(pGlassData == NULL) + return FALSE; + + HWND hWnd = ::FindWindow(NULL, "FTPUploader"); + if(hWnd == NULL) return FALSE; + + + char strServerFolder[256] = {}; + char strServerFile[256] = {}; + char strLocalFolder[256] = {}; + char pLocalFile[256] = {}; + + GetFormatDescription(FTPCMD_INDEX, strServerFolder, strServerFile, strLocalFolder, pLocalFile, pGlassData); + + + // if(0)//test + // { + // sprintf(strServerFolder, "HDD1/DIT/TestC"); + // ServerFile = "ftptestfile.txt"; + // + // sprintf(strLocalFolder, "D:"); + // pLocalFile = "ftptestfile.txt"; + // } + + + CFTPCopyDataParam upParam; + strcpy(upParam.m_strServer_FolderName, strServerFolder); + strcpy(upParam.m_strServer_FileName, strServerFile); + strcpy(upParam.m_strLocal_FolderName, strLocalFolder); + strcpy(upParam.m_strLocal_FileName, pLocalFile); + strcpy(upParam.m_strServer_SignalFolderName, ""); + strcpy(upParam.m_strServer_SignalFileName, ""); + upParam.m_nCreateSignalFile = FALSE;//m_ctrlCreateSignal.GetCheck(); + upParam.m_nSendResultCode = FALSE;//m_ctrlResultAck.GetCheck(); + upParam.m_nProcessType = CFTPCopyDataParam::FTPProcessType_UpFile; + + COPYDATASTRUCT cds; + cds.dwData = CFTPCopyDataParam::FTPCopyDataCmd_RawUpload; + cds.cbData = sizeof(CFTPCopyDataParam); + cds.lpData = &upParam; + + DWORD dwReturn = 0; + if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE) + { + } + return TRUE; +} + +void CGlassRawDemo::GetFormatDescription(emFTPCommand sort, char* pServerPath, char* pServerFile, char* pLocalPath, char* pLocalFile, _grmGlassData* pGlassData) +{ + + CString strGlassIDOrg = pGlassData->m_strGlassID; + CString strGlassID = strGlassIDOrg.Left(12); + CString strGlassIDLevel5th = strGlassID.Left(5); + CString strGlassIDLevel8th = strGlassID.Left(8); + + switch(sort) + { + case FTPCMD_AOI_IMAGE: + { + CTime time = m_tmFileCreateTime; + + sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), + strGlassIDLevel5th.GetBuffer(0), + strGlassIDLevel8th.GetBuffer(0), + strGlassID.GetBuffer(0)); + + sprintf(pLocalPath, "%s%s", LOCAL_AOI_IMAGE_PATH, strGlassID.GetBuffer(0)); + strcpy(pServerFile, "*.*"); + strcpy(pLocalFile, "*.*"); + } + break; + case FTPCMD_REVIEW_IMAGE: + { + CTime time = m_tmFileCreateTime; + + sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), + strGlassIDLevel5th.GetBuffer(0), + strGlassIDLevel8th.GetBuffer(0), + strGlassID.GetBuffer(0)); + + sprintf(pLocalPath, "%s%s", LOCAL_REV_IMAGE_PATH, strGlassID.GetBuffer(0)); + strcpy(pServerFile, "*.*"); + strcpy(pLocalFile, "*.*"); + } + break; + case FTPCMD_RAW: + { + CTime time = m_tmFileCreateTime; + CString strFileName;//�뙆�씪�깮�꽦 �떆媛� �븣臾몄뿉 �뿬湲곗꽌 �젙�솗�븯寃� �뙆�씪紐� �떎�떆 �젙�젙 + { + //Glass �젙蹂� + CTime CurrTime = m_tmFileCreateTime; + CString strTime; + strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), + CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); + strFileName.Format("%s_%s_%s.csv", pGlassData->m_strOperID, pGlassData->m_strGlassID, strTime.GetBuffer(0)); + } + sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Data", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), + strGlassIDLevel5th.GetBuffer(0), + strGlassIDLevel8th.GetBuffer(0), + strGlassID.GetBuffer(0)); + + sprintf(pLocalPath, "%s", pGlassData->m_strPath); + + sprintf(pServerFile, "%s", strFileName.GetBuffer(0)); + sprintf(pLocalFile, "%s", strFileName.GetBuffer(0)); + } + break; + case FTPCMD_STACK: + { +// CTime time = pGlassData->m_tmGlassLoading; +// sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Data", m_StackResult.getStackEquipID(), time.GetYear(), time.GetMonth(), time.GetDay(), +// strGlassIDLevel5th.GetBuffer(0), +// strGlassIDLevel8th.GetBuffer(0), +// strGlassID.GetBuffer(0)); +// +// //媛��옣 理쒓렐嫄� 李얠븘�빞 �븯�굹? [源��깭�쁽 2019/1/12] +// sprintf(pServerFile, "%s_%s_*.csv", +// m_StackResult.getStackOperID(), +// pGlassData->m_strGlassID); +// +// sprintf(pLocalPath, "%s", m_StackResult.getStackLocalPath()); +// sprintf(pLocalFile, "%s.txt", strGlassID.GetBuffer(0)); + } + break; + case FTPCMD_MURA_IMAGE: + { + CTime time = m_tmFileCreateTime; + sprintf(pServerPath, "%s\\%04d%02d%02d\\%s\\%s\\%s\\Image", pGlassData->m_strEquipID, time.GetYear(), time.GetMonth(), time.GetDay(), + strGlassIDLevel5th.GetBuffer(0), + strGlassIDLevel8th.GetBuffer(0), + strGlassID.GetBuffer(0)); + + sprintf(pLocalPath, "%s%s", LOCAL_MURA_IMAGE_PATH, strGlassID.GetBuffer(0)); + strcpy(pServerFile, "*.*"); + strcpy(pLocalFile, "*.*"); + } + break; + case FTPCMD_INDEX: + { + CTime time = m_tmFileCreateTime; + sprintf(pServerPath, "INDEX\\%s", pGlassData->m_strEquipID); + sprintf(pServerFile, "%04d%02d%02d_%s.csv", time.GetYear(), time.GetMonth(), time.GetDay(), pGlassData->m_strStepID); + + sprintf(pLocalPath, "%s", LOCAL_INDEX_PATH); + sprintf(pLocalFile, "%s", pServerFile); + } + break; + + case FTPCMD_LINK: + { + CTime time = m_tmFileCreateTime; + CString strFileName;//�뙆�씪�깮�꽦 �떆媛� �븣臾몄뿉 �뿬湲곗꽌 �젙�솗�븯寃� �뙆�씪紐� �떎�떆 �젙�젙 + { + //Glass �젙蹂� + CTime CurrTime = m_tmFileCreateTime; + CString strTime; + strTime.Format(_T("%04d%02d%02d_%02d%02d%02d"), + CurrTime.GetYear(), CurrTime.GetMonth(), CurrTime.GetDay(), CurrTime.GetHour(), CurrTime.GetMinute(), CurrTime.GetSecond()); + strFileName.Format("%s_%s_%s.csv", pGlassData->m_strOperID, pGlassData->m_strGlassID, strTime.GetBuffer(0)); + } + sprintf(pServerPath, "%s\\%s\\%s\\%s\\%s", "LINK", pGlassData->m_strEquipID, + strGlassIDLevel5th.GetBuffer(0), + strGlassIDLevel8th.GetBuffer(0), + strGlassID.GetBuffer(0)); + + sprintf(pLocalPath, "%s", pGlassData->m_strPath); + + sprintf(pServerFile, "%s", strFileName.GetBuffer(0)); + sprintf(pLocalFile, "%s", strFileName.GetBuffer(0)); + } + break; + } + + +} + + + +CString CGlassRawDemo::GetDefectInfoToString(emDefectMemberType nDefectInfoType, int nParam) +{ + CString sStr; + switch(nDefectInfoType) + { + case DMT_DefectJudge:// Judge + { + switch(nParam) + { + case 0: sStr.Format("O"); + break; + default: sStr.Format("O");//sStr.Format("Ets"); + break; + } + } + break; + + case DMT_DefectSizeType: + { + sStr = "S"; + switch(nParam) + { + //case SizeType_Unknown: sStr.Format("U"); break; + case 1/*SizeType_Small*/: sStr.Format("S"); + break; + case 2/*SizeType_Mid*/: sStr.Format("M"); + break; + case 3/*SizeType_Large*/: sStr.Format("L"); + break; + case 4/*SizeType_Huge*/: sStr.Format("O"); + break; + //case SizeType_Ultra: sStr.Format("Ultra"); break; + //default: sStr.Format("Ets"); break; + } + } + break; + + + } + return sStr; +} -- Gitblit v1.9.3