use crate::math::{CoordsCartesian, CoordsSpherical};
use crate::measurements::SensorParams;
use crate::{
GestureRecognizer, RecognizerParams, RecognizerResult, RecognizerStatus, SensorMeasurement,
};
pub const RES_X: usize = 8;
pub const RES_Y: usize = 8;
pub const HISTORY_SIZE: usize = 60;
#[no_mangle]
pub extern "C" fn sensor_measurement_invalid() -> SensorMeasurement<RES_X, RES_Y> {
SensorMeasurement::<RES_X, RES_Y>::invalid()
}
#[no_mangle]
pub extern "C" fn sensor_params_default_vl53l5cx() -> SensorParams {
SensorParams::default_vl53l5cx()
}
#[no_mangle]
pub extern "C" fn recognizer_params_default() -> RecognizerParams {
RecognizerParams::default()
}
#[no_mangle]
pub extern "C" fn recognizer_result_default() -> RecognizerResult {
RecognizerResult::default()
}
#[no_mangle]
pub extern "C" fn gesture_recognizer_new(
params: RecognizerParams,
sensor_params: SensorParams,
) -> GestureRecognizer<RES_X, RES_Y, HISTORY_SIZE> {
GestureRecognizer::new(params, sensor_params)
}
#[no_mangle]
pub extern "C" fn gesture_recognizer_reset(
gesture_recognizer: &mut GestureRecognizer<RES_X, RES_Y, HISTORY_SIZE>,
params: RecognizerParams,
sensor_params: SensorParams,
now: u32,
) -> RecognizerStatus {
gesture_recognizer.reset(params, sensor_params, now)
}
#[no_mangle]
pub extern "C" fn gesture_recognizer_update(
gesture_recognizer: &mut GestureRecognizer<RES_X, RES_Y, HISTORY_SIZE>,
measurement: SensorMeasurement<RES_X, RES_Y>,
gesture_result: &mut RecognizerResult,
) -> RecognizerStatus {
gesture_recognizer.update(measurement, gesture_result)
}
#[no_mangle]
pub extern "C" fn coords_spherical_from_cartesian(coords_cart: CoordsCartesian) -> CoordsSpherical {
coords_cart.into()
}
#[no_mangle]
pub extern "C" fn coords_cartesian_from_spherical(
coords_spher: CoordsSpherical,
) -> CoordsCartesian {
coords_spher.into()
}