use super::super::{
BusOperation, DelayNs, EmbAdvFunctions, Error, Lis2dux12, RegisterOperation, bisync,
register::MainBank,
};
use bitfield_struct::bitfield;
use st_mem_bank_macro::adv_register;
#[repr(u8)]
#[derive(Clone, Copy, PartialEq)]
pub enum EmbAdvReg {
EmbAdvPg0 = 0x00,
FsmLcTimeoutL = 0x54,
FsmLcTimeoutH = 0x55,
FsmPrograms = 0x56,
FsmStartAddL = 0x58,
FsmStartAddH = 0x59,
PedoCmdReg = 0x5D,
PedoDebStepsConf = 0x5E,
PedoScDeltatL = 0xAA,
PedoScDeltatH = 0xAB,
TSensitivityL = 0xB6,
TSensitivityH = 0xB7,
SmartPowerCtrl = 0xD2,
}
#[adv_register(base_address = EmbAdvReg::EmbAdvPg0, address = EmbAdvReg::FsmLcTimeoutL, access_type = "Lis2dux12<B, T, MainBank>")]
#[cfg_attr(feature = "bit_order_msb", bitfield(u16, order = Msb))]
#[cfg_attr(not(feature = "bit_order_msb"), bitfield(u16, order = Lsb))]
pub struct FsmLcTimeout {
#[bits(16, default = 0)]
pub fsm_lc_timeout: u16,
}
#[adv_register(base_address = EmbAdvReg::EmbAdvPg0, address = EmbAdvReg::FsmPrograms, access_type = "Lis2dux12<B, T, MainBank>")]
#[cfg_attr(feature = "bit_order_msb", bitfield(u8, order = Msb))]
#[cfg_attr(not(feature = "bit_order_msb"), bitfield(u8, order = Lsb))]
pub struct FsmPrograms {
#[bits(8)]
pub fsm_n_prog: u8,
}
#[adv_register(base_address = EmbAdvReg::EmbAdvPg0, address = EmbAdvReg::FsmStartAddL, access_type = "Lis2dux12<B, T, MainBank>")]
#[cfg_attr(feature = "bit_order_msb", bitfield(u16, order = Msb))]
#[cfg_attr(not(feature = "bit_order_msb"), bitfield(u16, order = Lsb))]
pub struct FsmStartAdd {
#[bits(16)]
pub fsm_start: u16,
}
#[adv_register(base_address = EmbAdvReg::EmbAdvPg0, address = EmbAdvReg::PedoCmdReg, access_type = "Lis2dux12<B, T, MainBank>")]
#[cfg_attr(feature = "bit_order_msb", bitfield(u8, order = Msb))]
#[cfg_attr(not(feature = "bit_order_msb"), bitfield(u8, order = Lsb))]
pub struct PedoCmdReg {
#[bits(2, access = RO)]
not_used0: u8,
#[bits(1)]
pub fp_rejection_en: u8,
#[bits(1)]
pub carry_count_en: u8,
#[bits(4, access = RO, default = 0)]
not_used1: u8,
}
#[adv_register(base_address = EmbAdvReg::EmbAdvPg0, address = EmbAdvReg::PedoDebStepsConf, access_type = "Lis2dux12<B, T, MainBank>")]
#[cfg_attr(feature = "bit_order_msb", bitfield(u8, order = Msb))]
#[cfg_attr(not(feature = "bit_order_msb"), bitfield(u8, order = Lsb))]
pub struct PedoDebStepsConf {
#[bits(8, default = 0b00001010)]
pub deb_step: u8,
}
#[adv_register(base_address = EmbAdvReg::EmbAdvPg0, address = EmbAdvReg::PedoScDeltatL, access_type = "Lis2dux12<B, T, MainBank>")]
#[cfg_attr(feature = "bit_order_msb", bitfield(u16, order = Msb))]
#[cfg_attr(not(feature = "bit_order_msb"), bitfield(u16, order = Lsb))]
pub struct PedoScDeltat {
#[bits(16)]
pub pd_sc: u16,
}
#[adv_register(base_address = EmbAdvReg::EmbAdvPg0, address = EmbAdvReg::TSensitivityL, access_type = "Lis2dux12<B, T, MainBank>")]
#[cfg_attr(feature = "bit_order_msb", bitfield(u16, order = Msb))]
#[cfg_attr(not(feature = "bit_order_msb"), bitfield(u16, order = Lsb))]
pub struct TSensitivity {
#[bits(16)]
pub t_ah_qvar_s: u16,
}
#[adv_register(base_address = EmbAdvReg::EmbAdvPg0, address = EmbAdvReg::SmartPowerCtrl, access_type = "Lis2dux12<B, T, MainBank>")]
#[cfg_attr(feature = "bit_order_msb", bitfield(u8, order = Msb))]
#[cfg_attr(not(feature = "bit_order_msb"), bitfield(u8, order = Lsb))]
pub struct SmartPowerCtrl {
#[bits(4)]
pub smart_power_ctrl_win: u8,
#[bits(4)]
pub smart_power_ctrl_dur: u8,
}
#[derive(Default, Clone, Debug)]
pub struct SmartPowerCfg {
pub enable: u8,
pub window: u8,
pub duration: u8,
}