bme280_rs/
sample.rs

1// Copyright Claudio Mattera 2022-2024.
2//
3// Distributed under the MIT License or the Apache 2.0 License at your option.
4// See the accompanying files License-MIT.txt and License-Apache-2.0.txt, or
5// online at
6// https://opensource.org/licenses/MIT
7// https://opensource.org/licenses/Apache-2.0
8
9//! Data types and functions for BME280 sensor samples
10
11#[cfg(feature = "uom")]
12use uom::si::f32::Pressure as UomPressure;
13#[cfg(feature = "uom")]
14use uom::si::f32::Ratio as UomHumidity;
15#[cfg(feature = "uom")]
16use uom::si::f32::ThermodynamicTemperature as UomTemperature;
17#[cfg(feature = "uom")]
18use uom::si::pressure::pascal;
19#[cfg(feature = "uom")]
20use uom::si::ratio::percent;
21#[cfg(feature = "uom")]
22use uom::si::thermodynamic_temperature::degree_celsius;
23
24#[cfg(feature = "uom")]
25/// Type for temperature measurements
26pub type Temperature = UomTemperature;
27
28#[cfg(feature = "uom")]
29/// Type for pressure measurements
30pub type Pressure = UomPressure;
31
32#[cfg(feature = "uom")]
33/// Type for humidity measurements
34pub type Humidity = UomHumidity;
35
36#[cfg(feature = "uom")]
37/// Convert a raw value in Celsius to a temperature
38pub(crate) fn temperature_from_celsius(raw: f32) -> Temperature {
39    Temperature::new::<degree_celsius>(raw)
40}
41
42#[cfg(feature = "uom")]
43/// Convert a raw value in Pascal to a pressure
44pub(crate) fn pressure_from_pascal(raw: f32) -> Pressure {
45    Pressure::new::<pascal>(raw)
46}
47
48#[cfg(feature = "uom")]
49/// Convert a raw value to a humidity
50pub(crate) fn humidity_from_number(raw: f32) -> Humidity {
51    Humidity::new::<percent>(raw)
52}
53
54#[cfg(not(feature = "uom"))]
55/// Type for pressure measurements
56pub type Pressure = f32;
57
58#[cfg(not(feature = "uom"))]
59/// Type for temperature measurements
60pub type Temperature = f32;
61
62#[cfg(not(feature = "uom"))]
63/// Type for temperature measurements
64pub type Humidity = f32;
65
66#[cfg(not(feature = "uom"))]
67/// Convert a raw value in Celsius to a temperature
68pub(crate) fn temperature_from_celsius(raw: f32) -> Temperature {
69    raw
70}
71
72#[cfg(not(feature = "uom"))]
73/// Convert a raw value in Pascal to a pressure
74pub(crate) fn pressure_from_pascal(raw: f32) -> Pressure {
75    raw
76}
77
78#[cfg(not(feature = "uom"))]
79/// Convert a raw value to a humidity
80pub(crate) fn humidity_from_number(raw: f32) -> Humidity {
81    raw
82}
83
84/// A full sample: temperature, pressure and humidity
85///
86/// Disabled measures are `None`.
87#[derive(Debug, Default)]
88pub struct Sample {
89    /// Temperature reading
90    pub temperature: Option<Temperature>,
91
92    /// Pressure reading
93    pub pressure: Option<Pressure>,
94
95    /// Humidity reading
96    pub humidity: Option<Humidity>,
97}
98
99/// A full raw sample before compensation: temperature, pressure and humidity
100///
101/// Disabled measures are `None`.
102#[derive(Debug, Default)]
103#[allow(clippy::struct_field_names)]
104pub(crate) struct RawSample {
105    /// Temperature raw reading
106    pub(crate) adc_t: Option<u32>,
107
108    /// Pressure raw reading
109    pub(crate) adc_p: Option<u32>,
110
111    /// Humidity raw reading
112    pub(crate) adc_h: Option<u16>,
113}