pub const DEFAULT_I2C_ADDRESS: u8 = 0x74;
pub const ALT_I2C_ADDRESS: u8 = 0x75;
pub mod addr {
pub const REF0: u8 = 0x00;
pub const REF1: u8 = 0x01;
pub const IOUT_LIMIT: u8 = 0x02;
pub const VOUT_SR: u8 = 0x03;
pub const VOUT_FS: u8 = 0x04;
pub const CDC: u8 = 0x05;
pub const MODE: u8 = 0x06;
pub const STATUS: u8 = 0x07;
}
pub const VOUT_LSB_MV: u16 = 20;
pub const VOUT_MIN_MV: u16 = 800;
pub const VOUT_MAX_MV: u16 = VOUT_MIN_MV + (1023 * VOUT_LSB_MV);
pub const ILIM_LSB_MA: u16 = 50;
pub const ILIM_MAX_MA: u16 = 6_350;
pub const FSW_MIN_KHZ: u16 = 200;
pub const FSW_MAX_KHZ: u16 = 2_200;
bitflags::bitflags! {
pub struct IoutLimitBits: u8 {
const EN = 1 << 7;
const SETTING_LSB = 1 << 0;
}
pub struct ModeBits: u8 {
const OE = 1 << 7;
const FSWDBL = 1 << 6;
const HICCUP = 1 << 5;
const DISCHG = 1 << 4;
const VCC_EXT = 1 << 3;
const I2CADD = 1 << 2;
const PFM = 1 << 1;
const MODE = 1 << 0;
}
pub struct StatusBits: u8 {
const SCP = 1 << 7;
const OCP = 1 << 6;
const OVP = 1 << 5;
const STATUS0 = 1 << 0;
const STATUS1 = 1 << 1;
}
pub struct CdcBits: u8 {
const SC_MASK = 1 << 7;
const OCP_MASK = 1 << 6;
const OVP_MASK = 1 << 5;
const CDC_OPT = 1 << 3;
const CDC0 = 1 << 0;
const CDC1 = 1 << 1;
const CDC2 = 1 << 2;
}
pub struct VoutFsBits: u8 {
const FB_EXT = 1 << 7;
const INTFB0 = 1 << 0;
const INTFB1 = 1 << 1;
}
pub struct VoutSrBits: u8 {
const OCP_DELAY0 = 1 << 4;
const OCP_DELAY1 = 1 << 5;
const SR0 = 1 << 0;
const SR1 = 1 << 1;
}
}
pub fn vout_mv_to_code(mv: u16) -> u16 {
let mv = mv.clamp(VOUT_MIN_MV, VOUT_MAX_MV);
let code = mv.saturating_sub(VOUT_MIN_MV) / VOUT_LSB_MV;
code.min(1023)
}
pub fn code_to_vout_mv(code: u16) -> u16 {
let code = code.min(1023);
VOUT_MIN_MV + code * VOUT_LSB_MV
}
pub fn ilim_ma_to_code(ma: u16) -> u8 {
let ma = ma.min(ILIM_MAX_MA);
(ma / ILIM_LSB_MA).min(ILIM_MAX_MA / ILIM_LSB_MA) as u8
}
pub fn code_to_ilim_ma(code: u8) -> u16 {
let code = (code as u16).min(ILIM_MAX_MA / ILIM_LSB_MA);
code * ILIM_LSB_MA
}
pub fn decode_status_mode(bits: &StatusBits) -> u8 {
let raw = bits.bits() & (StatusBits::STATUS0 | StatusBits::STATUS1).bits();
raw & 0b11
}