2022-10-15 22:51:57 +01:00
2022-10-15 22:51:57 +01:00
2022-10-15 22:51:57 +01:00
2022-10-01 17:01:57 +01:00
2022-10-15 22:51:57 +01:00
2022-10-09 09:38:53 +01:00
2022-10-15 22:51:57 +01:00

SimConnect SDK in Rust

Usage

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

/// A data structure that will be used to receive data from SimConnect.
#[derive(Debug, Clone, SimConnectObject)]
#[simconnect(period = "second")]
struct GpsData {
    #[simconnect(name = "PLANE LATITUDE", unit = "degrees")]
    lat: f64,
    #[simconnect(name = "PLANE LONGITUDE", unit = "degrees")]
    lon: f64,
    #[simconnect(name = "PLANE LONGITUDE", unit = "degrees")]
    alt: f64,
}

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

    match client {
        Ok(mut client) => loop {
            let notification = client.get_next_dispatch()?;

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

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

            // 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.

Description
No description provided
Readme MIT 704 KiB
Languages
Rust 68%
C 32%