SDC C-Project CF Review 프로그램
LYW
2022-04-01 9c13bc5af33d28bb217995597f88fe863db42442
AOI RawMessnger 동기화
1개 파일 삭제됨
24개 파일 변경됨
1752 ■■■■■ 파일 변경됨
DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp 37 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/CustomizeReview.cpp 2 ●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.rc 2 ●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp 61 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h 14 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.cpp 11 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.h 5 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp 4 ●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h 9 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp 607 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.h 15 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCSOT.cpp 2 ●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawDemo.cpp 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawRTMS.cpp 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.cpp 2 ●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.h 2 ●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp 149 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.h 7 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/StackResultCPJT.cpp 24 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/StackResultCPJT.h 2 ●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/StackResultCSOT.cpp 2 ●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/akLoggerExt.cpp 2 ●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/Extern/DitGlassRawClient.cpp 23 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/Extern/DitGlassRawClient.h 9 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/Extern/DitGlassRawStruct_0331.h 750 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/AnaResultFile.cpp
@@ -19,9 +19,15 @@
BOOL CAnaResultFile::MakeAnaFile(CgrmGlassRawData* pData)
{
    //return TRUE;
    /* < KJG 20220225 - #4000 MOD Start >*/
    //CString strFilePathName;
    //strFilePathName.Format("%s\\%sana", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strFileName);
    char* pCellCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    CString strFilePathName;
    strFilePathName.Format("%s\\%sana", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strFileName);
    CString strFileName = pData->GetGlassData()->m_strFileName;
    strFileName.Replace(".bin", ".csv");
    strFilePathName.Format("%s\\%s", pData->GetGlassData()->m_strPath, strFileName);
    /* < KJG 20220225 - #4000 MOD End >*/
    FILE* pf = fopen(strFilePathName.GetBuffer(0), "w");
    if (pf == NULL)
@@ -29,9 +35,12 @@
        AKLOG("MakeAOIFile Fail : [%s]", strFilePathName.GetBuffer(0));
        return FALSE;
    }
    /* < KJG 20220225 - #4000 MOD Start >*/
    //fprintf(pf, "%s\n", pData->GetGlassData()->m_strGlassID);
    //fprintf(pf, "GlassID, m_strImageName, m_strDefectCode, UMCenterAlignX, UMCenterAlignY, m_nLevelSrcMin, m_nLevelSrcMax, m_nLevelSrcAvg, m_nLevelRefMin, m_nLevelRefMax, m_nLevelRefAvg, m_nLevelDiffMin, m_nLevelDiffMax, m_nLevelDiffAvg");
    fprintf(pf, "GlassID, SubPanelID, m_strImageName, m_strDefectCode, UMCenterAlignX, UMCenterAlignY, m_nLevelSrcMin, m_nLevelSrcMax, m_nLevelSrcAvg, m_nLevelRefMin, m_nLevelRefMax, m_nLevelRefAvg, m_nLevelDiffMin, m_nLevelDiffMax, m_nLevelDiffAvg");
    /* < KJG 20220225 - #4000 MOD End >*/
    fprintf(pf, "%s\n", pData->GetGlassData()->m_strGlassID);
    fprintf(pf, "GlassID, 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);
    //210123 CJH - Zone별 min, max, avg ê°’ í‘œê¸°
    for (int i = 0; i < MAX_ZONE_NUM; i++) fprintf(pf, ",ZoneDiffMin%02d", i);
@@ -46,13 +55,21 @@
    for (int iDefect = 0; iDefect < pData->GetGlassData()->m_nDefectNum; iDefect++)
    {
        _grmDefectData* pDefect = pData->GetDefectData(iDefect);
        /* < KJG 20220225 - #4000 ADD Start >*/
        CString strDefectCellID;
        strDefectCellID.Format("%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pDefect->m_nCellIdx / 36, pCellCode[pDefect->m_nCellIdx % 36]);
        /* < KJG 20220225 - #4000 ADD End >*/
        if (pData->GetGlassData()->m_nScanCoordinateY == 1) //분판설비의 ê²½ìš° XY반전
        {
            fprintf(pf, "%s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d",
                pData->GetGlassData()->m_strGlassID, pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignY / 1000.0, (double)pDefect->m_nUMCenterAlignX / 1000.0,
            /* < KJG 20220225 - #4000 MOD Start >*/
            //fprintf(pf, "%s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d",
            //    pData->GetGlassData()->m_strGlassID, pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignY / 1000.0, (double)pDefect->m_nUMCenterAlignX / 1000.0,
            fprintf(pf, "%s, %s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d",
                pData->GetGlassData()->m_strGlassID, strDefectCellID.GetBuffer(0), 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);
            /* < KJG 20220225 - #4000 MOD End >*/
            for (int iz = 0; iz < MAX_ZONE_NUM; iz++)
            {
                fprintf(pf, ",%d", pDefect->m_sZonePixelCount[iz]);
@@ -91,11 +108,15 @@
        }
        else
        {
            fprintf(pf, "%s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d",
                pData->GetGlassData()->m_strGlassID, pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignX / 1000.0, (double)pDefect->m_nUMCenterAlignY / 1000.0,
            /* < KJG 20220225 - #4000 MOD Start >*/
            //fprintf(pf, "%s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d",
            //    pData->GetGlassData()->m_strGlassID, pDefect->m_strAoiImageName, pDefect->m_strDefectCode, (double)pDefect->m_nUMCenterAlignX / 1000.0, (double)pDefect->m_nUMCenterAlignY / 1000.0,
            fprintf(pf, "%s, %s, %s, %s, %.3lf, %.3lf, %d, %d, %d, %d, %d, %d, %d, %d, %d",
                pData->GetGlassData()->m_strGlassID, strDefectCellID.GetBuffer(0), 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);
            /* < KJG 20220225 - #4000 MOD End >*/
            for (int iz = 0; iz < MAX_ZONE_NUM; iz++)
            {
                fprintf(pf, ",%d", pDefect->m_sZonePixelCount[iz]);
DitGlassRawMessenger/DitGlassRawMessenger/CustomizeReview.cpp
@@ -9,7 +9,7 @@
#define new DEBUG_NEW
#endif
#define CUSTOMIZE_RECIPE_PATH "C:\\DIT_Review\\Recipe"
#define CUSTOMIZE_RECIPE_PATH "D:\\DIT_Review\\Recipe"
CCustomizeReview::CCustomizeReview(void)
{
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessenger.rc
@@ -146,7 +146,7 @@
    PUSHBUTTON      "Manual\nFTP Upload",IDC_BTN_FTP_MANUALUPLOAD,418,20,39,31,BS_MULTILINE | WS_DISABLED
    LTEXT           "Stack File",IDC_STATIC,16,100,30,8
    LTEXT           "RawMerge File",IDC_STATIC,15,115,46,8
    CONTROL         "",IDC_CHECK_RAWMERGEFILEREAD,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,72,115,16,10
    CONTROL         "",IDC_CHECK_RAWMERGEFILEREAD,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,72,115,16,10
    EDITTEXT        IDC_EDIT_RAWMERGE_LOCALSAVEPATH,94,112,121,14,ES_AUTOHSCROLL
END
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.cpp
@@ -166,6 +166,9 @@
    ON_BN_CLICKED(IDC_BTN_STACKAPPLY, &CDitGlassRawMessengerDlg::OnBnClickedBtnStackapply)
    ON_BN_CLICKED(IDC_TEST_CMD, &CDitGlassRawMessengerDlg::OnBnClickedTestCmd)
    ON_BN_CLICKED(IDC_BTN_FTP_MANUALUPLOAD, &CDitGlassRawMessengerDlg::OnBnClickedBtnFtpManualupload)
    /* <LJC 20211122 : #3820 ADD Start> */
    ON_WM_COPYDATA()
    /* <LJC 20211122 : #3820 ADD End> */
END_MESSAGE_MAP()
void GetCompileTime(tm& timestruct)
@@ -251,11 +254,13 @@
        akFileDB.getItem("DataMaxNumCell", &m_ConfigOption.m_nMaxDataNumCell, 200);
        akFileDB.getItem("DataMaxNumDefect", &m_ConfigOption.m_nMaxDataNumDefect, 50000);
        akFileDB.getItem("SelectRawType", &m_ConfigOption.m_nSelectRawType, 0);
        akFileDB.getItem("LogFilePath", m_ConfigOption.m_strLogFilePath, "c:\\AOIServer\\LogRawMessenger\\LogRawMessenger");
        akFileDB.getItem("LogFilePath", m_ConfigOption.m_strLogFilePath, "D:\\AOIServer\\LogRawMessenger\\LogRawMessenger");
        akFileDB.getItem("Stack_Use", &m_ConfigOption.m_bUseStack, 0);
        akFileDB.getItem("Stack_LocalPath", m_ConfigOption.m_strStackLocalPath, "D:\\DIT_ResultData\\Stack");
        /*< KJG 20211024 - #3487 ADD Start >*/
        akFileDB.getItem("RawMerge_Use", &m_ConfigOption.m_bUseRawMerge, 0);
        akFileDB.getItem("RawMerge_LocalPath", m_ConfigOption.m_strRawMergeLocalPath, "D:\\DIT_ResultData\\RawMerge");
        /*< KJG 20211024 - #3487 ADD End >*/
        akFileDB.getItem("Stack_EquipID",m_ConfigOption.m_strStackEquipID, "AAAAA");
        akFileDB.getItem("Stack_Param1",m_ConfigOption.m_strStackParam1, "");
        akFileDB.getItem("Stack_Param2",m_ConfigOption.m_strStackParam2, "");
@@ -280,7 +285,7 @@
        CreateDirectory(strPath, NULL);
        //CakLoggerExt::getInstance()->setWriteFileMode(m_ConfigOption.m_strLogFilePath);
        CakLoggerExt::getInstance()->setWriteFileMode2("C:\\DIT_LogData\\", "logGlassRawMessenger");
        CakLoggerExt::getInstance()->setWriteFileMode2("D:\\DIT_LogData\\", "logGlassRawMessenger");
        CakLoggerExt::getInstance()->m_hParent = GetSafeHwnd();
        m_ctrlLoggerList;
@@ -1349,8 +1354,10 @@
    akFileDB.setItem("Stack_Use", m_ConfigOption.m_bUseStack);
    akFileDB.setItem("Stack_LocalPath", m_ConfigOption.m_strStackLocalPath);
    /*< KJG 20211024 - #3487 ADD Start >*/
    akFileDB.setItem("RawMerge_Use", m_ConfigOption.m_bUseRawMerge);
    akFileDB.setItem("RawMerge_LocalPath", m_ConfigOption.m_strRawMergeLocalPath);
    /*< KJG 20211024 - #3487 ADD End >*/
    akFileDB.setItem("Stack_EquipID", m_ConfigOption.m_strStackEquipID);
    akFileDB.setItem("Stack_Param1",m_ConfigOption.m_strStackParam1);
    akFileDB.setItem("Stack_Param2",m_ConfigOption.m_strStackParam2);
@@ -1530,8 +1537,10 @@
{
    m_ConfigOption.m_bUseStack = ((CButton*)GetDlgItem(IDC_CHECK_STACKFILEREAD))->GetCheck();
    GetDlgItemText(IDC_EDIT_STACK_LOCALSAVEPATH,m_ConfigOption.m_strStackLocalPath, 256);
    /*< KJG 20211024 - #3487 ADD Start >*/
    m_ConfigOption.m_bUseRawMerge = ((CButton*)GetDlgItem(IDC_CHECK_RAWMERGEFILEREAD))->GetCheck();
    GetDlgItemText(IDC_EDIT_RAWMERGE_LOCALSAVEPATH, m_ConfigOption.m_strRawMergeLocalPath, 256);
    /*< KJG 20211024 - #3487 ADD End >*/
    GetDlgItemText(IDC_EDIT_STACK_EQUIPID,m_ConfigOption.m_strStackEquipID, 32);
    GetDlgItemText(IDC_EDIT_STACK_PARAM1,m_ConfigOption.m_strStackParam1, 32);
    GetDlgItemText(IDC_EDIT_STACK_PARAM2,m_ConfigOption.m_strStackParam2, 32);
@@ -1613,3 +1622,51 @@
    
}
/* <LJC 20211122 : #3820 ADD Start> */
BOOL CDitGlassRawMessengerDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
    // TODO: ì—¬ê¸°ì— ë©”시지 ì²˜ë¦¬ê¸° ì½”드를 ì¶”ê°€ ë°/또는 ê¸°ë³¸ê°’을 í˜¸ì¶œí•©ë‹ˆë‹¤.
    CDitGlassRawServer* pServer = (CDitGlassRawServer*)&m_Server;
    CgrmGlassRawData* pRawDataBuffer = &m_GlassRawDataBuffer;
    pRawDataBuffer->ImportGlassRaw(pServer->GetGlassRawInfo(), (char*)pServer->GetGlassData(), true);
    CFTPCopyDataParam* FTPCopyDataParam = ((CFTPCopyDataParam*)pCopyDataStruct->lpData);
    switch (pCopyDataStruct->dwData)
    {
    case COPYDATA_RAW_DOWNLOAD_ACK:
        {
        if (FTPCopyDataParam->m_nProcessType == CFTPCopyDataParam::FTPProcessType_DownFile && pServer->GetGlassRawInfo()->m_ServerProcStep == APS_GlassLoading && m_pGlassRawMaker->GetEnableFtpAck() == TRUE)
        {
            if (FTPCopyDataParam->m_nSendResultCode == TRUE)
            {
                m_pGlassRawMaker->SetEnableFtpAck(FALSE);
                m_pGlassRawMaker->SearchFIle(pRawDataBuffer);
                break;
            }
            else
            {
                m_nMaxMergeList++;
                m_pGlassRawMaker->DownLoadMergeFile(pRawDataBuffer);
                if (m_nMaxMergeList > 10)
                {
                    m_nMaxMergeList = 0;
                    break;
                }
            }
        }
        else
        {
            break;
        }
        }
        break;
    default:
        break;
    }
    return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}
/* <LJC 20211122 : #3820 ADD End> */
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawMessengerDlg.h
@@ -21,6 +21,10 @@
#define UM_GLASSRAW_CLIENTMESSAGE WM_USER+0x1231
#define UM_TRAYICON_MSG WM_USER + 0x1230
    /* <LJC 20211122 : #3820 ADD Start> */
#define    COPYDATA_RAW_DOWNLOAD_ACK    11
    /* <LJC 20211122 : #3820 ADD End> */
// CDitGlassRawMessengerDlg ëŒ€í™” ìƒìž
class CDitGlassRawMessengerDlg : public CDialog
{
@@ -55,8 +59,10 @@
        char m_strStackParam1[32];
        char m_strStackParam2[32];
        /*< KJG 20211024 - #3487 ADD Start >*/
        int  m_bUseRawMerge;
        char m_strRawMergeLocalPath[256];
        /*< KJG 20211024 - #3487 ADD End >*/
    }m_ConfigOption;
    void WriteConfigFile();
@@ -72,6 +78,10 @@
public:
    static void threadMain(void* arg);
    int m_nThreadMainFlag;
    /* <LJC 20211122 : #3820 ADD Start> */
    int m_nMaxMergeList=0;
    /* <LJC 20211122 : #3820 ADD End> */
public:
    CString m_strGlassID;
@@ -135,4 +145,8 @@
    afx_msg void OnBnClickedBtnStackapply();
    afx_msg void OnBnClickedTestCmd();
    afx_msg void OnBnClickedBtnFtpManualupload();
    /* <LJC 20211122 : #3820 ADD Start> */
    afx_msg BOOL OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct);
    /* <LJC 20211122 : #3820 ADD End> */
};
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.cpp
@@ -42,7 +42,9 @@
        || sizeof(_grmCellData) != m_pGlassRawInfo->m_nSizeOfCellData
        || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfDefectData
        || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfStackData
        /*< KJG 20211024 - #3487 ADD Start >*/
        || sizeof(_grmDefectData) != m_pGlassRawInfo->m_nSizeOfRawMergeData)
        /*< KJG 20211024 - #3487 ADD End >*/
    {
        return FALSE;
    }
@@ -52,7 +54,9 @@
    m_pGlassRawInfo->m_nCellMaxDataNum = nCellNum;
    m_pGlassRawInfo->m_nDefectMaxDataNum = nDefectNum;
    m_pGlassRawInfo->m_nStackMaxDataNum = nDefectNum;
    /*< KJG 20211024 - #3487 ADD Start >*/
    m_pGlassRawInfo->m_nRawMergeMaxDataNum = nDefectNum;
    /*< KJG 20211024 - #3487 ADD End >*/
    m_pGlassRawInfo->m_nGlassRawDataSize;
    {
@@ -73,8 +77,10 @@
        m_pGlassRawInfo->m_nStackDataPoint = nDataNum;
        nDataNum += (m_pGlassRawInfo->m_nSizeOfStackData + m_pGlassRawInfo->m_nSizeOfStackData % 4)*nDefectNum;
        
        /*< KJG 20211024 - #3487 ADD Start >*/
        m_pGlassRawInfo->m_nRawMergeDataPoint = nDataNum;
        nDataNum += (m_pGlassRawInfo->m_nSizeOfRawMergeData + m_pGlassRawInfo->m_nSizeOfRawMergeData % 4)*nDefectNum;
        /*< KJG 20211024 - #3487 ADD End >*/
        m_pGlassRawInfo->m_nGlassRawDataSize = nDataNum;
    }
@@ -130,7 +136,9 @@
            m_pGlassRawInfo->m_nSizeOfCellData = sizeof(_grmCellData);
            m_pGlassRawInfo->m_nSizeOfDefectData = sizeof(_grmDefectData);
            m_pGlassRawInfo->m_nSizeOfStackData = sizeof(_grmDefectData);
            /*< KJG 20211024 - #3487 ADD Start >*/
            m_pGlassRawInfo->m_nSizeOfRawMergeData = sizeof(_grmDefectData);
            /*< KJG 20211024 - #3487 ADD End >*/
            int bytealign = m_pGlassRawInfo->m_nSizeOfGlassData%4;
        }
@@ -184,7 +192,8 @@
    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];
    /*< KJG 20211024 - #3487 ADD Start >*/
    m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint];
    /*< KJG 20211024 - #3487 ADD End >*/
    return TRUE;
}
DitGlassRawMessenger/DitGlassRawMessenger/DitGlassRawServer.h
@@ -18,8 +18,9 @@
    _grmCellData*    GetCellData(int nIndex){return &m_pCellData[nIndex];};
    _grmDefectData*    GetDefectData(int nIndex){return &m_pDefectData[nIndex];};
    _grmDefectData*    GetStackData(int nIndex) { return &m_pStackData[nIndex]; };
    /*< KJG 20211024 - #3487 ADD Start >*/
    _grmDefectData*    GetRawMergeData(int nIndex) { return &m_pRawMergeData[nIndex]; };
    /*< KJG 20211024 - #3487 ADD End >*/
    _grmDitGlassRawInfo* GetGlassRawInfo(){return m_pGlassRawInfo;};
protected:
@@ -32,7 +33,9 @@
    _grmCellData*   m_pCellData;
    _grmDefectData* m_pDefectData;
    _grmDefectData* m_pStackData;
    /*< KJG 20211024 - #3487 ADD Start >*/
    _grmDefectData* m_pRawMergeData;
    /*< KJG 20211024 - #3487 ADD End >*/
protected:
    HANDLE        m_hMapBasicInfo;
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp
@@ -4,7 +4,9 @@
#include "akLoggerExt.h"
CGlassRawBase::CGlassRawBase(void)
{
{    /* <LJC 20211122 : #3820 ADD Start> */
    b_EnableFtpAck = FALSE;
    /* <LJC 20211122 : #3820 ADD End> */
}
CGlassRawBase::~CGlassRawBase(void)
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.h
@@ -34,7 +34,7 @@
enum ReKind { Re_Other, Re_TFE_CIRCLE, Re_PI_CONVEX, Re_PI_CONCAVE, Re_PI_1, Re_PI_2, Re_PI_3 };
//choigudal jude fix 2012.03.07
enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_Unknown };//2016.07.13 LHS Judge_Size ì¶”ê°€
enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_ND, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_LN/*KMH 220318 : #3954 ADD */, Judge_Unknown };/* <KYH 211129 : #3796 ADD Start> */
enum MAP16_DefectClass { CLASS_C1 = 1, CLASS_C2, CLASS_C3, CLASS_C4, CLASS_C5, CLASS_C6, CLASS_C7, CLASS_C8, CLASS_C9, CLASS_C10, CLASS_C11, CLASS_C12, CLASS_C13, CLASS_C14, CLASS_C15, CLASS_C16 };
enum MAP16_SizeType { SIZE_SS = 0, SIZE_SM, SIZE_SL, SIZE_SOH, SIZE_IDX_MAX };
enum MAP16_PeakType { PEEK_PS = 0, PEEK_PL, PEEK_PH, PEEK_POH, PEAK_IDX_MAX };
@@ -69,7 +69,14 @@
    virtual BOOL SequenceFtpUpload(char* pRawFileName){return TRUE;};
    virtual void NotifyUpdateOptionInfo(){};
    /* <LJC 20211122 : #3820 ADD Start> */
    virtual void DownLoadMergeFile(CgrmGlassRawData* pData) { return; };
    virtual void SearchFIle(CgrmGlassRawData* pData) { return; };
    BOOL GetEnableFtpAck() { return b_EnableFtpAck; };
    void SetEnableFtpAck(BOOL b_value) { b_EnableFtpAck = b_value; };
    BOOL b_EnableFtpAck;
    /* <LJC 20211122 : #3820 ADD End> */
};
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp
@@ -30,6 +30,12 @@
#define NETWORK_MURARAW_PATH        "\\\\126.100.100.1\\d\\DIT_ResultData\\Mura\\RAW" //0405nwh
#define NETWORK_MURA_IMAGE_PATH        "\\\\126.100.100.1\\d\\DIT_ResultData\\Mura\\IMG" //0405nwh
//KYH Stack Local ê²½ë¡œ ì¶”ê°€
#define NETWORK_AOISTACKLOCAL_PATH  "\\\\126.100.100.1\\d\\DIT_ResultData\\Stack"
    /* <LJC 20211122 : #3820 ADD Start> */
