#pragma once
|
|
#define SHAREDMEMNAME_BASICINFO _T("DIT.GLASSRAWSYSTEM.SHAREDMEM.BASICINFO")
|
#define SHAREDMEMNAME_GLASSDATA _T("DIT.GLASRAWSYSTEM.SHAREDMEM.GLASSDATA")
|
#define MUTEX_RAWMESSENGER _T("MUTEX_RAWMESSENGER_IPC")
|
|
#define COMMAND_MAXCOUNT 8
|
|
#define RAWMESSENGER_MAXCAMNUM 30
|
#define RAWMESSENGER_MAXSCANNUM 20
|
#define RAWMESSENGER_MAXHLINUM 8
|
#define RAW_CODE_MAX 10
|
|
#define MAX_ZONE_NUM 16
|
|
namespace ditRaw
|
{
|
enum ReviewPlanType
|
{
|
RPT_Review = 0,
|
RPT_User,
|
RTP_WSI,
|
RTP_PlanMeasure,
|
RTP_Reflow,
|
RTP_WsiReflow,
|
RTP_UserWsi,
|
RPT_AOICustom = 1000,
|
};
|
};
|
enum emAOIProcStep
|
{
|
APS_None = 0,
|
|
//AOI
|
APS_GlassLoading,
|
APS_InspectEnd,
|
//Review
|
APS_CustomReviewRead,
|
APS_ReviewStart,
|
APS_ReviewEnd,
|
|
RPS_StepNum
|
};
|
|
struct _grmGlassData
|
{
|
void clear()
|
{
|
memset(this, 0, sizeof(_grmGlassData));
|
}
|
|
//Glass Á¤º¸
|
char m_strFileName[64];
|
char m_strPath[256];
|
|
int m_nCellNum;
|
int m_nDefectNum;
|
|
int m_nOriginDirection; //{ GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 };
|
int m_nConerCutDirection;
|
int m_nScanCoordinateY; //¿©±â°¡ 0À̸é ÀϹÝ, 1À̸é Scan¹æÇâÀÌ yÃà(Áï scan¹æÇâÀÌ ´ÜÃà, offline ¼³ºñ °°Àº)
|
|
int m_nGlassSizeWidth;
|
int m_nGlassSizeHeight;
|
/* <KYH 211129 : #3796 ADD Start> */
|
int m_nDefectNumJudgeND;
|
/* <KYH 211129 : #3796 ADD End> */
|
//DUMY DATA
|
int Dumy_int[9];
|
|
//¼³ºñÁ¤º¸
|
char m_strLine[32];
|
char m_strEquipType[32];
|
char m_strEquipID[32];
|
char m_strStepID[32];
|
char m_strOperID[32];
|
|
CTime m_tmGlassLoading; //3. START_TIME
|
CTime m_tmInspectionStart; //3. START_TIME
|
CTime m_tmInspectionEND; //4. END_TIME
|
CTime m_tmReviewLoading;
|
CTime m_tmReviewEnd;
|
|
//±âº» ¹°·ùÁ¤º¸
|
char m_strGlassID[32]; //Glass ID
|
char m_strPPID[32];
|
char m_strEPPID[32];
|
char m_strLotID[32]; //LOT_ID
|
char m_strSLotID[32]; //SLOT_ID
|
char m_strRecipeName[32]; //RECIPE_NAME
|
char m_strGlassJudge[32]; //GLASS_JUDGE
|
char m_strGlassCode[32]; //Grade or Code
|
char m_strProductID[16]; //4. PRODUCT_ID
|
|
//VCR
|
int m_nVcrResultCode;
|
char m_strVCRResult[32];
|
char m_strVCRGlassID[32];
|
|
|
//°áÇÔ °¹¼ö °ü¸® º¯¼ö
|
int m_nDefectNumSizeSmall;
|
int m_nDefectNumSizeMid;
|
int m_nDefectNumSizeLarge;
|
int m_nDefectNumSizeHuge;
|
int m_nDefectNumSizeUltra;
|
|
int m_nDefectNumLocActive;
|
int m_nDefectNumLocPad;
|
int m_nDefectNumLocCrack;
|
int m_nDefectNumLocBM;
|
|
int m_nDefectNumTypeTB;
|
int m_nDefectNumTypeTW;
|
int m_nDefectNumTypeRB;
|
int m_nDefectNumTypeRW;
|
int m_nDefectNumTypeMD;
|
int m_nDefectNumTypeCD;
|
int m_nDefectNumTypeMC;
|
/* <LJC 20220422 : #3957 ADD Start> */
|
int m_nDefectCode[RAW_CODE_MAX];
|
/* <LJC 20220422 : #3957 ADD End> */
|
|
int m_nDefectNumJudgeOKWhite;
|
int m_nDefectNumJudgeOKBlack;
|
int m_nDefectNumJudgeNG;
|
int m_nDefectNumJudgeRW;
|
int m_nDefectNumJudgeRP;
|
int m_nDefectNumJudgeRV;
|
int m_nDefectNumJudgeTR;
|
int m_nDefectNumJudgePR;
|
int m_nDefectNumJudgePT; //< KEJ 20231123 - #4669 ADD >
|
/*< LHS 20211029 - #3783 MOD Start >*/
|
int m_nDefectNumJudgeLine;
|
/*< LHS 20211029 - #3783 MOD End >*/
|
int m_nDefectNumStackTD;
|
int m_nDefectNumStackSD;
|
int m_nDefectNumStackPD;
|
int m_nDefectNumStackSP;
|
|
|
//Ä«¸Þ¶ó/½ºÄµ Á¤º¸ [±èÅÂÇö 2018/12/5]
|
short m_nCameraNum;
|
short m_nScanNum;
|
unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
|
unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
|
unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
|
|
//¾ó¶óÀÎ Á¤º¸ um[±èÅÂÇö 2018/12/10]
|
double m_nAlignCcdTheta;
|
double m_nAlignCcdShitftX;
|
double m_nAlignCcdShitftY;
|
double m_nAlignPreTheta;
|
double m_nAlignPreShitftX;
|
double m_nAlignPreShitftY;
|
double m_nAlignBasicTheta;
|
double m_nAlignBasicShitftX;
|
double m_nAlignBasicShitftY;
|
char m_strAlignFirst[64];
|
char m_strAlignSecond[64];
|
// char m_strAlignPath[256];
|
|
//CSOT¿ë ¹°·ù Á¤º¸ [±èÅÂÇö 2018/12/5]
|
char m_strCassetteSequenceNo[16];
|
char m_strOwnerCode[16]; //2. OWNER_CODE
|
char m_strOwnerType[16]; //3. OWNER_TYPE
|
|
char m_strProcessID[21]; //5. PROCESS_ID
|
char m_strProductGroup[16]; //6. PRODUCT_GROUP
|
char m_strCSTID[16]; //8. CST_ID
|
char m_strPreProcessID[16]; //10.PRE_PROCESS_ID
|
char m_strPreEQPID[16]; //11.PRE_EQP_ID
|
char m_strPreChamerID[16]; //12.PRE_CHAMBER_ID
|
char m_strPreRecipeID[32]; //13.PRE_RECIPE_ID
|
char m_strGroupID[16]; //14.GROUP_ID
|
char m_cAutoSampleFlag; //15.AUTOSAMPLEFLAG
|
|
// CPRJ¿ë ¹°·ù Á¤º¸
|
char m_strProdType[3];
|
char m_strBatchID[13];
|
char m_strPairHPanelID[13];
|
char m_strGlassThickNess[2];
|
char m_strCompCount[2];
|
char m_strGlassState[2];
|
char m_strInsFlag[2];
|
char m_strPanelPosition[2];
|
char m_strFlowHistory[2];
|
char m_strCount1[2];
|
char m_strCount2[2];
|
char m_StrMergeList[10][12];
|
//Mura Data 0412 nwh
|
char m_strMaxAvgGray[12];
|
char m_strMaxPortion[12];
|
|
|
//1226NWH
|
char m_strReadingFlag[2];
|
BYTE m_nUniqueID[4];
|
int m_nSlot_No;
|
|
BYTE m_nGlassDataBitSignal[4];
|
bool m_bJob_end;
|
|
//201217 CJH - ÂïÀº Defect Review °³¼ö
|
int m_nReviewNum;
|
//201221 CJH - ÆÄ½ÌÇÑ Stack °á°ú
|
int m_nStackNum;
|
BOOL m_bStackRead;
|
|
/*< KJG 20211024 - #3487 ADD Start >*/
|
int m_nRawMergeNum;
|
BOOL m_bRawMergeRead;
|
/*< KJG 20211024 - #3487 ADD End >*/
|
//210203 CJH - CutOff ´ë»ó °áÇÔ ¼ö
|
int m_nCutOffDefectNum;
|
//210323 CJH - Server/Frame Shrink Á¤º¸ Ãß°¡
|
char m_strShrinked[6];
|
//210326 CJH - RAW ÀÔ·Â Defect ¼ö·® »óÇÑ »ç¿ë¿©ºÎ
|
BOOL m_bRawCutoff;
|
//210907 KJG - EdgeCrack °Ë»ç »ç¿ë À¯¹«
|
BOOL m_bEdgeCrackUse;
|
BOOL m_bRawMergeUse;
|
/* < KJG 20220225 - #3850 ADD Start >*/
|
char m_strRawMergeStepID[32];
|
/* < KJG 20220225 - #3850 ADD End >*/
|
|
/* < KMH 20220614 : #3957 ADD Start > */
|
char m_strRawDefectCode[RAW_CODE_MAX][5]; // 4±ÛÀÚ¸¸ Ç¥±â
|
/* < KMH 20220614 : #3957 ADD End > */
|
};
|
struct _grmBlockData
|
{
|
void clear()
|
{
|
memset(this, 0, sizeof(_grmBlockData));
|
}
|
char m_strBlockID[16]; //1. BLOCK_ID
|
char m_cBlockJudgeAOI; //2. BLOCK_JUDGE_AOI
|
char m_cBlockJudgeATS; //4. BLOCK_JUDGE_ATS
|
char m_cBlockJudgeTEG; //5. BLOCK_JUDGE_TEG
|
int m_nGlassIdDCR; //22. GLASS_ID_DCR
|
};
|
struct _grmCellData
|
{
|
void clear()
|
{
|
memset(this, 0, sizeof(_grmCellData));
|
}
|
int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; };
|
int m_nCellID; //1. PANEL_ID
|
short m_nModelIdx; // ¸î ¹øÂ° ¸ðµ¨Àΰ¡?
|
|
char m_strCellName[32];
|
int m_rectCellLeft;
|
int m_rectCellTop;
|
int m_rectCellRight;
|
int m_rectCellBottom;
|
|
int/*Judgement*/ m_nJudgement;
|
int m_nJudgeFlag;
|
int m_nJudgeGlade;
|
|
|
//°áÇÔ °¹¼ö °ü¸® º¯¼ö
|
int m_nDefectNumSizeSmall;
|
int m_nDefectNumSizeMid;
|
int m_nDefectNumSizeLarge;
|
int m_nDefectNumSizeHuge;
|
int m_nDefectNumSizeUltra;
|
|
int m_nDefectNumLocActive;
|
int m_nDefectNumLocPad;
|
int m_nDefectNumLocCrack;
|
int m_nDefectNumLocBM;
|
|
int m_nDefectNumTypeTB;
|
int m_nDefectNumTypeTW;
|
int m_nDefectNumTypeRB;
|
int m_nDefectNumTypeRW;
|
int m_nDefectNumTypeMD;
|
int m_nDefectNumTypeCD;
|
int m_nDefectNumTypeMC;
|
/* <KYH 211129 : #3796 ADD Start> */
|
int m_nDefectNumJudgeND;
|
/* <KYH 211129 : #3796 ADD End> */
|
/* <LJC 20220422 : #3957 ADD Start> */
|
int m_nDefectCode[RAW_CODE_MAX];
|
/* <LJC 20220422 : #3957 ADD End> */
|
//DUMY DATA
|
int Dumy_int[9];
|
|
//Mura Data nwh 0404
|
char m_strProImage[32];
|
char m_strAvgGray_0[12];
|
char m_strPortion_0[12];
|
//kyh Mura Data Ãß°¡ 0622
|
char m_strCorner_Gray_0[12];
|
char m_strAvgAmp_0[12];
|
char m_strFFTVar_0[12];
|
char m_strFFTVah_0[12];
|
char m_strFFTVaq_0[12];
|
char m_strFFTPK_0[12];
|
|
char m_strAvgGray_1[12];
|
char m_strPortion_1[12];
|
//kyh Mura Data Ãß°¡ 0622
|
char m_strCorner_Gray_1[12];
|
char m_strAvgAmp_1[12];
|
char m_strFFTVar_1[12];
|
char m_strFFTVah_1[12];
|
char m_strFFTVaq_1[12];
|
char m_strFFTPK_1[12];
|
|
char m_strAvgGray_2[12];
|
char m_strPortion_2[12];
|
//kyh Mura Data Ãß°¡ 0622
|
char m_strCorner_Gray_2[12];
|
char m_strAvgAmp_2[12];
|
char m_strFFTVar_2[12];
|
char m_strFFTVah_2[12];
|
char m_strFFTVaq_2[12];
|
char m_strFFTPK_2[12];
|
|
char m_strAvgGray_3[12];
|
char m_strPortion_3[12];
|
//kyh Mura Data Ãß°¡ 0622
|
char m_strCorner_Gray_3[12];
|
char m_strAvgAmp_3[12];
|
char m_strFFTVar_3[12];
|
char m_strFFTVah_3[12];
|
char m_strFFTVaq_3[12];
|
char m_strFFTPK_3[12];
|
|
int m_nDefectNumJudgeOKWhite;
|
int m_nDefectNumJudgeOKBlack;
|
int m_nDefectNumJudgeNG;
|
int m_nDefectNumJudgeRW;
|
int m_nDefectNumJudgeRP;
|
int m_nDefectNumJudgeRV;
|
int m_nDefectNumJudgeTR;
|
int m_nDefectNumJudgePR;
|
int m_nDefectNumJudgePT; //< KEJ 20231123 - #4669 ADD >
|
/*< LHS 20211029 - #3783 MOD Start >*/
|
int m_nDefectNumJudgeLine;
|
/*< LHS 20211029 - #3783 MOD End >*/
|
int m_nReflowResult[8]; // 0: Reflow X 1: Reflow OK 2: Reflow NG
|
|
// FilteringµÈ Stackº° ¼ö
|
int m_nDefectTDCount;
|
int m_nDefectSDCount;
|
int m_nDefectPDCount;
|
int m_nDefectSPCount;
|
|
// Gate/Data ÃÑ °¹¼ö
|
int m_nGateNum;
|
int m_nDataNum;
|
|
// 210129 CJH - Cell Origin ¹æÇâ
|
int m_nCellXDir;
|
int m_nCellYDir;
|
};
|
|
struct _grmDefectReviewData
|
{
|
void clear()
|
{
|
memset(this, 0, sizeof(_grmDefectReviewData));
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
//¿©±â¼ ºÎÅÍ ¸®ºä ¿µ¿ª [±èÅÂÇö 2019/1/19]
|
ditRaw::ReviewPlanType m_nPlanType ;
|
int m_nResultCode; //0:None, 1:Success
|
int m_nShotIndex; //¸®ºä ÂïÀº ¼ø¹ø [±èÅÂÇö 2018/12/5]
|
int m_nModuleIndex;
|
int m_nMagnificIndex;
|
float m_fManification;
|
float m_fManificResoultion;
|
char m_strRevImageName[256];
|
char m_strRevImagePath[256];
|
|
//////////////////////////////////////////////////////////////////////////
|
// Measure ¿µ¿ª
|
int m_nMeasure_Index;
|
int m_nMeasure_ResultCode; //0:None, 1:Success
|
float m_fMesure_ResultData[8]; // 0:Type, 1:ShiftX, 2:ShiftY
|
|
//////////////////////////////////////////////////////////////////////////
|
// WSI¿µ¿ª
|
int m_nWsi_ResultCode; //0:None, 1:Success
|
int m_nWsi_Type; // ÇÔ¸ô / µ¹±â
|
float m_fWsi_ResultData[8]; // 0:Type, 1:Height(um), 2:Width
|
char m_strWsi_2DImageFilename[256];
|
char m_strWsi_3DImageFilename[256];
|
int m_nWsiReflowPositionIndex; // WsiReflowPositionIndex
|
int m_nWsi_pReflowResultData[8];
|
double m_dWsi_DamDistance;
|
|
double m_dWsiMmMotorX; // WSI ¸ðÅÍ ÁÂÇ¥ 20180223 HJH
|
double m_dWsiMmMotorY;
|
float m_fWsiManification; // WSI ¹èÀ²
|
|
//////////////////////////////////////////////////////////////////////////
|
// Reflow ¿µ¿ª
|
int m_nReflow_Index;
|
int m_nReflow_ResultCode; //0:None, // °ËÃâÇÑ LineÀÇ °³¼ö. 3 ¹Ì¸¸ : DAM2 Reflow ÆÇÁ¤, 4~5 : DAM1 Reflow ÆÇÁ¤, 6 : no Reflow ÆÇÁ¤ / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side
|
float m_fReflow_LinePosData[8];
|
int m_nReflow_Side;
|
int m_nReflow_InspectionMode;
|
};
|
|
struct _grmDefectData
|
{
|
void clear()
|
{
|
memset(this, 0, sizeof(_grmDefectData));
|
}
|
|
short m_nDefectID;
|
short m_nCameraID;
|
short m_nScanIdx;
|
//short m_nDefectIdx; // Ä«¸Þ¶ó¿¡¼ÀÇ °áÇÔ À妽º
|
int m_nDefectIdx; // Ä«¸Þ¶ó¿¡¼ÀÇ °áÇÔ À妽º 201207 CJH - ÀÚ¸´ ¼ö ³Ñħ. intÇüÀ¸·Î º¯°æ
|
|
int m_nPixelConv; // pixel ´ÜÀ§ ÁÂÇ¥
|
int m_nPixelScan; // pixel ´ÜÀ§ ÁÂÇ¥
|
|
/* < KMH 20220707 : #4230 MOD Start > */
|
// ¹üÀ§ ¹þ¾î³ª¼ À½¼ö·Î Ç¥±âµÇ¸é D_Col Fail
|
//short m_nPixelSize; // °áÇÔÅ©±â ---------------------------------PS
|
int m_nPixelSize; // °áÇÔÅ©±â ---------------------------------PS
|
/* < KMH 20220707 : #4230 MOD End > */
|
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; // ¸î¹øÂ° ¼¿Àΰ¡?
|
char m_strCellName[32]; // ¼¿ À̸§ /* < KMH 20220609 : #4183 ADD > */
|
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.
|
/* < KMH 20220712 : #4230 MOD Start > */
|
// char m_strStackFirst[60]; // Stack Step. //201221 CJH - ÃÖ´ë »çÀÌÁî 60bytes
|
char m_strStackFirst[400]; // Stack Step. // 400 bytes È®Àå¿äû : SDC ä½Â¼®P
|
/* < KMH 20220712 : #4230 MOD End > */
|
char m_strUnitID[16]; // À¯´Ö¾ÆÀ̵ð
|
|
int m_ClassificationType; // enum ClassificationType { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI³ª TFEµî Ãß°¡ ºÐ·ù ¾Ë°í¸®Áò Àû¿ë °á°ú.
|
int m_nAtomWidth; // TFE ÇÙ ³Êºñ
|
int m_nAtomHeight; // TFE ÇÙ ³ôÀÌ
|
short/*ReKind*/ m_DefectKind; // °áÇÔ Á¾·ù
|
|
char m_strDefectCode[32]; // Defect Code
|
BOOL m_bMergeState; // Merge Status
|
char m_strAoiImageName[256]; // Defect Image Name(CCD Image)
|
int m_nDefectMerge; // ÇöÀç µðÆåÀÇ ¸ÓÁö ¿©ºÎ
|
|
|
int m_nPixelSizeOrigin;
|
int m_nScratchRatio;
|
int m_nDensity; // ¿øÇü °áÇÔ ±¸ºÐÀ» À§ÇÑ ¹Ðµµ [2017.8.2 bhs]
|
|
char m_strDefectName[16];
|
char m_strDefectType[16];
|
|
double m_dScanResolution;
|
double m_dConvResolution;
|
|
int m_nAngle; // °¢µµ
|
int m_nMajor; // ÀåÃà ±æÀÌ(Long)
|
int m_nMinor; // ´ÜÃà ±æÀÌ(Short)
|
int m_nCompact; // Blob ÀåÃàÀ» Áö¸§À¸·Î ÇÏ´Â ¿øÀÇ ³ÐÀÌ¿Í Blob ³ÐÀÌÀÇ ºñÀ²
|
int m_nThickness; // Blob ³ÐÀÌ¿Í ÀåÃàÀÇ ºñÀ² (Area / Major)
|
|
short m_nHliLevelIdx; // ¸î ¹øÂ° ·¹º§(ä³Î)Àΰ¡?
|
int m_nHliLayers; // ÇØ´ç°áÇÔ¿¡ Æ÷ÇÔµÈ ·¹À̾î bitó¸®
|
|
BOOL m_bShrinked; //210323 CJH - Frame Shrink Á¤º¸ Ãß°¡
|
|
char m_strAoiImagePath[255];
|
char m_strReviewImagePath[255];
|
|
int m_nAlignRectLeft;
|
int m_nAlignRectTop;
|
int m_nAlignRectBottom;
|
int m_nAlignRectRight;
|
/*< LHS 20211029 - #3783 MOD Start >*/
|
char m_strLNDefectCode[12];
|
short/*LineDefectType*/ m_LineDefectType;
|
/*< LHS 20211029 - #3783 MOD End >*/
|
|
_grmDefectReviewData m_ReviewDefect;
|
};
|
|
|
enum emGlassRawCommand
|
{
|
grcNone = 0,
|
|
//AOI Sequence
|
grcSequenceGlassLoading = 1,
|
grcSequenceInspectEnd = 2,
|
//Review Sequence
|
grcSequenceReviewStart = 3,
|
grcSequenceReviewEnd = 4,
|
|
grcSequenceCustomReviewDataRead = 10,
|
|
grcWriteRaw = 101,
|
grcReadRaw = 102,
|
|
grcWriteBin = 201,
|
grcReadBin = 202,
|
|
grcReviewWriteBIn = 301,
|
|
grcGlassRawCommand
|
};
|
|
|
struct _grmDitCommand
|
{
|
struct _grmCommand
|
{
|
int nCommand;
|
char strParam[256];
|
short nResult;
|
};
|
short m_nCommandIdxWrite;
|
short m_nCommandIdxRead;
|
_grmCommand m_nCommandBuffer[COMMAND_MAXCOUNT];
|
};
|
|
struct _grmDitMemInfo
|
{
|
//°øÀ¯ ¸Þ¸ð¸® »ý¼ºÇÒ °ø°£ °áÁ¤ [±èÅÂÇö 2018/11/12]
|
size_t m_nGlassRawDataSize;
|
int m_nGlassMaxDataNum;
|
int m_nBlockMaxDataNum;
|
int m_nCellMaxDataNum;
|
int m_nDefectMaxDataNum;
|
int m_nStackMaxDataNum;
|
/*< KJG 20211024 - #3487 ADD Start >*/
|
int m_nRawMergeMaxDataNum;
|
/*< KJG 20211024 - #3487 ADD End >*/
|
|
//Char ±âÁØ ÀÚ·á°¡ ÀÖ´Â ½ÃÀÛ À§Ä¡ [±èÅÂÇö 2018/11/12]
|
int m_nGlassDataPoint;
|
int m_nBlockDataPoint;
|
int m_nCellDataPoint;
|
int m_nDefectDataPoint;
|
int m_nStackDataPoint;
|
/*< KJG 20211024 - #3487 ADD Start >*/
|
int m_nRawMergeDataPoint;
|
/*< KJG 20211024 - #3487 ADD End >*/
|
|
int m_nSizeOfGlassData;
|
int m_nSizeOfBlockData;
|
int m_nSizeOfCellData;
|
int m_nSizeOfDefectData;
|
int m_nSizeOfStackData;
|
/*< KJG 20211024 - #3487 ADD Start >*/
|
int m_nSizeOfRawMergeData;
|
/*< KJG 20211024 - #3487 ADD End >*/
|
};
|
struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand
|
{
|
size_t m_nGlassLoadingCount;
|
emAOIProcStep m_ClientProcStep; //AOI, Review°¡ º¸³½ ¸í·É
|
emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)°¡ ó¸® ¿Ï·á ÇÑ ¸í·É
|
};
|
|
class CgrmGlassRawData
|
{
|
public:
|
CgrmGlassRawData()
|
{
|
m_pGlassRawData = NULL;
|
m_bRefAlloc = FALSE;
|
};
|
|
~CgrmGlassRawData()
|
{
|
clear();
|
};
|
|
void clear()
|
{
|
if(m_bRefAlloc) { m_pGlassRawData = NULL; return;}
|
|
if(m_pGlassRawData)
|
{
|
delete [] m_pGlassRawData;
|
m_pGlassRawData = NULL;
|
}
|
};
|
BOOL ImportGlassRaw(_grmDitMemInfo* pInfo, char* pData, bool bRefAlloc = false)
|
{
|
if(pInfo == NULL) return FALSE;
|
|
if(m_pGlassRawData && pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) clear();
|
|
if(m_pGlassRawData == NULL) m_pGlassRawData = new char[ pInfo->m_nGlassRawDataSize ];
|
|
m_MemInfo = *pInfo;
|
|
m_nGlassRawDataSize = pInfo->m_nGlassRawDataSize;
|
|
m_nGlassMaxDataNum = pInfo->m_nGlassMaxDataNum ;
|
m_nBlockMaxDataNum = pInfo->m_nBlockMaxDataNum ;
|
m_nCellMaxDataNum = pInfo->m_nCellMaxDataNum ;
|
m_nDefectMaxDataNum = pInfo->m_nDefectMaxDataNum;
|
m_nStackMaxDataNum = pInfo->m_nStackMaxDataNum ;
|
|
m_nGlassDataPoint = pInfo->m_nGlassDataPoint ;
|
m_nBlockDataPoint = pInfo->m_nBlockDataPoint ;
|
m_nCellDataPoint = pInfo->m_nCellDataPoint ;
|
m_nDefectDataPoint = pInfo->m_nDefectDataPoint ;
|
m_nStackDataPoint = pInfo->m_nStackDataPoint ;
|
|
m_nSizeOfGlassData = pInfo->m_nSizeOfGlassData ;
|
m_nSizeOfBlockData = pInfo->m_nBlockDataPoint ;
|
m_nSizeOfCellData = pInfo->m_nSizeOfCellData ;
|
m_nSizeOfDefectData = pInfo->m_nSizeOfDefectData;
|
m_nSizeOfStackData = pInfo->m_nSizeOfStackData ;
|
|
if(bRefAlloc)
|
{
|
m_pGlassRawData = pData;
|
}
|
else
|
{
|
if(pData)
|
{
|
memcpy(m_pGlassRawData, pData, sizeof(char)*pInfo->m_nGlassRawDataSize);
|
}
|
else
|
{
|
memset(m_pGlassRawData, 0, sizeof(char)*pInfo->m_nGlassRawDataSize );
|
}
|
}
|
|
|
m_pGlassData = (_grmGlassData*)&m_pGlassRawData[pInfo->m_nGlassDataPoint];
|
m_pBlockData = (_grmBlockData*)&m_pGlassRawData[pInfo->m_nBlockDataPoint];
|
m_pCellData = (_grmCellData*)&m_pGlassRawData[pInfo->m_nCellDataPoint];
|
m_pDefectData = (_grmDefectData*)&m_pGlassRawData[pInfo->m_nDefectDataPoint];
|
m_pStackData = (_grmDefectData*)&m_pGlassRawData[pInfo->m_nStackDataPoint];
|
|
m_bRefAlloc = bRefAlloc;
|
return TRUE;
|
};
|
BOOL ExportGlassRaw(_grmDitMemInfo* pInfo, char* pData)
|
{
|
if(pInfo == NULL || pData == NULL) return FALSE;
|
|
if(1) //new type //¸Þ¸ð¸® ÃÑ °ø°£ Å©±â¿¡ »ó°ü¾øÀÌ
|
{
|
//if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE;
|
|
if(pInfo->m_nSizeOfGlassData != m_MemInfo.m_nSizeOfGlassData) return FALSE;
|
if(pInfo->m_nSizeOfBlockData != m_MemInfo.m_nSizeOfBlockData) return FALSE;
|
if(pInfo->m_nSizeOfCellData != m_MemInfo.m_nSizeOfCellData) return FALSE;
|
if(pInfo->m_nSizeOfDefectData != m_MemInfo.m_nSizeOfDefectData) return FALSE;
|
if(pInfo->m_nSizeOfStackData != m_MemInfo.m_nSizeOfStackData) return FALSE;
|
|
if(pInfo->m_nCellMaxDataNum < m_pGlassData->m_nCellNum) return FALSE;
|
if(pInfo->m_nDefectMaxDataNum < m_pGlassData->m_nDefectNum) return FALSE;
|
if(pInfo->m_nStackMaxDataNum < m_pGlassData->m_nDefectNum) return FALSE;
|
|
memcpy(&pData[pInfo->m_nGlassDataPoint], m_pGlassData, pInfo->m_nSizeOfGlassData* 1);
|
memcpy(&pData[pInfo->m_nBlockDataPoint], m_pBlockData, pInfo->m_nSizeOfBlockData* 1);
|
memcpy(&pData[pInfo->m_nCellDataPoint], m_pCellData, pInfo->m_nSizeOfCellData*m_pGlassData->m_nCellNum);
|
memcpy(&pData[pInfo->m_nDefectDataPoint], m_pDefectData, pInfo->m_nSizeOfDefectData*m_pGlassData->m_nDefectNum);
|
memcpy(&pData[pInfo->m_nStackDataPoint], m_pStackData, pInfo->m_nSizeOfStackData*m_pGlassData->m_nDefectNum);
|
}
|
else //if() //type old
|
{
|
if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE;
|
|
if(pInfo->m_nSizeOfGlassData != m_MemInfo.m_nSizeOfGlassData) return FALSE;
|
if(pInfo->m_nSizeOfBlockData != m_MemInfo.m_nSizeOfBlockData) return FALSE;
|
if(pInfo->m_nSizeOfCellData != m_MemInfo.m_nSizeOfCellData) return FALSE;
|
if(pInfo->m_nSizeOfDefectData != m_MemInfo.m_nSizeOfDefectData) return FALSE;
|
|
memcpy(pData, m_pGlassRawData, sizeof(char)*pInfo->m_nGlassRawDataSize);
|
}
|
|
|
return TRUE;
|
};
|
|
_grmGlassData* GetGlassData(){return m_pGlassData;};
|
_grmBlockData* GetBlockData(int nIndex){return &m_pBlockData[nIndex];};
|
_grmCellData* GetCellData(int nIndex){return &m_pCellData[nIndex];};
|
_grmDefectData* GetDefectData(int nIndex){return &m_pDefectData[nIndex];};
|
_grmDitMemInfo* GetMemInfo(){return &m_MemInfo;};
|
_grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex]; };
|
protected:
|
_grmDitMemInfo m_MemInfo;
|
char* m_pGlassRawData;
|
|
_grmGlassData* m_pGlassData;
|
_grmBlockData* m_pBlockData;
|
_grmCellData* m_pCellData;
|
_grmDefectData* m_pDefectData;
|
_grmDefectData* m_pStackData;
|
|
size_t m_nGlassRawDataSize;
|
|
int m_nGlassMaxDataNum;
|
int m_nBlockMaxDataNum;
|
int m_nCellMaxDataNum;
|
int m_nDefectMaxDataNum;
|
int m_nStackMaxDataNum;
|
|
int m_nGlassDataPoint;
|
int m_nBlockDataPoint;
|
int m_nCellDataPoint;
|
int m_nDefectDataPoint;
|
int m_nStackDataPoint;
|
|
int m_nSizeOfGlassData;
|
int m_nSizeOfBlockData;
|
int m_nSizeOfCellData;
|
int m_nSizeOfDefectData;
|
int m_nSizeOfStackData;
|
|
private:
|
bool m_bRefAlloc;
|
};
|