SDC C-Project CF Review 프로그램
LYW
2022-04-01 29b057b25d57dab9ed33aa2a1bc22b6dc68e1a4d
Ongoing70 #4006 CF AOI Review Align Fail시 재판정 Off 기능 추가

1. Align Fail 시 재판정 프로세스 Off
1개 파일 추가됨
3개 파일 변경됨
851 ■■■■■ 파일 변경됨
DitGlassRawMessenger/Extern/DitGlassRawStruct.h 40 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/Extern/DitGlassRawStruct_0331.h 750 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DitGlassRawStruct.h 40 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 21 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/Extern/DitGlassRawStruct.h
@@ -61,6 +61,11 @@
    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];
@@ -120,7 +125,9 @@
    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;
@@ -175,7 +182,7 @@
    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];
@@ -195,15 +202,22 @@
    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
{
@@ -257,6 +271,11 @@
    int            m_nDefectNumTypeMD;
    int            m_nDefectNumTypeCD;
    int            m_nDefectNumTypeMC;
    /* <KYH 211129 : #3796 ADD Start> */
    int            m_nDefectNumJudgeND;
    /* <KYH 211129 : #3796 ADD End> */
    //DUMY DATA
    int            Dumy_int[9];
    //Mura Data nwh 0404 
    char        m_strProImage[32];
@@ -308,7 +327,9 @@
    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별 ìˆ˜
@@ -512,7 +533,10 @@
    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;
};
@@ -565,7 +589,9 @@
    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;
@@ -573,14 +599,18 @@
    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
{
DitGlassRawMessenger/Extern/DitGlassRawStruct_0331.h
»õ ÆÄÀÏ
@@ -0,0 +1,750 @@
#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 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;
    //설비정보
    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;
    int            m_nDefectNumJudgeOKWhite;
    int            m_nDefectNumJudgeOKBlack;
    int            m_nDefectNumJudgeNG;
    int            m_nDefectNumJudgeRW;
    int            m_nDefectNumJudgeRP;
    int            m_nDefectNumJudgeRV;
    int            m_nDefectNumJudgeTR;
    int            m_nDefectNumJudgePR;
    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];
    //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;
    int m_nRawMergeNum;
    BOOL m_bRawMergeRead;
    //210203 CJH - CutOff ëŒ€ìƒ ê²°í•¨ ìˆ˜
    int m_nCutOffDefectNum;
    //210323 CJH - Server/Frame Shrink ì •ë³´ ì¶”ê°€
    char m_strShrinked[6];
    //210326 CJH - RAW ìž…ë ¥ Defect ìˆ˜ëŸ‰ ìƒí•œ ì‚¬ìš©ì—¬ë¶€
    BOOL m_bRawCutoff;
};
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;
    //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;
    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;
    _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;
    int m_nRawMergeMaxDataNum;
    //Char ê¸°ì¤€ ìžë£Œê°€ ìžˆëŠ” ì‹œìž‘ ìœ„치 [김태현 2018/11/12]
    int m_nGlassDataPoint;
    int m_nBlockDataPoint;
    int m_nCellDataPoint;
    int m_nDefectDataPoint;
    int m_nStackDataPoint;
    int m_nRawMergeDataPoint;
    int m_nSizeOfGlassData;
    int m_nSizeOfBlockData;
    int m_nSizeOfCellData;
    int m_nSizeOfDefectData;
    int m_nSizeOfStackData;
    int m_nSizeOfRawMergeData;
};
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;
};
ReviewSystem/ReviewSystem/DitGlassRawStruct.h
@@ -61,6 +61,11 @@
    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];
@@ -120,7 +125,9 @@
    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;
@@ -175,7 +182,7 @@
    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];
@@ -195,15 +202,22 @@
    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
{
@@ -257,6 +271,11 @@
    int            m_nDefectNumTypeMD;
    int            m_nDefectNumTypeCD;
    int            m_nDefectNumTypeMC;
    /* <KYH 211129 : #3796 ADD Start> */
    int            m_nDefectNumJudgeND;
    /* <KYH 211129 : #3796 ADD End> */
    //DUMY DATA
    int            Dumy_int[9];
    //Mura Data nwh 0404 
    char        m_strProImage[32];
@@ -308,7 +327,9 @@
    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별 ìˆ˜
@@ -512,7 +533,10 @@
    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;
};
@@ -565,7 +589,9 @@
    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;
@@ -573,14 +599,18 @@
    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
{
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -1691,6 +1691,10 @@
        if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewEndAck_CPJT))
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Send Review End Ack!"));
    }
    CGlassResult* pGlassResult = m_pSP2P->ISP2P_GetCurrentGlassResult();
    if (pGlassResult == NULL) return;
    //#3584 210817 LYW CF AOI Review ì‹œë®¬ë ˆì´ì…˜ ê¸°ëŠ¥ ì •상화 MOD END
    //original
//     if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewEndAck_CPJT))
@@ -1710,7 +1714,19 @@
    {
        Sleep(1000);
    }
    ReJudgeProcessing(m_pDitGlassRaw);
    /*< LYW 20220401 - ##4006 MOD Start >*/
    if (pGlassResult->m_AlignResult.GetResultCode() == Align_Success)
    {
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Review ReJudgeProcessing Startl!"));
        ReJudgeProcessing(m_pDitGlassRaw);
    }
    else
    {
        m_pSP2P->ISP2P_DisplayMessage(_T("Align Code = %d, ReJudgeProcessing SKIPl!"), pGlassResult->m_AlignResult.GetResultCode());
    }
    /*< LYW 20220401 - ##4006 MOD End >*/
    //Origin
    //ReJudgeProcessing(m_pDitGlassRaw);
    m_pDitGlassRaw->GetGlassData()->m_tmReviewEnd = CTime::GetCurrentTime();
    if (m_pDitGlassRaw->isConnect() != FALSE) 
    {
@@ -1736,9 +1752,6 @@
//         SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
//         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
    }
    CGlassResult* pGlassResult = m_pSP2P->ISP2P_GetCurrentGlassResult();
    if (pGlassResult==NULL) return;
    
    // review camera stop
    ReviewCamera_CameraControl(CameraControlStop);