Ejemplo n.º 1
0
        public byte[] InverseTransform(byte[] input)
        {
            var itm = new List <byte[]>();

            for (var i = 0; i < input.Length; i++)
            {
                itm.Add(new byte[input.Length]);
            }

            for (var i = 0; i < itm.Count; i++)
            {
                for (var j = 0; j < input.Length; j++)
                {
                    itm[j]    = ByteMethods.ShiftArray(itm[j], 1);
                    itm[j][0] = input[j];
                }

                itm.Sort(new ByteArrayComparer());
            }

            for (var i = 0; i < itm.Count; i++)
            {
                if (itm[i][0] == (byte)'^')
                {
                    return(itm[i]);
                }
            }
            return(null);
        }
Ejemplo n.º 2
0
        private void Fire_HS(object o)
        {
            GameData_HS package = new GameData_HS();

            /** DRIVER INPUTS **/
            package.Throttle = Convert.ToByte(200 * Telemetry.m.Sim.Player.Pedals_Throttle);
            package.Brake    = Convert.ToByte(200 * Telemetry.m.Sim.Player.Pedals_Brake);
            package.Clutch   = Convert.ToByte(200 * Telemetry.m.Sim.Player.Pedals_Clutch);
            package.Steer    = Convert.ToByte(100 * (1 + Telemetry.m.Sim.Player.SteeringAngle));

            /** PITS SITUATION ETC **/
            package.PitLimiter  = (byte)((Telemetry.m.Sim.Drivers.Player.PitLimiter) ? 1 : 0);
            package.InPits      = (byte)((Telemetry.m.Sim.Drivers.Player.Pits) ? 1 : 0);
            package.PitRequired = 0;     // TODO;
            package.EngineStall = (byte)((Telemetry.m.Sim.Drivers.Player.RPM < 500) ? 1 : 0);


            /** DRIVING INFO **/
            package.Gear      = (byte)((Telemetry.m.Sim.Player.Gear == 255) ? 11 : GetGear());
            package.Position  = (byte)Telemetry.m.Sim.Drivers.Player.Position;
            package.Wheelslip = 0;     // TODO
            package.Cars      = (byte)Telemetry.m.Sim.Session.Cars;

            /** TRACK INFO **/
            package.Flag       = 0; // TODO
            package.Temp_Water = Convert.ToByte(Telemetry.m.Sim.Player.Engine_Temperature_Water);
            package.Temp_Oil   = Convert.ToByte(Telemetry.m.Sim.Player.Engine_Temperature_Oil);
            package.Temp_Track = Convert.ToByte(Telemetry.m.Sim.Session.TrackTemperature);


            /** MORE DRIVING **/
            package.Speed     = Convert.ToUInt16(Math.Round(Math.Abs(Telemetry.m.Sim.Player.Speed * 3.6)));
            package.RPM       = Convert.ToUInt16(Math.Round(Math.Max(0, rads_to_rpm * Telemetry.m.Sim.Player.Engine_RPM)));
            package.Engine_HP =
                Convert.ToUInt16(
                    Math.Round(Math.Max(0,
                                        Telemetry.m.Sim.Player.Engine_Torque * Telemetry.m.Sim.Player.Engine_RPM *
                                        rads_to_rpm / 5252)));
            package.MetersDriven = Convert.ToUInt16(Math.Max(0, Telemetry.m.Sim.Drivers.Player.MetersDriven));

            /** LIVE DRIVING TIMES **/
            package.Laptime_Current = 0; // TODO
            package.Gap_Front       = 0; // TODO
            package.Gap_Back        = 0; // TODO

            package.Wipers = 0;
            package.Lights = (byte)((Telemetry.m.Sim.Drivers.Player.HeadLights) ? 1 : 0);;
            //package.Ignition = (byte)((Telemetry.m.Sim.Player.i) ? 1 : 0); ;
            package.Ignition = (byte)((Telemetry.m.Sim.Drivers.Player.Ignition) ? 1 : 0);;
            package.Ignition = 1;
            package.Pause    = (byte)((Telemetry.m.Sim.Session.Time == PreviousTime) ? 1 : 0);
            PreviousTime     = Telemetry.m.Sim.Session.Time;

            // Send package
            SendPackage(DashboardPackages.PACK_GAMEDATA_HS, ByteMethods.ToBytes(package));
        }
        public void CFind_p_m_In_hvad_op_mine_hjemmedrenge()
        {
            var haystack = ByteMethods.StringToByteArray("hvad op mine hjemmedrenge?");
            var needle   = ByteMethods.StringToByteArray("p manden?");
            var expected = new MatchPointer(6, 3);

            MatchPointer?actual = CFindMatchingBytes.FindLongestMatch(
                new ByteArrayIndexer(haystack, 0, haystack.Length),
                new ByteArrayIndexer(needle, 0, needle.Length));

            Assert.AreEqual(expected, actual);
        }
Ejemplo n.º 4
0
        public void TransformReturnsFromFemFladeFloedeboller()
        {
            var input    = "^fem flade flødeboller på et fladt flødebolle fad|";
            var expected = "åemtter|llfeeaøøaaldddfl  ^    ffllooffebb eeddpll"; //Has not been validated
            var bwt      = new BurrowsWheelerTransform();

            var inArr  = ByteMethods.StringToByteArray(input);
            var output = bwt.Transform(inArr);
            var actual = ByteMethods.ByteArrayToString(output);

            Assert.AreEqual(expected, actual);
        }
        public void Find_fl_in_femFlade_FromLongNeedle()
        {
            var haystack = ByteMethods.StringToByteArray("fem flade");
            var needle   = ByteMethods.StringToByteArray(" flødeboller på");
            var expected = new MatchPointer(3, 3);

            MatchPointer?actual = FindMatchingBytes.FindLongestMatch(
                new ByteArrayIndexer(haystack, 0, haystack.Length),
                new ByteArrayIndexer(needle, 0, needle.Length));

            Assert.AreEqual(expected, actual);
        }
Ejemplo n.º 6
0
        public void TransformFromText1()
        {
            var input =
                "^This is some small file, that noone wants to read because it is boring. Therefore it has been hidden here. Please do not share with any hostile intelligence.|";
            var expected =
                "..hdsseltnnyetseetootes,seeeege  ^|emw hhehc   enaid slrsmnrlrcrlbbrtdeghh enits t T T hltfr  h   wliiPlaesoeeeoi  iaadtsonfbhnoae eoaiiitau   oiiaoni s na  n."; //Has not been validated
            var bwt = new BurrowsWheelerTransform();

            var inArr  = ByteMethods.StringToByteArray(input);
            var output = bwt.Transform(inArr);
            var actual = ByteMethods.ByteArrayToString(output);

            Assert.AreEqual(expected, actual);
        }