#define NETWORK_AOIRAWMERGELOCAL_PATH  "D:\\DIT_ResultData\\RawMerge"
    /* <LJC 20211122 : #3820 ADD End> */
char* g_pCellCode = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
void _TimeDelay(int delay)
@@ -37,9 +43,9 @@
    MSG        msg;
    BOOL    fRst = FALSE;
    clock_t lBlockTime = delay + clock();
    ULONGLONG lBlockTime = delay + GetTickCount64();
    while (lBlockTime > clock())
    while (lBlockTime > GetTickCount64())
    {
        fRst = (BOOL)PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
        if (fRst)
@@ -70,19 +76,51 @@
BOOL CGlassRawCPJT::SequenceGlassLoading( CgrmGlassRawData* pData )
{
    //스택기능
     SetEnableFtpAck(FALSE);
     m_nRawMergeIdx = 0;
    if(m_StackResult.getStackUse())
    {
        CString strStackFileLocalPath;
        strStackFileLocalPath.Format("%s\\%s", NETWORK_AOISTACKLOCAL_PATH, pData->GetGlassData()->m_strGlassID);
        CFileFind File;
        if (File.FindFile(strStackFileLocalPath))
        {
            File.FindNextFile();
            strStackFileLocalPath = File.GetFilePath();
            DeleteFile(strStackFileLocalPath);
            Sleep(10);
        }
        else
        {
            AKLOG("Delete Stack File Fail [%s]", strStackFileLocalPath);
        }
        //201218 CJH - Stack Download ì‹œë„
        SendMessageFTPDownloadStack(pData->GetGlassData());
        m_StackResult.StackFileReadStart(pData->GetGlassData()->m_strGlassID);
    }
    if (m_RawMergeResult.getRawMergeUse())
    /* <LJC 20211122 : #3820 ADD Start> */
    if (pData->GetGlassData()->m_bRawMergeUse)
    {
        SendMessageFTPDownloadDataFile(pData->GetGlassData());
        m_RawMergeResult.RawMergeFileReadStart(pData->GetGlassData()->m_strGlassID);
        CString strRawFileLocalPath;
        strRawFileLocalPath.Format("%s\\%s", NETWORK_AOIRAWMERGELOCAL_PATH, pData->GetGlassData()->m_strGlassID);
        CFileFind File;
        if (File.FindFile(strRawFileLocalPath))
        {
            File.FindNextFile();
            strRawFileLocalPath = File.GetFilePath();
            DeleteFile(strRawFileLocalPath);
            Sleep(10);
        }
        SetEnableFtpAck(TRUE);
        DownLoadMergeFile(pData);
    }
    /* <LJC 20211122 : #3820 ADD End> */
    /*< KJG 20211024 - #3487 ADD End >*/
    return TRUE;
}
@@ -115,7 +153,7 @@
        return FALSE;
    
    
    if (1) ReadMuraFile(pData);
    //if(1) ReadMuraFile(pData); 211012 KJG - QD Macro ê°œë³„ ì—…로드 í•˜ë¯€ë¡œ Macro ë°ì´í„° ì ì œ ì œê±° ìš”ì²­
    
    if (WriteAOIFile(pData) == FALSE)
@@ -126,12 +164,59 @@
    //210218 CJH - ê²€ì‚¬ ì¢…료시 ê²°ê³¼íŒŒì¼ ë° CCD Image ì—…로드
    SendMessageFTPUploadRaw(pData->GetGlassData());
    /* <KYH 211129 : #3806 ADD Start> */
    char pServerPath[256] = {};
    char pServerFile[256] = {};
    CString strGlassID = pData->GetGlassData()->m_strGlassID;
    CString strGlassIDLevel6th = strGlassID.Left(6);
    CString strStepID = pData->GetGlassData()->m_strStepID;
    CString strProcessID = pData->GetGlassData()->m_strProcessID;
    CString strFileName;
    strcpy(pServerFile, "*.*");
    strFileName.Format("%s", strGlassID);
    strFileName.MakeLower();
    sprintf(pServerFile, "%s", strFileName.GetBuffer(0));
    strStepID.MakeLower();
    strGlassID.MakeLower();
    strGlassIDLevel6th.MakeLower();
    strProcessID.MakeLower();
//    if (strGlassID.GetLength() > 6)
//        sprintf(pServerPath, "\\%s\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th, strGlassID);
//    else
        sprintf(pServerPath, "\\%s\\%s\\%s\\", strProcessID, strStepID, strGlassIDLevel6th);
    /* <KYH 211129 : #3806 ADD End> */
    BOOL bIsBDI = strcmp((pData->GetGlassData()->m_strLine), _T("BDI")) == 0 ? TRUE : FALSE;
    if (bIsBDI)
    {
        SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_AOI_IMAGE);
        /* <KYH 211129 : #3806 ADD Start> */
        CString strRawFilePathName = NULL;
        CString strLine = NULL;
        strRawFilePathName += LOCAL_RAWPATH_INFO_INI_PATH;
        strRawFilePathName += RAWINFO_FILE_NAME;
        FILE* pf = fopen(strRawFilePathName.GetBuffer(0), "w");
        if (pf != NULL)
        {
            strLine = pServerPath + strFileName;
            fprintf(pf, "[RESULT_PATH]\n");
            fprintf(pf, "RAWPATH= X:\%s\n", strLine.GetBuffer(0));
            SetRawFilePath(strLine.GetBuffer(0));
            fprintf(pf, "SUMPATH= \n");
            fprintf(pf, "IMGPATH= Z:\%s\n", strLine.GetBuffer(0));
            fprintf(pf, "DISK=FILESERVER\n");
            fclose(pf);
        }
    }
    /* <KYH 211129 : #3806 ADD End> */
    SendMessageFTPUploadImage(pData->GetGlassData(), FTPCMD_MURA_IMAGE);//0405nwh
    return TRUE;
