RaceTelemetry 4.4.6.post1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. RaceTelemetry/__init__.py +4 -0
  2. RaceTelemetry/data_structures/ACC_struct.py +383 -0
  3. RaceTelemetry/data_structures/ACE_struct.py +539 -0
  4. RaceTelemetry/data_structures/AC_SM_struct.py +233 -0
  5. RaceTelemetry/data_structures/AC_UDP_struct.py +168 -0
  6. RaceTelemetry/data_structures/BNG_struct.py +133 -0
  7. RaceTelemetry/data_structures/Dirt_4_struct.py +260 -0
  8. RaceTelemetry/data_structures/Dirt_Rally_struct.py +104 -0
  9. RaceTelemetry/data_structures/ETS2_struct.py +412 -0
  10. RaceTelemetry/data_structures/F1_2016_struct.py +171 -0
  11. RaceTelemetry/data_structures/F1_2017_struct.py +288 -0
  12. RaceTelemetry/data_structures/F1_2018_struct.py +586 -0
  13. RaceTelemetry/data_structures/F1_2019_struct.py +700 -0
  14. RaceTelemetry/data_structures/F1_2020_struct.py +897 -0
  15. RaceTelemetry/data_structures/F1_2021_struct.py +1068 -0
  16. RaceTelemetry/data_structures/F1_2022_struct.py +1182 -0
  17. RaceTelemetry/data_structures/F1_2023_struct.py +1281 -0
  18. RaceTelemetry/data_structures/F1_2024_struct.py +1432 -0
  19. RaceTelemetry/data_structures/F1_2025_struct.py +1519 -0
  20. RaceTelemetry/data_structures/F1_2026_struct.py +1612 -0
  21. RaceTelemetry/data_structures/FH4_struct.py +161 -0
  22. RaceTelemetry/data_structures/FH5_struct.py +162 -0
  23. RaceTelemetry/data_structures/FH6_struct.py +160 -0
  24. RaceTelemetry/data_structures/FM7_struct.py +246 -0
  25. RaceTelemetry/data_structures/FM8_struct.py +247 -0
  26. RaceTelemetry/data_structures/GT7_struct.py +414 -0
  27. RaceTelemetry/data_structures/IRacing_struct.py +134 -0
  28. RaceTelemetry/data_structures/PC2_struct.py +557 -0
  29. RaceTelemetry/data_structures/PC_SM_struct.py +339 -0
  30. RaceTelemetry/data_structures/PC_UDP_struct.py +402 -0
  31. RaceTelemetry/data_structures/__init__.py +0 -0
  32. RaceTelemetry/digestion.py +120 -0
  33. RaceTelemetry/main.py +529 -0
  34. racetelemetry-4.4.6.post1.dist-info/METADATA +410 -0
  35. racetelemetry-4.4.6.post1.dist-info/RECORD +38 -0
  36. racetelemetry-4.4.6.post1.dist-info/WHEEL +5 -0
  37. racetelemetry-4.4.6.post1.dist-info/licenses/LICENSE +504 -0
  38. racetelemetry-4.4.6.post1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,4 @@
