public ParticipantVehicleNamesDataDecoder()
        {
            packetBase = new PacketBaseDecoder();
            vehicles   = new VehicleInfoArrayDecoder();

            Add(packetBase);
            Add(vehicles);
        }
コード例 #2
0
        public VehicleClassNamesDataDecoder()
        {
            packetBase = new PacketBaseDecoder();
            classInfo  = new ClassInfoArrayDecoder();

            Add(packetBase);
            Add(classInfo);
        }
        public TimeStatsDataDecoder()
        {
            packetBase = new PacketBaseDecoder();
            participantsChangedTimestamp = new FourByteDecoder();
            stats = new ParticipantsStatsArrayDecoder();

            Add(packetBase);
            Add(participantsChangedTimestamp);
            Add(stats);
        }
        public ParticipantsDataDecoder()
        {
            packetBase = new PacketBaseDecoder();
            participantsChangedTimestamp = new FourByteDecoder();
            name        = new StringMatrixDecoder(PARTICIPANTS_PER_PACKET, PARTICIPANT_NAME_LENGTH_MAX);
            nationality = new FourByteArrayDecoder(PARTICIPANTS_PER_PACKET);
            index       = new TwoByteArrayDecoder(PARTICIPANTS_PER_PACKET);

            Add(packetBase);
            Add(participantsChangedTimestamp);
            Add(name);
            Add(nationality);
            Add(index);
        }
コード例 #5
0
        public GameStateDataDecoder()
        {
            packetBase         = new PacketBaseDecoder();
            buildVersionNumber = new TwoByteDecoder();
            gameState          = new GameStateDecoder();
            ambientTemperature = new OneByteDecoder();
            trackTemperature   = new OneByteDecoder();
            rainDensity        = new OneByteDecoder();
            snowDensity        = new OneByteDecoder();
            windSpeed          = new OneByteDecoder();
            windDirectionX     = new OneByteDecoder();
            windDirectionY     = new OneByteDecoder();

            Add(packetBase);
            Add(buildVersionNumber);
            Add(gameState);
            Add(ambientTemperature);
            Add(trackTemperature);
            Add(rainDensity);
            Add(snowDensity);
            Add(windSpeed);
            Add(windDirectionX);
            Add(windDirectionY);
        }
コード例 #6
0
        public RaceDataDecoder()
        {
            packetBase                 = new PacketBaseDecoder();
            worldFastestLapTime        = new FourByteDecoder();
            personalFastestLapTime     = new FourByteDecoder();
            personalFastestSector1Time = new FourByteDecoder();
            personalFastestSector2Time = new FourByteDecoder();
            personalFastestSector3Time = new FourByteDecoder();
            worldFastestSector1Time    = new FourByteDecoder();
            worldFastestSector2Time    = new FourByteDecoder();
            worldFastestSector3Time    = new FourByteDecoder();
            trackLength                = new FourByteDecoder();
            trackLocation              = new StringMatrixDecoder(1, TRACKNAME_LENGTH_MAX);
            trackVariation             = new StringMatrixDecoder(1, TRACKNAME_LENGTH_MAX);
            translatedTrackLocation    = new StringMatrixDecoder(1, TRACKNAME_LENGTH_MAX);
            translatedTrackVariation   = new StringMatrixDecoder(1, TRACKNAME_LENGTH_MAX);
            lapsTimeInEvent            = new LapsTimeInEvent(); // need to test this in binary
            enforcedPitStopLap         = new OneByteDecoder();

            Add(packetBase);
            Add(worldFastestLapTime);
            Add(personalFastestLapTime);
            Add(personalFastestSector1Time);
            Add(personalFastestSector2Time);
            Add(personalFastestSector3Time);
            Add(worldFastestSector1Time);
            Add(worldFastestSector2Time);
            Add(worldFastestSector3Time);
            Add(trackLength);
            Add(trackLocation);
            Add(trackVariation);
            Add(translatedTrackLocation);
            Add(translatedTrackVariation);
            Add(lapsTimeInEvent);
            Add(enforcedPitStopLap);
        }
        public TimingsDataDecoder()
        {
            packetBase      = new PacketBaseDecoder();
            numParticipants = new OneByteDecoder();
            participantsChangedTimestamp = new FourByteDecoder();
            eventTimeRemaining           = new FourByteDecoder();
            splitTimeAhead        = new FourByteDecoder();
            splitTimeBehind       = new FourByteDecoder();
            splitTime             = new FourByteDecoder();
            participants          = new ParticipantInfoArrayDecoder(ParticipantInfoArrayDecoder.UDP_STREAMER_PARTICIPANTS_SUPPORTED);
            localParticipantIndex = new TwoByteDecoder();
            tickCount             = new FourByteDecoder();

            Add(packetBase);
            Add(numParticipants);
            Add(participantsChangedTimestamp);
            Add(eventTimeRemaining);
            Add(splitTimeAhead);
            Add(splitTimeBehind);
            Add(splitTime);
            Add(participants);
            Add(localParticipantIndex);
            Add(tickCount);
        }
