SDC C-Project CF Review 프로그램
20개 파일 변경됨
1075 ■■■■■ 파일 변경됨
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawDemo.cpp 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
Internal_Library/CHWsiControls/WsiControl_Dit.cpp 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
Internal_Library/Include/CHWsiControls/WsiControlInfo.h 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/DitGlassRawStruct.h 594 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/bin/ReviewHistroy.exe 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewRecipeEditor/DlgCommon.cpp 27 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewRecipeEditor/DlgCommon.h 8 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewRecipeEditor/ReviewRecipeEditor.rc 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewRecipeEditor/resource.h 5 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.cpp 9 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.h 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.cpp 277 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.h 30 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewSystem.vcxproj 2 ●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor.cpp 17 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor.h 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 63 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp
@@ -21,6 +21,10 @@
#define LOCAL_AOIRAWDFS_PATH        "D:\\DIT_ResultData\\Raw"
#define LOCAL_AOIRAWBIN_PATH        "D:\\DIT_ResultData\\RawBin"
//TEST
// #define NETWORK_AOIRAWDFS_PATH        "D:\\DIT_ResultData\\Raw"
// #define NETWORK_AOIRAWBIN_PATH        "D:\\DIT_ResultData\\RawBin"
#define NETWORK_AOIRAWDFS_PATH        "\\\\126.100.100.1\\d\\DIT_ResultData\\Raw"
#define NETWORK_AOIRAWBIN_PATH        "\\\\126.100.100.1\\d\\DIT_ResultData\\RawBin"
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawDemo.cpp
@@ -16,6 +16,7 @@
#define LOCAL_AOIRAWDFS_PATH        "D:\\DIT_ResultData\\Raw"
#define LOCAL_AOIRAWBIN_PATH        "D:\\DIT_ResultData\\RawBin"
#define NETWORK_AOIRAWDFS_PATH        "\\\\126.100.100.1\\d\\DIT_ResultData\\Raw"
#define NETWORK_AOIRAWBIN_PATH        "\\\\126.100.100.1\\d\\DIT_ResultData\\RawBin"
Internal_Library/CHWsiControls/WsiControl_Dit.cpp
@@ -159,6 +159,12 @@
    {
        m_pWC2P->IWC2P_DisplayMessage(m_nIndex, _T("[WsiControl] [%02d] MODULE_INDEX Connection Fail!"), m_nIndex);
    }
    /*< LYW 20220421 - #4086 ADD Start >*/
    int nWSIVersion = pPacket->GetInt(0);
    m_pWC2P->IWC2P_SetWSIVersion(m_nIndex, nWSIVersion);
    m_pWC2P->IWC2P_DisplayMessage(m_nIndex, _T("[WsiControl] [%02d] WSI S/W Version Set = %d"), m_nIndex, nWSIVersion);
    /*< LYW 20220421 - #4086 ADD End >*/
    
    return;
@@ -646,6 +652,7 @@
        if (nIdx>=int(vecUMOriginX.size()) || nIdx>=int(vecUMOriginY.size())) continue;
        pPacket->SetInt(nIdx);
        pPacket->SetInt(0);
        pPacket->SetInt(vecUMOriginX.at(nIdx));
        pPacket->SetInt(vecUMOriginY.at(nIdx));
    }
Internal_Library/Include/CHWsiControls/WsiControlInfo.h
@@ -171,6 +171,7 @@
    virtual BOOL    IWC2P_SetMeasureInfo(int nIndex, int nPointIndex, const CString& strImagFilename, int nWsiType) = 0;
    virtual BOOL    IWC2P_GetMeasureInfo(int nIndex, int nPointIndex, short& nLoc, short& nOptic, short& nGray, CString& strCellID) = 0;
    virtual int        IWC2P_GetCurrentStatus(int nIndex, CString& strGlassID, CString& strRecipeID, int& nType) = 0;
    virtual void    IWC2P_SetWSIVersion(int nModuleIndex, int nVersion) = 0;
    virtual void    IWC2P_SetConnectedStatus(int nIndex, int nConnectStatus) = 0;
    virtual void    IWC2P_RecvMeasureMessage(int nIndex, int nMessageType, int nMessageResult) = 0;
    virtual void    IWC2P_SetMeasureResult(int nIndex, const SWsiResult& measureResut) = 0;
ReviewHistory/ReveiwHistory/DitGlassRawStruct.h
@@ -48,78 +48,38 @@
        memset(this, 0, sizeof(_grmGlassData));
    }
    //int
    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;
    int            m_nVcrResultCode;
    //결함 갯수 관리 변수
    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_nDefectNumJudgeLine;
    int            m_nDefectNumStackTD;
    int            m_nDefectNumStackSD;
    int            m_nDefectNumStackPD;
    int            m_nDefectNumStackSP;
    int            m_nSlot_No;
    int            m_nReviewNum;
    int            m_nStackNum;
    int            m_nCutOffDefectNum;
    int            m_nRawMergeNum;
    //KYH ND 판정 추가
    int            m_nDefectNumJudgeND;
    //DUMY DATA
    int            Dumy_int[9];
    //double
    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;
    //DUMY DATA
    double        Dumy_double[10];
    //char
    //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];                    
@@ -130,16 +90,76 @@
    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;
    /*< 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
@@ -149,6 +169,7 @@
    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];
@@ -161,53 +182,42 @@
    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];
    char m_strShrinked[6];
     //1226NWH
    char m_strReadingFlag[2]; 
    char m_StrMergeList[10][12];
    //DUMY DATA
    char m_strRawMergeStepID[32];
    char Dumy_char[104];
    //unsigned char
    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];
    //DUMY DATA
    unsigned char Dumy_unsigned_char[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
    //CTime
    CTime    m_tmGlassLoading;            //3. START_TIME
    CTime    m_tmInspectionStart;            //3. START_TIME
    CTime    m_tmInspectionEND;            //4. END_TIME
    CTime    m_tmReviewLoading;
    CTime    m_tmReviewEnd;
    //DUMY DATA
    CTime    Dumy_CTime[10];
    //short
    short        m_nCameraNum;
    short        m_nScanNum;
    //DUMY DATA
    short        Dumy_short[10];
    //BYTE
    BYTE m_nUniqueID[4];
    BYTE m_nGlassDataBitSignal[4];
    //DUMY DATA
    BYTE Dumy_BYTE[10];
    int m_nSlot_No;
    //BOOL
    BOOL m_bJob_end;
    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;
    //DUMY DATA
    BOOL Dumy_BOOL[9];
    /* < KJG 20220225 - #3850 ADD Start >*/
    char m_strRawMergeStepID[32];
    /* < KJG 20220225 - #3850 ADD End >*/
};
struct _grmBlockData
{
@@ -215,12 +225,10 @@
    {
        memset(this, 0, sizeof(_grmBlockData));
    }
    //char
    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
    int m_nGlassIdDCR;                    //22. GLASS_ID_DCR
};
struct _grmCellData
@@ -230,27 +238,32 @@
        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;                // 몇 번째 모델인가?
    //int
    int            m_nCellID;                            //1. PANEL_ID
    int            m_rectCellLeft;
    int            m_rectCellTop;
    int            m_rectCellRight;
    int            m_rectCellBottom;
    /*Judgement*/
    int            m_nJudgement;
    int            m_nJudgeFlag;
    int            m_nJudgeGlade;
    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;