Ejemplo n.º 7
0
        public void Write(NetworkPacket packet)
        {
            if (_mClients != null)
            {
                byte[] data   = ByteMethods.SerializeToBytes(packet);
                byte[] header = new byte[6];
                header[0] = (byte)'$';
                header[1] = (byte)'#';
                Array.Copy(BitConverter.GetBytes(data.Length), 0, header, 2, 4);

                foreach (var sc in _mClients)
                {
                    Traffic += data.Length + 6;
                    sc.PushGameData(header);
                    sc.PushGameData(data);
                    sc.FlushGameData();
                }
            }
        }
Ejemplo n.º 8
0
        public byte[] Transform(byte[] input)
        {
            var transformMatrix = new List <byte[]>();

            for (var i = 0; i < input.Length; i++)
            {
                transformMatrix.Add(ByteMethods.ShiftArray(input, i));
            }

            transformMatrix.Sort(new ByteArrayComparer());

            var result = new byte[input.Length];

            for (var i = 0; i < input.Length; i++)
            {
                result[i] = transformMatrix[i][input.Length - 1];
            }

            return(result);
        }
Ejemplo n.º 9
0
        public void Update()
        {
            // Update general telemetry:
            byte[] TelemeData = new byte[Marshal.SizeOf(typeof(rFactorTelemetry))];
            _mAccessor.ReadArray(0, TelemeData, 0, TelemeData.Length);
            Telemetry = ByteMethods.ToObject <rFactorTelemetry>(TelemeData);

            // Update all drivers:
            Drivers = new List <rFactorDriver>();

            /*for (int i = 0; i < Telemetry.Session.Cars; i++)
             * {
             *  int offset = 4 + 124 + 296 + i * 108;// TODO: autodetect
             *  byte[] DriverData = new byte[Marshal.SizeOf(typeof(rFactorDriver))];
             *  _mAccessor.ReadArray(offset, DriverData, 0, DriverData.Length);
             *
             *  rFactorDriver driver = ByteMethods.ToObject<rFactorDriver>(DriverData);
             *  Drivers.Add(driver);
             * }*/
        }
Ejemplo n.º 10
0
        private void SendPackage(DashboardPackages package, byte[] data)
        {
            DevicePacket pk = new DevicePacket((int)package, data);

            Telemetry.m.Peripherals.TX(pk, "");
            return;

            SerialPort_Lock.WaitOne();
            DashboardPacket packet = new DashboardPacket();

            packet.Sync1  = '$';
            packet.Sync2  = '&';
            packet.length = (UInt16)(data.Length);
            packet.id     = (byte)package;

            byte[] bPacket = ByteMethods.ToBytes(packet);
            sp.Write(bPacket, 0, 5);
            sp.Write(data, 0, data.Length);
            byte[] bf = new byte[2];
            bf[0] = 0;
            bf[1] = 0;
            sp.Write(bf, 0, 2);
            SerialPort_Lock.Release();
        }
Ejemplo n.º 11
0
 public void PushGameData(byte[] data)
 {
     ByteMethods.memcpy(_txBuffer, data, data.Length, _txPtr, 0);
     Array.Copy(data, 0, _txBuffer, _txPtr, data.Length);
     _txPtr += data.Length;
 }