@@ -234,7 +319,7 @@
    pData->GetGlassData()->m_strFileName;
    strcpy(pData->GetGlassData()->m_strPath, NETWORK_AOIRAWDFS_PATH);
    if(1) ReadMuraFile(pData);
    //if(1) ReadMuraFile(pData); 211012 KJG - QD Macro ê°œë³„ ì—…로드 í•˜ë¯€ë¡œ Macro ë°ì´í„° ì ì œ ì œê±° ìš”ì²­
      if(WriteAOIFile(pData) == FALSE)
          return FALSE;
@@ -370,7 +455,7 @@
    }
    
    strFilePathName.Format("%s\\%s", pGlass->m_strPath, strFileName);//pGlass->m_strFileName);
    //strFilePathName.Format("C:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName);
    //strFilePathName.Format("D:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName);
    
    // ê¸€ë¼ìФ ID만 ì¡´ìž¬í•˜ì—¬ ìž¬ê²€ì‚¬ ì‹œ íŒŒì¼ ìƒì„± ì‹¤íŒ¨. ì‚­ì œí•œë‹¤
    DeleteFile(strFilePathName);
@@ -398,7 +483,10 @@
    //////////////////////////////////////////////////////////////////////////
    //GLASSDATA
    {
        makeDataGlass(strLine, pGlass);
        /*< KJG 20211229 - #3846 MOD Start >*/
        //makeDataGlass(strLine, pGlass);
        makeDataGlass(strLine, pData, pGlass);
        /*< KJG 20211229 - #3846 MOD End >*/
        fprintf(pf, "%s\n", strLine.GetBuffer(0));
    }
    