@@ -258,38 +271,12 @@
    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_nDefectNumJudgeLine;
    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;
    //KYH ND 판정 추가
    /* <KYH 211129 : #3796 ADD Start> */
    int            m_nDefectNumJudgeND;
    /* <KYH 211129 : #3796 ADD End> */
    //DUMY DATA
    int            Dumy_int[9];
    //double
    //DUMY DATA
    double            Dumy_double[10];
    //char
    char        m_strCellName[32];
    //Mura Data nwh 0404 
    char        m_strProImage[32];
    char        m_strAvgGray_0[12];
@@ -301,6 +288,7 @@
    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
@@ -310,6 +298,7 @@
    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
@@ -319,6 +308,7 @@
    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
@@ -328,28 +318,33 @@
    char        m_strFFTVah_3[12];
    char        m_strFFTVaq_3[12];
    char        m_strFFTPK_3[12];
    //DUMY DATA
    char        Dumy_char[256];
    //unsigned char
    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
    //CTime
    // Filtering된 Stack별 수
    int            m_nDefectTDCount;
    int            m_nDefectSDCount;
    int            m_nDefectPDCount;
    int            m_nDefectSPCount;
    //short
    short        m_nModelIdx;                // 몇 번째 모델인가?
    //DUMY DATA
    short        Dumy_short[10];
    // Gate/Data 총 갯수
    int            m_nGateNum;
    int            m_nDataNum;
    //BYTE
    //DUMY DATA
    BYTE        Dumy_BYTE[10];
    //BOOL
    //DUMY DATA
    BOOL        Dumy_BOOL[10];
    // 210129 CJH - Cell Origin 방향
    int            m_nCellXDir;
    int            m_nCellYDir;
};
struct _grmDefectReviewData
@@ -359,64 +354,46 @@
        memset(this, 0, sizeof(_grmDefectReviewData));
    }
    //////////////////////////////////////////////////////////////////////////
    //여기서 부터 리뷰 영역 [김태현 2019/1/19]
    ditRaw::ReviewPlanType            m_nPlanType    ;    
    //int
    int            m_nResultCode;  //0:None, 1:Success
    int            m_nShotIndex; //리뷰 찍은 순번 [김태현 2018/12/5]
    int            m_nModuleIndex;
    int            m_nMagnificIndex;
    int            m_nMeasure_Index;
    int            m_nMeasure_ResultCode; //0:None, 1:Success
    int            m_nWsi_ResultCode; //0:None, 1:Success
    int            m_nWsi_Type;                                    // 함몰 / 돌기
    int            m_nWsiReflowPositionIndex;                    // WsiReflowPositionIndex
    int            m_nWsi_pReflowResultData[8];
    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
    int            m_nReflow_Side;
    int            m_nReflow_InspectionMode;
    //DUMY DATA
    int            Dumy_int[10];
    //double
    double        m_dWsi_DamDistance;
    double        m_dWsiMmMotorX;                                // WSI 모터 좌표 20180223 HJH
    double        m_dWsiMmMotorY;
    //DUMY DATA
    double        Dumy_double[10];
    //char
    char        m_strRevImageName[256];
    char        m_strRevImagePath[256];
    char        m_strWsi_2DImageFilename[256];
    char        m_strWsi_3DImageFilename[256];
    //DUMY DATA
    char        Dumy_char[256];
    //unsigned char
    //CTime
    //short
    //BYTE
    //DUMY DATA
    BYTE Dumy_BYTE[10];
    //BOOL
    //DUMY DATA
    BOOL Dumy_BOOL[10];
    //float
    float        m_fManification;
    float        m_fManificResoultion;
    float        m_fMesure_ResultData[8];    // 0:Type, 1:ShiftX, 2:ShiftY
    float        m_fWsi_ResultData[8];            // 0:Type, 1:Height(um), 2:Width
    float        m_fWsiManification;                            // WSI 배율
    float        m_fReflow_LinePosData[8];
    //DUMY DATA
    float        Dumy_float[10];
    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
@@ -426,81 +403,20 @@
        memset(this, 0, sizeof(_grmDefectData));
    }
    _grmDefectReviewData m_ReviewDefect;
    //int
    int                m_nDefectIdx;                // 카메라에서의 결함 인덱스 201207 CJH - 자릿 수 넘침. int형으로 변경
    int                m_nPixelConv;                // pixel 단위 좌표
    int                m_nPixelScan;                // pixel 단위 좌표
    int                m_nDefectRScale;            // 픽셀단위 결함 높이    -------------------------RS
    int                m_nPixelGlassStart;            // Glass 시작 픽셀
    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단위 크기.
    int                m_nPadRegionIdx;            // PAD 영역 인덱스
    int                m_nUMCellX;                    // 셀 원점 기준 x 좌표
    int                m_nUMCellY;                    // 셀 원점 기준 y 좌표
    int                m_nUMShotX;                    // 샷 기준 X좌표
    int                m_nUMShotY;                    // 샷 기준 Y좌표
    int                m_StackInfo;                // Stack Flag
    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 핵 높이
    int                m_nDefectMerge;        // 현재 디펙의 머지 여부
    int                m_nPixelSizeOrigin;
    int                m_nScratchRatio;
    int                m_nDensity;            // 원형 결함 구분을 위한 밀도 [2017.8.2 bhs]
    int                m_nAngle;                    // 각도
    int                m_nMajor;                    // 장축 길이(Long)
    int                m_nMinor;                    // 단축 길이(Short)
    int                m_nCompact;                    // Blob 장축을 지름으로 하는 원의 넓이와 Blob 넓이의 비율
    int                m_nThickness;                // Blob 넓이와 장축의 비율 (Area / Major)
    int                m_nHliLayers;                // 해당결함에 포함된 레이어 bit처리
    int                m_nAlignRectLeft;
    int                m_nAlignRectTop;
    int                m_nAlignRectBottom;
    int                m_nAlignRectRight;
    //DUMY DATA
    int                Dumy_int[10];
    //double
    double            m_dScanResolution;
    double            m_dConvResolution;
    //DUMY DATA
    double            Dumy_double[10];
    //char
    char            m_strStackFirst[60];            // Stack Step. //201221 CJH - 최대 사이즈 60bytes
    char            m_strUnitID[16];                // 유닛아이디
    char            m_strDefectCode[32];            // Defect Code
    char            m_strAoiImageName[256];            // Defect Image Name(CCD Image)
    char            m_strDefectName[16];
    char            m_strDefectType[16];
    char            m_strAoiImagePath[255];
    char            m_strReviewImagePath[255];
    char            m_strLNDefectCode[12];
    //DUMY DATA
    char             Dumy_char[256];
    //unsigned char
    //CTime
    //short
    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
