Rust bindings for RTIMULib2 generated with https://rust-lang.github.io/rust-bindgen/
sudo apt install llvm-dev libclang-dev clang
cd ~
git clone https://github.com/seandepagnier/RTIMULib2
cd RTIMULib2/RTIMULib
mkdir build && cd build
cmake ..
make
cd ~
git clone https://github.com/bareboat-necessities/rust-modules
cp -r rust-modules/RTIMULib2/Linux/rust ~/RTIMULib2/Linux/
cd ~/RTIMULib2/Linux/rust
cargo build
find . -name bindings.rs
cd ~/RTIMULib2/Linux/rust
cargo test
The Rust code example:
````
use std::ffi::{CStr}; use std::mem::MaybeUninit; use std::os::raw::{cvoid}; use std::{ptr, thread, time}; use rtimulibrust::{RTIMUSettings, RTIMU, RTIMUSettingsRTIMUSettings, RTIMUMPU925xIMUInit, RTIMUMPU925xIMUGetPollInterval, RTMathdisplayDegrees, RTVector3, RTIMUMPU925xIMURead, RTIMUMPU925xRTIMUMPU925xdestructor, RTIMUMPU925x, RTFusionKalman4RTFusionKalman4_destructor, RTFusionKalman4};
fn main() { println!("Hello RTIMULib!");
let mut instance = MaybeUninit::<RTIMUSettings>::uninit();
let settings = instance.as_mut_ptr();
unsafe {
RTIMUSettings_RTIMUSettings( settings, "RTIMULib".as_ptr());
(*settings).m_fusionType = 1;
let imu = RTIMU::createIMU(settings);
RTIMUMPU925x_IMUInit(imu as *mut c_void);
let fusion = (*imu).m_fusion;
(*fusion).m_slerpPower = 0.02;
(*fusion).m_enableGyro = true;
(*fusion).m_enableAccel = true;
(*fusion).m_enableCompass = true;
let poll = RTIMUMPU925x_IMUGetPollInterval(imu as *mut c_void);
println!("Poll: {}", poll);
thread::sleep(time::Duration::from_millis((poll * 1000) as u64));
RTIMUMPU925x_IMURead(imu as *mut c_void);
let mut imu_data = (*imu).m_imuData;
let p_pose : *mut RTVector3 = ptr::addr_of_mut!(imu_data.fusionPose);
let deg = RTMath_displayDegrees("".as_ptr(), p_pose);
println!("{}", CStr::from_ptr(deg).to_str().unwrap().to_owned());
RTFusionKalman4_RTFusionKalman4_destructor(fusion as *mut RTFusionKalman4);
RTIMUMPU925x_RTIMUMPU925x_destructor( imu as *mut RTIMUMPU925x);
}
}
````