pub enum AngleEn {
NoAngle = 0x00,
Xy = 0x01,
Yz = 0x02,
Zx = 0x03,
}
pub enum SleepTime {
Ms1 = 0x00,
Ms5 = 0x01,
Ms10 = 0x02,
Ms15 = 0x03,
Ms20 = 0x04,
Ms30 = 0x05,
Ms50 = 0x06,
Ms100 = 0x07,
Ms500 = 0x08,
Ms1000 = 0x09,
}
#[allow(non_camel_case_types)]
pub enum MagChEn {
Off = 0x00,
X = 0x01,
Y = 0x02,
Xy = 0x03,
Z = 0x04,
Zx = 0x05,
Yz = 0x06,
Xyz = 0x07,
Xyx = 0x08,
Yxy = 0x09,
Yzy = 0x0a,
Zyz = 0x0b,
Zxz = 0x0c,
Xzx = 0x0d,
Xyzyx = 0x0e,
Xyzzyx = 0x0f,
}
#[allow(non_camel_case_types)]
pub enum Range {
A1_50mT_A2_200mT = 0x00,
A1_25mT_A2_133mT = 0x01,
A1_100mT_A2_300mT = 0x02,
}
pub struct SensorConfig {
config: u16,
}
impl SensorConfig {
pub fn new() -> Self {
let config = 0x00;
SensorConfig { config }
}
pub fn form_u16(config: u16) -> Self {
SensorConfig { config }
}
pub fn to_u16(&self) -> u16 {
self.config
}
pub fn set_angle_en(mut self, angle_en: AngleEn) -> Self {
self.config = self.config & !(0b11 << 14) | ((angle_en as u16) << 14);
self
}
pub fn set_sleep_time(mut self, sleep_time: SleepTime) -> Self {
self.config = self.config & !(0b1111 << 10) | ((sleep_time as u16) << 10);
self
}
pub fn set_mag_ch_en(mut self, mag_ch_en: MagChEn) -> Self {
self.config = self.config & !(0b1111 << 6) | ((mag_ch_en as u16) << 6);
self
}
pub fn set_z_range(mut self, z_range: Range) -> Self {
self.config = self.config & !(0b11 << 4) | ((z_range as u16) << 4);
self
}
pub fn set_y_range(mut self, y_range: Range) -> Self {
self.config = self.config & !(0b11 << 2) | ((y_range as u16) << 2);
self
}
pub fn set_x_range(mut self, x_range: Range) -> Self {
self.config = self.config & !(0b11) | (x_range as u16);
self
}
}
impl Default for SensorConfig {
fn default() -> Self {
SensorConfig::new()
}
}