@@ -512,62 +428,117 @@
    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라인(얼라인 보정 후)
    short/*MAP16_DefectClass*/        m_DefectClass;                // BOE Defect Class 16등분 구분
    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를 선택하는 인덱스.
    short/*ReKind*/            m_DefectKind;                // 결함 종류
    short            m_nHliLevelIdx;                // 몇 번째 레벨(채널)인가?
    short/*LineDefectType*/ m_LineDefectType;
    //DUMY DATA
    short            Dumy_short[100];
    //BYTE
    //DUMY DATA
    BYTE Dumy_BYTE[10];
    //BOOL
    BOOL            m_bDefectCutoff;            // 컷 오프 디펙(TRUE= Cutoff, FALSE)
    BOOL            m_bRealStack;                // Stack 머지에 의한 TD(TRUE) 인지, 필터링에 의한 TD(FALSE)구분할 수 있다.
    BOOL            m_bMergeState;                // Merge Status
    BOOL            m_bShrinked;                //210323 CJH - Frame Shrink 정보 추가
    //DUMY DATA
    BOOL Dumy_BOOL[10];
    //float
    //CRect
    CRect            m_RectUM;                    // 디펙 센터 기준 사각형.
    //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;
};
@@ -613,29 +584,33 @@
{
    //공유 메모리 생성할 공간 결정 [김태현 2018/11/12]
    size_t m_nGlassRawDataSize;
    //int
    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;
    //DUMY DATA
    int            Dumy_int[10];
    /*< KJG 20211024 - #3487 ADD End >*/
};
struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand
{
@@ -782,37 +757,24 @@
    size_t m_nGlassRawDataSize;
    //int
    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;
    //DUMY DATA
    int            Dumy_int[10];
    //DUMY DATA
    double        Dumy_double[10];
    //DUMY DATA
    char        Dumy_char[256];
    //DUMY DATA
    short        Dumy_short[10];
    //DUMY DATA
    BYTE        Dumy_BYTE[10];
    //DUMY DATA
    BOOL        Dumy_BOOL[10];
private:
    //bool
    bool m_bRefAlloc;
};
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
@@ -4228,6 +4228,16 @@
    bReturn = macroFile.Write(strFilePath);
    /*< LYW 20220525 - #4158 ADD Start >*/
    CString strRTMSBackUpFilePath;
    strRTMSBackUpFilePath.Format(_T("%s\\%s"), _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT, REVIEW_OFFSET_CONFIGFILE_NAME);
    if (bReturn)
    {
        CopyFile(REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME, strRTMSBackUpFilePath, FALSE);
    }
    /*< LYW 20220525 - #4158 ADD End >*/
    if (bReturn)
    {
        /*< LYW 20211028 - #3684 ADD Start >*/
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h
@@ -27,6 +27,9 @@
#define    REVIEW_OFFSET_CONFIGFILE_PATH _T("D:\\DIT_Review\\ReviewServerConfig\\") //210805
#define    REVIEW_OFFSET_CONFIGFILE_NAME _T("ReviewOffSet.cfg")
#define REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME _T("D:\\DIT_Review\\ReviewServerConfig\\ReviewOffSet.cfg")
/*< LYW 20220525 - #4158 ADD Start >*/
#define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT    _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\ReviewServerConfig")
/*< LYW 20220525 - #4158 ADD End >*/
#define    REVIEW_OFFSET_BACKUP_FORDER_NAME _T("OffsetBackup")
#define    REVIEW_OFFSET_BACKUP_FORDER_PATH _T("D:\\DIT_Review\\ReviewServerConfig\\OffsetBackup\\")
ReviewHistory/bin/ReviewHistroy.exe
Binary files differ
ReviewSystem/ReviewRecipeEditor/DlgCommon.cpp
@@ -18,7 +18,7 @@
    , m_nPlanCount(0)
    , m_nUserDefectCount(0)
    , m_nReflowPixelScale(0)
    , m_EditControl_GantryPathUse(0)
    , m_nradioGantryMode(0)
{
    m_nSelectPlanIdx = -1;
    m_nLightCount = 0;
@@ -68,6 +68,9 @@
    DDX_Control(pDX, IDC_STATIC_GLASS_SLOT_26, m_ctrlStaticGlassSlot_26);
    DDX_Control(pDX, IDC_STATIC_GLASS_SLOT_27, m_ctrlStaticGlassSlot_27);
    DDX_Control(pDX, IDC_STATIC_GLASS_SLOT_28, m_ctrlStaticGlassSlot_28);
    /*< LYW 20220525 - #4157 ADD Start >*/
    DDX_Radio(pDX, IDC_RADIO_GANTRY_MODE_1, (int&)m_nradioGantryMode);
    /*< LYW 20220525 - #4157 ADD End >*/
    DDX_Control(pDX, IDC_STATIC_GLASS_SLOT_ALL_SELECT, m_ctrlStaticGlassSlot_ALL_Select);
    DDX_Control(pDX, IDC_STATIC_GLASS_SLOT_ALL_DESELECT, m_ctrlStaticGlassSlot_ALL_Deselect);
@@ -77,7 +80,6 @@
    DDX_Control(pDX, IDC_CHECK_AUTO_LIGHT, m_ctrlAutoLight);
    DDX_Control(pDX, IDC_COMBO_RCP_GLASSORIGIN, m_ctrlComboGlassOrigin);
    DDX_Text(pDX, IDC_EDIT_RCP_REFLOW_PIXEL_SCALE, m_nReflowPixelScale);
    DDX_Text(pDX, IDC_EDIT_USE_SINGLE_GANTRY_PATH, m_EditControl_GantryPathUse);
}
@@ -85,14 +87,17 @@
    ON_BN_CLICKED(IDC_BUTTON_RCP_REVIEW_RESET, &CDlgCommon::OnBnClickedButtonRcpReviewReset)
    ON_BN_CLICKED(IDC_BUTTON_RCP_REVIEW_APPLY, &CDlgCommon::OnBnClickedButtonRcpReviewApply)
    ON_CONTROL_RANGE(BN_CLICKED, IDC_STATIC_GLASS_SLOT_01, IDC_STATIC_GLASS_SLOT_28, OnGlassSlotClick)
    ON_CONTROL_RANGE(BN_CLICKED, IDC_RADIO_GANTRY_MODE_1, IDC_RADIO_GANTRY_MODE_3, OnClickRadioGantryMode)
    ON_EN_CHANGE(IDC_EDIT_RCP_REVIEW_PLAN_COUNT, &CDlgCommon::OnEnChangeEditRcpReviewPlanCount)
    ON_EN_CHANGE(IDC_EDIT_RCP_REVIEW_USER_DEFECT_COUNT, &CDlgCommon::OnEnChangeEditRcpReviewUserDefectCount)
    ON_NOTIFY(NM_CLICK, IDC_GRID_RCP_REVIEW_PLAN_INFO, &CDlgCommon::OnPlanInfoGridClick)
    ON_NOTIFY(NM_CLICK, IDC_GRID_RCP_REVIEW_PLAN_INFO, &CDlgCommon::OnPlanInfoGridClick)
    ON_NOTIFY(GVN_COMBOSELCHANGE, IDC_GRID_RCP_REVIEW_USER_DEFECT_INFO, &CDlgCommon::OnSelChange)
    ON_BN_CLICKED(IDC_BUTTON_LOAD_MASTER, &CDlgCommon::OnBnClickedButtonLoadMaster)
    ON_NOTIFY(NM_CLICK, IDC_GRID_RCP_REFLOW_PARAMETER, &CDlgCommon::OnClickImageInfo)
    ON_BN_CLICKED(IDC_BUTTON_USER_PITCH_INPUT, &CDlgCommon::OnBnClickedButtonUserPitchInput)
    ON_BN_CLICKED(IDC_BUTTON4, &CDlgCommon::OnBnClickedButton4)
    /*< LYW 20220525 - #4157 ADD Start >*/
    /*< LYW 20220525 - #4157 ADD End >*/
END_MESSAGE_MAP()
// CDlgCommon 메시지 처리기입니다.
@@ -507,7 +512,9 @@
    strItemText = m_ctrlGridScheduleInfo.GetItemText(nRowIdx, nColIdx++);
    pScheduleInfo->SetMaxWsiPointCount(_ttoi(strItemText));
    pScheduleInfo->SetSingleGantryPath(m_EditControl_GantryPathUse);
    //pScheduleInfo->SetSingleGantryPath(m_EditControl_GantryPathUse);
    pScheduleInfo->SetSingleGantryPath(m_nradioGantryMode);
    pCellCheck = (CGridCellCheck*)m_ctrlGridScheduleInfo.GetCell(nRowIdx, nColIdx++);
    if(pCellCheck)
@@ -529,7 +536,8 @@
    strItemText = m_ctrlGridScheduleRangeCntInfo.GetItemText(nRowIdx, nColIdx++);
    pScheduleInfo->SetRangePointCount(Range_Right, _ttoi(strItemText));
    pScheduleInfo->SetSingleGantryPath(m_EditControl_GantryPathUse);
    //pScheduleInfo->SetSingleGantryPath(m_EditControl_GantryPathUse);
    pScheduleInfo->SetSingleGantryPath(m_nradioGantryMode);
    //사용자 결함
    nRowIdx = 1;
@@ -1256,8 +1264,8 @@
    strItemText.Format(_T("%d"), pScheduleInfo->GetMaxPointCount());
    m_ctrlGridScheduleInfo.SetItemText(nRowIdx, nColIdx++, strItemText);
    
    m_EditControl_GantryPathUse = pRsRcpReviewInfo->GetRcpSchedulingInfo()->GetSingleGantryPath();
    //m_EditControl_GantryPathUse = pRsRcpReviewInfo->GetRcpSchedulingInfo()->GetSingleGantryPath();
    m_nradioGantryMode = pRsRcpReviewInfo->GetRcpSchedulingInfo()->GetSingleGantryPath();
    m_ctrlGridScheduleInfo.Invalidate(FALSE);
}
@@ -2066,6 +2074,11 @@
}
void CDlgCommon::OnClickRadioGantryMode(UINT ID)
{
    return;
}
void CDlgCommon::OnSetMaster(BOOL bSetMaster, int dir, CPoint* reflowPoints)
{
    CString strTemp;
ReviewSystem/ReviewRecipeEditor/DlgCommon.h
@@ -66,6 +66,9 @@
    int m_nSelectPlanIdx;
    int m_nLightCount;
    int m_nAFMCount;
    /*< LYW 20220525 - #4157 ADD Start >*/
    UINT m_nradioGantryMode;
    /*< LYW 20220525 - #4157 ADD End >*/
    BOOL m_bSelectGlassSlot[TOTAL_GLASS_SLOT_COUNT];
    CFontStatic* m_ctrlStaticGlassSlot[TOTAL_GLASS_SLOT_COUNT];
@@ -82,7 +85,9 @@
    afx_msg void OnBnClickedButtonLoadMaster();
    /*< LYW 20220525 - #4157 ADD Start >*/
    afx_msg void OnClickRadioGantryMode(UINT ID);
    /*< LYW 20220525 - #4157 ADD End >*/
    afx_msg void OnBnClickedButtonRcpReviewReset();
    afx_msg void OnBnClickedButtonRcpReviewApply();
@@ -146,5 +151,4 @@
    CComboBox m_ctrlComboGlassOrigin;
    afx_msg void OnBnClickedButton4();
    int m_nReflowPixelScale;
    int m_EditControl_GantryPathUse;
};
ReviewSystem/ReviewRecipeEditor/ReviewRecipeEditor.rc
@@ -160,8 +160,10 @@
    PUSHBUTTON      "ChangeRCP",IDC_BUTTON4,322,41,50,14
    EDITTEXT        IDC_EDIT_RCP_REFLOW_PIXEL_SCALE,221,145,32,12,ES_CENTER | ES_AUTOHSCROLL
    LTEXT           "Pixel Scale",IDC_STATIC,184,147,34,8
    EDITTEXT        IDC_EDIT_USE_SINGLE_GANTRY_PATH,268,295,48,14,ES_AUTOHSCROLL
    LTEXT           "Single Gantry",IDC_STATIC,269,284,44,8
    GROUPBOX        "GantryMode",IDC_STATIC,264,291,54,46
    CONTROL         "All Gantry",IDC_RADIO_GANTRY_MODE_1,"Button",BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,266,301,52,9
    CONTROL         "Left Gantry",IDC_RADIO_GANTRY_MODE_2,"Button",BS_AUTORADIOBUTTON,266,312,52,9
    CONTROL         "Right Gantry",IDC_RADIO_GANTRY_MODE_3,"Button",BS_AUTORADIOBUTTON,266,323,52,9
