SDC C-Project CF Review 프로그램
LYW
2021-10-15 e5fa774d622d6852fe8e1f033045aed221649108
ReviewHistory/ReveiwHistory/DitGlassRawStruct.h
»õ ÆÄÀÏ
@@ -0,0 +1,750 @@
#pragma once
#define SHAREDMEMNAME_BASICINFO _T("DIT.GLASSRAWSYSTEM.SHAREDMEM.BASICINFO")
#define SHAREDMEMNAME_GLASSDATA   _T("DIT.GLASRAWSYSTEM.SHAREDMEM.GLASSDATA")
#define MUTEX_RAWMESSENGER      _T("MUTEX_RAWMESSENGER_IPC")
#define COMMAND_MAXCOUNT 8
#define RAWMESSENGER_MAXCAMNUM 30
#define RAWMESSENGER_MAXSCANNUM 20
#define RAWMESSENGER_MAXHLINUM 8
#define MAX_ZONE_NUM 16
namespace ditRaw
{
   enum ReviewPlanType
   {
      RPT_Review = 0,
      RPT_User,
      RTP_WSI,
      RTP_PlanMeasure,
      RTP_Reflow,
      RTP_WsiReflow,
      RTP_UserWsi,
      RPT_AOICustom = 1000,
   };
};
enum emAOIProcStep
{
   APS_None = 0,
   //AOI
   APS_GlassLoading,
   APS_InspectEnd,
   //Review
   APS_CustomReviewRead,
   APS_ReviewStart,
   APS_ReviewEnd,
   RPS_StepNum
};
struct _grmGlassData
{
   void clear()
   {
      memset(this, 0, sizeof(_grmGlassData));
   }
   //Glass ì •ë³´
   char m_strFileName[64];
   char m_strPath[256];
   int m_nCellNum;
   int m_nDefectNum;
   int m_nOriginDirection;            //{ GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 };
   int m_nConerCutDirection;
   int   m_nScanCoordinateY;            //여기가 0이면 ì¼ë°˜, 1이면 Scan방향이 y축(즉 scan방향이 ë‹¨ì¶•, offline ì„¤ë¹„ ê°™ì€)
   int m_nGlassSizeWidth;
   int m_nGlassSizeHeight;
   //설비정보
   char m_strLine[32];
   char m_strEquipType[32];
   char m_strEquipID[32];
   char m_strStepID[32];
   char m_strOperID[32];
   CTime   m_tmGlassLoading;         //3. START_TIME
   CTime   m_tmInspectionStart;         //3. START_TIME
   CTime   m_tmInspectionEND;         //4. END_TIME
   CTime   m_tmReviewLoading;
   CTime   m_tmReviewEnd;
   //기본 ë¬¼ë¥˜ì •ë³´
   char m_strGlassID[32];            //Glass ID
   char m_strPPID[32];
   char m_strEPPID[32];
   char m_strLotID[32];            //LOT_ID
   char m_strSLotID[32];            //SLOT_ID
   char m_strRecipeName[32];         //RECIPE_NAME
   char m_strGlassJudge[32];         //GLASS_JUDGE
   char m_strGlassCode[32];         //Grade or Code
   char m_strProductID[16];         //4. PRODUCT_ID
   //VCR
   int m_nVcrResultCode;
   char m_strVCRResult[32];
   char m_strVCRGlassID[32];
   //결함 ê°¯ìˆ˜ ê´€ë¦¬ ë³€ìˆ˜
   int         m_nDefectNumSizeSmall;
   int         m_nDefectNumSizeMid;
   int         m_nDefectNumSizeLarge;
   int         m_nDefectNumSizeHuge;
   int         m_nDefectNumSizeUltra;
   int         m_nDefectNumLocActive;
   int         m_nDefectNumLocPad;
   int         m_nDefectNumLocCrack;
   int         m_nDefectNumLocBM;
   int         m_nDefectNumTypeTB;
   int         m_nDefectNumTypeTW;
   int         m_nDefectNumTypeRB;
   int         m_nDefectNumTypeRW;
   int         m_nDefectNumTypeMD;
   int         m_nDefectNumTypeCD;
   int         m_nDefectNumTypeMC;
   int         m_nDefectNumJudgeOKWhite;
   int         m_nDefectNumJudgeOKBlack;
   int         m_nDefectNumJudgeNG;
   int         m_nDefectNumJudgeRW;
   int         m_nDefectNumJudgeRP;
   int         m_nDefectNumJudgeRV;
   int         m_nDefectNumJudgeTR;
   int         m_nDefectNumJudgePR;
   int         m_nDefectNumStackTD;
   int         m_nDefectNumStackSD;
   int         m_nDefectNumStackPD;
   int         m_nDefectNumStackSP;
   //카메라/스캔 ì •ë³´ [김태현 2018/12/5]
   short      m_nCameraNum;
   short      m_nScanNum;
   unsigned char m_nGrayLevelAvg[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
   unsigned char m_nGrayLevelMin[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
   unsigned char m_nGrayLevelMax[RAWMESSENGER_MAXCAMNUM*RAWMESSENGER_MAXSCANNUM*RAWMESSENGER_MAXHLINUM];
   //얼라인 ì •ë³´ um[김태현 2018/12/10]
   double   m_nAlignCcdTheta;
   double   m_nAlignCcdShitftX;
   double   m_nAlignCcdShitftY;
   double   m_nAlignPreTheta;
   double   m_nAlignPreShitftX;
   double   m_nAlignPreShitftY;
   double   m_nAlignBasicTheta;
   double   m_nAlignBasicShitftX;
   double   m_nAlignBasicShitftY;
   char   m_strAlignFirst[64];
   char   m_strAlignSecond[64];
//    char   m_strAlignPath[256];
   //CSOT용 ë¬¼ë¥˜ ì •ë³´ [김태현 2018/12/5]
   char m_strCassetteSequenceNo[16];
   char m_strOwnerCode[16];         //2. OWNER_CODE
   char m_strOwnerType[16];         //3. OWNER_TYPE
   char m_strProcessID[21];         //5. PROCESS_ID
   char m_strProductGroup[16];         //6. PRODUCT_GROUP
   char m_strCSTID[16];            //8. CST_ID
   char m_strPreProcessID[16];         //10.PRE_PROCESS_ID
   char m_strPreEQPID[16];            //11.PRE_EQP_ID
   char m_strPreChamerID[16];         //12.PRE_CHAMBER_ID
   char m_strPreRecipeID[32];         //13.PRE_RECIPE_ID
   char m_strGroupID[16];            //14.GROUP_ID
   char m_cAutoSampleFlag;            //15.AUTOSAMPLEFLAG
   // CPRJ용 ë¬¼ë¥˜ ì •ë³´
   char m_strProdType[3];
   char m_strBatchID[13];
   char m_strPairHPanelID[13];
   char m_strGlassThickNess[2];
   char m_strCompCount[2];
   char m_strGlassState[2];
   char m_strInsFlag[2];
   char m_strPanelPosition[2];
   char m_strFlowHistory[2];
   char m_strCount1[2];
   char m_strCount2[2];
   //Mura Data 0412 nwh
   char m_strMaxAvgGray[12];
   char m_strMaxPortion[12];
     //1226NWH
   char m_strReadingFlag[2];
   BYTE m_nUniqueID[4];
   int m_nSlot_No;
   BYTE m_nGlassDataBitSignal[4];
   bool m_bJob_end;
   //201217 CJH - ì°ì€ Defect Review ê°œìˆ˜
   int m_nReviewNum;
   //201221 CJH - íŒŒì‹±í•œ Stack ê²°ê³¼
   int m_nStackNum;
   BOOL m_bStackRead;
   int m_nRawMergeNum;
   BOOL m_bRawMergeRead;
   //210203 CJH - CutOff ëŒ€ìƒ ê²°í•¨ ìˆ˜
   int m_nCutOffDefectNum;
   //210323 CJH - Server/Frame Shrink ì •ë³´ ì¶”ê°€
   char m_strShrinked[6];
   //210326 CJH - RAW ìž…ë ¥ Defect ìˆ˜ëŸ‰ ìƒí•œ ì‚¬ìš©ì—¬ë¶€
   BOOL m_bRawCutoff;
};
struct _grmBlockData
{
   void clear()
   {
      memset(this, 0, sizeof(_grmBlockData));
   }
   char m_strBlockID[16];            //1. BLOCK_ID
   char m_cBlockJudgeAOI;            //2. BLOCK_JUDGE_AOI
   char m_cBlockJudgeATS;            //4. BLOCK_JUDGE_ATS
   char m_cBlockJudgeTEG;            //5. BLOCK_JUDGE_TEG
   int m_nGlassIdDCR;               //22. GLASS_ID_DCR
};
struct _grmCellData
{
   void clear()
   {
      memset(this, 0, sizeof(_grmCellData));
   }
   int getTotalDefectNum(){return m_nDefectNumTypeTB+m_nDefectNumTypeTW+m_nDefectNumTypeRB+m_nDefectNumTypeRW; };
   int                  m_nCellID;                     //1. PANEL_ID
   short               m_nModelIdx;            // ëª‡ ë²ˆì§¸ ëª¨ë¸ì¸ê°€?
   char               m_strCellName[32];
   int                  m_rectCellLeft;
   int                  m_rectCellTop;
   int                  m_rectCellRight;
   int                  m_rectCellBottom;
   int/*Judgement*/      m_nJudgement;
   int                  m_nJudgeFlag;
   int                  m_nJudgeGlade;
   //결함 ê°¯ìˆ˜ ê´€ë¦¬ ë³€ìˆ˜
   int         m_nDefectNumSizeSmall;
   int         m_nDefectNumSizeMid;
   int         m_nDefectNumSizeLarge;
   int         m_nDefectNumSizeHuge;
   int         m_nDefectNumSizeUltra;
   int         m_nDefectNumLocActive;
   int         m_nDefectNumLocPad;
   int         m_nDefectNumLocCrack;
   int         m_nDefectNumLocBM;
   int         m_nDefectNumTypeTB;
   int         m_nDefectNumTypeTW;
   int         m_nDefectNumTypeRB;
   int         m_nDefectNumTypeRW;
   int         m_nDefectNumTypeMD;
   int         m_nDefectNumTypeCD;
   int         m_nDefectNumTypeMC;
   //Mura Data nwh 0404
   char      m_strProImage[32];
   char      m_strAvgGray_0[12];
   char      m_strPortion_0[12];
   //kyh Mura Data ì¶”ê°€ 0622
   char      m_strCorner_Gray_0[12];
   char      m_strAvgAmp_0[12];
   char      m_strFFTVar_0[12];
   char      m_strFFTVah_0[12];
   char      m_strFFTVaq_0[12];
   char      m_strFFTPK_0[12];
   char      m_strAvgGray_1[12];
   char      m_strPortion_1[12];
   //kyh Mura Data ì¶”ê°€ 0622
   char      m_strCorner_Gray_1[12];
   char      m_strAvgAmp_1[12];
   char      m_strFFTVar_1[12];
   char      m_strFFTVah_1[12];
   char      m_strFFTVaq_1[12];
   char      m_strFFTPK_1[12];
   char      m_strAvgGray_2[12];
   char      m_strPortion_2[12];
   //kyh Mura Data ì¶”ê°€ 0622
   char      m_strCorner_Gray_2[12];
   char      m_strAvgAmp_2[12];
   char      m_strFFTVar_2[12];
   char      m_strFFTVah_2[12];
   char      m_strFFTVaq_2[12];
   char      m_strFFTPK_2[12];
   char      m_strAvgGray_3[12];
   char      m_strPortion_3[12];
   //kyh Mura Data ì¶”ê°€ 0622
   char      m_strCorner_Gray_3[12];
   char      m_strAvgAmp_3[12];
   char      m_strFFTVar_3[12];
   char      m_strFFTVah_3[12];
   char      m_strFFTVaq_3[12];
   char      m_strFFTPK_3[12];
   int         m_nDefectNumJudgeOKWhite;
   int         m_nDefectNumJudgeOKBlack;
   int         m_nDefectNumJudgeNG;
   int         m_nDefectNumJudgeRW;
   int         m_nDefectNumJudgeRP;
   int         m_nDefectNumJudgeRV;
   int         m_nDefectNumJudgeTR;
   int         m_nDefectNumJudgePR;
   int         m_nReflowResult[8];         // 0: Reflow X 1: Reflow OK 2: Reflow NG
   // Filtering된 Stack별 ìˆ˜
   int         m_nDefectTDCount;
   int         m_nDefectSDCount;
   int         m_nDefectPDCount;
   int         m_nDefectSPCount;
   // Gate/Data ì´ ê°¯ìˆ˜
   int         m_nGateNum;
   int         m_nDataNum;
   // 210129 CJH - Cell Origin ë°©í–¥
   int         m_nCellXDir;
   int         m_nCellYDir;
};
struct _grmDefectReviewData
{
   void clear()
   {
      memset(this, 0, sizeof(_grmDefectReviewData));
   }
   //////////////////////////////////////////////////////////////////////////
   //여기서 ë¶€í„° ë¦¬ë·° ì˜ì—­ [김태현 2019/1/19]
   ditRaw::ReviewPlanType         m_nPlanType   ;
   int         m_nResultCode;  //0:None, 1:Success
   int         m_nShotIndex; //리뷰 ì°ì€ ìˆœë²ˆ [김태현 2018/12/5]
   int         m_nModuleIndex;
   int         m_nMagnificIndex;
   float      m_fManification;
   float      m_fManificResoultion;
   char      m_strRevImageName[256];
   char      m_strRevImagePath[256];
   //////////////////////////////////////////////////////////////////////////
   // Measure ì˜ì—­
   int         m_nMeasure_Index;
   int         m_nMeasure_ResultCode; //0:None, 1:Success
   float      m_fMesure_ResultData[8];   // 0:Type, 1:ShiftX, 2:ShiftY
   //////////////////////////////////////////////////////////////////////////
   // WSI영역
   int         m_nWsi_ResultCode; //0:None, 1:Success
   int         m_nWsi_Type;                           // í•¨ëª° / ëŒê¸°
   float      m_fWsi_ResultData[8];         // 0:Type, 1:Height(um), 2:Width
   char      m_strWsi_2DImageFilename[256];
   char      m_strWsi_3DImageFilename[256];
   int         m_nWsiReflowPositionIndex;               // WsiReflowPositionIndex
   int         m_nWsi_pReflowResultData[8];
   double      m_dWsi_DamDistance;
   double      m_dWsiMmMotorX;                        // WSI ëª¨í„° ì¢Œí‘œ 20180223 HJH
   double      m_dWsiMmMotorY;
   float      m_fWsiManification;                     // WSI ë°°ìœ¨
   //////////////////////////////////////////////////////////////////////////
   // Reflow ì˜ì—­
   int         m_nReflow_Index;
   int         m_nReflow_ResultCode; //0:None, // ê²€ì¶œí•œ Line의 ê°œìˆ˜. 3 ë¯¸ë§Œ : DAM2 Reflow íŒì •, 4~5 : DAM1 Reflow íŒì •, 6 : no Reflow íŒì • / -1 : image not loaded, -2 : roi setting error, -3 : roi length error, -5 : select wrong side
   float      m_fReflow_LinePosData[8];
   int         m_nReflow_Side;
   int         m_nReflow_InspectionMode;
};
struct _grmDefectData
{
   void clear()
   {
      memset(this, 0, sizeof(_grmDefectData));
   }
   short         m_nDefectID;
   short         m_nCameraID;
   short         m_nScanIdx;
   //short         m_nDefectIdx;            // ì¹´ë©”라에서의 ê²°í•¨ ì¸ë±ìФ
   int            m_nDefectIdx;            // ì¹´ë©”라에서의 ê²°í•¨ ì¸ë±ìФ 201207 CJH - ìžë¦¿ ìˆ˜ ë„˜ì¹¨. int형으로 ë³€ê²½
   int            m_nPixelConv;            // pixel ë‹¨ìœ„ ì¢Œí‘œ
   int            m_nPixelScan;            // pixel ë‹¨ìœ„ ì¢Œí‘œ
   short                     m_nPixelSize;            // ê²°í•¨í¬ê¸°      ---------------------------------PS
   short/*SERVER_DefectType*/      m_DefectType;            // ê²°í•¨ íƒ€ìž…   ---------------------------------DT
   short/*SERVER_DefectSubType*/   m_DefectSubType;         // ê²°í•¨ì˜ íŒì •상태.
   short/*SERVER_DefectBDType*/   m_DefectBDType;            // ê²°í•¨ íƒ€ìž… - Bright, Dark, Both
   short         m_sPixelWidth;            // í”½ì…€ë‹¨ìœ„ ê²°í•¨ ë„ˆë¹„
   short         m_sPixelHeight;            // í”½ì…€ë‹¨ìœ„ ê²°í•¨ ë†’이
   short         m_nLevelSrcMin;            // ê²°í•¨ ë°ê¸° Min   -----------------------------SN
   short         m_nLevelSrcMax;            // ê²°í•¨ ë°ê¸° Max   -----------------------------SX
   short         m_nLevelSrcAvg;            // ê²°í•¨ ë°ê¸° Avg   -----------------------------SA
   short         m_nLevelRefMin;            // ë¹„교대상 ë°ê¸° Min   -------------------------RN
   short         m_nLevelRefMax;            // ë¹„교대상 ë°ê¸° Max   -------------------------RX
   short         m_nLevelRefAvg;            // ë¹„교대상 ë°ê¸° Avg   -------------------------RA
   short         m_nLevelDiffMin;         // ë¹„교차 Min   ---------------------------------DN
   short         m_nLevelDiffMax;         // ë¹„교차 Max   ---------------------------------DX
   short         m_nLevelDiffAvg;         // ë¹„교차 Avg   ---------------------------------DA
   int            m_nDefectRScale;         // í”½ì…€ë‹¨ìœ„ ê²°í•¨ ë†’이   -------------------------RS
   short         m_sThreshold;            // ê²°í•¨ì„ ê²€ì¶œí•  ë•Œì˜ Threshold
   short         m_sThresholdAvg;         // ê²°í•¨ì„ ê²€ì¶œí•  ë•Œì˜ Threshold AVG
   short         m_sDefectPeak;            // ê²°í•¨ì˜ Peak.
   short         m_sDefectLevel;            // (DiffAvg - Th) BOE 8G ìš”청사항
   int            m_nPixelGlassStart;         // Glass ì‹œìž‘ í”½ì…€
   short         m_sDefectLoc;
   short         m_sZoneClassPixelCount[16];
   short         m_sZonePixelCount[16];   // Zone별 ê²°í•¨ Pixel ìˆ˜
   short         m_sZoneValueMin[16];   // Zone별 ê²°í•¨ Min
   short         m_sZoneValueMax[16];   // Zone별 ê²°í•¨ Max
   short         m_sZoneValueAvg[16];   // Zone별 ê²°í•¨ Avg
   short         m_sZonePixelPercent[16];   // --------------------------------------Z0~ZF
   //210127 CJH - Zone별 Source Gray ìž…ë ¥
   short         m_sZoneValueSrcMin[16];   // Zone별 Source Min
   short         m_sZoneValueSrcMax[16];   // Zone별 Source Max
   short         m_sZoneValueSrcAvg[16]; // Zone별 Source Avg
   int            m_nUMOriginX;            // um단위 x좌표 (원점기준)
   int            m_nUMOriginY;            // um단위 y조표 (원점기준)
   int            m_nUMCenterAlignX;         // um단위 X좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • í›„)
   int            m_nUMCenterAlignY;         // um단위 Y좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • í›„)
   int            m_nUMCenterX;            // um단위 X좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • ì „)
   int            m_nUMCenterY;            // um단위 Y좌표 (Glass Center ê¸°ì¤€, ì–¼ë¼ì¸ë³´ì • ì „)
   int            m_nUMSizeX;               // um단위 X í¬ê¸°   -----------------------------UX
   int            m_nUMSizeY;               // um단위 Y í¬ê¸°   -----------------------------UY
   int            m_nUMSize;               // um단위 í¬ê¸°.
   CRect         m_RectUM;               // ë””펙 ì„¼í„° ê¸°ì¤€ ì‚¬ê°í˜•.
   short/*SERVER_DefectSizeType*/   m_DefectSizeType;         // ê²°í•¨ í¬ê¸° ì¢…류enum SERVER_DefectSizeType      { SizeType_Unknown = 0, SizeType_Small, SizeType_Mid, SizeType_Large, SizeType_Huge, SizeType_Ultra };
   short/*SERVER_DefectPeakType*/   m_DefectPeakType;         // Peak의 ì¢…류.
   short/*Judgement*/            m_DefectJudgement;         // ê²°í•¨ íŒì •.
   BOOL               m_bDefectCutoff;         // ì»· ì˜¤í”„ ë””펙(TRUE= Cutoff, FALSE)
   short/*MAP16_DefectClass*/      m_DefectClass;            // BOE Defect Class 16등분 êµ¬ë¶„
   int            m_nPadRegionIdx;         // PAD ì˜ì—­ ì¸ë±ìФ
   int            m_nUMCellX;               // ì…€ ì›ì  ê¸°ì¤€ x ì¢Œí‘œ
   int            m_nUMCellY;               // ì…€ ì›ì  ê¸°ì¤€ y ì¢Œí‘œ
   short         m_nModelIdx;            // ëª‡ ë²ˆì§¸ ëª¨ë¸ì¸ê°€?
   short         m_nCellIdx;               // ëª‡ë²ˆì§¸ ì…€ì¸ê°€?
   short         m_nCellGate;            // ì…€ë³„ Gate라인(얼라인 ë³´ì • ì „)
   short         m_nCellData;            // ì…€ë³„ Data라인(얼라인 ë³´ì • ì „)
   short         m_nCellGateAlign;         // ì…€ë³„ Gate라인(얼라인 ë³´ì • í›„)
   short         m_nCellDataAlign;         // ì…€ë³„ Data라인(얼라인 ë³´ì • í›„)
   int            m_nUMShotX;               // ìƒ· ê¸°ì¤€ X좌표
   int            m_nUMShotY;               // ìƒ· ê¸°ì¤€ Y좌표
   short         m_nMaskDefectIdx;         // í•œ Glass에서 ë°œê²¬ëœ ë§ˆìŠ¤í¬ê²°í•¨ ë¬¶ìŒì˜ ì¸ë±ìФ.
   short         m_nShotIdx;               // ë…¸ê´‘샷 ë²ˆí˜¸
   short         m_nMatchShotCount;         // ë™ì¼í•œ ë§ˆìŠ¤í¬ ê²°í•¨ì˜ ìˆ˜.
   short         m_nMatchMaxSize;         // ë™ì¼í•œ ë§ˆìŠ¤í¬ ì¤‘ ê°€ìž¥ í° ê²°í•¨ì˜ í¬ê¸°.
   short         m_nRepeatCount;            // ì—°ì†ê²°í•¨ë°œê²¬ìœ„한 ë™ì¼ì¢Œí‘œ ë°˜ë³µìˆ˜
   short         m_nMaskRepeatCount;
   int            m_StackInfo;            // Stack Flag
   BOOL         m_bRealStack;            // Stack ë¨¸ì§€ì— ì˜í•œ TD(TRUE) ì¸ì§€, í•„터링에 ì˜í•œ TD(FALSE)구분할 ìˆ˜ ìžˆë‹¤.
   short         m_nStackStepCount;         // Stack ìˆ˜
   short         m_nStackColorIdx;         // Color를 ì„ íƒí•˜ëŠ” ì¸ë±ìФ.
   //CString         m_strStackStep[CFDEFECT_STACKCOUNT];         // Stack Step.
   char         m_strStackFirst[60];         // Stack Step. //201221 CJH - ìµœëŒ€ ì‚¬ì´ì¦ˆ 60bytes
   char         m_strUnitID[16];            // ìœ ë‹›ì•„이디
   int            m_ClassificationType;            // enum ClassificationType         { ClassType_None= 0, ClassType_PI_Over= 1, ClassType_PI_Under= 2, ClassType_TFE_Circle= 3, ClassType_Bubble, ClassType_Scratch, ClassType_Particle}; Classification Type, PI나 TFE등 ì¶”ê°€ ë¶„류  ì•Œê³ ë¦¬ì¦˜ ì ìš© ê²°ê³¼.
   int            m_nAtomWidth;            // TFE í•µ ë„ˆë¹„
   int            m_nAtomHeight;            // TFE í•µ ë†’이
   short/*ReKind*/         m_DefectKind;            // ê²°í•¨ ì¢…류
   char         m_strDefectCode[32];         // Defect Code
   BOOL         m_bMergeState;            // Merge Status
   char         m_strAoiImageName[256];         // Defect Image Name(CCD Image)
   int            m_nDefectMerge;      // í˜„재 ë””펙의 ë¨¸ì§€ ì—¬ë¶€
   int            m_nPixelSizeOrigin;
   int            m_nScratchRatio;
   int            m_nDensity;         // ì›í˜• ê²°í•¨ êµ¬ë¶„을 ìœ„한 ë°€ë„ [2017.8.2 bhs]
   char         m_strDefectName[16];
   char         m_strDefectType[16];
   double         m_dScanResolution;
   double         m_dConvResolution;
   int            m_nAngle;               // ê°ë„
   int            m_nMajor;               // ìž¥ì¶• ê¸¸ì´(Long)
   int            m_nMinor;               // ë‹¨ì¶• ê¸¸ì´(Short)
   int            m_nCompact;               // Blob ìž¥ì¶•을 ì§€ë¦„으로 í•˜ëŠ” ì›ì˜ ë„“이와 Blob ë„“이의 ë¹„율
   int            m_nThickness;            // Blob ë„“이와 ìž¥ì¶•의 ë¹„율 (Area / Major)
   short         m_nHliLevelIdx;            // ëª‡ ë²ˆì§¸ ë ˆë²¨(채널)인가?
   int            m_nHliLayers;            // í•´ë‹¹ê²°í•¨ì— í¬í•¨ëœ ë ˆì´ì–´ bit처리
   BOOL         m_bShrinked;            //210323 CJH - Frame Shrink ì •ë³´ ì¶”ê°€
   char         m_strAoiImagePath[255];
   char         m_strReviewImagePath[255];
   int            m_nAlignRectLeft;
   int            m_nAlignRectTop;
   int            m_nAlignRectBottom;
   int            m_nAlignRectRight;
   _grmDefectReviewData m_ReviewDefect;
};
enum emGlassRawCommand
{
   grcNone = 0,
   //AOI Sequence
   grcSequenceGlassLoading = 1,
   grcSequenceInspectEnd = 2,
   //Review Sequence
   grcSequenceReviewStart = 3,
   grcSequenceReviewEnd = 4,
   grcSequenceCustomReviewDataRead = 10,
   grcWriteRaw = 101,
   grcReadRaw = 102,
   grcWriteBin = 201,
   grcReadBin = 202,
   grcReviewWriteBIn = 301,
   grcGlassRawCommand
};
struct _grmDitCommand
{
   struct _grmCommand
   {
      int nCommand;
      char strParam[256];
      short nResult;
   };
   short m_nCommandIdxWrite;
   short m_nCommandIdxRead;
   _grmCommand m_nCommandBuffer[COMMAND_MAXCOUNT];
};
struct _grmDitMemInfo
{
   //공유 ë©”모리 ìƒì„±í•  ê³µê°„ ê²°ì • [김태현 2018/11/12]
   size_t m_nGlassRawDataSize;
   int m_nGlassMaxDataNum;
   int m_nBlockMaxDataNum;
   int m_nCellMaxDataNum;
   int m_nDefectMaxDataNum;
   int m_nStackMaxDataNum;
   int m_nRawMergeMaxDataNum;
   //Char ê¸°ì¤€ ìžë£Œê°€ ìžˆëŠ” ì‹œìž‘ ìœ„치 [김태현 2018/11/12]
   int m_nGlassDataPoint;
   int m_nBlockDataPoint;
   int m_nCellDataPoint;
   int m_nDefectDataPoint;
   int m_nStackDataPoint;
   int m_nRawMergeDataPoint;
   int m_nSizeOfGlassData;
   int m_nSizeOfBlockData;
   int m_nSizeOfCellData;
   int m_nSizeOfDefectData;
   int m_nSizeOfStackData;
   int m_nSizeOfRawMergeData;
};
struct _grmDitGlassRawInfo : public _grmDitMemInfo, public _grmDitCommand
{
   size_t m_nGlassLoadingCount;
   emAOIProcStep m_ClientProcStep; //AOI, Review가 ë³´ë‚¸ ëª…ë ¹
   emAOIProcStep m_ServerProcStep; //GlassRaw Messenger(Server)가 ì²˜ë¦¬ ì™„료 í•œ ëª…ë ¹
};
class CgrmGlassRawData
{
public:
   CgrmGlassRawData()
   {
      m_pGlassRawData = NULL;
      m_bRefAlloc = FALSE;
   };
   ~CgrmGlassRawData()
   {
      clear();
   };
   void clear()
   {
      if(m_bRefAlloc) { m_pGlassRawData = NULL; return;}
      if(m_pGlassRawData)
      {
         delete [] m_pGlassRawData;
         m_pGlassRawData = NULL;
      }
   };
   BOOL ImportGlassRaw(_grmDitMemInfo* pInfo, char* pData, bool bRefAlloc = false)
   {
      if(pInfo == NULL) return FALSE;
      if(m_pGlassRawData && pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) clear();
      if(m_pGlassRawData == NULL) m_pGlassRawData = new char[ pInfo->m_nGlassRawDataSize ];
      m_MemInfo = *pInfo;
      m_nGlassRawDataSize = pInfo->m_nGlassRawDataSize;
      m_nGlassMaxDataNum  = pInfo->m_nGlassMaxDataNum ;
      m_nBlockMaxDataNum   = pInfo->m_nBlockMaxDataNum   ;
      m_nCellMaxDataNum   = pInfo->m_nCellMaxDataNum  ;
      m_nDefectMaxDataNum = pInfo->m_nDefectMaxDataNum;
      m_nStackMaxDataNum   = pInfo->m_nStackMaxDataNum   ;
      m_nGlassDataPoint   = pInfo->m_nGlassDataPoint  ;
      m_nBlockDataPoint   = pInfo->m_nBlockDataPoint   ;
      m_nCellDataPoint    = pInfo->m_nCellDataPoint   ;
      m_nDefectDataPoint  = pInfo->m_nDefectDataPoint ;
      m_nStackDataPoint   = pInfo->m_nStackDataPoint   ;
      m_nSizeOfGlassData  = pInfo->m_nSizeOfGlassData ;
      m_nSizeOfBlockData   = pInfo->m_nBlockDataPoint   ;
      m_nSizeOfCellData   = pInfo->m_nSizeOfCellData  ;
      m_nSizeOfDefectData = pInfo->m_nSizeOfDefectData;
      m_nSizeOfStackData  = pInfo->m_nSizeOfStackData   ;
      if(bRefAlloc)
      {
         m_pGlassRawData = pData;
      }
      else
      {
         if(pData)
         {
            memcpy(m_pGlassRawData, pData, sizeof(char)*pInfo->m_nGlassRawDataSize);
         }
         else
         {
            memset(m_pGlassRawData, 0, sizeof(char)*pInfo->m_nGlassRawDataSize );
         }
      }
      m_pGlassData  = (_grmGlassData*)&m_pGlassRawData[pInfo->m_nGlassDataPoint];
      m_pBlockData      = (_grmBlockData*)&m_pGlassRawData[pInfo->m_nBlockDataPoint];
      m_pCellData   = (_grmCellData*)&m_pGlassRawData[pInfo->m_nCellDataPoint];
      m_pDefectData = (_grmDefectData*)&m_pGlassRawData[pInfo->m_nDefectDataPoint];
      m_pStackData = (_grmDefectData*)&m_pGlassRawData[pInfo->m_nStackDataPoint];
      m_bRefAlloc = bRefAlloc;
      return TRUE;
   };
   BOOL ExportGlassRaw(_grmDitMemInfo* pInfo, char* pData)
   {
      if(pInfo == NULL || pData == NULL) return FALSE;
      if(1) //new type //메모리 ì´ ê³µê°„ í¬ê¸°ì— ìƒê´€ì—†ì´
      {
         //if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE;
         if(pInfo->m_nSizeOfGlassData  !=  m_MemInfo.m_nSizeOfGlassData)  return FALSE;
         if(pInfo->m_nSizeOfBlockData  !=  m_MemInfo.m_nSizeOfBlockData)  return FALSE;
         if(pInfo->m_nSizeOfCellData   !=  m_MemInfo.m_nSizeOfCellData)   return FALSE;
         if(pInfo->m_nSizeOfDefectData !=  m_MemInfo.m_nSizeOfDefectData) return FALSE;
         if(pInfo->m_nSizeOfStackData  !=  m_MemInfo.m_nSizeOfStackData)    return FALSE;
         if(pInfo->m_nCellMaxDataNum < m_pGlassData->m_nCellNum) return FALSE;
         if(pInfo->m_nDefectMaxDataNum < m_pGlassData->m_nDefectNum) return FALSE;
         if(pInfo->m_nStackMaxDataNum < m_pGlassData->m_nDefectNum) return FALSE;
         memcpy(&pData[pInfo->m_nGlassDataPoint], m_pGlassData,    pInfo->m_nSizeOfGlassData* 1);
         memcpy(&pData[pInfo->m_nBlockDataPoint], m_pBlockData,    pInfo->m_nSizeOfBlockData* 1);
         memcpy(&pData[pInfo->m_nCellDataPoint], m_pCellData,    pInfo->m_nSizeOfCellData*m_pGlassData->m_nCellNum);
         memcpy(&pData[pInfo->m_nDefectDataPoint], m_pDefectData, pInfo->m_nSizeOfDefectData*m_pGlassData->m_nDefectNum);
         memcpy(&pData[pInfo->m_nStackDataPoint], m_pStackData, pInfo->m_nSizeOfStackData*m_pGlassData->m_nDefectNum);
      }
      else //if() //type old
      {
         if(pInfo->m_nGlassRawDataSize != m_MemInfo.m_nGlassRawDataSize) return FALSE;
         if(pInfo->m_nSizeOfGlassData  !=  m_MemInfo.m_nSizeOfGlassData)  return FALSE;
         if(pInfo->m_nSizeOfBlockData  !=  m_MemInfo.m_nSizeOfBlockData)  return FALSE;
         if(pInfo->m_nSizeOfCellData   !=  m_MemInfo.m_nSizeOfCellData)   return FALSE;
         if(pInfo->m_nSizeOfDefectData !=  m_MemInfo.m_nSizeOfDefectData) return FALSE;
         memcpy(pData, m_pGlassRawData, sizeof(char)*pInfo->m_nGlassRawDataSize);
      }
      return TRUE;
   };
   _grmGlassData*   GetGlassData(){return m_pGlassData;};
   _grmBlockData*   GetBlockData(int nIndex){return &m_pBlockData[nIndex];};
   _grmCellData*   GetCellData(int nIndex){return &m_pCellData[nIndex];};
   _grmDefectData*   GetDefectData(int nIndex){return &m_pDefectData[nIndex];};
   _grmDitMemInfo* GetMemInfo(){return &m_MemInfo;};
   _grmDefectData* GetStackData(int nIndex) { return &m_pStackData[nIndex]; };
protected:
   _grmDitMemInfo  m_MemInfo;
   char* m_pGlassRawData;
   _grmGlassData*  m_pGlassData;
   _grmBlockData*   m_pBlockData;
   _grmCellData*   m_pCellData;
   _grmDefectData* m_pDefectData;
   _grmDefectData*   m_pStackData;
   size_t m_nGlassRawDataSize;
   int m_nGlassMaxDataNum;
   int m_nBlockMaxDataNum;
   int m_nCellMaxDataNum;
   int m_nDefectMaxDataNum;
   int m_nStackMaxDataNum;
   int m_nGlassDataPoint;
   int m_nBlockDataPoint;
   int m_nCellDataPoint;
   int m_nDefectDataPoint;
   int m_nStackDataPoint;
   int m_nSizeOfGlassData;
   int m_nSizeOfBlockData;
   int m_nSizeOfCellData;
   int m_nSizeOfDefectData;
   int m_nSizeOfStackData;
private:
   bool m_bRefAlloc;
};