#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 MAX_ZONE_NUM 16
|
|
namespace ditRaw
|
{
|
enum ReviewPlanType
|
{
|
RPT_Review = 0,
|
RPT_User,
|
RTP_WSI,
|
RTP_PlanMeasure,
|
RTP_Reflow,
|
RTP_WsiReflow,
|
RTP_UserWsi,
|
RPT_AOICustom = 1000,
|
};
|
};
|
enum emAOIProcStep
|
{
|
APS_None = 0,
|
|
//AOI
|
APS_GlassLoading,
|
APS_InspectEnd,
|
//Review
|
APS_CustomReviewRead,
|
APS_ReviewStart,
|
APS_ReviewEnd,
|
|
RPS_StepNum
|
};
|
|
struct _grmGlassData
|
{
|
void clear()
|
{
|
memset(this, 0, sizeof(_grmGlassData));
|
}
|
|
//Glass ����
|
char m_strFileName[64];
|
char m_strPath[256];
|
|
int m_nCellNum;
|
int m_nDefectNum;
|
|
int m_nOriginDirection; //{ GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 };
|
int m_nConerCutDirection;
|
int m_nScanCoordinateY; //���Ⱑ 0�̸� �Ϲ�, 1�̸� Scan������ y��(�� scan������ ����, offline ���� ����)
|
|
int m_nGlassSizeWidth;
|
int m_nGlassSizeHeight;
|
|
//��������
|
char m_strLine[32];
|
char m_strEquipType[32];
|
char m_strEquipID[32];
|
char m_strStepID[32];
|
char m_strOperID[32];
|
|
CTime m_tmGlassLoading; //3. START_TIME
|
CTime m_tmInspectionStart; //3. START_TIME
|
CTime m_tmInspectionEND; //4. END_TIME
|
CTime m_tmReviewLoading;
|
CTime m_tmReviewEnd;
|
|
//�⺻ ��������
|
char m_strGlassID[32]; //Glass ID
|
char m_strPPID[32];
|
char m_strEPPID[32];
|
char m_strLotID[32]; //LOT_ID
|
char m_strSLotID[32]; //SLOT_ID
|
char m_strRecipeName[32]; //RECIPE_NAME
|
char m_strGlassJudge[32]; //GLASS_JUDGE
|
char m_strGlassCode[32]; //Grade or Code
|
char m_strProductID[16]; //4. PRODUCT_ID
|
|
//VCR
|
int m_nVcrResultCode;
|
char m_strVCRResult[32];
|
char m_strVCRGlassID[32];
|
|
|
//���� ���� ���� ����
|
int m_nDefectNumSizeSmall;
|
int m_nDefectNumSizeMid;
|
int m_nDefectNumSizeLarge;
|
int m_nDefectNumSizeHuge;
|
int m_nDefectNumSizeUltra;
|
|
int m_nDefectNumLocActive;
|
int m_nDefectNumLocPad;
|
int m_nDefectNumLocCrack;
|
int m_nDefectNumLocBM;
|
|
int m_nDefectNumTypeTB;
|
int m_nDefectNumTypeTW;
|
int m_nDefectNumTypeRB;
|
int m_nDefectNumTypeRW;
|
int m_nDefectNumTypeMD;
|
int m_nDefectNumTypeCD;
|
int m_nDefectNumTypeMC;
|
|
int m_nDefectNumJudgeOKWhite;
|
int m_nDefectNumJudgeOKBlack;
|
int m_nDefectNumJudgeNG;
|
int m_nDefectNumJudgeRW;
|
int m_nDefectNumJudgeRP;
|
int m_nDefectNumJudgeRV;
|
int m_nDefectNumJudgeTR;
|
int m_nDefectNumJudgePR;
|
|
int m_nDefectNumStackTD;
|
int m_nDefectNumStackSD;
|
int m_nDefectNumStackPD;
|
int m_nDefectNumStackSP;
|
|
|
//ī��/��ĵ ���� [������ 2018/12/5]
|
short m_nCameraNum;
|
short m_nScanNum;
|
unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM];
|
unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM];
|
unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM];
|
|
//����� ���� um[������ 2018/12/10]
|
double m_nAlignCcdTheta;
|
double m_nAlignCcdShitftX;
|
double m_nAlignCcdShitftY;
|
double m_nAlignPreTheta;
|
double m_nAlignPreShitftX;
|
double m_nAlignPreShitftY;
|
double m_nAlignBasicTheta;
|
double m_nAlignBasicShitftX;
|
double m_nAlignBasicShitftY;
|
char m_strAlignFirst[64];
|
char m_strAlignSecond[64];
|
// char m_strAlignPath[256];
|
|
//CSOT�� ���� ���� [������ 2018/12/5]
|
char m_strCassetteSequenceNo[16];
|
char m_strOwnerCode[16]; //2. OWNER_CODE
|
char m_strOwnerType[16]; //3. OWNER_TYPE
|
|
char m_strProcessID[21]; //5. PROCESS_ID
|
char m_strProductGroup[16]; //6. PRODUCT_GROUP
|
char m_strCSTID[16]; //8. CST_ID
|
char m_strPreProcessID[16]; //10.PRE_PROCESS_ID
|
char m_strPreEQPID[16]; //11.PRE_EQP_ID
|
char m_strPreChamerID[16]; //12.PRE_CHAMBER_ID
|
char m_strPreRecipeID[32]; //13.PRE_RECIPE_ID
|
char m_strGroupID[16]; //14.GROUP_ID
|
char m_cAutoSampleFlag; //15.AUTOSAMPLEFLAG
|
|
// CPRJ�� ���� ����
|
char m_strProdType[3];
|
char m_strBatchID[13];
|
char m_strPairHPanelID[13];
|
char m_strGlassThickNess[2];
|
char m_strCompCount[2];
|
char m_strGlassState[2];
|
char m_strInsFlag[2];
|
char m_strPanelPosition[2];
|
char m_strFlowHistory[2];
|
char m_strCount1[2];
|
char m_strCount2[2];
|
|
//Mura Data 0412 nwh
|
char m_strMaxAvgGray[12];
|
char m_strMaxPortion[12];
|
|
|
//1226NWH
|
char m_strReadingFlag[2];
|
BYTE m_nUniqueID[4];
|
int m_nSlot_No;
|
|
BYTE m_nGlassDataBitSignal[4];
|
bool m_bJob_end;
|
|
//201217 CJH - ���� Defect Review ����
|
int m_nReviewNum;
|
//201221 CJH - �Ľ��� Stack ���
|
int m_nStackNum;
|
BOOL m_bStackRead;
|
|
//210203 CJH - CutOff ��� ���� ��
|
int m_nCutOffDefectNum;
|
//210323 CJH - Server/Frame Shrink ���� �߰�
|
char m_strShrinked[6];
|
//210326 CJH - RAW �Է� Defect ���� ���� ��뿩��
|
BOOL m_bRawCutoff;
|
|
};
|
struct _grmBlockData
|
{
|
void clear()
|
{
|
memset(this, 0, sizeof(_grmBlockData));
|
}
|
char m_strBlockID[16]; //1. BLOCK_ID
|
char m_cBlockJudgeAOI; //2. BLOCK_JUDGE_AOI
|
char m_cBlockJudgeATS; //4. BLOCK_JUDGE_ATS
|
char m_cBlockJudgeTEG; //5. BLOCK_JUDGE_TEG
|
int m_nGlassIdDCR; //22. GLASS_ID_DCR
|
};
|
struct _grmCellData
|
{
|
void clear()
|
{
|
memset(this, 0, sizeof(_grmCellData));
|
}
|
int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; };
|
int m_nCellID; //1. PANEL_ID
|
short m_nModelIdx; // �� ��° ���ΰ�?
|
|
char m_strCellName[32];
|
int m_rectCellLeft;
|
int m_rectCellTop;
|
int m_rectCellRight;
|
int m_rectCellBottom;
|
|
int/*Judgement*/ m_nJudgement;
|
int m_nJudgeFlag;
|
int m_nJudgeGlade;
|
|
|
//���� ���� ���� ����
|
int m_nDefectNumSizeSmall;
|
int m_nDefectNumSizeMid;
|
int m_nDefectNumSizeLarge;
|
int m_nDefectNumSizeHuge;
|
int m_nDefectNumSizeUltra;
|
|
int m_nDefectNumLocActive;
|
int m_nDefectNumLocPad;
|
int m_nDefectNumLocCrack;
|
int m_nDefectNumLocBM;
|
|
int m_nDefectNumTypeTB;
|
int m_nDefectNumTypeTW;
|
int m_nDefectNumTypeRB;
|
int m_nDefectNumTypeRW;
|
int m_nDefectNumTypeMD;
|
int m_nDefectNumTypeCD;
|
int m_nDefectNumTypeMC;
|
|
//Mura Data nwh 0404
|
char m_strProImage[32];
|
char m_strAvgGray_0[12];
|
char m_strPortion_0[12];
|
//kyh Mura Data �߰� 0622
|
char m_strCorner_Gray_0[12];
|
char m_strAvgAmp_0[12];
|
char m_strFFTVar_0[12];
|
char m_strFFTVah_0[12];
|
char m_strFFTVaq_0[12];
|
char m_strFFTPK_0[12];
|
|
char m_strAvgGray_1[12];
|
char m_strPortion_1[12];
|
//kyh Mura Data �߰� 0622
|
char m_strCorner_Gray_1[12];
|
char m_strAvgAmp_1[12];
|
char m_strFFTVar_1[12];
|
char m_strFFTVah_1[12];
|
char m_strFFTVaq_1[12];
|
char m_strFFTPK_1[12];
|
|
char m_strAvgGray_2[12];
|
char m_strPortion_2[12];
|
//kyh Mura Data �߰� 0622
|
char m_strCorner_Gray_2[12];
|
char m_strAvgAmp_2[12];
|
char m_strFFTVar_2[12];
|
char m_strFFTVah_2[12];
|
char m_strFFTVaq_2[12];
|
char m_strFFTPK_2[12];
|
|
char m_strAvgGray_3[12];
|
char m_strPortion_3[12];
|
//kyh Mura Data �߰� 0622
|
char m_strCorner_Gray_3[12];
|
char m_strAvgAmp_3[12];
|
char m_strFFTVar_3[12];
|
char m_strFFTVah_3[12];
|
char m_strFFTVaq_3[12];
|
char m_strFFTPK_3[12];
|
|
int m_nDefectNumJudgeOKWhite;
|
int m_nDefectNumJudgeOKBlack;
|
int m_nDefectNumJudgeNG;
|
int m_nDefectNumJudgeRW;
|
int m_nDefectNumJudgeRP;
|
int m_nDefectNumJudgeRV;
|
int m_nDefectNumJudgeTR;
|
int m_nDefectNumJudgePR;
|
|
int m_nReflowResult[8]; // 0: Reflow X 1: Reflow OK 2: Reflow NG
|
|
// Filtering�� Stack�� ��
|
int m_nDefectTDCount;
|
int m_nDefectSDCount;
|
int m_nDefectPDCount;
|
int m_nDefectSPCount;
|
|
// Gate/Data �� ����
|
int m_nGateNum;
|
int m_nDataNum;
|
|
// 210129 CJH - Cell Origin ����
|
int m_nCellXDir;
|
int m_nCellYDir;
|
};
|
|
struct _grmDefectReviewData
|
{
|
void clear()
|
{
|
memset(this, 0, sizeof(_grmDefectReviewData));
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
//���⼭ ���� ���� ���� [������ 2019/1/19]
|
ditRaw::ReviewPlanType m_nPlanType ;
|
int m_nResultCode; //0:None, 1:Success
|
int m_nShotIndex; //���� ���� ���� [������ 2018/12/5]
|
int m_nModuleIndex;
|
int m_nMagnificIndex;
|
float m_fManification;
|
float m_fManificResoultion;
|
char m_strRevImageName[256];
|
char m_strRevImagePath[256];
|
|
//////////////////////////////////////////////////////////////////////////
|
// Measure ����
|
int m_nMeasure_Index;
|
int m_nMeasure_ResultCode; //0:None, 1:Success
|
float m_fMesure_ResultData[8]; // 0:Type, 1:ShiftX, 2:ShiftY
|
|
//////////////////////////////////////////////////////////////////////////
|
// WSI����
|
int m_nWsi_ResultCode; //0:None, 1:Success
|
int m_nWsi_Type; // �Ը� / ����
|
float m_fWsi_ResultData[8]; // 0:Type, 1:Height(um), 2:Width
|
char m_strWsi_2DImageFilename[256];
|
char m_strWsi_3DImageFilename[256];
|
int m_nWsiReflowPositionIndex; // WsiReflowPositionIndex
|
int m_nWsi_pReflowResultData[8];
|
double m_dWsi_DamDistance;
|
|
double m_dWsiMmMotorX; // WSI ���� ��ǥ 20180223 HJH
|
double m_dWsiMmMotorY;
|
float m_fWsiManification; // WSI ����
|
|
//////////////////////////////////////////////////////////////////////////
|
// Reflow ����
|
int m_nReflow_Index;
|
int m_nReflow_ResultCode; //0:None, // ������ Line�� ����. 3 �̸� : DAM2 Reflow ����, 4~5 : DAM1 Reflow ����, 6 : no Reflow ���� / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side
|
float m_fReflow_LinePosData[8];
|
int m_nReflow_Side;
|
int m_nReflow_InspectionMode;
|
};
|
|
struct _grmDefectData
|
{
|
void clear()
|
{
|
memset(this, 0, sizeof(_grmDefectData));
|
}
|
|
short m_nDefectID;
|
short m_nCameraID;
|
short m_nScanIdx;
|
//short m_nDefectIdx; // ī���� ���� �ε���
|
int m_nDefectIdx; // ī���� ���� �ε��� 201207 CJH - �ڸ� �� ��ħ. int������ ����
|
|
int m_nPixelConv; // pixel ���� ��ǥ
|
int m_nPixelScan; // pixel ���� ��ǥ
|
|
short m_nPixelSize; // ����ũ�� ---------------------------------PS
|
short/*SERVER_DefectType*/ m_DefectType; // ���� Ÿ�� ---------------------------------DT
|
short/*SERVER_DefectSubType*/ m_DefectSubType; // ������ ��������.
|
short/*SERVER_DefectBDType*/ m_DefectBDType; // ���� Ÿ�� - Bright, Dark, Both
|
|
short m_sPixelWidth; // �ȼ����� ���� �ʺ�
|
short m_sPixelHeight; // �ȼ����� ���� ����
|
short m_nLevelSrcMin; // ���� ��� Min -----------------------------SN
|
short m_nLevelSrcMax; // ���� ��� Max -----------------------------SX
|
short m_nLevelSrcAvg; // ���� ��� Avg -----------------------------SA
|
short m_nLevelRefMin; // ��� ��� Min -------------------------RN
|
short m_nLevelRefMax; // ��� ��� Max -------------------------RX
|
short m_nLevelRefAvg; // ��� ��� Avg -------------------------RA
|
short m_nLevelDiffMin; // ���� Min ---------------------------------DN
|
short m_nLevelDiffMax; // ���� Max ---------------------------------DX
|
short m_nLevelDiffAvg; // ���� Avg ---------------------------------DA
|
|
int m_nDefectRScale; // �ȼ����� ���� ���� -------------------------RS
|
short m_sThreshold; // ������ ������ ���� Threshold
|
short m_sThresholdAvg; // ������ ������ ���� Threshold AVG
|
short m_sDefectPeak; // ������ Peak.
|
short m_sDefectLevel; // (DiffAvg - Th) BOE 8G ��û����
|
|
int m_nPixelGlassStart; // Glass ���� �ȼ�
|
short m_sDefectLoc;
|
|
short m_sZoneClassPixelCount[16];
|
short m_sZonePixelCount[16]; // Zone�� ���� Pixel ��
|
short m_sZoneValueMin[16]; // Zone�� ���� Min
|
short m_sZoneValueMax[16]; // Zone�� ���� Max
|
short m_sZoneValueAvg[16]; // Zone�� ���� Avg
|
short m_sZonePixelPercent[16]; // --------------------------------------Z0~ZF
|
|
//210127 CJH - Zone�� Source Gray �Է�
|
short m_sZoneValueSrcMin[16]; // Zone�� Source Min
|
short m_sZoneValueSrcMax[16]; // Zone�� Source Max
|
short m_sZoneValueSrcAvg[16]; // Zone�� Source Avg
|
|
int m_nUMOriginX; // um���� x��ǥ (��������)
|
int m_nUMOriginY; // um���� y��ǥ (��������)
|
int m_nUMCenterAlignX; // um���� X��ǥ (Glass Center ����, ����κ��� ��)
|
int m_nUMCenterAlignY; // um���� Y��ǥ (Glass Center ����, ����κ��� ��)
|
int m_nUMCenterX; // um���� X��ǥ (Glass Center ����, ����κ��� ��)
|
int m_nUMCenterY; // um���� Y��ǥ (Glass Center ����, ����κ��� ��)
|
int m_nUMSizeX; // um���� X ũ�� -----------------------------UX
|
int m_nUMSizeY; // um���� Y ũ�� -----------------------------UY
|
int m_nUMSize; // um���� ũ��.
|
CRect m_RectUM; // ���� ���� ���� �簢��.
|
|
short/*SERVER_DefectSizeType*/ m_DefectSizeType; // ���� ũ�� ����enum SERVER_DefectSizeType { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra };
|
short/*SERVER_DefectPeakType*/ m_DefectPeakType; // Peak�� ����.
|
short/*Judgement*/ m_DefectJudgement; // ���� ����.
|
BOOL m_bDefectCutoff; // �� ���� ����(TRUE= Cutoff, FALSE)
|
short/*MAP16_DefectClass*/ m_DefectClass; // BOE Defect Class 16��� ����
|
int m_nPadRegionIdx; // PAD ���� ���
|
|
int m_nUMCellX; // �� ���� ���� x ��ǥ
|
int m_nUMCellY; // �� ���� ���� y ��ǥ
|
short m_nModelIdx; // �� ��° ���ΰ�?
|
short m_nCellIdx; // ���° ���ΰ�?
|
short m_nCellGate; // ���� Gate����(����� ���� ��)
|
short m_nCellData; // ���� Data����(����� ���� ��)
|
short m_nCellGateAlign; // ���� Gate����(����� ���� ��)
|
short m_nCellDataAlign; // ���� Data����(����� ���� ��)
|
|
int m_nUMShotX; // �� ���� X��ǥ
|
int m_nUMShotY; // �� ���� Y��ǥ
|
short m_nMaskDefectIdx; // �� Glass���� �߰ߵ� ����ũ���� ������ �ε���.
|
short m_nShotIdx; // �뱤�� ��ȣ
|
short m_nMatchShotCount; // ������ ����ũ ������ ��.
|
short m_nMatchMaxSize; // ������ ����ũ �� ���� ū ������ ũ��.
|
|
short m_nRepeatCount; // ���Ӱ��Թ߰����� ������ǥ �ݺ���
|
short m_nMaskRepeatCount;
|
int m_StackInfo; // Stack Flag
|
BOOL m_bRealStack; // Stack ������ ���� TD(TRUE) ����, ������ ���� TD(FALSE)������ �� �ִ�.
|
short m_nStackStepCount; // Stack ��
|
short m_nStackColorIdx; // Color�� �����ϴ� �ε���.
|
//CString m_strStackStep[CFDEFECT_STACKCOUNT]; // Stack Step.
|
char m_strStackFirst[60]; // Stack Step. //201221 CJH - �ִ� ������ 60bytes
|
char m_strUnitID[16]; // ���־��̵�
|
|
int m_ClassificationType; // enum ClassificationType { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI�� TFE�� �߰� �з� �˰���� ���� ���.
|
int m_nAtomWidth; // TFE �� �ʺ�
|
int m_nAtomHeight; // TFE �� ����
|
short/*ReKind*/ m_DefectKind; // ���� ����
|
|
char m_strDefectCode[32]; // Defect Code
|
BOOL m_bMergeState; // Merge Status
|
char m_strAoiImageName[256]; // Defect Image Name(CCD Image)
|
int m_nDefectMerge; // ���� ������ ���� ����
|
|
|
int m_nPixelSizeOrigin;
|
int m_nScratchRatio;
|
int m_nDensity; // ���� ���� ������ ���� �е� [2017.8.2 bhs]
|
|
char m_strDefectName[16];
|
char m_strDefectType[16];
|
|
double m_dScanResolution;
|
double m_dConvResolution;
|
|
int m_nAngle; // ����
|
int m_nMajor; // ���� ����(Long)
|
int m_nMinor; // ���� ����(Short)
|
int m_nCompact; // Blob ������ �������� �ϴ� ���� ���̿� Blob ������ ����
|
int m_nThickness; // Blob ���̿� ������ ���� (Area / Major)
|
|
short m_nHliLevelIdx; // �� ��° ����(ä��)�ΰ�?
|
int m_nHliLayers; // �ش���Կ� ���Ե� ���̾� bitó��
|
|
BOOL m_bShrinked; //210323 CJH - Frame Shrink ���� �߰�
|
|
char m_strAoiImagePath[255];
|
char m_strReviewImagePath[255];
|
|
int m_nAlignRectLeft;
|
int m_nAlignRectTop;
|
int m_nAlignRectBottom;
|
int m_nAlignRectRight;
|
|
|
//���� ���� ���� [������ 2019/1/19]
|
_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;
|
|
//Char ���� �ڷᰡ �ִ� ���� ��ġ [������ 2018/11/12]
|
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;
|
};
|
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;
|
};
|