SDC C-Project CF Review 프로그램
LYW
2021-07-27 281a73558e8d437fc778b390281560fa2e7a0e5e
주석 변경
3개 파일 변경됨
709 ■■■■■ 파일 변경됨
ReviewSystem/ReviewSystem/DitGlassRawClient.cpp 8 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp 243 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 458 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DitGlassRawClient.cpp
@@ -138,14 +138,14 @@
    int nCmdId = (m_pGlassRawInfo->m_nCommandIdxWrite+1) % COMMAND_MAXCOUNT;
    if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)//���� ���ٴ°��� ��ŧ�� ���۰� �ѹ��� ���Ҵٴ°�!! [������ 2018/11/12]
    if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)
    {
        m_pGlassRawInfo->m_nCommandIdxRead++;//占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占?占싹놂옙占쏙옙 占쏙옙占쏙옙占싼댐옙. [占쏙옙占쏙옙占쏙옙 2018/11/12]
        m_pGlassRawInfo->m_nCommandIdxRead++;
    }
    m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nCommand = (short)nCmd;
    m_pGlassRawInfo->m_nCommandBuffer[nCmdId].strParam;
    m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nResult = -1; //-1������, 0����, 1���� [������ 2018/11/13]
    m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nResult = -1;
    m_nLastCommandIdx = m_pGlassRawInfo->m_nCommandIdxWrite = nCmdId;