@@ -444,21 +532,24 @@
{
    strLine.Empty();
    CString strValue;
    strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR TB TW RB RW T_STACK MAX_AVG_GRAY MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT BR_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT"; //53ea
    /*< KJG 20211229 - #3846 MOD Start >*/
    //strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR NG TB TW RB RW T_STACK NO_DEFECT MAX_AVG_GRAY MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT CRACK_DEFECT";
    strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR NG TB TW RB RW T_STACK NO_DEFECT MAX_NG MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT CRACK_DEFECT"; //56ea
    /*< KJG 20211229 - #3846 MOD End >*/
    strLine += strValue; strLine += "\n";
    strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT PRO_IMAGE AVG_GRAY_0 PORTION_0 CORNER_GRAY_0 AVG_AMP_0 FFT_VAR_0 FFT_VAH_0 FFT_VAQ_0 FFT_PK_0 AVG_GRAY_1 PORTION_1 CORNER_GRAY_1 AVG_AMP_1 FFT_VAR_1 FFT_VAH_1 FFT_VAQ_1 FFT_PK_1 AVG_GRAY_2 PORTION_2 CORNER_GRAY_2 AVG_AMP_2 FFT_VAR_2 FFT_VAH_2 FFT_VAQ_2 FFT_PK_2 AVG_GRAY_3 PORTION_3 CORNER_GRAY_3 AVG_AMP_3 FFT_VAR_3 FFT_VAH_3 FFT_VAQ_3 FFT_PK_3"; //54ea 21-06-21 Mura Data ì¶”ê°€
    strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT TR PR NG RB RW TB TW T_STACK NO_DEFECT"; //31ea /* <KYH 211129 : #3796 MOD Start> */
    strLine += strValue; strLine += "\n";
    //210405
    //ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE DSC_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG SCAN_AI REVIEW_AI INS_MODE INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK
    strValue = "ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE DSC_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG R_HEIGHT G_HEIGHT B_HEIGHT INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK CLASS_CODE"; //50ea
    strValue = "ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE LINE_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG R_HEIGHT G_HEIGHT B_HEIGHT INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK CLASS_CODE"; //50ea
    strLine += strValue;
}
#define SPRINTRAWSTART char strItemValue[1024];int nItemValueLen, nItemValuePos = 0;memset(strItemValue, ' ', sizeof(char)*1024)
#define SPRINTRAW(ITEMSIZE, fmt, ...) nItemValueLen = sprintf(strItemValue+nItemValuePos, fmt,##__VA_ARGS__); strItemValue[nItemValuePos+ nItemValueLen] = ' ';nItemValuePos+=ITEMSIZE+1
#define SPRINTRAWEND strItemValue[nItemValuePos - 1] = 0; strLine = strItemValue
void CGlassRawCPJT::makeDataGlass( CString& strLine, _grmGlassData* pGlassData )
/*< KJG 20211229 - #3846 MOD Start >*/
//void CGlassRawCPJT::makeDataGlass( CString& strLine, _grmGlassData* pGlassData )
void CGlassRawCPJT::makeDataGlass( CString& strLine, CgrmGlassRawData* pData, _grmGlassData* pGlassData )
/*< KJG 20211229 - #3846 MOD End >*/
{
    SPRINTRAWSTART;
@@ -513,7 +604,7 @@
    46   12   PAD_DATA        // PAD Data ë¶ˆëŸ‰ ìˆ˜
    47   12   M_DEFECT        // MASK ë¶ˆëŸ‰ ìˆ˜
    48   12   C_DEFECT        // COMMON ë¶ˆëŸ‰
    49   12   BR_DEFECT        // SCRATCH ë¶ˆëŸ‰ ìˆ˜
    49   12   BR_DEFECT        // SCRATCH ë¶ˆëŸ‰ ìˆ˜ => LN_DEFECT // ë¼ì¸ì„± ë¶ˆëŸ‰ ìˆ˜
    50   12   CRACK            // Crack ë¶ˆëŸ‰ ìˆ˜ - Image ì´¬ìƒ ê°¯ìˆ˜
    51   12   P_SHIFT            // Pattern Shift ë¶ˆëŸ‰ ìˆ˜ - ë ˆì‹œí”¼ ì´ë¦„
    */
@@ -704,26 +795,39 @@
    SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgeTR);
    // 26   6   PR        // Panel ì •ë³´ 03    
    SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgePR);
    // 27   6   TB        // Panel ì •ë³´ 04
    // 27    6    NG        // Panel ì •ë³´ 04
    SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgeNG); /* <KYH 211129 : #3796 ADD Start> */
    // 28   6   TB        // Panel ì •ë³´ 04
    SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeTB);
    // 28   6   TW        // Panel ì •ë³´ 05
    // 29   6   TW        // Panel ì •ë³´ 05
    SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeTW);
    // 29   6   RB        // Panel ì •ë³´ 06
    // 30   6   RB        // Panel ì •ë³´ 06
    SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeRB);
    // 30   6   RW        // Panel ì •ë³´ 07
    // 31   6   RW        // Panel ì •ë³´ 07
    SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeRW);
    // 31   6   T_STACK        // Panel ì •ë³´ 08    SD+SP ìˆ˜ ìž…ë ¥
    // 32   6   T_STACK        // Panel ì •ë³´ 08    SD+SP ìˆ˜ ìž…ë ¥
    SPRINTRAW(12, "%d", pGlassData->m_nDefectNumStackSD + pGlassData->m_nDefectNumStackSP);
    //32   6   BMDF        // Panel ì •ë³´ 09 -> ë³€ê²½ MAX_AVG_GRAY 04/12 nwh
    if (strlen(pGlassData->m_strMaxAvgGray) == 0)
    // 33   6   NO_DEFECT   // Panel ì •ë³´ 09
    SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgeND); /* <KYH 211129 : #3796 ADD Start> */
    //34   6   BMDF        // Panel ì •ë³´ 10 -> ë³€ê²½ MAX_AVG_GRAY 04/12 nwh
    /*< KJG 20211229 - #3846 MOD Start >*/
    //if (strlen(pGlassData->m_strMaxAvgGray) == 0)
    //{
    //    SPRINTRAW(12, "*");
    //}
    //else
    //{
    //    SPRINTRAW(12, "%s", pGlassData->m_strMaxAvgGray);
    //}
    int nMaxCellNG = 0;
    for (int iCell = 0; iCell < pData->GetGlassData()->m_nCellNum; iCell++)
    {
        SPRINTRAW(12, "*");
        _grmCellData* pCell = pData->GetCellData(iCell);
        nMaxCellNG = max(nMaxCellNG, pCell->m_nDefectNumJudgeNG);
    }
    else
    {
        SPRINTRAW(12, "%s", pGlassData->m_strMaxAvgGray);
    }
    // 33   6   CJ            // Panel ì •ë³´ 10 -> ë³€ê²½ MAX_PORTION  04/12 nwh
    SPRINTRAW(12, "%d", nMaxCellNG);
    /*< KJG 20211229 - #3846 MOD End >*/
    // 35   6   CJ            // Panel ì •ë³´ 11 -> ë³€ê²½ MAX_PORTION  04/12 nwh
    if (strlen(pGlassData->m_strMaxPortion) == 0)
    {
        SPRINTRAW(12, "*");
@@ -732,15 +836,15 @@
    {
        SPRINTRAW(12, "%s", pGlassData->m_strMaxPortion);
    }
    // 34   6   OK_CELL        // OK Cell Count
    // 36   6   OK_CELL        // OK Cell Count
    SPRINTRAW(12, "*");
    // 35   6   RJ_CELL        // RJ Cell Count
    // 37   6   RJ_CELL        // RJ Cell Count
    SPRINTRAW(12, "*");
    // 36   6   RW_CELL        // RW Cell Count
    // 38   6   RW_CELL        // RW Cell Count
    SPRINTRAW(12, "*");
    // 37   6   NR_CELL        // NR Cell Count
    // 39   6   NR_CELL        // NR Cell Count
    SPRINTRAW(12, "*");
    // 38   6   MASK_CELL        // MASK Cell Count    //201215 CJH - CSTID로 ë³€ê²½
    // 40   6   MASK_CELL        // MASK Cell Count    //201215 CJH - CSTID로 ë³€ê²½
    if (strlen(pGlassData->m_strCSTID) == 0)
    {
        SPRINTRAW(12, "*");
@@ -770,8 +874,12 @@
    SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeMD);
    // 48   6   C_DEFECT        // COMMON ë¶ˆëŸ‰    
    SPRINTRAW(12, "%d", pGlassData->m_nDefectNumTypeCD);
    /*< LHS 20211029 - #3783 MOD Start >*/
    // 49   6   S_DEFECT        // SCRATCH ë¶ˆëŸ‰ ìˆ˜    
    SPRINTRAW(12, "*");
    //SPRINTRAW(12, "*");
    // 49   6   LN_DEFECT        // Line ë¶ˆëŸ‰ ìˆ˜
    SPRINTRAW(12, "%d", pGlassData->m_nDefectNumJudgeLine);
    /*< LHS 20211029 - #3783 MOD End >*/
    // 50   6   CRACK        // Crack ë¶ˆëŸ‰ ìˆ˜    //201217 CJH - Image ì´¬ìƒ ê°œìˆ˜ë¡œ ë³€ê²½
    //SPRINTRAW(12, "%d", pGlassData->m_nDefectNumLocCrack);
    SPRINTRAW(12, "%d", pGlassData->m_nReviewNum);
@@ -810,6 +918,15 @@
        SPRINTRAW(12, "UNUSE");
    }
    if (pGlassData->m_bEdgeCrackUse)
    {
        SPRINTRAW(12, "%d", pGlassData->m_nDefectNumLocCrack);
    }
    else
    {
        SPRINTRAW(12, "UNUSE");
    }
    SPRINTRAWEND;   //중요!!! ì ¤ ë§ˆì§€ë§‰ì— ê¼­ ìžˆì–´ì•¼í•¨!!!(삭제금지) [김태현2020/9/23]
}
@@ -839,7 +956,7 @@
    19 12  PAD_DATA            // PAD Data Defect Count
    20 12  M_DEFECT            // MASK Defect Count
    21 12  C_DEFECT            // COMMON Defect Count
    22 12  S_DEFECT            // SCRATCH Defect Count
    22 12  S_DEFECT            // SCRATCH Defect Count    ==> LN_DEFECT
    23 12  CRACK                // CRACK Defect Count
    24 12  P_SHIFT            // Pattern Shift Defect Count
    */