END
IDD_DIALOG_REVIEW_RCP_EDITOR_MEASURE DIALOGEX 0, 0, 379, 526
ReviewSystem/ReviewRecipeEditor/resource.h
@@ -296,8 +296,11 @@
#define IDC_EDIT3                       1121
#define IDC_EDIT_USE_SINGLE_GANTRY_PATH 1121
#define IDC_GRID_RCP_JUDGE_CELL_JUDGEMENT 1122
#define IDC_RADIO_GANTRY_MODE_1         1122
#define IDC_GRID_RCP_JUDGE_GLASS_JUDGEMENT_DEFECT 1123
#define IDC_RADIO_GANTRY_MODE_2         1123
#define IDC_GRID_RCP_JUDGE_GLASS_JUDGEMENT_CELL 1124
#define IDC_RADIO_GANTRY_MODE_3         1124
#define IDC_GRID_RCP_JUDGE_ZONE_DATA    1129
#define IDC_GRID_RCP_JUDGE_ZONE_JUDGE_SETTING 1130
#define IDC_GRID_RCP_JUDGE_ZONE_JUDGE_SETTING_PR 1131
@@ -309,7 +312,7 @@
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        155
#define _APS_NEXT_COMMAND_VALUE         32771
#define _APS_NEXT_CONTROL_VALUE         1122
#define _APS_NEXT_CONTROL_VALUE         1123
#define _APS_NEXT_SYMED_VALUE           106
#endif
#endif
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.cpp
@@ -1091,6 +1091,15 @@
    bReturn = macroFile.Write(strFilePath);
    /*< LYW 20220525 - #4161 ADD Start >*/
    CString strRTMSBackUpFilePath;
    strRTMSBackUpFilePath.Format(_T("%s\\%s"), _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT, REVIEW_OFFSET_CONFIGFILE_NAME);
    if (bReturn)
    {
        CopyFile(REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME, strRTMSBackUpFilePath, FALSE);
    }
    /*< LYW 20220525 - #4161 ADD End >*/
    // #3563 LYW_ CF AOI Review Offset 파라미터 저장시 완료 팝업 추가 ADD START
    CString strMessage;
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.h
@@ -24,6 +24,9 @@
#define    REVIEW_OFFSET_CONFIGFILE_PATH _T("D:\\DIT_Review\\ReviewServerConfig\\") //210805
#define    REVIEW_OFFSET_CONFIGFILE_NAME _T("ReviewOffSet.cfg")
#define REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME _T("D:\\DIT_Review\\ReviewServerConfig\\ReviewOffSet.cfg")
/*< LYW 20220525 - #4161 ADD Start >*/
#define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT    _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\ReviewServerConfig")
/*< LYW 20220525 - #4161 ADD End >*/
#define    REVIEW_OFFSET_BACKUP_FORDER_NAME _T("OffsetBackup")
#define    REVIEW_OFFSET_BACKUP_FORDER_PATH _T("D:\\DIT_Review\\ReviewServerConfig\\OffsetBackup\\")
ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -67,6 +67,8 @@
#include "akAOISharedSystem.h"
#include "DlgModuleInfo.h"
#include <Psapi.h>
using namespace CHReviewResult;
using namespace CHImageControls;
@@ -111,6 +113,14 @@
    // single variable
    m_strProgramVersion            = _T("");        // program version
    /*< LYW 20220415 - #4086 ADD Start >*/
    m_nFDCGRMSWVersion = 20220101;
    m_nFDCFTPUploaderSWVersion = 20220101;
    m_nFDCSyncSWVersion = 20220101;
    m_nFDCReviewSWVersion = 20220101;
    m_nFDCWSISWVersion00 = 20220101;
    m_nFDCWSISWVersion01 = 20220101;
    /*< LYW 20220415 - #4086 ADD End >*/
    m_ProcessTimer.End();                        // process timer
    // multi variable    
