bme280_multibus/i2c0.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: eh0::blocking::i2c::Write<Error = E> + eh0::blocking::i2c::WriteRead<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::eh0::i2c::Mock::new(&[]);
21 /// use bme280_multibus::i2c0::{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::eh0::i2c::Mock::new(&[]);
41 /// use bme280_multibus::i2c0::{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: eh0::blocking::i2c::Write<Error = E> + eh0::blocking::i2c::WriteRead<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}