@@ -217,7 +217,7 @@
void CDitGlassRawClient::RemoveReviewDefects()
{
    int nDefectNum = m_pGlassData->m_nDefectNum;
    int nRightDefectNum = 0;//������ �����ʿ� ��ġ�� ���� ����
    int nRightDefectNum = 0;
    int nDefectDeleteNum = 0;
    for(int i=nDefectNum-1; i>=0; i--)
    {
ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp
@@ -88,7 +88,6 @@
    int nEndResultIdx    = pReviewResult->GetEndSReviewResultIndex();
                        
    
    // �ε����� ���� ������ �ε��� ���� Ŭ��..
    if (nCurResultIdx > nEndResultIdx)  
    {
        LeaveCriticalSection(&m_csUserCriticalSection);
@@ -96,8 +95,6 @@
        g_pLog->DisplayMessage(_T("[ReviewProcessor]SetWsiResultData module[%d] point[%d] result[%d]"), nModuleIndex, measureResut.nResultIndex, nCurResultIdx);
    }
    // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙
    wsiResult.nWsi_ResultIndex = measureResut.nResultIndex;
    wsiResult.nResultCode = measureResut.nResultCode;
@@ -138,8 +135,6 @@
//         g_pLog->DisplayMessage(_T("[ReviewProcessor]JugementR [%d] JugementG [%d] JugementB [%d]"), wsiResult.nJugementR, wsiResult.nJugementG, wsiResult.nJugementB);
//         g_pLog->DisplayMessage(_T("[ReviewProcessor]RZoneHeight [%.03lf] GZoneHeight [%.03lf] BZoneHeight [%.03lf]"), wsiResult.dRZoneHeight, wsiResult.dGZoneHeight, wsiResult.dBZoneHeight);
//         wsiResult.�߰� �ϼ���= measureResut.nMultiShot;
//         wsiResult.�߰� �ϼ���= measureResut.nCurrentShotNumber;
        break;
    case 3: //BANK
        wsiResult.dRZoneHeight = measureResut.dRZoneHeight;
@@ -147,14 +142,13 @@
        wsiResult.dBZoneHeight = measureResut.dBZoneHeight;
        wsiResult.dDefectHeight = measureResut.dDefectHeight;
        wsiResult.nWsi_DefectType = measureResut.nDefectType;
//         wsiResult.�߰� �ϼ���= measureResut.nMultiShot;
//         wsiResult.�߰� �ϼ���= measureResut.nCurrentShotNumber;
        break;
    case 4: //CS
        wsiResult.dCSHeight = measureResut.dCSHeight;
        wsiResult.dDefectHeight = measureResut.dDefectHeight;
        wsiResult.nWsi_DefectType = measureResut.nDefectType;
//         wsiResult.�߰� �ϼ���= measureResut.nMultiShot;
        break;
    }
@@ -162,8 +156,6 @@
    memcpy(wsiResult.pWsi_ResultData, measureResut.pResultData, sizeof(wsiResult.pWsi_ResultData));
    // 占쏙옙占?占쏙옙占쏙옙占쏙옙 占쌩곤옙
    SReviewResult *pProcessResult = NULL;
    if (pGlassResult->SetWsiResultData(nModuleIndex, nCurResultIdx, wsiResult, nGlassPosX, nGlassPosY, nMotorPosX, nMotorPosY, dTime))
    {
@@ -173,10 +165,8 @@
        pProcessResult = pReviewResult->GetSReviewResult(nCurResultIdx);
    }
    // ���� ������, ���� ���μ����� ������ ����
    if (pProcessResult)
    {
        // ó�� ������ ����
        if (AddReviewProcessData(pProcessResult)==1)
        {
            g_pLog->DisplayMessage(_T("[ReviewProcessor]Add Process Data module[%d] result[%d]"), nModuleIndex, nCurResultIdx);
@@ -192,7 +182,6 @@
    
    LeaveCriticalSection(&m_csUserCriticalSection);
    // 占쏙옙占?占쏙옙占쏙옙.
    m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult);
    return;
@@ -238,7 +227,6 @@
    int nEndResultIdx    = pReviewResult->GetEndSReviewResultIndex();
    // �ε����� ���� ������ �ε��� ���� Ŭ��..
    if (nCurResultIdx > nEndResultIdx)  
    {
        LeaveCriticalSection(&m_csUserCriticalSection);
@@ -246,14 +234,12 @@
        g_pLog->DisplayMessage(_T("[ReviewProcessor]SetWsiResultData module[%d] point[%d] result[%d]"), nModuleIndex, measureResut.nResultIndex, nCurResultIdx);
    }
    // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙
    wsiUserResult.nWsi_ResultCode        = measureResut.nResultCode;
    wsiUserResult.nWsi_Type                = measureResut.nResultType;
    wsiUserResult.nWsi_SlopeWarn        = measureResut.nXSlopeWarn;
    memcpy(wsiUserResult.pWsi_ResultData, measureResut.pResultData, sizeof(wsiUserResult.pWsi_ResultData));
    // 占쏙옙占?占쏙옙占쏙옙占쏙옙 占쌩곤옙
    SReviewResult *pProcessResult = NULL;
    if (pGlassResult->SetUserWsiResultData(nModuleIndex, nCurResultIdx, wsiUserResult, nGlassPosX, nGlassPosY, nMotorPosX, nMotorPosY, dTime))
    {
@@ -263,10 +249,8 @@
        pProcessResult = pReviewResult->GetSReviewResult(nCurResultIdx);
    }
    // ���� ������, ���� ���μ����� ������ ����
    if (pProcessResult)
    {
        // ó�� ������ ����
        if (AddReviewProcessData(pProcessResult)==1)
        {
            g_pLog->DisplayMessage(_T("[ReviewProcessor]Add Process Data module[%d] result[%d]"), nModuleIndex, nCurResultIdx); 
@@ -282,7 +266,6 @@
    LeaveCriticalSection(&m_csUserCriticalSection);
    // 占쏙옙占?占쏙옙占쏙옙.
    m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult);
    return;
@@ -337,7 +320,6 @@
    int nEndResultIdx = pReviewResult->GetEndSReviewResultIndex();
    // �ε����� ���� ������ �ε��� ���� Ŭ��..
    if (nCurResultIdx > nEndResultIdx)
    {
        LeaveCriticalSection(&m_csUserCriticalSection);
@@ -345,7 +327,6 @@
        g_pLog->DisplayMessage(_T("[ReviewProcessor]SetWsiMultiShotResultData module[%d] point[%d] result[%d]"), nModuleIndex, measureResut.nResultIndex, nCurResultIdx);
    }
    // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙
    wsiResult.nWsi_ResultCode = measureResut.nResultCode;
    wsiResult.nWsi_Type = measureResut.nResultType;
    wsiResult.nWsi_SlopeWarn = measureResut.nXSlopeWarn;
@@ -353,7 +334,6 @@
    memcpy(wsiResult.pWsi_ResultData, measureResut.pResultData, sizeof(wsiResult.pWsi_ResultData));
    // 占쏙옙占?占쏙옙占쏙옙占쏙옙 占쌩곤옙
    SReviewResult *pProcessResult = NULL;
    if (pGlassResult->SetWsiResultData(nModuleIndex, nCurResultIdx, wsiResult, nGlassPosX, nGlassPosY, nMotorPosX, nMotorPosY, dTime))
    {
@@ -363,10 +343,8 @@
        pProcessResult = pReviewResult->GetSReviewResult(nCurResultIdx);
    }
    // ���� ������, ���� ���μ����� ������ ����
    if (pProcessResult)
    {
        // ó�� ������ ����
        if (AddReviewProcessData(pProcessResult) == 1)
        {
            g_pLog->DisplayMessage(_T("[ReviewProcessor]Add Process Data module[%d] result[%d]"), nModuleIndex, nCurResultIdx); 
@@ -381,8 +359,7 @@
    }
    LeaveCriticalSection(&m_csUserCriticalSection);
    // 占쏙옙占?占쏙옙占쏙옙.
.
    m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult);
    return;
@@ -457,7 +434,6 @@
    int nStartResultIdx    = pReviewResult->GetStartSReviewResultIndex();
    int nEndResultIdx    = pReviewResult->GetEndSReviewResultIndex();
    
    // �ε����� ���� ������ �ε��� ���� Ŭ��..
    if (nCurResultIdx > nEndResultIdx)  
    {
        LeaveCriticalSection(&m_csUserCriticalSection);
@@ -465,7 +441,6 @@
        g_pLog->DisplayMessage(_T("[ReviewProcessor]SetReviewResultData module[%d] point[%d] result[%d]"), nModuleIndex, nResultIndex, nCurResultIdx);
    }
    // 占쏙옙占쏙옙 占쏙옙占쏙옙譴占쏙옙占?占쏙옙占쏙옙
    SReviewResult *pProcessResult = NULL;
    switch(GetReviewProcessStatus())
    {
@@ -509,10 +484,8 @@
        break;
    }
    // ���� ������, ���� ���μ����� ������ ����
    if (pProcessResult)
    {
        // ó�� ������ ����
        if (AddReviewProcessData(pProcessResult)==1)
        {
            g_pLog->DisplayMessage(_T("[ReviewProcessor]Add Process Data module[%d] result[%d]"), nModuleIndex, nCurResultIdx); 
@@ -526,9 +499,7 @@
        pReviewResult->SetLastSReviewResultIndex(nCurResultIdx);
    }
        LeaveCriticalSection(&m_csUserCriticalSection);
        //占쏙옙占쏙옙 占쏙옙占?占쏙옙占쏙옙占쏙옙占쏙옙占쏙옙트 占쏙옙占쏙옙占쏙옙 占쏙옙占쌔뱄옙占쏙옙占쏙옙 占싣뤄옙 占쏙옙占쏙옙占쏙옙 占쏙옙타占쏙옙 占쌕쏙옙 占쏙옙占쏙옙占쏙옙표 占싫쏙옙占쏙옙
        // ��ȣó�� �ʿ��� �̰� ����
        if (nCurResultIdx + 1== pReviewResult->GetSReviewResultCount())
        {
            if (nModuleIndex == 0)
@@ -542,7 +513,7 @@
            if (bLeftGantryReviewDone&&bRightGantryReviewDone)
            {
                ::Sleep(3000); // 占쏙옙占쏙옙甄占?占십쇽옙占쏙옙. 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙.
                ::Sleep(3000);
                g_pLog->DisplayMessage(_T("[ReviewProcessor]RemainReview Started module[%d]"), nModuleIndex);
                CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor();
                switch (GetReviewProcessStatus())
@@ -567,13 +538,10 @@
            }
            else if(m_pRP2P->IRP2P_Recipe_GetRsRcpReviewInfo()->GetRcpSchedulingInfo()->GetSingleGantryPath()>0)
            {
                //20210302 占싱깍옙 占쏙옙트占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占싸곤옙占쏙옙 占쏙옙트占쏙옙占쏙옙 占싹뤄옙占?占쏙옙占승울옙占쏙옙
                //占쏙옙占쏙옙占쏙옙 占쌔야듸옙占쏙옙占쏙옙 Review 占쏙옙占쏙옙 Count 체크 占싹댐옙 占쏙옙占쏙옙占쏙옙占?占싼곤옙트占쏙옙 占쏙옙占쏙옙 200占쏙옙占쏙옙占쏙옙 占쏙옙占쌩댐옙 占쏙옙占쏙옙 占쌩삼옙
                //占쌓뤄옙占쏙옙 占싱깍옙 占쏙옙트占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙처占쏙옙 占싹울옙 占쏙옙占쏙옙占싹듸옙占쏙옙 占쌕뀐옙森占?CHM
                g_pLog->DisplayMessage(_T("[ReviewProcessor]Single GantryPath Use"), nModuleIndex);
                if (bLeftGantryReviewDone || bRightGantryReviewDone)
                {
                    ::Sleep(3000); // 占쏙옙占쏙옙甄占?占십쇽옙占쏙옙. 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙.
                    ::Sleep(3000);
                    g_pLog->DisplayMessage(_T("[ReviewProcessor]RemainReview Started module[%d]"), nModuleIndex);
                    CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor();
                    switch (GetReviewProcessStatus())
@@ -601,7 +569,6 @@
        }
        
        // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 占쌉곤옙, 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占?占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙...
        if(nCurResultIdx==nEndResultIdx && nCurResultIdx+1 < pReviewResult->GetSReviewResultCount())
        {
@@ -624,8 +591,7 @@
        pReviewResult->SetStartSReviewResultIndex(nStartResultIdx);
        pReviewResult->SetEndSReviewResultIndex(nEndResultIdx);
        // ������ ����Ʈ ���� ��������.
        ::Sleep(3000); // 占쏙옙占쏙옙甄占?占십쇽옙占쏙옙. 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙.
        ::Sleep(3000);
           if (bLeftGantryReviewDone&&bRightGantryReviewDone)
           {
            
@@ -685,7 +651,6 @@
        }
    }
    // 占쏙옙占?占쏙옙占쏙옙.
    m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult, m_nReviewPlanIndex);
    return;
@@ -729,7 +694,6 @@
{
    if (m_pRP2P==NULL) return 0;
    // ������ ����Ʈ���� Ȯ�� �� PCControl ReviewEnd ����
    CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult();
    CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor();
    if (pGlassResult==NULL || pSequenceProcessor==NULL) 
@@ -737,7 +701,6 @@
        return 1;
    }
    // ����Ȯ��
    if (pGlassResult->CheckReviewComplete())
    {
        // check motor ready!
@@ -763,7 +726,6 @@
{
    if (m_pRP2P==NULL) return 0;
    // ������ ����Ʈ���� Ȯ�� �� PCControl ReviewEnd ����
    CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult();
    CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor();
    if (pGlassResult==NULL || pSequenceProcessor==NULL) 
@@ -771,7 +733,6 @@
        return 1;
    }
    // ����Ȯ��
    if (pGlassResult->CheckUserComplete())
    {
        m_pRP2P->IRP2P_DisplayMessage(_T("User Last Point Complete! "));
@@ -796,7 +757,6 @@
{
    if (m_pRP2P==NULL) return 0;
    // ������ ����Ʈ���� Ȯ�� �� PLC ReviewEnd ����
    CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult();
    CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor();
    if (pGlassResult==NULL || pSequenceProcessor==NULL) 
@@ -804,7 +764,6 @@
        return 1;
    }
    // ����Ȯ��
    if (pGlassResult->CheckReflowComplete())
    {
        m_pRP2P->IRP2P_DisplayMessage(_T("Reflow Last Point Complete! "));
@@ -829,7 +788,6 @@
{
    if (m_pRP2P==NULL) return 0;
    // ������ ����Ʈ���� Ȯ�� �� PCControl ReviewEnd ����
    CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult();
    CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor();
    if (pGlassResult==NULL || pSequenceProcessor==NULL) 
@@ -837,7 +795,6 @@
        return 1;
    }
    // ����Ȯ��
    if (pGlassResult->CheckWsiComplete())
    {
        m_pRP2P->IRP2P_DisplayMessage(_T("Wsi Last Point Complete! "));
@@ -863,7 +820,6 @@
    g_pLog->DisplayMessage(_T("PostProcessMeasureResult[%d]"),nThreadIdx);
    if (m_pRP2P==NULL) return 0;
    // ������ ����Ʈ���� Ȯ�� �� PCControl ReviewEnd ����
    CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult();
    CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor();
    if (pGlassResult==NULL || pSequenceProcessor==NULL) 
@@ -871,7 +827,6 @@
        return 1;
    }
    // ����Ȯ��
    if (pGlassResult->CheckMeasureComplete())
    {
        m_pRP2P->IRP2P_DisplayMessage(_T("Measure Last Point Complete! "));
@@ -900,7 +855,6 @@
{
    if (m_pRP2P==NULL) return 0;
    // ������ ����Ʈ���� Ȯ�� �� PCControl ReviewEnd ����
    CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult();
    CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor();
    if (pGlassResult==NULL || pSequenceProcessor==NULL) 
@@ -908,7 +862,6 @@
        return 1;
    }
    // ����Ȯ��
    if (pGlassResult->CheckWsiReflowComplete())
    {
        m_pRP2P->IRP2P_DisplayMessage(_T("Wsi Reflow Last Point Complete! "));
@@ -932,7 +885,6 @@
{
    if (m_pRP2P==NULL) return 0;
    // ������ ����Ʈ���� Ȯ�� �� PCControl ReviewEnd ����
    CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult();
    CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor();
    if (pGlassResult==NULL || pSequenceProcessor==NULL) 
@@ -940,7 +892,6 @@
        return 1;
    }
    // ����Ȯ��
    if (pGlassResult->CheckWsiUserComplete())
    {
        m_pRP2P->IRP2P_DisplayMessage(_T("Wsi Last Point Complete! "));
@@ -965,7 +916,6 @@
{
    if (m_pRP2P == NULL) return 0;
    // ������ ����Ʈ���� Ȯ�� �� PCControl ReviewEnd ����
    CGlassResult *pGlassResult = m_pRP2P->IRP2P_GetCurrentGlassResult();
    CSequenceProcessor* pSequenceProcessor = m_pRP2P->IRP2P_GetSequenceProcessor();
    if (pGlassResult == NULL || pSequenceProcessor == NULL)
@@ -973,7 +923,6 @@
        return 1;
    }
    // ����Ȯ��
    if (pGlassResult->CheckWsiMultiShotComplete())
    {
        m_pRP2P->IRP2P_DisplayMessage(_T("WsiMultiShot Last Point Complete! "));
@@ -1138,23 +1087,19 @@
        return ReviewResult_Process_Fail;
    }
    
    // Snap �ð� ����.
    CTime snapTime = CTime::GetCurrentTime();
    pReviewResult->strSnapTime.Format(_T("%04d%02d%02d%02d%02d%02d"), snapTime.GetYear(), snapTime.GetMonth(), snapTime.GetDay(), 
        snapTime.GetHour(), snapTime.GetMinute(), snapTime.GetSecond());    // snap_time
    // 占쏙옙占쏙옙 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙 占싱몌옙 占쏙옙占쏙옙占?
    CString strImageFileName = _T("");
    if (MakeReviewImageFileName(pReviewResult)==FALSE)
    {
        
    }
    //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨몌옙 占쏙옙占쏙옙 占싱뱄옙占쏙옙 占싱몌옙 占쏙옙 占쏙옙표 채占쏙옙占쌍깍옙
    if(!UpdateMemoryReviewPlan(pReviewResult))
        m_pRP2P->IRP2P_DisplayMessage(_T("[ReviewPlan] Memory Update Fail!! DefectIdx : %d"), pReviewResult->nDefectidx2);
    
    // ���� �̹��� ���� ���� �̸�
    pReviewResult->strImgFileName = m_strSaveImageBasePath + _T("\\") +pReviewResult->strImgFileName;
    pReviewResult->nOpticType = 1;
@@ -1178,7 +1123,6 @@
        //    UINT64 nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep);
            //if (nSize > 0)
            //    m_pRP2P->IRP2P_DisplayMessage(_T("Backup Review Image Save Success! Size: %d byte [%s]"), nSize, pReviewResult->strUploadImgFileName);
            // 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占?占쏙옙占쏙옙 20190917 chm
            strPath.Format(_T("%s\\%s"), m_strSaveImageUploadPath, pReviewResult->strUploadImgFileName);
            nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep);
@@ -1193,7 +1137,7 @@
                    m_pRP2P->IRP2P_DisplayMessage(_T("RTMS Review Image Save Fail!!"));
                }
                else m_pRP2P->IRP2P_DisplayMessage(_T("RTMS Review Image Save Success! Size: %d byte [%s] index[%d]"), nSize, strRTMSPath, pReviewResult->nDefectIdx); //taek 210128 �ӵ� ������ �ӽ÷� �α� ������ ����
                else m_pRP2P->IRP2P_DisplayMessage(_T("RTMS Review Image Save Success! Size: %d byte [%s] index[%d]"), nSize, strRTMSPath, pReviewResult->nDefectIdx);
            }
            if (nSize > 0)
@@ -1237,7 +1181,7 @@
    const CRsRcpReviewInfo*  psRcpReviewInfo = m_pRP2P->IRP2P_Recipe_GetRsRcpReviewInfo();
    if(psRcpReviewInfo== NULL) m_pRP2P->IRP2P_DisplayMessage(_T("RcpReviewInfo is NULL"));
    
    if(psRcpReviewInfo->m_bDefocusUse) //190819chm 占쏙옙占쏙옙커占쏙옙 占싯띰옙 占쏙옙占?
    if(psRcpReviewInfo->m_bDefocusUse)
    {
      if(pReviewResult->nLocation == DefectLoc_ASG || pReviewResult->nLocation == DefectLoc_PAD || pReviewResult->nLocation == DefectLoc_C2C)
      {
@@ -1344,12 +1288,10 @@
        return ReviewResult_Process_Fail;
    }
    // Snap �ð� ����.
    CTime snapTime = CTime::GetCurrentTime();
    pReviewResult->strSnapTime.Format(_T("%04d%02d%02d%02d%02d%02d"), snapTime.GetYear(), snapTime.GetMonth(), snapTime.GetDay(), 
        snapTime.GetHour(), snapTime.GetMinute(), snapTime.GetSecond());    // snap_time
    // 占쏙옙占쏙옙 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙 占싱몌옙 占쏙옙占쏙옙占?
    CString strImageFileName = _T("");
    if (MakeUserImageFileName(pReviewResult)==FALSE)
    {
@@ -1361,8 +1303,6 @@
    if(!UpdateMemoryUserPlan(pReviewResult))
        m_pRP2P->IRP2P_DisplayMessage(_T("[UserPlan] Memory Update Fail!! DefectIdx : %d"), pReviewResult->nDefectidx2);
    //// ���� �̹��� ���� ���� �̸�
    //strImageFileName.Format(_T("ModuleIdx[%d]_PointIdx[%d]_Zoom[%d]"), pReviewResult->nModuleIdx, pReviewResult->nResultIdx, pReviewResult->nZoomIdx);
    //pReviewResult->strImgFileName = strImageFileName;
@@ -1381,10 +1321,9 @@
            UINT64 nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep);
            m_pRP2P->IRP2P_DisplayMessage(_T("Upload Review Image Save Success! Size: %d byte"), nSize);
            //uploadImage.SaveImage(strPath, 40);  // ȭ�� 60% 150k
            //uploadImage.SaveImage(strPath, 40);
            if(GetReviewProcessStatus() == ReviewProcessStatus_UserStart)
            {
                // 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占?占쏙옙占쏙옙 20190917 chm
                //strPath.Format(_T("%s\\%s\\%s"), m_strSaveImageUploadPath, m_strGlassID, pReviewResult->strUploadImgFileName);
                strPath.Format(_T("%s\\%s"), m_strSaveImageUploadPath, pReviewResult->strUploadImgFileName);
                nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep);
@@ -1406,7 +1345,7 @@
    const CRsRcpReviewInfo*  psRcpReviewInfo = m_pRP2P->IRP2P_Recipe_GetRsRcpReviewInfo();
    if(psRcpReviewInfo== NULL) m_pRP2P->IRP2P_DisplayMessage(_T("RcpReviewInfo is NULL"));
    if(psRcpReviewInfo->m_bDefocusUse) //190819chm 占쏙옙占쏙옙커占쏙옙 占싯띰옙 占쏙옙占?
    if(psRcpReviewInfo->m_bDefocusUse)
    {
        if(pReviewResult->nLocation == DefectLoc_ASG || pReviewResult->nLocation == DefectLoc_PAD || pReviewResult->nLocation == DefectLoc_C2C)
        {
@@ -1511,7 +1450,6 @@
    int nTestMode = FALSE;
    
    //�ù� �������� �̹��� ���� ���� 20190827 chm
    if(nTestMode){
        Sleep(500);
        CString strPathName;
@@ -1533,12 +1471,10 @@
        return ReviewResult_Process_Fail;
    }
    // Snap �ð� ����.
    CTime snapTime = CTime::GetCurrentTime();
    pReviewResult->strSnapTime.Format(_T("%04d%02d%02d%02d%02d%02d"), snapTime.GetYear(), snapTime.GetMonth(), snapTime.GetDay(), 
        snapTime.GetHour(), snapTime.GetMinute(), snapTime.GetSecond());    // snap_time
    // 占쏙옙占쏙옙 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙 占싱몌옙 占쏙옙占쏙옙占?
    CString strImageFileName = _T("");
    if (MakeReflowImageFileName(pReviewResult)==FALSE)
    {
@@ -1554,8 +1490,8 @@
    }
    reflowParam reParam; //Reflow ���� ����
    reflowResult reResult;//Reflow 占쏙옙占?占쏙옙占쏙옙
    reflowParam reParam;
    reflowResult reResult;
    //////////////////////////////////////////////////////////////////////////////////////////////
    BOOL btFlag =0;
@@ -1567,10 +1503,10 @@
    CCHImageData tempImage;
    tempImageOrigin.CopyImageFrom(pImageData);
    if(pReviewResult->nReflow_Side==7) // ���� ����
    if(pReviewResult->nReflow_Side==7)
    {
        btFlag=1;
        CCHImageProcess::ImageRotate(pImageData,&tempImage,135);//���� �̹����� Right ȸ�� ���� Right ���� ����
        CCHImageProcess::ImageRotate(pImageData,&tempImage,135);
        pImageData = &tempImage;
        //reParam.nImageWidth = 2048;
        //reParam.nImageHeight = 2432;
@@ -1680,9 +1616,9 @@
    CCHImageData tmepData2;
    if(btFlag==1){
        CCHImageProcess::ImageRotate(pImageData,&tmepData2,135);//Right ������ �ٽ� �̹��� ������
        CCHImageProcess::ImageRotate(pImageData,&tmepData2,135);
        pImageData= &tmepData2;
        //pImageData->SaveImage(_T("D:\\Testafter.bmp"));//Test �� ���� bmp ����
        //pImageData->SaveImage(_T("D:\\Testafter.bmp"));
    }
@@ -1707,17 +1643,15 @@
            UINT64 nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep);
            m_pRP2P->IRP2P_DisplayMessage(_T("Upload Review Image Save Success! Size: %d byte"), nSize);
            //uploadImage.SaveImage(strPath, 40);  // ȭ�� 60% 150k
            //uploadImage.SaveImage(strPath, 40);
            if(GetReviewProcessStatus() == ReviewProcessStatus_ReflowStart)
            {
                // 占쏙옙占싸듸옙 占싱뱄옙占쏙옙 占쏙옙占?占쏙옙占쏙옙 20190917 chm
                //strPath.Format(_T("%s\\%s\\%s"), m_strSaveImageUploadPath, m_strGlassID, pReviewResult->strUploadImgFileName);
                strPath.Format(_T("%s\\%s"), m_strSaveImageUploadPath, pReviewResult->strUploadImgFileName);
                nSize = SaveReviewImage(&uploadImage, strPath, m_nReviewImageSize, m_nReviewImageQuality, m_nReviewImageStep);
                m_pRP2P->IRP2P_DisplayMessage(_T("Upload Reflow Image Save Success! Size: %d byte"), nSize);
                
                //�ùĵ����� �̹��� �ڵ����� ������ 20190927chm
                if(nTestMode)
                {
                    CString csParam;
@@ -1737,7 +1671,6 @@
        m_pRP2P->IRP2P_DisplayMessage(_T("Upload Reflow Image Save Fail![%s]"), pReviewResult->strUploadImgFileName);
    }
    //�����޸� ������Ʈ
    if(!UpdateMemoryReflowPlan(pReviewResult))
        m_pRP2P->IRP2P_DisplayMessage(_T("[ReflowPlan] Memory Update Fail!! DefectIdx : %d"), pReviewResult->nDefectidx2);
@@ -1949,8 +1882,6 @@
}
//���ϸ� 181227 cmark
BOOL CReviewProcessor_CPJT::MakeReviewImageFileName(SReviewResult* pReviewResult)
{
    if (m_pRP2P==NULL || pReviewResult==NULL) return FALSE;
@@ -1963,7 +1894,7 @@
    if(GetReviewProcessStatus() == ReviewProcessStatus_ReviewStart)
    {
        // [2017:6:5]-[WEZASW] : Review Image 占쏙옙占싹몌옙占?'*' 占쏙옙占?占쏙옙占쏙옙.(占쏙옙占쏙옙처占쏙옙)
        // [2017:6:5]-[WEZASW] : Review Image
        if (pReviewResult->strDefectCode.Compare(_T("***")) == 0)
            strDefectCodeTemp = _T("DC");    
        else 
@@ -2054,7 +1985,7 @@
        snapTime.GetHour(), snapTime.GetMinute(), snapTime.GetSecond());    // snap_time
    // [2017:4:10]-[WEZASW] : 占쏙옙占쏙옙占?占쏙옙청占쏙옙 占쏙옙占쏙옙 bmp 占쏙옙占쏙옙 占쌩곤옙 占쏙옙占쏙옙. (占쌈시삼옙占?
    // [2017:4:10]-[WEZASW] :
    pReviewResult->strOrignalImgFileName = strFileName + _T(".bmp");
    strFileName += _T(".jpg");
@@ -2067,11 +1998,10 @@
int    CReviewProcessor_CPJT::ProcessWSIReflow(int nThreadIdx, SReviewResult* pReviewResult)
{
    // [2016:11:15]-[WEZASW] : ���� �ʿ�
    // [2016:11:15]-[WEZASW] :
    if(!UpdateMemoryWsiReflowPlan(pReviewResult))
        m_pRP2P->IRP2P_DisplayMessage(_T("[WsiReflowPlan] Memory Update Fail!! DefectIdx : %d"), pReviewResult->nDefectidx2);
    // wsi�� return ������ ���� [6/20/2017 bhs]
    return WsiResultSuccess;
}
@@ -2115,7 +2045,7 @@
    
    if(GetReviewProcessStatus() == ReviewProcessStatus_UserStart)
    {
        // [2017:6:5]-[WEZASW] : Review Image 占쏙옙占싹몌옙占?'*' 占쏙옙占?占쏙옙占쏙옙.(占쏙옙占쏙옙처占쏙옙)
        // [2017:6:5]-[WEZASW] : Review Image
        if (pReviewResult->strDefectCode.Compare(_T("***")) == 0)
            strDefectCodeTemp = _T("DC");    
        else 
@@ -2209,7 +2139,7 @@
    //         strFileName += pReviewResult->strSnapTime;
    //     }
    // [2017:4:10]-[WEZASW] : 占쏙옙占쏙옙占?占쏙옙청占쏙옙 占쏙옙占쏙옙 bmp 占쏙옙占쏙옙 占쌩곤옙 占쏙옙占쏙옙. (占쌈시삼옙占?
    // [2017:4:10]-[WEZASW] :
    pReviewResult->strOrignalImgFileName = strFileName + _T(".bmp");
    strFileName += _T(".jpg");
@@ -2286,13 +2216,11 @@
void CReviewProcessor_CPJT::LoadAoiImage(const CString& strGlassID, int nOpticType, int nPosX, int nPosY, CCHImageData* pAoiDark, CCHImageData *pAoiBright)
{
    // 3. �˻� ���� �̹��� ã��
    CString strAoiDarkPath = _T("");
    CString strAoiBrightPath = _T("");
    FindAoiDefectImagePath(strGlassID, nOpticType, nPosX, nPosY, strAoiDarkPath, strAoiBrightPath);
    // Dark, Bright 占쏙옙占?찾占쏙옙 占쏙옙占쏙옙 占쌍쇽옙처占쏙옙 [2017.7.1 bhs]
    // Dark image
    //if(nOpticType & DEFECT_OPTIC_DARK)
    {
@@ -2337,7 +2265,6 @@
    CFileFind finder;
    CString strSearchPath = _T("");
    // Dark, Bright 占쏙옙占?찾占쏙옙 占쏙옙占쏙옙 占쌍쇽옙처占쏙옙 [2017.7.1 bhs]
    //if (nOpticType & DEFECT_OPTIC_DARK)
    {
        // Dark field
@@ -2411,7 +2338,6 @@
            processTimer.End();
        }
        // 4-3. 占쏙옙占쏙옙占쏙옙占?占쏙옙占?
        double dAverageGray = 0.0;
        if (CCHImageProcess::ImageAverage(&bandImage, dAverageGray)==1)
        {
@@ -2448,14 +2374,12 @@
    CCHImageData pReviewCam;
    CCHImageData tempImage1;
    
    // ������ �̹��� ȸ��
    if (m_nImageRotate > 0)
    {
        tempImage1.CopyImageFrom(pReviewCamSource);
        CCHImageProcess::ImageRotate(pReviewCamSource, &tempImage1, (90.0*m_nImageRotate));
    }
    // ������ �̹��� ����
    if (m_nimageFlip > 0)
    {
        if(m_nImageRotate > 0)
@@ -2492,7 +2416,6 @@
    // set total size * scale
    int nTotalWidth        = int(m_nReviewResizeWidth * m_dReviewImageScale + 0.5);
    // 20170817 smok Dark, Bright �̹����� ���� �̹��� �Ʒ��� �ٵ��� ����
    int nTotalHeight    = int(m_nReviewResizeHeight * m_dReviewImageScale + 0.5 + max(pAoiDark2.GetHeight(), pAoiBright2.GetHeight()));
    int nTotalHeight2    = int(m_nReviewResizeHeight * m_dReviewImageScale + 0.5);
@@ -2518,14 +2441,13 @@
    double dRulerGab = 20.0 / m_dReviewImageScale;
    double dScaleResolution = pReviewResult->dMeasureResolution / m_dReviewImageScale;
    //DrawRuler(&memDC, nTotalWidth, nTotalHeight2, dScaleResolution, dRulerGab); // resolution, ruler gab //taek 210127 占쏙옙占?X
    //DrawRuler(&memDC, nTotalWidth, nTotalHeight2, dScaleResolution, dRulerGab); // resolution, ruler gab //taek 210127
    // draw text string
    DrawDefectInfo(&memDC, findResult, pReviewResult);
    
    //DrawAoiImage(&memDC, &pAoiDark2, &pAoiBright2, &pAoiDark2, &pAoiBright2, nAoiWidth, nAoiHeight);
    // draw line ���� ������
    //DrawCenterLine(&memDC, nTotalWidth, nTotalHeight);
   // DrawCenterRect(&memDC, nTotalWidth, nTotalHeight, 100, 100, pReviewResult->dMeasureResolution);
@@ -2553,7 +2475,7 @@
    nWidthDark = nHeightDark = nWidthBright = nHeightBright = 0;
    // 20170817 smok Dark, Bright �̹����� ���� �̹��� �Ʒ��� �ٵ��� ����
    // 20170817 smok Dark, Bright
    // dark
    CCHImageData subImage;
    if(pAoiDark!=NULL && pAoiDark->GetImageExist())
@@ -2634,11 +2556,9 @@
    int nTotalWidth        = int(m_nReviewResizeWidth * m_dReviewImageScale + 0.5);
    int nTotalHeight    = int(m_nReviewResizeHeight * m_dReviewImageScale + 0.5);
    // Dark, Bright 占싱뱄옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쌕듸옙占쏙옙 占쏙옙占쏙옙, Dark 占쏙옙, Bright 占싣뤄옙 - 占쏙옙占쏙옙占?占쏙옙청[2017.6.30 bhs]
    //int nX = nTotalWidth - nWidth;
    //int nY = nTotalHeight - (nHeight * 2);
    // 20170817 smok Dark, Bright �̹����� ���� �̹��� �Ʒ��� �ٵ��� ����
    int nX = 0;
    int nY = nTotalHeight;
    pAoiDark1->ShowImage(pDC->m_hDC, nX, nY, pAoiDark1->GetWidth(), pAoiDark1->GetHeight(), 0, 0);
@@ -2646,7 +2566,6 @@
    //pAoiDark1->ShowImage(pDC->m_hDC,    nTotalWidth - nWidth,    nTotalHei4ght-nHeight,    pAoiDark1->GetWidth(), pAoiDark1->GetHeight(), 0, 0);
    //pAoiBright1->ShowImage(pDC->m_hDC,    nTotalWidth - nWidth,    nTotalHeight-nHeight,    pAoiBright1->GetWidth(), pAoiBright1->GetHeight(), 0, 0);
    // 占싯삼옙 占싱뱄옙占쏙옙 占쌩앙울옙 화占쏙옙표 표占쏙옙 - 占쏙옙占쏙옙占?占쏙옙청 [2017.6.30 bhs]
    CFont Font;
    VERIFY(Font.CreateFont(
        50,                        // nHeight
@@ -2667,7 +2586,7 @@
    CFont *pOldFont = pDC->SelectObject(&Font);
    pDC->SetTextColor(RGB(255,0,0));
    CString strArrow = _T("��");
    CString strArrow = _T("↗");
    CSize size = pDC->GetTextExtent(strArrow);
    int nCenterX = nX + (nWidth / 2) - size.cx;
    int nCenterY = nY + (nHeight / 2)/* + (size.cy / 2)*/;
@@ -2870,7 +2789,6 @@
    else {
        wchar_t  pstrPrefix[128] ={};
        //Zone �ѹ� 210127
        int nValue = 0;
        for (int i = 15; i >= 0; i--)
        {
@@ -2881,8 +2799,6 @@
        }
        //taek 210127
        //占쏙옙占쏙옙占쏙옙占?占쏙옙표占쏙옙 y 占쏙옙 *-1占쏙옙 占쏙옙占쏙옙
        //���� ID, �˻� ī�޶� ����, �˻� Camera ���� : (? ) ķ ?, Cell ID,    Review Cam ���� : Gantry ����,    ���� Size,    ���� Zone ����,    Stak Flag, CODE ����, ��ǥ ����
        
        // PPID
//         strValue.Format(_T("Tool[%s].Recipe[%s].ScanNo[%d/%d].Time[%4d/%2d/%2d_%d:%d:%d].MaxGray[%d].RefGray[%d].REVCnt[%d]"),pReviewResult->strEquipID,pGlassResult->m_strPPID,pReviewResult->nAOIScanIdx,0,snapTime.GetYear(), snapTime.GetMonth(), snapTime.GetDay(),
@@ -3097,7 +3013,7 @@
    if(GetReviewProcessStatus() == ReviewProcessStatus_ReflowStart)
    {
        // [2017:6:5]-[WEZASW] : Review Image 占쏙옙占싹몌옙占?'*' 占쏙옙占?占쏙옙占쏙옙.(占쏙옙占쏙옙처占쏙옙)
        // [2017:6:5]-[WEZASW] : Review Image
        if (pReviewResult->strDefectCode.Compare(_T("***")) == 0)
            strDefectCodeTemp = _T("DC");    
        else 
@@ -3174,7 +3090,7 @@
    //         strFileName += pReviewResult->strSnapTime;
    //     }
    // [2017:4:10]-[WEZASW] : 占쏙옙占쏙옙占?占쏙옙청占쏙옙 占쏙옙占쏙옙 bmp 占쏙옙占쏙옙 占쌩곤옙 占쏙옙占쏙옙. (占쌈시삼옙占?
    // [2017:4:10]-[WEZASW] :
    pReviewResult->strOrignalImgFileName = strFileName + _T(".bmp");
    strFileName += _T(".jpg");
@@ -3220,7 +3136,6 @@
    int nStartResultIdx    = pReviewResult->GetStartSReviewResultIndex();
    int nEndResultIdx    = pReviewResult->GetEndSReviewResultIndex();
    // �ε����� ���� ������ �ε��� ���� Ŭ��..
    if (nCurResultIdx > nEndResultIdx)  
    {
        LeaveCriticalSection(&m_csUserCriticalSection);
@@ -3228,7 +3143,6 @@
        g_pLog->DisplayMessage(_T("[ReviewProcessor]SetWsiResultData module[%d] point[%d] result[%d]"), nModuleIndex, measureResut.nResultIndex, nCurResultIdx);
    }
    // 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙
    wsiResult.nWsi_ResultCode        = measureResut.nResultCode;
    wsiResult.dWsi_DamDistance        = measureResut.dDamDistance;
@@ -3238,7 +3152,6 @@
    }
    //memcpy(wsiResult.nWsi_pReflowResultData, measureResut.pReflowResultData, sizeof(wsiResult.nWsi_pReflowResultData));
    
    // 占쏙옙占?占쏙옙占쏙옙占쏙옙 占쌩곤옙
    SReviewResult *pProcessResult = NULL;
    if (pGlassResult->SetWsiReflowResultData(nModuleIndex, nCurResultIdx, wsiResult, nGlassPosX, nGlassPosY, nMotorPosX, nMotorPosY, dTime))
    {
@@ -3247,10 +3160,8 @@
        pProcessResult = pReviewResult->GetSReviewResult(nCurResultIdx);
    }
    // ���� ������, ���� ���μ����� ������ ����
    if (pProcessResult)
    {
        // ó�� ������ ����
        if (AddReviewProcessData(pProcessResult)==1)
        {
            g_pLog->DisplayMessage(_T("[ReviewProcessor]Add Wsi Reflow Process Data module[%d] result[%d]"), nModuleIndex, nCurResultIdx);
@@ -3266,7 +3177,6 @@
    LeaveCriticalSection(&m_csUserCriticalSection);
    // 占쏙옙占?占쏙옙占쏙옙.
    m_pRP2P->IRP2P_UpdateReviewResult(nModuleIndex, pGlassResult, 5);
    return;
@@ -3274,8 +3184,7 @@
    g_pLog->DisplayMessage(_T("[ReviewProcessor]WsiResult FAIL! module[%d] result[%d]"), nModuleIndex, measureResut.nResultIndex);
    return;
}
//0129cmark ���� ��ġ�� ���� ��ǥ�� ���� ��ǥ�� ����
double CReviewProcessor_CPJT::GetCentertoOrginCoordinate(double dPosX,double dPosY,int nCornercut,int nOriginDirection){
    double nResultPosX=0.0;
@@ -3284,60 +3193,60 @@
    // CornerCutDirection    { CLeftTop=0, CRightTop, CLeftBottom,   CRightBottom };
    // OriginDirection    { OLeftTop=0, ORightTop, OLeftBottom,   ORightBottom };
    if(nOriginDirection==RPOLeftTop){//�������»�
    if(nOriginDirection==RPOLeftTop){
        if(nCornercut == RPCLeftTop)//�»�
        if(nCornercut == RPCLeftTop)
        { 
            nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT)/2. - dPosY;
        }
        else if(nCornercut == RPCRightTop)//占쏙옙占?
        else if(nCornercut == RPCRightTop)
        {
            nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY;
        }
        else if(nCornercut == RPCLeftBottom)//����
        else if(nCornercut == RPCLeftBottom)
        {
            nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT)/2. - dPosY;
        }
        else if(nCornercut == RPCRightBottom)//����
        else if(nCornercut == RPCRightBottom)
        {
            nResultPosX = double(GLASS_SIZE_WIDTH)/2 + dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT)/2 + dPosY;
        }
    }
    else if(nOriginDirection==RPORightTop){//占쏙옙占쏙옙占쏙옙占쏙옙占?
    else if(nOriginDirection==RPORightTop){
        if(nCornercut == RPCLeftTop)//�»�
        if(nCornercut == RPCLeftTop)
        { 
            nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY;
        }
        else if(nCornercut == RPCRightTop)//占쏙옙占?
        else if(nCornercut == RPCRightTop)
        {
            nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT)/2. - dPosY;
        }
        else if(nCornercut == RPCLeftBottom)//����
        else if(nCornercut == RPCLeftBottom)
        {
            nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY;
        }
        else if(nCornercut == RPCRightBottom)//����
        else if(nCornercut == RPCRightBottom)
        {
            nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT)/2. - dPosY;
        }
    }
    else if(nOriginDirection==RPOLeftBottom){//����������
    else if(nOriginDirection==RPOLeftBottom){
        if(nCornercut == RPCLeftTop)//�»�
        if(nCornercut == RPCLeftTop)
        { 
            //210402
        /*    nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX;
@@ -3346,13 +3255,13 @@
            nResultPosX = double(GLASS_SIZE_WIDTH) / 2. + dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT) / 2. + dPosY;
        }
        else if(nCornercut == RPCRightTop)//占쏙옙占?
        else if(nCornercut == RPCRightTop)
        {
            nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY;
        }
        else if(nCornercut == RPCLeftBottom)//����
        else if(nCornercut == RPCLeftBottom)
        {
            //210402
            /*nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX;
@@ -3360,33 +3269,33 @@
            nResultPosX = double(GLASS_SIZE_WIDTH) / 2. + dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT) / 2. + dPosY;
        }
        else if(nCornercut == RPCRightBottom)//����
        else if(nCornercut == RPCRightBottom)
        {
            nResultPosX = double(GLASS_SIZE_WIDTH) / 2. - dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT) / 2. + dPosY;
        }
    }
    else if (nOriginDirection==RPORightBottom)
    {//����������
    {
        if(nCornercut == RPCLeftTop)//�»�
        if(nCornercut == RPCLeftTop)
        { 
            nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY;
        }
        else if(nCornercut == RPCRightTop)//占쏙옙占?
        else if(nCornercut == RPCRightTop)
        {
            nResultPosX = double(GLASS_SIZE_WIDTH)/2. + dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT)/2. - dPosY;
        }
        else if(nCornercut == RPCLeftBottom)//����
        else if(nCornercut == RPCLeftBottom)
        {
            nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT)/2. + dPosY;
        }
        else if(nCornercut == RPCRightBottom)//����
        else if(nCornercut == RPCRightBottom)
        {
            nResultPosX = double(GLASS_SIZE_WIDTH)/2. - dPosX;
            nResultPosY = double(GLASS_SIZE_HEIGHT)/2. - dPosY;
@@ -3411,7 +3320,7 @@
    CString strFileName = _T("");
    CString strDefectCodeTemp = _T("");
    // [2017:6:5]-[WEZASW] : Review Image 占쏙옙占싹몌옙占?'*' 占쏙옙占?占쏙옙占쏙옙.(占쏙옙占쏙옙처占쏙옙)
    // [2017:6:5]-[WEZASW] : Review Image
    if (pReviewResult->strDefectCode.Compare(_T("***")) == 0)
        strDefectCodeTemp = _T("DC");    
    else 
@@ -3475,7 +3384,6 @@
{
    if(pReviewResult == NULL)    return FALSE;
    //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨몌옙 占쏙옙占쏙옙 占싱뱄옙占쏙옙 占싱몌옙 占쏙옙 占쏙옙표 채占쏙옙占쌍깍옙
    CDitGlassRawClient *pDitGlassRawCleint = CDitGlassRawClient::GetInstance();
    if(pDitGlassRawCleint->isConnect() == TRUE)
    {
@@ -3489,17 +3397,17 @@
        strcpy(pSharedDefectReview->m_strRevImageName,pReviewResult->strImgFileName.MakeLower());
        
        //taek 210624 ���� ���� �� ���ش�.
        //taek 210624
        strcpy(pSharedDefectReview->m_strRevImagePath,pReviewResult->strImgFilePath.MakeLower());
        strcpy(pSharedGlassData->m_strAlignFirst, m_strReviewFirst.MakeLower());
        strcpy(pSharedGlassData->m_strAlignSecond, m_strReviewSecned.MakeLower());
        pSharedDefectReview->m_nPlanType =  ditRaw::RPT_Review;    //0:None, 1:Location(User, Fiexed) Review, 4:reflower, ??:Wsi, 1000:AOI(占쌤븝옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占?
        pSharedDefectReview->m_nPlanType =  ditRaw::RPT_Review;    //0:None, 1:Location(User, Fiexed) Review, 4:reflower, ??:Wsi, 1000:AOI(
        pSharedDefectReview->m_nResultCode = 1;  //0:None, 1:Success
        pSharedDefectReview->m_nShotIndex = pReviewResult->nResultIdx; 
        //pSharedDefectReview->m_nShotIndex = GetPlanReviewCount(); //RTMS 占쏙옙占쌔울옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占?占싣니몌옙 占쏙옙占쏙옙占쏙옙 占싹댐옙 占심뤄옙 taek 210128
        //pSharedDefectReview->m_nShotIndex = GetPlanReviewCount(); //RTMS taek 210128
        pSharedDefectReview->m_nModuleIndex = pReviewResult->nModuleIdx;
        pSharedDefectReview->m_nMagnificIndex = 20;
        pSharedDefectReview->m_fManification =pReviewResult->dMagnification;
@@ -3513,11 +3421,10 @@
BOOL CReviewProcessor_CPJT::UpdateMemoryUserPlan( SReviewResult* pReviewResult )
{
    //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨몌옙 占쏙옙占쏙옙 占싱뱄옙占쏙옙 占싱몌옙 占쏙옙 占쏙옙표 채占쏙옙占쌍깍옙
    CDitGlassRawClient *pDitRawClient = CDitGlassRawClient::GetInstance();
    if(pDitRawClient->isConnect() == TRUE)
    {
        int nDefectCount = pDitRawClient->GetGlassData()->m_nDefectNum; // user,reflow �� �˻� ���� ���� �����DZ⿡ ���� ī��Ʈ���� ���ų� ū���� ������ �ִ�
        int nDefectCount = pDitRawClient->GetGlassData()->m_nDefectNum; // user,reflow
        if(pReviewResult->nDefectIdx <nDefectCount)
        {    
            return FALSE;
@@ -3530,7 +3437,7 @@
        
        strcpy(pSharedDefectReview->m_strRevImageName,pReviewResult->strImgFileName);
    
        pSharedDefectReview->m_nPlanType = ditRaw::RPT_User;    //0:None, 1:Location(User, Fiexed) Review, 4:reflower, ??:Wsi, 1000:AOI(占쌤븝옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占?
        pSharedDefectReview->m_nPlanType = ditRaw::RPT_User;    //0:None, 1:Location(User, Fiexed) Review, 4:reflower, ??:Wsi, 1000:AOI(
        pSharedDefectReview->m_nResultCode = 1;  //0:None, 1:Success
        pSharedDefectReview->m_nShotIndex = pReviewResult->nResultIdx; 
        pSharedDefect->m_nShotIdx = pReviewResult->nResultIdx;
@@ -3539,7 +3446,7 @@
        pSharedDefectReview->m_nMagnificIndex = pReviewResult->dMagnification;
        pSharedDefectReview->m_fManification = pReviewResult->dMagnification;
        pSharedDefectReview->m_fManificResoultion = pReviewResult->dMagnification;
            m_pRP2P->IRP2P_DisplayMessage(_T("[�����޸�����]�ε���[%d]���ϸ�[%s]"),pReviewResult->nDefectidx2, pReviewResult->strUploadImgFileName);
            m_pRP2P->IRP2P_DisplayMessage(_T("[Access Shared Memory]IDX[%d]Filename[%s]"),pReviewResult->nDefectidx2, pReviewResult->strUploadImgFileName);
    }
@@ -3549,7 +3456,6 @@
BOOL CReviewProcessor_CPJT::UpdateMemoryReflowPlan( SReviewResult* pReviewResult )
{
    if(pReviewResult == NULL)    return FALSE;
    //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨모리울옙 占쏙옙占?채占쏙옙 占쌍깍옙
    CDitGlassRawClient *pDitRawClient = CDitGlassRawClient::GetInstance();
    //int nEqpID = m_pSP2P->ISP2P_System_GetSystemInfo()->m_nMachineType;
    CString strCellID = _T("");
@@ -3571,7 +3477,6 @@
                nReflowjuge=1;
            }
            // 占쏙옙占쏙옙占?占쏙옙청占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙. 0,1 Position占쏙옙 Pass
            else if(nReflowjuge == 3 || nReflowjuge == 2)
            {
                m_pRP2P->IRP2P_DisplayMessage(_T("[ReflowResult] Reflow Judge Is No OverFlow %d"),nReflowjuge);
@@ -3590,7 +3495,6 @@
                nReflowjuge=0;
            }
            
            //0:None, // ������ Line�� ����. 3 �̸� : DAM2 Reflow ����, 4~5 : DAM1 Reflow ����, 6 : no Reflow ���� / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side
            if(pReviewResult->nReflow_CellIndex > 7)
            {
                pReviewResult->nReflow_CellIndex = 0;
@@ -3607,7 +3511,7 @@
    if(pDitRawClient->isConnect() == TRUE)
    {
        int nDefectCount = pDitRawClient->GetGlassData()->m_nDefectNum; // user,reflow �� �˻� ���� ���� �����DZ⿡ ���� ī��Ʈ���� ���ų� ū���� ������ �ִ�
        int nDefectCount = pDitRawClient->GetGlassData()->m_nDefectNum;
        if(pReviewResult->nDefectidx2 <nDefectCount)
        {
            return FALSE;
@@ -3622,11 +3526,10 @@
        pSharedDefectReview->m_nPlanType =  ditRaw::RTP_Reflow;            
        pSharedDefectReview->m_nReflow_ResultCode = pReviewResult->nReflow_Result;// pReviewResult->nReflow_Result;  
        //0:None, // ������ Line�� ����. 3 �̸� : DAM2 Reflow ����, 4~5 : DAM1 Reflow ����, 6 : no Reflow ���� / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side
        //pSharedDefectReview->m_fReflow_LinePosData;    
        pSharedDefectReview->m_nReflow_Side = pReviewResult->nReflow_Side;
        pSharedDefectReview->m_nReflow_InspectionMode = 0;
        m_pRP2P->IRP2P_DisplayMessage(_T("[�����޸�����]�ε���[%d]���ϸ�[%s]"),pReviewResult->nDefectidx2, pReviewResult->strUploadImgFileName);
        m_pRP2P->IRP2P_DisplayMessage(_T("[Access Shared Memory]IDX[%d]Filename[%s]"),pReviewResult->nDefectidx2, pReviewResult->strUploadImgFileName);
    }
    
    return TRUE;
@@ -3636,7 +3539,6 @@
{
    if(pReviewResult == NULL)    return FALSE;
    //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨모리울옙 占쏙옙占?채占쏙옙 占쌍깍옙
    CDitGlassRawClient *pDitGlassRawClient = CDitGlassRawClient::GetInstance();
    if(pDitGlassRawClient->isConnect() == TRUE)
@@ -3653,7 +3555,7 @@
        pSharedDefectReview->m_nPlanType =  ditRaw::RTP_WSI;            
        pSharedDefectReview->m_nWsi_ResultCode=pReviewResult->nWsi_ResultCode; //0:None, 1:Success
        pSharedDefectReview->m_nWsi_Type = 2;/* nWSIType;                                    // �Ը� / ���� //wsi ���� */
        pSharedDefectReview->m_nWsi_Type = 2;
        pSharedDefectReview->m_fWsi_ResultData[0]= pReviewResult->nWsi_DefectType; // 0:normal 1:metal 2:huge 3:diffuse 4:trashy
        pSharedDefectReview->m_fWsi_ResultData[1]=(float)(nWSIheight/1000.0); 
        pSharedDefectReview->m_fWsi_ResultData[2]=(float)(nWSIWidth/1000.0);            // 0:Type, 1:Height, 2:Width
@@ -3663,7 +3565,7 @@
        pSharedDefectReview->m_fWsi_ResultData[6] = pReviewResult->dBZoneHeight;
        pSharedDefectReview->m_strWsi_2DImageFilename;
        pSharedDefectReview->m_strWsi_3DImageFilename;
        pSharedDefectReview->m_fWsiManification = 20;//20�� ����
        pSharedDefectReview->m_fWsiManification = 20;
        pSharedDefectReview->m_dWsiMmMotorX=pReviewResult->dTargetMotorX;
        pSharedDefectReview->m_dWsiMmMotorY=pReviewResult->dTargetMotorY;
        
@@ -3678,7 +3580,6 @@
BOOL CReviewProcessor_CPJT::UpdateMemoryWsiReflowPlan( SReviewResult* pReviewResult )
{
    if(pReviewResult == NULL)    return FALSE;
    //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨모리울옙 占쏙옙占?채占쏙옙 占쌍깍옙
    CDitGlassRawClient *pDitRawClient = CDitGlassRawClient::GetInstance();
    
@@ -3689,17 +3590,6 @@
    int nWsiReflowResult = 0;
    int nWsiReflowJudge = -1;
    /*
    pPacket->GetInt(0)            = Index
    pPacket->GetInt(1)            = Wsi 占쏙옙占쏙옙 占쏙옙占?
    pPacket->GetInt(2)            = A占쏙옙 占쏙옙占쏙옙 占쏙옙占?(1 占쏙옙占쏙옙 0 占쏙옙占쏙옙)
    pPacket->GetInt(3)          = B占쏙옙 占쏙옙占쏙옙 占쏙옙占?
    pPacket->GetInt(4)          = C占쏙옙 占쏙옙占쏙옙 占쏙옙占?
    pPacket->GetInt(5)          = D占쏙옙 占쏙옙占쏙옙 占쏙옙占?
    pPacket->GetInt(6)          = Review占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占?PointIndex
    pPacket->GetDouble(0)       = �£�� Monomo������ �Ÿ�
    */
    
//     int nReflowjuge=0;
//     for(int nZone=2; nZone<6; nZone++)
@@ -3709,7 +3599,7 @@
    
    nWsiReflowJudge  = pReviewResult->nWsi_ResultCode;
    //nWsiReflowResult += pReviewResult->nWsi_pReflowResultData[0] //A 1占쏙옙 占신곤옙횡占?
    //nWsiReflowResult += pReviewResult->nWsi_pReflowResultData[0] //A
    nWsiReflowResult += pReviewResult->nWsi_pReflowResultData[1];//B
    nWsiReflowResult += pReviewResult->nWsi_pReflowResultData[2];//C
    //nWsiReflowResult += pReviewResult->nWsi_pReflowResultData[3];//D
@@ -3769,7 +3659,6 @@
{
    if(pReviewResult == NULL)    return FALSE;
    //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨모리울옙 占쏙옙占?채占쏙옙 占쌍깍옙
    CDitGlassRawClient *pDitGlassRawClient = CDitGlassRawClient::GetInstance();
    if(pDitGlassRawClient->isConnect() == TRUE)
@@ -3786,13 +3675,13 @@
        pSharedDefectReview->m_nPlanType =  ditRaw::RTP_UserWsi;            
        pSharedDefectReview->m_nWsi_ResultCode=pReviewResult->nWsi_ResultCode; //0:None, 1:Success
        pSharedDefectReview->m_nWsi_Type=nWSIType;                                    // �Ը� / ����
        pSharedDefectReview->m_nWsi_Type=nWSIType;
        pSharedDefectReview->m_fWsi_ResultData[0]= nWSIType;
        pSharedDefectReview->m_fWsi_ResultData[1]=(float)(nWSIheight/100.0);
        pSharedDefectReview->m_fWsi_ResultData[2]=(float)(nWSIWidth/100.0);            // 0:Type, 1:Height, 2:Width
        pSharedDefectReview->m_strWsi_2DImageFilename;
        pSharedDefectReview->m_strWsi_3DImageFilename;
        pSharedDefectReview->m_fWsiManification = 20;//20�� ����
        pSharedDefectReview->m_fWsiManification = 20;
        pSharedDefectReview->m_dWsiMmMotorX=pReviewResult->dTargetMotorX;
        pSharedDefectReview->m_dWsiMmMotorY=pReviewResult->dTargetMotorY;
    }
@@ -3804,7 +3693,6 @@
{
    if (pReviewResult == NULL)    return FALSE;
    //占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙 占쌨모리울옙 占쏙옙占?채占쏙옙 占쌍깍옙
    CDitGlassRawClient *pDitGlassRawClient = CDitGlassRawClient::GetInstance();
    if (pDitGlassRawClient->isConnect() == TRUE)
@@ -3821,13 +3709,13 @@
        pSharedDefectReview->m_nPlanType = ditRaw::RTP_WSI;
        pSharedDefectReview->m_nWsi_ResultCode = pReviewResult->nWsi_ResultCode; //0:None, 1:Success
        pSharedDefectReview->m_nWsi_Type = nWSIType;                                    // �Ը� / ����
        pSharedDefectReview->m_nWsi_Type = nWSIType;
        pSharedDefectReview->m_fWsi_ResultData[0] = nWSIType;
        pSharedDefectReview->m_fWsi_ResultData[1] = (float)(nWSIheight / 100.0);
        pSharedDefectReview->m_fWsi_ResultData[2] = (float)(nWSIWidth / 100.0);            // 0:Type, 1:Height, 2:Width
        pSharedDefectReview->m_strWsi_2DImageFilename;
        pSharedDefectReview->m_strWsi_3DImageFilename;
        pSharedDefectReview->m_fWsiManification = 20;//20�� ����
        pSharedDefectReview->m_fWsiManification = 20;
        pSharedDefectReview->m_dWsiMmMotorX = pReviewResult->dTargetMotorX;
        pSharedDefectReview->m_dWsiMmMotorY = pReviewResult->dTargetMotorY;
@@ -3858,7 +3746,6 @@
    double TempValue = 0;
    double m_nResultFocusValue = 0;
    // ���� XY ���� X+1, Y+1�� ���� ������
    for (int y = 0; y < nHeight - 1; y++)
    {
        for (int x = 0; x < nWidth - 1; x++)
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -51,7 +51,7 @@
#define AOIRAWBIN_NETWORK_DRIVE_PATH    "Y:\\RawBin"
enum CPJT_MeasureMode { CPJT_ModeAuto = 0, CPJT_ModeManual };
// [2017:4:18]-[WEZASW] : WSI Module 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占?PlanType 占쏙옙호 占쏙옙占쏙옙.
// [2017:4:18]-[WEZASW] : WSI Module
enum CPJT_PlanType { CPJT_PlanReview = 0, CPJT_PlanUser, CPJT_PlanWSI, CPJT_PlanMeasure, CPJT_PlanReflow, CPJT_PlanWsiReflow, CPJT_PlanWsiUser,CPJT_PlanWsiMultiShot
};
enum CPJT_InsepectionType{REVIEW_REFLOW = 0, WSI_REFLOW, REV_WSI,WSIUSER, USER,WSIMULTISHOT};
@@ -169,7 +169,7 @@
    CDitGlassRawClient* pDitGlassRaw = CDitGlassRawClient::GetInstance();
    if(pDitGlassRaw->ConnectServer() == FALSE)
    {
        g_pLog->DisplayMessage(_T("�����޸� ���� ����!(Shared memory Access Fail)"));
        g_pLog->DisplayMessage(_T("(Shared memory Access Fail)"));
    }
}
    
@@ -183,17 +183,15 @@
    EnterCriticalSection(&m_csProcessStatus);
    
    BOOL bReturn = FALSE;
    // ���� ���°� ���� ���¿� �ٸ���?
    
    //if (nProcessStatus!=m_nProcessStatus || nProcessStatus==0)
    if (1)//nProcessStatus!=m_nProcessStatus || nProcessStatus==0)
    {
        //if (nProcessStatus==0) // �ʱ�(0) �����̸�..
        //if (nProcessStatus==0)
        //{
        //    bReturn = TRUE;
        //}
        //    else if (nProcessStatus==(m_nProcessStatus+1)) // ���� ���� ����(+1)�̸�..
        //    else if (nProcessStatus==(m_nProcessStatus+1))
        //    {
        //        bReturn = TRUE;
        //    }
@@ -204,9 +202,8 @@
        //    bReturn = FALSE;
        //}
        
        if (bReturn) // �����̸�...
        if (bReturn)
        {
            // Thread ���� �� Thread ����
            CSequenceProcessData* pThreadData = new CSequenceProcessData(this);
            if (pThreadData)
            {
@@ -227,7 +224,6 @@
            }
        }
        else if(nProcessStatus==2){
            // Thread ���� �� Thread ����
            CSequenceProcessData* pThreadData = new CSequenceProcessData(this);
            if (pThreadData)
            {
@@ -277,7 +273,6 @@
    CReviewResult* pWsiResult = pGlassResult->GetWsiResult(nModuleIndex);
    if (pWsiResult==NULL) goto RESULT_FAIL;
    // ������ �ε����� �����´�.
    int nCurResultIdx    = pWsiResult->GetLastSReviewResultIndex() + 1; // last index + 1
    int nStartResultIdx    = pWsiResult->GetStartSReviewResultIndex();
    int nEndResultIdx    = pWsiResult->GetEndSReviewResultIndex();
@@ -291,13 +286,11 @@
    int        nMPosY    = int(pPosition->dMotorPosY * 1000.0);
    double    dTime    = (double) m_ProcessTimer.GetDurationMilliSecond();
    // �ε����� �ٸ��� ��������.
    if (measureResut.nResultIndex != nCurResultIdx) 
    {
        goto RESULT_FAIL;
    }
    // ���� ������ ����.
    // measureResut
    if(pWsiResult->GetSReviewResultCount() == 0) return ;
@@ -324,7 +317,6 @@
    // set last result idx
    pWsiResult->SetLastSReviewResultIndex(nCurResultIdx);
    // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 占쌉곤옙, WSI 占쏙옙占쏙옙占?占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙...
    if(nCurResultIdx==nEndResultIdx && nCurResultIdx<=pWsiResult->GetSReviewResultCount())
    {
        nStartResultIdx = nCurResultIdx + 1;
@@ -335,8 +327,7 @@
        pWsiResult->SetStartSReviewResultIndex(nStartResultIdx);
        pWsiResult->SetEndSReviewResultIndex(nEndResultIdx);
        // ������ ����Ʈ ���� ��������.
        ::Sleep(3000); // 占쏙옙占쏙옙甄占?占십쇽옙占쏙옙. 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙.
        ::Sleep(3000);
//        Process_RemainWsiPoint(nModuleIndex);
    }
@@ -362,7 +353,6 @@
    CReviewResult* pWsiResult = pGlassResult->GetWsiUserResult(nModuleIndex);
    if (pWsiResult==NULL) goto RESULT_FAIL;
    // ������ �ε����� �����´�.
    int nCurResultIdx    = pWsiResult->GetLastSReviewResultIndex() + 1; // last index + 1
    int nStartResultIdx    = pWsiResult->GetStartSReviewResultIndex();
    int nEndResultIdx    = pWsiResult->GetEndSReviewResultIndex();
@@ -376,13 +366,11 @@
    int        nMPosY    = int(pPosition->dMotorPosY * 1000.0);
    double    dTime    = (double) m_ProcessTimer.GetDurationMilliSecond();
    // �ε����� �ٸ��� ��������.
    if (measureResut.nResultIndex != nCurResultIdx) 
    {
        goto RESULT_FAIL;
    }
    // ���� ������ ����.
    // measureResut
    if(pWsiResult->GetSReviewResultCount() == 0) return ;
@@ -407,7 +395,6 @@
    // set last result idx
    pWsiResult->SetLastSReviewResultIndex(nCurResultIdx);
    // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 占쌉곤옙, WSI 占쏙옙占쏙옙占?占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙...
    if(nCurResultIdx==nEndResultIdx && nCurResultIdx<=pWsiResult->GetSReviewResultCount())
    {
        nStartResultIdx = nCurResultIdx + 1;
@@ -418,8 +405,7 @@
        pWsiResult->SetStartSReviewResultIndex(nStartResultIdx);
        pWsiResult->SetEndSReviewResultIndex(nEndResultIdx);
        // ������ ����Ʈ ���� ��������.
        ::Sleep(3000); // 占쏙옙占쏙옙甄占?占십쇽옙占쏙옙. 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙.
        ::Sleep(3000);
        //        Process_RemainWsiPoint(nModuleIndex);
    }
@@ -449,7 +435,6 @@
     CAlignResult *pAlignResult = &pGlassResult->m_AlignResult;
     CAlignRecipe *pAlignRecipe = &pGlassResult->m_AlignRecipe; 
 
     // 占쏙옙占쏙옙占?占쌘듸옙占쏙옙占쏙옙 占쏙옙占?占쏙옙占쏙옙占실울옙 占쏙옙占쏙옙占쏙옙占쏙옙.
     CRsRcpAlignInfo *pRsRcpAlignInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpAlignInfo();
     if (pRsRcpAlignInfo!=NULL && pRsRcpAlignInfo->m_bAutoProcess)
     {
@@ -463,25 +448,21 @@
             pRsRcpAlignInfo->m_dSecondCamExposure = pCurAlignResult->dExposureTime[1];
         }
 
         // ������ ����Ÿ ����
         //m_pDoc->Recipe_WriteRecipeFile();
     }
 
 
     BOOL bLastAlignResult = FALSE;
     CCoordCalibrator *pCoordCalibrator = m_pSP2P->ISP2P_GetCoordCalibrator();
     // 占쏙옙占쏙옙 占쏙옙占쏙옙占?占쏙옙占?.
     if (pCoordCalibrator && pCurAlignResult->nResultCode==Align_Success)
     {
         g_pLog->DisplayMessage(_T("[AlignResult] Align Find Success!"));
 
         // 占쏙옙占쏙옙占?占쏙옙占?占쌜띰옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙
         *pAlignResult = *pCurAlignResult;
 
         pCoordCalibrator->SetFirstMarkPos(pAlignResult->dFindPositionX[0], pAlignResult->dFindPositionY[0], pAlignRecipe->dGlassPositionX[0], pAlignRecipe->dGlassPositionY[0]);
         pCoordCalibrator->SetSecondMarkPos(pAlignResult->dFindPositionX[1], pAlignResult->dFindPositionY[1], pAlignRecipe->dGlassPositionX[1], pAlignRecipe->dGlassPositionY[1]);
 
         // 占쏙옙占쏙옙 占쏙옙占?
         if(pCoordCalibrator->CalculateAlignResult() == TRUE)
         {
             sAlignResult = pCoordCalibrator->GetAlignResult();
@@ -490,38 +471,35 @@
             bLastAlignResult = !pAlignRecipe->bRotateProcess;
         }
 
         // �۶� ���� ���� ����
         CCameraControlAlign *pAlignCameraControl    = m_pSP2P->ISP2P_GetAlignCameraControl();
         SThetaMotorInfo* pThetaMotorInfo            = m_pSP2P->ISP2P_GetThetaMotorInfo();
         CMotorControl* pMotorControl                = m_pSP2P->ISP2P_GetMotorControl();
 
         if (pAlignRecipe->bRotateProcess && pAlignCameraControl && pMotorControl && pThetaMotorInfo)
         {
             if (fabs(sAlignResult.dDegree) <= pAlignRecipe->dGlassAngleMin) // ���� �۶� ������ �ּҰ����� ������ ����
             if (fabs(sAlignResult.dDegree) <= pAlignRecipe->dGlassAngleMin)
             {
                 bLastAlignResult = TRUE;
                 g_pLog->DisplayMessage(_T("[AlignResult] Success! Last Glass Angle : %.8lf degree, Retry Count : %d ea"), 
                     sAlignResult.dDegree,  pCurAlignResult->nFindCount);
             }
             else if (fabs(sAlignResult.dDegree) > pAlignRecipe->dGlassAngleMax) // ���� �۶� ������ �ִ밢���� ũ�� ����
             else if (fabs(sAlignResult.dDegree) > pAlignRecipe->dGlassAngleMax)
             {
                 bLastAlignResult = FALSE;
                 g_pLog->DisplayMessage(_T("[AlignResult] FAIL! Last Glass Angle : %.8lf degree, Retry Count : %d ea"), 
                     sAlignResult.dDegree,  pCurAlignResult->nFindCount);
             }
             else if (pCurAlignResult->nFindCount < pAlignRecipe->nRetryCount) // �纸�� Ƚ���� ������ Ƚ�� �����̸� �纸�� ����
             else if (pCurAlignResult->nFindCount < pAlignRecipe->nRetryCount)
             {
                 g_pLog->DisplayMessage(_T("[AlignResult] Current Glass Angle : %.8lf degree, Retry Count : %d ea"), 
                     sAlignResult.dDegree,  pCurAlignResult->nFindCount);
 
                 // ���ͷ� ���� ����..
                 double dCalAngle = sAlignResult.dDegree;
                 dCalAngle = pThetaMotorInfo->dPosition - dCalAngle ;
                 g_pLog->DisplayMessage(_T("[AlignResult] Move Rotate Glass Angle : %.8lf degree"), dCalAngle);
                 pMotorControl->AxisThetaManualGoEnd(dCalAngle);
                 ::Sleep(100);
 
                 // 占쏙옙占쏙옙占?ReProcess
                 if (pAlignCameraControl->AlignProcess())
                 {
                     g_pLog->DisplayMessage(_T("[AlignResult] Align Find Process ReStarted!"));
@@ -556,8 +534,7 @@
         //m_pView->SetAlignResult(pAlignResult->nResultCode, sAlignResult.dOriginX, sAlignResult.dOriginY, sAlignResult.dDegree);
     }
 
    // PCControl 占쏙옙占쏙옙占?占쏙옙호 占쏙옙占쏙옙.
    if (bLastAlignResult) // ���� ����ΰ��...
    if (bLastAlignResult)
    {    
        SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Success Data!"));
@@ -689,13 +666,10 @@
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
        m_pSP2P->ISP2P_UpdateReviewProcessStatus(ReviewProcessStatus_None, nPlanIndex);
         
        //占쏙옙占쏙옙占?
        AFM_SetAFMTracking(FALSE);
        return;
    }
    //190727 chm WSI 占쏙옙占쏙옙占?End 체크 占쏙옙 占쏙옙占쏙옙
    if(nBeforePlanIndex== CPJT_PlanWSI||nBeforePlanIndex== CPJT_PlanWsiReflow||nBeforePlanIndex== CPJT_PlanWsiUser)
    {
        if(pPlanInfo->m_nReviewType == CPJT_PlanWSI ||pPlanInfo->m_nReviewType == CPJT_PlanWsiReflow||pPlanInfo->m_nReviewType== CPJT_PlanWsiUser || pPlanInfo->m_nReviewType == CPJT_PlanWsiMultiShot)
@@ -724,13 +698,12 @@
        }
    }
    //190727 chm WSI type 占쏙옙占쏙옙占쏙옙 Review 占시뤄옙占쏙옙 占쏙옙占쏙옙占?카占쌨띰옙 占쌜띰옙 占쌜울옙 占쏙옙占쏙옙占쏙옙痢?占쏙옙占쏙옙...
    if(nBeforePlanIndex== CPJT_PlanWSI ||nBeforePlanIndex== CPJT_PlanWsiReflow||nBeforePlanIndex== CPJT_PlanWsiUser)
    {
        if(  pPlanInfo->m_nReviewType == CPJT_PlanReview|| pPlanInfo->m_nReviewType == CPJT_PlanUser|| pPlanInfo->m_nReviewType == CPJT_PlanMeasure|| pPlanInfo->m_nReviewType == CPJT_PlanReflow)
        {
            CTotalPitchMeasure* pTotapPithMeasure = m_pSP2P->ISP2P_GetTotalPitchMeasure(); // 占쏙옙占쏙옙占쏙옙占? 20190730 chm 占쏙옙占쌩울옙 占쌉쇽옙占쏙옙 占쏙옙占쏙옙....
            CTotalPitchMeasure* pTotapPithMeasure = m_pSP2P->ISP2P_GetTotalPitchMeasure();
    
            const CMotorControlInfo* pSystemMotorInfo = m_pSP2P->ISP2P_System_GetMotorInfo();
            if(pSystemMotorInfo !=NULL) 
@@ -774,8 +747,6 @@
        if(pPlanInfo == NULL) continue;
        //210325
        //END 占쏙옙 占쏙옙琯占쏙옙占?占실억옙占쏙옙占쏙옙占쏙옙占?占쌔댐옙 占쌉쇽옙占쏙옙 占쏙옙占쏙옙占쏙옙占?占쏙옙占싣곤옙占쏙옙 占쌍억옙 start 占쌉쇽옙占쏙옙 타占쏙옙占쏙옙
        //�װͿ� ���� ����ó��
        if (GetProcessStatus() == ProcessReviewEnd_CPJT || GetProcessStatus() == ProcessReviewUnloding_CPJT)
        {
            g_pLog->DisplayMessage(_T("[ProcessStop] StartProcessing Sequence Stop Status : %d"), GetProcessStatus());
@@ -830,7 +801,7 @@
                m_pSP2P->ISP2P_DisplayMessage(_T("[Sequence Processor] WSI Plan End!"));
            }
            break;
        //占싱삼옙占?
        case CPJT_PlanMeasure:
            if (( nTotalCount += pGlassResult->GetTotalSMeasureResultCount()) > 0)
            {
@@ -939,8 +910,8 @@
    AllAckSignalOff();
    m_pSP2P->ISP2P_GetReviewProcessor()->ResetGantryDone();
    SetCheckWSIEnd(-1); //190726 wsiendüũ �ʱ�ȭ
    SetWsiType(-1);    //wsi reflow Ÿ�� ���� �ʱ�ȭ
    SetCheckWSIEnd(-1); //190726
    SetWsiType(-1);    //wsi reflow
    SetLastPointCheck(FALSE);
    bFileFind = FALSE;
@@ -970,18 +941,18 @@
     }
     m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Glass Result Count : %d ea"), nGlassResultCount);
    
    pGlassResult->ResetDefocusCount();//�ε� �κп��� defocus count �ʱ�ȭ 190821 chm
    pGlassResult->ResetDefocusCount();
     CTime time = CTime::GetCurrentTime();
     pGlassResult->m_strResultDate.Format(_T("%04d.%02d.%02d"), time.GetYear(), time.GetMonth(), time.GetDay());
    //if(Revolver_SetGoHome(0)) // ������ HOME ������
    //if(Revolver_SetGoHome(0))
    //{
    //    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Revolver Set GoHome Success!"));
    //}
    //#3357 KYH Align Image �ʱ�ȭ ADD START
    //#3357 KYH Align Image ADD START
    CCameraControlAlign* pAlignCameraControl = m_pSP2P->ISP2P_GetAlignCameraControl();
    if (pAlignCameraControl != NULL)
    {
@@ -989,7 +960,7 @@
        g_pLog->DisplayMessage(_T("[Align] Align Image Clear"));
    }
    //#3357 KYH Align Image �ʱ�ȭ ADD END
    //#3357 KYH Align Image ADD END
     // get transfer data
     int nResultCode = 0;
@@ -1016,7 +987,7 @@
            if (pDitRawClient->isConnect()==FALSE)
            {
                m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]�����޸� ���� ���� �翬�� �õ� "));
                m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] DitRawClient Connect Fail "));
                int nReconnect=0;
                while (1)
                {
@@ -1031,11 +1002,11 @@
                    Sleep(1000);
                    if (pDitRawClient->isConnect() == FALSE)
                    {
                        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]�����޸� ���� ���� Count[%d]"), nReconnect);
                        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]DitRawClient Connect Fail Count[%d]"), nReconnect);
                    }
                    else
                    {
                        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]�����޸� ���� ����"));
                        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]DitRawClient Connect Success"));
                        break;
                    }
                    nReconnect += 1;
@@ -1045,9 +1016,9 @@
            }
            // #3381 LYW CF AOI Review ������ FDC TackTime ������ ���� ���� ADD START
            // #3381 LYW CF AOI Review FDC TackTime ADD START
            pDitRawClient->GetGlassData()->m_tmReviewLoading = CTime::GetCurrentTime();
            // #3381 LYW CF AOI Review ������ FDC TackTime ������ ���� ���� ADD END
            // #3381 LYW CF AOI Review FDC TackTime ADD END
            
            CString strGlassIDTemp = NULL;
@@ -1114,7 +1085,7 @@
         }
     }
    //// 190725 占쏙옙占쏙옙占?占쏙옙청占쏙옙占쏙옙 chm ASCEND 占쏙옙 alarm
    //// 190725 chm ASCEND alarm
    const CRsRcpReviewInfo* pRsRcpReviewInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpReviewInfo();
    const CRcpSortingInfo *pSortingInfo = pRsRcpReviewInfo->GetRcpReviewSortInfo();
@@ -1131,7 +1102,7 @@
    
    
    ////������ �������� �ȱ� 190618
    ////190618
    if(GetUseAfmHomePosition())
    {
    g_pLog->DisplayMessage(_T("[AFM] AFM Home Position Start!!!"));
@@ -1140,7 +1111,6 @@
    }
    //占쏙옙占쏙옙占쌨몌옙 커占쏙옙占?占쏙옙占쏙옙 占쏙옙타트(占쌜띰옙 占싸듸옙)
    CDitGlassRawClient* pDitSharedGlassRaw = CDitGlassRawClient::GetInstance();
    if (pDitSharedGlassRaw->isConnect() == FALSE) {
        m_pSP2P->ISP2P_DisplayMessage(_T("[DitGlassRawClient] Shared Memory Connect Fail"));
@@ -1193,7 +1163,7 @@
     CReviewProcessor* pReviewProcessor = m_pSP2P->ISP2P_GetReviewProcessor();
     if(pReviewProcessor == NULL) return ;    
     pReviewProcessor->SetCellData(pGlassResult);
     pReviewProcessor->SetReviewCount(0);            // ���� Sequence No �ʱ�ȭ.
     pReviewProcessor->SetReviewCount(0);
    pReviewProcessor->SetPlanReviewCount(0);
    pReviewProcessor->SetPlanWSICount(0);
     // Process Status Update
@@ -1234,7 +1204,6 @@
    if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_AlignStartAck_CPJT))
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Start Ack!"));
    //Sleep(400);//占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占?占쌍깍옙 chm190602
     // 1. get current glass result
     CGlassResult* pGlassResult = m_pSP2P->ISP2P_GetCurrentGlassResult();
@@ -1258,7 +1227,7 @@
    }
    else
    {
        // 190710 SJB Align Camera Disconnect Check, Align Step ���� ���� Ȯ���Ѵ�.
        // 190710 SJB Align Camera Disconnect Check, Align Step
        if(pAlignCameraControl)
        {
            if(pAlignCameraControl->AlignCameraDisconnectCheck() == FALSE)
@@ -1274,9 +1243,7 @@
        }
        else
        {
            //�����ߵ�
            Sleep(1000);
            //TEST 占쏙옙占?
            {
                SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
                m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align SUCCESS Data!"));
@@ -1284,8 +1251,6 @@
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
        }
            //�ּ� Ǯ��
            // 4. send align fail signal to plc
            //SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
            //m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Fail Data!"));
@@ -1319,15 +1284,14 @@
     if (bFileFind == FALSE)
    {
        SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] 占쏙옙占쏙옙占쏙옙占?찾占쏙옙 占쏙옙占쏙옙"));
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Find Raw File Fail"));
        return;
    }    
    // get current glass result
    CGlassResult* pGlassResult = m_pSP2P->ISP2P_GetCurrentGlassResult();
    if (pGlassResult==NULL) return;
    //占쏙옙占쏙옙占쌨몌옙 커占쏙옙占?占쏙옙占쏙옙 占쏙옙타트(占쌜띰옙 占싸듸옙)
    CDitGlassRawClient* pDitSharedGlassRaw = CDitGlassRawClient::GetInstance();
    if(pDitSharedGlassRaw->isConnect() == FALSE)                m_pSP2P->ISP2P_DisplayMessage(_T("[DitGlassRawClient] Shared Memory Connect Fail"));
@@ -1354,7 +1318,6 @@
        int nTotalPlanCount = CalculatePlanData(pGlassResult);
        m_pSP2P->ISP2P_DisplayMessage(_T("[Read Raw File] Review All Plan Total Count : %d"), nTotalPlanCount);
        //�����ߵ�
        Sleep(1000);
        // send review ready
        SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
@@ -1366,8 +1329,6 @@
        processTimer.End();
        m_pSP2P->ISP2P_DisplayMessage(_T("[ReadRawFile] AOI Result File Read Fail![%.3f ms]"), processTimer.GetDurationMilliSecond());
        //占쌓쏙옙트 占쏙옙占?
        //{
        //            // send review ready
        //    SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
@@ -1375,7 +1336,6 @@
        //            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Review Ready Signal!"));
        //}
        //�ּ� ����
        int nCurPlanIndex = 0;
        CRsRcpReviewInfo* pRsRcpReviewInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpReviewInfo();
        if(pRsRcpReviewInfo)
@@ -1397,8 +1357,6 @@
        }
    }
    //// [2017:5:24]-[WEZASW] : Review Image Upload Dir 占쏙옙占쏙옙.(FTPUploader占쏙옙占쏙옙 占쌘듸옙 占쏙옙占쏙옙 占실댐옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占?占쏙옙占쏙옙)
    //// '占쌥븝옙占싯삼옙'占쏙옙 FTPUploader占쏙옙占쏙옙 占쏙옙占싸듸옙 占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 PCControl Glass Unloading 占쏙옙 占쏙옙占?Loading占쏙옙 Review占쏙옙占쏙옙占쏙옙 占쏙옙占싸듸옙 占쏙옙占?GlassID) 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙
    const CNetworkInfo *pNetworkInfo = m_pSP2P->ISP2P_System_GetNetworkInfo();
    CString strPath = _T("");
    //if(pNetworkInfo && pNetworkInfo->m_strUploadImagePath.IsEmpty() == FALSE)
@@ -1412,8 +1370,6 @@
    CFileFind Uploadfile, RTMSUploadPath;
    if (CDitGlassRawClient::GetInstance()->GetGlassData() == NULL) return;
    //占쏙옙占싸듸옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쌕쏙옙 占쏙옙占싸듸옙 占쏙옙占?Set 20190917chm
    if(Uploadfile.FindFile(strPath)==FALSE)
    {
        CTime tmServerLoadingTime = CDitGlassRawClient::GetInstance()->GetGlassData()->m_tmGlassLoading;
@@ -1421,10 +1377,6 @@
        CreateDirectory(strPath, NULL);
        pReviewProcessor->SetUploadImagePath(strPath);
        //taek 210126 rtms 占쏙옙占쏙옙占?占싱뱄옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙
        CreateDirectory(pReviewProcessor->GetRTMSUploadImagePath(),NULL);
    }
@@ -1470,10 +1422,10 @@
    //            _grmCellData* pCellData = pDitRawClient->GetCellData(0);
    //            if(pCellData) 
    //            {
    //            //    pCellData->m_nTotalPitchData[0] = int(pTotapPithMeasure->GetTotalPitchBD() * 1000); // ����, �۾��� ���� ����
    //            //    pCellData->m_nTotalPitchData[1] = int(pTotapPithMeasure->GetTotalPitchAC() * 1000); // ����, �۾��� ���� �Ʒ���
    //            //    pCellData->m_nTotalPitchData[2] = int(pTotapPithMeasure->GetTotalPitchAB() * 1000); // ����, �۾��� ���� ����
    //            //    pCellData->m_nTotalPitchData[3] = int(pTotapPithMeasure->GetTotalPitchCD() * 1000); // ����, �۾��� ���� ������
    //            //    pCellData->m_nTotalPitchData[0] = int(pTotapPithMeasure->GetTotalPitchBD() * 1000);
    //            //    pCellData->m_nTotalPitchData[1] = int(pTotapPithMeasure->GetTotalPitchAC() * 1000);
    //            //    pCellData->m_nTotalPitchData[2] = int(pTotapPithMeasure->GetTotalPitchAB() * 1000);
    //            //    pCellData->m_nTotalPitchData[3] = int(pTotapPithMeasure->GetTotalPitchCD() * 1000);
    //            }
    //        }
    //    }
@@ -1481,7 +1433,6 @@
    //    {
    //        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor] TotalPitchMeasure Result Fail!"));
    //        // 190711 SJB, TotalPitchMeasure Fail占시울옙 占쌕뤄옙 Motor占쏙옙 占쏙옙占쏙옙占?占쏙옙占쏙옙占쏙옙 占쏙옙占쌕댐옙 Motion Enable 占쏙옙호占쏙옙 확占쏙옙占쏙옙占쏙옙
    //        
    //        if(!pTotapPithMeasure->GetMotorEnable())
    //        {
@@ -1513,9 +1464,8 @@
    }
    else
    {
        //�����ߵ�
        //Sleep(1000);
        //Test占쏙옙占?
        //SendResultToSignalControl(PCControlSendData_ReviewComplete_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
        //SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
        //m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
@@ -1555,10 +1505,7 @@
    }
    
    m_pDitGlassRaw->GetGlassData()->m_nReviewNum = m_pSP2P->ISP2P_GetReviewProcessor()->GetPlanReviewCount();
    //SendDVDataToSignalControl();// �Ⱦ���
    //OverTime 占쌩삼옙占쏙옙 占쏙옙占쏘에占쏙옙 END ACK占쏙옙 占쏙옙摸占쏙옙째占?占싣니띰옙 占쏙옙 Conplete占쏙옙 占쏙옙摸占쏙옙占?
    //�� ... ����  �����ε��ϴ� �߰�
    //SendDVDataToSignalControl();
    if (GetLastPointCheck() == FALSE)
    {
@@ -1585,10 +1532,8 @@
        m_pSP2P->ISP2P_GetWSIControl(0)->SendWsiAfmSafePosMove();
        m_pSP2P->ISP2P_GetWSIControl(1)->SendWsiAfmSafePosMove();
    }
    // 占쏙옙占쏙옙占쏙옙占?占쏙옙占쏙옙占쏙옙 Review占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙
    if(m_pDitGlassRaw->isConnect()==FALSE)        WriteRawData(pGlassResult);
    
    //����Ŀ�� �˶� send 20190819chm
    if(pGlassResult->m_nDeFocusCount >0) 
    {
        SendSignalToSignalControl(PCControlSendSignalIndex_State,PCControlSend_Defoucs,1000);
@@ -1598,8 +1543,8 @@
        CString strTime = _T("");
        strTime.Format(_T("%04d-%02d-%02d %02d:%02d:%02d"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond());
        CDlgDefocusList::GetInstance()->SetDefocusTotalCount(pGlassResult->m_nDeFocusCount);//��Ż ī��Ʈ Add
        CDlgDefocusList::GetInstance()->SetDefocusData(strTime,pGlassResult->m_strGlassID,pGlassResult->m_nDeFocusCount);//ui �߰��� ����
        CDlgDefocusList::GetInstance()->SetDefocusTotalCount(pGlassResult->m_nDeFocusCount);
        CDlgDefocusList::GetInstance()->SetDefocusData(strTime,pGlassResult->m_strGlassID,pGlassResult->m_nDeFocusCount);
    }
@@ -1613,17 +1558,17 @@
    g_pLog->DisplayMessage(_T("History Button Enable"));
    m_pSP2P->ISP2P_GetDiagnosisHistory2();
    /*int nModuleCount = m_pSP2P->ISP2P_GetModuleStatusCount(); //0503 占쏙옙占쏙옙 End占쏙옙 占쏙옙占쏙옙占?0占쏙옙占쏙옙 占십깍옙화
    /*int nModuleCount = m_pSP2P->ISP2P_GetModuleStatusCount();
    for (int nModuleIdx = 0; nModuleIdx < nModuleCount; nModuleIdx++)
    {
        {
            ReviewLight_SetLightLevel(nModuleIdx, 0);
            g_pLog->DisplayMessage(_T("Module[%d] LightLevel �ʱ�ȭ"), nModuleIdx);
            g_pLog->DisplayMessage(_T("Module[%d] LightLevel"), nModuleIdx);
        }
    }*/
    //5. PCControl ��ȣ ������Ʈ
    //5. PCControl
    if (pGlassResult)
    {
        m_pSP2P->ISP2P_UpdateProcessStatus(GetProcessStatus(), pGlassResult);
@@ -1665,8 +1610,8 @@
    CString strCode = _T("");
    int nDefectCount = pRawData->GetGlassData()->m_nDefectNum; // ���尹��
    int nJudgeCount = pRcpReviewInfo->GetRcpZoneFilterInfoCount();// ���� ����
    int nDefectCount = pRawData->GetGlassData()->m_nDefectNum;
    int nJudgeCount = pRcpReviewInfo->GetRcpZoneFilterInfoCount();
    int nFilterType = 0;
    int nJudgeType = 0;
    int nZoneNumber = 0;
@@ -1680,7 +1625,7 @@
    int nJudgeCellOKCount = 0;
    int nPixelSize = 0;
    int nPixelFilterSize = 0;
    //���� ������
    //1 wsi, 3 CS, 4 R, 5 G, 6 B
    //pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_fWsi_ResultData[1];//Defect
    //pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_fWsi_ResultData[3];//cs
@@ -1694,10 +1639,10 @@
        {
#pragma region 占쏙옙占쏙옙占?fail
#pragma region Align fail
            if (m_pSP2P->ISP2P_GetCurrentGlassResult()->GetAlignResult()->nResultCode != Align_Success)
            {
                m_pSP2P->ISP2P_DisplayMessage(_T("[TEST Process::ReviewEnd] 占쏙옙占쏙옙占?占쏙옙占쏙옙 WSI 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙"));
                m_pSP2P->ISP2P_DisplayMessage(_T("[TEST Process::ReviewEnd] Align Fail WSI Rejudge Cancel"));
                break;
            }
#pragma endregion
@@ -1735,7 +1680,7 @@
            
            if (nPixelFilterSize <= nPixelSize && nPixelFilterSize != 0)
            {
                m_pSP2P->ISP2P_DisplayMessage(_T("[ReviewEnd] ������ ���͸� Pixel Size[%d] nPixelFilterSize [%d]"), nPixelSize,nPixelFilterSize);
                m_pSP2P->ISP2P_DisplayMessage(_T("[ReviewEnd] Size filtering Pixel Size[%d] nPixelFilterSize [%d]"), nPixelSize,nPixelFilterSize);
                continue;    
            }
#pragma endregion
@@ -1745,13 +1690,13 @@
            for (int nJudgeindex = 0; nJudgeindex < nJudgeCount; nJudgeindex++)
            {
                //nZoneType = GetZoneType();
                dJudgeHight = pRcpReviewInfo->GetRcpZoneFilteringInfo(nJudgeindex)->GetJudgeHeight(); //����
                dJudgeHight = pRcpReviewInfo->GetRcpZoneFilteringInfo(nJudgeindex)->GetJudgeHeight();
                nFilterType = pRcpReviewInfo->GetRcpZoneFilteringInfo(nJudgeindex)->m_nFilterType; //ZONE
                nJudge = pRcpReviewInfo->GetRcpZoneFilteringInfo(nJudgeindex)->m_nFilterJudge; //OK TR
                //nZoneNumber = pRcpReviewInfo->GetRcpZoneInfo(nFilterType)->m_vecZoneNumber[0];
                
                if (pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_nWsi_Type == 2) // 210330 kyh����
                if (pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_nWsi_Type == 2) // 210330 kyh
                {
                    BOOL isZoneValue = FALSE;
@@ -1764,7 +1709,7 @@
                        }
                        else
                        {
                            m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] Zone[%d], DefectIndex[%d]"), nZoneNumber, pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh �α� �߰�
                            m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] Zone[%d], DefectIndex[%d]"), nZoneNumber, pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh
                            isZoneValue = TRUE;
                            //break;
@@ -1773,7 +1718,7 @@
                    if (isZoneValue == FALSE)
                    {
                        m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] NoFail DefectIndex[%d]"), pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh �α� �߰�
                        m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] NoFail DefectIndex[%d]"), pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh
                        continue;
                    }
@@ -1823,13 +1768,13 @@
                        }
                    }
                    else if (fWsiData<=0) // 0���� ���� ������ ������ ���Ѵ�.
                    else if (fWsiData<=0)
                    {
                        m_pSP2P->ISP2P_DisplayMessage(_T("[TEST Process::ReviewEnd] WSI TYPE[%d] WSI ����[%0.3lf] <= 0 ���� ���� ����"), nJudgeType, fWsiData);
                        m_pSP2P->ISP2P_DisplayMessage(_T("[TEST Process::ReviewEnd] WSI TYPE[%d] WSI Height[%0.3lf] <= 0 Cancel Rejudge"), nJudgeType, fWsiData);
                    }
                    else
                    {
                        //20210419 TR 占쏙옙占쏙옙占쏙옙占쏙옙 Judge 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占?OK 占쏙옙占쏙옙
                        //20210419 TR
                        //if (nJudge == 1)//TR -> OK
                        //{
                            if (pRawData->GetDefectData(nDefectIdx)->m_DefectJudgement == DEFECT_JUDGE_CPJT_OK || pRawData->GetDefectData(nDefectIdx)->m_DefectJudgement == DEFECT_JUDGE_CPJT_Unknown)
@@ -1880,7 +1825,7 @@
                }
                else //WSI TYPE �� �ƴϸ�
                else //WSI TYPE
                {
                    continue;
                }
@@ -1894,13 +1839,13 @@
            for (int nJudgeindex = 0; nJudgeindex < nJudgeCount; nJudgeindex++)
            {
                //nZoneType = GetZoneType();
                dJudgeHight = pRcpReviewInfo->GetRcpZoneFilteringInfo_PR(nJudgeindex)->GetJudgeHeight(); //����
                dJudgeHight = pRcpReviewInfo->GetRcpZoneFilteringInfo_PR(nJudgeindex)->GetJudgeHeight();
                nFilterType = pRcpReviewInfo->GetRcpZoneFilteringInfo_PR(nJudgeindex)->m_nFilterType; //ZONE
                nJudge = pRcpReviewInfo->GetRcpZoneFilteringInfo_PR(nJudgeindex)->m_nFilterJudge; //OK TR
                //nZoneNumber = pRcpReviewInfo->GetRcpZoneInfo(nFilterType)->m_vecZoneNumber[0];
                if (pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_nWsi_Type == 2) // 210330 kyh����
                if (pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_nWsi_Type == 2) // 210330
                {
                    BOOL isZoneValue = FALSE;
@@ -1913,7 +1858,7 @@
                        }
                        else
                        {
                            m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] Zone[%d], DefectIndex[%d]"), nZoneNumber, pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh �α� �߰�
                            m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] Zone[%d], DefectIndex[%d]"), nZoneNumber, pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh
                            isZoneValue = TRUE;
                            //break;
@@ -1922,7 +1867,7 @@
                    if (isZoneValue == FALSE)
                    {
                        m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] NoFail DefectIndex[%d]"), pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh �α� �߰�
                        m_pSP2P->ISP2P_DisplayMessage(_T("[WSIZoneCheck] NoFail DefectIndex[%d]"), pRawData->GetDefectData(nDefectIdx)->m_nDefectIdx); //210330 kyh
                        continue;
                    }
@@ -1976,7 +1921,6 @@
                    }
                    else
                    {
                        //20210419 TR 占쏙옙占쏙옙占쏙옙占쏙옙 Judge 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占?OK 占쏙옙占쏙옙
                        //if (nJudge == 1)//TR -> OK
                        //{
                        if (pRawData->GetDefectData(nDefectIdx)->m_DefectJudgement == DEFECT_JUDGE_CPJT_OK || pRawData->GetDefectData(nDefectIdx)->m_DefectJudgement == DEFECT_JUDGE_CPJT_Unknown)
@@ -2028,7 +1972,7 @@
                }
                else //WSI TYPE �� �ƴϸ�
                else //WSI TYPE
                {
                    continue;
                }
@@ -2043,7 +1987,7 @@
                
                strCode =pRcpReviewInfo->GetRcpZoneFilteringInfo_CODE(nJudgeindex)->m_FilterCode;
                if (pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_nWsi_Type == 2) // 210330 kyh����
                if (pRawData->GetDefectData(nDefectIdx)->m_ReviewDefect.m_nWsi_Type == 2) // 210330
                {
                    nJudgeType = ReJugdeWSIType(nFilterType);
@@ -2096,7 +2040,7 @@
                        m_pSP2P->ISP2P_DisplayMessage(_T("[TEST Process::ReviewEnd] CODE JUDGE WSI TYPE[%d] Defect CODE [%s] != [%s]"), nJudgeType, strCode, pRawData->GetDefectData(nDefectIdx)->m_strDefectCode);
                    }
                }
                else //WSI TYPE �� �ƴϸ�
                else //WSI TYPE
                {
                    continue;
                }
@@ -2107,7 +2051,6 @@
        }
        
#pragma region CELLJUDGE
    //CELL ������////////////////////////////////////////////////////////////////
    int nCellCount = pRawData->GetGlassData()->m_nCellNum;
@@ -2126,7 +2069,7 @@
        else if (pRawData->GetCellData(nCellIndex)->m_nJudgement == Judge_OK_CPJT)
        {
            nCelllOKJuge = nCelllOKJuge + 1;
        } //taek 21.01.25 Juge ���ϴ� ���� ���Ӱ� �ٲ���...
        } //taek 21.01.25
        else if (pRawData->GetCellData(nCellIndex)->m_nJudgement == Judge_PR_CPJT)
        {
            nCelllPRJuge = nCelllPRJuge + 1;
@@ -2170,7 +2113,7 @@
                }
                else
                {
                    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] ī��Ʈ ������ ������ [%02d]Cell DefectTRCount[%d] >= [%d]"), nCellIndex, pRawData->GetCellData(nCellIndex)->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetJudgeCount());
                    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Count Number is minus! [%02d]Cell DefectTRCount[%d] >= [%d]"), nCellIndex, pRawData->GetCellData(nCellIndex)->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetJudgeCount());
                }
                break;
            case JudgeType_T8_PR:
@@ -2220,7 +2163,7 @@
                }
                else
                {
                    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] ī��Ʈ ������ ������ [%02d]Cell DefectTRCount[%d] <= [%d]"), nCellIndex, pRawData->GetCellData(nCellIndex)->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetSubJudgeCount());
                    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Count Number is minus! [%02d]Cell DefectTRCount[%d] <= [%d]"), nCellIndex, pRawData->GetCellData(nCellIndex)->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetSubJudgeCount());
                }
                break;
            case JudgeType_T8_PR:
@@ -2384,7 +2327,7 @@
    }
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] CELL COUNT OK:[%d] TR[%d] PR[%d]"), nCelllOKJuge, nCellTRJudge, nCelllPRJuge);
#pragma endregion
    //GLASS ������////////////////////////////////////////////////////////////////
#pragma region GLASSJUDGE
    CRsRcpReviewInfo* pRsRcpReviewInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpReviewInfo();
    if (pRsRcpReviewInfo == NULL) return FALSE;
@@ -2432,7 +2375,7 @@
            }
            else
            {
                m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] TR ī��Ʈ�� ������ [%02d]GLASS Defect TR Count[%d] >= [%d]"), nIdx, pRawData->GetGlassData()->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetJudgeCount());
                m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] TR Count is minus [%02d]GLASS Defect TR Count[%d] >= [%d]"), nIdx, pRawData->GetGlassData()->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetJudgeCount());
            }
            break;
        case JudgeType_T8_PR:
@@ -2482,7 +2425,7 @@
            }
            else
            {
                m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd]TRī��Ʈ�� ������ [%02d]GLASS Defect TR Count[%d] <= [%d]"), nIdx, pRawData->GetGlassData()->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetSubJudgeCount());
                m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd]TR Count is minus [%02d]GLASS Defect TR Count[%d] <= [%d]"), nIdx, pRawData->GetGlassData()->m_nDefectNumJudgeTR, pRcpJudgeInfo->GetSubJudgeCount());
            }
            break;
        case JudgeType_T8_PR:
@@ -2670,7 +2613,7 @@
        CakFileUtil akFileFinder;
        while (nReTryTime--)
        {
            //#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER �˶� �߻� ���� �м� START
            //#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER START
            if (nReTryTime%2 == 0)
            {
                strFilePath = AOIRAWBIN_PATH;
@@ -2679,9 +2622,9 @@
            strWild.Format("%s\\%s_*.bin", strFilePath, strFileName);
             akFileFinder.FindFile(strWild.GetBuffer(0), FALSE);
            //LYW LOG�߰�
            //LYW LOG
            g_pLog->DisplayMessage(_T("[GlassLoading][FindRawBinFile] Find Path = %s, RetryCount = %d, ResultCode = [%d]"), strFilePath, 30-nReTryTime, GetLastError());
            //#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER �˶� �߻� ���� �м� END
            //#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER END
            VECFINDDATA* pFindData = akFileFinder.getFindData();
            int nFileNamePos = strlen(akFileFinder.getProcessPath());
            std::map<LONGLONG, CString> mapSpanFileName;
@@ -2693,7 +2636,7 @@
                    parser.process(pFileName, "_.");
                    if (parser.getTokNum() < 4) continue;
                    
                    if (parser.getTokNum() >= 6) continue; // 0401 �߰�
                    if (parser.getTokNum() >= 6) continue; // 0401
                    int nDataTime[8] = {};
                    {
@@ -2721,7 +2664,6 @@
            {
                if (mapSpanFileName.begin()->first < nCloseTime)
                {
                    //占쏙옙占쏙옙 占쌍깍옙 占쏙옙占쏙옙占쏙옙占?찾占쏙옙 占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2019/7/17]
                    strFindFile = mapSpanFileName.begin()->second;
                    break;
                }
@@ -2781,7 +2723,7 @@
    int nPCControlReadDataCount = pSignalInfo->GetReadDataAddressCount();
    // [2017:1:9]-[WEZASW] : PCControl GlassData �׸� ������.
    // [2017:1:9]-[WEZASW] : PCControl GlassData
    if(pSignalInfo->GetUseContinuousReadAddress())
    {
        CString strReadAddress = _T("");
@@ -3160,11 +3102,11 @@
void CSequenceProcessor_CPJT::UpdateGlassResultFromTransferData(CGlassResult *pGlassResult, STransferData* pTransferData)
{
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Transfer Data �б�!"));
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Transfer Data Read!"));
    if (pGlassResult==NULL || pTransferData==NULL) return;
    // [2017:1:9]-[WEZASW] : PCControl GlassData �׸� ������
    // [2017:1:9]-[WEZASW] : PCControl GlassData
    // transfer data is not exist
    if (pTransferData->strLotID.GetLength()<1)
    {
@@ -3233,10 +3175,10 @@
    pGlassResult->m_strPairFlag = pTransferData->strPairFlag;
    pGlassResult->m_strOptionValue = pTransferData->strOptionValue;
    pGlassResult->m_strReserved = pTransferData->strReserved;
    pGlassResult->strGlassScanSchedule = pTransferData->strGlassScanSchedule;//���� ���� cmark
    pGlassResult->strGlassScanSchedule = pTransferData->strGlassScanSchedule;//cmark
    pGlassResult->m_strRTMSStepID = pTransferData->strStepID; //taek 210126
    
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Transfer Data ��!"));
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Transfer Data END!"));
}
void CSequenceProcessor_CPJT::UpdateHistoryResultFromTransferData(CGlassResult *pHistoryResult, CGlassResult* pGlassResult)
@@ -3294,7 +3236,7 @@
    pHistoryResult->m_strPairFlag = pGlassResult->m_strPairFlag;
    pHistoryResult->m_strOptionValue = pGlassResult->m_strOptionValue;
    pHistoryResult->m_strReserved = pGlassResult->m_strReserved;
    pHistoryResult->strGlassScanSchedule = pGlassResult->strGlassScanSchedule;//���� ���� cmark
    pHistoryResult->strGlassScanSchedule = pGlassResult->strGlassScanSchedule;// cmark
    pHistoryResult->m_strStepID = pGlassResult->m_strRTMSStepID; //taek 210126
    pHistoryResult->m_strEquipID = pGlassResult->m_strEquipID;
    pHistoryResult->m_strProcessID = pGlassResult->m_strProcessID;
@@ -3306,7 +3248,7 @@
void CSequenceProcessor_CPJT::CreateResultDirectory(const CString& strGlassID, const CString& strDate)
{
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 占쏙옙占썰리 占쏙옙占쏙옙占?占쏙옙占쏙옙"));
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Make Directory Start"));
    if (m_pSP2P==NULL) return;
    const CNetworkInfo *pNetworkInfo = m_pSP2P->ISP2P_System_GetNetworkInfo();
@@ -3352,7 +3294,7 @@
        strPath.Format(_T("%s\\%s"),pNetworkInfo->m_strAlignImagePath, strGlassID);
        CreateDirectory(strPath, NULL);
    }
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 占쏙옙占썰리 占쏙옙占쏙옙占?占쏙옙"));
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Make directory End"));
}
@@ -3360,7 +3302,7 @@
void CSequenceProcessor_CPJT::SetSaveImageBasePathToReviewProcessor(const CString& strGlassID, const CString& strResultDate)
{
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 占싱뱄옙占쏙옙 占싻쏙옙 占쏙옙占쏙옙占?占쏙옙占쏙옙"));
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Make image path start"));
    const CNetworkInfo *pNetworkInfo = m_pSP2P->ISP2P_System_GetNetworkInfo();
    if(pNetworkInfo == NULL) return;
@@ -3405,11 +3347,11 @@
                Sleep(1000);
                if (CDitGlassRawClient::GetInstance()->isConnect() == FALSE)
                {
                    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]�����޸� ���� ���� Count[%d]"), nReconnect);
                    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]access Shared Memory Fail!! Count[%d]"), nReconnect);
                }
                else
                {
                    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]�����޸� ���� ����"));
                    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading]access Shared Memory Success"));
                    break;
                }
                nReconnect += 1;
@@ -3432,7 +3374,7 @@
        else
        {
            tmServerLoadingTime = CTime::GetCurrentTime();
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] �����޸� �����̻�"));
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] access Shared Memory Fail"));
            strPath.Format(_T("%s\\%s_%04d%02d%02d%02d%02d%02d"), pNetworkInfo->m_strUploadImagePath, strGlassID, tmServerLoadingTime.GetYear(), tmServerLoadingTime.GetMonth(), tmServerLoadingTime.GetDay(), tmServerLoadingTime.GetHour(), tmServerLoadingTime.GetMinute(), tmServerLoadingTime.GetSecond());
            strImagePath.Format(_T("%s\\%s_%04d%02d%02d%02d%02d%02d"), strGlassID, tmServerLoadingTime.GetYear(), tmServerLoadingTime.GetMonth(), tmServerLoadingTime.GetDay(), tmServerLoadingTime.GetHour(), tmServerLoadingTime.GetMinute(), tmServerLoadingTime.GetSecond());
            CreateDirectory(strPath, NULL);
@@ -3441,12 +3383,12 @@
        }
    }
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 占싱뱄옙占쏙옙 占싻쏙옙 占쏙옙占쏙옙占?占쏙옙"));
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Make image path End"));
}
void CSequenceProcessor_CPJT::SetSaveImageBasePathToAlignCameraControl(const CString& strGlassID)
{
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 占쏙옙占쏙옙占?占싱뱄옙占쏙옙 占싻쏙옙 占쏙옙占쏙옙 "));
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading]  Make Align image path Start"));
    const CNetworkInfo *pNetworkInfo = m_pSP2P->ISP2P_System_GetNetworkInfo();
    if(pNetworkInfo == NULL) return;
