(Flight Simulator Universal Inter-Process Communication) is a foundational utility for flight simulators like Microsoft Flight Simulator (MSFS) and Lockheed-Martin's Prepar3D . While it is traditionally accessed via C++ or Lua, Python has become a powerful way to interact with its "inner workings" through third-party wrappers . The Role of FSUIPC
: A Cython-based module designed for Python 3 that interfaces with the FSUIPC user library. How It Works
FSUIPC acts as a centralized "blackboard" for simulation data: tjensen/fsuipc: Python client wrapper for FSUIPC - GitHub fsuipc python
FSUIPC (Flight Simulator Universal Inter-Process Communication) acts as a bridge between external applications and flight simulators like Microsoft Flight Simulator (MSFS) and Prepar3D (P3D). It exposes thousands of memory locations, known as , which contain data about the aircraft's current state—such as airspeed, altitude, latitude, longitude, and switch positions.
with FSUIPC() as fsuipc: # Prepare the data we want to read using offsets # (0x560, "l") is the offset for latitude; "l" indicates a 4-byte integer prepared = fsuipc.prepare_data([ (0x560, "l"), (0x568, "l"), (0x570, "l") ], True) How It Works FSUIPC acts as a centralized
# 3. Read the data loop print("Reading data... Press Ctrl+C to stop.") while True: # .read() executes the query and returns a tuple of results altitude, airspeed = fsuipc_client.read()
| Parameter | Offset | Type | Size | |-----------|--------|------|------| | Airspeed (knots) | 0x02BC | int | 4 | | Altitude (feet) | 0x0570 | int | 4 | | Latitude | 0x0560 | double | 8 | | Longitude | 0x0568 | double | 8 | | Heading (degrees) | 0x0580 | int | 4 | | Engine RPM (engine 1) | 0x08B8 | float | 4 | | Parking brake (0=off, 1=on) | 0x0BC8 | byte | 1 | Read the data loop print("Reading data
from fsuipc import FSUIPC import time # Use the context manager to open/close connection with FSUIPC() as fsuipc: # Prepare the offsets to read (Offset Address, Type) # 0x0568 is the offset for Altitude (in meters * 256) # 0x0560 is the offset for Latitude (in degrees * 10485760 / 360) prepared = fsuipc.prepare_data([ (0x0568, "l"), (0x0560, "l") ]) # Read the data in a loop for _ in range(10): altitude_raw, latitude_raw = prepared.read() # Convert raw FSUIPC data to usable values altitude_feet = altitude_raw / 256 * 3.28084 print(f"Altitude: altitude_feet:.2f feet") time.sleep(1) Use code with caution. Writing Flight Data
Output lines containing “tags: ... win32” indicate 32‑bit Python; “tags: ... win_amd64” indicates 64‑bit Python.
While FSUIPC can be used with languages like C++, C#, and Lua, is a popular choice due to its simplicity, speed of development, and rich ecosystem of libraries.
Refer to the FSUIPC Offset Status.pdf – it’s your bible.