コード例 #8
0
        public void Process()
        {
            while (true)
            {
                var bytes = reader.Read();
                if (bytes.Length > 0)
                {
                    int index      = 0;
                    var packetBase = new PacketBaseDecoder();

                    packetBase.Decode(ref bytes, ref index);

                    if (packetBase.packetType.UInt() == 0 && bytes.Length == 559)
                    {
                        var telem = new TelemetryDataDecoder();
                        index = 0;

                        telem.Decode(ref bytes, ref index);
                        packets.Push(telem);
                    }

                    if (packetBase.packetType.UInt() == 1 && bytes.Length == 308)
                    {
                        var race = new RaceDataDecoder();
                        index = 0;

                        race.Decode(ref bytes, ref index);
                        packets.Push(race);
                    }

                    if (packetBase.packetType.UInt() == 2 && bytes.Length == 1136)
                    {
                        var participants = new ParticipantsDataDecoder();
                        index = 0;

                        participants.Decode(ref bytes, ref index);
                        packets.Push(participants);
                    }

                    if (packetBase.packetType.UInt() == 3 && bytes.Length == 1063)
                    {
                        var timing = new TimingsDataDecoder();
                        index = 0;

                        timing.Decode(ref bytes, ref index);
                        packets.Push(timing);
                    }

                    if (packetBase.packetType.UInt() == 4 && bytes.Length == 24)
                    {
                        var gamestate = new GameStateDataDecoder();
                        index = 0;

                        gamestate.Decode(ref bytes, ref index);
                        packets.Push(gamestate);
                    }

                    if (packetBase.packetType.UInt() == 7 && bytes.Length == 1040)
                    {
                        var timestats = new TimeStatsDataDecoder();
                        index = 0;

                        timestats.Decode(ref bytes, ref index);
                        packets.Push(timestats);
                    }

                    if (packetBase.packetType.UInt() == 8 && bytes.Length == 1164)
                    {
                        var vehicleName = new ParticipantVehicleNamesDataDecoder();
                        index = 0;

                        vehicleName.Decode(ref bytes, ref index);
                        packets.Push(vehicleName);
                    }

                    if (packetBase.packetType.UInt() == 8 && bytes.Length == 1452)
                    {
                        var className = new VehicleClassNamesDataDecoder();
                        index = 0;

                        className.Decode(ref bytes, ref index);
                        packets.Push(className);
                    }
                }
            }
        }
        public TelemetryDataDecoder()
        {
            packetBase             = new PacketBaseDecoder();
            viewedParticipantIndex = new OneByteDecoder();
            unfilteredThrottle     = new OneByteDecoder();
            unfilteredBrake        = new OneByteDecoder();
            unfilteredSteering     = new OneByteDecoder();
            unfilteredClutch       = new OneByteDecoder();
            carFlags         = new OneByteDecoder();
            oilTempCelsius   = new TwoByteDecoder();
            oilPressureKPa   = new TwoByteDecoder();
            waterTempCelsius = new TwoByteDecoder();
            waterPressureKpa = new TwoByteDecoder();
            fuelPressureKpa  = new TwoByteDecoder();
            fuelCapacity     = new OneByteDecoder();
            brake            = new OneByteDecoder();
            throttle         = new OneByteDecoder();
            clutch           = new OneByteDecoder();
            fuelLevel        = new FourByteDecoder();
            speed            = new FourByteDecoder();
            rpm                   = new TwoByteDecoder();
            maxRpm                = new TwoByteDecoder();
            steering              = new OneByteDecoder();
            gearNumGears          = new GearNumGearsDecoder();
            boostAmount           = new OneByteDecoder();
            crashState            = new OneByteDecoder();
            odometerKM            = new FourByteDecoder();
            orientation           = new FourByteArrayDecoder(3);
            localVelocity         = new FourByteArrayDecoder(3);
            worldVelocity         = new FourByteArrayDecoder(3);
            angularVelocity       = new FourByteArrayDecoder(3);
            localAcceleration     = new FourByteArrayDecoder(3);
            worldAcceleration     = new FourByteArrayDecoder(3);
            extentsCentre         = new FourByteArrayDecoder(3);
            tyreFlags             = new OneByteArrayDecoder(4);
            terrain               = new OneByteArrayDecoder(4);
            tyreY                 = new FourByteArrayDecoder(4);
            tyreRPS               = new FourByteArrayDecoder(4);
            tyreTemp              = new OneByteArrayDecoder(4);
            tyreHeightAboveGround = new FourByteArrayDecoder(4);
            tyreWear              = new OneByteArrayDecoder(4);
            brakeDamage           = new OneByteArrayDecoder(4);
            suspensionDamage      = new OneByteArrayDecoder(4);
            brakeTempCelsius      = new TwoByteArrayDecoder(4);
            tyreTreadTemp         = new TwoByteArrayDecoder(4);
            tyreLayerTemp         = new TwoByteArrayDecoder(4);
            tyreCarcassTemp       = new TwoByteArrayDecoder(4);
            tyreRimTemp           = new TwoByteArrayDecoder(4);
            tyreInternalAirTemp   = new TwoByteArrayDecoder(4);
            tyreTempLeft          = new TwoByteArrayDecoder(4);
            tyreTempCenter        = new TwoByteArrayDecoder(4);
            tyreTempRight         = new TwoByteArrayDecoder(4);
            wheelLocalPositionY   = new FourByteArrayDecoder(4);
            rideHeight            = new FourByteArrayDecoder(4);
            suspensionTravel      = new FourByteArrayDecoder(4);
            suspensionVelocity    = new FourByteArrayDecoder(4);
            suspensionRideHeight  = new TwoByteArrayDecoder(4);
            airPressure           = new TwoByteArrayDecoder(4);
            engineSpeed           = new FourByteDecoder();
            engineTorque          = new FourByteDecoder();
            wings                 = new OneByteArrayDecoder(2);
            handBrake             = new OneByteDecoder();
            aeroDamage            = new OneByteDecoder();
            engineDamage          = new OneByteDecoder();
            joyPad0               = new FourByteDecoder();
            dPad                  = new OneByteDecoder();
            tyreCompound          = new StringMatrixDecoder(4, TYRE_NAME_LENGTH_MAX);
            turboBoostPressure    = new FourByteDecoder();
            fullPosition          = new FourByteArrayDecoder(3);
            brakeBias             = new OneByteDecoder();
            tickCount             = new FourByteDecoder();

            Add(packetBase);
            Add(viewedParticipantIndex);
            Add(unfilteredThrottle);
            Add(unfilteredBrake);
            Add(unfilteredSteering);
            Add(unfilteredClutch);
            Add(carFlags);
            Add(oilTempCelsius);
            Add(oilPressureKPa);
            Add(waterTempCelsius);
            Add(waterPressureKpa);
            Add(fuelPressureKpa);
            Add(fuelCapacity);
            Add(brake);
            Add(throttle);
            Add(clutch);
            Add(fuelLevel);
            Add(speed);
            Add(rpm);
            Add(maxRpm);
            Add(steering);
            Add(gearNumGears);
            Add(boostAmount);
            Add(crashState);
            Add(odometerKM);
            Add(orientation);
            Add(localVelocity);
            Add(worldVelocity);
            Add(angularVelocity);
            Add(localAcceleration);
            Add(worldAcceleration);
            Add(extentsCentre);
            Add(tyreFlags);
            Add(terrain);
            Add(tyreY);
            Add(tyreRPS);
            Add(tyreTemp);
            Add(tyreHeightAboveGround);
            Add(tyreWear);
            Add(brakeDamage);
            Add(suspensionDamage);
            Add(brakeTempCelsius);
            Add(tyreTreadTemp);
            Add(tyreLayerTemp);
            Add(tyreCarcassTemp);
            Add(tyreRimTemp);
            Add(tyreInternalAirTemp);
            Add(tyreTempLeft);
            Add(tyreTempCenter);
            Add(tyreTempRight);
            Add(wheelLocalPositionY);
            Add(rideHeight);
            Add(suspensionTravel);
            Add(suspensionVelocity);
            Add(suspensionRideHeight);
            Add(airPressure);
            Add(engineSpeed);
            Add(engineTorque);
            Add(wings);
            Add(handBrake);
            Add(aeroDamage);
            Add(engineDamage);
            Add(joyPad0);
            Add(dPad);
            Add(tyreCompound);
            Add(turboBoostPressure);
            Add(fullPosition);
            Add(brakeBias);
            Add(tickCount);
        }
