SDC C-Project CF Review 프로그램
LYW
2022-06-30 c220de6f70051797e9d8b371830d06def9dc9cbd
검사기 RawMessenger 동기화
1개 파일 추가됨
9개 파일 변경됨
1088 ■■■■■ 파일 변경됨
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp 34 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/Extern/DitGlassRawStruct.h 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/Extern/DitGlassRawStruct_0629_Back.h 787 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/DitGlassRawStruct.h 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/bin/ReviewHistroy.exe 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DitGlassRawStruct.h 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.cpp 238 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor.cpp 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor.h 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 10 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp
@@ -587,14 +587,32 @@
    CString strValue;
    /*< KJG 20211229 - #3846 MOD Start >*/
    //strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR NG TB TW RB RW T_STACK NO_DEFECT MAX_AVG_GRAY MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT CRACK_DEFECT";
/* < KMH 20220613 : #3957 MOD Start > */
    /* <LJC 20220425 : #3957 MOD Start> */
    strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR NG TB TW RB RW T_STACK NO_DEFECT MAX_NG MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT CRACK_DEFECT CODE_COUNT1 CODE_COUNT2 CODE_COUNT3 CODE_COUNT4 CODE_COUNT5 CODE_COUNT6 CODE_COUNT7 CODE_COUNT8 CODE_COUNT9 CODE_COUNT10"; //56ea
    // strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR NG TB TW RB RW T_STACK NO_DEFECT MAX_NG MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT CRACK_DEFECT CODE_COUNT1 CODE_COUNT2 CODE_COUNT3 CODE_COUNT4 CODE_COUNT5 CODE_COUNT6 CODE_COUNT7 CODE_COUNT8 CODE_COUNT9 CODE_COUNT10"; //56ea
    strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR NG TB TW RB RW T_STACK NO_DEFECT MAX_NG MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT CRACK_DEFECT"; //56ea
    for (int i = 0; i < RAW_CODE_MAX; i++)
    {
        CString strDefectCode = pGlassData->m_strRawDefectCode[i];
        if (strDefectCode == "") { strDefectCode = "*"; }
        strValue += " " + strDefectCode;
    }
    /* <LJC 20220425 : #3957 MOD End> */
/* < KMH 20220613 : #3957 MOD End > */
    /*< KJG 20211229 - #3846 MOD End >*/
    strLine += strValue; strLine += "\n";
/* < KMH 20220614 : #3957 MOD Start > */
    /* <LJC 20220425 : #3957 MOD Start> */
    strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT TR PR NG RB RW TB TW T_STACK NO_DEFECT CODE_COUNT1 CODE_COUNT2 CODE_COUNT3 CODE_COUNT4 CODE_COUNT5 CODE_COUNT6 CODE_COUNT7 CODE_COUNT8 CODE_COUNT9 CODE_COUNT10"; //31ea /* <KYH 211129 : #3796 MOD Start> */
        /* <LJC 20220425 : #3957 MOD End> */
    //strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT TR PR NG RB RW TB TW T_STACK NO_DEFECT CODE_COUNT1 CODE_COUNT2 CODE_COUNT3 CODE_COUNT4 CODE_COUNT5 CODE_COUNT6 CODE_COUNT7 CODE_COUNT8 CODE_COUNT9 CODE_COUNT10"; //31ea /* <KYH 211129 : #3796 MOD Start> */
    strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT LN_DEFECT TR PR NG RB RW TB TW T_STACK NO_DEFECT"; //56ea
    for (int i = 0; i < RAW_CODE_MAX; i++)
    {
        CString strDefectCode = pGlassData->m_strRawDefectCode[i];
        if (strDefectCode == "") { strDefectCode = "*"; }
        strValue += " " + strDefectCode;
    }
    /* <LJC 20220425 : #3957 MOD End> */
/* < KMH 20220614 : #3957 MOD End > */
    strLine += strValue; strLine += "\n";
    strValue = "ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE LINE_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG R_HEIGHT G_HEIGHT B_HEIGHT INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK CLASS_CODE"; //50ea    
    strLine += strValue;
