public GXDebugItem ReadPgmTrace(GXDebugItem dbgItem, byte cmd) { dbgItem = dbgItem ?? new GXDebugItem(); dbgItem.MsgType = GXDebugMsgType.PGM_TRACE; dbgItem.DbgInfo = dbgItem.DbgInfo ?? new GXDebugInfoLocal(); dbgItem.ArgObj = null; GXDebugMsgType cmdMsgType = (GXDebugMsgType)cmd; bool hasSId = (cmd & 0x30) == GXDebugMsgType.TRACE_HAS_SID.ToByte(); bool hasLine1 = (cmd & 0x0F) == GXDebugMsgType.TRACE_HAS_LINE1.ToByte(); bool hasCol = cmdMsgType.HasFlag(GXDebugMsgType.TRACE_HAS_COL); dbgItem.Ticks = ReadScaledLong(); if (hasSId) { dbgItem.DbgInfo.SId = ReadVLUInt(); } else { switch ((cmd >> 4) & 0x3) { case 0: dbgItem.DbgInfo.SId = LastSId; break; case 1: dbgItem.DbgInfo.SId = LastSId + 1; break; case 2: dbgItem.DbgInfo.SId = LastSId - 1; break; } } if (hasLine1) { dbgItem.Arg1 = ReadVLUInt(); } else { byte difLine1 = (byte)(cmd & 0xF); if ((difLine1 & 0x08) == 0x08) { difLine1 |= 0xF0; } dbgItem.Arg1 = LastLine1 + (sbyte)difLine1; } if (hasCol) { dbgItem.Arg2 = ReadVLUInt(); } else { dbgItem.Arg2 = 0; } LastSId = dbgItem.DbgInfo.SId; LastLine1 = dbgItem.Arg1; return(dbgItem); }
public static byte ToByte(this GXDebugMsgType item) { return((byte)item); }
private GXDebugItem mPush(GXDebugInfo dbgInfo, GXDebugMsgType msgType, int arg1, int arg2, object argObj = null) { lock (saveLock) { if (ToSave != null) { Save(ToSave); ToSave = null; } GXDebugItem currentItem = Current[dbgIndex]; currentItem.DbgInfo = dbgInfo; currentItem.MsgType = msgType; currentItem.Arg1 = arg1; currentItem.Arg2 = arg2; currentItem.ArgObj = argObj; switch (msgType) { case GXDebugMsgType.SYSTEM: { switch ((GXDebugMsgCode)arg1) { case GXDebugMsgCode.INITIALIZE: case GXDebugMsgCode.EXIT: case GXDebugMsgCode.OBJ_CLEANUP: case GXDebugMsgCode.PGM_INFO: currentItem.Ticks = TICKS_NOT_NEEDED; break; default: currentItem.Ticks = TICKS_NOT_SET; break; } } break; case GXDebugMsgType.REGISTER_PGM: { currentItem.Ticks = TICKS_NOT_NEEDED; } break; default: currentItem.Ticks = TICKS_NOT_SET; break; } dbgIndex++; if (dbgIndex == Current.Length) { bool mSaving = false; lock (mSaveLock) { mSaving = saving; } if (mSaving) { waitSaveEvent.WaitOne(); } ToSave = Current; GXDebugItem[] swap = Current; Current = Next; Next = swap; pgmInfoTable.Clear(); dbgIndex = 0; } return(currentItem); } }