#![allow(clippy::identity_op)]
#![allow(missing_docs)]
use bilge::prelude::*;
use device_register::{RERegister, RORegister, RWRegister};
pub struct Address(pub u8);
#[bitsize(16)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, DebugBits, RORegister, FromBits)]
#[register(ty = "Address", addr = "Address(0x00)")]
pub struct Temperature(pub u16);
#[bitsize(1)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, Debug, FromBits)]
pub enum AlertPinSelect {
Alert = 0,
DataReady = 1,
}
#[bitsize(1)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, Debug, FromBits)]
pub enum Polarity {
ActiveLow = 0,
ActiveHigh = 1,
}
#[bitsize(1)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, Debug, FromBits)]
pub enum TriggerMode {
Alert = 0,
Thermal = 1,
}
#[bitsize(2)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, Debug, FromBits)]
pub enum Average {
NoAverage = 0,
Avg8 = 1,
Avg32 = 2,
Avg64 = 3,
}
impl Default for Average {
fn default() -> Self {
Self::NoAverage
}
}
#[bitsize(3)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, Debug, FromBits)]
pub enum Conversion {
Ms15_5 = 0,
Ms125 = 1,
Ms250 = 2,
Ms500 = 3,
Ms1000 = 4,
Ms4000 = 5,
Ms8000 = 6,
Ms16000 = 7,
}
impl Default for Conversion {
fn default() -> Self {
Self::Ms15_5
}
}
#[bitsize(2)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, Debug, TryFromBits)]
pub enum ConversionMode {
Continuous = 0b0,
Shutdown = 0b01,
OneShot = 0b11,
}
#[bitsize(16)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, DebugBits, RERegister, TryFromBits)]
#[register(ty = "Address", addr = "Address(0x01)")]
pub struct Configuration {
reserved: u1,
pub reset: bool,
pub dr_alert: AlertPinSelect,
pub polarity: Polarity,
pub trigger_mode: TriggerMode,
pub average: Average,
pub conversion: Conversion,
pub mode: ConversionMode,
pub eeprom_busy: bool,
pub data_ready: bool,
pub low_alert: bool,
pub high_alert: bool,
}
#[bitsize(16)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, DebugBits, RWRegister, FromBits)]
#[register(ty = "Address", addr = "Address(0x02)")]
pub struct HighLimit(pub u16);
#[bitsize(16)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, DebugBits, RWRegister, FromBits)]
#[register(ty = "Address", addr = "Address(0x03)")]
pub struct LowLimit(pub u16);
#[bitsize(16)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, DebugBits, RERegister, FromBits)]
#[register(ty = "Address", addr = "Address(0x04)")]
pub struct EEPROM {
reserved: u14,
pub busy: bool,
pub unlock: bool,
}
#[bitsize(16)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, DebugBits, RWRegister, FromBits)]
#[register(ty = "Address", addr = "Address(0x05)")]
pub struct UEEPROM1(pub u16);
#[bitsize(16)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, DebugBits, RWRegister, FromBits)]
#[register(ty = "Address", addr = "Address(0x06)")]
pub struct UEEPROM2(pub u16);
#[bitsize(16)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, DebugBits, RWRegister, FromBits)]
#[register(ty = "Address", addr = "Address(0x07)")]
pub struct UEEPROM3(pub u16);
#[bitsize(16)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, DebugBits, RWRegister, FromBits)]
#[register(ty = "Address", addr = "Address(0x08)")]
pub struct TemperatureOffset(pub u16);
#[bitsize(16)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Copy, Clone, PartialEq, Eq, DebugBits, RORegister, FromBits)]
#[register(ty = "Address", addr = "Address(0x0F)")]
pub struct DeviceID {
pub device_id: u12,
pub revision: u4,
}