@@ -3459,7 +3401,7 @@
        strPath.Format(_T("%s\\%s"), pNetworkInfo->m_strAlignImagePath, strGlassID);
        pAlignCameraControl->SetSaveImageBasePath(strPath);
    }
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] 占쏙옙占쏙옙占?占싱뱄옙占쏙옙 占싻쏙옙 占쏙옙 "));
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Make Align image path End "));
}
BOOL CSequenceProcessor_CPJT::ReadRecipeDataFromRecipeFile(const CString& strPPID_RC, CString& strRecipeName)// const CString& strPPID, CString& strRecipeName
@@ -3526,14 +3468,12 @@
{
    if(pGlassResult == NULL) return FALSE;
    // ������ ����
    const CRsRcpReviewInfo* pRsRcpReviewInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpReviewInfo();
    if (pRsRcpReviewInfo==NULL) return FALSE;
    // system info
    const CSystemInfo* pSystemInfo = m_pSP2P->ISP2P_System_GetSystemInfo();
    // �۶� ����
    STransferData* pTransferData = m_pSP2P->ISP2P_GetCurrentTransferData();
    if (pTransferData==NULL) return FALSE;
    int nGlassTypeInfoIndex = 0;
@@ -3549,20 +3489,16 @@
    if (pGlassTypeInfo == NULL) return FALSE;
    m_pSP2P->ISP2P_DisplayMessage(_T("GlassTypeName : %s,GlassTypeIdx : %s"),pGlassTypeInfo->m_strGlassTypeName,pTransferData->strGlassScanSchedule);
    
    // ���� ����
    const CMotorControlInfo *pMotorInfo = m_pSP2P->ISP2P_System_GetMotorInfo();
    // ��ǥ ��ȯ��
    CCoordCalibrator* pCoordCalibrator = m_pSP2P->ISP2P_GetCoordCalibrator();
    // ��ǥ�� ����
    if (pSystemInfo && pGlassTypeInfo && pMotorInfo && pCoordCalibrator)
    {
        // Get Direction        
        int nDirectionX = GetDirectionX(pGlassTypeInfo->m_nOriginDirection, pMotorInfo->GetOriginDirection());
        int nDirectionY = GetDirectionY(pGlassTypeInfo->m_nOriginDirection, pMotorInfo->GetOriginDirection());
        // ��ǥ�� ����
        pCoordCalibrator->SetTransDirection(nDirectionX, nDirectionY);
        pCoordCalibrator->SetOriginMotorPosition(pGlassTypeInfo->m_dOriginMotorX, pGlassTypeInfo->m_dOriginMotorY);
        if (fabs(pGlassTypeInfo->m_dAlignAngle) > 0.0000001)
@@ -3571,7 +3507,6 @@
                pGlassTypeInfo->m_dFirstAlignGlassX, pGlassTypeInfo->m_dFirstAlignGlassY, pGlassTypeInfo->m_dAlignAngle);
        }
        // �۶� ���� ����
        pGlassResult->SetGlassSize(pGlassTypeInfo->m_nGlassSizeX * 1000, pGlassTypeInfo->m_nGlassSizeY * 1000);
        pGlassResult->SetGlassOriginDirection(pGlassTypeInfo->m_nOriginDirection);
        pGlassResult->SetCornerCutDirection(pGlassTypeInfo->m_nCornerCutDirection);
