Retrieving Flight Plan waypoints data (navigation point name, coordinates, etc)

Discuss on the SimConnect SDK can be used by programmers to write add-on components for Prepar3D
Post Reply
PaulSz
Posts: 1
Joined: Thu Jun 03, 2021 7:25 am

Retrieving Flight Plan waypoints data (navigation point name, coordinates, etc)

Post by PaulSz »

Hello,

We are currently developing an integration with Prepar3D_v4_Professional_Plus_4.5.14.34698 and our Surveillance Radar using the Simconnect C# app given as example.

We successfully managed to extract every information we needed from the aircraft using the example code and the forums like so:

Code: Select all

 simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "AI TRAFFIC FROMAIRPORT", null, SIMCONNECT_DATATYPE.STRING8, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "AI TRAFFIC TOAIRPORT", null, SIMCONNECT_DATATYPE.STRING8, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "AI CURRENT WAYPOINT", "Number", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "PLANE BANK DEGREES", null, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "PLANE PITCH DEGREES", null, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "PLANE HEADING DEGREES TRUE", "radians", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "Plane Latitude", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "Plane Longitude", "degrees", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "Plane Altitude", "feet", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "PLANE HEADING DEGREES MAGNETIC", null, SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "ATC Model", null, SIMCONNECT_DATATYPE.STRING256, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "TRANSPONDER CODE", "feet", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "TRANSPONDER AVAILABLE", "bool", SIMCONNECT_DATATYPE.INT64, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "GROUND VELOCITY", "knots", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "AIRSPEED TRUE", "knots", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "AIRSPEED INDICATED", "knots", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "AIRSPEED MACH", "mach", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "VERTICAL SPEED", "knots", SIMCONNECT_DATATYPE.FLOAT64, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "ATC FLIGHT NUMBER", null, SIMCONNECT_DATATYPE.STRING8, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "ATC AIRLINE", null, SIMCONNECT_DATATYPE.STRING64, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "ATC ID", null, SIMCONNECT_DATATYPE.STRING32, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "COM ACTIVE FREQUENCY:1", "Frequency BCD16", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "COM STANDBY FREQUENCY:1", "Frequency BCD16", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "COM TRANSMIT:1", "bool", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "COM ACTIVE FREQUENCY:2", "Frequency BCD16", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "COM STANDBY FREQUENCY:2", "Frequency BCD16", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "COM TRANSMIT:2", "bool", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "GPS FLIGHT PLAN WP COUNT", "Number", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED);
                simconnect.AddToDataDefinition(SimConnectController.DEFINITIONS.Prepar3DPilotedAircraftData, "GPS FLIGHT PLAN WP INDEX", "Number", SIMCONNECT_DATATYPE.INT32, 0.0f, SimConnect.SIMCONNECT_UNUSED);
The corresponding data structure:

Code: Select all

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
        public struct Prepar3DPilotedAircraftData
        {
            //[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
            //public string airportFrom;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
            public string fromAirport;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
            public string toAirport;

            public int curWp;
            public double bankDegrees;
            public double pitchDegrees;
            public double headingDegreesTrue;
            public double latitude;
            public double longitude;
            public double altitude;
            public double magHead;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
            public string ATCModel;
            public double transponderCode;
            public bool transponderAvailable;
            public double groundVelocity;
            public double airspeedTrue;
            public double airspeedIndicated;
            public double airspeedMach;
            public double verticalSpeed;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
            public string ATCFlightNumber;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
            public string ATCAirline;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
            public string atcID;
            public int comActiveFrequency1, comStandbyFrequency1;
            public bool comTransmit1;
            public int comActiveFrequency2, comStandbyFrequency2;
            public bool comTransmit2;
            public int gpsFPLWpCount, gpsFPLWpIndex;
        }
The only thing left that we need and haven't found any info on how to do it is getting the actual FlightPlan waypoints. We know how many there are and the current index, but we need all of them in order to create a route in our Radar too.

Any help with this is greatly appreciated.

Thank you.
Post Reply