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);
        }
Exemplo n.º 2
0
        public static ETMPcktBase Create(SymByte aByte)
        {
            ETMPcktBase ret = null;

            //
            if (iPackets.Count == 0)
            {
                CreatePackets();
            }
            //
            ret = FindPacket(aByte);
            //
            return(ret);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }