Files
resy/kawaii/kawaii-rs/src/emergency_stop.rs
2017-07-10 15:20:14 +02:00

31 lines
937 B
Rust

extern crate emergency_stop;
use self::emergency_stop::EmergencyStop;
use std::mem::transmute;
use std::ptr::null_mut;
use std::sync::atomic::Ordering;
/// Constructs a new `EmergencyStop` on heap and returns pointer.
#[no_mangle]
pub extern "C" fn emergency_stop_init(stop: u8) -> *mut EmergencyStop {
match EmergencyStop::new(stop) {
Err(_) => null_mut(),
Ok(emergency_stop) => unsafe { transmute(Box::new(emergency_stop)) },
}
}
/// Drops a `EmergencyStop` pointer on heap.
#[no_mangle]
pub extern "C" fn emergency_stop_clean(emergency_stop: *mut EmergencyStop) {
let _emergency_stop: Box<EmergencyStop> = unsafe { transmute(emergency_stop) };
}
/// Returns `EmergencyStop` pointer state.
#[no_mangle]
pub extern "C" fn emergency_stop_get_state(emergency_stop: *mut EmergencyStop) -> bool {
let emergency_stop = unsafe { &mut *emergency_stop };
emergency_stop.state.load(Ordering::Relaxed)
}