@@ -912,336 +1029,29 @@
    // 21 6  C_DEFECT            // COMMON Defect Count
    SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeCD);
    // 22 6  S_DEFECT  -> 22 6  PRO_IMAGE ë³€ê²½     nwh0404
    if (strlen(pCellData->m_strProImage))
    {
        SPRINTRAW(12, "%s", pCellData->m_strProImage);
    }
    else
    {
        SPRINTRAW(12,"*");
    }
    /* <KYH 211129 : #3796 MOD Start> */
    // 23 12  AVG_GRAY_0
    if (strlen(pCellData->m_strAvgGray_0))
    {
        SPRINTRAW(12, "%s", pCellData->m_strAvgGray_0);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 24 12 PORTION_0
    if (strlen(pCellData->m_strPortion_0))
    {
        SPRINTRAW(12, "%s", pCellData->m_strPortion_0);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    //kyh 0622
    // 25 12 CORNER_GRAY_0
    if (strlen(pCellData->m_strCorner_Gray_0))
    {
        SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_0);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 26 12 AVG_AMP_0
    if (strlen(pCellData->m_strAvgAmp_0))
    {
        SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_0);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 27 12 FFT_VAR_0
    if (strlen(pCellData->m_strFFTVar_0))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTVar_0);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 28 12 FFT_VAH_0
    if (strlen(pCellData->m_strFFTVah_0))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTVah_0);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 29 12 FFT_VAQ_0
    if (strlen(pCellData->m_strFFTVaq_0))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_0);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 30 12 FFT_PK_0
    if (strlen(pCellData->m_strFFTPK_0))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTPK_0);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 31 12  AVG_GRAY_1
    if (strlen(pCellData->m_strAvgGray_1))
    {
        SPRINTRAW(12, "%s", pCellData->m_strAvgGray_1);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 32 12 PORTION_1
    if (strlen(pCellData->m_strPortion_1))
    {
        SPRINTRAW(12, "%s", pCellData->m_strPortion_1);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    //kyh 0622
    // 33 12 CORNER_GRAY_1
    if (strlen(pCellData->m_strCorner_Gray_1))
    {
        SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_1);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 34 12 AVG_AMP_1
    if (strlen(pCellData->m_strAvgAmp_1))
    {
        SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_1);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 35 12 FFT_VAR_1
    if (strlen(pCellData->m_strFFTVar_1))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTVar_1);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 36 12 FFT_VAH_1
    if (strlen(pCellData->m_strFFTVah_1))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTVah_1);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 37 12 FFT_VAQ_1
    if (strlen(pCellData->m_strFFTVaq_1))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_1);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 38 12 FFT_PK_1
    if (strlen(pCellData->m_strFFTPK_1))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTPK_1);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 39 12  AVG_GRAY_2
    if (strlen(pCellData->m_strAvgGray_2))
    {
        SPRINTRAW(12, "%s", pCellData->m_strAvgGray_2);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 40 12 PORTION_2
    if (strlen(pCellData->m_strPortion_2))
    {
        SPRINTRAW(12, "%s", pCellData->m_strPortion_2);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    //kyh 0622
    // 41 12 CORNER_GRAY_2
    if (strlen(pCellData->m_strCorner_Gray_2))
    {
        SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_2);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 42 12 AVG_AMP_2
    if (strlen(pCellData->m_strAvgAmp_2))
    {
        SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_2);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 43 12 FFT_VAR_2
    if (strlen(pCellData->m_strFFTVar_2))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTVar_2);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 44 12 FFT_VAH_2
    if (strlen(pCellData->m_strFFTVah_2))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTVah_2);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 45 12 FFT_VAQ_2
    if (strlen(pCellData->m_strFFTVaq_2))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_2);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 46 12 FFT_PK_2
    if (strlen(pCellData->m_strFFTPK_2))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTPK_2);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 47 12  AVG_GRAY_3
    if (strlen(pCellData->m_strAvgGray_3))
    {
        SPRINTRAW(12, "%s", pCellData->m_strAvgGray_3);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 48 12 PORTION_3
    if (strlen(pCellData->m_strPortion_3))
    {
        SPRINTRAW(12, "%s", pCellData->m_strPortion_3);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    //kyh 0622
    // 49 12 CORNER_GRAY_3
    if (strlen(pCellData->m_strCorner_Gray_3))
    {
        SPRINTRAW(12, "%s", pCellData->m_strCorner_Gray_3);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 50 12 AVG_AMP_3
    if (strlen(pCellData->m_strAvgAmp_3))
    {
        SPRINTRAW(12, "%s", pCellData->m_strAvgAmp_3);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 51 12 FFT_VAR_3
    if (strlen(pCellData->m_strFFTVar_3))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTVar_3);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 52 12 FFT_VAH_3
    if (strlen(pCellData->m_strFFTVah_3))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTVah_3);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 53 12 FFT_VAQ_3
    if (strlen(pCellData->m_strFFTVaq_3))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTVaq_3);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 54 12 FFT_PK_3
    if (strlen(pCellData->m_strFFTPK_3))
    {
        SPRINTRAW(12, "%s", pCellData->m_strFFTPK_3);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 22 6  PRO_IMAGE  -> LN_DEFECT ë³€ê²½
    SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgeLine);
    // 23 6  AVG_GRAY  -> TR ë³€ê²½
    SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgeTR);
    // 24 6  PORTION  -> PR ë³€ê²½
    SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgePR);
    // 25 6  CORNER_GRAY  -> NG ë³€ê²½
    SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgeNG);
    // 26 6  AVG_AMP  -> RB ë³€ê²½
    SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeRB);
    // 27 6  FFT_VAR  -> RW ë³€ê²½
    SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeRW);
    // 28 6  TB ì¶”ê°€
    SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeTB); //KYH TB ë°ì´í„° ì¶”ê°€
    // 29 6  TW ì¶”ê°€
    SPRINTRAW(12, "%d", pCellData->m_nDefectNumTypeTW); //KYH TW ë°ì´í„° ì¶”ê°€
    // 30 6  FFT_VEH  -> T_STACK ë³€ê²½
    SPRINTRAW(12, "%d", pCellData->m_nDefectSDCount + pCellData->m_nDefectSPCount);
    // 31 6  NO_DEFECT ì¶”ê°€
    SPRINTRAW(12, "%d", pCellData->m_nDefectNumJudgeND); //KYH ND ë°ì´í„° ì¶”ê°€
    /* <KYH 211129 : #3796 MOD End> */
    SPRINTRAWEND;   //중요!!! ì ¤ ë§ˆì§€ë§‰ì— ê¼­ ìžˆì–´ì•¼í•¨!!!(삭제금지) [김태현2020/9/23]
}
@@ -1269,7 +1079,7 @@
        // 16   2    STACK_COUNT    // Count of Defect detected step
        // 17   60   STACK_STEP        // Flow(Step) of defect detection
        // 18   16   IMAGE_FILE        // Image file Name
        // 19   12   DSC Code
        // 19   12   DSC Code        ==> LINE_CODE
        // 20   12   Image ë¶„류 Code
        // 21   12   ë¶ˆëŸ‰ì´ ìœ„치한 Zone No ìž…ë ¥
        // 22   12   ë¶ˆëŸ‰ í¬ê¸° (L,H,M,S)
@@ -1411,8 +1221,18 @@
    {
        SPRINTRAW(16, "*");
    }
    // 19   12    DSC_CODE        // Common 01 DSC Code
    /*< LHS 20211029 - #3783 MOD Start >*/
    // 19   12    DSC_CODE        // Common 01 DSC Code  ==> LINE_CODE
    if (strlen(pDefectData->m_strLNDefectCode))
    {
        SPRINTRAW(12, "%s", pDefectData->m_strLNDefectCode);
    }
    else
    {
    SPRINTRAW(12, "*");
    }
    //SPRINTRAW(12, "*");
    /*< LHS 20211029 - #3783 MOD End >*/
    // 20   12    VC_CODE        // Common 02 Image ë¶„류 Code
    SPRINTRAW(12, "*");
    // 21   12    ZONE_NO        // Common 03 ë¶ˆëŸ‰ì´ ìœ„치한 Zone No ìž…ë ¥