@@ -3580,34 +3515,28 @@
        pGlassResult->SetCollisionDistanceX(int(pSystemInfo->m_dCollisionDistance*1000.));
    }
    // Align ����
    const CRsRcpAlignInfo* pRsRcpAlignInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpAlignInfo();
    // Align ���� ����
    if (pGlassTypeInfo && pRsRcpAlignInfo)
    {
        // Align ��ũ ���� ���� (�ȼ�, ����, �۶� ��ġ)
        pGlassResult->m_AlignRecipe.m_nUseAlignPosMove        = pGlassTypeInfo->m_nUseAlignPosMove;
        // �ȼ� ��ġ
        pGlassResult->m_AlignRecipe.dOriginPixelX[0]        = pGlassTypeInfo->m_nFirstAlignFindPixelX;
        pGlassResult->m_AlignRecipe.dOriginPixelY[0]        = pGlassTypeInfo->m_nFirstAlignFindPixelY;
        pGlassResult->m_AlignRecipe.dOriginPixelX[1]        = pGlassTypeInfo->m_nSecondAlignFindPixelX;
        pGlassResult->m_AlignRecipe.dOriginPixelY[1]        = pGlassTypeInfo->m_nSecondAlignFindPixelY;
        // ���� ��ġ
        pGlassResult->m_AlignRecipe.dOriginPositionX[0]        = pGlassTypeInfo->m_dFirstAlignMotorX;
        pGlassResult->m_AlignRecipe.dOriginPositionY[0]        = pGlassTypeInfo->m_dFirstAlignMotorY;
        pGlassResult->m_AlignRecipe.dOriginPositionX[1]        = pGlassTypeInfo->m_dSecondAlignMotorX;
        pGlassResult->m_AlignRecipe.dOriginPositionY[1]        = pGlassTypeInfo->m_dSecondAlignMotorY;
        // �۶� ��ġ
        pGlassResult->m_AlignRecipe.dGlassPositionX[0]        = pGlassTypeInfo->m_dFirstAlignGlassX;
        pGlassResult->m_AlignRecipe.dGlassPositionY[0]        = pGlassTypeInfo->m_dFirstAlignGlassY;
        pGlassResult->m_AlignRecipe.dGlassPositionX[1]        = pGlassTypeInfo->m_dSecondAlignGlassX;
        pGlassResult->m_AlignRecipe.dGlassPositionY[1]        = pGlassTypeInfo->m_dSecondAlignGlassY;
        // Align Recipe 占쏙옙占쏙옙 占쏙옙占쏙옙 占쌘듸옙占쏙옙占쏙옙 찾占쏙옙 占식띰옙占쏙옙占?
        // Align Recipe
        // Align Skip Mode
        pGlassResult->m_AlignRecipe.bAlignSkipMode        = pRsRcpAlignInfo->m_bAlignSkipMode;
        pGlassResult->m_AlignRecipe.bUseTotalPitchMeasure = pRsRcpAlignInfo->m_bTotalPitchMeasure;
@@ -3627,29 +3556,24 @@
        pGlassResult->m_AlignRecipe.nMergeRange            = pRsRcpAlignInfo->m_nMergeRange;
        pGlassResult->m_AlignRecipe.dEdgeRate            = pRsRcpAlignInfo->m_dEdgeRate;
        
        // 占쏙옙占쏙옙챨占?
        pGlassResult->m_AlignRecipe.bManualProcess            = pRsRcpAlignInfo->m_bManualProcess;
        pGlassResult->m_AlignRecipe.dFirstCamExposure        = pRsRcpAlignInfo->m_dFirstCamExposure;
        pGlassResult->m_AlignRecipe.dSecondCamExposure        = pRsRcpAlignInfo->m_dSecondCamExposure;
        // �ڵ����� ����
        pGlassResult->m_AlignRecipe.bAutoProcess            = pRsRcpAlignInfo->m_bAutoProcess;
        pGlassResult->m_AlignRecipe.dTargetMin                = pRsRcpAlignInfo->m_dTargetMin;
        pGlassResult->m_AlignRecipe.dTargetMax                = pRsRcpAlignInfo->m_dTargetMax;
        pGlassResult->m_AlignRecipe.dExposureMin            = pRsRcpAlignInfo->m_dExposureMin;
        pGlassResult->m_AlignRecipe.dExposureMax            = pRsRcpAlignInfo->m_dExposureMax;
        // Align Recipe ���� ���� rotate info
        pGlassResult->m_AlignRecipe.bRotateProcess            = pRsRcpAlignInfo->m_bRotateProcess;
        pGlassResult->m_AlignRecipe.nRetryCount                = pRsRcpAlignInfo->m_nRetryCount;
        pGlassResult->m_AlignRecipe.dGlassAngleMin            = pRsRcpAlignInfo->m_dGlassAngleMin;
        pGlassResult->m_AlignRecipe.dGlassAngleMax            = pRsRcpAlignInfo->m_dGlassAngleMax;
        // Align ī�޶� ���� �� �ػ� ����
        int nAlignCameraInfoCount = 2;
        for(int nAlignCameraIdx = 0; nAlignCameraIdx < nAlignCameraInfoCount; nAlignCameraIdx++)
        {
            // Align ���� �� ��������.
            int nLightValue = 0;
            
            
@@ -3657,10 +3581,8 @@
            {
                nLightValue = (nAlignCameraIdx==0) ? (int)pRsRcpAlignInfo->m_dFirstCamExposure: (int)pRsRcpAlignInfo->m_dSecondCamExposure;
                // 占쏙옙占쏙옙占?카占쌨띰옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙
                const CAlignCameraInfo *pCameraInfo = m_pSP2P->ISP2P_System_GetAlignCameraInfo(nAlignCameraIdx);
                 //占쏙옙占쏙옙占?占쏙옙占쏙옙.
                CLightControl *pLightControl = NULL;
                const CLightControlInfo *AlignLightinfo = pCameraInfo->GetLightContorlInfo();
@@ -3669,8 +3591,6 @@
                {
                    if (AlignLightinfo->GetMaster()==1&& nAlignCameraIdx==1)
                    {
                        //占쏙옙占쏙옙占?占쏙옙틀占싼뤄옙占쏙옙 占싹놂옙占쏙옙 占쏙옙占쏙옙퓸占?占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占싸뤄옙 확占쏙옙
                        //������ �̰� �´��� �𸣰ٴ� �ƹ��� �Ⱦ˷���
                        pLightControl = m_pSP2P->ISP2P_GetAlignLightControl(0);
                    }
@@ -3704,8 +3624,6 @@
                }
            }
            
            // 占쏙옙占쏙옙占?카占쌨띰옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙
            const CAlignCameraInfo *pCameraInfo    = m_pSP2P->ISP2P_System_GetAlignCameraInfo(nAlignCameraIdx);
            if (pCameraInfo)
            {
@@ -3733,7 +3651,6 @@
                }
            }
            // 占쏙옙占쏙옙占?占쏙옙占시몌옙 占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙占쏙옙
            if((int)pGlassTypeInfo->m_vecTemplateImagePath.size() == nAlignCameraInfoCount)
            {
                pGlassResult->m_AlignRecipe.strTemplateName[nAlignCameraIdx] = pGlassTypeInfo->m_vecTemplateImagePath[nAlignCameraIdx];
@@ -3762,14 +3679,13 @@
            if (pRcpReviewAFMInfo)
            {
                int nRealAFMIndex = pRcpReviewAFMInfo->m_nRecipeIndex;
                if(nRealAFMIndex == -1)// �����ǿ� ���õ� ������ ���� MagnificInfo Index�� �˾ƿ�
                if(nRealAFMIndex == -1)
                {
                    //-1占쏙옙 占쏙옙占?占쏙옙占쏙옙 占싸듸옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙.
                    nRealAFMIndex = GetRealMagnification(nModuleIdx, pRcpReviewAFMInfo->m_nZoomIndex);
                }
                AFM_SetAFMRecipeName(nModuleIdx, strRecipeName, nRealAFMIndex);
                if(pRcpReviewAFMInfo->m_bAFMHomeOffMode==TRUE) //190618AFMȨ ������ ���� X
                if(pRcpReviewAFMInfo->m_bAFMHomeOffMode==TRUE) //190618AFM
                {
                    SetUseAfmHomePosition(FALSE);
                }
@@ -3781,7 +3697,6 @@
        }
    }
    // ���� ã�� ������ ����
    CReviewProcessor* pReviewProcessor = m_pSP2P->ISP2P_GetReviewProcessor();
    const CRsRcpDefectFindInfo* pRsRcpDefectFindInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpDefectFindInfo();
    if(pReviewProcessor && pRsRcpDefectFindInfo)
@@ -3832,7 +3747,6 @@
    CString strRawTDPath=_T(""), strRawCDPath=_T(""), strRawSDPath=_T("");
    // 占쏙옙占쏙옙占쏙옙占?占싱몌옙 찾占쏙옙
    FindAOIRawFilePath(pGlassResult, &strRawTDPath, &strRawCDPath, &strRawSDPath);
    bRet = m_pSP2P->ISP2P_ReadAOIRawFileToGlassResult(strRawTDPath);
@@ -3886,7 +3800,7 @@
        if(finder.IsDots()) continue;
        if(finder.IsDirectory()) continue;
        // [2017:5:16]-[WEZASW] : AOI Server占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙치占쏙옙 占쏙옙占쌉몌옙 占싱뱄옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙占?占쏙옙占쏙옙 占쏙옙占싹몌옙 占쏙옙占쏙옙
        // [2017:5:16]-[WEZASW] : AOI Server
        sRawFile.strFileName = finder.GetFileName();
        strExtTemp = sRawFile.strFileName;
        int nIdx = strExtTemp.Remove('.');        
@@ -4064,7 +3978,6 @@
        CModuleStatus*                    pModuleStatus    = Module_GetModuleStatus(nModuleIdx);        
        if (pModuleStatus == NULL) continue;
        //�浹�Ÿ� �ֱ�
        {
        double dCollisionPosX = pReviewResult->GetCollisionPositionX() / 1000.0;
@@ -4105,13 +4018,12 @@
        }
        //�¿� ��Ʈ�� �����̵�
        pMotorControl->GantrySetTwoGantrySyncModeSend(0);
        // set result index
        int nStartIdx = pReviewResult->GetStartSReviewResultIndex();
        int nEndIdx = pReviewResult->GetEndSReviewResultIndex();
        nEndIdx = min(nEndIdx, (pReviewResult->GetSReviewResultCount()-1)) + 1;        // End Index �ٽü���
        nEndIdx = min(nEndIdx, (pReviewResult->GetSReviewResultCount()-1)) + 1;        // End Index
        double xpostemp, ypostemp;
        // get review pos
@@ -4121,7 +4033,7 @@
            SReviewResult* pReview = pReviewResult->GetSReviewResult(nResultIdx);
            if (pReview==NULL) continue;
            //200占쏙옙 占쏙옙藥뱄옙占쏙옙占?占쏙옙占쏙옙占쏙옙 占싹뤄옙占쏙옙占쏙옙占쏙옙占?占쌩븝옙체크
            //200
            if (pReview->bCheckSendToMotor == FALSE)
            {
                pReview->bCheckSendToMotor = TRUE;
@@ -4168,7 +4080,6 @@
            }
        }
        //���� ����Ʈ�� �ִ��� ������ üũ
        if (vectorPosX.empty() ==TRUE)
        {
            g_pLog->DisplayMessage(_T("[GantryAutoGo] No Exist Send Point "), vectorPosX.size());
@@ -4200,13 +4111,11 @@
            int nTickCount = GetTickCount();
            while (1)
            {
                //5�� ����Ÿ��
                if ((GetTickCount() - nTickCount) > 5000)
                {
                    bOverTime = TRUE;
                    break;
                }
                //占쏙옙占쏙옙 占쏙옙占?End 체크
                if (pMotorControl->IsGantryMotionEnd(pModuleStatus->GetGantryIndex()) == TRUE)
                {
                    if (pMotorControl->GantryAutoGo(pModuleStatus->GetGantryIndex(), vectorPosX, vectorPosY, TRUE))
@@ -4225,15 +4134,12 @@
            }
            //5占쏙옙占식울옙占쏙옙 占싫울옙占쏙옙占싸댐옙? 占쌓뤄옙 3占쏙옙 占쏙옙천占?占쏙옙占쏙옙
            //���End �� �߸� ���ü��� ������
            if (bOverTime == TRUE)
            {
                for (int i = 0; i < 3; i++)
                {
                    Sleep(1000);
                    //���Ͱ� �����ϼ� ���»����϶� Send ��ȣ�� Fail �߻� ���� Retry 3�� ����
                    if (pMotorControl->GantryAutoGo(pModuleStatus->GetGantryIndex(), vectorPosX, vectorPosY, TRUE))
                    {
                        nTotalCount += (int)vectorPosX.size();
@@ -4307,7 +4213,7 @@
    if(pGlassResult && pReviewProcessor)
    {
        // UserStart
        pReviewProcessor->SetJobID(pGlassResult->m_strJobID);    //pGlassResult->m_strGlassID -> pGlassResult->m_strJobID ����
        pReviewProcessor->SetJobID(pGlassResult->m_strJobID);    //pGlassResult->m_strGlassID -> pGlassResult->m_strJobID
        pReviewProcessor->SetOperID(pGlassResult->m_strOperID);
        m_pSP2P->ISP2P_UpdateReviewProcessStatus(ReviewProcessStatus_UserStart, nPlanIndex);
@@ -4370,7 +4276,6 @@
        CModuleStatus*                    pModuleStatus = Module_GetModuleStatus(nModuleIdx);
        if (pModuleStatus == NULL) continue;
        //�浹�Ÿ� �ֱ�
        {
            double dCollisionPosX = pReviewResult->GetCollisionPositionX() / 1000.0;
@@ -4413,9 +4318,9 @@
        // set result index
        int nStartIdx = pReviewResult->GetStartSReviewResultIndex();
        int nEndIdx = pReviewResult->GetEndSReviewResultIndex();
        nEndIdx = min(nEndIdx, (pReviewResult->GetSReviewResultCount() - 1)) + 1;        // End Index �ٽü���
        nEndIdx = min(nEndIdx, (pReviewResult->GetSReviewResultCount() - 1)) + 1;        // End Index
        // [2017:3:8]-[WEZASW] : CameraOffset ���� ���� (-1~1 => -5~5)
        // [2017:3:8]-[WEZASW] : CameraOffset (-1~1 => -5~5)
        double m_dMinOffset = -5.0;
        double m_dMaxOffset = 5.0;
        double xpostemp, ypostemp;
@@ -4426,7 +4331,7 @@
            SReviewResult* pReview = pReviewResult->GetSReviewResult(nResultIdx);
            if (pReview == NULL) continue;
            //200占쏙옙 占쏙옙藥뱄옙占쏙옙占?占쏙옙占쏙옙占쏙옙 占싹뤄옙占쏙옙占쏙옙占쏙옙占?占쌩븝옙체크
            //200
            if (pReview->bCheckSendToMotor == FALSE)
            {
                pReview->bCheckSendToMotor = TRUE;
@@ -4474,7 +4379,6 @@
            }
        }
        //���� ����Ʈ�� �ִ��� ������ üũ
        if (vectorPosX.empty() == TRUE)
        {
            g_pLog->DisplayMessage(_T("[GantryAutoGo] No Exist Send Point "), vectorPosX.size());
@@ -4539,7 +4443,7 @@
    if(pGlassResult && pReviewProcessor)
    {
        // WsiStart
        pReviewProcessor->SetJobID(pGlassResult->m_strJobID);    // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID ����
        pReviewProcessor->SetJobID(pGlassResult->m_strJobID);    // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID
        pReviewProcessor->SetOperID(pGlassResult->m_strOperID);
        m_pSP2P->ISP2P_UpdateReviewProcessStatus(ReviewProcessStatus_WSIStart, nPlanIndex);
@@ -4552,7 +4456,7 @@
        MakeWSIUpLoadDirectory(pReviewProcessor->GetUploadImagePath());
        //20190219 chm 
        pReviewProcessor->SetReviewCount(0);            // ���� Sequence No �ʱ�ȭ.
        pReviewProcessor->SetReviewCount(0);
        return TRUE;
    }    
@@ -4565,7 +4469,7 @@
    strPath  = strPath + _T("\\WSI");
    if(CreateDirectory(strPath,NULL)==FALSE)
    {
        //LYW LOG�߰�
        //LYW LOG
        g_pLog->DisplayMessage(_T("[MakeWSIUpLoadDirectory]Directory Create Fail %s, ERROR CODE = %d "),strPath, GetLastError());
    }
    
@@ -4606,7 +4510,7 @@
    VectorDouble vectorCollisionPosX;
    vectorCollisionPosX.clear();
    //WSI �¿� ��Ʈ�� �����̵�
    //WSI
    pMotorControl->GantrySetTwoGantrySyncModeSend(1);
    
    // WSI result count
@@ -4619,7 +4523,6 @@
        CModuleStatus*                    pModuleStatus = Module_GetModuleStatus(nModuleIdx);
        if (pModuleStatus == NULL) continue;
        //�浹�Ÿ� �ֱ�
        {
            double dCollisionPosX = pWsiResult->GetCollisionPositionX() / 1000.0;
            double dCollisionPosY = 0.0;
@@ -4660,7 +4563,7 @@
        int nEndIdx = pWsiResult->GetEndSReviewResultIndex();
        nEndIdx = min(nEndIdx, (pWsiResult->GetSReviewResultCount() - 1)) + 1;        // set End Index 
        // [2017:3:8]-[WEZASW] : CameraOffset ���� ���� (-1~1 => -5~5)
        // [2017:3:8]-[WEZASW] : CameraOffset (-1~1 => -5~5)
        double m_dMinOffset = -5.0;
        double m_dMaxOffset = 5.0;
@@ -4672,7 +4575,7 @@
            SReviewResult* pWsi = pWsiResult->GetSReviewResult(nResultIdx);
            if (pWsi == NULL) continue;
            //200占쏙옙 占쏙옙藥뱄옙占쏙옙占?占쏙옙占쏙옙占쏙옙 占싹뤄옙占쏙옙占쏙옙占쏙옙占?占쌩븝옙체크
            //200
            if (pWsi->bCheckWSISendToMotor == FALSE)
            {
                pWsi->bCheckWSISendToMotor = TRUE;
@@ -4719,14 +4622,13 @@
            }
        }
        //���� ����Ʈ�� �ִ��� ������ üũ
        if (vectorPosX.empty() == TRUE)
        {
            //3360 LYW_ CF AOI QD Review WSI XY MotorMoving Error �˶� �߻� ���� �м� �� ��ġ START
            //3360 LYW_ CF AOI QD Review WSI XY MotorMoving Error START
            g_pLog->DisplayMessage(_T("[GantryAutoGo] No Exist Send Point,TwoGantrySyncMode OFF!"), vectorPosX.size());
            g_pLog->DisplayMessage(_T("[GantryAutoGo] (%d)Gantry Path Send Fail"), pModuleStatus->GetGantryIndex()); //taek 210128
            pMotorControl->GantrySetTwoGantrySyncModeSend(0);
            //3360 LYW_ CF AOI QD Review WSI XY MotorMoving Error �˶� �߻� ���� �м� �� ��ġ END
            //3360 LYW_ CF AOI QD Review WSI XY MotorMoving Error END
        }
        else
        {
@@ -4750,13 +4652,12 @@
                int nTickCount = GetTickCount();
                while (1)
                {
                    //5�� ����Ÿ��
                    if ((GetTickCount() - nTickCount) > 5000)
                    {
                        bOverTime = TRUE;
                        break;
                    }
                    //占쏙옙占쏙옙 占쏙옙占?End 체크
                    //End üũ
                    if (pMotorControl->IsGantryMotionEnd(pModuleStatus->GetGantryIndex()) == TRUE)
                    {
                        if (pMotorControl->GantryAutoGo(pModuleStatus->GetGantryIndex(), vectorPosX, vectorPosY, TRUE))
@@ -4775,15 +4676,12 @@
                }
                //5占쏙옙占식울옙占쏙옙 占싫울옙占쏙옙占싸댐옙? 占쌓뤄옙 3占쏙옙 占쏙옙천占?占쏙옙占쏙옙
                //���End �� �߸� ���ü��� ������
                if (bOverTime == TRUE)
                {
                    for (int i = 0; i < 3; i++)
                    {
                        Sleep(1000);
                        //���Ͱ� �����ϼ� ���»����϶� Send ��ȣ�� Fail �߻� ���� Retry 3�� ����
                        if (pMotorControl->GantryAutoGo(pModuleStatus->GetGantryIndex(), vectorPosX, vectorPosY, TRUE))
                        {
                            nTotalCount += (int)vectorPosX.size();
@@ -4918,9 +4816,9 @@
        // get result index
        int nStartIdx = pReviewResult->GetStartSReviewResultIndex();
        int nEndIdx = pReviewResult->GetEndSReviewResultIndex();
        nEndIdx = min(nEndIdx, (pReviewResult->GetSReviewResultCount()-1)) + 1;        // End Index �ٽü���
        nEndIdx = min(nEndIdx, (pReviewResult->GetSReviewResultCount()-1)) + 1;        // End Index
        // [2017:3:8]-[WEZASW] : CameraOffset ���� ���� (-1~1 => -5~5)
        // [2017:3:8]-[WEZASW] : CameraOffset (-1~1 => -5~5)
        double m_dMinOffset = -5.0; 
        double m_dMaxOffset = 5.0;
@@ -5022,7 +4920,7 @@
    if(pGlassResult && pReviewProcessor)
    {
        // MeasureStart
        pReviewProcessor->SetJobID(pGlassResult->m_strJobID);    // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID ����
        pReviewProcessor->SetJobID(pGlassResult->m_strJobID);    // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID
        pReviewProcessor->SetOperID(pGlassResult->m_strOperID);
        m_pSP2P->ISP2P_UpdateReviewProcessStatus(ReviewProcessStatus_MeasureStart, nPlanIndex);
@@ -5097,7 +4995,7 @@
                const SCoordInfo* pCoordInfo = Module_GetCoordInfo(nModuleIdx);
                if(pCoordInfo == NULL) continue;    
                // [2017:3:8]-[WEZASW] : CameraOffset ���� ���� (-1~1 => -5~5)
                // [2017:3:8]-[WEZASW] : CameraOffset (-1~1 => -5~5)
                double m_dMinOffset = -5.0; 
                double m_dMaxOffset = 5.0;
@@ -5203,7 +5101,6 @@
    int nTotalCount = 0;
    double dDefectPosX, dDefectPosY;
    // Module�� ��ġ�� ���� ModuleStatus sorting
    std::vector<CModuleStatus*> SortedModuleStatus;
    for(int nModuleIdx = 0; nModuleIdx < m_pSP2P->ISP2P_GetModuleStatusCount(); nModuleIdx++)
    {
@@ -5257,7 +5154,7 @@
                const SCoordInfo* pCoordInfo = Module_GetCoordInfo(pReviewResult->GetModuleIndex());
                if(pCoordInfo == NULL) continue;                
                // [2017:3:8]-[WEZASW] : CameraOffset ���� ���� (-1~1 => -5~5)
                // [2017:3:8]-[WEZASW] : CameraOffset (-1~1 => -5~5)
                double m_dMinOffset = -5.0; 
                double m_dMaxOffset = 5.0;
@@ -5278,7 +5175,6 @@
                if(nHeaderIdx == 0)
                {
                    // �̵��� ������ǥ �߰�
                    if((int)vectorPos.size() < MAX_MOTOR_ADDRESS_SIZE)
                    {
                        pSReviewResult->dTargetMotorX = dDefectPosX;
@@ -6545,8 +6441,6 @@
            // add user schedule result
            
            //占쏙옙占쏙옙占쌨모리울옙 채占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙표占쏙옙 占쏙옙占쏙옙체占쏙옙 채占쏙옙占쌍댐옙 占쏙옙占?
            {
@@ -7261,7 +7155,6 @@
                break;
            }
            break;
        // 占싱삼옙占?
        case CPJT_PlanMeasure:
            {
                const CRcpMeasureInfo *pRcpMeasureInfo = pRsRcpMeasureInfo->GetRcpMeasureInfo(0);
@@ -7394,7 +7287,7 @@
}
//CIM DV Data
BOOL CSequenceProcessor_CPJT::SendDVDataToSignalControl() // ����
BOOL CSequenceProcessor_CPJT::SendDVDataToSignalControl()
{
    CGlassResult *pGlassResult = m_pSP2P->ISP2P_GetCurrentGlassResult();
    if (pGlassResult==NULL) return FALSE;
@@ -7419,7 +7312,7 @@
}
int CSequenceProcessor_CPJT::MakeDVData(CGlassResult *pGlassResult, char* pDVData, int nIndex) // ����
int CSequenceProcessor_CPJT::MakeDVData(CGlassResult *pGlassResult, char* pDVData, int nIndex)
{
    g_pLog->DisplayMessage(_T("[SequenceProcessor] SendDVDataToSignalControl->MakeDVData IN."));
@@ -7428,16 +7321,16 @@
    const CRsRcpReviewInfo* pRsRcpReviewInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpReviewInfo();
    if (pRsRcpReviewInfo == NULL) return FALSE;
    // Review ���� ����
    // Review
    const CRcpLightInfo *pReviewLightInfo = pRsRcpReviewInfo->GetRcpLightInfo(nIndex);
    // Review AFM ����
    // Review AFM
    const CRcpAFMRecipeInfo *pReviewAFMInfo = pRsRcpReviewInfo->GetRcpAFMRecipeInfo(nIndex);
    // Review Align Info
    const CAlignResult*    pAlignResult = pGlassResult->GetAlignResult();
    // Review Defect Info
    const CReviewResult* pReviewResult = pGlassResult->GetReviewResult(nIndex);
    // Review ���� ����
    // Review
    const CModuleStatus* pModuleStatus = Module_GetModuleStatus(nIndex);
    const SMagnificInfo* pSMagnificInfo = pModuleStatus->GetMagnificInfo(pReviewAFMInfo->GetZoomIndex());
    CSignalControl* pSignalControl = m_pSP2P->ISP2P_GetSignalControl();
@@ -7459,12 +7352,12 @@
    // Write DVData Packet
    //_DVDataPack_B7_8ver DVDataPack;
    //**Review
    //INLINE  : 10��
    //TFE-OFF : 20��
    //Hcut : 50��
    //LAMI : 5��
    //INLINE  : 10
    //TFE-OFF : 20
    //Hcut : 50
    //LAMI : 5
    //**WSI
    //10�� ����
    //10
    ///////////////////////////////////////////////////////////////////////////
@@ -7511,8 +7404,8 @@
    //nAlignResult = 1;
    
    //nAlignResult00 = pAlignResult->nFindAlign[0] * 1000;//����
    //nAlignResult01 = pAlignResult->nFindAlign[1] * 1000;//����
    //nAlignResult00 = pAlignResult->nFindAlign[0] * 1000;
    //nAlignResult01 = pAlignResult->nFindAlign[1] * 1000;
    //nAlignResult00 = pAlignResult->dFindScore[0];
    //nAlignResult01 = pAlignResult->dFindScore[1];
@@ -7530,7 +7423,6 @@
        nAlignResult01 = 0;
    }
    //�Ŀ�?
    nReviewAliveCamera00 = ReviewCamera_GetReviewCameraControl(0)->GetConnected() * 1000;
    nReviewAliveCamera01 = ReviewCamera_GetReviewCameraControl(1)->GetConnected() * 1000;
@@ -7547,8 +7439,7 @@
    {
        wsprintf(DriveText, TEXT("%C:"), Drive);
        UINT type = GetDriveType(DriveText);
        if ((dwDrive & dwDriveCh) && (type == DRIVE_REMOVABLE || type == DRIVE_FIXED || type == DRIVE_RAMDISK)) {
            // 占싹듸옙酉?
        if ((dwDrive & dwDriveCh) && (type == DRIVE_REMOVABLE || type == DRIVE_FIXED || type == DRIVE_RAMDISK)) {
            ULARGE_INTEGER i64FreeBytesToCaller = { 0 }, i64TotalBytes = { 0 }, i64FreeBytes = { 0 };
            BOOL bRsult = GetDiskFreeSpaceEx(DriveText, (PULARGE_INTEGER)&i64FreeBytesToCaller, (PULARGE_INTEGER)&i64TotalBytes, (PULARGE_INTEGER)&i64FreeBytes);
            if (bRsult) {
@@ -7762,7 +7653,7 @@
    pSignalControl->WritePacketData(_T("15100"), sizeof(DVDataPack_CPJT), (short*)&DVData);*/
}
//#3358 KYH FDC ������ ���� ���� ���� ADD START
//#3358 KYH FDC ADD START
void CSequenceProcessor_CPJT::MakeDVData2()
{
@@ -7775,9 +7666,9 @@
    }
    else
    {
    // Review ���� ����
    // Review
        pReviewLightInfo = pRsRcpReviewInfo->GetRcpLightInfo(0);
    // Review AFM ����
    // Review AFM
        pReviewAFMInfo = pRsRcpReviewInfo->GetRcpAFMRecipeInfo(0);
    }
@@ -7801,7 +7692,7 @@
    // Review ���� ����
    // Review
    const CModuleStatus* pModuleStatus = Module_GetModuleStatus(0);
    const SMagnificInfo* pSMagnificInfo = NULL;
    if (pModuleStatus == NULL)
@@ -7903,8 +7794,8 @@
    //nAlignResult = 1;
    //nAlignResult00 = pAlignResult->nFindAlign[0] * 1000;//����
    //nAlignResult01 = pAlignResult->nFindAlign[1] * 1000;//����
    //nAlignResult00 = pAlignResult->nFindAlign[0] * 1000;
    //nAlignResult01 = pAlignResult->nFindAlign[1] * 1000;
    //nAlignResult00 = pAlignResult->dFindScore[0];
    //nAlignResult01 = pAlignResult->dFindScore[1];
@@ -7944,7 +7835,6 @@
        nAlignResult01 = 1000;
    }
    //�Ŀ�?
    if (ReviewCamera_GetReviewCameraControl(0) != NULL)
    {
        nReviewAliveCamera00 = ReviewCamera_GetReviewCameraControl(0)->GetConnected() * 1000;
@@ -7976,8 +7866,7 @@
    {
        wsprintf(DriveText, TEXT("%C:"), Drive);
        UINT type = GetDriveType(DriveText);
        if ((dwDrive & dwDriveCh) && (type == DRIVE_REMOVABLE || type == DRIVE_FIXED || type == DRIVE_RAMDISK)) {
            // 占싹듸옙酉?
        if ((dwDrive & dwDriveCh) && (type == DRIVE_REMOVABLE || type == DRIVE_FIXED || type == DRIVE_RAMDISK)) {
            ULARGE_INTEGER i64FreeBytesToCaller = { 0 }, i64TotalBytes = { 0 }, i64FreeBytes = { 0 };
            BOOL bRsult = GetDiskFreeSpaceEx(DriveText, (PULARGE_INTEGER)&i64FreeBytesToCaller, (PULARGE_INTEGER)&i64TotalBytes, (PULARGE_INTEGER)&i64FreeBytes);
            if (bRsult) {
@@ -8024,7 +7913,7 @@
    return;
}
//#3358 KYH FDC ������ ���� ���� ���� ADD END
//#3358 KYH FDC  ADD END
DWORD CSequenceProcessor_CPJT::GetDiskUsage()
{
@@ -8062,7 +7951,7 @@
    BOOL bResult = FALSE;
    // PCControl D2300 (�˻� ����)
    // PCControl D2300
    switch(nSignalIndex)
    {
    case PCControlRecv_TimeChange:
@@ -8128,7 +8017,7 @@
         g_pLog->DisplayMessage(_T("[SequenceProcessor] Success! SetLocalTime(), Current: %04d-%02d-%02d %02d-%02d-%02d, Changed: %04d-%02d-%02d %02d-%02d-%02d"), 
            CurrentTime.wYear, CurrentTime.wMonth, CurrentTime.wDay, CurrentTime.wHour, CurrentTime.wMinute, CurrentTime.wSecond,
            ChangedTime.wYear, ChangedTime.wMonth, ChangedTime.wDay, ChangedTime.wHour, ChangedTime.wMinute, ChangedTime.wSecond);
        // AFM & WSI TIME ����ȭ
        // AFM & WSI TIME
        SendSystemTime(ChangedTime);
    } else {
         g_pLog->DisplayMessage(_T("[SequenceProcessor] Fail! SetLocalTime()"));
@@ -8155,7 +8044,7 @@
    return TRUE;
}
// Local System ���� �ð��� ���� ��û ��Ʈ�ѷ��� �ð��� ó�� ����
// Local System
BOOL CSequenceProcessor_CPJT::SendSystemTime(SYSTEMTIME sysTime)
{
    SYSTEMTIME CurrentTime;
@@ -8302,7 +8191,7 @@
            case PCControlSend_Defoucs:
                m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Send] Defoucs! => %d"),0);
                break;
            case PCControlSend_Diagnosis: // 0412 �ڰ����� ��ȣ �߰�
            case PCControlSend_Diagnosis: // 0412
                m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Send] Diagnosis! => %d"), 0);
                break;
            }
@@ -8413,7 +8302,7 @@
            case PCControlSend_Defoucs:
                m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Send] Defoucs! => %d"),0);
                break;
            case PCControlSend_Diagnosis: // 0412 �ڰ����� ��ȣ �߰�
            case PCControlSend_Diagnosis: // 0412
                m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Send] Diagnosis! => %d"), 0);
                break;
            }
@@ -8527,7 +8416,7 @@
            if (bResult==FALSE) m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Mode] Manual Mode Error!"));
            // lmk simul manual camera,motor stop
            //ReviewCamera_CameraControl(CameraControlStop);    // ���� ���߸� ī�޶� �ڵ� ��ž
            //ReviewCamera_CameraControl(CameraControlStop);
            CMotorControl*  pMotorControl = m_pSP2P->ISP2P_GetMotorControl();
            if(pMotorControl)
                pMotorControl->CommonSetAutoStop();
@@ -8698,10 +8587,10 @@
            if (SetLocalTime(&sTime))
            {
                m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Signal] �ð�����ȭ���� %s"), strtime);
                m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Signal] TymeSync Success %s"), strtime);
            }
            else
                m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Signal] �ð�����ȭ���� %s"), strtime);
                m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Signal] TymeSync Fail %s"), strtime);
            //memcpy(&time, strTime, 2);
@@ -8930,7 +8819,6 @@
    CReviewResult* pWsiMultiShotResult = pGlassResult->GetWsiMultiShotResult(nModuleIndex);
    if (pWsiMultiShotResult == NULL) goto RESULT_FAIL;
    // ������ �ε����� �����´�.
    int nCurResultIdx = pWsiMultiShotResult->GetLastSReviewResultIndex() + 1; // last index + 1
    int nStartResultIdx = pWsiMultiShotResult->GetStartSReviewResultIndex();
    int nEndResultIdx = pWsiMultiShotResult->GetEndSReviewResultIndex();
@@ -8944,13 +8832,11 @@
    int        nMPosY = int(pPosition->dMotorPosY * 1000.0);
    double    dTime = (double)m_ProcessTimer.GetDurationMilliSecond();
    // �ε����� �ٸ��� ��������.
    if (measureResut.nResultIndex != nCurResultIdx)
    {
        goto RESULT_FAIL;
    }
    // ���� ������ ����.
    // measureResut
    if (pWsiMultiShotResult->GetSReviewResultCount() == 0) return;
@@ -8975,7 +8861,6 @@
    // set last result idx
    pWsiMultiShotResult->SetLastSReviewResultIndex(nCurResultIdx);
    // 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙트占쏙옙占쏙옙 占쌉곤옙, WSI 占쏙옙占쏙옙占?占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙...
    if (nCurResultIdx == nEndResultIdx && nCurResultIdx <= pWsiMultiShotResult->GetSReviewResultCount())
    {
        nStartResultIdx = nCurResultIdx + 1;
@@ -8986,8 +8871,7 @@
        pWsiMultiShotResult->SetStartSReviewResultIndex(nStartResultIdx);
        pWsiMultiShotResult->SetEndSReviewResultIndex(nEndResultIdx);
        // ������ ����Ʈ ���� ��������.
        ::Sleep(3000); // 占쏙옙占쏙옙甄占?占십쇽옙占쏙옙. 占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙.
        ::Sleep(3000);
    //    Process_RemainWsiPoint(nModuleIndex);
    }
@@ -9053,7 +8937,7 @@
    if(pGlassResult && pReviewProcessor)
    {
        // WsiStart
        pReviewProcessor->SetJobID(pGlassResult->m_strJobID);    // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID ����
        pReviewProcessor->SetJobID(pGlassResult->m_strJobID);    // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID
        pReviewProcessor->SetOperID(pGlassResult->m_strOperID);
        m_pSP2P->ISP2P_UpdateReviewProcessStatus(ReviewProcessStatus_WSIReflowStart, nPlanIndex);
@@ -9089,7 +8973,7 @@
    if(pGlassResult && pReviewProcessor)
    {
        // WsiStart
        pReviewProcessor->SetJobID(pGlassResult->m_strJobID);    // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID ����
        pReviewProcessor->SetJobID(pGlassResult->m_strJobID);    // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID
        pReviewProcessor->SetOperID(pGlassResult->m_strOperID);
        m_pSP2P->ISP2P_UpdateReviewProcessStatus(ReviewProcessStatus_WSIStart, nPlanIndex);
@@ -9116,7 +9000,6 @@
    WSIAllReadySignal(1);
    // send wsi start
    // ���� ����
    if (!WSIMultiShotAllStartSignal())
    {
        g_pLog->DisplayMessage(_T("[WSI] WSI MultiShot Start Fail!!"));
@@ -9127,7 +9010,7 @@
    if (pGlassResult && pReviewProcessor)
    {
        // WsiStart
        pReviewProcessor->SetJobID(pGlassResult->m_strJobID);    // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID ����
        pReviewProcessor->SetJobID(pGlassResult->m_strJobID);    // pGlassResult->m_strGlassID -> pGlassResult->m_strJobID
        pReviewProcessor->SetOperID(pGlassResult->m_strOperID);
        m_pSP2P->ISP2P_UpdateReviewProcessStatus(ReviewProcessStatus_WSIMultiShotStart, nPlanIndex);
@@ -9190,7 +9073,7 @@
        int nEndIdx = pWsiResult->GetEndSReviewResultIndex();
        nEndIdx = min(nEndIdx, (pWsiResult->GetSReviewResultCount()-1)) + 1;        // set End Index 
        // [2017:3:8]-[WEZASW] : CameraOffset ���� ���� (-1~1 => -5~5)
        // [2017:3:8]-[WEZASW] : CameraOffset (-1~1 => -5~5)
        double m_dMinOffset = -5.0; 
        double m_dMaxOffset = 5.0;
@@ -9320,7 +9203,6 @@
        CModuleStatus*                    pModuleStatus    = Module_GetModuleStatus(nModuleIdx);        
        if (pModuleStatus == NULL) continue;
        //�浹�Ÿ� �ֱ�
        {
            double dCollisionPosX = pWsiUserResult->GetCollisionPositionX() / 1000.0;
            double dCollisionPosY = 0.0;
@@ -9363,7 +9245,7 @@
        int nEndIdx = pWsiUserResult->GetEndSReviewResultIndex();
        nEndIdx = min(nEndIdx, (pWsiUserResult->GetSReviewResultCount()-1)) + 1;        // set End Index 
        // [2017:3:8]-[WEZASW] : CameraOffset ���� ���� (-1~1 => -5~5)
        // [2017:3:8]-[WEZASW] : CameraOffset (-1~1 => -5~5)
        double m_dMinOffset = -5.0; 
        double m_dMaxOffset = 5.0;
@@ -9466,17 +9348,13 @@
            }
        
        }
        //������ ����
        pWsiMultiShotResult->GetVectorSReviewResult()->clear();
        int nResultCount = 0;
        if (m_vecSReviewResult.size()>0)
        {    
            //占쏙옙占쏙옙占쌕몌옙 占쏙옙占쏙옙 占쏙옙占?占쏙옙占쏙옙占쏙옙占쏙옙킷占?占쏙옙 占쏙옙占쏙옙殮占?占쏙옙占쏙옙
            for(int i=0; i< m_vecSReviewResult.size(); i++)
            {
                //������ ���ÿ� ���� ���� �Է��ؾߵ� �װ͸�ŭ ������!
                //������ WSI FOV 4���� ���ؿ��� ����
            {
                double dOringinX = m_vecSReviewResult[i].nUMOriginX;
                double dOringinY = m_vecSReviewResult[i].nUMOriginY;
@@ -9745,8 +9623,6 @@
        CModuleStatus*                    pModuleStatus = Module_GetModuleStatus(nModuleIdx);
        if (pModuleStatus == NULL) continue;
        //�浹�Ÿ� �ֱ�
        {
            double dCollisionPosX = pWsiMultiShotResult->GetCollisionPositionX() / 1000.0;
@@ -9774,7 +9650,7 @@
            int nEndIdx = pWsiMultiShotResult->GetEndSReviewResultIndex();
            nEndIdx = min(nEndIdx, (pWsiMultiShotResult->GetSReviewResultCount() - 1)) + 1;        // set End Index 
            // [2017:3:8]-[WEZASW] : CameraOffset ���� ���� (-1~1 => -5~5)
            // [2017:3:8]-[WEZASW] : CameraOffset (-1~1 => -5~5)
            double m_dMinOffset = -5.0;
            double m_dMaxOffset = 5.0;
@@ -10215,7 +10091,7 @@
    CRsRcpReviewInfo* pRsRcpReviewInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpReviewInfo();
    if(pRsRcpReviewInfo == NULL)    return FALSE;
    if(pRsRcpReviewInfo->GetRcpUserDefectInfoCount() < 1)    return TRUE;        // �������� ī��Ʈ�� ���ٸ� �Ѿ��
    if(pRsRcpReviewInfo->GetRcpUserDefectInfoCount() < 1)    return TRUE;
    double dCenterPosX, dCenterPosY;
    
@@ -10274,18 +10150,18 @@
    _grmGlassData* pSharedGlassData = pDitSharedGlassRaw->GetGlassData();
    if(pSharedGlassData == NULL) return FALSE;
    //pSharedGlassData->m_nUserReviewNum = 0; //���� �޸� User plan
    //pSharedGlassData->m_nUserReviewNum = 0; // User plan
    _grmDefectData* pSharedDefect;
    int nPointCount = pRecipeinfo->GetRcpUserDefectInfoCount(); // User ��ǥ �� ī��Ʈ
    int nPointCount = pRecipeinfo->GetRcpUserDefectInfoCount();
    int nSharedDefectNum = pSharedGlassData->m_nDefectNum; // ���� �Ѱ��� User Idx �� ù��° Index �� �ȴ�
    int nStartIdx=nSharedDefectNum;// USER ���� ���� IDX �ο��ϱ� ���� ������
    int nSharedDefectNum = pSharedGlassData->m_nDefectNum;
    int nStartIdx=nSharedDefectNum;
    CRcpPlanInfo* pRcpPlanInfo; // ������ ����
    CRcpUserDefectInfo *pDefectInfo;// ������ defect ����
    CRcpPlanInfo* pRcpPlanInfo;
    CRcpUserDefectInfo *pDefectInfo;
    
    int nInsepectionType;// User Ÿ�� Reviewreflow = 0 wsiReflow =1; REV&WSI =2; WSIUSEr =3; USER =4;
    int nInsepectionType;// User Reviewreflow = 0 wsiReflow =1; REV&WSI =2; WSIUSEr =3; USER =4;
    int nCount = 0;
@@ -10349,7 +10225,7 @@
BOOL CSequenceProcessor_CPJT::CompareRevType(int nInsType,int nRevType)
{
    //Plan Ÿ�԰� InspectionMode ��
    //Plan InspectionMode
    if(nRevType == CPJT_PlanUser)
    {
      if(nInsType == USER) return TRUE;
@@ -10407,7 +10283,7 @@
    CString strMessage, strResultFilePath, strUploadResultFilePath, strLocalRawPath;
    CString    strUploadRawPath, strUploadImagePath, strAOIRawFileName, strAOIRawFilePath;
    //3-1. 占쏙옙占쏙옙 占쏙옙占?占쏙옙占쏙옙 占쏙옙占쏙옙
    //3-1.
    m_pSP2P->ISP2P_SetReviewResultData(pGlassResult);
    strLocalRawPath        = pNetworkInfo->m_strLocalRawPath;
@@ -10434,7 +10310,7 @@
            if(strUploadRawPath.IsEmpty() == FALSE && strAOIRawFilePath.IsEmpty() == FALSE)
            {
                // [2017:5:16]-[WEZASW] : ���� PASS���� ���� ��� ��Ȳ�� ���� AOI Server�� RAW ���� ���� ���ε� ����.
                // [2017:5:16]-[WEZASW] :
                strUploadResultFilePath.Format(_T("%s\\%s"), strUploadRawPath, strAOIRawFileName);
                if(CopyFile(strResultFilePath, strUploadResultFilePath, FALSE))
@@ -10455,9 +10331,9 @@
    }
    // delete file of Glass direction
    DeleteFile(pNetworkInfo->m_strAOIRawPath + _T("\\") + pGlassResult->m_strJobID + _T("TD"));//pGlassResult->m_strGlassID -> m_StrJobID ����
    DeleteFile(pNetworkInfo->m_strAOIRawPath + _T("\\") + pGlassResult->m_strJobID + _T("TD"));//pGlassResult->m_strGlassID -> m_StrJobID
    // [2017:4:11]-[WEZASW] :CIM(DV Data) ���� �׸� �߰�.
    // [2017:4:11]-[WEZASW] :CIM(DV Data)
    if (SendDVDataToSignalControl()==FALSE) 
    {
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] DV Data Send FAIL!"));            
@@ -10477,8 +10353,6 @@
BOOL CSequenceProcessor_CPJT::MoveReviewStartMotorPosition(CGlassResult* pGlassResult,int nReviewType)
{
    //혹占시놂옙 占쏙옙占싹깍옙占?占쏙옙占쌤듸옙
    //���� �÷��� ù��° ��ġ�� �̵�
    
    double dDefectPosX,dDefectPosY = 0;
    
@@ -10542,7 +10416,7 @@
void CSequenceProcessor_CPJT::SendWsiErrorAlarm_CPJT(int Index) //190801 chm
{    
    //wsi ���� �˶�
    //wsi
    if(Index==1)
    {
        g_pLog->DisplayMessage(_T("[SequenceProcessor_CPJT] WSI Alive Error!!!"));
@@ -10556,7 +10430,7 @@
void CSequenceProcessor_CPJT::SendWsiAlive_CPJT()//190801 chm
{
    //WSI Alive ��ȣ ����
    //WSI Alive
    SetWSIAliveCheck(TRUE);
}
@@ -10582,7 +10456,7 @@
            if(bWsiAliveCheck ==FALSE){
                m_pCSPC->SendWsiErrorAlarm_CPJT(1);
            }
            bWsiAliveCheck=FALSE; //30�ʿ� �ѹ��� 0���� �ʱ�ȭ
            bWsiAliveCheck=FALSE;
        }
    }