1
+ # src/my_package/__init__.py
2
+ from .main import telemetryManager
3
+
4
+ __all__ = ["telemetryManager"]
@@ -0,0 +1,383 @@
1
+ import ctypes
2
+ from enum import Enum, IntEnum
3
+
4
+ # source
5
+ # https://www.assettocorsa.net/forum/index.php?threads/acc-shared-memory-documentation.59965/
6
+
7
+ class DataTypes:
8
+ STRUCTURE = ctypes.LittleEndianStructure
9
+
10
+ SIGNED_INT = ctypes.c_int
11
+ FLOAT = ctypes.c_float
12
+
13
+ BOOL = ctypes.c_bool
14
+ DOUBLE = ctypes.c_double
15
+ CHAR = ctypes.c_wchar
16
+
17
+
18
+ ### * Enums
19
+
20
+ class ACC_FLAG_TYPE(IntEnum):
21
+ ACC_NO_FLAG = 0
22
+ ACC_BLUE_FLAG = 1
23
+ ACC_YELLOW_FLAG = 2
24
+ ACC_BLACK_FLAG = 3
25
+ ACC_WHITE_FLAG = 4
26
+ ACC_CHECKERED_FLAG = 5
27
+ ACC_PENALTY_FLAG = 6
28
+ ACC_GREEN_FLAG = 7
29
+ ACC_ORANGE_FLAG = 8
30
+
31
+ class ACC_PENALTY_TYPE(IntEnum):
32
+ ACC_None = 0
33
+ ACC_DriveThrough_Cutting = 1
34
+ ACC_StopAndGo_10_Cutting = 2
35
+ ACC_StopAndGo_20_Cutting = 3
36
+ ACC_StopAndGo_30_Cutting = 4
37
+ ACC_Disqualified_Cutting = 5
38
+ ACC_RemoveBestLaptime_Cutting = 6
39
+ ACC_DriveThrough_PitSpeeding = 7
40
+ ACC_StopAndGo_10_PitSpeeding = 8
41
+ ACC_StopAndGo_20_PitSpeeding = 9
42
+ ACC_StopAndGo_30_PitSpeeding = 10
43
+ ACC_Disqualified_PitSpeeding = 11
44
+ ACC_RemoveBestLaptime_PitSpeeding = 12
45
+ ACC_Disqualified_IgnoredMandatoryPit = 13
46
+ ACC_PostRaceTime = 14
47
+ ACC_Disqualified_Trolling = 15
48
+ ACC_Disqualified_PitEntry = 16
49
+ ACC_Disqualified_PitExit = 17
50
+ ACC_Disqualified_Wrongway = 18
51
+ ACC_DriveThrough_IgnoredDriverStint = 19
52
+ ACC_Disqualified_IgnoredDriverStint = 20
53
+ ACC_Disqualified_ExceededDriverStintLimit = 21
54
+
55
+ class ACC_SESSION_TYPE(IntEnum):
56
+ ACC_UNKNOWN = -1
57
+ ACC_PRACTICE = 0
58
+ ACC_QUALIFY = 1
59
+ ACC_RACE = 2
60
+ ACC_HOTLAP = 3
61
+ ACC_TIMEATTACK = 4
62
+ ACC_DRIFT = 5
63
+ ACC_DRAG = 6
64
+ ACC_HOTSTINT = 7
65
+ ACC_HOTSTINTSUPERPOLE = 8
66
+
67
+ class ACC_STATUS(IntEnum):
68
+ ACC_OFF = 0
69
+ ACC_REPLAY = 1
70
+ ACC_LIVE = 2
71
+ ACC_PAUSE = 3
72
+
73
+ class ACC_WHEELS_TYPE(IntEnum):
74
+ ACC_FrontLeft = 0
75
+ ACC_FrontRight = 1
76
+ ACC_RearLeft = 2
77
+ ACC_RearRight = 3
78
+
79
+ class ACC_TRACK_GRIP_STATUS(IntEnum):
80
+ ACC_GREEN = 0
81
+ ACC_FAST = 1
82
+ ACC_OPTIMUM = 2
83
+ ACC_GREASY = 3
84
+ ACC_DAMP = 4
85
+ ACC_WET = 5
86
+ ACC_FLOODED = 6
87
+
88
+ class ACC_RAIN_INTENSITY(IntEnum):
89
+ ACC_NO_RAIN = 0
90
+ ACC_DRIZZLE = 1
91
+ ACC_LIGHT_RAIN = 2
92
+ ACC_MEDIUM_RAIN = 3
93
+ ACC_HEAVY_RAIN = 4
94
+ ACC_THUNDERSTORM = 5
95
+
96
+
97
+ ### * Data Structure
98
+
99
+ # The following members change at each graphic step. They all refer to the player’s car.
100
+ class SPageFilePhysicsData(DataTypes.STRUCTURE):
101
+ # _pack_ = 1
102
+ _fields_ = [
103
+ ("packetId", DataTypes.SIGNED_INT), # Current step index
104
+ ("gas", DataTypes.FLOAT), # Gas pedal input value (from -0 to 1.0)
105
+ ("brake", DataTypes.FLOAT), # Brake pedal input value (from -0 to 1.0)
106
+ ("fuel", DataTypes.FLOAT), # Amount of fuel remaining in kg
107
+ ("gear", DataTypes.SIGNED_INT), # Current gear
108
+ ("rpm", DataTypes.SIGNED_INT), # Engine revolutions per minute
109
+ ("steerAngle", DataTypes.FLOAT), # Steering input value (from -1.0 to 1.0)
110
+ ("speedKmh", DataTypes.FLOAT), # Car speed in km/h
111
+ ("velocity", DataTypes.FLOAT * 3), # Car velocity vector in global coordinates
112
+ ("accG", DataTypes.FLOAT * 3), # Car acceleration vector in global coordinates
113
+ ("wheelSlip", DataTypes.FLOAT * 4), # Tyre slip for each tyre [FL, FR, RL, RR]
114
+ # ("wheelLoad", DataTypes.FLOAT * 4), # Wheel load for each tyre [FL, FR, RL, RR]
115
+ ("wheelPressure", DataTypes.FLOAT * 4), # Tyre pressure [FL, FR, RL, RR]
116
+ ("wheelAngularSpeed", DataTypes.FLOAT * 4), # Wheel angular speed in rad/s [FL, FR, RL, RR]
117
+ # ("tyreWear", DataTypes.FLOAT * 4), # Tyre wear [FL, FR, RL, RR]
118
+ # ("tyreDirtyLevel", DataTypes.FLOAT * 4), # Dirt accumulated on tyre surface [FL, FR, RL, RR]
119
+ ("TyreCoreTemp", DataTypes.DOUBLE * 4), # Tyre rubber core temperature [FL, FR, RL, RR]
120
+ # ("camberRAD", DataTypes.FLOAT * 4), # Wheels camber in radians [FL, FR, RL, RR]
121
+ ("suspensionTravel", DataTypes.FLOAT * 4), # Suspension travel [FL, FR, RL, RR]
122
+ # ("drs", DataTypes.FLOAT), # DRS on
123
+ ("tc", DataTypes.FLOAT), # TC in action
124
+ ("heading", DataTypes.FLOAT), # Car yaw orientation
125
+ ("pitch", DataTypes.FLOAT), # Car pitch orientation
126
+
127
+ ("roll", DataTypes.FLOAT), # Car roll orientation
128
+ # ("cgHeight", DataTypes.FLOAT), # Centre of gravity height
129
+ ("carDamage", DataTypes.FLOAT * 5), # Car damage: front 0, rear 1, left 2, right 3, centre 4
130
+ # ("numberOfTyresOut", DataTypes.SIGNED_INT), # Number of tyres out of track
131
+ ("pitLimiterOn", DataTypes.SIGNED_INT), # Pit limiter is on
132
+ ("abs", DataTypes.FLOAT), # ABS in action
133
+ # ("kersCharge", DataTypes.FLOAT), # Not used in ACC
134
+ # ("kersInput", DataTypes.FLOAT), # Not used in ACC
135
+ ("autoshifterOn", DataTypes.SIGNED_INT), # Automatic transmission on
136
+ # ("rideHeight", DataTypes.FLOAT * 2), # Ride height: 0 front, 1 rear
137
+ ("turboBoost", DataTypes.FLOAT), # Car turbo level
138
+ # ("ballast", DataTypes.FLOAT), # Car ballast in kg / Not implemented
139
+ # ("airDensity ", DataTypes.FLOAT), # Air density
140
+ ("airTemp", DataTypes.FLOAT), # Air temperature
141
+ ("roadTemp", DataTypes.FLOAT), # Road temperature
142
+ ("localAngularVel", DataTypes.FLOAT * 3), # Car angular velocity vector in local coordinates
143
+ ("finalFF", DataTypes.FLOAT), # Force feedback signal
144
+ # ("performanceMeter", DataTypes.FLOAT), # Not used in ACC
145
+ # ("engineBrake", DataTypes.SIGNED_INT), # Not used in ACC
146
+ # ("ersRecoveryLevel", DataTypes.SIGNED_INT), # Not used in ACC
147
+ # ("ersPowerLevel", DataTypes.SIGNED_INT), # Not used in ACC
148
+ # ("ersHeatCharging", DataTypes.SIGNED_INT), # Not used in ACC
149
+ # ("ersIsCharging", DataTypes.SIGNED_INT), # Not used in ACC
150
+ # ("kersCurrentKJ", DataTypes.FLOAT), # Not used in ACC
151
+ # ("drsAvailable", DataTypes.SIGNED_INT), # Not used in ACC
152
+ # ("drsEnabled", DataTypes.SIGNED_INT), # Not used in ACC
153
+ ("brakeTemp", DataTypes.FLOAT * 4), # Brake discs temperatures
154
+ ("clutch", DataTypes.FLOAT), # Clutch pedal input value (from -0 to 1.0)
155
+ # ("tyreTempI", DataTypes.FLOAT * 4), # Not used in ACC
156
+ # ("tyreTempM", DataTypes.FLOAT * 4), # Not used in ACC
157
+ # ("tyreTempO", DataTypes.FLOAT * 4), # Not used in ACC
158
+ ("isAIControlled", DataTypes.SIGNED_INT), # Car is controlled by the AI
159
+ ("tyreContactPoint", DataTypes.FLOAT * 4 * 3), # Tyre contact point global coordinates [FL, FR, RL, RR] [x,y,z]
160
+ ("tyreContactNormal", DataTypes.FLOAT * 4 * 3), # Tyre contact normal [FL, FR, RL, RR] [x,y,z]
161
+ ("tyreContactHeading", DataTypes.FLOAT * 4 * 3), # Tyre contact heading [FL, FR, RL, RR] [x,y,z]
162
+ ("brakeBias", DataTypes.FLOAT), # Front brake bias, see Appendix 4
163
+ ("localVelocity", DataTypes.FLOAT * 3), # Car velocity vector in local coordinates
164
+ # ("P2PActivation", DataTypes.SIGNED_INT), # Not used in ACC
165
+ # ("P2PStatus", DataTypes.SIGNED_INT), # Not used in ACC
166
+ # ("currentMaxRpm", DataTypes.FLOAT), # Maximum engine rpm
167
+ # ("mz", DataTypes.FLOAT * 4), # Not shown in ACC
168
+
169
+ # ("fx", DataTypes.FLOAT * 4), # Not shown in ACC
170
+ # ("fy", DataTypes.FLOAT * 4), # Not shown in ACC
171
+ ("slipRatio", DataTypes.FLOAT * 4), # Tyre slip ratio [FL, FR, RL, RR] in radians
172
+ ("slipAngle", DataTypes.FLOAT * 4), # Tyre slip angle [FL, FR, RL, RR]
173
+ # ("tcinAction", DataTypes.SIGNED_INT), # TC in action
174
+ # ("absInAction", DataTypes.SIGNED_INT), # ABS in action
175
+ # ("suspensionDamage", DataTypes.FLOAT * 4), # Suspensions damage levels [FL, FR, RL, RR]
176
+ # ("tyreTemp", DataTypes.FLOAT * 4), # Tyres core temperatures [FL, FR, RL, RR]
177
+ ("waterTemp", DataTypes.FLOAT), # Water Temperature
178
+ ("brakePressure", DataTypes.FLOAT * 4), # Brake pressure [FL, FR, RL, RR] see Appendix 2
179
+ ("frontBrakeCompound", DataTypes.SIGNED_INT), # Brake pad compund front
180
+ ("rearBrakeCompound", DataTypes.SIGNED_INT), # Brake pad compund rear
181
+ ("padLife", DataTypes.FLOAT * 4), # Brake pad wear [FL, FR, RL, RR]
182
+ ("discLife", DataTypes.FLOAT * 4), # Brake disk wear [FL, FR, RL, RR]
183
+ ("ignitionOn", DataTypes.SIGNED_INT), # Ignition switch set to on?
184
+ ("starterEngineOn", DataTypes.SIGNED_INT), # Starter Switch set to on?
185
+ ("isEngineRunning", DataTypes.SIGNED_INT), # Engine running?
186
+ ("kerbVibration", DataTypes.FLOAT), # vibrations sent to the FFB, could be used for motion rigs
187
+ ("slipVibrations", DataTypes.FLOAT), # vibrations sent to the FFB, could be used for motion rigs
188
+ ("gVibrations", DataTypes.FLOAT), # vibrations sent to the FFB, could be used for motion rigs
189
+ ("absVibrations", DataTypes.FLOAT), # vibrations sent to the FFB, could be used for motion rigs
190
+ ]
191
+
192
+ # The following members are updated at each graphical step. They mostly refer to player’s car
193
+ # except for carCoordinates and carID, which refer to the cars currently on track.
194
+ class SPageFileGraphicData(DataTypes.STRUCTURE):
195
+ # _pack_ = 1
196
+ _enums_: dict[type, tuple[str, ...]] = {
197
+ ACC_STATUS: ("status",),
198
+ ACC_SESSION_TYPE: ("session",),
199
+ ACC_FLAG_TYPE: ("flag",),
200
+ ACC_PENALTY_TYPE: ("penalty",),
201
+ ACC_TRACK_GRIP_STATUS: ("trackGripStatus",),
202
+ ACC_RAIN_INTENSITY: ("rainIntensity",),
203
+ ACC_RAIN_INTENSITY: ("rainIntensityIn10min",),
204
+ ACC_RAIN_INTENSITY: ("rainIntensityIn30min",),
205
+ }
206
+ _fields_ = [
207
+ ("packetId", DataTypes.SIGNED_INT), # Current step index
208
+ ("status", DataTypes.SIGNED_INT), # See enums ACC_STATUS
209
+ ("session", DataTypes.SIGNED_INT), # See enums ACC_SESSION_TYPE
210
+ ("currentTime", DataTypes.CHAR * 15), # Current lap time in wide character
211
+ ("lastTime", DataTypes.CHAR * 15), # Last lap time in wide character
212
+ ("bestTime", DataTypes.CHAR * 15), # Best lap time in wide character
213
+ ("split", DataTypes.CHAR * 15), # Last split time in wide character
214
+ ("completedLaps", DataTypes.SIGNED_INT), # No of completed laps
215
+ ("position", DataTypes.SIGNED_INT), # Current player position
216
+ ("iCurrentTime", DataTypes.SIGNED_INT), # Current lap time in milliseconds
217
+ ("iLastTime", DataTypes.SIGNED_INT), # Last lap time in milliseconds
218
+ ("iBestTime", DataTypes.SIGNED_INT), # Best lap time in milliseconds
219
+ ("sessionTimeLeft", DataTypes.FLOAT), # Session time left
220
+ ("distanceTraveled", DataTypes.FLOAT), # Distance travelled in the current stint
221
+ ("isInPit", DataTypes.SIGNED_INT), # Car is pitting
222
+ ("currentSectorIndex", DataTypes.SIGNED_INT), # Current track sector
223
+ ("lastSectorTime", DataTypes.SIGNED_INT), # Last sector time in milliseconds
224
+ ("numberOfLaps", DataTypes.SIGNED_INT), # Number of completed laps
225
+ ("tyreCompound", DataTypes.CHAR * 33), # Tyre compound used
226
+ # ("replayTimeMultiplier", DataTypes.FLOAT), # Not used in ACC
227
+ ("normalizedCarPosition", DataTypes.FLOAT), # Car position on track spline (0.0 start to 1.0 finish)
228
+ ("activeCars", DataTypes.SIGNED_INT), # Number of cars on track
229
+ ("carCoordinates", DataTypes.FLOAT * 60 * 3), # Coordinates of cars on track
230
+ ("carID", DataTypes.SIGNED_INT), # Car IDs of cars on track
231
+ ("playerCarID", DataTypes.SIGNED_INT), # Player Car ID
232
+ ("penaltyTime", DataTypes.FLOAT), # Penalty time to wait
233
+ ("flag", DataTypes.SIGNED_INT), # See enums ACC_FLAG_TYPE
234
+ ("penalty", DataTypes.SIGNED_INT), # See enums ACC_PENALTY_TYPE
235
+ ("idealLineOn", DataTypes.SIGNED_INT), # Ideal line on
236
+ ("isInPitLane", DataTypes.SIGNED_INT), # Car is in pit lane
237
+ ("surfaceGrip", DataTypes.FLOAT), # Ideal line friction coefficient
238
+ ("mandatoryPitDone", DataTypes.SIGNED_INT), # Mandatory pit is completed
239
+ ("windSpeed", DataTypes.FLOAT), # Wind speed in m/s
240
+ ("windDirection", DataTypes.FLOAT), # wind direction in radians
241
+ ("isSetupMenuVisible", DataTypes.SIGNED_INT), # Car is working on setup
242
+
243
+ ("mainDisplayIndex", DataTypes.SIGNED_INT), # current car main display index, see Appendix 1
244
+ ("secondaryDisplyIndex", DataTypes.SIGNED_INT), # current car secondary display index
245
+ ("TC", DataTypes.SIGNED_INT), # Traction control level
246
+ ("TCCUT", DataTypes.SIGNED_INT), # Traction control cut level
247
+ ("EngineMap", DataTypes.SIGNED_INT), # Current engine map
248
+ ("ABS", DataTypes.SIGNED_INT), # ABS level
249
+ ("fuelXLap", DataTypes.FLOAT), # Average fuel consumed per lap in liters
250
+ ("rainLights", DataTypes.SIGNED_INT), # Rain lights on
251
+ ("flashingLights", DataTypes.SIGNED_INT), # Flashing lights on
252
+ ("lightsStage", DataTypes.SIGNED_INT), # Current lights stage
253
+ ("exhaustTemperature", DataTypes.FLOAT), # Exhaust temperature
254
+ ("wiperLV", DataTypes.SIGNED_INT), # Current wiper stage
255
+ ("driverStintTotalTimeLeft", DataTypes.SIGNED_INT), # Time the driver is allowed to drive/race (ms)
256
+ ("driverStintTimeLeft", DataTypes.SIGNED_INT), # Time the driver is allowed to drive/stint (ms)
257
+ ("rainTyres", DataTypes.SIGNED_INT), # Are rain tyres equipped
258
+ ("sessionIndex", DataTypes.SIGNED_INT),
259
+ ("usedFuel", DataTypes.FLOAT), # Used fuel since last time refueling
260
+ ("deltaLapTime", DataTypes.CHAR * 15), # Delta time in wide character
261
+ ("iDeltaLapTime", DataTypes.SIGNED_INT), # Delta time time in milliseconds
262
+ ("estimatedLapTime", DataTypes.CHAR * 15), # Estimated lap time in milliseconds
263
+ ("iEstimatedLapTime", DataTypes.SIGNED_INT), # Estimated lap time in wide character
264
+ ("isDeltaPositive", DataTypes.SIGNED_INT), # Delta positive (1) or negative (0)
265
+ ("iSplit", DataTypes.SIGNED_INT), # Last split time in milliseconds
266
+ ("isValidLap", DataTypes.SIGNED_INT), # Check if Lap is valid for timing
267
+ ("fuelEstimatedLaps", DataTypes.FLOAT), # Laps possible with current fuel level
268
+ ("trackStatus", DataTypes.CHAR * 33), # Status of track
269
+ ("missingMandatoryPits", DataTypes.SIGNED_INT), # Mandatory pitstops the player still has to do
270
+ ("Clock", DataTypes.FLOAT), # Time of day in seconds
271
+ ("directionLightsLeft", DataTypes.SIGNED_INT), # Is Blinker left on
272
+ ("directionLightsRight", DataTypes.SIGNED_INT), # Is Blinker right on
273
+ ("GlobalYellow", DataTypes.SIGNED_INT), # Yellow Flag is out?
274
+ ("GlobalYellow1", DataTypes.SIGNED_INT), # Yellow Flag in Sector 1 is out?
275
+ ("GlobalYellow2", DataTypes.SIGNED_INT), # Yellow Flag in Sector 2 is out?
276
+ ("GlobalYellow3", DataTypes.SIGNED_INT), # Yellow Flag in Sector 3 is out?
277
+ ("GlobalWhite", DataTypes.SIGNED_INT), # White Flag is out?
278
+ ("GlobalGreen", DataTypes.SIGNED_INT), # Green Flag is out?
279
+ ("GlobalChequered", DataTypes.SIGNED_INT), # Checkered Flag is out?
280
+ ("GlobalRed", DataTypes.SIGNED_INT), # Red Flag is out?
281
+ ("mfdTyreSet", DataTypes.SIGNED_INT), # num of tyre set on the MFD
282
+ ("mfdFuelToAdd", DataTypes.FLOAT), # How much fuel to add on the MFD
283
+ ("mfdTyrePressureLF", DataTypes.FLOAT), # Tyre pressure left front on the MFD
284
+
285
+ ("mfdTyrePressureRF", DataTypes.FLOAT), # Tyre pressure right front on the MFD
286
+ ("mfdTyrePressureLR", DataTypes.FLOAT), # Tyre pressure left rear on the MFD
287
+ ("mfdTyrePressureRR", DataTypes.FLOAT), # Tyre pressure right rear on the MFD
288
+ ("trackGripStatus", DataTypes.SIGNED_INT), # See enums ACC_TRACK_GRIP_STATUS
289
+ ("rainIntensity", DataTypes.SIGNED_INT), # See enums ACC_RAIN_INTENSITY
290
+ ("rainIntensityIn10min", DataTypes.SIGNED_INT), # See enums ACC_RAIN_INTENSITY
291
+ ("rainIntensityIn30min", DataTypes.SIGNED_INT), # See enums ACC_RAIN_INTENSITY
292
+ ("currentTyreSet", DataTypes.SIGNED_INT), # Tyre Set currently in use
293
+ ("strategyTyreSet", DataTypes.SIGNED_INT), # Next Tyre set per strategy
294
+ ("gapAhead", DataTypes.SIGNED_INT), # Distance in ms to car in front
295
+ ("gapBehind", DataTypes.SIGNED_INT), # Distance in ms to car behind
296
+ ]
297
+
298
+ # The following members are initialized when the instance starts and never changes until the
299
+ # instance is closed.
300
+ class SPageFileStaticData(DataTypes.STRUCTURE):
301
+ # _pack_ = 1
302
+ _fields_ = [
303
+ ("smVersion", DataTypes.CHAR * 15), # Shared memory version
304
+ ("acVersion", DataTypes.CHAR * 15), # Assetto Corsa version
305
+ ("numberOfSessions", DataTypes.SIGNED_INT), # Number of sessions
306
+ ("numCars", DataTypes.SIGNED_INT), # Number of cars
307
+ ("carModel", DataTypes.CHAR * 33), # Player car model see Appendix 2
308
+ ("track", DataTypes.CHAR * 33), # Track name
309
+ ("playerName", DataTypes.CHAR * 33), # Player name
310
+ ("playerSurname", DataTypes.CHAR * 33), # Player surname
311
+ ("playerNick", DataTypes.CHAR * 33), # Player nickname
312
+ ("sectorCount", DataTypes.SIGNED_INT), # Number of sectors
313
+ # ("maxTorque", DataTypes.FLOAT), # Not shown in ACC
314
+ # ("maxPower", DataTypes.FLOAT), # Not shown in ACC
315
+ ("maxRpm", DataTypes.SIGNED_INT), # Maximum rpm
316
+ ("maxFuel", DataTypes.FLOAT), # Maximum fuel tank capacity
317
+ # ("suspensionMaxTravel", DataTypes.FLOAT * 4), # Not shown in ACC
318
+ # ("tyreRadius", DataTypes.FLOAT * 4), # Not shown in ACC
319
+ # ("maxTurboBoost", DataTypes.FLOAT), # Maximum turbo boost
320
+ # ("deprecated_1", DataTypes.SIGNED_INT),
321
+ # ("deprecated_2", DataTypes.FLOAT),
322
+ ("penaltiesEnabled", DataTypes.SIGNED_INT), # Penalties enabled
323
+ ("aidFuelRate", DataTypes.FLOAT), # Fuel consumption rate
324
+ ("aidTireRate", DataTypes.FLOAT), # Tyre wear rate
325
+ ("aidMechanicalDamage", DataTypes.FLOAT), # Mechanical damage rate
326
+ ("AllowTyreBlankets", DataTypes.FLOAT), # Not allowed in Blancpain endurance series
327
+ ("aidStability", DataTypes.FLOAT), # Stability control used
328
+ ("aidAutoclutch", DataTypes.SIGNED_INT), # Auto clutch used
329
+ ("aidAutoBlip", DataTypes.SIGNED_INT), # Always true in ACC
330
+ # ("hasDRS", DataTypes.SIGNED_INT), # Not used in ACC
331
+ # ("hasERS", DataTypes.SIGNED_INT), # Not used in ACC
332
+ # ("hasKERS", DataTypes.SIGNED_INT), # Not used in ACC
333
+ # ("kersMaxJ", DataTypes.FLOAT), # Not used in ACC
334
+ # ("engineBrakeSettingsCount", DataTypes.SIGNED_INT), # Not used in ACC
335
+ # ("ersPowerControllerCount", DataTypes.SIGNED_INT), # Not used in ACC
336
+ # ("trackSplineLength", DataTypes.FLOAT), # Not used in ACC
337
+ # ("trackConfiguration", DataTypes.CHAR), # Not used in ACC
338
+ # ("ersMaxJ", DataTypes.FLOAT), # Not used in ACC
339
+
340
+ ("isTimedRace", DataTypes.SIGNED_INT), # Not used in ACC
341
+ ("hasExtraLap", DataTypes.SIGNED_INT), # Not used in ACC
342
+ ("carSkin", DataTypes.CHAR * 33), # Not used in ACC
343
+ ("reversedGridPositions", DataTypes.SIGNED_INT), # Not used in ACC
344
+ ("PitWindowStart", DataTypes.SIGNED_INT), # Pit window opening time
345
+ ("PitWindowEnd", DataTypes.SIGNED_INT), # Pit windows closing time
346
+ ("isOnline", DataTypes.SIGNED_INT), # If is a multiplayer session
347
+ ("dryTyresName", DataTypes.CHAR * 33), # Name of the dry tyres
348
+ ("wetTyresName", DataTypes.CHAR * 33), # Name of the wet tyres
349
+ ]
350
+
351
+
352
+ ### * MetaData
353
+
354
+ class MetaData:
355
+ # standard network info
356
+ port: int | None = None
357
+
358
+ # use if a heartbeat is needed
359
+ heartBeatPort: int | None = None
360
+ heartBeatFunc = None
361
+
362
+ # use for itinial hand shake
363
+ handShakePort: int | None = None
364
+ handShakeFunc: tuple | None = None
365
+
366
+ # use if the data needs decrypting
367
+ decrytionFunc = None
368
+
369
+ # use if there is a header packet
370
+ headerInfo: type | None = None
371
+ packetIDAttribute: str | None = None
372
+
373
+ # use for shared memory
374
+ allSharedMemoryNames: str | None | dict[str, str] = {
375
+ "SPageFilePhysicsData": "Local\\acpmf_physics",
376
+ "SPageFileGraphicData": "Local\\acpmf_graphics",
377
+ "SPageFileStaticData": "Local\\acpmf_static",
378
+ }
379
+
380
+ # standard packet info
381
+ packetInfo: dict[int, tuple[type, ...]] = {
382
+ 0: (SPageFilePhysicsData, SPageFileGraphicData, SPageFileStaticData, ),
383
+ }