@@ -1036,7 +1054,10 @@
    SPRINTRAW(8, "SUBPANEL");
    // 03 12 SUBPANELID            // Subpanel ID
    //SPRINTRAW(12, "%d", pCellData->m_nCellID);
    SPRINTRAW(12, "%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pCellData->m_nCellID / 36, g_pCellCode[pCellData->m_nCellID % 36]);
    /* < KMH 20220609 : #4183 MOD Start > */
    //SPRINTRAW(12, "%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pCellData->m_nCellID / 36, g_pCellCode[pCellData->m_nCellID % 36]);
    SPRINTRAW(12, "%s%s", pData->GetGlassData()->m_strGlassID, pCellData->m_strCellName);
    /* < KMH 20220609 : #4183 MOD End > */
    
    // ê¸€ë¼ìФ ì›ì  ê¸°ì¤€ Y좌표 ë°˜ëŒ€ 
    // ì½”너컷 ê¸°ì¤€ìœ¼ë¡œ ê²°ê³¼íŒŒì¼ ì¢Œí‘œê°€ ìƒì„±ë˜ëŠ”ë° ê³ ê°ì‚¬ì— ëª…확한 í™•인 í•„ìš”
@@ -1191,7 +1212,10 @@
    // 02   6    DEFECT            // DEFECT
    SPRINTRAW(6, "DEFECT");
    // 03   12   ID                // Subpanel ID
    SPRINTRAW(12, "%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pDefectData->m_nCellIdx / 36, g_pCellCode[pDefectData->m_nCellIdx % 36]);
    /* < KMH 20220609 : #4183 MOD Start > */
    //SPRINTRAW(12, "%s%c%c", pData->GetGlassData()->m_strGlassID, '0' + pDefectData->m_nCellIdx / 36, g_pCellCode[pDefectData->m_nCellIdx % 36]);
    SPRINTRAW(12, "%s%s", pData->GetGlassData()->m_strGlassID, pDefectData->m_strCellName);
    /* < KMH 20220609 : #4183 MOD End > */
    // 04   5    DEF_NO            // Defect Number of Panel
    // RAW íŒŒì¼ìš© Defect Index 
    //SPRINTRAW(5, "%d", pDefectData->m_nDefectIdx);
DitGlassRawMessenger/Extern/DitGlassRawStruct.h
@@ -222,6 +222,10 @@
    /* < KJG 20220225 - #3850 ADD Start >*/ 
    char m_strRawMergeStepID[32];
    /* < KJG 20220225 - #3850 ADD End >*/
    /* < KMH 20220614 : #3957 ADD Start > */
    char m_strRawDefectCode[RAW_CODE_MAX][5];    // 4글자만 í‘œê¸°
    /* < KMH 20220614 : #3957 ADD End > */
};
struct _grmBlockData
{
@@ -479,6 +483,7 @@
    int                m_nUMCellY;                    // ì…€ ì›ì  ê¸°ì¤€ y ì¢Œí‘œ
    short            m_nModelIdx;                // ëª‡ ë²ˆì§¸ ëª¨ë¸ì¸ê°€?
    short            m_nCellIdx;                    // ëª‡ë²ˆì§¸ ì…€ì¸ê°€?
    char            m_strCellName[32];            // ì…€ ì´ë¦„                            /* < KMH 20220609 : #4183 ADD  > */
    short            m_nCellGate;                // ì…€ë³„ Gate라인(얼라인 ë³´ì • ì „)
    short            m_nCellData;                // ì…€ë³„ Data라인(얼라인 ë³´ì • ì „)
    short            m_nCellGateAlign;            // ì…€ë³„ Gate라인(얼라인 ë³´ì • í›„)
DitGlassRawMessenger/Extern/DitGlassRawStruct_0629_Back.h
»õ ÆÄÀÏ
@@ -0,0 +1,787 @@
#pragma once
#define SHAREDMEMNAME_BASICINFO _T("DIT.GLASSRAWSYSTEM.SHAREDMEM.BASICINFO")
#define SHAREDMEMNAME_GLASSDATA    _T("DIT.GLASRAWSYSTEM.SHAREDMEM.GLASSDATA")
#define MUTEX_RAWMESSENGER        _T("MUTEX_RAWMESSENGER_IPC")
#define COMMAND_MAXCOUNT 8
#define RAWMESSENGER_MAXCAMNUM 30
#define RAWMESSENGER_MAXSCANNUM 20
#define RAWMESSENGER_MAXHLINUM 8
#define RAW_CODE_MAX 10
#define MAX_ZONE_NUM 16
namespace ditRaw
{
    enum ReviewPlanType
    {
        RPT_Review = 0,
        RPT_User,
        RTP_WSI,
        RTP_PlanMeasure,
        RTP_Reflow,
        RTP_WsiReflow,
        RTP_UserWsi,
        RPT_AOICustom = 1000,
    };
};
enum emAOIProcStep
{
    APS_None = 0,
    //AOI
    APS_GlassLoading,
    APS_InspectEnd,
    //Review
    APS_CustomReviewRead,
    APS_ReviewStart,
    APS_ReviewEnd,
    RPS_StepNum
};
struct _grmGlassData
{
    void clear()
    {
        memset(this, 0, sizeof(_grmGlassData));
    }
    //Glass ì •ë³´
    char m_strFileName[64];
    char m_strPath[256];
    int m_nCellNum;
    int m_nDefectNum;
    int m_nOriginDirection;                //{ GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 };
    int m_nConerCutDirection;
    int    m_nScanCoordinateY;                //여기가 0이면 ì¼ë°˜, 1이면 Scan방향이 y축(즉 scan방향이 ë‹¨ì¶•, offline ì„¤ë¹„ ê°™ì€)
    int m_nGlassSizeWidth;
    int m_nGlassSizeHeight;
    /* <KYH 211129 : #3796 ADD Start> */
    int            m_nDefectNumJudgeND;
    /* <KYH 211129 : #3796 ADD End> */
    //DUMY DATA
    int            Dumy_int[9];
    //설비정보
    char m_strLine[32];
    char m_strEquipType[32];
    char m_strEquipID[32];
    char m_strStepID[32];
    char m_strOperID[32];
    CTime    m_tmGlassLoading;            //3. START_TIME
    CTime    m_tmInspectionStart;            //3. START_TIME
    CTime    m_tmInspectionEND;            //4. END_TIME
    CTime    m_tmReviewLoading;
    CTime    m_tmReviewEnd;
    //기본 ë¬¼ë¥˜ì •ë³´
    char m_strGlassID[32];                //Glass ID
    char m_strPPID[32];
    char m_strEPPID[32];
    char m_strLotID[32];                //LOT_ID
    char m_strSLotID[32];                //SLOT_ID
    char m_strRecipeName[32];            //RECIPE_NAME
    char m_strGlassJudge[32];            //GLASS_JUDGE
    char m_strGlassCode[32];            //Grade or Code
    char m_strProductID[16];            //4. PRODUCT_ID
    //VCR
    int m_nVcrResultCode;
    char m_strVCRResult[32];
    char m_strVCRGlassID[32];
    //결함 ê°¯ìˆ˜ ê´€ë¦¬ ë³€ìˆ˜
    int            m_nDefectNumSizeSmall;
    int            m_nDefectNumSizeMid;
    int            m_nDefectNumSizeLarge;
    int            m_nDefectNumSizeHuge;
    int            m_nDefectNumSizeUltra;
    int            m_nDefectNumLocActive;
    int            m_nDefectNumLocPad;
    int            m_nDefectNumLocCrack;
    int            m_nDefectNumLocBM;
    int            m_nDefectNumTypeTB;
    int            m_nDefectNumTypeTW;
    int            m_nDefectNumTypeRB;
    int            m_nDefectNumTypeRW;
    int            m_nDefectNumTypeMD;
    int            m_nDefectNumTypeCD;
    int            m_nDefectNumTypeMC;
    /* <LJC 20220422 : #3957 ADD Start> */
    int            m_nDefectCode[RAW_CODE_MAX];
    /* <LJC 20220422 : #3957 ADD End> */
    int            m_nDefectNumJudgeOKWhite;
    int            m_nDefectNumJudgeOKBlack;
    int            m_nDefectNumJudgeNG;
    int            m_nDefectNumJudgeRW;
    int            m_nDefectNumJudgeRP;
    int            m_nDefectNumJudgeRV;
    int            m_nDefectNumJudgeTR;
    int            m_nDefectNumJudgePR;
    /*< LHS 20211029 - #3783 MOD Start >*/
    int            m_nDefectNumJudgeLine;
    /*< LHS 20211029 - #3783 MOD End >*/
    int            m_nDefectNumStackTD;
    int            m_nDefectNumStackSD;
    int            m_nDefectNumStackPD;
    int            m_nDefectNumStackSP;
    //카메라/스캔 ì •ë³´ [김태현 2018/12/5]
    short        m_nCameraNum;
    short        m_nScanNum;
    unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
    unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
    unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
    //얼라인 ì •ë³´ um[김태현 2018/12/10]
    double    m_nAlignCcdTheta;
    double    m_nAlignCcdShitftX;
    double    m_nAlignCcdShitftY;
    double    m_nAlignPreTheta;
    double    m_nAlignPreShitftX;
    double    m_nAlignPreShitftY;
    double    m_nAlignBasicTheta;
    double    m_nAlignBasicShitftX;
    double    m_nAlignBasicShitftY;
    char    m_strAlignFirst[64];
    char    m_strAlignSecond[64];
//     char    m_strAlignPath[256];
    //CSOT용 ë¬¼ë¥˜ ì •ë³´ [김태현 2018/12/5]
    char m_strCassetteSequenceNo[16];
    char m_strOwnerCode[16];            //2. OWNER_CODE
    char m_strOwnerType[16];            //3. OWNER_TYPE
    char m_strProcessID[21];            //5. PROCESS_ID
    char m_strProductGroup[16];            //6. PRODUCT_GROUP
    char m_strCSTID[16];                //8. CST_ID
    char m_strPreProcessID[16];            //10.PRE_PROCESS_ID
    char m_strPreEQPID[16];                //11.PRE_EQP_ID
    char m_strPreChamerID[16];            //12.PRE_CHAMBER_ID
    char m_strPreRecipeID[32];            //13.PRE_RECIPE_ID
    char m_strGroupID[16];                //14.GROUP_ID
    char m_cAutoSampleFlag;                //15.AUTOSAMPLEFLAG
    // CPRJ용 ë¬¼ë¥˜ ì •ë³´
    char m_strProdType[3];
    char m_strBatchID[13];
    char m_strPairHPanelID[13];
    char m_strGlassThickNess[2];
    char m_strCompCount[2];
    char m_strGlassState[2];
    char m_strInsFlag[2];
    char m_strPanelPosition[2];
    char m_strFlowHistory[2];
    char m_strCount1[2];
    char m_strCount2[2];
    char m_StrMergeList[10][12];
    //Mura Data 0412 nwh
    char m_strMaxAvgGray[12];
    char m_strMaxPortion[12];
     //1226NWH
    char m_strReadingFlag[2];
    BYTE m_nUniqueID[4];
    int m_nSlot_No;
    BYTE m_nGlassDataBitSignal[4];
    bool m_bJob_end;
    //201217 CJH - ì°ì€ Defect Review ê°œìˆ˜
    int m_nReviewNum;
    //201221 CJH - íŒŒì‹±í•œ Stack ê²°ê³¼
    int m_nStackNum;
    BOOL m_bStackRead;
    /*< KJG 20211024 - #3487 ADD Start >*/
    int m_nRawMergeNum;
    BOOL m_bRawMergeRead;
    /*< KJG 20211024 - #3487 ADD End >*/
    //210203 CJH - CutOff ëŒ€ìƒ ê²°í•¨ ìˆ˜
    int m_nCutOffDefectNum;
    //210323 CJH - Server/Frame Shrink ì •ë³´ ì¶”ê°€
    char m_strShrinked[6];
    //210326 CJH - RAW ìž…ë ¥ Defect ìˆ˜ëŸ‰ ìƒí•œ ì‚¬ìš©ì—¬ë¶€
    BOOL m_bRawCutoff;
    //210907 KJG - EdgeCrack ê²€ì‚¬ ì‚¬ìš© ìœ ë¬´
    BOOL m_bEdgeCrackUse;
    BOOL m_bRawMergeUse;
    /* < KJG 20220225 - #3850 ADD Start >*/
    char m_strRawMergeStepID[32];
    /* < KJG 20220225 - #3850 ADD End >*/
};
struct _grmBlockData
{
    void clear()
    {
        memset(this, 0, sizeof(_grmBlockData));
    }
    char m_strBlockID[16];                //1. BLOCK_ID
    char m_cBlockJudgeAOI;                //2. BLOCK_JUDGE_AOI
    char m_cBlockJudgeATS;                //4. BLOCK_JUDGE_ATS
    char m_cBlockJudgeTEG;                //5. BLOCK_JUDGE_TEG
    int m_nGlassIdDCR;                    //22. GLASS_ID_DCR
};
struct _grmCellData
{
    void clear()
    {
        memset(this, 0, sizeof(_grmCellData));
    }
    int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; };
    int                        m_nCellID;                            //1. PANEL_ID
    short                    m_nModelIdx;                // ëª‡ ë²ˆì§¸ ëª¨ë¸ì¸ê°€?
    char                    m_strCellName[32];
    int                        m_rectCellLeft;
    int                        m_rectCellTop;
    int                        m_rectCellRight;
    int                        m_rectCellBottom;
    int/*Judgement*/        m_nJudgement;
    int                        m_nJudgeFlag;
    int                        m_nJudgeGlade;
    //결함 ê°¯ìˆ˜ ê´€ë¦¬ ë³€ìˆ˜
    int            m_nDefectNumSizeSmall;
    int            m_nDefectNumSizeMid;
    int            m_nDefectNumSizeLarge;
    int            m_nDefectNumSizeHuge;
    int            m_nDefectNumSizeUltra;
    int            m_nDefectNumLocActive;
    int            m_nDefectNumLocPad;
    int            m_nDefectNumLocCrack;
    int            m_nDefectNumLocBM;
    int            m_nDefectNumTypeTB;
    int            m_nDefectNumTypeTW;
    int            m_nDefectNumTypeRB;
    int            m_nDefectNumTypeRW;
    int            m_nDefectNumTypeMD;
    int            m_nDefectNumTypeCD;
    int            m_nDefectNumTypeMC;
    /* <KYH 211129 : #3796 ADD Start> */
    int            m_nDefectNumJudgeND;
    /* <KYH 211129 : #3796 ADD End> */
    /* <LJC 20220422 : #3957 ADD Start> */
    int            m_nDefectCode[RAW_CODE_MAX];
    /* <LJC 20220422 : #3957 ADD End> */
    //DUMY DATA
    int            Dumy_int[9];
    //Mura Data nwh 0404
    char        m_strProImage[32];
    char        m_strAvgGray_0[12];
    char        m_strPortion_0[12];
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_0[12];
    char        m_strAvgAmp_0[12];
    char        m_strFFTVar_0[12];
    char        m_strFFTVah_0[12];
    char        m_strFFTVaq_0[12];
    char        m_strFFTPK_0[12];
    char        m_strAvgGray_1[12];
    char        m_strPortion_1[12];
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_1[12];
    char        m_strAvgAmp_1[12];
    char        m_strFFTVar_1[12];
    char        m_strFFTVah_1[12];
    char        m_strFFTVaq_1[12];
    char        m_strFFTPK_1[12];
    char        m_strAvgGray_2[12];
    char        m_strPortion_2[12];
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_2[12];
    char        m_strAvgAmp_2[12];
    char        m_strFFTVar_2[12];
    char        m_strFFTVah_2[12];
    char        m_strFFTVaq_2[12];
    char        m_strFFTPK_2[12];
    char        m_strAvgGray_3[12];
    char        m_strPortion_3[12];
    //kyh Mura Data ì¶”ê°€ 0622
    char        m_strCorner_Gray_3[12];
    char        m_strAvgAmp_3[12];
    char        m_strFFTVar_3[12];
    char        m_strFFTVah_3[12];
    char        m_strFFTVaq_3[12];
    char        m_strFFTPK_3[12];
    int            m_nDefectNumJudgeOKWhite;
    int            m_nDefectNumJudgeOKBlack;
    int            m_nDefectNumJudgeNG;
    int            m_nDefectNumJudgeRW;
    int            m_nDefectNumJudgeRP;
    int            m_nDefectNumJudgeRV;
    int            m_nDefectNumJudgeTR;
    int            m_nDefectNumJudgePR;
    /*< LHS 20211029 - #3783 MOD Start >*/
    int            m_nDefectNumJudgeLine;
    /*< LHS 20211029 - #3783 MOD End >*/
    int            m_nReflowResult[8];            // 0: Reflow X 1: Reflow OK 2: Reflow NG
    // Filtering된 Stack별 ìˆ˜
    int            m_nDefectTDCount;
    int            m_nDefectSDCount;
    int            m_nDefectPDCount;
    int            m_nDefectSPCount;
    // Gate/Data ì´ ê°¯ìˆ˜
    int            m_nGateNum;
    int            m_nDataNum;
    // 210129 CJH - Cell Origin ë°©í–¥
    int            m_nCellXDir;
    int            m_nCellYDir;
};
struct _grmDefectReviewData
{
    void clear()
    {
        memset(this, 0, sizeof(_grmDefectReviewData));
    }
    //////////////////////////////////////////////////////////////////////////
    //여기서 ë¶€í„° ë¦¬ë·° ì˜ì—­ [김태현 2019/1/19]
    ditRaw::ReviewPlanType            m_nPlanType    ;
    int            m_nResultCode;  //0:None, 1:Success
    int            m_nShotIndex; //리뷰 ì°ì€ ìˆœë²ˆ [김태현 2018/12/5]
    int            m_nModuleIndex;
    int            m_nMagnificIndex;
    float        m_fManification;
    float        m_fManificResoultion;
    char        m_strRevImageName[256];
    char        m_strRevImagePath[256];
    //////////////////////////////////////////////////////////////////////////
    // Measure ì˜ì—­
    int            m_nMeasure_Index;
    int            m_nMeasure_ResultCode; //0:None, 1:Success
    float        m_fMesure_ResultData[8];    // 0:Type, 1:ShiftX, 2:ShiftY
    //////////////////////////////////////////////////////////////////////////
    // WSI영역
    int            m_nWsi_ResultCode; //0:None, 1:Success
    int            m_nWsi_Type;                                    // í•¨ëª° / ëŒê¸°
    float        m_fWsi_ResultData[8];            // 0:Type, 1:Height(um), 2:Width
    char        m_strWsi_2DImageFilename[256];
    char        m_strWsi_3DImageFilename[256];
    int            m_nWsiReflowPositionIndex;                    // WsiReflowPositionIndex
    int            m_nWsi_pReflowResultData[8];
    double        m_dWsi_DamDistance;
    double        m_dWsiMmMotorX;                                // WSI ëª¨í„° ì¢Œí‘œ 20180223 HJH
    double        m_dWsiMmMotorY;
    float        m_fWsiManification;                            // WSI ë°°ìœ¨
    //////////////////////////////////////////////////////////////////////////
    // Reflow ì˜ì—­
    int            m_nReflow_Index;
    int            m_nReflow_ResultCode; //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
    float        m_fReflow_LinePosData[8];
    int            m_nReflow_Side;
    int            m_nReflow_InspectionMode;
};
struct _grmDefectData
{
    void clear()
    {
        memset(this, 0, sizeof(_grmDefectData));
    }
    short            m_nDefectID;
    short            m_nCameraID;
    short            m_nScanIdx;
    //short            m_nDefectIdx;                // ì¹´ë©”라에서의 ê²°í•¨ ì¸ë±ìФ
    int                m_nDefectIdx;                // ì¹´ë©”라에서의 ê²°í•¨ ì¸ë±ìФ 201207 CJH - ìžë¦¿ ìˆ˜ ë„˜ì¹¨. int형으로 ë³€ê²½
    int                m_nPixelConv;                // pixel ë‹¨ìœ„ ì¢Œí‘œ
    int                m_nPixelScan;                // pixel ë‹¨ìœ„ ì¢Œí‘œ
    short                            m_nPixelSize;                // ê²°í•¨í¬ê¸°        ---------------------------------PS
    short/*SERVER_DefectType*/        m_DefectType;                // ê²°í•¨ íƒ€ìž…    ---------------------------------DT
    short/*SERVER_DefectSubType*/    m_DefectSubType;            // ê²°í•¨ì˜ íŒì •상태.
    short/*SERVER_DefectBDType*/    m_DefectBDType;                // ê²°í•¨ íƒ€ìž… - Bright, Dark, Both
    short            m_sPixelWidth;                // í”½ì…€ë‹¨ìœ„ ê²°í•¨ ë„ˆë¹„
    short            m_sPixelHeight;                // í”½ì…€ë‹¨ìœ„ ê²°í•¨ ë†’이
    short            m_nLevelSrcMin;                // ê²°í•¨ ë°ê¸° Min    -----------------------------SN
    short            m_nLevelSrcMax;                // ê²°í•¨ ë°ê¸° Max    -----------------------------SX
    short            m_nLevelSrcAvg;                // ê²°í•¨ ë°ê¸° Avg    -----------------------------SA
    short            m_nLevelRefMin;                // ë¹„교대상 ë°ê¸° Min    -------------------------RN
    short            m_nLevelRefMax;                // ë¹„교대상 ë°ê¸° Max    -------------------------RX
    short            m_nLevelRefAvg;                // ë¹„교대상 ë°ê¸° Avg    -------------------------RA
    short            m_nLevelDiffMin;            // ë¹„교차 Min    ---------------------------------DN
    short            m_nLevelDiffMax;            // ë¹„교차 Max    ---------------------------------DX
    short            m_nLevelDiffAvg;            // ë¹„교차 Avg    ---------------------------------DA
    int                m_nDefectRScale;            // í”½ì…€ë‹¨ìœ„ ê²°í•¨ ë†’이    -------------------------RS
    short            m_sThreshold;                // ê²°í•¨ì„ ê²€ì¶œí•  ë•Œì˜ Threshold
    short            m_sThresholdAvg;            // ê²°í•¨ì„ ê²€ì¶œí•  ë•Œì˜ Threshold AVG
    short            m_sDefectPeak;                // ê²°í•¨ì˜ Peak.
    short            m_sDefectLevel;                // (DiffAvg - Th) BOE 8G ìš”청사항
    int                m_nPixelGlassStart;            // Glass ì‹œìž‘ í”½ì…€
    short            m_sDefectLoc;
    short            m_sZoneClassPixelCount[16];
    short            m_sZonePixelCount[16];    // Zone별 ê²°í•¨ Pixel ìˆ˜
    short            m_sZoneValueMin[16];    // Zone별 ê²°í•¨ Min
    short            m_sZoneValueMax[16];    // Zone별 ê²°í•¨ Max
    short            m_sZoneValueAvg[16];    // Zone별 ê²°í•¨ Avg
    short            m_sZonePixelPercent[16];    // --------------------------------------Z0~ZF
    //210127 CJH - Zone별 Source Gray ìž…ë ¥
    short            m_sZoneValueSrcMin[16];    // Zone별 Source Min
    short            m_sZoneValueSrcMax[16];    // Zone별 Source Max
    short            m_sZoneValueSrcAvg[16]; // Zone별 Source Avg
    int                m_nUMOriginX;                // um단위 x좌표 (원점기준)
    int                m_nUMOriginY;                // um단위 y조표 (원점기준)
    int                m_nUMCenterAlignX;            // um단위 X좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • í›„)
    int                m_nUMCenterAlignY;            // um단위 Y좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • í›„)
    int                m_nUMCenterX;                // um단위 X좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • ì „)
    int                m_nUMCenterY;                // um단위 Y좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • ì „)
    int                m_nUMSizeX;                    // um단위 X í¬ê¸°    -----------------------------UX
    int                m_nUMSizeY;                    // um단위 Y í¬ê¸°    -----------------------------UY
    int                m_nUMSize;                    // um단위 í¬ê¸°.
    CRect            m_RectUM;                    // ë””펙 ì„¼í„° ê¸°ì¤€ ì‚¬ê°í˜•.
    short/*SERVER_DefectSizeType*/    m_DefectSizeType;            // ê²°í•¨ í¬ê¸° ì¢…류enum SERVER_DefectSizeType        { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra };
    short/*SERVER_DefectPeakType*/    m_DefectPeakType;            // Peak의 ì¢…류.
    short/*Judgement*/                m_DefectJudgement;            // ê²°í•¨ íŒì •.
    BOOL                    m_bDefectCutoff;            // ì»· ì˜¤í”„ ë””펙(TRUE= Cutoff, FALSE)
    short/*MAP16_DefectClass*/        m_DefectClass;                // BOE Defect Class 16등분 êµ¬ë¶„
    int                m_nPadRegionIdx;            // PAD ì˜ì—­ ì¸ë±ìФ
    int                m_nUMCellX;                    // ì…€ ì›ì  ê¸°ì¤€ x ì¢Œí‘œ
    int                m_nUMCellY;                    // ì…€ ì›ì  ê¸°ì¤€ y ì¢Œí‘œ
    short            m_nModelIdx;                // ëª‡ ë²ˆì§¸ ëª¨ë¸ì¸ê°€?
    short            m_nCellIdx;                    // ëª‡ë²ˆì§¸ ì…€ì¸ê°€?
    short            m_nCellGate;                // ì…€ë³„ Gate라인(얼라인 ë³´ì • ì „)
    short            m_nCellData;                // ì…€ë³„ Data라인(얼라인 ë³´ì • ì „)
    short            m_nCellGateAlign;            // ì…€ë³„ Gate라인(얼라인 ë³´ì • í›„)
    short            m_nCellDataAlign;            // ì…€ë³„ Data라인(얼라인 ë³´ì • í›„)
    int                m_nUMShotX;                    // ìƒ· ê¸°ì¤€ X좌표
    int                m_nUMShotY;                    // ìƒ· ê¸°ì¤€ Y좌표
    short            m_nMaskDefectIdx;            // í•œ Glass에서 ë°œê²¬ëœ ë§ˆìŠ¤í¬ê²°í•¨ ë¬¶ìŒì˜ ì¸ë±ìФ.
    short            m_nShotIdx;                    // ë…¸ê´‘샷 ë²ˆí˜¸
    short            m_nMatchShotCount;            // ë™ì¼í•œ ë§ˆìŠ¤í¬ ê²°í•¨ì˜ ìˆ˜.
    short            m_nMatchMaxSize;            // ë™ì¼í•œ ë§ˆìŠ¤í¬ ì¤‘ ê°€ìž¥ í° ê²°í•¨ì˜ í¬ê¸°.
    short            m_nRepeatCount;                // ì—°ì†ê²°í•¨ë°œê²¬ìœ„한 ë™ì¼ì¢Œí‘œ ë°˜ë³µìˆ˜
    short            m_nMaskRepeatCount;
    int                m_StackInfo;                // Stack Flag
    BOOL            m_bRealStack;                // Stack ë¨¸ì§€ì— ì˜í•œ TD(TRUE) ì¸ì§€, í•„터링에 ì˜í•œ TD(FALSE)구분할 ìˆ˜ ìžˆë‹¤.
    short            m_nStackStepCount;            // Stack ìˆ˜
    short            m_nStackColorIdx;            // Color를 ì„ íƒí•˜ëŠ” ì¸ë±ìФ.
    //CString            m_strStackStep[CFDEFECT_STACKCOUNT];            // Stack Step.
    char            m_strStackFirst[60];            // Stack Step. //201221 CJH - ìµœëŒ€ ì‚¬ì´ì¦ˆ 60bytes
    char            m_strUnitID[16];                // ìœ ë‹›ì•„이디
    int                m_ClassificationType;                // enum ClassificationType            { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI나 TFE등 ì¶”ê°€ ë¶„류  ì•Œê³ ë¦¬ì¦˜ ì ìš© ê²°ê³¼.
    int                m_nAtomWidth;                // TFE í•µ ë„ˆë¹„
    int                m_nAtomHeight;                // TFE í•µ ë†’이
    short/*ReKind*/            m_DefectKind;                // ê²°í•¨ ì¢…류
    char            m_strDefectCode[32];            // Defect Code
    BOOL            m_bMergeState;                // Merge Status
    char            m_strAoiImageName[256];            // Defect Image Name(CCD Image)
    int                m_nDefectMerge;        // í˜„재 ë””펙의 ë¨¸ì§€ ì—¬ë¶€
    int                m_nPixelSizeOrigin;
    int                m_nScratchRatio;
    int                m_nDensity;            // ì›í˜• ê²°í•¨ êµ¬ë¶„을 ìœ„한 ë°€ë„ [2017.8.2 bhs]
    char            m_strDefectName[16];
    char            m_strDefectType[16];
    double            m_dScanResolution;
    double            m_dConvResolution;
    int                m_nAngle;                    // ê°ë„
    int                m_nMajor;                    // ìž¥ì¶• ê¸¸ì´(Long)
    int                m_nMinor;                    // ë‹¨ì¶• ê¸¸ì´(Short)
    int                m_nCompact;                    // Blob ìž¥ì¶•을 ì§€ë¦„으로 í•˜ëŠ” ì›ì˜ ë„“이와 Blob ë„“이의 ë¹„율
    int                m_nThickness;                // Blob ë„“이와 ìž¥ì¶•의 ë¹„율 (Area / Major)
    short            m_nHliLevelIdx;                // ëª‡ ë²ˆì§¸ ë ˆë²¨(채널)인가?
    int                m_nHliLayers;                // í•´ë‹¹ê²°í•¨ì— í¬í•¨ëœ ë ˆì´ì–´ bit처리
    BOOL            m_bShrinked;                //210323 CJH - Frame Shrink ì •ë³´ ì¶”ê°€
    char            m_strAoiImagePath[255];
    char            m_strReviewImagePath[255];
    int                m_nAlignRectLeft;
    int                m_nAlignRectTop;
    int                m_nAlignRectBottom;
    int                m_nAlignRectRight;
    /*< LHS 20211029 - #3783 MOD Start >*/
    char            m_strLNDefectCode[12];
    short/*LineDefectType*/ m_LineDefectType;
    /*< LHS 20211029 - #3783 MOD End >*/
    _grmDefectReviewData m_ReviewDefect;
};
enum emGlassRawCommand
{
    grcNone = 0,
    //AOI Sequence
    grcSequenceGlassLoading = 1,
    grcSequenceInspectEnd = 2,
    //Review Sequence
    grcSequenceReviewStart = 3,
    grcSequenceReviewEnd = 4,
    grcSequenceCustomReviewDataRead = 10,
    grcWriteRaw = 101,
    grcReadRaw = 102,
    grcWriteBin = 201,
    grcReadBin = 202,
    grcReviewWriteBIn = 301,
    grcGlassRawCommand
};
struct _grmDitCommand
{
    struct _grmCommand
    {
        int nCommand;
        char strParam[256];
        short nResult;
    };
    short m_nCommandIdxWrite;
    short m_nCommandIdxRead;
    _grmCommand m_nCommandBuffer[COMMAND_MAXCOUNT];
};
struct _grmDitMemInfo
{
    //공유 ë©”모리 ìƒì„±í•  ê³µê°„ ê²°ì • [김태현 2018/11/12]
    size_t m_nGlassRawDataSize;
    int m_nGlassMaxDataNum;
    int m_nBlockMaxDataNum;
    int m_nCellMaxDataNum;
    int m_nDefectMaxDataNum;
    int m_nStackMaxDataNum;
    /*< KJG 20211024 - #3487 ADD Start >*/
    int m_nRawMergeMaxDataNum;
    /*< KJG 20211024 - #3487 ADD End >*/
    //Char ê¸°ì¤€ ìžë£Œê°€ ìžˆëŠ” ì‹œìž‘ ìœ„치 [김태현 2018/11/12]
    int m_nGlassDataPoint;
    int m_nBlockDataPoint;
    int m_nCellDataPoint;
    int m_nDefectDataPoint;
    int m_nStackDataPoint;
    /*< KJG 20211024 - #3487 ADD Start >*/
    int m_nRawMergeDataPoint;
    /*< KJG 20211024 - #3487 ADD End >*/
    int m_nSizeOfGlassData;
    int m_nSizeOfBlockData;
    int m_nSizeOfCellData;
    int m_nSizeOfDefectData;
    int m_nSizeOfStackData;
    /*< KJG 20211024 - #3487 ADD Start >*/
    int m_nSizeOfRawMergeData;
    /*< KJG 20211024 - #3487 ADD End >*/
};
struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand
{
    size_t m_nGlassLoadingCount;
    emAOIProcStep m_ClientProcStep; //AOI, Review가 ë³´ë‚¸ ëª…ë ¹
    emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)가 ì²˜ë¦¬ ì™„료 í•œ ëª…ë ¹
};
class CgrmGlassRawData
{
public:
    CgrmGlassRawData()
    {
        m_pGlassRawData = NULL;
        m_bRefAlloc = FALSE;
    };
    ~CgrmGlassRawData()
    {
        clear();
    };
    void clear()
    {
        if(m_bRefAlloc) { m_pGlassRawData = NULL; return;}
        if(m_pGlassRawData)
        {
            delete [] m_pGlassRawData;
            m_pGlassRawData = NULL;
        }
    };
    BOOL ImportGlassRaw(_grmDitMemInfo* pInfo, char* pData, bool bRefAlloc = false)
    {
        if(pInfo == NULL) return FALSE;
        if(m_pGlassRawData && pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) clear();
        if(m_pGlassRawData == NULL) m_pGlassRawData = new char[ pInfo->m_nGlassRawDataSize ];
        m_MemInfo = *pInfo;
        m_nGlassRawDataSize = pInfo->m_nGlassRawDataSize;
        m_nGlassMaxDataNum  = pInfo->m_nGlassMaxDataNum ;
        m_nBlockMaxDataNum    = pInfo->m_nBlockMaxDataNum    ;
        m_nCellMaxDataNum   = pInfo->m_nCellMaxDataNum  ;
        m_nDefectMaxDataNum = pInfo->m_nDefectMaxDataNum;
        m_nStackMaxDataNum    = pInfo->m_nStackMaxDataNum    ;
        m_nGlassDataPoint   = pInfo->m_nGlassDataPoint  ;
        m_nBlockDataPoint    = pInfo->m_nBlockDataPoint    ;
        m_nCellDataPoint    = pInfo->m_nCellDataPoint   ;
        m_nDefectDataPoint  = pInfo->m_nDefectDataPoint ;
        m_nStackDataPoint   = pInfo->m_nStackDataPoint    ;
        m_nSizeOfGlassData  = pInfo->m_nSizeOfGlassData ;
        m_nSizeOfBlockData    = pInfo->m_nBlockDataPoint    ;
        m_nSizeOfCellData   = pInfo->m_nSizeOfCellData  ;
        m_nSizeOfDefectData = pInfo->m_nSizeOfDefectData;
        m_nSizeOfStackData  = pInfo->m_nSizeOfStackData    ;
        if(bRefAlloc)
        {
            m_pGlassRawData = pData;
        }
        else
        {
            if(pData)
            {
                memcpy(m_pGlassRawData, pData, sizeof(char)*pInfo->m_nGlassRawDataSize);
            }
            else
            {
                memset(m_pGlassRawData, 0, sizeof(char)*pInfo->m_nGlassRawDataSize );
            }
        }
        m_pGlassData  = (_grmGlassData*)&m_pGlassRawData[pInfo->m_nGlassDataPoint];
        m_pBlockData        = (_grmBlockData*)&m_pGlassRawData[pInfo->m_nBlockDataPoint];
        m_pCellData   = (_grmCellData*)&m_pGlassRawData[pInfo->m_nCellDataPoint];
        m_pDefectData = (_grmDefectData*)&m_pGlassRawData[pInfo->m_nDefectDataPoint];
        m_pStackData = (_grmDefectData*)&m_pGlassRawData[pInfo->m_nStackDataPoint];
        m_bRefAlloc = bRefAlloc;
        return TRUE;
    };
    BOOL ExportGlassRaw(_grmDitMemInfo* pInfo, char* pData)
    {
        if(pInfo == NULL || pData == NULL) return FALSE;
        if(1) //new type //메모리 ì´ ê³µê°„ í¬ê¸°ì— ìƒê´€ì—†ì´
        {
            //if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE;
            if(pInfo->m_nSizeOfGlassData  !=  m_MemInfo.m_nSizeOfGlassData)  return FALSE;
            if(pInfo->m_nSizeOfBlockData  !=  m_MemInfo.m_nSizeOfBlockData)  return FALSE;
            if(pInfo->m_nSizeOfCellData   !=  m_MemInfo.m_nSizeOfCellData)   return FALSE;
            if(pInfo->m_nSizeOfDefectData !=  m_MemInfo.m_nSizeOfDefectData) return FALSE;
            if(pInfo->m_nSizeOfStackData  !=  m_MemInfo.m_nSizeOfStackData)     return FALSE;
            if(pInfo->m_nCellMaxDataNum < m_pGlassData->m_nCellNum) return FALSE;
            if(pInfo->m_nDefectMaxDataNum < m_pGlassData->m_nDefectNum) return FALSE;
            if(pInfo->m_nStackMaxDataNum < m_pGlassData->m_nDefectNum) return FALSE;
            memcpy(&pData[pInfo->m_nGlassDataPoint], m_pGlassData,     pInfo->m_nSizeOfGlassData* 1);
            memcpy(&pData[pInfo->m_nBlockDataPoint], m_pBlockData,     pInfo->m_nSizeOfBlockData* 1);
            memcpy(&pData[pInfo->m_nCellDataPoint], m_pCellData,     pInfo->m_nSizeOfCellData*m_pGlassData->m_nCellNum);
            memcpy(&pData[pInfo->m_nDefectDataPoint], m_pDefectData, pInfo->m_nSizeOfDefectData*m_pGlassData->m_nDefectNum);
            memcpy(&pData[pInfo->m_nStackDataPoint], m_pStackData, pInfo->m_nSizeOfStackData*m_pGlassData->m_nDefectNum);
        }
        else //if() //type old
        {
            if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE;
            if(pInfo->m_nSizeOfGlassData  !=  m_MemInfo.m_nSizeOfGlassData)  return FALSE;
            if(pInfo->m_nSizeOfBlockData  !=  m_MemInfo.m_nSizeOfBlockData)  return FALSE;
            if(pInfo->m_nSizeOfCellData   !=  m_MemInfo.m_nSizeOfCellData)   return FALSE;
            if(pInfo->m_nSizeOfDefectData !=  m_MemInfo.m_nSizeOfDefectData) return FALSE;
            memcpy(pData, m_pGlassRawData, sizeof(char)*pInfo->m_nGlassRawDataSize);
        }
        return TRUE;
    };
    _grmGlassData*    GetGlassData(){return m_pGlassData;};
    _grmBlockData*    GetBlockData(int nIndex){return &m_pBlockData[nIndex];};
    _grmCellData*    GetCellData(int nIndex){return &m_pCellData[nIndex];};
    _grmDefectData*    GetDefectData(int nIndex){return &m_pDefectData[nIndex];};
    _grmDitMemInfo* GetMemInfo(){return &m_MemInfo;};
    _grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex]; };
