@@ -12,6 +12,63 @@ pub struct RefCellDevice<'a, T> {
12
12
13
13
impl < ' a , T > RefCellDevice < ' a , T > {
14
14
/// Create a new `RefCellDevice`
15
+ ///
16
+ /// # Examples
17
+ ///
18
+ /// Assuming there is a pressure sensor with address `0x42` on the same bus as a temperature sensor
19
+ /// with address `0x20`; [`RefCellDevice`] can be used to give access to both of these sensors
20
+ /// from a single `i2c` instance.
21
+ ///
22
+ /// ```
23
+ /// use embedded_hal_bus::i2c;
24
+ /// use core::cell::RefCell;
25
+ /// # use embedded_hal::i2c::{self as hali2c, SevenBitAddress, TenBitAddress, I2c, Operation, ErrorKind};
26
+ /// # pub struct Sensor<I2C> {
27
+ /// # i2c: I2C,
28
+ /// # address: u8,
29
+ /// # }
30
+ /// # impl<I2C: I2c> Sensor<I2C> {
31
+ /// # pub const fn new(i2c: I2C, address: u8) -> Self {
32
+ /// # Self { i2c, address }
33
+ /// # }
34
+ /// # }
35
+ /// # type PressureSensor = Sensor;
36
+ /// # type TemperatureSensor = Sensor;
37
+ /// # pub struct I2c0;
38
+ /// # #[derive(Debug, Copy, Clone, Eq, PartialEq)]
39
+ /// # pub enum Error { }
40
+ /// # impl hali2c::Error for Error {
41
+ /// # fn kind(&self) -> hali2c::ErrorKind {
42
+ /// # ErrorKind::Other
43
+ /// # }
44
+ /// # }
45
+ /// # impl hali2c::ErrorType for I2c0 {
46
+ /// # type Error = Error;
47
+ /// # }
48
+ /// # impl I2c<SevenBitAddress> for I2c0 {
49
+ /// # fn transaction(&mut self, address: u8, operations: &mut [Operation<'_>]) -> Result<(), Self::Error> {
50
+ /// # Ok(())
51
+ /// # }
52
+ /// # }
53
+ /// # struct Hal;
54
+ /// # impl Hal {
55
+ /// # fn i2c(&self) -> I2c0 {
56
+ /// # I2c0
57
+ /// # }
58
+ /// # }
59
+ /// # let hal = Hal;
60
+ ///
61
+ /// let i2c = hal.i2c();
62
+ /// let i2c_ref_cell = RefCell::new(i2c);
63
+ /// let mut temperature_sensor = TemperatureSensor::new(
64
+ /// i2c::RefCellDevice::new(&i2c_ref_cell),
65
+ /// 0x20,
66
+ /// );
67
+ /// let mut pressure_sensor = PressureSensor::new(
68
+ /// i2c::RefCellDevice::new(&i2c_ref_cell),
69
+ /// 0x42,
70
+ /// );
71
+ /// ```
15
72
pub fn new ( bus : & ' a RefCell < T > ) -> Self {
16
73
Self { bus }
17
74
}
0 commit comments