Expand description

SimConnect SDK

SimConnect SDK in Rust.

Usage

[dependencies]
simconnect-sdk = { version = "0.2", features = ["derive"] }
use simconnect_sdk::{Notification, SimConnect, SimConnectObject};

/// A data structure that will be used to receive data from SimConnect.
/// See the documentation of `SimConnectObject` for more information on the arguments of the `simconnect` attribute.
#[derive(Debug, Clone, SimConnectObject)]
#[simconnect(period = "second")]
#[allow(dead_code)]
struct AirplaneData {
    #[simconnect(name = "TITLE")]
    title: String,
    #[simconnect(name = "CATEGORY")]
    category: String,
    #[simconnect(name = "PLANE LATITUDE", unit = "degrees")]
    lat: f64,
    #[simconnect(name = "PLANE LONGITUDE", unit = "degrees")]
    lon: f64,
    #[simconnect(name = "PLANE ALTITUDE", unit = "feet")]
    alt: f64,
    #[simconnect(name = "SIM ON GROUND")]
    sim_on_ground: bool,
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = SimConnect::new("Receiving data example");

    match client {
        Ok(mut client) => {
            let mut notifications_received = 0;

            loop {
                let notification = client.get_next_dispatch()?;

                match notification {
                    Some(Notification::Open) => {
                        println!("Connection opened.");

                        // After the connection is successfully open, we register the struct
                        client.register_object::<AirplaneData>()?;
                    }
                    Some(Notification::Object(data)) => {
                        if let Ok(airplane_data) = AirplaneData::try_from(&data) {
                            println!("{airplane_data:?}");

                            notifications_received += 1;

                            // After we have received 10 notifications, we unregister the struct
                            if notifications_received > 10 {
                                client.unregister_object::<AirplaneData>()?;
                                println!("Subscription stopped.");
                                break;
                            }
                        }
                    }
                    _ => (),
                }

                // sleep for about a frame to reduce CPU usage
                std::thread::sleep(std::time::Duration::from_millis(16));
            }
        }
        Err(e) => {
            println!("Error: {e:?}")
        }
    }

    Ok(())
}

See more examples.

Structs

Information on a single airport in the facilities cache.
Information on a single NDB station in the facilities cache.
Notification data object.
SimConnect SDK Client.
Information on a single VOR station in the facilities cache.
Information on a single waypoint in the facilities cache.

Enums

SimConnect Client Event.
Specifies under which conditions the data is to be sent by the server and received by the client.
crate::SimConnectObject object property data type.
Facility Type. The simulation keeps a facilities cache of all the airports, waypoints, NDB and VOR stations within a certain radius of the user aircraft. They can be requested using crate::SimConnect::subscribe_to_facilities or crate::SimConnect::request_facilities_list.
Notification received from SimConnect.
SimConnect event notification group.
Specifies how often the data is to be sent by the server and received by the client. 0 - every interval. 1 - every other interval. 2 - every third interval. etc.
SimConnect SDK error.
SimConnect System Event Notification.
SimConnect System Event Request.
Cockpit view type.

Traits

Trait to be implemented by objects that can be registered with SimConnect.

Functions

Derive Macros

SimConnectObject derive macro.