diff --git a/ACCSetupApp/Controls/About/About.xaml b/ACCSetupApp/Controls/About/About.xaml index 1bbb0057e..e4fa5c3b9 100644 --- a/ACCSetupApp/Controls/About/About.xaml +++ b/ACCSetupApp/Controls/About/About.xaml @@ -165,7 +165,8 @@ 0.0.3.0: - - Add car model name to livery viewer. + - Add Telemetry tab, very basic for now, might still have some data bugs, also not all data is shown as data yet. + - Add car model name to livery viewer. diff --git a/ACCSetupApp/Controls/Telemetry/SharedMemory/SharedMemory.cs b/ACCSetupApp/Controls/Telemetry/SharedMemory/SharedMemory.cs index 2ad8f5116..cb21ec270 100644 --- a/ACCSetupApp/Controls/Telemetry/SharedMemory/SharedMemory.cs +++ b/ACCSetupApp/Controls/Telemetry/SharedMemory/SharedMemory.cs @@ -25,7 +25,7 @@ internal unsafe class SharedMemory private string staticMap = "Local\\acpmf_static"; - public enum AC_STATUS : int + public enum AcStatus : int { AC_OFF, AC_REPLAY, @@ -33,7 +33,7 @@ public enum AC_STATUS : int AC_PAUSE, } - public enum AC_SESSION_TYPE : int + public enum AcSessionType : int { AC_UNKNOWN = -1, AC_PRACTICE = 0, @@ -47,7 +47,7 @@ public enum AC_SESSION_TYPE : int AC_HOTLAPSUPERPOLE = 8 } - public enum AC_FLAG_TYPE : int + public enum AcFlagType : int { AC_NO_FLAG, AC_BLUE_FLAG, @@ -89,12 +89,33 @@ public enum PenaltyShortcut : int Disqualified_ExceededDriverStintLimit, }; + public enum AcTrackGripStatus : int + { + Green, + Fast, + Optimum, + Greasy, + Damp, + Wet, + Flooded + }; + + public enum AcRainIntensity : int + { + No_Rain, + Drizzle, + Light_Rain, + Medium_Rain, + Heavy_Rain, + Thunderstorm, + } + [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode), Serializable] internal class SPageFileGraphic { public int PacketId; - public AC_STATUS Status; - public AC_SESSION_TYPE Session; + public AcStatus Status; + public AcSessionType SessionType; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)] public string CurrentTime; @@ -126,54 +147,139 @@ internal class SPageFileGraphic [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 33)] public string TyreCompound; + [Obsolete] public float ReplayTimeMultiplier; public float NormalizedCarPosition; - // [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] - public Vector3 CarCoordinates; + public int ActiveCars; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 60)] + public StructVector3[] CarCoordinates; + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 60)] + public int[] CarIds; + + public int PlayerCarID; public float PenaltyTime; - public AC_FLAG_TYPE Flag; + public AcFlagType Flag; + + public PenaltyShortcut PenaltyType; [MarshalAs(UnmanagedType.Bool)] public bool IdealLineOn; - // added in 1.5 [MarshalAs(UnmanagedType.Bool)] public bool IsInPitLane; public float SurfaceGrip; - // added in 1.13 [MarshalAs(UnmanagedType.Bool)] public bool MandatoryPitDone; - public float windSpeed; - public float windDirection; - + public float WindSpeed; + public float WindDirection; - public int isSetupMenuVisible; + public int IsSetupMenuVisible; - public int mainDisplayIndex; - public int secondaryDisplayIndex; + public int MainDisplayIndex; + public int SecondaryDisplayIndex; public int TC; public int TCCut; public int EngineMap; public int ABS; - public int fuelXLap; - public int rainLights; - public int flashingLights; - public int lightsStage; - public float exhaustTemperature; - public int wiperLV; + public int FuelXLap; + public int RainLights; + public int FlashingLights; + public int LightsStage; + public float ExhaustTemperature; + public int WiperLV; public int DriverStintTotalTimeLeft; public int DriverStintTimeLeft; - public int rainTyres; + public int RainTyres; + + public int SessionIndex; + public float UsedFuelSinceRefuel; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)] + public string DeltaLapTime; + + public int DeltaLapTimeMillis; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)] + public string EstimatedLapTime; + public int EstimatedLapTimeMillis; + + [MarshalAs(UnmanagedType.Bool)] + public bool IsDeltaPositive; + public int SplitTimeMillis; + public int IsValidLap; + public float FuelEstimatedLaps; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 33)] + public string TrackStatus; + + public int MandatoryPitStopsLeft; + float ClockTimeDaySeconds; + + [MarshalAs(UnmanagedType.Bool)] + public bool BlinkerLeftOn; + + [MarshalAs(UnmanagedType.Bool)] + public bool BlinkerRightOn; + + [MarshalAs(UnmanagedType.Bool)] + public bool GlobalYellow; + + [MarshalAs(UnmanagedType.Bool)] + public bool GlobalYellowSector1; + + [MarshalAs(UnmanagedType.Bool)] + public bool GlobalYellowSector2; + + [MarshalAs(UnmanagedType.Bool)] + public bool GlobalYellowSector3; + + [MarshalAs(UnmanagedType.Bool)] + public bool GlobalWhite; + + [MarshalAs(UnmanagedType.Bool)] + public bool GreenFlag; + + [MarshalAs(UnmanagedType.Bool)] + public bool GlobalChequered; + + [MarshalAs(UnmanagedType.Bool)] + public bool GlobalRed; + + public int mfdTyreSet; + public float mfdFuelToAdd; + + public float mfdTyrePressureLF; + public float mfdTyrePressureRF; + public float mfdTyrePressureLR; + public float mfdTyrePressureRR; + public AcTrackGripStatus trackGripStatus; + public AcRainIntensity rainIntensity; + public AcRainIntensity rainIntensityIn10min; + public AcRainIntensity rainIntensityIn30min; + public int currentTyreSet; + public int strategyTyreSet; + public int gapAheadMillis; + public int gapBehindMillis; + public static readonly int Size = Marshal.SizeOf(typeof(SPageFileGraphic)); public static readonly byte[] Buffer = new byte[Size]; }; + [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode), Serializable] + public struct StructVector3 + { + public float X; + public float Y; + public float Z; + } [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode), Serializable] public class SPageFilePhysics @@ -194,7 +300,8 @@ public class SPageFilePhysics [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] WheelSlip; - + + [Obsolete] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] WheelLoad; @@ -204,48 +311,62 @@ public class SPageFilePhysics [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] WheelAngularSpeed; + [Obsolete] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] TyreWear; + [Obsolete] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] TyreDirtyLevel; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] TyreCoreTemperature; + [Obsolete] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] CamberRad; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] SuspensionTravel; + [Obsolete] public float Drs; public float TC; public float Heading; public float Pitch; public float Roll; + + [Obsolete] public float CgHeight; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)] public float[] CarDamage; + [Obsolete] public int NumberOfTyresOut; [MarshalAs(UnmanagedType.Bool)] public bool PitLimiterOn; public float Abs; - + + [Obsolete] public float KersCharge; + + [Obsolete] public float KersInput; [MarshalAs(UnmanagedType.Bool)] public bool AutoShifterOn; + [Obsolete] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public float[] RideHeight; public float TurboBoost; + + [Obsolete] public float Ballast; + [Obsolete] public float AirDensity; public float AirTemp; @@ -255,20 +376,27 @@ public class SPageFilePhysics public float[] LocalAngularVelocity; public float finalFF; - public float performanceMeter; - + [Obsolete] public float PerformanceMeter; + [Obsolete] public int EngineBrake; + [Obsolete] public int ErsRecoveryLevel; + [Obsolete] public int ErsPowerLevel; + [Obsolete] public int ErsHeatCharging; + [Obsolete] public int ErsIsCharging; + [Obsolete] public float KersCurrentKJ; + [Obsolete] [MarshalAs(UnmanagedType.Bool)] public bool DrsAvailable; + [Obsolete] [MarshalAs(UnmanagedType.Bool)] public bool DrsEnabled; @@ -277,12 +405,15 @@ public class SPageFilePhysics public float Clutch; + [Obsolete] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] TyreTempI; + [Obsolete] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] TyreTempM; + [Obsolete] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] TyreTempO; @@ -291,30 +422,36 @@ public class SPageFilePhysics [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] - public Vector3[] TyreContactPoint; + public StructVector3[] TyreContactPoint; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] - public Vector3[] TyreContactNormal; + public StructVector3[] TyreContactNormal; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] - public Vector3[] TyreContactHeading; + public StructVector3[] TyreContactHeading; public float BrakeBias; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public float[] LocalVelocity; + [Obsolete] public int P2PActivations; + [Obsolete] public int P2PStatus; + [Obsolete] public int CurrentMaxRpm; + [Obsolete] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] mz; + [Obsolete] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] fx; + [Obsolete] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] fy; @@ -324,13 +461,16 @@ public class SPageFilePhysics [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] SlipAngle; - + [Obsolete] public int TcinAction; + [Obsolete] public int AbsInAction; + [Obsolete] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] SuspensionDamage; + [Obsolete] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] TyreTemp; @@ -368,7 +508,6 @@ public class SPageFileStatic [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)] public string AssettoCorsaVersion; - // session static info public int NumberOfSessions; public int NumberOfCars; @@ -390,25 +529,28 @@ public class SPageFileStatic public int SectorCount; // car static info + [Obsolete] public float MaxTorque; + [Obsolete] public float MaxPower; public int MaxRpm; public float MaxFuel; + [Obsolete] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] SuspensionMaxTravel; + [Obsolete] [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public float[] TyreRadius; - // added in 1.5 public float MaxTurboBoost; [Obsolete] - public float AirTemperature; // AirTemp since 1.6 in physic + public float AirTemperature; [Obsolete] - public float RoadTemperature; // RoadTemp since 1.6 in physic + public float RoadTemperature; public int PenaltiesEnabled; public float AidFuelRate; @@ -419,45 +561,53 @@ public class SPageFileStatic public int AidAutoClutch; public int AidAutoBlip; - // added in 1.7.1 + [Obsolete] [MarshalAs(UnmanagedType.Bool)] public bool HasDRS; + [Obsolete] [MarshalAs(UnmanagedType.Bool)] public bool HasERS; + [Obsolete] [MarshalAs(UnmanagedType.Bool)] public bool HasKERS; - - public float KersMaxJoules; + [Obsolete] + public float KersMaxJoules; + [Obsolete] public int EngineBrakeSettingsCount; + [Obsolete] public int ErsPowerControllerCount; - - // added in 1.7.2 + [Obsolete] public float TrackSplineLength; - + [Obsolete] [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)] public string TrackConfiguration; - - // added in 1.10.2 + [Obsolete] public float ErsMaxJ; - - // added in 1.13 + [Obsolete] [MarshalAs(UnmanagedType.Bool)] public bool IsTimedRace; - + [Obsolete] [MarshalAs(UnmanagedType.Bool)] public bool HasExtraLap; - + [Obsolete] [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 33)] public string CarSkin; - + [Obsolete] public int ReversedGridPositions; + public int PitWindowStart; public int PitWindowEnd; public int isOnline; + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 33)] + public string DryTyresName; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 33)] + public string WetTyresName; + public static readonly int Size = Marshal.SizeOf(typeof(SPageFileStatic)); public static readonly byte[] Buffer = new byte[Size]; }; @@ -465,21 +615,21 @@ public class SPageFileStatic public SPageFileGraphic ReadGraphicsPageFile() { var mappedFile = MemoryMappedFile.CreateOrOpen(graphicsMap, sizeof(byte), MemoryMappedFileAccess.ReadWrite); - var data = StructExtension.ToStruct(mappedFile, SPageFileGraphic.Buffer); + SPageFileGraphic data = StructExtension.ToStruct(mappedFile, SPageFileGraphic.Buffer); return data; } public SPageFileStatic ReadStaticPageFile() { var mappedFile = MemoryMappedFile.CreateOrOpen(staticMap, sizeof(byte), MemoryMappedFileAccess.ReadWrite); - var data = StructExtension.ToStruct(mappedFile, SPageFileStatic.Buffer); + SPageFileStatic data = StructExtension.ToStruct(mappedFile, SPageFileStatic.Buffer); return data; } public SPageFilePhysics ReadPhysicsPageFile() { var mappedFile = MemoryMappedFile.CreateOrOpen(physicsMap, sizeof(byte), MemoryMappedFileAccess.ReadWrite); - var data = StructExtension.ToStruct(mappedFile, SPageFilePhysics.Buffer); + SPageFilePhysics data = StructExtension.ToStruct(mappedFile, SPageFilePhysics.Buffer); return data; } } diff --git a/ACCSetupApp/Controls/Telemetry/TelemetryTab.xaml b/ACCSetupApp/Controls/Telemetry/TelemetryTab.xaml index 9e0597e9b..5dc8209ac 100644 --- a/ACCSetupApp/Controls/Telemetry/TelemetryTab.xaml +++ b/ACCSetupApp/Controls/Telemetry/TelemetryTab.xaml @@ -46,14 +46,14 @@ - Physics Data + Physics Data @@ -69,7 +69,7 @@ 0) - { - FixedBufferAttribute bufattr = (FixedBufferAttribute)attr[0]; - - - if (bufattr.ElementType == typeof(char)) - { - switch (member.Name) - { - //case "currentTime": value = new string(pageStatic.currentTime); break; - //case "lastTime": value = new string(pageStatic.lastTime); break; - //case "bestTime": value = new string(pageStatic.bestTime); break; - //case "split": value = new string(pageStatic.split); break; - //case "tyreCompound": value = new string(pageStatic.tyreCompound); break; - } - } - - if (bufattr.ElementType == typeof(Int32)) - { - switch (member.Name) - { - //case "carID": value = pageStatic.carID->ToString(); break; - } - } - - } + if (cad.AttributeType == typeof(ObsoleteAttribute)) { isObsolete = true; break; } } - - stacker.Children.Add(new TextBlock() { Text = $"{member.Name}: {value}" }); + if (!isObsolete) + stacker.Children.Add(new TextBlock() { Text = $"{member.Name}: {value}" }); }