protected:
    _grmDitMemInfo  m_MemInfo;
    char* m_pGlassRawData;
    _grmGlassData*  m_pGlassData;
    _grmBlockData*    m_pBlockData;
    _grmCellData*   m_pCellData;
    _grmDefectData* m_pDefectData;
    _grmDefectData*    m_pStackData;
    size_t m_nGlassRawDataSize;
    int m_nGlassMaxDataNum;
    int m_nBlockMaxDataNum;
    int m_nCellMaxDataNum;
    int m_nDefectMaxDataNum;
    int m_nStackMaxDataNum;
    int m_nGlassDataPoint;
    int m_nBlockDataPoint;
    int m_nCellDataPoint;
    int m_nDefectDataPoint;
    int m_nStackDataPoint;
    int m_nSizeOfGlassData;
    int m_nSizeOfBlockData;
    int m_nSizeOfCellData;
    int m_nSizeOfDefectData;
    int m_nSizeOfStackData;
private:
    bool m_bRefAlloc;
};
ReviewHistory/ReveiwHistory/DitGlassRawStruct.h
@@ -222,6 +222,10 @@
    /* < KJG 20220225 - #3850 ADD Start >*/ 
    char m_strRawMergeStepID[32];
    /* < KJG 20220225 - #3850 ADD End >*/
    /* < KMH 20220614 : #3957 ADD Start > */
    char m_strRawDefectCode[RAW_CODE_MAX][5];    // 4글자만 í‘œê¸°
    /* < KMH 20220614 : #3957 ADD End > */
};
struct _grmBlockData
{
@@ -479,6 +483,7 @@
    int                m_nUMCellY;                    // ì…€ ì›ì  ê¸°ì¤€ y ì¢Œí‘œ
    short            m_nModelIdx;                // ëª‡ ë²ˆì§¸ ëª¨ë¸ì¸ê°€?
    short            m_nCellIdx;                    // ëª‡ë²ˆì§¸ ì…€ì¸ê°€?
    char            m_strCellName[32];            // ì…€ ì´ë¦„                            /* < KMH 20220609 : #4183 ADD  > */
    short            m_nCellGate;                // ì…€ë³„ Gate라인(얼라인 ë³´ì • ì „)
    short            m_nCellData;                // ì…€ë³„ Data라인(얼라인 ë³´ì • ì „)
    short            m_nCellGateAlign;            // ì…€ë³„ Gate라인(얼라인 ë³´ì • í›„)
ReviewHistory/bin/ReviewHistroy.exe
Binary files differ
ReviewSystem/ReviewSystem/DitGlassRawStruct.h
@@ -222,6 +222,10 @@
    /* < KJG 20220225 - #3850 ADD Start >*/ 
    char m_strRawMergeStepID[32];
    /* < KJG 20220225 - #3850 ADD End >*/
    /* < KMH 20220614 : #3957 ADD Start > */
    char m_strRawDefectCode[RAW_CODE_MAX][5];    // 4글자만 í‘œê¸°
    /* < KMH 20220614 : #3957 ADD End > */
};
struct _grmBlockData
{
@@ -479,6 +483,7 @@
    int                m_nUMCellY;                    // ì…€ ì›ì  ê¸°ì¤€ y ì¢Œí‘œ
    short            m_nModelIdx;                // ëª‡ ë²ˆì§¸ ëª¨ë¸ì¸ê°€?
    short            m_nCellIdx;                    // ëª‡ë²ˆì§¸ ì…€ì¸ê°€?
    char            m_strCellName[32];            // ì…€ ì´ë¦„                            /* < KMH 20220609 : #4183 ADD  > */
    short            m_nCellGate;                // ì…€ë³„ Gate라인(얼라인 ë³´ì • ì „)
    short            m_nCellData;                // ì…€ë³„ Data라인(얼라인 ë³´ì • ì „)
    short            m_nCellGateAlign;            // ì…€ë³„ Gate라인(얼라인 ë³´ì • í›„)
ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -6626,12 +6626,11 @@
    if (IsManualProcessMode()==FALSE)    {    return;    }
    CGlassResult *pGlassResult = m_pDoc->GlassResult_GetCurrentGlassResult();
    if(pGlassResult == NULL) return;
    if (pGlassResult == NULL) return;
    const SDefectFilter *pDefectFilter = m_pDoc->Etc_GetDefectFilter();
    if(pDefectFilter == NULL) return;
    if (pDefectFilter == NULL) return;
    int nMarginX = nDefectMarginX; //5000; // um
    int nMarginY = nDefectMarginY; //5000; // um
@@ -6639,6 +6638,9 @@
    MapDefectResult *pMapReviewResult = pGlassResult->GetMapDefectResult();
    BOOL bFind = FALSE;
    //Defect
    if (pMapReviewResult)
    {
        CDefectResult* pDefectResult = NULL;
@@ -6646,28 +6648,28 @@
        {
            pDefectResult = static_cast<CDefectResult*>(it->second);
            if(pDefectResult == NULL) continue;
            if (pDefectResult == NULL) continue;
            if (CDefectMap::FilterDefect(pDefectFilter, pDefectResult)==-1) continue;
            //if (CDefectMap::FilterDefect(pDefectFilter, pDefectResult) == -1) continue;
            if (pDefectResult->nUMOriginX >= nDefectPosX - nMarginX &&
                pDefectResult->nUMOriginX <= nDefectPosX + nMarginX &&
                pDefectResult->nUMOriginY >= nDefectPosY - nMarginY &&
            if (pDefectResult->nUMOriginX >= nDefectPosX - nMarginX &&
                pDefectResult->nUMOriginX <= nDefectPosX + nMarginX &&
                pDefectResult->nUMOriginY >= nDefectPosY - nMarginY &&
                pDefectResult->nUMOriginY <= nDefectPosY + nMarginY)
            {
                bFind = TRUE;
                m_pView->UpdateSelectDefectList(pDefectResult->nDefectIdx);
                m_pView->UpdateSelectDefectMap(pDefectResult);
                m_pView->UpdateSelectDefectInfoMap(pDefectResult); //taek 201214 ì„ íƒí•œ ë””펙의 ì •보를 ë„˜ê¸´ë‹¤
                m_pView->UpdateSelectDefectInfo(pDefectResult->nDefectIdx); //taek 201214 ì„ íƒí•œ ë””펙의 ì‚¬ì§„ ì •보를 ë„˜ê¸´ë‹¤.
                nSelectedModuleIndex = Module_GetSelectedModuleIndex();
                // ì´ë™í•  ëª¨ë“ˆ ì¸ë±ìФ ì•Œì•„내기 (모듈별 limit ë°ì´í„° ì‚¬ìš©)
                int nGoModuleIndex = Module_GetMoveIndex(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
                //int nGoModuleIndex = Module_GetMoveIndex(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
                int nGoModuleIndex = nSelectedModuleIndex;
                // ì„ íƒ ëª¨ë“ˆì„ ì œì™¸í•œ ë‚˜ë¨¸ì§€ í™ˆë™ìž‘ ìž‘동
                if(nGoModuleIndex >= 0)
                if (nGoModuleIndex >= 0)
                {
                    Motor_HomeGoExceptOne(nGoModuleIndex, pDefectFilter->bAutoSelectCamera, TRUE);
                }
@@ -6677,21 +6679,145 @@
                    break;
                }
                if(IsManualProcessMode() != FALSE){
                if (IsManualProcessMode() != FALSE) {
                Motor_CameraGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera,pDefectResult );
                    Motor_CameraGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera, pDefectResult);
                    return;
                }
            //    Motor_CameraCenterGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
                //    Motor_CameraCenterGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
                // [2017:1:19]-[WEZASW] : WSI Manual Measurement ê¸°ëŠ¥ ì¶”ê°€
                    // [2017:1:19]-[WEZASW] : WSI Manual Measurement ê¸°ëŠ¥ ì¶”ê°€
                if (pDefectFilter->bUseWSI == TRUE && pDefectFilter->bUseWSIMeasurement == TRUE)
                {
                    WSI_SetManualMeasurement(nGoModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectResult->dUMCenterOriginX, pDefectResult->dUMCenterOriginY, TRUE);
                    WSI_SetManualMeasurement(nGoModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, (int)pDefectResult->dUMCenterOriginX, (int)pDefectResult->dUMCenterOriginY, TRUE);
                }
                break;
            }
        }
    }
    //User
    if (bFind == FALSE)
    {
        CDefectResult* pDefectResult = NULL;
        VectorReviewResult *pVecReviewResult = pGlassResult->GetVectorUserResult();
        if (pVecReviewResult == NULL) return;
        for (VectorReviewResultIt it = pVecReviewResult->begin(); it != pVecReviewResult->end(); it++)
        {
            CReviewResult *pReviewResult = static_cast<CReviewResult*>(&(*it));
            for (VectorSReviewResultIt its = pReviewResult->m_vecSReviewResult.begin(); its != pReviewResult->m_vecSReviewResult.end(); its++)
            {
                if (its->nUMOriginX >= nDefectPosX - nMarginX &&
                    its->nUMOriginX <= nDefectPosX + nMarginX &&
                    its->nUMOriginY >= nDefectPosY - nMarginY &&
                    its->nUMOriginY <= nDefectPosY + nMarginY)
                {
                    bFind = TRUE;
                    pDefectResult = &(*its);
                    m_pView->UpdateSelectDefectMap(pDefectResult);
                    nSelectedModuleIndex = Module_GetSelectedModuleIndex();
                    // ì´ë™í•  ëª¨ë“ˆ ì¸ë±ìФ ì•Œì•„내기 (모듈별 limit ë°ì´í„° ì‚¬ìš©)
                    //int nGoModuleIndex = Module_GetMoveIndex(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
                    int nGoModuleIndex = nSelectedModuleIndex;
                    // ì„ íƒ ëª¨ë“ˆì„ ì œì™¸í•œ ë‚˜ë¨¸ì§€ í™ˆë™ìž‘ ìž‘동
                    if (nGoModuleIndex >= 0)
                    {
                        Motor_HomeGoExceptOne(nGoModuleIndex, pDefectFilter->bAutoSelectCamera, TRUE);
                    }
                    else
                    {
                        g_pLog->DisplayMessage(_T("[Error] Can't Move Motor to Home"));
                        break;
                    }
                    if (IsManualProcessMode() != FALSE) {
                        Motor_CameraGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera, NULL, 0, 0);
                        return;
                    }
                    //    Motor_CameraCenterGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
                        // [2017:1:19]-[WEZASW] : WSI Manual Measurement ê¸°ëŠ¥ ì¶”ê°€
                    if (pDefectFilter->bUseWSI == TRUE && pDefectFilter->bUseWSIMeasurement == TRUE)
                    {
                        WSI_SetManualMeasurement(nGoModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectResult->dUMCenterOriginX, pDefectResult->dUMCenterOriginY, TRUE);
                    }
                    break;
                }
            }
        }
    }
    //UserWSI
    if (bFind == FALSE)
    {
        CDefectResult* pDefectResult = NULL;
        VectorReviewResult *pVecReviewResult = pGlassResult->GetVectorUserWsiResult();
        if (pVecReviewResult == NULL) return;
        for (VectorReviewResultIt it = pVecReviewResult->begin(); it != pVecReviewResult->end(); it++)
        {
            CReviewResult *pReviewResult = static_cast<CReviewResult*>(&(*it));
            for (VectorSReviewResultIt its = pReviewResult->m_vecSReviewResult.begin(); its != pReviewResult->m_vecSReviewResult.end(); its++)
            {
                if (its->nUMOriginX >= nDefectPosX - nMarginX &&
                    its->nUMOriginX <= nDefectPosX + nMarginX &&
                    its->nUMOriginY >= nDefectPosY - nMarginY &&
                    its->nUMOriginY <= nDefectPosY + nMarginY)
                {
                    bFind = TRUE;
                    pDefectResult = &(*its);
                    m_pView->UpdateSelectDefectMap(pDefectResult);
                    nSelectedModuleIndex = Module_GetSelectedModuleIndex();
                    // ì´ë™í•  ëª¨ë“ˆ ì¸ë±ìФ ì•Œì•„내기 (모듈별 limit ë°ì´í„° ì‚¬ìš©)
                    //int nGoModuleIndex = Module_GetMoveIndex(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
                    int nGoModuleIndex = nSelectedModuleIndex;
                    // ì„ íƒ ëª¨ë“ˆì„ ì œì™¸í•œ ë‚˜ë¨¸ì§€ í™ˆë™ìž‘ ìž‘동
                    if (nGoModuleIndex >= 0)
                    {
                        Motor_HomeGoExceptOne(nGoModuleIndex, pDefectFilter->bAutoSelectCamera, TRUE);
                    }
                    else
                    {
                        g_pLog->DisplayMessage(_T("[Error] Can't Move Motor to Home"));
                        break;
                    }
                    if (IsManualProcessMode() != FALSE) {
                        Motor_CameraGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera, NULL, 0, 0);
                        return;
                    }
                    //    Motor_CameraCenterGo(nSelectedModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectFilter->bAutoSelectCamera);
                        // [2017:1:19]-[WEZASW] : WSI Manual Measurement ê¸°ëŠ¥ ì¶”ê°€
                    if (pDefectFilter->bUseWSI == TRUE && pDefectFilter->bUseWSIMeasurement == TRUE)
                    {
                        WSI_SetManualMeasurement(nGoModuleIndex, pDefectResult->nUMOriginX, pDefectResult->nUMOriginY, pDefectResult->dUMCenterOriginX, pDefectResult->dUMCenterOriginY, TRUE);
                    }
                    break;
                }
            }
        }
    }
}
@@ -7297,12 +7423,12 @@
    
    if (dDefectPosX > dXposPlusLimitPos|| dDefectPosX<dXposMinusLimitPos|| dDefectPosY > dYposPlusLimitPos|| dDefectPosY < dYposMinusLimitPos)
    {
        IDNO == AfxMessageBox(_T("Limit을 ì´ˆê³¼ í•˜ì—¬ ê°ˆìˆ˜ ì—†ìŠµë‹ˆë‹¤."), MB_YESNO | MB_ICONQUESTION);
        g_pLog->DisplayMessage(_T("Limit ì´ˆê³¼"));
        return FALSE;
    }
