| | |
| | | |
| | | #define RAWMESSENGER_MAXCAMNUM 30 |
| | | #define RAWMESSENGER_MAXSCANNUM 20 |
| | | #define RAWMESSENGER_MAXHLINUM 8 |
| | | #define RAW_CODE_MAX 10 |
| | | |
| | | #define MAX_ZONE_NUM 16 |
| | | |
| | |
| | | RPT_AOICustom = 1000, |
| | | }; |
| | | }; |
| | | |
| | | /* < KJG 20240620 - #4942 ADD Start >*/ |
| | | enum emClientResult |
| | | { |
| | | APS_RES_None = 0, |
| | | APS_RES_BinarySuccess, |
| | | APS_RES_BinaryFail |
| | | }; |
| | | /* < KJG 20240620 - #4942 ADD End >*/ |
| | | |
| | | enum emAOIProcStep |
| | | { |
| | | APS_None = 0, |
| | | |
| | | //AOI |
| | | APS_GlassLoading, |
| | | APS_GlassLoading, |
| | | APS_InspectEnd, |
| | | //Review |
| | | APS_CustomReviewRead, |
| | |
| | | |
| | | 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]; |
| | | 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 |
| | |
| | | |
| | | //기본 물류정보 |
| | | char m_strGlassID[32]; //Glass ID |
| | | char m_strPPID[32]; |
| | | char m_strEPPID[32]; |
| | | 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 |
| | |
| | | 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_nDefectNumJudgeRV; |
| | | int m_nDefectNumJudgeTR; |
| | | int m_nDefectNumJudgePR; |
| | | |
| | | int m_nDefectNumJudgePT; /* < KJG 20231124 - #4627 ADD >*/ |
| | | /*< LHS 20211029 - #3783 MOD Start >*/ |
| | | int m_nDefectNumJudgeLine; |
| | | /*< LHS 20211029 - #3783 MOD End >*/ |
| | | int m_nDefectNumStackTD; |
| | | int m_nDefectNumStackSD; |
| | | int m_nDefectNumStackPD; |
| | |
| | | //카메라/스캔 정보 [김태현 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]; |
| | | 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_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_strFlowHistory[2]; |
| | | char m_strCount1[2]; |
| | | char m_strCount2[2]; |
| | | |
| | | char m_StrMergeList[10][12]; |
| | | //Mura Data 0412 nwh |
| | | float m_fMaxAvgGray; |
| | | float m_fMaxPortion; |
| | | char m_strMaxAvgGray[12]; |
| | | char m_strMaxPortion[12]; |
| | | |
| | | |
| | | //1226NWH |
| | |
| | | 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 |
| | | { |
| | |
| | | { |
| | | memset(this, 0, sizeof(_grmCellData)); |
| | | } |
| | | int getTotalDefectNum() { return m_nDefectNumTypeTB + m_nDefectNumTypeTW + m_nDefectNumTypeRB + m_nDefectNumTypeRW; }; |
| | | int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; }; |
| | | int m_nCellID; //1. PANEL_ID |
| | | short m_nModelIdx; // 몇 번째 모델인가? |
| | | |
| | |
| | | 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]; |
| | | float m_fAvgGray; |
| | | float m_fPortion; |
| | | 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_nDefectNumJudgeRV; |
| | | int m_nDefectNumJudgeTR; |
| | | int m_nDefectNumJudgePR; |
| | | |
| | | int m_nDefectNumJudgePT; /* < KJG 20231124 - #4627 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별 수 |
| | |
| | | |
| | | ////////////////////////////////////////////////////////////////////////// |
| | | //여기서 부터 리뷰 영역 [김태현 2019/1/19] |
| | | ditRaw::ReviewPlanType m_nPlanType; |
| | | ditRaw::ReviewPlanType m_nPlanType ; |
| | | int m_nResultCode; //0:None, 1:Success |
| | | int m_nShotIndex; //리뷰 찍은 순번 [김태현 2018/12/5] |
| | | int m_nModuleIndex; |
| | |
| | | float m_fManification; |
| | | float m_fManificResoultion; |
| | | char m_strRevImageName[256]; |
| | | char m_strRevImagePath[256]; |
| | | |
| | | ////////////////////////////////////////////////////////////////////////// |
| | | // Measure 영역 |
| | |
| | | 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]; |
| | | char m_strWsi_3DImageFilename[256]; |
| | | int m_nWsiReflowPositionIndex; // WsiReflowPositionIndex |
| | | int m_nWsi_pReflowResultData[8]; |
| | | double m_dWsi_DamDistance; |
| | |
| | | // 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]; |
| | | float m_fReflow_LinePosData[8]; |
| | | int m_nReflow_Side; |
| | | int m_nReflow_InspectionMode; |
| | | }; |
| | |
| | | int m_nPixelConv; // pixel 단위 좌표 |
| | | int m_nPixelScan; // pixel 단위 좌표 |
| | | |
| | | short m_nPixelSize; // 결함크기 ---------------------------------PS |
| | | /* < 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 |
| | |
| | | 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 입력 |
| | | //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_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_nStackStepCount; // Stack 수 |
| | | short m_nStackColorIdx; // Color를 선택하는 인덱스. |
| | | //CString m_strStackStep[CFDEFECT_STACKCOUNT]; // Stack Step. |
| | | char m_strStackFirst[60]; // Stack Step. //201221 CJH - 최대 사이즈 60bytes |
| | | /* < 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_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]; |
| | | |
| | | //리뷰 디펙 정보 [김태현 2019/1/19] |
| | | 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; |
| | | }; |
| | | |
| | |
| | | grcWriteBin = 201, |
| | | grcReadBin = 202, |
| | | |
| | | grcReviewWriteBIn = 301, |
| | | |
| | | grcGlassRawCommand |
| | | }; |
| | | |
| | |
| | | { |
| | | int nCommand; |
| | | char strParam[256]; |
| | | short nResult; |
| | | short nResult; |
| | | }; |
| | | short m_nCommandIdxWrite; |
| | | short m_nCommandIdxRead; |
| | | _grmCommand m_nCommandBuffer[COMMAND_MAXCOUNT]; |
| | | _grmCommand m_nCommandBuffer[COMMAND_MAXCOUNT]; |
| | | }; |
| | | |
| | | struct _grmDitMemInfo |
| | |
| | | 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_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)가 처리 완료 한 명령 |
| | | // m_ClientResultStep : Binary File 생성 감지하기 위한 신호로 사용 |
| | | emClientResult m_ClientResultStep; /* < KJG 20240620 - #4942 ADD Start >*/ |
| | | }; |
| | | |
| | | class CgrmGlassRawData |
| | |
| | | |
| | | void clear() |
| | | { |
| | | if (m_bRefAlloc) { m_pGlassRawData = NULL; return; } |
| | | if(m_bRefAlloc) { m_pGlassRawData = NULL; return;} |
| | | |
| | | if (m_pGlassRawData) |
| | | if(m_pGlassRawData) |
| | | { |
| | | delete[] m_pGlassRawData; |
| | | delete [] m_pGlassRawData; |
| | | m_pGlassRawData = NULL; |
| | | } |
| | | }; |
| | | BOOL ImportGlassRaw(_grmDitMemInfo* pInfo, char* pData, bool bRefAlloc = false) |
| | | { |
| | | if (pInfo == NULL) return FALSE; |
| | | if(pInfo == NULL) return FALSE; |
| | | |
| | | if (m_pGlassRawData && pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) clear(); |
| | | if(m_pGlassRawData && pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) clear(); |
| | | |
| | | if (m_pGlassRawData == NULL) m_pGlassRawData = new char[pInfo->m_nGlassRawDataSize]; |
| | | 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_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_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_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) |
| | | if(bRefAlloc) |
| | | { |
| | | m_pGlassRawData = pData; |
| | | } |
| | | else |
| | | { |
| | | if (pData) |
| | | if(pData) |
| | | { |
| | | memcpy(m_pGlassRawData, pData, sizeof(char)*pInfo->m_nGlassRawDataSize); |
| | | } |
| | | else |
| | | { |
| | | memset(m_pGlassRawData, 0, sizeof(char)*pInfo->m_nGlassRawDataSize); |
| | | 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_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]; |
| | | |
| | |
| | | }; |
| | | BOOL ExportGlassRaw(_grmDitMemInfo* pInfo, char* pData) |
| | | { |
| | | if (pInfo == NULL || pData == NULL) return FALSE; |
| | | if(pInfo == NULL || pData == NULL) return FALSE; |
| | | |
| | | if (1) //new type //메모리 총 공간 크기에 상관없이 |
| | | 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_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_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_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_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_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; }; |
| | | _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; |