@@ -1530,13 +1350,13 @@
        SPRINTRAW(12, "*");
    }
    // 32 NO USE -> CCD Image ìœ ë¬´
    if (strlen(pDefectData->m_strAoiImageName))
    if (strrchr(pDefectData->m_strAoiImageName, '*') != NULL || strlen(pDefectData->m_strAoiImageName) < 4) // KYH 210826 CCD ì´ë¯¸ì§€ ë¬¸ìžì—´ì—ì„œ *이 ìžˆì„경우 X ë¨¸ì§€í• ê²ƒ
    {
        SPRINTRAW(12, "O");
        SPRINTRAW(12, "X");
    }
    else
    {
        SPRINTRAW(12, "X");
        SPRINTRAW(12, "O");
    }
    // 33   12    CAM_POSITION    // Common 15 Scan ë²ˆí˜¸
    SPRINTRAW(12, "%d", pDefectData->m_nScanIdx);
@@ -1820,7 +1640,7 @@
    char strRTMSFile[32] = {};
    char strServerRawFileSubPath[256] = {};
    char strServer_SubFileName[256] = {};
    /*< KJG 20211024 - #3487 ADD Start >*/
    GetFormatDescription(FTPCMD_RAWMERGE, strServerFolder, strServerFile, strLocalFolder, pLocalFile, strRTMSFile, strServerRawFileSubPath, strServer_SubFileName, pGlassData);
    CFTPCopyDataParam upParam;
@@ -1845,6 +1665,7 @@
    if(SendMessageTimeout(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds, SMTO_NORMAL, 20000, (PDWORD_PTR)(dwReturn)) == FALSE)
    {
    }
    /*< KJG 20211024 - #3487 ADD End >*/
}
void CGlassRawCPJT::SendMessageFTPUploadImage( _grmGlassData* pGlassData, emFTPCommand sort)
@@ -2134,15 +1955,25 @@
            sprintf(pLocalFile, "%s", strGlassID.GetBuffer(0)); 
        }
        break;
        /*< KJG 20211024 - #3487 ADD Start >*/
    case FTPCMD_RAWMERGE:
    {
        sprintf(pServerPath, "\\%s\\%s\\%s", strProcessID, strStepID,strGlassIDLevel6th.GetBuffer(0)); // ì„œë²„ ê²½ë¡œ í™•인후 ìˆ˜ì • kjg
    /* <LJC 20211122 : #3820 ADD Start> */
        char cMergeList[10][12];
        CString strMergeList[10] = {};
        for (int i = 0; i < 10; i++)
    {
            strcpy(cMergeList[i], pGlassData->m_StrMergeList[i]);
            strMergeList[i] = cMergeList[i];
        }
        sprintf(pServerPath, "\\%s\\%s\\%s", strProcessID, strMergeList[m_nRawMergeIdx],strGlassIDLevel6th.GetBuffer(0)); // ì„œë²„ ê²½ë¡œ í™•인후 ìˆ˜ì • kjg
        sprintf(pServerFile, "%s",strGlassID);
        /* <LJC 20211122 : #3820 ADD End> */
        sprintf(pLocalPath, "%s", m_RawMergeResult.getRawMergeLocalPath());
        sprintf(pLocalFile, "%s", strGlassID.GetBuffer(0));
    }
        break;    
        /*< KJG 20211024 - #3487 ADD End >*/
    case FTPCMD_MURA_IMAGE: //0404nwh
    {    //
        /*CTime time = m_tmFileCreateTime;
@@ -2226,6 +2057,10 @@
                break;
            case Judge_PR:            sStr.Format("PR");
                break;
            /* <KYH 220117 : #3796 ADD Start>*/
            case Judge_ND:            sStr.Format("ND");
                break;
            /* <KYH 220117 : #3796 ADD End>*/
            case Judge_PT:            sStr.Format("PT");
                break;
            case Judge_Review:        sStr.Format("RV");
@@ -2238,6 +2073,10 @@
                break;
            case Judge_Rework:        sStr.Format("RW");
                break;
        /* < KMH 20220311 : #3954 ADD Start > */
            case Judge_LN:            sStr.Format("LN");
                break;
        /* < KMH 20220311 : #3954 ADD End > */
            case Judge_Unknown:        sStr.Format("OK");//sStr.Format("Unknown");    //Unknown도 ì¼ë‹¨ OK
                break;
            default:                sStr.Format("OK");//sStr.Format("Ets");        
@@ -2270,6 +2109,20 @@
    }
    return sStr;
}
/* <LJC 20211122 : #3820 ADD Start> */
void CGlassRawCPJT::DownLoadMergeFile(CgrmGlassRawData * pData)
{
        SendMessageFTPDownloadDataFile(pData->GetGlassData());
        m_nRawMergeIdx++;
    return;
}
void CGlassRawCPJT::SearchFIle(CgrmGlassRawData * pData)
{
    m_RawMergeResult.ProcessRawMergeFileReadStart(pData->GetGlassData()->m_strGlassID);
}
/* <LJC 20211122 : #3820 ADD End> */
CString CGlassRawCPJT::GetWsiDefectType(int nType)
{
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.h
@@ -36,7 +36,11 @@
    virtual BOOL SequenceFtpUpload(char* pRawFileName);
    virtual void NotifyUpdateOptionInfo(){/*m_StackResult.readOptionFile();*/};
    /* <LJC 20211122 : #3820 ADD Start> */
    virtual void DownLoadMergeFile(CgrmGlassRawData* pData);
    virtual void SearchFIle(CgrmGlassRawData* pData);
    /* <LJC 20211122 : #3820 ADD End> */
\
protected:
    
@@ -55,7 +59,10 @@
    CString GetRawFilePath() { return m_strRawFilePath; }
    void makeDataHeader(CString& strLine, _grmGlassData* pGlassData);
    void makeDataGlass(CString& strLine, _grmGlassData* pGlassData);
    /*< KJG 20211229 - #3846 MOD Start >*/
    //void makeDataGlass(CString& strLine, _grmGlassData* pGlassData);
    void makeDataGlass(CString& strLine, CgrmGlassRawData* pData, _grmGlassData* pGlassData);
    /*< KJG 20211229 - #3846 MOD End >*/
    void makeDataCell(CString& strLine, CgrmGlassRawData* pData, _grmCellData* pCellData);
    BOOL makeDataDefect(CString& strLine, CgrmGlassRawData* pData, _grmDefectData* pDefectData);
 
@@ -80,8 +87,10 @@
    BOOL    m_bReviewEndCheck;    // InspectEnd ì‹œì— Raw_im í´ë”에 SubFile ìƒì„± ì•ˆí•˜ê¸° ìœ„í•´ ì‚¬ìš© [ 21-03-18 KJG ]
    CTime    m_tmReviewStart;        
    CTime    m_tmReviewEnd;        
    /* <LJC 20211122 : #3820 ADD Start> */
    int    m_nRawMergeIdx=0;
    int m_nWriteRawDefectIdx;
    /* <LJC 20211122 : #3820 ADD End> */
};
struct stCellData
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCSOT.cpp
@@ -320,7 +320,7 @@
    }
    
    strFilePathName.Format("%s\\%s", pGlass->m_strPath, strFileName);//pGlass->m_strFileName);
    //strFilePathName.Format("C:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName);
    //strFilePathName.Format("D:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName);
    
    
    //FILE* pf = fopen(strFilePathName.GetBuffer(0), "w");
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawDemo.cpp
@@ -25,7 +25,7 @@
{
    CreateDirectory(LOCAL_AOIRAWDFS_PATH, NULL);
    CreateDirectory(LOCAL_AOIRAWBIN_PATH, NULL);
    m_MuraResultFile.readOptionFile("C:\\DIT_Review\\ReviewServerConfig\\MacroInfo.cfg");
    m_MuraResultFile.readOptionFile("D:\\DIT_Review\\ReviewServerConfig\\MacroInfo.cfg");
    m_GlassRawRTMS.SetMuraResult(&m_MuraResultFile);
}
@@ -292,7 +292,7 @@
    }
    
    strFilePathName.Format("%s\\%s", pGlass->m_strPath, strFileName);//pGlass->m_strFileName);
    //strFilePathName.Format("C:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName);
    //strFilePathName.Format("D:\\AOIServer\\NFS\\RAW\\%s", pData->GetGlassData()->m_strFileName);
    
    
    //FILE* pf = fopen(strFilePathName.GetBuffer(0), "w");
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawRTMS.cpp
@@ -320,6 +320,9 @@
        else if(pCellData->m_nJudgement == Judge_Size) strValue = "Judge_Size";    //skip
        else if (pCellData->m_nJudgement == Judge_TR) strValue = "Judge_TR";
        else if (pCellData->m_nJudgement == Judge_PR) strValue = "Judge_PR";
        /* <KYH 211129 : #3796 ADD Start> */
        else if (pCellData->m_nJudgement == Judge_ND) strValue = "Judge_ND";
        /* <KYH 211129 : #3796 ADD End> */
        else strValue = "Judge_OK";                                        
    }
    strLine += strValue+strDiv;
@@ -803,6 +806,10 @@
            break;
        case Judge_PR:            sStr.Format("PR");
            break;
        /* <KYH 211129 : #3796 ADD Start> */
        case Judge_ND:            sStr.Format("ND");
            break;
        /* <KYH 211129 : #3796 ADD Start> */
        case Judge_PT:            sStr.Format("PT");
            break;
        case Judge_Review:        sStr.Format("RV");
DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.cpp
@@ -130,7 +130,7 @@
    return &pBuf[nLen+1]; //구분자 ê±´ë„ˆ ë›°ì–´ì„œ ë‹¤ìŒ ì½ì„ í¬ì¸íЏ ë„˜ê²¨ì¤€ë‹¤ íƒœí˜„[2017/3/29]
}
BOOL CMacroResultFile::readOptionFile( char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ )
BOOL CMacroResultFile::readOptionFile( char* pFileName /*= "D:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ )
{
    CakFileDB fileDB;
    fileDB.openfile(pFileName);
DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.h
@@ -179,7 +179,7 @@
    int GetSubPanelNum(int iCell);
    _MacroSubPanel* GetSubPanel(int i) { return &m_vecMacroSubPanel[i]; }
    /////////////////////////////////////0404nwh
    BOOL readOptionFile(char* pFileName = "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg");
    BOOL readOptionFile(char* pFileName = "D:\\AOIServer\\ConfigFile\\MacroInfo.cfg");
    _MacroDefect* FindDefect(int nX, int nY, int nFindRange = 2000/*um*/);