//     if (dDefectPosX > dXposPlusLimitPos|| dDefectPosX<dXposMinusLimitPos|| dDefectPosY > dYposPlusLimitPos|| dDefectPosY < dYposMinusLimitPos)
//     {
//         IDNO == AfxMessageBox(_T("Limit을 ì´ˆê³¼ í•˜ì—¬ ê°ˆìˆ˜ ì—†ìŠµë‹ˆë‹¤."), MB_YESNO | MB_ICONQUESTION);
//         g_pLog->DisplayMessage(_T("Limit ì´ˆê³¼"));
//         return FALSE;
//     }
    double n1stGantryXpos, n1stGantryYpos, n2ndGantryXpos, n2ndGantryYpos;
    double dDistance,dCameraDistance;
@@ -7589,44 +7715,48 @@
        dPosX += MagOffsetX * 1000;//GlassOffsetX*1000+MagOffsetX*1000;
        dPosY+= MagOffsetY * 1000;//GlassOffsetY*1000+MagOffsetY*1000;
        double xpostemp = 0;
        double ypostemp = 0;
        GetOffSetValue(nModuleIndex, pDefectResult->nAOICameraIdx, pDefectResult->nAOIScanIdx, nDefectPosX/1000, xpostemp, ypostemp);
        xpostemp = floor(xpostemp * 1000);
        ypostemp = floor(ypostemp * 1000);
        //210127
        if (m_pDoc->System_GetMotorInfo()->GetOriginDirection() == 2)
        if (pDefectResult != NULL)
        {
            if (nModuleIndex == 0)
            double xpostemp = 0;
            double ypostemp = 0;
            GetOffSetValue(nModuleIndex, pDefectResult->nAOICameraIdx, pDefectResult->nAOIScanIdx, nDefectPosX / 1000, xpostemp, ypostemp);
            xpostemp = floor(xpostemp * 1000);
            ypostemp = floor(ypostemp * 1000);
            //210127
            if (m_pDoc->System_GetMotorInfo()->GetOriginDirection() == 2)
            {
                dPosX += xpostemp;
                dPosY += ypostemp;
                if (nModuleIndex == 0)
                {
                    dPosX += xpostemp;
                    dPosY += ypostemp;
                }
                else
                {
                    dPosX += xpostemp * -1;
                    dPosY += ypostemp;
                }
            }
            else
            {
                dPosX += xpostemp * -1;
                dPosY += ypostemp;
                if (nModuleIndex == 0)
                {
                    dPosX += xpostemp;
                    dPosY += ypostemp * -1;
                }
                else
                {
                    dPosX += xpostemp * -1;
                    dPosY += ypostemp * -1;
                }
            }
        }
        else
        {
            if (nModuleIndex == 0)
            {
                dPosX += xpostemp;
                dPosY += ypostemp * -1;
            }
            else
            {
                dPosX += xpostemp * -1;
                dPosY += ypostemp * -1;
            }
        }
        g_pLog->DisplayMessage(_T("[OFFSetOn]MotorOffset: %.3lf, %.3lf MagOffset: %.3lf, %.3lf Glass Pos : %.3lf, %.3lf"), xpostemp, ypostemp, MagOffsetX,MagOffsetY,dPosX/1000.0,dPosY/1000.0);
     //dPosX= ApplyMagAndGlassOffset(nModuleIndex,0,dPosX, dPosY);
     //dPosY= ApplyMagAndGlassOffset(nModuleIndex,1,dPosX, dPosY);
            g_pLog->DisplayMessage(_T("[OFFSetOn]MotorOffset: %.3lf, %.3lf MagOffset: %.3lf, %.3lf Glass Pos : %.3lf, %.3lf"), xpostemp, ypostemp, MagOffsetX, MagOffsetY, dPosX / 1000.0, dPosY / 1000.0);
            //dPosX= ApplyMagAndGlassOffset(nModuleIndex,0,dPosX, dPosY);
            //dPosY= ApplyMagAndGlassOffset(nModuleIndex,1,dPosX, dPosY);
        }
    }
    return Motor_CameraGo(nModuleIndex, dPosX/1000.0, dPosY/1000.0, bAutoSelectCamera, bGoEnd);