@@ -152,6 +162,8 @@
{    
    if (m_pDoc==NULL) return FALSE;
    Start3rdPartyProgram();
    CreateDirectory(_REVIEW_SERVER_BASE_PATH_, NULL);
    CreateDirectory(_REVIEW_SERVER_LOG_PATH_, NULL);
    CreateDirectory(_REVIEW_SERVER_CONFIG_PATH_, NULL);
@@ -162,7 +174,7 @@
    //ISP2P_CopyFolder(_REVIEW_SERVER_CONFIG_PATH_, _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT);
    //ISP2P_CopyFolder(_REVIEW_RECIPE_PATH_, _REVIEW_RECIPE_BACKUP_PATH_CPJT);
    //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD END
    SetProgramVersion();
    SetReviewProgramVersion();
    // init review data
    if (m_pDoc->InitReviewData()==FALSE) 
@@ -187,6 +199,10 @@
    {
        m_pView->CreateDialogs(pSystemInfo->m_nLineType, pSystemInfo->m_nMachineType, pSystemInfo->m_bUseVisionAlign);
    }
    /*< LYW 20220415 - #4086 ADD Start >*/
    _beginthread(threadSet3rdPartyProgramVersion, NULL, this);
    /*< LYW 20220415 - #4086 ADD End >*/
    // system type log : SW Version 추가
    g_pLog->DisplayMessage(_T("Starting ReviewSystem Program! (%s)"), m_strProgramVersion);
@@ -370,22 +386,24 @@
{
    TRACE(_T("[A2E]DeinitReviewInterface 시작\n"));
    m_ProcessTimer.Start();
    DisconnectReviewCamera();
    DeinitReviewCamera();
    m_ProcessTimer.End();
    Terminate3rdPartyProgram();
    if (m_pView)
    {
        m_pView->DeleteDialogs();
    }
    g_pLog->DisplayMessage(_T("ReviewCamera Deinit Time : %f ms"), m_ProcessTimer.GetDurationMilliSecond());
    g_pLog->DisplayMessage(_T("Program exit by User!"));
    ClearAllObserverVector();
    g_pLog->DisplayMessage(_T("Clear all Observer Vectors"));
    ::Sleep(400);
    m_ProcessTimer.Start();
    DisconnectReviewCamera();
    DeinitReviewCamera();
    m_ProcessTimer.End();
    g_pLog->DisplayMessage(_T("ReviewCamera Deinit Time : %f ms"), m_ProcessTimer.GetDurationMilliSecond());
    m_ProcessTimer.Start();
    DeinitAlignCamera();
@@ -478,8 +496,6 @@
    DeinitSharedImage();
    g_pLog->DisplayMessage(_T("Deinit Shared Image"));
    DeinitTotalPitchMeasure();
    g_pLog->DisplayMessage(_T("Deinit TotalPitch Measure"));
@@ -565,32 +581,196 @@
    AFM_SetAFMZoomLevel(0, 0);
}
void CReviewInterface::SetProgramVersion()
/*< LYW 20220415 - #4086 ADD Start >*/
void CReviewInterface::threadSet3rdPartyProgramVersion(void* pArg)
{
    BOOL bReturn;
    CReviewInterface* pThis = (CReviewInterface*)pArg;
    //LYW0412
    BOOL bReturn, bRetFTPUploader = FALSE, bRetGRM = FALSE, bRetSync = FALSE;
    CFileFind finder;
    CTime timeLastWrite;
    TCHAR currentPath[MAX_PATH];
    DWORD dwPid;
    HWND hWnd;
    HANDLE hHandle;
    CString strTemp;
    ::GetModuleFileName( AfxGetInstanceHandle(), currentPath, MAX_PATH);
    bReturn = finder.FindFile(currentPath);
    while(bReturn)
    while ((bRetFTPUploader&bRetGRM&bRetSync) != TRUE)
    {
        bReturn = finder.FindNextFile();
        bReturn = FALSE;
        if(finder.IsDots()) continue;
        if(finder.IsDirectory()) continue;
        //FTPUploader S/W Version Start
        if (bRetFTPUploader == FALSE)
        {
            dwPid = 0;
            hWnd = ::FindWindow(NULL, _T("FTPUploader"));
            GetWindowThreadProcessId(hWnd, &dwPid);
            hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid);
            ZeroMemory(currentPath, MAX_PATH);
            GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH);
        finder.GetLastWriteTime(timeLastWrite);
        m_strProgramVersion.Format(_T("Build[ %04d.%02d.%02d %02d:%02d ]"),
            timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay(), timeLastWrite.GetHour(), timeLastWrite.GetMinute());
            bReturn = finder.FindFile(currentPath);
        }
        while (bReturn)
        {
            bReturn = finder.FindNextFile();
            if (finder.IsDots()) continue;
            if (finder.IsDirectory()) continue;
            finder.GetLastWriteTime(timeLastWrite);
            strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay());
            pThis->m_nFDCFTPUploaderSWVersion = atoi(strTemp);
            g_pLog->DisplayMessage(_T("FDCFTPUploaderSWVersion = %d "), pThis->m_nFDCFTPUploaderSWVersion);
            bRetFTPUploader = TRUE;
        }
        //FTPUploader S/W Version End
        bReturn = FALSE;
        //Dit Glass Raw Messenger S/W Version Start
        if (bRetGRM == FALSE)
        {
            dwPid = 0;
            hWnd = ::FindWindow(NULL, _T("Dit Glass Raw Messenger"));
            GetWindowThreadProcessId(hWnd, &dwPid);
            hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid);
            ZeroMemory(currentPath, MAX_PATH);
            GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH);
            bReturn = finder.FindFile(currentPath);
        }
        while (bReturn)
        {
            bReturn = finder.FindNextFile();
            if (finder.IsDots()) continue;
            if (finder.IsDirectory()) continue;
            finder.GetLastWriteTime(timeLastWrite);
            strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay());
            pThis->m_nFDCGRMSWVersion = atoi(strTemp);
            g_pLog->DisplayMessage(_T("FDCGRMSWVersion = %d "), pThis->m_nFDCGRMSWVersion);
            bRetGRM = TRUE;
        }
        //Dit Glass Raw Messenger S/W Version End
        bReturn = FALSE;
        //Dit Shared Memory Sync Client S/W Version Start
        if (bRetSync == FALSE)
        {
            dwPid = 0;
            hWnd = ::FindWindow(NULL, _T("Dit Shared Memory Sync Client"));
            GetWindowThreadProcessId(hWnd, &dwPid);
            hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid);
            ZeroMemory(currentPath, MAX_PATH);
            GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH);
            bReturn = finder.FindFile(currentPath);
        }
        while (bReturn)
        {
            bReturn = finder.FindNextFile();
            if (finder.IsDots()) continue;
            if (finder.IsDirectory()) continue;
            finder.GetLastWriteTime(timeLastWrite);
            strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay());
            pThis->m_nFDCSyncSWVersion = atoi(strTemp);
            g_pLog->DisplayMessage(_T("FDCSyncSWVersion = %d "), pThis->m_nFDCSyncSWVersion);
            bRetSync = TRUE;
        }
        //Dit Shared Memory Sync Client S/W Version End
    }
    finder.Close();
}
void CReviewInterface::SetReviewProgramVersion()
{
    //LYW0412
    BOOL bReturn;
    CFileFind finder;
    CTime timeLastWrite;
    TCHAR currentPath[MAX_PATH];
    CString strTemp;
    //Review S/W Version Start
    ::GetModuleFileName(AfxGetInstanceHandle(), currentPath, MAX_PATH);
    bReturn = finder.FindFile(currentPath);
    while (bReturn)
    {
        bReturn = finder.FindNextFile();
        if (finder.IsDots()) continue;
        if (finder.IsDirectory()) continue;
        finder.GetLastWriteTime(timeLastWrite);
        m_strProgramVersion.Format(_T("Build[ %04d.%02d.%02d %02d:%02d ]"),
            timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay(), timeLastWrite.GetHour(), timeLastWrite.GetMinute());
        strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay());
        m_nFDCReviewSWVersion = atoi(strTemp);
        g_pLog->DisplayMessage(_T("FDCReviewSWVersion = %d "), m_nFDCReviewSWVersion);
    }
    //Review S/W Version End
}
/*< LYW 20220426 - #4086 ADD Start >*/
void CReviewInterface::Start3rdPartyProgram()
{
//     if(StartWindowIDProgram(_T("FTPUploader"), _T("D:\\DIT_3rdParty\\FTPUpload\\FTPUploader.exe")))
//         g_pLog->DisplayMessage(_T("FDCFTPUploader Start Success"));
//     else g_pLog->DisplayMessage(_T("FDCFTPUploader Start Fail"));
    if (StartWindowIDProgram(_T("Dit Glass Raw Messenger"), _T("D:\\DIT_3rdParty\\GlassRawMessenger\\DitGlassRawMessenger_x64.exe")))
        g_pLog->DisplayMessage(_T("DitGlassRawMessenger Start Success"));
    else g_pLog->DisplayMessage(_T("DitGlassRawMessenger Start Fail"));
}
int CReviewInterface::StartWindowIDProgram(CString WindowID, CString ProgramPath)
{
    HWND hWnd = ::FindWindow(NULL, WindowID);
    if (hWnd == NULL)
    {
        if(ShellExecute(hWnd, NULL, ProgramPath, NULL, NULL, SW_SHOWMINIMIZED))
            return TRUE;
        else return FALSE;
    }
    return TRUE;
}
void CReviewInterface::Terminate3rdPartyProgram()
{
    /*TerminateWindowIDProgram(_T("FTPUploader"));*/
    TerminateWindowIDProgram(_T("Dit Glass Raw Messenger"));
    TerminateWindowIDProgram(_T("gnuplot"));
    KillProcess("wgnuplot.exe");
}
void CReviewInterface::TerminateWindowIDProgram(CString WindowID)
{
    HWND hWnd = ::FindWindow(NULL, WindowID);
    if (hWnd != NULL)
    {
        DWORD ProcessId;
        GetWindowThreadProcessId(hWnd, &ProcessId);
        HANDLE hProcess = OpenProcess(MAXIMUM_ALLOWED, FALSE, ProcessId);
        if (hProcess != NULL)
        {
            TerminateProcess(hProcess, 0);
        }
    }
}
/*< LYW 20220426 - #4086 ADD End >*/
/*< LYW 20220415 - #4086 ADD End >*/
void CReviewInterface::CreateSystemDirectory()
{
@@ -2762,6 +2942,21 @@
    }
    return -1;
}
void CReviewInterface::IWC2P_SetWSIVersion(int nModuleIndex, int nVersion)
{
    switch (nModuleIndex)
    {
    case 0:
        m_nFDCWSISWVersion00 = nVersion;
        break;
    case 1:
        m_nFDCWSISWVersion01 = nVersion;
        break;
    default:
        break;
    }
}
void CReviewInterface::IWC2P_SetConnectedStatus(int nModuleIndex, int nConnectStatus)
@@ -8296,6 +8491,42 @@
    m_nReview01ImageContrast = n_Value;
}
int CReviewInterface::ISP2P_GetReviewSWVersion()
{
    return m_nFDCReviewSWVersion;
}
int CReviewInterface::ISP2P_GetSyncSWVersion()
{
    return m_nFDCSyncSWVersion;
}
int CReviewInterface::ISP2P_GetGRMSWVersion()
{
    return m_nFDCGRMSWVersion;
}
int CReviewInterface::ISP2P_GetFTPUploaderSWVersion()
{
    return m_nFDCFTPUploaderSWVersion;
}
int CReviewInterface::ISP2P_GetWSISWVersion(int nModuleIndex)
{
    switch (nModuleIndex)
    {
    case 0:
        return m_nFDCWSISWVersion00;
        break;
    case 1:
        return m_nFDCWSISWVersion01;
        break;
    default:
        return m_nFDCWSISWVersion00;
        break;
    }
}
SDefectFilter* CReviewInterface::ISP2P_GetDefectFilter()
{
    if (m_pDoc==NULL) return NULL;
ReviewSystem/ReviewSystem/ReviewInterface.h
@@ -149,6 +149,9 @@
    virtual void    IWC2P_SetWSIAliveCheck();
    virtual BOOL    IWC2P_GetMeasureInfo(int nModuleIndex, int nPointIndex, short& nLoc, short& nOptic, short& nGray, CString& strCellID);
    virtual int        IWC2P_GetCurrentStatus(int nModuleIndex, CString& strGlassID, CString& strRecipeID, int& nType);
    /*< LYW 20220421 - #4086 ADD Start >*/
    virtual void    IWC2P_SetWSIVersion(int nModuleIndex, int nVersion);
    /*< LYW 20220421 - #4086 ADD End >*/
    virtual void    IWC2P_SetConnectedStatus(int nModuleIndex, int nConnectStatus);
    virtual void    IWC2P_RecvMeasureMessage(int nModuleIndex, int nMessageType, int nMessageResult);
    virtual void    IWC2P_SetMeasureResult(int nModuleIndex, const SWsiResult& measureResut);
@@ -387,6 +390,13 @@
    virtual void                        ISP2P_SetReview00ImageContrast(int n_Value);
    virtual void                        ISP2P_SetReview01ImageContrast(int n_Value);
    /*< LYW 20211109 - #3662 ADD End >*/
    /*< LYW 20220415 - #4086 ADD Start >*/
    virtual int                            ISP2P_GetReviewSWVersion();
    virtual int                            ISP2P_GetSyncSWVersion();
    virtual int                            ISP2P_GetGRMSWVersion();
    virtual int                            ISP2P_GetFTPUploaderSWVersion();
    virtual int                            ISP2P_GetWSISWVersion(int nModuleIndex);
    /*< LYW 20220415 - #4086 ADD End >*/
    // History result
    virtual CGlassResult*                ISP2P_GetNewHistoryResult(int& nHistoryResultCount);    // new glass result
@@ -666,7 +676,16 @@
    // setter internal
    double    GetFreeSpaceOfDrive() const;
    void    SetProgramVersion();
    /*< LYW 20220415 - #4086 ADD Start >*/
    static void    threadSet3rdPartyProgramVersion(void* pArg);
    void    SetReviewProgramVersion();
    /*< LYW 20220426 - #4086 ADD Start >*/
    void    Start3rdPartyProgram();
    int        StartWindowIDProgram(CString WindowID, CString ProgramPath);
    void    Terminate3rdPartyProgram();
    void    TerminateWindowIDProgram(CString WindowID);
    /*< LYW 20220426 - #4086 ADD End >*/
    /*< LYW 20220415 - #4086 ADD End >*/
        
    void    ApplySystemSettingValue();
    void    SetDefaultValue();
@@ -853,6 +872,15 @@
    CString                        m_strProgramVersion;            // program version
    CProcessTimer                m_ProcessTimer;                    // process timer
    SThetaMotorInfo                m_sThetaMotorInfo;                // theta motor info
    /*< LYW 20220415 - #4086 ADD Start >*/
    long                        m_nFDCGRMSWVersion;
    long                        m_nFDCFTPUploaderSWVersion;
    long                        m_nFDCSyncSWVersion;
    long                        m_nFDCReviewSWVersion;
    long                        m_nFDCWSISWVersion00;
    long                        m_nFDCWSISWVersion01;
    /*< LYW 20220415 - #4086 ADD End >*/
    
    // multi variable    
    VectorModuleStatus            m_vecModuleStatus;                // Review Module Status Vector    
ReviewSystem/ReviewSystem/ReviewSystem.vcxproj
@@ -161,7 +161,7 @@
      <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
    </ResourceCompile>
    <Link>
      <AdditionalDependencies>CHVirtualGlassMap_x64_vc15.lib;chartdir51.lib;CHCameraControls_x64_vc15.lib;LineChecker_x64_vc15.lib;CHImageControls_x64_vc15.lib;CHCommonClasses_x64_vc15.lib;CHCommonControls_x64_vc15.lib;CHResultFileManager_x64_vc15.lib;CHReviewRecipe_x64_vc15.lib;CHReviewSetting_x64_vc15.lib;CHReviewResult_x64_vc15.lib;CHEdgeTriangle_x64_vc15.lib;CHPathScheduler_x64_vc15.lib;CHMotorCalibrator_x64_vc15.lib;CHAutoLightControls_x64_vc15.lib;CHAlignFinder_x64_vc15.lib;CHThreadPools_x64_vc15.lib;CHReviewResultParser_x64_vc15.lib;CHReviewDefectFinder_x64_vc15.lib;CHReviewPrioritySorter_x64_vc15.lib;CHDefectPicker_x64_vc15.lib;IOCPNetwork_x64_vc15.lib;CHMotorControls_x64_vc15.lib;CHLensChangeControls_x64_vc15.lib;CHLightControls_x64_vc15.lib;CHAfmControls_x64_vc15.lib;CHSignalControls_x64_vc15.lib;CHVcrControls_x64_vc15.lib;CHWsiControls_x64_vc15.lib;CHTotalPitchMeasure_x64_vc15.lib;M_AutoDiagnosisManager_x64_vc17.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <AdditionalDependencies>CHVirtualGlassMap_x64_vc15.lib;chartdir51.lib;CHCameraControls_x64_vc15.lib;LineChecker_x64_vc15.lib;CHImageControls_x64_vc15.lib;CHCommonClasses_x64_vc15.lib;CHCommonControls_x64_vc15.lib;CHResultFileManager_x64_vc15.lib;CHReviewRecipe_x64_vc15.lib;CHReviewSetting_x64_vc15.lib;CHReviewResult_x64_vc15.lib;CHEdgeTriangle_x64_vc15.lib;CHPathScheduler_x64_vc15.lib;CHMotorCalibrator_x64_vc15.lib;CHAutoLightControls_x64_vc15.lib;CHAlignFinder_x64_vc15.lib;CHThreadPools_x64_vc15.lib;CHReviewResultParser_x64_vc15.lib;CHReviewDefectFinder_x64_vc15.lib;CHReviewPrioritySorter_x64_vc15.lib;CHDefectPicker_x64_vc15.lib;IOCPNetwork_x64_vc15.lib;CHMotorControls_x64_vc15.lib;CHLensChangeControls_x64_vc15.lib;CHLightControls_x64_vc15.lib;CHAfmControls_x64_vc15.lib;CHSignalControls_x64_vc15.lib;CHVcrControls_x64_vc15.lib;CHWsiControls_x64_vc15.lib;CHTotalPitchMeasure_x64_vc15.lib;M_AutoDiagnosisManager_x64_vc17.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <AdditionalLibraryDirectories>../lib;../../Internal_Library/lib;../../External_Library/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <SubSystem>Windows</SubSystem>
ReviewSystem/ReviewSystem/SequenceProcessor.cpp
@@ -1965,7 +1965,7 @@
    //{
        
        // WSI result count
        // WSI result count //TEST
        for (int nModuleIdx=0; nModuleIdx<Module_GetModuleStatusCount(); nModuleIdx++)
        {        
            CWsiControl* pWsiControl = m_pSP2P->ISP2P_GetWSIControl(nModuleIdx);
@@ -2061,14 +2061,15 @@
    int nTotalWsiCount = 0;
    for(int nWsiControlIdx = 0; nWsiControlIdx < nWsiControlCount; nWsiControlIdx++)
    {
        CWsiControl* pWsiControl = m_pSP2P->ISP2P_GetWSIControl(nWsiControlIdx);
        if(pWsiControl == NULL) continue ;
//     for(int nWsiControlIdx = 0; nWsiControlIdx < nWsiControlCount; nWsiControlIdx++)
//     {
        // WSI result count
        // WSI result count //TEST
        for (int nModuleIdx=0; nModuleIdx<Module_GetModuleStatusCount(); nModuleIdx++)
        {        
            CWsiControl* pWsiControl = m_pSP2P->ISP2P_GetWSIControl(nModuleIdx);
            if (pWsiControl == NULL) continue;
            CReviewResult*                    pWsiUserResult    = pGlassResult->GetWsiUserResult(nModuleIdx);
            if(pWsiUserResult == NULL) continue ;
            const SCoordInfo*                pCoordInfo        = Module_GetCoordInfo(nModuleIdx);
@@ -2121,10 +2122,10 @@
            // [2016:11:18]-[WEZASW] : 전달 항목 수정 => nModuleIndex, nDefectCount, nDefectIndex ( n+0),     nUMOriginX  ( n+1), nUMOriginY  ( n+2)
            bWSIStart = pWsiControl->SetWsiStart(nDefectCount, vectorPosX, vectorPosY, 1);
            nTotalWsiCount+=nDefectCount;
        }
    }
    //}
    return bWSIStart;
}
ReviewSystem/ReviewSystem/SequenceProcessor.h
@@ -438,6 +438,14 @@
    virtual void                        ISP2P_SetReview01ImageContrast(int n_Value) = 0;
    /*< LYW 20211109 - #3662 ADD End >*/
    /*< LYW 20220415 - #4086 ADD Start >*/
    virtual BOOL                        ISP2P_GetReviewSWVersion() = 0;
    virtual BOOL                        ISP2P_GetSyncSWVersion() = 0;
    virtual BOOL                        ISP2P_GetGRMSWVersion() = 0;
    virtual BOOL                        ISP2P_GetFTPUploaderSWVersion() = 0;
    virtual BOOL                        ISP2P_GetWSISWVersion(int nModuleIndex) = 0;
    /*< LYW 20220415 - #4086 ADD End >*/
    virtual CGlassResult*                ISP2P_GetNewHistoryResult(int& nHistoryResultCount) = 0;    // new glass result
    virtual CGlassResult*                ISP2P_GetHistoryResult(int nIndex) = 0;                    // get glass result
           
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -665,8 +665,12 @@
        //    m_pSP2P->ISP2P_GetWSIControl(1)->SendWsiAfmSafePosMove();
        //}
        //Sleep(5000);
        SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
        SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
        if (GetProcessStatus() != ProcessReviewEnd_CPJT && GetProcessStatus() != ProcessReviewUnloding_CPJT)
        {
            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!"));
        //LONGREUN
        //RecvSignalToSignalControl(PCControlRecvSignalIndex_Seq, 4);
@@ -7772,6 +7776,9 @@
    pSignalControl->WritePacketData(_T("16140"), sizeof(nWSI00Version), (short*)&nWSI00Version);
    pSignalControl->WritePacketData(_T("16144"), sizeof(nWSI01Version), (short*)&nWSI01Version);
    /*< LYW 20220415 - #4086 ADD Start >*/ //추가 필요
    /*< LYW 20220415 - #4086 ADD End >*/
    //CCHImageData pImageData;
    //CCHImageData pImageData2;
@@ -8047,6 +8054,14 @@
    int nWSI01Version = 20210422;
    int nReviewAliveCamera00 = 1000;
    int nReviewAliveCamera01 = 1000;
    /*< LYW 20220415 - #4086 ADD Start >*/
    int    nFDCGRMSWVersion = 20200101;
    int    nFDCFTPUploaderSWVersion = 20200101;
    int    nFDCSyncSWVersion = 20200101;
    int    nFDCReviewSWVersion = 20200101;
    int    nFDCWSISWVersion00 = 20200101;
    int    nFDCWSISWVersion01 = 20200101;
    /*< LYW 20220415 - #4086 ADD End >*/
    //foucs 
    /*< LYW 20211109 - #3662 MOD Start >*/
@@ -8054,6 +8069,15 @@
    {
        nRev_Cam1_Image_Contrast = m_pSP2P->ISP2P_GetReview00ImageContrast() * 1000;
        nRev_Cam2_Image_Contrast = m_pSP2P->ISP2P_GetReview01ImageContrast() * 1000;
        /*< LYW 20220415 - #4086 ADD Start >*/
        nFDCGRMSWVersion = m_pSP2P->ISP2P_GetGRMSWVersion();
        nFDCFTPUploaderSWVersion = m_pSP2P->ISP2P_GetFTPUploaderSWVersion();
        nFDCSyncSWVersion = m_pSP2P->ISP2P_GetSyncSWVersion();
        nFDCReviewSWVersion = m_pSP2P->ISP2P_GetReviewSWVersion();
        nFDCWSISWVersion00 = m_pSP2P->ISP2P_GetWSISWVersion(0);
        nFDCWSISWVersion01 = m_pSP2P->ISP2P_GetWSISWVersion(1);
        /*< LYW 20220415 - #4086 ADD End >*/
    }
    /*< LYW 20211109 - #3662 MOD End >*/
    /*< Origin Code >*/
@@ -8197,13 +8221,22 @@
    pSignalControl->WritePacketData(_T("16116"), sizeof(nRev_Cam1_Image_Contrast), (short*)&nRev_Cam1_Image_Contrast);
    pSignalControl->WritePacketData(_T("16120"), sizeof(nRev_Cam2_Image_Contrast), (short*)&nRev_Cam2_Image_Contrast);
    pSignalControl->WritePacketData(_T("16124"), sizeof(nRev_PC_HDD_CHECK), (short*)&nRev_PC_HDD_CHECK);
    pSignalControl->WritePacketData(_T("16128"), sizeof(nWSI1_PC_HDD_CHECK), (short*)&nWSI1_PC_HDD_CHECK);
    pSignalControl->WritePacketData(_T("16132"), sizeof(nWSI2_PC_HDD_CHECK), (short*)&nWSI2_PC_HDD_CHECK);
    /*< LYW 20220415 - #4086 ADD Start >*/
    pSignalControl->WritePacketData(_T("16124"), sizeof(nFDCSyncSWVersion), (short*)&nFDCSyncSWVersion);
    pSignalControl->WritePacketData(_T("16128"), sizeof(nFDCReviewSWVersion), (short*)&nFDCReviewSWVersion);
    pSignalControl->WritePacketData(_T("16132"), sizeof(nFDCFTPUploaderSWVersion), (short*)&nFDCFTPUploaderSWVersion);
    pSignalControl->WritePacketData(_T("16136"), sizeof(nFDCGRMSWVersion), (short*)&nFDCGRMSWVersion);
    pSignalControl->WritePacketData(_T("16140"), sizeof(nFDCWSISWVersion00), (short*)&nFDCWSISWVersion00);
    pSignalControl->WritePacketData(_T("16144"), sizeof(nFDCWSISWVersion01), (short*)&nFDCWSISWVersion01);
    /*< LYW 20220415 - #4086 ADD End >*/
    pSignalControl->WritePacketData(_T("16136"), sizeof(nReviewVersion), (short*)&nReviewVersion);
    pSignalControl->WritePacketData(_T("16140"), sizeof(nWSI00Version), (short*)&nWSI00Version);
    pSignalControl->WritePacketData(_T("16144"), sizeof(nWSI01Version), (short*)&nWSI01Version);
//     pSignalControl->WritePacketData(_T("16124"), sizeof(nRev_PC_HDD_CHECK), (short*)&nRev_PC_HDD_CHECK);
//     pSignalControl->WritePacketData(_T("16128"), sizeof(nWSI1_PC_HDD_CHECK), (short*)&nWSI1_PC_HDD_CHECK);
//     pSignalControl->WritePacketData(_T("16132"), sizeof(nWSI2_PC_HDD_CHECK), (short*)&nWSI2_PC_HDD_CHECK);
//
//     pSignalControl->WritePacketData(_T("16136"), sizeof(nReviewVersion), (short*)&nReviewVersion);
//     pSignalControl->WritePacketData(_T("16140"), sizeof(nWSI00Version), (short*)&nWSI00Version);
//     pSignalControl->WritePacketData(_T("16144"), sizeof(nWSI01Version), (short*)&nWSI01Version);
    return;
@@ -9257,7 +9290,7 @@
    AFM_SetAFMTracking(FALSE);
    SetWsiType(0);
    WSIAllReadySignal(0);
    WSIAllReadySignal(1);
    
    // send wsi start
    if(!WSIUserAllStartSignal())
@@ -9488,7 +9521,8 @@
    VectorDouble vectorCollisionPosX;
    vectorCollisionPosX.clear();
    //WSI
    pMotorControl->GantrySetTwoGantrySyncModeSend(1);
    // WSI result count
    for (int nModuleIdx=0; nModuleIdx<Module_GetModuleStatusCount(); nModuleIdx++)
@@ -9577,6 +9611,15 @@
            }
        }
        if (vectorPosX.empty() == TRUE)
        {
            //3360 LYW_ CF AOI QD Review WSI XY MotorMoving Error START
            g_pLog->DisplayMessage(_T("[GantryAutoGo] No Exist Send Point,TwoGantrySyncMode OFF!"), vectorPosX.size());
            g_pLog->DisplayMessage(_T("[GantryAutoGo] (%d)Gantry Path Send Fail"), pModuleStatus->GetGantryIndex()); //taek 210128
            pMotorControl->GantrySetTwoGantrySyncModeSend(0);
            //3360 LYW_ CF AOI QD Review WSI XY MotorMoving Error END
        }
        if (m_pSP2P->ISP2P_GetReviewProcessor()->CheckMotionComplete() == FALSE)
        {
            g_pLog->DisplayMessage(_T("[GantryAutoGo] Motor IS Not Ready "));