53 lines
1.3 KiB
Rust
53 lines
1.3 KiB
Rust
//! Free-fall function duration setting register (r/w).
|
|
|
|
use crate::lsm6ds3tr::{RegisterAddress, RegisterBits, RegisterConfig, RegisterValue};
|
|
|
|
/// Free-fall function duration setting register (r/w).
|
|
#[derive(Default)]
|
|
pub struct FreeFall {
|
|
/// Free-fall duration event. Default: 0
|
|
/// For the complete configuration of the free fall duration, refer to FF_DUR5 in WAKE_UP_DUR (5Ch) configuration
|
|
pub duration_event: RegisterBits<5, 3>,
|
|
/// Free fall threshold setting. Default: 000
|
|
/// For details refer to Table 196.
|
|
pub threshold: FreeFallThreshold,
|
|
}
|
|
|
|
impl FreeFall {
|
|
pub fn address(&self) -> u8 {
|
|
RegisterAddress::FREE_FALL.address()
|
|
}
|
|
|
|
pub fn value(&self) -> u8 {
|
|
self.duration_event.shifted() | self.threshold.shifted()
|
|
}
|
|
|
|
pub fn config(&self) -> RegisterConfig {
|
|
RegisterConfig {
|
|
address: self.address(),
|
|
value: self.value(),
|
|
}
|
|
}
|
|
}
|
|
|
|
#[allow(non_camel_case_types)]
|
|
#[repr(u8)]
|
|
#[derive(Default, Clone, Copy)]
|
|
pub enum FreeFallThreshold {
|
|
#[default]
|
|
_156_mg = 0b000,
|
|
_219_mg = 0b001,
|
|
_250_mg = 0b010,
|
|
_312_mg = 0b011,
|
|
_344_mg = 0b100,
|
|
_406_mg = 0b101,
|
|
_469_mg = 0b110,
|
|
_500_mg = 0b111,
|
|
}
|
|
|
|
impl RegisterValue for FreeFallThreshold {
|
|
fn shifted(&self) -> u8 {
|
|
*self as u8
|
|
}
|
|
}
|