pub struct RefCellDevice<'a, T> { /* private fields */ }
Expand description
RefCell
-based shared bus I2c
implementation.
Sharing is implemented with a RefCell
. This means it has low overhead, but RefCellDevice
instances are not Send
,
so it only allows sharing within a single thread (interrupt priority level). If you need to share a bus across several
threads, use CriticalSectionDevice
instead.
§Examples
Assuming there is a pressure sensor with address 0x42
on the same bus as a temperature sensor
with address 0x20
; RefCellDevice
can be used to give access to both of these sensors
from a single i2c
instance.
use embedded_hal_bus::i2c;
use core::cell::RefCell;
let i2c = hal.i2c();
let i2c_ref_cell = RefCell::new(i2c);
let mut temperature_sensor = TemperatureSensor::new(
i2c::RefCellDevice::new(&i2c_ref_cell),
0x20,
);
let mut pressure_sensor = PressureSensor::new(
i2c::RefCellDevice::new(&i2c_ref_cell),
0x42,
);
Implementations§
Trait Implementations§
source§impl<'a, T> ErrorType for RefCellDevice<'a, T>where
T: I2c,
impl<'a, T> ErrorType for RefCellDevice<'a, T>where
T: I2c,
source§impl<'a, T> I2c for RefCellDevice<'a, T>where
T: I2c,
impl<'a, T> I2c for RefCellDevice<'a, T>where
T: I2c,
source§fn write(&mut self, address: u8, write: &[u8]) -> Result<(), Self::Error>
fn write(&mut self, address: u8, write: &[u8]) -> Result<(), Self::Error>
Writes bytes to slave with address
address
. Read moreAuto Trait Implementations§
impl<'a, T> Freeze for RefCellDevice<'a, T>
impl<'a, T> !RefUnwindSafe for RefCellDevice<'a, T>
impl<'a, T> !Send for RefCellDevice<'a, T>
impl<'a, T> !Sync for RefCellDevice<'a, T>
impl<'a, T> Unpin for RefCellDevice<'a, T>
impl<'a, T> !UnwindSafe for RefCellDevice<'a, T>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more