コード例 #10
0
        public Test()
        {
            var     packetBase = new PacketBaseDecoder();
            IReader reader     = new UDPNonBlockingReader(5606);

            while (true)
            {
                var bytes = reader.Read();
                if (bytes.Length > 0)
                {
                    int index = 0;
                    packetBase.Decode(ref bytes, ref index);

                    //Console.WriteLine("Packet Type            " + packetBase.packetType.UInt());

                    if (packetBase.packetType.UInt() == 8 && packetBase.partialPacketIndex.UInt() == 2)
                    {
                        Console.WriteLine("Packet Type              " + packetBase.packetType.UInt());
                        Console.WriteLine("Packet number            " + packetBase.partialPacketNumber.UInt());
                        Console.WriteLine("Packet index             " + packetBase.partialPacketIndex.UInt());


                        var className = new VehicleClassNamesDataDecoder();
                        index = 0;
                        className.Decode(ref bytes, ref index);

                        for (int i = 0; i < 60; ++i)
                        {
                            Console.WriteLine("class index " + i + "                 " +
                                              className.classInfo.ClassInfoArray(i).classIndex.UInt());

                            Console.WriteLine("name " + i + "                        " +
                                              className.classInfo.ClassInfoArray(i).name.String(0));
                        }
                    }

                    if (packetBase.packetType.UInt() == 8 && packetBase.partialPacketIndex.UInt() == 1)
                    // disabled
                    // if (packetBase.packetType.UInt() == 8000 && packetBase.partialPacketIndex.UInt() == 1)
                    {
                        Console.WriteLine("Packet Type              " + packetBase.packetType.UInt());
                        Console.WriteLine("Packet number            " + packetBase.partialPacketNumber.UInt());
                        Console.WriteLine("Packet index             " + packetBase.partialPacketIndex.UInt());


                        var vehicleName = new ParticipantVehicleNamesDataDecoder();
                        index = 0;
                        vehicleName.Decode(ref bytes, ref index);

                        for (int i = 0; i < 16; ++i)
                        {
                            Console.WriteLine("index " + i + "                       " +
                                              vehicleName.vehicles.VehicleInfoArray(i).index.UInt());

                            Console.WriteLine("class " + i + "                       " +
                                              vehicleName.vehicles.VehicleInfoArray(i).vehicleClass.UInt());

                            Console.WriteLine("name " + i + "                        " +
                                              vehicleName.vehicles.VehicleInfoArray(i).name.String(0));
                        }
                    }

                    //if (packetBase.packetType.UInt() == 7 && bytes.Length == 1040)
                    // disable
                    if (packetBase.packetType.UInt() == 7000 && bytes.Length == 1040)
                    {
                        Console.WriteLine("Packet Type            " + packetBase.packetType.UInt());

                        var timestats = new TimeStatsDataDecoder();
                        index = 0;
                        timestats.Decode(ref bytes, ref index);

                        Console.WriteLine("participants Changed Timestamp                   " +
                                          timestats.participantsChangedTimestamp.UInt());


                        for (int i = 0; i < 32; ++i)
                        {
                            Console.WriteLine("fastest lap time " + i + "                       " +
                                              timestats.stats.ParticipantsStatsArray(i).fastestLapTime.TimeStamp());

                            Console.WriteLine("fastest sector 1 time " + i + "                  " +
                                              timestats.stats.ParticipantsStatsArray(i).fastestSector1Time.TimeStamp());


                            Console.WriteLine("fastest sector 2 time " + i + "                  " +
                                              timestats.stats.ParticipantsStatsArray(i).fastestSector2Time.TimeStamp());


                            Console.WriteLine("fastest sector 3 time " + i + "                  " +
                                              timestats.stats.ParticipantsStatsArray(i).fastestSector3Time.TimeStamp());


                            Console.WriteLine("last lap time " + i + "                          " +
                                              timestats.stats.ParticipantsStatsArray(i).lastLapTime.TimeStamp());


                            Console.WriteLine("last sector time " + i + "                       " +
                                              timestats.stats.ParticipantsStatsArray(i).lastSectorTime.TimeStamp());


                            Console.WriteLine("participant Online Rep " + i + "                 " +
                                              timestats.stats.ParticipantsStatsArray(i).participantOnlineRep.UInt());


                            Console.WriteLine("MP Participant Index " + i + "                   " +
                                              timestats.stats.ParticipantsStatsArray(i).MPParticipantIndex.UShort());
                        }
                    }

                    // if (packetBase.packetType.UInt() == 4 && bytes.Length == 24)
                    // disable
                    if (packetBase.packetType.UInt() == 4000 && bytes.Length == 24)
                    {
                        Console.WriteLine("Packet Type            " + packetBase.packetType.UInt());

                        var gamestate = new GameStateDataDecoder();
                        index = 0;
                        gamestate.Decode(ref bytes, ref index);

                        Console.WriteLine("build version number                   " +
                                          gamestate.buildVersionNumber.UShort());

                        Console.WriteLine("game state                             " +
                                          gamestate.gameState.GameState());

                        Console.WriteLine("session state                          " +
                                          gamestate.gameState.SessionState());

                        Console.WriteLine("ambient Temperature                    " +
                                          gamestate.ambientTemperature.Int());

                        Console.WriteLine("track Temperature                      " +
                                          gamestate.trackTemperature.Int());

                        Console.WriteLine("rain Density                           " +
                                          gamestate.rainDensity.UInt());

                        Console.WriteLine("snow Density                           " +
                                          gamestate.snowDensity.UInt());

                        Console.WriteLine("wind Speed                             " +
                                          gamestate.windSpeed.Int());

                        Console.WriteLine("wind DirectionX                   " +
                                          gamestate.windDirectionX.Int());

                        Console.WriteLine("wind DirectionY                   " +
                                          gamestate.windDirectionY.Int());
                    }

                    // if (packetBase.packetType.UInt() == 2 && bytes.Length == 1136)
                    //disabled
                    if (packetBase.packetType.UInt() == 2000 && bytes.Length == 1136)
                    {
                        Console.WriteLine("Packet Type            " + packetBase.packetType.UInt());

                        var participants = new ParticipantsDataDecoder();
                        index = 0;
                        participants.Decode(ref bytes, ref index);

                        Console.WriteLine("participants Changed Timestamp                   " +
                                          participants.participantsChangedTimestamp.UInt());

                        // I get a bunch of different names here not sure how this works
                        for (int i = 0; i < 16; ++i)
                        {
                            Console.WriteLine("name " + i + "                " +
                                              participants.name.String(i));
                        }

                        for (int i = 0; i < 16; ++i)
                        {
                            Console.WriteLine("nationality " + i + "         " +
                                              participants.nationality.UInt(i));
                        }

                        for (int i = 0; i < 16; ++i)
                        {
                            Console.WriteLine("index " + i + "               " +
                                              participants.index.UShort(i));
                        }
                    }

                    //if (packetBase.packetType.UInt() == 1 && bytes.Length == 308)
                    //disable
                    if (packetBase.packetType.UInt() == 10000 && bytes.Length == 308)
                    {
                        Console.WriteLine("Packet Type            " + packetBase.packetType.UInt());

                        var race = new RaceDataDecoder();
                        index = 0;
                        race.Decode(ref bytes, ref index);

                        Console.WriteLine("world Fastest Lap Time                   " +
                                          race.worldFastestLapTime.TimeStamp());

                        Console.WriteLine("personel Fastest Lap Time                " +
                                          race.personalFastestLapTime.TimeStamp());

                        Console.WriteLine("personal Fastest Sector1 Time            " +
                                          race.personalFastestSector1Time.TimeStamp());

                        Console.WriteLine("personal Fastest Sector2 Time            " +
                                          race.personalFastestSector2Time.TimeStamp());

                        Console.WriteLine("personal Fastest Sector3 Time            " +
                                          race.personalFastestSector3Time.TimeStamp());

                        Console.WriteLine("world Fastest Sector1 Time               " +
                                          race.worldFastestSector1Time.TimeStamp());

                        Console.WriteLine("world Fastest Sector2 Time               " +
                                          race.worldFastestSector2Time.TimeStamp());

                        Console.WriteLine("world Fastest Sector3 Time               " +
                                          race.worldFastestSector3Time.TimeStamp());

                        Console.WriteLine("track length                             " +
                                          race.trackLength.Float());

                        Console.WriteLine("track location                           " +
                                          race.trackLocation.String(0));

                        Console.WriteLine("track variation                          " +
                                          race.trackVariation.String(0));

                        Console.WriteLine("translated Track Location                " +
                                          race.translatedTrackLocation.String(0));

                        Console.WriteLine("translated Track Variation               " +
                                          race.translatedTrackVariation.String(0));

                        Console.WriteLine("is timed event                           " +
                                          race.lapsTimeInEvent.IsTimedEvent());

                        Console.WriteLine("laps                                     " +
                                          race.lapsTimeInEvent.Laps());

                        Console.WriteLine("Time in Event                            " +
                                          race.lapsTimeInEvent.TimeInEvent());

                        Console.WriteLine("enforced Pit Stop Lap                    " +
                                          race.enforcedPitStopLap.Int());
                    }
                    //if (packetBase.packetType.UInt() == 0 && bytes.Length == 559)
                    // disabled
                    if (packetBase.packetType.UInt() == 5555 && bytes.Length == 1063)
                    {
                        var telem = new TelemetryDataDecoder();
                        index = 0;
                        telem.Decode(ref bytes, ref index);

                        Console.WriteLine("participant index                " +
                                          telem.viewedParticipantIndex.Int());

                        Console.WriteLine("unfiltered throttle              " +
                                          telem.unfilteredThrottle.UInt());

                        Console.WriteLine("unfiltered brake                 " +
                                          telem.unfilteredBrake.UInt());

                        Console.WriteLine("unfiltered steering              " +
                                          telem.unfilteredSteering.Int());

                        Console.WriteLine("unfiltered clutch                " +
                                          telem.unfilteredClutch.UInt());

                        Console.WriteLine("car flags                        " +
                                          telem.carFlags.CarFlags());

                        Console.WriteLine("oil temp celsius                 " +
                                          telem.oilTempCelsius.Short());

                        Console.WriteLine("oil pressure kpa                 " +
                                          telem.oilPressureKPa.UShort());

                        Console.WriteLine("water Temp Celsius               " +
                                          telem.waterTempCelsius.Short());

                        Console.WriteLine("water Pressure Kpa               " +
                                          telem.waterPressureKpa.UShort());

                        Console.WriteLine("fuel pressure kpa                " +
                                          telem.fuelPressureKpa.UShort());

                        Console.WriteLine("fuel capacity                    " +
                                          telem.fuelCapacity.UInt());

                        Console.WriteLine("brake                            " +
                                          telem.brake.UInt());

                        Console.WriteLine("throttle                         " +
                                          telem.throttle.UInt());

                        Console.WriteLine("clutch                           " +
                                          telem.clutch.UInt());

                        // between 1 full to 0 empty
                        Console.WriteLine("fuel level                       " +
                                          telem.fuelLevel.Float());

                        Console.WriteLine("speed                            " +
                                          telem.speed.Float());

                        Console.WriteLine("rpm                              " +
                                          telem.rpm.UShort());

                        Console.WriteLine("max rpm                          " +
                                          telem.maxRpm.UShort());

                        Console.WriteLine("steering                         " +
                                          telem.steering.Int());

                        Console.WriteLine("gear                             " +
                                          telem.gearNumGears.Gear());

                        Console.WriteLine("num gear                         " +
                                          telem.gearNumGears.NumGears());

                        Console.WriteLine("boost amount                     " +
                                          telem.boostAmount.UInt());

                        Console.WriteLine("odometer KM                      " +
                                          telem.odometerKM.Float());

                        Console.WriteLine("orientation 0                    " +
                                          telem.orientation.Float(0));

                        Console.WriteLine("orientation 1                    " +
                                          telem.orientation.Float(1));

                        Console.WriteLine("orientation 2                    " +
                                          telem.orientation.Float(2));

                        Console.WriteLine("local velocity 0                 " +
                                          telem.localVelocity.Float(0));

                        Console.WriteLine("local velocity 1                 " +
                                          telem.localVelocity.Float(1));

                        Console.WriteLine("local velocity 2                 " +
                                          telem.localVelocity.Float(2));

                        Console.WriteLine("world velocity 0                 " +
                                          telem.worldVelocity.Float(0));

                        Console.WriteLine("world velocity 1                 " +
                                          telem.worldVelocity.Float(1));

                        Console.WriteLine("local velocity 2                 " +
                                          telem.worldVelocity.Float(2));

                        Console.WriteLine("angular velocity 0               " +
                                          telem.angularVelocity.Float(0));

                        Console.WriteLine("angular velocity 1               " +
                                          telem.angularVelocity.Float(1));

                        Console.WriteLine("angular velocity 2               " +
                                          telem.angularVelocity.Float(2));

                        Console.WriteLine("local acceleration 0             " +
                                          telem.localAcceleration.Float(0));

                        Console.WriteLine("local acceleration 1             " +
                                          telem.localAcceleration.Float(1));

                        Console.WriteLine("local acceleration 2             " +
                                          telem.localAcceleration.Float(2));

                        Console.WriteLine("world acceleration 0             " +
                                          telem.worldAcceleration.Float(0));

                        Console.WriteLine("world acceleration 1             " +
                                          telem.worldAcceleration.Float(1));

                        Console.WriteLine("world acceleration 2             " +
                                          telem.worldAcceleration.Float(2));

                        Console.WriteLine("extents centre 0                 " +
                                          telem.extentsCentre.Float(0));

                        Console.WriteLine("extents centre 1                 " +
                                          telem.extentsCentre.Float(1));

                        Console.WriteLine("extents centre 2                 " +
                                          telem.extentsCentre.Float(2));

                        Console.WriteLine("tyre flags 0                     " +
                                          telem.tyreFlags.TyreFlag(0));

                        Console.WriteLine("tyre flags 1                     " +
                                          telem.tyreFlags.TyreFlag(1));

                        Console.WriteLine("tyre flags 2                     " +
                                          telem.tyreFlags.TyreFlag(2));

                        Console.WriteLine("tyre flags 3                     " +
                                          telem.tyreFlags.TyreFlag(3));

                        Console.WriteLine("terrain 0                        " +
                                          telem.terrain.Terrain(0));

                        Console.WriteLine("terrain 1                        " +
                                          telem.terrain.Terrain(1));

                        Console.WriteLine("terrain 2                        " +
                                          telem.terrain.Terrain(2));

                        Console.WriteLine("terrain 3                        " +
                                          telem.terrain.Terrain(3));

                        Console.WriteLine("tyre y 0                         " +
                                          telem.tyreY.Float(0));

                        Console.WriteLine("tyre y 1                         " +
                                          telem.tyreY.Float(1));

                        Console.WriteLine("tyre y 2                         " +
                                          telem.tyreY.Float(2));

                        Console.WriteLine("tyre y 3                         " +
                                          telem.tyreY.Float(3));

                        Console.WriteLine("tyre rps 0                       " +
                                          telem.tyreRPS.Float(0));

                        Console.WriteLine("tyre rps 1                       " +
                                          telem.tyreRPS.Float(1));

                        Console.WriteLine("tyre rps 2                       " +
                                          telem.tyreRPS.Float(2));

                        Console.WriteLine("tyre rps 3                       " +
                                          telem.tyreRPS.Float(3));

                        Console.WriteLine("tyre temp 0                      " +
                                          telem.tyreTemp.UInt(0));

                        Console.WriteLine("tyre temp 1                      " +
                                          telem.tyreTemp.UInt(1));

                        Console.WriteLine("tyre temp 2                      " +
                                          telem.tyreTemp.UInt(2));

                        Console.WriteLine("tyre temp 3                      " +
                                          telem.tyreTemp.UInt(3));

                        Console.WriteLine("tyre height above ground 0       " +
                                          telem.tyreHeightAboveGround.Float(0));

                        Console.WriteLine("tyre height above ground 1       " +
                                          telem.tyreHeightAboveGround.Float(1));

                        Console.WriteLine("tyre height above ground 2       " +
                                          telem.tyreHeightAboveGround.Float(2));

                        Console.WriteLine("tyre height above ground 3       " +
                                          telem.tyreHeightAboveGround.Float(3));

                        Console.WriteLine("tyre wear 0                      " +
                                          telem.tyreWear.UInt(0));

                        Console.WriteLine("tyre wear 1                      " +
                                          telem.tyreWear.UInt(1));

                        Console.WriteLine("tyre wear 2                      " +
                                          telem.tyreWear.UInt(2));

                        Console.WriteLine("tyre wear 3                      " +
                                          telem.tyreWear.UInt(3));

                        Console.WriteLine("brake damage 0                   " +
                                          telem.brakeDamage.UInt(0));

                        Console.WriteLine("brake damage 1                   " +
                                          telem.brakeDamage.UInt(1));

                        Console.WriteLine("brake damage 2                   " +
                                          telem.brakeDamage.UInt(2));

                        Console.WriteLine("brake damage 3                   " +
                                          telem.brakeDamage.UInt(3));

                        Console.WriteLine("suspension damage 0              " +
                                          telem.suspensionDamage.UInt(0));

                        Console.WriteLine("suspension damage 1              " +
                                          telem.suspensionDamage.UInt(1));

                        Console.WriteLine("suspension damage 2              " +
                                          telem.suspensionDamage.UInt(2));

                        Console.WriteLine("suspension damage 3              " +
                                          telem.suspensionDamage.UInt(3));

                        Console.WriteLine("brake temp celsius 0             " +
                                          telem.brakeTempCelsius.Short(0));

                        Console.WriteLine("brake temp celsius 1             " +
                                          telem.brakeTempCelsius.Short(1));

                        Console.WriteLine("brake temp celsius 2             " +
                                          telem.brakeTempCelsius.Short(2));

                        Console.WriteLine("brake temp celsius 3             " +
                                          telem.brakeTempCelsius.Short(3));

                        Console.WriteLine("tyre tread temp 0                " +
                                          telem.tyreTreadTemp.UShort(0));

                        Console.WriteLine("tyre tread temp 1                " +
                                          telem.tyreTreadTemp.UShort(1));

                        Console.WriteLine("tyre tread temp 2                " +
                                          telem.tyreTreadTemp.UShort(2));

                        Console.WriteLine("tyre tread temp 3                " +
                                          telem.tyreTreadTemp.UShort(3));

                        Console.WriteLine("tyre layer temp 0                " +
                                          telem.tyreLayerTemp.UShort(0));

                        Console.WriteLine("tyre layer temp 1                " +
                                          telem.tyreLayerTemp.UShort(1));

                        Console.WriteLine("tyre layer temp 2                " +
                                          telem.tyreLayerTemp.UShort(2));

                        Console.WriteLine("tyre layer temp 3                " +
                                          telem.tyreLayerTemp.UShort(3));

                        Console.WriteLine("tyre carcass temp 0              " +
                                          telem.tyreCarcassTemp.UShort(0));

                        Console.WriteLine("tyre carcass temp 1              " +
                                          telem.tyreCarcassTemp.UShort(1));

                        Console.WriteLine("tyre carcass temp 2              " +
                                          telem.tyreCarcassTemp.UShort(2));

                        Console.WriteLine("tyre carcass temp 3              " +
                                          telem.tyreCarcassTemp.UShort(3));

                        Console.WriteLine("tyre rim temp 0                  " +
                                          telem.tyreRimTemp.UShort(0));

                        Console.WriteLine("tyre rim temp 1                  " +
                                          telem.tyreRimTemp.UShort(1));

                        Console.WriteLine("tyre rim temp 2                  " +
                                          telem.tyreRimTemp.UShort(2));

                        Console.WriteLine("tyre rim temp 3                  " +
                                          telem.tyreRimTemp.UShort(3));

                        Console.WriteLine("tyre internal air temp 0         " +
                                          telem.tyreInternalAirTemp.UShort(0));

                        Console.WriteLine("tyre internal air temp 1         " +
                                          telem.tyreInternalAirTemp.UShort(1));

                        Console.WriteLine("tyre internal air temp 2         " +
                                          telem.tyreInternalAirTemp.UShort(2));

                        Console.WriteLine("tyre internal air temp 3         " +
                                          telem.tyreInternalAirTemp.UShort(3));

                        Console.WriteLine("tyre temp left 0                 " +
                                          telem.tyreTempLeft.UShort(0));

                        Console.WriteLine("tyre temp left 1                 " +
                                          telem.tyreTempLeft.UShort(1));

                        Console.WriteLine("tyre temp left 2                 " +
                                          telem.tyreTempLeft.UShort(2));

                        Console.WriteLine("tyre temp left 3                 " +
                                          telem.tyreTempLeft.UShort(3));

                        Console.WriteLine("tyre temp centre 0               " +
                                          telem.tyreTempCenter.UShort(0));

                        Console.WriteLine("tyre temp centre 1               " +
                                          telem.tyreTempCenter.UShort(1));

                        Console.WriteLine("tyre temp centre 2               " +
                                          telem.tyreTempCenter.UShort(2));

                        Console.WriteLine("tyre temp centre 3               " +
                                          telem.tyreTempCenter.UShort(3));

                        Console.WriteLine("tyre temp right 0                " +
                                          telem.tyreTempRight.UShort(0));

                        Console.WriteLine("tyre temp right 1                " +
                                          telem.tyreTempRight.UShort(1));

                        Console.WriteLine("tyre temp right 2                " +
                                          telem.tyreTempLeft.UShort(2));

                        Console.WriteLine("tyre temp right 3                " +
                                          telem.tyreTempRight.UShort(3));

                        Console.WriteLine("wheel local position y 0         " +
                                          telem.wheelLocalPositionY.Float(0));

                        Console.WriteLine("wheel local position y 1         " +
                                          telem.wheelLocalPositionY.Float(1));

                        Console.WriteLine("wheel local position y 2         " +
                                          telem.wheelLocalPositionY.Float(2));

                        Console.WriteLine("wheel local position y 3         " +
                                          telem.wheelLocalPositionY.Float(3));

                        Console.WriteLine("ride height 0                    " +
                                          telem.rideHeight.Float(0));

                        Console.WriteLine("ride height 1                    " +
                                          telem.rideHeight.Float(1));

                        Console.WriteLine("ride height 2                    " +
                                          telem.rideHeight.Float(2));

                        Console.WriteLine("ride height 3                    " +
                                          telem.rideHeight.Float(3));

                        Console.WriteLine("suspension travel 0              " +
                                          telem.suspensionTravel.Float(0));

                        Console.WriteLine("suspension travel 1              " +
                                          telem.suspensionTravel.Float(1));

                        Console.WriteLine("suspension travel 2              " +
                                          telem.suspensionTravel.Float(2));

                        Console.WriteLine("suspension travel 3              " +
                                          telem.suspensionTravel.Float(3));

                        Console.WriteLine("suspension velocity 0            " +
                                          telem.suspensionVelocity.Float(0));

                        Console.WriteLine("suspension velocity 1            " +
                                          telem.suspensionVelocity.Float(1));

                        Console.WriteLine("suspension velocity 2            " +
                                          telem.suspensionVelocity.Float(2));

                        Console.WriteLine("suspension velocity 3            " +
                                          telem.suspensionVelocity.Float(3));

                        Console.WriteLine("suspension ride height 0         " +
                                          telem.suspensionRideHeight.UShort(0));

                        Console.WriteLine("suspension ride height 1         " +
                                          telem.suspensionRideHeight.UShort(1));

                        Console.WriteLine("suspension ride height 2         " +
                                          telem.suspensionRideHeight.UShort(2));

                        Console.WriteLine("suspension ride height 3         " +
                                          telem.suspensionRideHeight.UShort(3));

                        Console.WriteLine("air pressure 0                   " +
                                          telem.airPressure.UShort(0));

                        Console.WriteLine("air pressure 1                   " +
                                          telem.airPressure.UShort(1));

                        Console.WriteLine("air pressure 2                   " +
                                          telem.airPressure.UShort(2));

                        Console.WriteLine("air pressure 3                   " +
                                          telem.airPressure.UShort(3));

                        Console.WriteLine("engine speed                     " +
                                          telem.engineSpeed.Float());

                        Console.WriteLine("engine torque                    " +
                                          telem.engineTorque.Float());

                        Console.WriteLine("wings 0                          " +
                                          telem.wings.UInt(0));

                        Console.WriteLine("wings 1                          " +
                                          telem.wings.UInt(1));

                        Console.WriteLine("handbrake                        " +
                                          telem.handBrake.UInt());

                        Console.WriteLine("aero damage                      " +
                                          telem.aeroDamage.UInt());

                        Console.WriteLine("engine damage                    " +
                                          telem.engineDamage.UInt());

                        Console.WriteLine("joy pad                          " +
                                          telem.joyPad0.UInt());

                        Console.WriteLine("d pad                            " +
                                          telem.dPad.UInt());

                        Console.WriteLine("d pad                            " +
                                          telem.dPad.UInt());

                        Console.WriteLine("tyre compond 0                   " +
                                          telem.tyreCompound.String(0));

                        Console.WriteLine("tyre compond 1                   " +
                                          telem.tyreCompound.String(1));

                        Console.WriteLine("tyre compond 2                   " +
                                          telem.tyreCompound.String(2));

                        Console.WriteLine("tyre compond 3                   " +
                                          telem.tyreCompound.String(3));

                        Console.WriteLine("turbo boost pressure             " +
                                          telem.turboBoostPressure.Float());

                        Console.WriteLine("full position 0                  " +
                                          telem.fullPosition.Float(0));

                        Console.WriteLine("full position 1                  " +
                                          telem.fullPosition.Float(1));

                        Console.WriteLine("full position 2                  " +
                                          telem.fullPosition.Float(2));

                        Console.WriteLine("brake bias                       " +
                                          telem.brakeBias.UInt());

                        Console.WriteLine("tick count                       " +
                                          telem.tickCount.UInt());
                    }

                    // if (packetBase.packetType.UInt() == 3 && bytes.Length == 1063)
                    // disabled
                    if (packetBase.packetType.UInt() == 5555 && bytes.Length == 1063)
                    {
                        var timing = new TimingsDataDecoder();
                        index = 0;
                        timing.Decode(ref bytes, ref index);

                        Console.WriteLine("num participants         " +
                                          timing.numParticipants.Int());

                        // No idea what this is but all participant packets have one
                        Console.WriteLine("changed timestamp        " +
                                          timing.participantsChangedTimestamp.UInt());

                        Console.WriteLine("split time ahead         " +
                                          timing.splitTimeAhead.Float());

                        Console.WriteLine("split time behind        " +
                                          timing.splitTimeBehind.Float());

                        Console.WriteLine("split time               " +
                                          timing.splitTime.Float());

                        // Not sure which one is which
                        Console.WriteLine("world position 0         " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).worldPosition.Short(0));

                        Console.WriteLine("world position 1         " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).worldPosition.Short(1));

                        Console.WriteLine("world position 2         " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).worldPosition.Short(2));

                        // Direction you are facing seems to go between 520-0
                        Console.WriteLine("orientation 0            " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).orientation.Short(0));

                        // these two might have something to do with pitch of the car?
                        Console.WriteLine("orientation 1            " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).orientation.Short(1));

                        Console.WriteLine("orientation 2            " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).orientation.Short(2));

                        Console.WriteLine("current lap distance     " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).currentLapDistance.UShort());

                        Console.WriteLine("Is Active                " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).racePosition.IsActive());

                        Console.WriteLine("Race Position            " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).racePosition.RacePosition());

                        Console.WriteLine("Sector                   " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).sector.Sector());

                        Console.WriteLine("Extra world x            " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).sector.XExtraPrecision());

                        Console.WriteLine("Extra world z            " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).sector.ZExtraPrecision());

                        Console.WriteLine("Flag Colours             " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).highestFlag.FlagColours());

                        Console.WriteLine("Flag Reason              " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).highestFlag.FlagReason());

                        Console.WriteLine("Pit Mode                 " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).pitModeSchedule.PitMode());

                        Console.WriteLine("Pit Schedule             " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).pitModeSchedule.PitSchedule());

                        // Car Index is broken waiting on patch
                        Console.WriteLine("Car Index                " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).carIndex.UShort());

                        Console.WriteLine("Race State               " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).raceState.RaceState());

                        Console.WriteLine("Invalid Lap              " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).raceState.InvalidLap());

                        Console.WriteLine("Current Lap              " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).currentLap.UInt());

                        Console.WriteLine("Current Time             " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).currentTime.TimeStamp());

                        Console.WriteLine("Current Sector Time      " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).currentSectorTime.TimeStamp());

                        Console.WriteLine("Participant Index        " +
                                          timing.participants.ParticipantInfoArray(timing.localParticipantIndex.Short()).participantIndex.UShort());
                    }
                }
            }
        }