public:
DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.cpp
@@ -5,6 +5,7 @@
#include <process.h>
#include "DitGlassRawClient.h"
#include "GlassRawBase.h"
#include <sstream>
#ifdef _DEBUG
#undef THIS_FILE
@@ -47,11 +48,14 @@
BOOL CRawResultReader::openFile(char* pGlassID)
{
    CString strFileName;
    CDitGlassRawClient    GlassRawClient;
    GlassRawClient.ConnectServer();
    CDitGlassRawClient* pShared = &GlassRawClient;
    /*< KJG 20211208 : #3696 DEL Start >*/
    //CDitGlassRawClient    GlassRawClient;
    //GlassRawClient.ConnectServer();
    //CDitGlassRawClient* pShared = &GlassRawClient;
    _grmDefectData* pGrmStack;
    //_grmDefectData* pGrmStack;
    /*< KJG 20211208 : #3696 DEL End >*/
    strFileName.Format("%s\\%s", m_strLocalPath, pGlassID);
@@ -59,6 +63,14 @@
    if (pf == NULL)
        return FALSE;
    /*< KJG 20211208 : #3696 ADD Start >*/
    CDitGlassRawClient    GlassRawClient;
    GlassRawClient.ConnectServer();
    CDitGlassRawClient* pShared = &GlassRawClient;
    _grmDefectData* pGrmStack;
    /*< KJG 20211208 : #3696 ADD End >*/
    std::vector<_grmDefectData> vecStackDefect;
    _grmDefectData StackDefect;
@@ -77,6 +89,21 @@
        if (strlen(buffer) <= 0 || pStr == NULL)
            break;
        /* < KJG 20220225 - #3850 ADD Start >*/
        if (strncmp(buffer, "DATA PANEL", 10) == 0)
        {
            pReadPoint = buffer;
            CString strtemp;
            pReadPoint = getParsingData(pReadPoint, 4, &strtemp);
            pReadPoint = getParsingData(pReadPoint, 5, &strtemp);
            pReadPoint = getParsingData(pReadPoint, 5, &strtemp);
            pReadPoint = getParsingData(pReadPoint, 27, &strtemp);
            pReadPoint = getParsingData(pReadPoint, 20, &strtemp);
            pReadPoint = getParsingData(pReadPoint, 20, &strtemp);
            pReadPoint = getParsingData(pReadPoint, 10, &strtemp);
            strncpy(pShared->GetGlassData()->m_strRawMergeStepID, strtemp.GetBuffer(0), 10 + 1); // Null ë¬¸ìž ë–„문에 +1
        }
        /* < KJG 20220225 - #3850 ADD End >*/
        if (strncmp(buffer, "DATA DEFECT", 10)) continue; 
        //Defect Stack Start
@@ -125,6 +152,12 @@
                StackDefect.m_DefectJudgement = Judge_TR;
            else if (strtemp == "PR")
                StackDefect.m_DefectJudgement = Judge_PR;
            /* < KJG 20220225 - #Index ADD Start >*/
            else if (strtemp == "NG")
                StackDefect.m_DefectJudgement = Judge_NG;
            else if (strtemp == "ND")
                StackDefect.m_DefectJudgement = Judge_ND;
            /* < KJG 20220225 - #Index ADD End >*/
            else
                StackDefect.m_StackInfo = Stack_Unknown;
@@ -151,6 +184,21 @@
            pReadPoint = getParsingData(pReadPoint, 12, &temp); // ë¯¸ì‚¬ìš©
            pReadPoint = getParsingData(pReadPoint, 12, &temp); // ë¯¸ì‚¬ìš©
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp); // ZoneNum m_sZonePixelCount[i]
            stringstream ConvertZone(strtemp.GetBuffer(0));
            unsigned int nZoneHexValue;
            short sZonePixelCount[16] = { 0 };
            ConvertZone >> std::hex >> nZoneHexValue;
            for (int i = 0; i < 16; i++)
            {
                if (nZoneHexValue & 1)
                {
                    sZonePixelCount[i] = 1;
                }
                nZoneHexValue = nZoneHexValue >> 1;
            }
            memcpy_s(StackDefect.m_sZonePixelCount, sizeof(StackDefect.m_sZonePixelCount), sZonePixelCount, sizeof(sZonePixelCount));
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp);//m_DefectSizeType
            if (strtemp == "S")
                StackDefect.m_DefectSizeType = SizeType_Small;
@@ -230,6 +278,24 @@
            else
                StackDefect.m_DefectType = DefectType_Unknown;
    
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp); // Shrink
            pReadPoint = getParsingData(pReadPoint, 12, &strtemp); // ZoneClassNum m_sZoneClassPixelCount[i]
            stringstream ConvertClass(strtemp.GetBuffer(0));
            unsigned int nClassHexValue;
            short sZoneClassPixelCount[16] = { 0 };
            ConvertClass >> std::hex >> nClassHexValue;
            for (int i = 0; i < 16; i++)
            {
                if (nClassHexValue & 1)
                {
                    sZoneClassPixelCount[i] = 1;
                }
                nClassHexValue = nClassHexValue >> 1;
            }
            memcpy_s(StackDefect.m_sZoneClassPixelCount, sizeof(StackDefect.m_sZoneClassPixelCount), sZoneClassPixelCount, sizeof(sZoneClassPixelCount));
            vecStackDefect.push_back(StackDefect);
        }
    }
@@ -250,7 +316,10 @@
    pShared->GetGlassData()->m_nRawMergeNum = m_vecStackDefect.size(); // RawMerge
    pShared->GetGlassData()->m_bRawMergeRead = TRUE;
    AKLOG("Import Vector Size : %d", m_vecStackDefect.size());
    /* < KJG 20220225 - #3850 MOD Start >*/
    //AKLOG("Import Vector Size : %d", m_vecStackDefect.size());
    AKLOG("Import Vector Size : [%s]%d", pShared->GetGlassData()->m_strRawMergeStepID, m_vecStackDefect.size());
    /* < KJG 20220225 - #3850 MOD End >*/
    return TRUE;
}
@@ -289,7 +358,7 @@
    return &pBuf[nLen + 1]; //구분자 ê±´ë„ˆ ë›°ì–´ì„œ ë‹¤ìŒ ì½ì„ í¬ì¸íЏ ë„˜ê²¨ì¤€ë‹¤
}
BOOL CRawResultReader::readOptionFile(char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/)
BOOL CRawResultReader::readOptionFile(char* pFileName /*= "D:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/)
{
    if (pFileName == NULL) pFileName = m_strConfigFile;
@@ -363,7 +432,56 @@
    pThis->m_nThreadStackFileReadFlag = 0;
}
/* <LJC 20211122 : #3820 ADD Start> */
void CRawResultReader::ProcessResultFileRead(void * pArg)
{
    CRawResultReader* pThis = (CRawResultReader*)pArg;
    pThis->m_nThreadStackFileReadFlag = 1;
    int nReadFailCount = 0;
    int nThreadCount = 0;
    CString strGlassID;
    while (pThis->m_nThreadStackFileReadFlag == 1)
    {
        if (pThis->m_nProcessState == RPS_CmdFileRead) //스택파일 ì½ê¸° ìˆ˜í–‰ [김태현 2019/1/12]
        {
            strGlassID = pThis->m_strGlassID;
            pThis->m_nProcessState = RPS_StateFileRead;
            nThreadCount = 0;
            nReadFailCount = 0;
            AKLOG("RawMerge File Read Start : %s\\%s", pThis->m_strLocalPath, strGlassID);
            Sleep(3000);
            while (pThis->m_nProcessState == RPS_StateFileRead && pThis->m_nThreadStackFileReadFlag == 1)
            {
                if (pThis->openFile(strGlassID.GetBuffer(0)) == TRUE)
                {
                    pThis->m_nProcessState = RPS_ResultReadOK;
                    AKLOG("RawMerge File Read Complete ");
                    break;
                }
                nReadFailCount++;
                AKLOG("RawMerge File Read Try : %d", nReadFailCount);
                if (nReadFailCount > 10)
                {
                    pThis->m_nProcessState = RPS_ResultReadFail;
                    break;
                }
                Sleep(50);
            }
            if (pThis->m_nProcessState != RPS_ResultReadOK)
            {
                pThis->m_nProcessState = RPS_ResultReadFail;
            }
        }
        if (nReadFailCount)
            Sleep(500);
    }
    pThis->m_nThreadStackFileReadFlag = 0;
}
/* <LJC 20211122 : #3820 ADD End> */
BOOL CRawResultReader::RawMergeFileReadStart(char* pGlassID)
{
    if (m_nThreadStackFileReadFlag == 0)
@@ -382,7 +500,26 @@
    
    return TRUE;
}
/* <LJC 20211122 : #3820 ADD Start> */
BOOL CRawResultReader::ProcessRawMergeFileReadStart(char * pGlassID)
{
    if (m_nThreadStackFileReadFlag == 0)
    {
        ProcessResultFileRead(this);
    }
    if (m_nProcessState == RPS_StateFileRead)
    {
        m_nProcessState = RPS_CmdFileStop;
        while (m_nProcessState == RPS_CmdFileStop) Sleep(0);
    }
    m_strGlassID = pGlassID;
    m_nProcessState = RPS_CmdFileRead;
    return TRUE;
}
/* <LJC 20211122 : #3820 ADD End> */
BOOL CRawResultReader::RawMergeFileReadStop(BOOL bWait/*=TRUE*/)
{
    /*
DitGlassRawMessenger/DitGlassRawMessenger/RawResultReader.h
@@ -29,6 +29,9 @@
    }
    BOOL RawMergeFileReadStart(char* pGlassID);
    /* <LJC 20211122 : #3820 ADD Start> */
    BOOL ProcessRawMergeFileReadStart(char* pGlassID);
    /* <LJC 20211122 : #3820 ADD End> */
    BOOL RawMergeFileReadStop(BOOL bWait = TRUE);
    BOOL IsRead() { return m_nProcessState == RPS_ResultReadOK ? TRUE : FALSE; }
@@ -42,7 +45,9 @@
protected:
    BOOL openFile(char* pGlassID);
    static void threadResultFileRead(void* pArg);
    /* <LJC 20211122 : #3820 ADD Start> */
    static void ProcessResultFileRead(void* pArg);
    /* <LJC 20211122 : #3820 ADD End> */
    int    m_nThreadStackFileReadFlag;
protected:
DitGlassRawMessenger/DitGlassRawMessenger/StackResultCPJT.cpp
@@ -45,11 +45,13 @@
{
    CString strFileName;
    CDitGlassRawClient    GlassRawClient;
    GlassRawClient.ConnectServer();
    CDitGlassRawClient* pShared = &GlassRawClient;
    _grmDefectData* pGrmStack;
    /*< KJG 20211208 : #3696 DEL Start >*/
    //CDitGlassRawClient    GlassRawClient;
    //GlassRawClient.ConnectServer();
    //CDitGlassRawClient* pShared = &GlassRawClient;
    //
    //_grmDefectData* pGrmStack;
    /*< KJG 20211208 : #3696 DEL End >*/
    strFileName.Format("%s\\%s", m_strLocalPath, pGlassID);
@@ -57,6 +59,13 @@
    if(pf == NULL)
        return FALSE;
    /*< KJG 20211208 : #3696 ADD Start >*/
    CDitGlassRawClient    GlassRawClient;
    GlassRawClient.ConnectServer();
    CDitGlassRawClient* pShared = &GlassRawClient;
    _grmDefectData* pGrmStack;
    /*< KJG 20211208 : #3696 ADD End >*/
    std::vector<_StackDefectCPJT> vecStackDefect;
    _StackDefectCPJT StackDefect;
@@ -152,6 +161,9 @@
            else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "NG")) pGrmStack->m_DefectJudgement = Judge_NG;
            else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "TR")) pGrmStack->m_DefectJudgement = Judge_TR;
            else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "PR")) pGrmStack->m_DefectJudgement = Judge_PR;
            /* <KYH 211129 : #3796 ADD Start> */
            else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "ND")) pGrmStack->m_DefectJudgement = Judge_ND;
            /* <KYH 211129 : #3796 ADD End> */
            else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "PT")) pGrmStack->m_DefectJudgement = Judge_PT;
            else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "RV")) pGrmStack->m_DefectJudgement = Judge_Review;
            else if (!strcmp(m_vecStackDefect[i].m_strDefectGrade, "RC")) pGrmStack->m_DefectJudgement = Judge_RC;
