#![cfg_attr(not(test), no_std)]
#[allow(dead_code)]
mod constants;
pub mod i2c;
#[derive(Debug, Copy, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum Oversampling {
Oversampling1X,
Oversampling2X,
Oversampling4X,
Oversampling8X,
Oversampling16x,
Oversampling32x,
Oversampling64x,
Oversampling128x,
}
impl Default for Oversampling {
fn default() -> Self {
Self::Oversampling1X
}
}
impl From<Oversampling> for u8 {
fn from(oversampling: Oversampling) -> u8 {
match oversampling {
Oversampling::Oversampling1X => constants::BMP5_OSR_1X,
Oversampling::Oversampling2X => constants::BMP5_OSR_2X,
Oversampling::Oversampling4X => constants::BMP5_OSR_4X,
Oversampling::Oversampling8X => constants::BMP5_OSR_8X,
Oversampling::Oversampling16x => constants::BMP5_OSR_16X,
Oversampling::Oversampling32x => constants::BMP5_OSR_32X,
Oversampling::Oversampling64x => constants::BMP5_OSR_64X,
Oversampling::Oversampling128x => constants::BMP5_OSR_128X,
}
}
}
#[derive(Debug, Copy, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum IIRFilter {
Bypass,
Coeff1,
Coeff3,
Coeff7,
Coeff15,
Coeff31,
Coeff63,
Coeff127,
}
impl From<IIRFilter> for u8 {
fn from(coeff: IIRFilter) -> u8 {
match coeff {
IIRFilter::Bypass => constants::BMP5_IIR_FILTER_BYPASS,
IIRFilter::Coeff1 => constants::BMP5_IIR_FILTER_COEFF_1,
IIRFilter::Coeff3 => constants::BMP5_IIR_FILTER_COEFF_3,
IIRFilter::Coeff7 => constants::BMP5_IIR_FILTER_COEFF_7,
IIRFilter::Coeff15 => constants::BMP5_IIR_FILTER_COEFF_15,
IIRFilter::Coeff31 => constants::BMP5_IIR_FILTER_COEFF_31,
IIRFilter::Coeff63 => constants::BMP5_IIR_FILTER_COEFF_63,
IIRFilter::Coeff127 => constants::BMP5_IIR_FILTER_COEFF_127,
}
}
}
impl Default for IIRFilter {
fn default() -> Self {
Self::Bypass
}
}
#[derive(Debug, Copy, Clone)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub enum OutputDataRate {
OutputDataRate0_125Hz,
OutputDataRate0_250Hz,
OutputDataRate0_5Hz,
OutputDataRate1Hz,
OutputDataRate2Hz,
OutputDataRate3Hz,
OutputDataRate4Hz,
OutputDataRate5Hz,
OutputDataRate10Hz,
OutputDataRate15Hz,
OutputDataRate20Hz,
OutputDataRate25Hz,
OutputDataRate30Hz,
OutputDataRate35Hz,
OutputDataRate40Hz,
OutputDataRate45Hz,
OutputDataRate50Hz,
OutputDataRate60Hz,
OutputDataRate70Hz,
OutputDataRate80Hz,
OutputDataRate89_6Hz,
OutputDataRate100_2Hz,
OutputDataRate110_1Hz,
OutputDataRate120Hz,
OutputDataRate129_8Hz,
OutputDataRate140Hz,
OutputDataRate149_3Hz,
OutputDataRate160Hz,
OutputDataRate179_2Hz,
OutputDataRate199_1Hz,
OutputDataRate218_5Hz,
OutputDataRate240Hz,
}
impl OutputDataRate {
pub fn period_us(self) -> u32 {
match self {
OutputDataRate::OutputDataRate0_125Hz => 8_000_000,
OutputDataRate::OutputDataRate0_250Hz => 4_000_000,
OutputDataRate::OutputDataRate0_5Hz => 2_000_000,
OutputDataRate::OutputDataRate1Hz => 1_000_000,
OutputDataRate::OutputDataRate2Hz => 500_000,
OutputDataRate::OutputDataRate3Hz => 333_333,
OutputDataRate::OutputDataRate4Hz => 250_000,
OutputDataRate::OutputDataRate5Hz => 200_000,
OutputDataRate::OutputDataRate10Hz => 100_000,
OutputDataRate::OutputDataRate15Hz => 66_666,
OutputDataRate::OutputDataRate20Hz => 50_000,
OutputDataRate::OutputDataRate25Hz => 40_000,
OutputDataRate::OutputDataRate30Hz => 33_333,
OutputDataRate::OutputDataRate35Hz => 28_571,
OutputDataRate::OutputDataRate40Hz => 25_000,
OutputDataRate::OutputDataRate45Hz => 22_222,
OutputDataRate::OutputDataRate50Hz => 20_000,
OutputDataRate::OutputDataRate60Hz => 16_666,
OutputDataRate::OutputDataRate70Hz => 14_286,
OutputDataRate::OutputDataRate80Hz => 12_500,
OutputDataRate::OutputDataRate89_6Hz => 11_161,
OutputDataRate::OutputDataRate100_2Hz => 9_980,
OutputDataRate::OutputDataRate110_1Hz => 9_083,
OutputDataRate::OutputDataRate120Hz => 8_333,
OutputDataRate::OutputDataRate129_8Hz => 7_704,
OutputDataRate::OutputDataRate140Hz => 7_142,
OutputDataRate::OutputDataRate149_3Hz => 6_698,
OutputDataRate::OutputDataRate160Hz => 6_250,
OutputDataRate::OutputDataRate179_2Hz => 5_580,
OutputDataRate::OutputDataRate199_1Hz => 5_023,
OutputDataRate::OutputDataRate218_5Hz => 4_577,
OutputDataRate::OutputDataRate240Hz => 4_167,
}
}
}
impl From<OutputDataRate> for u8 {
fn from(output_data_rate: OutputDataRate) -> u8 {
match output_data_rate {
OutputDataRate::OutputDataRate0_125Hz => constants::BMP5_ODR_0_125_HZ,
OutputDataRate::OutputDataRate0_250Hz => constants::BMP5_ODR_0_250_HZ,
OutputDataRate::OutputDataRate0_5Hz => constants::BMP5_ODR_0_5_HZ,
OutputDataRate::OutputDataRate1Hz => constants::BMP5_ODR_01_HZ,
OutputDataRate::OutputDataRate2Hz => constants::BMP5_ODR_02_HZ,
OutputDataRate::OutputDataRate3Hz => constants::BMP5_ODR_03_HZ,
OutputDataRate::OutputDataRate4Hz => constants::BMP5_ODR_04_HZ,
OutputDataRate::OutputDataRate5Hz => constants::BMP5_ODR_05_HZ,
OutputDataRate::OutputDataRate10Hz => constants::BMP5_ODR_10_HZ,
OutputDataRate::OutputDataRate15Hz => constants::BMP5_ODR_15_HZ,
OutputDataRate::OutputDataRate20Hz => constants::BMP5_ODR_20_HZ,
OutputDataRate::OutputDataRate25Hz => constants::BMP5_ODR_25_HZ,
OutputDataRate::OutputDataRate30Hz => constants::BMP5_ODR_30_HZ,
OutputDataRate::OutputDataRate35Hz => constants::BMP5_ODR_35_HZ,
OutputDataRate::OutputDataRate40Hz => constants::BMP5_ODR_40_HZ,
OutputDataRate::OutputDataRate45Hz => constants::BMP5_ODR_45_HZ,
OutputDataRate::OutputDataRate50Hz => constants::BMP5_ODR_50_HZ,
OutputDataRate::OutputDataRate60Hz => constants::BMP5_ODR_60_HZ,
OutputDataRate::OutputDataRate70Hz => constants::BMP5_ODR_70_HZ,
OutputDataRate::OutputDataRate80Hz => constants::BMP5_ODR_80_HZ,
OutputDataRate::OutputDataRate89_6Hz => constants::BMP5_ODR_89_6_HZ,
OutputDataRate::OutputDataRate100_2Hz => constants::BMP5_ODR_100_2_HZ,
OutputDataRate::OutputDataRate110_1Hz => constants::BMP5_ODR_110_1_HZ,
OutputDataRate::OutputDataRate120Hz => constants::BMP5_ODR_120_HZ,
OutputDataRate::OutputDataRate129_8Hz => constants::BMP5_ODR_129_8_HZ,
OutputDataRate::OutputDataRate140Hz => constants::BMP5_ODR_140_HZ,
OutputDataRate::OutputDataRate149_3Hz => constants::BMP5_ODR_149_3_HZ,
OutputDataRate::OutputDataRate160Hz => constants::BMP5_ODR_160_HZ,
OutputDataRate::OutputDataRate179_2Hz => constants::BMP5_ODR_179_2_HZ,
OutputDataRate::OutputDataRate199_1Hz => constants::BMP5_ODR_199_1_HZ,
OutputDataRate::OutputDataRate218_5Hz => constants::BMP5_ODR_218_5_HZ,
OutputDataRate::OutputDataRate240Hz => constants::BMP5_ODR_240_HZ,
}
}
}
impl Default for OutputDataRate {
fn default() -> Self {
Self::OutputDataRate25Hz
}
}
#[derive(Debug, Copy, Clone, Default)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct Config {
pub temperature_oversampling: Oversampling,
pub temperature_iir_filter: IIRFilter,
pub pressure_oversampling: Oversampling,
pub pressure_iir_filter: IIRFilter,
pub output_data_rate: OutputDataRate,
}
#[derive(Debug, Clone, Copy)]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
pub struct Measurement {
pub temperature: f32,
pub pressure: f32,
}