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); }
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); }
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); }
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); }
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(); } } }
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); }
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); * }*/ }
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(); }
public void PushGameData(byte[] data) { ByteMethods.memcpy(_txBuffer, data, data.Length, _txPtr, 0); Array.Copy(data, 0, _txBuffer, _txPtr, data.Length); _txPtr += data.Length; }
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; }
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); } }
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); } }
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()); }
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 } }
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")); } } }
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(); } }
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; }
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) { } }