@@ -209,7 +221,7 @@
    return &pBuf[nLen+1]; //구분자 ê±´ë„ˆ ë›°ì–´ì„œ ë‹¤ìŒ ì½ì„ í¬ì¸íЏ ë„˜ê²¨ì¤€ë‹¤ íƒœí˜„[2017/3/29]
}
BOOL CStackResultCPJT::readOptionFile( char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ )
BOOL CStackResultCPJT::readOptionFile( char* pFileName /*= "D:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ )
{
    if(pFileName == NULL) pFileName = m_strConfigFile;
DitGlassRawMessenger/DitGlassRawMessenger/StackResultCPJT.h
@@ -4,7 +4,7 @@
#include "akCore/akFileUtil.h"
//enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_Unknown };//2016.07.13 LHS Judge_Size ì¶”ê°€
//enum Judgement { Judge_OK = 0, Judge_RP, Judge_NG, Judge_TR, Judge_PR, Judge_PT, Judge_Review, Judge_RC, Judge_Size, Judge_VI, Judge_Rework, Judge_LN, Judge_Unknown };//2016.07.13 LHS Judge_Size ì¶”ê°€
struct _StackDefectCPJT
{
DitGlassRawMessenger/DitGlassRawMessenger/StackResultCSOT.cpp
@@ -110,7 +110,7 @@
    return &pBuf[nLen+1]; //구분자 ê±´ë„ˆ ë›°ì–´ì„œ ë‹¤ìŒ ì½ì„ í¬ì¸íЏ ë„˜ê²¨ì¤€ë‹¤ íƒœí˜„[2017/3/29]
}
BOOL CStackResultCSOT::readOptionFile( char* pFileName /*= "C:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ )
BOOL CStackResultCSOT::readOptionFile( char* pFileName /*= "D:\\AOIServer\\ConfigFile\\MacroInfo.cfg"*/ )
{
    if(pFileName == NULL) pFileName = m_strConfigFile;
DitGlassRawMessenger/DitGlassRawMessenger/akLoggerExt.cpp
@@ -37,7 +37,7 @@
//         st.wDay);
    sprintf(strFileName, "%s\\%02d%02d%02d\\%s_%02d%02d%02d.log", 
        "C:\\DIT_LogData\\", st.wYear, st.wMonth, st.wDay,
        "D:\\DIT_LogData\\", st.wYear, st.wMonth, st.wDay,
        "logGlassRawMessenger", st.wYear, st.wMonth, st.wDay);
    ShellExecute(NULL, "Open", "NotePad.exe", strFileName, "", SW_SHOW);
DitGlassRawMessenger/Extern/DitGlassRawClient.cpp
@@ -6,16 +6,11 @@
{
    m_hMapBasicInfo = NULL;
    m_hMapGlassData = NULL;
    m_pDitGlassClient =NULL;
    m_pGlassRawInfo = NULL;
    m_pGlassRawData = NULL;
    m_nLastCommandIdx = -1;
    m_pGlassData = NULL;
    m_pBlockData = NULL;
    m_pCellData = NULL;
    m_pDefectData = NULL;
}
CDitGlassRawClient::~CDitGlassRawClient(void)
@@ -105,7 +100,9 @@
    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];
    /*< KJG 20211024 - #3487 ADD Start >*/
    m_pRawMergeData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nRawMergeDataPoint];
    /*< KJG 20211024 - #3487 ADD End >*/
    return TRUE;
}
@@ -172,7 +169,9 @@
    if(isConnect() == FALSE) return FALSE;
    m_pGlassRawInfo->m_ClientProcStep = APS_GlassLoading;
    m_pGlassData->m_bStackRead = FALSE;
    /*< KJG 20211024 - #3487 ADD Start >*/
    m_pGlassData->m_bRawMergeRead = FALSE;
    /*< KJG 20211024 - #3487 ADD End >*/
    return SetCommand(grcSequenceGlassLoading);
}
@@ -204,16 +203,6 @@
    return SetCommand(grcSequenceCustomReviewDataRead);
}
CDitGlassRawClient* CDitGlassRawClient::GetInstance()
{
    if(m_pDitGlassClient == NULL)
    {
        m_pDitGlassClient = new CDitGlassRawClient;
    }
    return m_pDitGlassClient;
}
void CDitGlassRawClient::RemoveReviewDefects()
{
    int nDefectNum = m_pGlassData->m_nDefectNum;
@@ -238,5 +227,3 @@
    m_pGlassData->m_nDefectNum = nDefectNum-nDefectDeleteNum;
}
CDitGlassRawClient* CDitGlassRawClient::m_pDitGlassClient;
DitGlassRawMessenger/Extern/DitGlassRawClient.h
@@ -1,7 +1,6 @@
#pragma once
#include "DitGlassRawStruct.h"
#include <afxmt.h>
class CDitGlassRawClient
{
@@ -10,8 +9,6 @@
    ~CDitGlassRawClient(void);
public:
    static CDitGlassRawClient* GetInstance(); //cmark
    BOOL ConnectServer();
    BOOL isConnect(){return m_hMapBasicInfo == NULL || m_hMapGlassData == NULL ? FALSE : TRUE;};
@@ -33,7 +30,9 @@
    _grmCellData*    GetCellData(int nIndex){return &m_pCellData[nIndex];};
    _grmDefectData*    GetDefectData(int nIndex){return &m_pDefectData[nIndex];};
    _grmDefectData*    GetStackData(int nIndex) { return &m_pStackData[nIndex];};
    /*< KJG 20211024 - #3487 ADD Start >*/
    _grmDefectData*    GetRawMergeData(int nIndex) { return &m_pRawMergeData[nIndex]; };
    /*< KJG 20211024 - #3487 ADD End >*/
    //ê²°ê³¼ íŒŒì¼ ê°•ì œ ì“°ê¸° ëª…ë ¹ [김태현 2018/11/12]
    BOOL WriteAOIRawFile();
@@ -50,14 +49,16 @@
    BOOL ConnectGlassRawInfo();
    BOOL ConnectGlassRawData();
    BOOL SetCommand(emGlassRawCommand nCmd);
    static CDitGlassRawClient* m_pDitGlassClient; //cmark
protected:
    _grmGlassData*  m_pGlassData;
    _grmBlockData*        m_pBlockData;
    _grmCellData*   m_pCellData;
    _grmDefectData* m_pDefectData;
    _grmDefectData* m_pStackData;
    /*< KJG 20211024 - #3487 ADD Start >*/
    _grmDefectData* m_pRawMergeData;
    /*< KJG 20211024 - #3487 ADD End >*/
protected:
    HANDLE        m_hMapBasicInfo;
    HANDLE        m_hMapGlassData;
DitGlassRawMessenger/Extern/DitGlassRawStruct_0331.h
ÆÄÀÏÀÌ »èÁ¦µÊ