コード例 #1
0
        public override ETMDecodeState HandleByte(SymByte aByte)
        {
            ETMDecodeState nextState = this;

            //
            if (aByte == 0)
            {
                ++iASyncConsecutiveNullByteCount;
            }
            else if (aByte == 0x80 && iASyncConsecutiveNullByteCount == 5)
            {
                // That's the start of the a-sync packet
                iASyncConsecutiveNullByteCount = 0;
                base.StateData.SetSynchronized();
                nextState = new ETMDecodeStateSynchronized(base.StateData);
                Trace();
            }
            else
            {
                // Invalid byte
                throw new ETMException("ERROR - data is corrupt - expected null byte or end marker during A-SYNC");
            }
            //
            return(nextState);
        }
コード例 #2
0
        public override ETMDecodeState HandleByte(SymByte aByte)
        {
            ETMDecodeState nextState = new ETMDecodeStateSynchronized(base.StateData);

            Trace();
            return(nextState);
        }
コード例 #3
0
        public override ETMDecodeState HandleByte(SymByte aByte)
        {
            ETMDecodeState nextState = new ETMDecodeStateSynchronized(base.StateData);

            ETMPcktCycleCount cycle = new ETMPcktCycleCount(aByte);

            // Always save the byte
            iPreviousBytes.Add(aByte);

            // Is the top bit set? if so, then another branch packet follows.
            // If not, we're done.
            if (iPreviousBytes.Count == 5)
            {
                // Have obtained 5 bytes or then last byte of smaller run.
                Flush();
            }
            else if (cycle.MoreToCome)
            {
                nextState = this;
            }
            else
            {
                // Have obtained last byte of smaller run.
                Flush();
            }

            // Done.
            return(nextState);
        }
コード例 #4
0
        public override ETMDecodeState HandleByte(SymByte aByte)
        {
            ETMDecodeState nextState = this;

            if (iSeenHeader == false)
            {
                ETMPcktOutOfOrderData cycle = new ETMPcktOutOfOrderData(aByte);
                cycle.Matches(aByte);
                iDataByteCount = cycle.Size;
                iSeenHeader    = true;
            }
            else
            {
                iBytes.Add(aByte);
                //
                if (iBytes.Count == iDataByteCount)
                {
                    // Done
                    nextState = new ETMDecodeStateSynchronized(base.StateData);
                }
            }

            // Done.
            return(nextState);
        }
コード例 #5
0
        public override ETMDecodeState HandleByte(SymByte aByte)
        {
            ETMDecodeState nextState = this;

            //
            if (aByte == 0)
            {
                ++iASyncConsecutiveNullByteCount;
            }
            else if (aByte == 0x80 && iASyncConsecutiveNullByteCount == 5)
            {
                // That's the start of the a-sync packet
                iASyncConsecutiveNullByteCount = 0;
                base.StateData.SetSynchronized();
                nextState = new ETMDecodeStateSynchronized(base.StateData);
                Trace();
            }
            else
            {
                iASyncConsecutiveNullByteCount = 0;
                base.StateData.SetUnsynchronized();
            }
            //
            return(nextState);
        }
コード例 #6
0
        public override ETMDecodeState HandleByte(SymByte aByte)
        {
            // Handle the byte
            PerformStateOperation(aByte);

            // Decide what to return based upon current state
            ETMDecodeState nextState = this;

            if (iState == TState.EStateFinished)
            {
                iDecoder.FlushChanges();
                nextState = new ETMDecodeStateSynchronized(base.StateData);
            }

            // Done.
            return(nextState);
        }
コード例 #7
0
        public override ETMDecodeState HandleByte(SymByte aByte)
        {
            // TODO: test this
            ETMDecodeState nextState = this;
            //
            int  byteNumber = iContextIdBytesRequired - iBytesRemaining;
            uint val        = aByte.LShift(byteNumber * 8);

            iContextId |= val;
            //
            if (--iBytesRemaining == 0)
            {
                // Got everything
                base.StateData.SetContextID(iContextId);
                nextState = new ETMDecodeStateSynchronized(base.StateData);
            }
            //
            return(nextState);
        }
コード例 #8
0
        public override ETMDecodeState HandleByte(SymByte aByte)
        {
            ETMDecodeState nextState = this;

            //
            switch (iState)
            {
            case TState.EStateHeader:
                if (base.StateData.Config.ContextIDSize != 0)
                {
                    iState = TState.EStateContextId;
                }
                else
                {
                    iState = TState.EStateInformation;
                }
                break;

            case TState.EStateContextId:
                OnContextByte(aByte);
                break;

            case TState.EStateInformation:
                OnInformationByte(aByte);
                break;

            case TState.EStateAddress:
                OnAddress(aByte);
                break;

            default:
            case TState.EStateIdle:
                System.Diagnostics.Debug.Assert(false);
                break;
            }
            //
            if (iState == TState.EStateIdle)
            {
                nextState = new ETMDecodeStateSynchronized(base.StateData);
            }
            //
            return(nextState);
        }
コード例 #9
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);
        }