public override ETMDecodeState HandleByte(SymByte aByte) { ETMDecodeState nextState = this; // ETMPcktBase packet = Packets.Factory.ETMPacketFactory.Create(aByte); if (packet != null) { if (packet is ETMPcktBranch) { nextState = new ETMDecodeStateBranch(base.StateData); base.StateData.PushBack(aByte); } else if (packet is ETMPcktIgnore) { nextState = new ETMDecodeStateIgnore(base.StateData); base.StateData.PushBack(aByte); } else if (packet is ETMPcktISync) { nextState = new ETMDecodeStateISync(base.StateData); base.StateData.PushBack(aByte); } else if (packet is ETMPcktPHeaderFormat1 || packet is ETMPcktPHeaderFormat2) { nextState = new ETMDecodeStatePHeader(base.StateData); base.StateData.PushBack(aByte); } else if (packet is ETMPcktASync) { nextState = new ETMDecodeStateASync(base.StateData); base.StateData.PushBack(aByte); } else if (packet is ETMPcktOutOfOrderData) { nextState = new ETMDecodeStateOutOfOrderData(base.StateData); base.StateData.PushBack(aByte); } else if (packet is ETMPcktCycleCount) { nextState = new ETMDecodeStateCycleCount(base.StateData); } else if (packet is ETMPcktContextID) { nextState = new ETMDecodeStateContextID(base.StateData); } else { base.Trace(string.Format("OP NOT HANDLED: {0:x2}", aByte)); System.Diagnostics.Debug.Assert(false); } } else { base.Trace(string.Format("WARNING: OP NOT RECOGNISED: {0:x2}", aByte)); System.Diagnostics.Debug.Assert(false); } // return(nextState); }
public static ETMPcktBase Create(SymByte aByte) { ETMPcktBase ret = null; // if (iPackets.Count == 0) { CreatePackets(); } // ret = FindPacket(aByte); // return(ret); }
private static ETMPcktBase FindPacket(SymByte aByte) { ETMPcktBase ret = new ETMPcktUnknown(); // int count = iPackets.Count; for (int i = 0; i < count; i++) { ETMPcktBase packet = iPackets[i]; if (packet.Matches(aByte)) { ret = packet; ret.RawByte = aByte; break; } } // return(ret); }
public override ETMDecodeState HandleByte(SymByte aByte) { ETMDecodeState nextState = new ETMDecodeStateSynchronized(base.StateData); // ETMPcktBase packet = Packets.Factory.ETMPacketFactory.Create(aByte); if (packet is ETMPcktPHeaderFormat1) { ETMPcktPHeaderFormat1 pHeader1 = (ETMPcktPHeaderFormat1)packet; ProcessFormat1Conditions(pHeader1); } else if (packet is ETMPcktPHeaderFormat2) { ETMPcktPHeaderFormat2 pHeader2 = (ETMPcktPHeaderFormat2)packet; ProcessFormat2Conditions(pHeader2); } else { throw new ETMException("ERROR: P-HEADER is not supported"); } // return(nextState); }