ReviewSystem/ReviewSystem/SequenceProcessor.cpp
@@ -86,6 +86,7 @@
    //#3584 210817 LYW CF AOI Review ì‹œë®¬ë ˆì´ì…˜ ê¸°ëŠ¥ ì •상화 ADD START
    m_bSimulationMode = FALSE;
    //#3584 210817 LYW CF AOI Review ì‹œë®¬ë ˆì´ì…˜ ê¸°ëŠ¥ ì •상화 ADD END
    m_bReviewComplete = FALSE;
    InitializeCriticalSection(&m_csProcessStatus);
}
ReviewSystem/ReviewSystem/SequenceProcessor.h
@@ -748,6 +748,8 @@
    //WSI END ì²´í¬ë¥¼ ìœ„한 í•¨ìˆ˜ 190725 chm
    int     GetCheckWSIEnd(){return m_nCheckWSIEnd;}; // wsi end ì—¬ë¶€ 
    void    SetCheckWSIEnd(int nCheck){ m_nCheckWSIEnd=nCheck;};  //wsi end ì—¬ë¶€ 
    int        GetReviewComplete() { return m_bReviewComplete; }
    void    SetReviewComplete(BOOL bValue) { m_bReviewComplete = bValue; }
    int        GetWsiType(){return m_nWsiTyep;};
    void    SetWsiType(int i){ m_nWsiTyep=i;};
    void    SendWsiErrorAlarm();
