bme280_multibus/
i2c1.rs

1pub use super::Address;
2
3/// BME280 bus.
4#[derive(Debug)]
5pub struct Bme280Bus<I2C> {
6    address: u8,
7    bus: I2C,
8}
9
10impl<I2C, E> Bme280Bus<I2C>
11where
12    I2C: eh1::i2c::I2c<Error = E>,
13{
14    /// Creates a new `Bme280Bus` from a I2C peripheral, and an I2C
15    /// device address.
16    ///
17    /// # Example
18    ///
19    /// ```
20    /// # let i2c = ehm::eh1::i2c::Mock::new(&[]);
21    /// use bme280_multibus::i2c1::{Address, Bme280Bus};
22    ///
23    /// let mut bme: Bme280Bus<_> = Bme280Bus::new(i2c, Address::SdoGnd);
24    /// # let mut i2c = bme.free();
25    /// # i2c.done();
26    /// ```
27    #[inline]
28    pub fn new(bus: I2C, address: Address) -> Self {
29        Self {
30            bus,
31            address: address as u8,
32        }
33    }
34
35    /// Free the I2C bus from the BME280.
36    ///
37    /// # Example
38    ///
39    /// ```
40    /// # let i2c = ehm::eh1::i2c::Mock::new(&[]);
41    /// use bme280_multibus::i2c1::{Address, Bme280Bus};
42    ///
43    /// let mut bme: Bme280Bus<_> = Bme280Bus::new(i2c, Address::SdoGnd);
44    /// let mut i2c = bme.free();
45    /// # i2c.done();
46    /// ```
47    #[inline]
48    pub fn free(self) -> I2C {
49        self.bus
50    }
51}
52
53impl<I2C, E> crate::Bme280Bus for Bme280Bus<I2C>
54where
55    I2C: eh1::i2c::I2c<Error = E>,
56{
57    type Error = E;
58
59    fn read_regs(&mut self, reg: u8, buf: &mut [u8]) -> Result<(), Self::Error> {
60        self.bus.write_read(self.address, &[reg], buf)
61    }
62
63    fn write_reg(&mut self, reg: u8, data: u8) -> Result<(), Self::Error> {
64        self.bus.write(self.address, &[reg, data])
65    }
66}