Add this to your Cargo.toml
[dependencies]
simconnect = "0.1"
The SimConnect binaries are included within this repository, but they may not be up to date.
- Install CLang. More information available at the Rust Bindgen Documentation.
- run
cargo build
use simconnect
Note: You must have SimConnect.dll in your current working directory to be able to successfully use SimConnect
use simconnect;
use std::time::Duration;
use std::thread::sleep;
use std::mem::transmute_copy;
struct DataStruct {
lat: f64,
lon: f64,
alt: f64,
}
let mut conn = simconnect::SimConnector::new();
conn.connect("Simple Program"); // Intialize connection with SimConnect
conn.add_data_definition(0, "PLANE LATITUDE", "Degrees", simconnect::SIMCONNECT_DATATYPE_SIMCONNECT_DATATYPE_FLOAT64, u32::MAX); // Assign a sim variable to a client defined id
conn.add_data_definition(0, "PLANE LONGITUDE", "Degrees", simconnect::SIMCONNECT_DATATYPE_SIMCONNECT_DATATYPE_FLOAT64, u32::MAX);
conn.add_data_definition(0, "PLANE ALTITUDE", "Feet", simconnect::SIMCONNECT_DATATYPE_SIMCONNECT_DATATYPE_FLOAT64, u32::MAX); //define_id, units, data_type, datum_id
conn.request_data_on_sim_object(0, 0, 0, simconnect::SIMCONNECT_PERIOD_SIMCONNECT_PERIOD_SIM_FRAME); //request_id, define_id, object_id (user), period - tells simconnect to send data for the defined id and on the user aircraft
loop {
match conn.get_next_message() {
Ok(simconnect::DispatchResult::SimobjectData(data)) => {
unsafe {
match (*data).dwDefineID {
0 => {
let sim_data: DataStruct = transmute_copy(&(*data).dwData);
println!("{:?} {:?} {:?}", sim_data.lat, sim_data.lon, sim_data.alt);
},
_ => ()
}
}
},
_ => ()
}
sleep(Duration::from_millis(16)); // Will use up lots of CPU if this is not included, as get_next_message() is non-blocking
}
I have not tested every single function from the api. If you find an error, feel free to make an issue or a pull request.