@@ -808,4 +810,5 @@
    //#3584 210817 LYW CF AOI Review ì‹œë®¬ë ˆì´ì…˜ ê¸°ëŠ¥ ì •상화 ADD START
    BOOL                m_bSimulationMode;
    //#3584 210817 LYW CF AOI Review ì‹œë®¬ë ˆì´ì…˜ ê¸°ëŠ¥ ì •상화 ADD END
    BOOL                m_bReviewComplete;
};
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -665,10 +665,12 @@
        //    m_pSP2P->ISP2P_GetWSIControl(1)->SendWsiAfmSafePosMove();
        //}
        //Sleep(5000);
        if (GetProcessStatus() != ProcessReviewEnd_CPJT && GetProcessStatus() != ProcessReviewUnloding_CPJT)
        //if (GetProcessStatus() != ProcessReviewEnd_CPJT && GetProcessStatus() != ProcessReviewUnloding_CPJT)
        if (GetReviewComplete() == FALSE)
        {
            SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
            SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
            SetReviewComplete(TRUE);
        }
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
@@ -939,6 +941,8 @@
    SetCheckWSIEnd(-1); //190726
    SetWsiType(-1);    //wsi reflow
    SetLastPointCheck(FALSE);
    SetReviewComplete(FALSE);
    bFileFind = FALSE;
@@ -1745,7 +1749,8 @@
    m_pDitGlassRaw->GetGlassData()->m_nReviewNum = m_pSP2P->ISP2P_GetReviewProcessor()->GetPlanReviewCount();
    //SendDVDataToSignalControl(); 
    if (GetLastPointCheck() == FALSE)
    //if (GetLastPointCheck() == FALSE)
    if (GetReviewComplete() == FALSE)
    {
        //#3584 210817 LYW CF AOI Review ì‹œë®¬ë ˆì´ì…˜ ê¸°ëŠ¥ ì •상화 MOD START
        if (GetSimulationMode() == FALSE)
@@ -1753,6 +1758,7 @@
            SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
            SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
            SetReviewComplete(TRUE);
        }
        //#3584 210817 LYW CF AOI Review ì‹œë®¬ë ˆì´ì…˜ ê¸°ëŠ¥ ì •상화 MOD END
        //original