Ejemplo n.º 12
0
        private void Fire_LS(object o)
        {
            GameData_LS package = new GameData_LS();

            /** TYRE TEMPERATURES **/
            if (Telemetry.m.Sim.Player.Tyre_Temperature_LF_Middle > 0)
            {
                package.TyreTemperature_LF = Convert.ToByte(Telemetry.m.Sim.Player.Tyre_Temperature_LF_Middle - 273.16);
                package.TyreTemperature_RF = Convert.ToByte(Telemetry.m.Sim.Player.Tyre_Temperature_RF_Middle - 273.16);
                package.TyreTemperature_LR = Convert.ToByte(Telemetry.m.Sim.Player.Tyre_Temperature_LR_Middle - 273.16);
                package.TyreTemperature_RR = Convert.ToByte(Telemetry.m.Sim.Player.Tyre_Temperature_RR_Middle - 273.16);
            }
            /** TYRE & BRAKE WEAR **/
            package.TyreWear_F  = Convert.ToByte(200 * (Telemetry.m.Sim.Drivers.Player.TyreWear_LF + Telemetry.m.Sim.Drivers.Player.TyreWear_RF) / 2.0);
            package.TyreWear_R  = Convert.ToByte(200 * (Telemetry.m.Sim.Drivers.Player.TyreWear_LR + Telemetry.m.Sim.Drivers.Player.TyreWear_RR) / 2.0);
            package.BrakeWear_F = 0;
            package.BrakeWear_R = 0;

            /** CURRENT FUEL INFO **/
            package.Fuel_Litre = Convert.ToUInt16(Telemetry.m.Sim.Player.Fuel * 10);
            package.Fuel_Laps  = 0;

            /** DRIVING TIMES **/
            package.Laptime_Last = Telemetry.m.Sim.Drivers.Player.LapTime_Last;
            package.Laptime_Best = Telemetry.m.Sim.Drivers.Player.LapTime_Best;
            switch (Telemetry.m.Sim.Drivers.Player.SectorsDriven % 3)
            {
            case 0:
                package.Split_Sector = Telemetry.m.Sim.Drivers.Player.Sector_3_Last - Telemetry.m.Sim.Drivers.Player.Sector_3_Best;
                break;

            case 1:
                package.Split_Sector = Telemetry.m.Sim.Drivers.Player.Sector_1_Last - Telemetry.m.Sim.Drivers.Player.Sector_1_Best;
                break;

            case 2:
                package.Split_Sector = Telemetry.m.Sim.Drivers.Player.Sector_2_Last - Telemetry.m.Sim.Drivers.Player.Sector_2_Best;
                break;
            }
            package.Split_Lap = Telemetry.m.Sim.Drivers.Player.LapTime_Best - Telemetry.m.Sim.Drivers.Player.LapTime_Last;

            package.RaceTime   = Telemetry.m.Sim.Session.Time - 30;
            package.RaceLength = 3600;

            SendPackage(DashboardPackages.PACK_GAMEDATA_LS, ByteMethods.ToBytes(package));

            /*** Temporarely do cardata here as well ***/
            CarData cardata = new CarData();

            cardata.RPM_Max  = Convert.ToUInt16(Telemetry.m.Sim.Player.Engine_RPM_Max_Live * rads_to_rpm);
            cardata.RPM_Idle = Convert.ToUInt16(Telemetry.m.Sim.Player.Engine_RPM_Idle_Max * rads_to_rpm);

            //cardata.HP_Max = Convert.ToUInt16(EngineCurve.GetMaxHP());
            cardata.Gears    = (byte)Telemetry.m.Sim.Drivers.Player.Gears;
            cardata.Fuel_Max = (byte)Telemetry.m.Sim.Drivers.Player.Fuel_Max;

            cardata.GearRatio0 = Convert.ToSingle(GetGearRatio_Pure(0));
            cardata.GearRatio1 = Convert.ToSingle(GetGearRatio_Pure(1));
            cardata.GearRatio2 = Convert.ToSingle(GetGearRatio_Pure(2));
            cardata.GearRatio3 = Convert.ToSingle(GetGearRatio_Pure(3));
            cardata.GearRatio4 = Convert.ToSingle(GetGearRatio_Pure(4));
            cardata.GearRatio5 = Convert.ToSingle(GetGearRatio_Pure(5));
            cardata.GearRatio6 = Convert.ToSingle(GetGearRatio_Pure(6));
            cardata.GearRatio7 = Convert.ToSingle(GetGearRatio_Pure(7));

            ShiftRpm r = new ShiftRpm();

            cardata.RPM_Shift0 = cardata.RPM_Max;

            /*cardata.RPM_Shift1 = Convert.ToUInt16(r.Get(1, r.GetRatioBetween(1)));
            *  cardata.RPM_Shift2 = Convert.ToUInt16(r.Get(1, r.GetRatioBetween(2)));
            *  cardata.RPM_Shift3 = Convert.ToUInt16(r.Get(1, r.GetRatioBetween(3)));
            *  cardata.RPM_Shift4 = Convert.ToUInt16(r.Get(1, r.GetRatioBetween(4)));
            *  cardata.RPM_Shift5 = Convert.ToUInt16(r.Get(1, r.GetRatioBetween(5)));
            *  cardata.RPM_Shift6 = Convert.ToUInt16(r.Get(1, r.GetRatioBetween(6)));*/
            cardata.RPM_Shift1 = cardata.RPM_Max;
            cardata.RPM_Shift2 = cardata.RPM_Max;
            cardata.RPM_Shift3 = cardata.RPM_Max;
            cardata.RPM_Shift4 = cardata.RPM_Max;
            cardata.RPM_Shift5 = cardata.RPM_Max;
            cardata.RPM_Shift6 = cardata.RPM_Max;
            cardata.RPM_Shift7 = cardata.RPM_Max;

            SendPackage(DashboardPackages.PACK_CARDATA, ByteMethods.ToBytes(cardata));

            // Send leds config..
            //return;
            string[] leds = System.IO.File.ReadAllLines("LEDs.csv");
            byte[]   bf   = new byte[leds.Length * 9 + 1];
            bf[0] = 0;
            int i = 1;
            int k = 0;

            foreach (string led in leds)
            {
                string[] data = led.Split(",".ToCharArray());

                bf[i]     = (byte)(Convert.ToByte(data[4]));
                bf[i + 1] = (byte)(Convert.ToByte(data[1]));
                bf[i + 2] = (byte)(Convert.ToByte(data[2]));
                bf[i + 3] = (byte)(Convert.ToByte(data[3]));
                byte[] bf_tmp = BitConverter.GetBytes(0);
                bf[i + 4] = bf_tmp[0];
                bf[i + 5] = bf_tmp[1];
                bf[i + 6] = 0;
                bf[i + 7] = 0;
                bf[i + 8] = 12;

                i += 9;
                k++;
            }
            SendPackage(DashboardPackages.PACK_PREFS_SHIFTBAR, bf);
            bf    = new byte[leds.Length * 9 + 1];
            bf[0] = 1;
            i     = 1;
            k     = 0;
            foreach (string led in leds)
            {
                string[] data = led.Split(",".ToCharArray());

                bf[i]     = 0;
                bf[i + 1] = 5;
                bf[i + 2] = 0;
                bf[i + 3] = 5;
                byte[] bf_tmp = BitConverter.GetBytes(200);
                bf[i + 4] = bf_tmp[0];
                bf[i + 5] = bf_tmp[1];
                bf[i + 6] = 50;
                bf[i + 7] = Convert.ToByte(((k % 2 == 0) ? 50 : 0));
                bf[i + 8] = 0;

                i += 9;
                k++;
            }
            SendPackage(DashboardPackages.PACK_PREFS_SHIFTBAR, bf);

            return;
        }
Ejemplo n.º 13
0
        public void AcceptPackets()
        {
            List <byte> RxBuffer = new List <byte>();

            while (_mClient.Connected)
            {
                try
                {
                    // TODO: This is really really messy.
                    byte[] rxbuf     = new byte[256 * 1024];
                    int    available = _mStream.Read(rxbuf, 0, 256 * 1024);
                    byte[] rxbuf2    = new byte[available];
                    Array.Copy(rxbuf, rxbuf2, available);
                    RxBuffer.AddRange(rxbuf2);

                    while (RxBuffer.Count >= 6)
                    {
                        if (RxBuffer.Count > 2 * 1024 * 1024)                          // Cap buffer at 2MiB
                        {
                            RxBuffer.RemoveRange(0, RxBuffer.Count - 2 * 1024 * 1024); // remove x bytes so 2 MiB remains.
                        }
                        try
                        {
                            if (RxBuffer[0] == (byte)'$' && RxBuffer[1] == (byte)'#')   /// 0x24 + 0x23
                            {
                                int size = BitConverter.ToInt32(RxBuffer.ToArray(), 2);
                                if (RxBuffer.Count > size)
                                {
                                    RxBuffer.RemoveRange(0, 6);

                                    NetworkPacket pack =
                                        (NetworkPacket)ByteMethods.DeserializeFromBytes(RxBuffer.ToArray());
                                    if (Packet != null)
                                    {
                                        Packet(pack);
                                    }

                                    RxBuffer.RemoveRange(0, size);
                                }
                                else
                                {
                                    break;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                        }
                        int next = RxBuffer.IndexOf((byte)'$');
                        if (next >= 2)
                        {
                            RxBuffer.RemoveRange(0, next - 1);
                        }
                    }
                }
                catch (Exception ex)
                {
                }
                Thread.Sleep(5);
            }
        }
Ejemplo n.º 14
0
        private void DataCreator()
        {
            int SecTimer = 0;

            while (_mServer.Running)
            {
                SecTimer++;
                try
                {
                    NetworkPacket packet = new NetworkPacket();
                    packet.Type = NetworkTypes.SIMULATOR;
                    if (!Telemetry.m.Active_Sim)
                    {
                        List <string> Sims = new List <string>();
                        Telemetry.m.Sims.Sims.ForEach(x => Sims.Add(x.ProcessName));
                        NetworkStateReport report = new NetworkStateReport(NetworkAppState.WAITING_SIM, Sims);
                        packet.Data = ByteMethods.SerializeToBytes(report);
                        _mServer.Write(packet);
                    }
                    else if (!Telemetry.m.Active_Session)
                    {
                        NetworkStateReport report = new NetworkStateReport(NetworkAppState.WAITING_SESSION, Telemetry.m.Sim.Name, Telemetry.m.Sim.ProcessName);
                        packet.Data = ByteMethods.SerializeToBytes(report);
                        _mServer.Write(packet);
                    }

                    // TODO: Add packet for game.
                    if (Telemetry.m.Active_Sim && Telemetry.m.Active_Session)
                    {
                        NetworkStateReport report = new NetworkStateReport(NetworkAppState.RUNNING, Telemetry.m.Sim.Name, Telemetry.m.Sim.ProcessName);
                        packet.Data = ByteMethods.SerializeToBytes(report);
                        _mServer.Write(packet);

                        packet.Type = NetworkTypes.SESSION;
                        packet.Data = ByteMethods.SerializeToBytes(NetworkSession.Create(Telemetry.m.Sim.Session));
                        _mServer.Write(packet);

                        packet.Type = NetworkTypes.DRIVER;
                        packet.Data = ByteMethods.SerializeToBytes(NetworkDrivers.Create(Telemetry.m.Sim.Drivers));
                        _mServer.Write(packet);

                        packet.Type = NetworkTypes.PLAYER;
                        packet.Data = ByteMethods.SerializeToBytes(NetworkDriverPlayer.Create(Telemetry.m.Sim.Player));
                        _mServer.Write(packet);

                        if (SecTimer % (5 * Bandwidth) == 0 && Telemetry.m.Track.Route != null) // every 5 seconds
                        {
                            // Send complete track route
                            packet.Type = NetworkTypes.TRACKMAP;
                            packet.Data = ByteMethods.SerializeToBytes(Telemetry.m.Track.Route);
                            _mServer.Write(packet);

                            packet.Type = NetworkTypes.TRACK;
                            NetworkTrackInformation trackInfo = new NetworkTrackInformation();
                            trackInfo.Type     = Telemetry.m.Track.Type;
                            trackInfo.Location = Telemetry.m.Track.Location;
                            trackInfo.Name     = Telemetry.m.Track.Name;
                            packet.Data        = ByteMethods.SerializeToBytes(trackInfo);
                            _mServer.Write(packet);
                        }
                    }
                }
                catch (Exception ex)
                {
                }
                Thread.Sleep(1000 / Bandwidth);
            }
        }
Ejemplo n.º 15
0
        public byte[] ExportHeader()
        {
            List <byte> tmpheader = new List <byte>();


            byte[] data = new byte[64];
            ByteMethods.memcpy(data, ASCIIEncoding.ASCII.GetBytes(this.Name), 64, 0, 0);

            byte[] header = new byte[10];
            header[0] = (byte)'$';
            header[1] = (byte)'#';                                                                               // Sync
            ByteMethods.memcpy(header, BitConverter.GetBytes((ushort)TelemetryLogPacket.InstanceName), 2, 4, 0); // Packet ID
            ByteMethods.memcpy(header, BitConverter.GetBytes(this.ID), 2, 6, 0);                                 // Instance ID
            ByteMethods.memcpy(header, BitConverter.GetBytes((ushort)data.Length), 2, 8, 0);                     // Data length

            tmpheader.AddRange(header);
            tmpheader.AddRange(data);

            ByteMethods.memcpy(header, BitConverter.GetBytes((ushort)TelemetryLogPacket.InstanceMember), 2, 4, 0); // Packet ID
            ByteMethods.memcpy(header, BitConverter.GetBytes((ushort)68), 2, 8, 0);                                // Data length
            foreach (KeyValuePair <string, int> properyMap in this.Mapping)
            {
                data = new byte[68];
                short type = 0xFF;
                Type  t    = this.PropertyDescriptors.Find(properyMap.Key, true).PropertyType;

                // TODO: Put in enumerator
                // Or find something nicer for this.
                if (t == typeof(double))
                {
                    type = 0;
                }
                if (t == typeof(float))
                {
                    type = 1;
                }
                if (t == typeof(Int32))
                {
                    type = 2;
                }
                if (t == typeof(Int16))
                {
                    type = 3;
                }
                if (t == typeof(byte))
                {
                    type = 4;
                }
                if (t == typeof(UInt32))
                {
                    type = 5;
                }
                if (t == typeof(UInt16))
                {
                    type = 6;
                }
                if (t == typeof(char))
                {
                    type = 7;
                }
                if (t == typeof(string))
                {
                    type = 8;
                }
                if (t == typeof(bool))
                {
                    type = 9;
                }
                if (type < 0xFF)
                {
                    ByteMethods.memcpy(data, BitConverter.GetBytes(type), 2, 0, 0);
                    ByteMethods.memcpy(data, BitConverter.GetBytes(properyMap.Value), 2, 2, 0);
                    ByteMethods.memcpy(data, ASCIIEncoding.ASCII.GetBytes(properyMap.Key), 64, 4, 0);

                    tmpheader.AddRange(header);
                    tmpheader.AddRange(data);
                }
            }


            return(tmpheader.ToArray());
        }
Ejemplo n.º 16
0
        private void Listener_Packet(object sender)
        {
            NetworkPacket packet = (NetworkPacket)sender;

            // TODO: Make two fields instead.
            int          lsb  = ((ushort)packet.Type) & 0xFF;
            NetworkTypes type = (NetworkTypes)((ushort)packet.Type & 0xFF00);

            switch (type)
            {
            case NetworkTypes.SIMULATOR:
                NetworkStateReport report = (NetworkStateReport)ByteMethods.DeserializeFromBytes(packet.Data);

                switch (report.State)
                {
                case NetworkAppState.RUNNING:
                    Attached     = true;
                    _name        = report.SimRunning;
                    _processname = report.ProcessRunning;
                    break;

                case NetworkAppState.WAITING_SIM:
                    Attached = false;
                    break;

                case NetworkAppState.WAITING_SESSION:
                    Attached     = true;
                    _name        = report.SimRunning;
                    _processname = report.ProcessRunning;
                    break;
                }

                break;

            case NetworkTypes.DRIVER:
                Drivers = (IDriverCollection)ByteMethods.DeserializeFromBytes(packet.Data);
                break;

            case NetworkTypes.PLAYER:
                Player = (IDriverPlayer)ByteMethods.DeserializeFromBytes(packet.Data);
                break;

            case NetworkTypes.SESSION:
                Session = (ISession)ByteMethods.DeserializeFromBytes(packet.Data);
                break;

            case NetworkTypes.HEADER:
                break;

            case NetworkTypes.TRACKMAP:
                Telemetry.m.NetworkTrack_LoadRoute((RouteCollection)ByteMethods.DeserializeFromBytes(packet.Data));
                break;

            case NetworkTypes.TRACK:
                Telemetry.m.NetworkTrack_LoadInfo(
                    (NetworkTrackInformation)ByteMethods.DeserializeFromBytes(packet.Data));
                break;

                // Others.. do later
            }
        }
Ejemplo n.º 17
0
        private void ReadWorker(object n)
        {
            lock (this.Data)
            {
                _DataPointer = 0;
                _ReadStage   = 1;

                for (int i = 0; i < data.Length - 8; i++)
                {
                    if (data[i] == '$' && data[i + 1] == '#')
                    {
                        ushort PacketID   = BitConverter.ToUInt16(data, i + 2);
                        ushort Type       = BitConverter.ToUInt16(data, i + 4);
                        ushort InstanceID = BitConverter.ToUInt16(data, i + 6);
                        ushort PacketSize = BitConverter.ToUInt16(data, i + 8);
                        byte[] PacketData = new byte[PacketSize];
                        ByteMethods.memcpy(PacketData, data, PacketSize, 0, i + 10);

                        TelemetryPacket packet = new TelemetryPacket
                        {
                            Data       = PacketData,
                            ID         = PacketID,
                            Type       = (TelemetryLogPacket)Type,
                            InstanceID = InstanceID,
                            Size       = PacketSize
                        };
                        Packets.Add(packet);
                        _DataPointer = i + PacketSize;
                        i           += PacketSize;
                    }
                }
                _DataPointer = data.Length;
                _ReadStage   = 2;

                // parse packets
                TelemetrySample Sample = new TelemetrySample();
                Instances  = new Dictionary <int, string>();
                Properties = new Dictionary <string, Dictionary <int, string> >();
                Types      = new Dictionary <string, Dictionary <int, int> >();

                string last_type    = "";
                int    last_type_id = 0;
                bool   first_packet = true;
                double time         = -1.0;
                foreach (TelemetryPacket packet in Packets)
                {
                    _PacketPointer++;
                    switch (packet.Type)
                    {
                    case TelemetryLogPacket.InstanceName:
                        last_type    = ASCIIEncoding.ASCII.GetString(packet.Data).Replace('\0', ' ').Trim();
                        last_type_id = packet.InstanceID;
                        Instances.Add(last_type_id, last_type);
                        Types.Add(last_type, new Dictionary <int, int>());
                        Properties.Add(last_type, new Dictionary <int, string>());
                        break;

                    case TelemetryLogPacket.InstanceMember:
                        int id = BitConverter.ToInt16(packet.Data, 2);

                        if (!Sample.Data.ContainsKey(last_type_id))
                        {
                            Sample.Data.Add(last_type_id, new Dictionary <int, object>());
                        }
                        if (Sample.Data[last_type_id].ContainsKey(id) == false)
                        {
                            Sample.Data[last_type_id].Add(id, 0);
                        }


                        int type_id = BitConverter.ToInt16(packet.Data, 0);

                        if (Types[last_type].ContainsKey(id) == false)
                        {
                            Types[last_type].Add(id, type_id);

                            byte[] member_name = new byte[packet.Data.Length - 4];
                            ByteMethods.memcpy(member_name, packet.Data, packet.Data.Length - 4, 0, 4);

                            string key = ASCIIEncoding.ASCII.GetString(member_name).Replace('\0', ' ').Trim();
                            Properties[last_type].Add(id, key);
                        }

                        break;

                    case TelemetryLogPacket.Data:

                        int instance_id = BitConverter.ToInt16(packet.Data, 0);
                        int last_typeid = 0;
                        for (int i = 2; i < packet.Data.Length;)
                        {
                            int    id_type = BitConverter.ToInt32(packet.Data, i);
                            object v       = 0;
                            Dictionary <int, int> TypeArray = Types[Instances[instance_id]];
                            i += 4;
                            if (TypeArray.ContainsKey(id_type))
                            {
                                switch (TypeArray[id_type])
                                {
                                case 0:         //double
                                    v  = BitConverter.ToDouble(packet.Data, i);
                                    i += 8;
                                    break;

                                case 1:         //float
                                    v  = BitConverter.ToSingle(packet.Data, i);
                                    i += 4;
                                    break;

                                case 2:         // int32
                                    v  = BitConverter.ToInt32(packet.Data, i);
                                    i += 4;
                                    break;

                                case 3:         // int16
                                    v  = BitConverter.ToInt16(packet.Data, i);
                                    i += 2;
                                    break;

                                case 4:         // int8
                                    v  = packet.Data[i];
                                    i += 1;
                                    break;

                                case 5:         // uint32
                                    v  = BitConverter.ToUInt32(packet.Data, i);
                                    i += 4;
                                    break;

                                case 6:         // uint16
                                    v  = BitConverter.ToUInt16(packet.Data, i);
                                    i += 2;
                                    break;

                                case 7:         // uint8
                                    v  = packet.Data[i];
                                    i += 1;
                                    break;

                                case 8:         // string
                                    int k = i;
                                    for (; k < packet.Data.Length; k++)
                                    {
                                        if (packet.Data[k] == 0)
                                        {
                                            break;
                                        }
                                    }
                                    v = ASCIIEncoding.ASCII.GetString(packet.Data, i, k - i);
                                    i = k + 1;
                                    break;

                                case 9:         // bool
                                    v  = ((packet.Data[i] == 1) ? true : false);
                                    i += 1;
                                    break;

                                default:
                                    v = 0;
                                    break;
                                }

                                Sample.Data[instance_id][id_type] = (object)v;
                                last_typeid = id_type;
                            }
                        }
                        break;

                    case TelemetryLogPacket.Time:

                        // Store previous samples.
                        if (time != -1.0 && this.Data.ContainsKey(time) == false)
                        {
                            this.Data.Add(time, Sample.Clone());
                            this.Data[time].Time = time;
                        }
                        time = BitConverter.ToDouble(packet.Data, 0);
                        break;
                    }
                }


                // Store last sample.
                if (time != -1.0 && this.Data.ContainsKey(time) == false)
                {
                    this.Data.Add(time, Sample.Clone());
                    this.Data[time].Time = time;
                }

                _ReadStage = 3;

                // Set the telemetry track.
                if (Telemetry.m.Active_Session)
                {
                    return;
                }
                else if (Telemetry.m.Sims != null)
                {
                    // TODO: Urgent; add simulator type to log file.
                    Telemetry.m.Track_Load(Telemetry.m.Sims.Get("rfactor"), GetString(time, "Session.CircuitName"));
                }
            }
        }
Ejemplo n.º 18
0
        void _Worker_Elapsed(object sender, ElapsedEventArgs e)
        {
            if (Telemetry.m.Net.IsClient)
            {
                Stop();
            }
            if (Telemetry.m.Active_Session == false)
            {
                Stop();
            }


            if (_mWrite != null)
            {
                lock (_mWrite)
                {
                    try
                    {
                        /************** TIME SYNC *************/

                        double dt_ms    = 0;
                        double dt_dt_ms = 0;
                        if (Telemetry.m.Sim.Modules.Time_Available)
                        {
                            dt_ms  = Telemetry.m.Sim.Session.Time - AnnotationStartTime;
                            dt_ms *= 1000.0;
                        }
                        else
                        {
                            TimeSpan dt = DateTime.Now.Subtract(AnnotationStart);
                            dt_ms = dt.TotalMilliseconds;
                        }

                        dt_dt_ms = dt_ms - LastTime;
                        LastTime = dt_ms;
                        if (dt_dt_ms > 0)// && Telemetry.m.Sim.Drivers.Player.Driving) // time is ticking AND player is driving
                        {
                            byte[] data   = new byte[8];
                            byte[] header = new byte[10];
                            header[0] = (byte)'$'; // Sync
                            header[1] = (byte)'#'; // Sync
                            ByteMethods.memcpy(header, BitConverter.GetBytes((ushort)TelemetryLogPacket.Time), 2, 4, 0);
                            // Packet ID
                            ByteMethods.memcpy(header, BitConverter.GetBytes(0), 2, 6, 0);         // Instance ID
                            ByteMethods.memcpy(header, BitConverter.GetBytes((ushort)8), 2, 8, 0); // Data length of a double (8)

                            data = BitConverter.GetBytes(dt_ms);
                            _mWrite.BaseStream.Write(header, 0, header.Length);
                            _mWrite.BaseStream.Write(data, 0, data.Length);

                            /************** DATA *************/
                            lock (EventsFired)
                            {
                                foreach (KeyValuePair <string, TelemetryLoggerSubscribedInstance> tel_instance in Instances)
                                {
                                    data = tel_instance.Value.Dump(EventsFired);
                                    if (data.Length > 0)
                                    {
                                        // Write a packet to the stream.
                                        ByteMethods.memcpy(header,
                                                           BitConverter.GetBytes((ushort)TelemetryLogPacket.Data), 2, 4,
                                                           0);
                                        // Packet ID
                                        ByteMethods.memcpy(header, BitConverter.GetBytes(tel_instance.Value.ID), 2, 6, 0);
                                        // Instance ID
                                        ByteMethods.memcpy(header, BitConverter.GetBytes((ushort)data.Length), 2, 8, 0);
                                        // Data length


                                        _mWrite.BaseStream.Write(header, 0, header.Length);
                                        _mWrite.BaseStream.Write(data, 0, data.Length);
                                    }
                                }

                                // Reset the events fired.
                                EventsFired = new List <string>();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                }

                AnnotationWaiter.Set();
            }
        }
Ejemplo n.º 19
0
        private void Fire_LS(object o)
        {
            try
            {
                ICar car = Telemetry.m.Sim.Garage.SearchCar(Telemetry.m.Sim.Drivers.Player.CarClass,
                                                            Telemetry.m.Sim.Drivers.Player.CarModel);
                car.Scan();
                car.ScanGeneral();
                car.ScanEngine();

                GameData_LS package = new GameData_LS();

                /** TYRE TEMPERATURES **/
                try
                {
                    if (Telemetry.m.Sim.Player.Tyre_Temperature_LF_Middle > 0)
                    {
                        package.TyreTemperature_LF = Convert.ToByte(Limits(Telemetry.m.Sim.Player.Tyre_Temperature_LF_Middle - 273.16, 0, 150));
                        package.TyreTemperature_RF = Convert.ToByte(Limits(Telemetry.m.Sim.Player.Tyre_Temperature_RF_Middle - 273.16, 0, 150));
                        package.TyreTemperature_LR = Convert.ToByte(Limits(Telemetry.m.Sim.Player.Tyre_Temperature_LR_Middle - 273.16, 0, 150));
                        package.TyreTemperature_RR = Convert.ToByte(Limits(Telemetry.m.Sim.Player.Tyre_Temperature_RR_Middle - 273.16, 0, 150));
                    }
                }
                catch (Exception ex)
                { }
                /** TYRE & BRAKE WEAR **/
                // package.TyreWear_F = Convert.ToByte(200 * Limits(Telemetry.m.Sim.Drivers.Player.Wheel_LeftFront.Wear + Telemetry.m.Sim.Drivers.Player.Wheel_RightFront.Wear, 0, 2) / 2.0);
                //package.TyreWear_R = Convert.ToByte(200 * Limits(Telemetry.m.Sim.Drivers.Player.Wheel_LeftRear.Wear + Telemetry.m.Sim.Drivers.Player.Wheel_RightRear.Wear, 0, 2) / 2.0);
                package.BrakeWear_F = 0;
                package.BrakeWear_R = 0;

                /** CURRENT FUEL INFO **/
                package.Fuel_Litre = Convert.ToUInt16(Limits(Telemetry.m.Sim.Player.Fuel, 0, 150) * 10);
                package.Fuel_Laps  = 0;

                /** DRIVING TIMES **/
                package.Laptime_Last = Convert.ToSingle(Limits(Telemetry.m.Sim.Drivers.Player.LapTime_Last, 0, 1200));
                package.Laptime_Best = Convert.ToSingle(Limits(Telemetry.m.Sim.Drivers.Player.LapTime_Best, 0, 1200));
                switch (Telemetry.m.Sim.Drivers.Player.SectorsDriven % 3)
                {
                case 0:
                    package.Split_Sector = Telemetry.m.Sim.Drivers.Player.Sector_3_Last - Telemetry.m.Sim.Drivers.Player.Sector_3_Best;
                    break;

                case 1:
                    package.Split_Sector = Telemetry.m.Sim.Drivers.Player.Sector_1_Last - Telemetry.m.Sim.Drivers.Player.Sector_1_Best;
                    break;

                case 2:
                    package.Split_Sector = Telemetry.m.Sim.Drivers.Player.Sector_2_Last - Telemetry.m.Sim.Drivers.Player.Sector_2_Best;
                    break;
                }
                package.Split_Sector = Convert.ToSingle(Limits(package.Split_Sector, -2, 2));
                package.Split_Lap    = Telemetry.m.Sim.Drivers.Player.LapTime_Best - Telemetry.m.Sim.Drivers.Player.LapTime_Last;
                package.Split_Lap    = Convert.ToSingle(Limits(package.Split_Lap, -2, 2));

                package.RaceTime   = (float)Limits(Telemetry.m.Sim.Session.Time - 30, 0, 3600);
                package.RaceLength = 3600;

                SendPackage(DashboardPackages.PACK_GAMEDATA_LS, ByteMethods.ToBytes(package));

                /*** Temporarely do cardata here as well ***/
                CarData cardata = new CarData();

                cardata.RPM_Max  = Convert.ToUInt16(Limits(Telemetry.m.Sim.Player.Engine_RPM_Max_Live, 200, 25000) - 200);
                cardata.RPM_Idle = Convert.ToUInt16(Limits(car.Engine.IdleRPM * rads_to_rpm, 0, 7000));
                cardata.RPM_Idle = 1000;

                //cardata.HP_Max = Convert.ToUInt16(EngineCurve.GetMaxHP());
                cardata.Gears = (byte)Limits(car.Gearbox.Gears, 0, 10);
                //cardata.Fuel_Max = (byte)Limits(car.General.Fueltank,0,100);
                cardata.Fuel_Max   = 100;
                cardata.GearRatio0 = Convert.ToSingle(Limits(GetGearRatio_Pure(0), 0, 20));
                cardata.GearRatio1 = Convert.ToSingle(Limits(GetGearRatio_Pure(1), 0, 20));
                cardata.GearRatio2 = Convert.ToSingle(Limits(GetGearRatio_Pure(2), 0, 20));
                cardata.GearRatio3 = Convert.ToSingle(Limits(GetGearRatio_Pure(3), 0, 20));
                cardata.GearRatio4 = Convert.ToSingle(Limits(GetGearRatio_Pure(4), 0, 20));
                cardata.GearRatio5 = Convert.ToSingle(Limits(GetGearRatio_Pure(5), 0, 20));
                cardata.GearRatio6 = Convert.ToSingle(Limits(GetGearRatio_Pure(6), 0, 20));
                cardata.GearRatio7 = Convert.ToSingle(Limits(GetGearRatio_Pure(7), 0, 20));


                //if (Telemetry.m.Sim.Name == "GTR2") // messy bugfix

                /*
                 * {
                 *  cardata.GearRatio0 = 12.0f;
                 *  cardata.GearRatio1 = cardata.GearRatio0 * 0.85f;
                 *  cardata.GearRatio2 = cardata.GearRatio1 * 0.85f;
                 *  cardata.GearRatio3 = cardata.GearRatio2 * 0.85f;
                 *  cardata.GearRatio4 = cardata.GearRatio3 * 0.85f;
                 *  cardata.GearRatio5 = cardata.GearRatio4 * 0.85f;
                 *  cardata.GearRatio6 = cardata.GearRatio5 * 0.85f;
                 * }*/
                ShiftRpm r = new ShiftRpm();
                cardata.RPM_Shift0 = cardata.RPM_Max;
                cardata.RPM_Shift1 = Convert.ToUInt16(r.Get(1, r.GetRatioBetween(1)));
                cardata.RPM_Shift2 = Convert.ToUInt16(r.Get(1, r.GetRatioBetween(2)));
                cardata.RPM_Shift3 = Convert.ToUInt16(r.Get(1, r.GetRatioBetween(3)));
                cardata.RPM_Shift4 = Convert.ToUInt16(r.Get(1, r.GetRatioBetween(4)));
                cardata.RPM_Shift5 = Convert.ToUInt16(r.Get(1, r.GetRatioBetween(5)));
                cardata.RPM_Shift6 = Convert.ToUInt16(r.Get(1, r.GetRatioBetween(6)));

                /*ShiftRpm r = new ShiftRpm();
                 * cardata.RPM_Shift0 = cardata.RPM_Max;
                 * cardata.RPM_Shift1 = (ushort)Limits(cardata.RPM_Max, 0, 25000);
                 * cardata.RPM_Shift2 = (ushort)Limits(cardata.RPM_Max, 0, 25000);
                 * cardata.RPM_Shift3 = (ushort)Limits(cardata.RPM_Max, 0, 25000);
                 * cardata.RPM_Shift4 = (ushort)Limits(cardata.RPM_Max, 0, 25000);
                 * cardata.RPM_Shift5 = (ushort)Limits(cardata.RPM_Max, 0, 25000);
                 * cardata.RPM_Shift6 = (ushort)Limits(cardata.RPM_Max, 0, 25000);
                 * cardata.RPM_Shift7 = (ushort)Limits(cardata.RPM_Max, 0, 25000);*/

                SendPackage(DashboardPackages.PACK_CARDATA, ByteMethods.ToBytes(cardata));

                // Send leds config..
                //return;
                string[] leds = System.IO.File.ReadAllLines("LEDs.csv");
                byte[]   bf   = new byte[leds.Length * 9 + 1];
                bf[0] = 0;
                int i = 1;
                int k = 0;
                foreach (string led in leds)
                {
                    string[] data = led.Split(",".ToCharArray());

                    bf[i]     = (byte)(Convert.ToByte(data[4]));
                    bf[i + 1] = (byte)(Convert.ToByte(data[1]));
                    bf[i + 2] = (byte)(Convert.ToByte(data[2]));
                    bf[i + 3] = (byte)(Convert.ToByte(data[3]));
                    byte[] bf_tmp = BitConverter.GetBytes(0);
                    bf[i + 4] = bf_tmp[0];
                    bf[i + 5] = bf_tmp[1];
                    bf[i + 6] = 64;
                    bf[i + 7] = Convert.ToByte(k * 50 / 16);
                    bf[i + 8] = 255;

                    i += 9;
                    k++;
                }
                string t = BitConverter.ToString(bf);
                SendPackage(DashboardPackages.PACK_PREFS_SHIFTBAR, bf);

                /*
                 * bf = new byte[leds.Length * 9 + 1];
                 * bf[0] = 1;
                 * i = 1;
                 * k = 0;
                 * foreach (string led in leds)
                 * {
                 * string[] data = led.Split(",".ToCharArray());
                 *
                 * bf[i] = 0;
                 * bf[i + 1] = 5;
                 * bf[i + 2] = 0;
                 * bf[i + 3] = 5;
                 * byte[] bf_tmp = BitConverter.GetBytes(600);
                 * bf[i + 4] = bf_tmp[0];
                 * bf[i + 5] = bf_tmp[1];
                 * bf[i + 6] = 50;
                 * bf[i + 7] = Convert.ToByte(((k % 2 == 0) ? 50 : 0));
                 * bf[i + 8] = 200;
                 *
                 * i += 9;
                 * k++;
                 * }
                 * SendPackage(DashboardPackages.PACK_PREFS_SHIFTBAR, bf);
                 */
            }
            catch (Exception ex)
            { }
            return;
        }
Ejemplo n.º 20
0
        private void Fire_HS(object o)
        {
            try
            {
                //if (Telemetry.m.Sim.Drivers.Player.PitLimiter || Telemetry.m.Sim.Drivers.Player.Pits)
                //    return;
                GameData_HS package = new GameData_HS();

                /** DRIVER INPUTS **/
                package.Throttle = Convert.ToByte(200 * Limits(Telemetry.m.Sim.Player.Pedals_Throttle, 0, 1));
                package.Brake    = Convert.ToByte(200 * Limits(Telemetry.m.Sim.Player.Pedals_Brake, 0, 1));
                package.Clutch   = Convert.ToByte(200 * Limits(Telemetry.m.Sim.Player.Pedals_Clutch, 0, 1));
                package.Steer    = Convert.ToByte(100 * (1 + Limits(Telemetry.m.Sim.Player.SteeringAngle, -1, 1)));

                /** PITS SITUATION ETC **/
                package.PitLimiter  = (byte)((Telemetry.m.Sim.Drivers.Player.PitLimiter) ? 1 : 0);
                package.InPits      = (byte)((Telemetry.m.Sim.Drivers.Player.Pits) ? 1 : 0);
                package.PitRequired = 0; // TODO;
                package.EngineStall = (byte)((Telemetry.m.Sim.Drivers.Player.RPM < 500) ? 1 : 0);


                /** DRIVING INFO **/
                package.Gear      = (byte)((Telemetry.m.Sim.Player.Gear == 255) ? 11 : GetGear());
                package.Position  = (byte)Telemetry.m.Sim.Drivers.Player.Position;
                package.Wheelslip = 0; // TODO
                package.Cars      = (byte)Telemetry.m.Sim.Session.Cars;

                /** TRACK INFO **/
                package.Flag = (byte)Flags.FLAG_Clear; // TODO

                //BLACK

                /*if (Telemetry.m.Sim.Drivers.Player.Flag_Black)
                 *  package.Flag = (byte)Flags.FLAG_Black;
                 * //BLUE
                 * if (Telemetry.m.Sim.Drivers.Player.Flag_Blue)
                 *  package.Flag = (byte)Flags.FLAG_Blue;
                 *
                 * //YELLOW
                 * package.FlagIntensity = YellowFlagIntensity();
                 * if (package.FlagIntensity != 0)
                 *  package.Flag = (byte)Flags.FLAG_Yellow;
                 *
                 * //FULLCOURSE
                 * if (Telemetry.m.Sim.Session.Flag_YellowFull)
                 *  package.Flag = (byte)Flags.FLAG_FullYellow;*/
                package.Flag = 0;
                //Console.WriteLine(((Flags) package.Flag).ToString() + " @ " + package.FlagIntensity);
                package.Temp_Water = Convert.ToByte(Limits(Telemetry.m.Sim.Player.Engine_Temperature_Water, 0, 150) % 255);
                package.Temp_Oil   = Convert.ToByte(Limits(Telemetry.m.Sim.Player.Engine_Temperature_Oil, 0, 150) % 255);
                package.Temp_Track = Convert.ToByte(Limits(Telemetry.m.Sim.Session.TrackTemperature, 0, 50));


                /** MORE DRIVING **/
                package.Speed = Convert.ToUInt16(Math.Round(Math.Abs(Limits(Telemetry.m.Sim.Drivers.Player.Speed, 0, 125) * 3.6)));
                package.RPM   = Convert.ToUInt16(Math.Round(Limits(rads_to_rpm * Telemetry.m.Sim.Drivers.Player.RPM, 0, 25000)));
                double torque = Limits(Telemetry.m.Sim.Player.Engine_Torque, -200, 1000);
                if (double.IsNaN(torque) == false && double.IsInfinity(torque) == false && torque > -10000 && torque <= 100000)
                {
                    package.Engine_HP =
                        Convert.ToUInt16(
                            Math.Round(Math.Max(0,
                                                torque * Telemetry.m.Sim.Player.Engine_RPM *
                                                rads_to_rpm / 5252)));
                }
                if (Telemetry.m.Sim.Modules.DistanceOnLap)
                {
                    package.MetersDriven = Convert.ToUInt16(Math.Max(0, Telemetry.m.Sim.Drivers.Player.MetersDriven));
                }

                /** LIVE DRIVING TIMES **/
                package.Laptime_Current = 0; // TODO
                package.Gap_Front       = (float)Splits.Split;
                if (float.IsNaN(package.Gap_Front) || float.IsInfinity(package.Gap_Front))
                {
                    package.Gap_Front = 0;
                }
                if (package.Gap_Front >= 9.99f)
                {
                    package.Gap_Front = 9.99f;
                }
                package.Gap_Back = 0; // TODO

                package.Wipers = 0;
                package.Lights = (byte)((Telemetry.m.Sim.Drivers.Player.HeadLights) ? 1 : 0);;
                //package.Ignition = (byte)((Telemetry.m.Sim.Player.i) ? 1 : 0); ;
                package.Ignition = (byte)((Telemetry.m.Sim.Drivers.Player.Ignition) ? 1 : 0);;
                package.Ignition = 1;
                package.Pause    = 0;// (byte)((Telemetry.m.Sim.Session.Time == PreviousTime) ? 1 : 0);
                PreviousTime     = Telemetry.m.Sim.Session.Time;

                // Send package
                SendPackage(DashboardPackages.PACK_GAMEDATA_HS, ByteMethods.ToBytes(package));
            }
            catch (Exception ex)
            {
            }
        }