Trait shared_bus::mutex::BusMutex [−][src]
pub trait BusMutex<T> {
fn create(v: T) -> Self;
fn lock<R, F: FnOnce(&T) -> R>(&self, f: F) -> R;
}An abstraction over a mutex lock.
Any type that can implement this trait can be used as a mutex for sharing a bus.
If the std feature is enabled, BusMutex is implemented for std::sync::Mutex.
If the cortexm feature is enabled, BusMutex is implemented for [cortex_m::interrupt::Mutex].
If there is no feature available for your Mutex type, you have to write one yourself. It should
look something like this (for cortex_m as an example):
extern crate cortex_m; // You need a newtype because you can't implement foreign traits on // foreign types. struct MyMutex<T>(cortex_m::interrupt::Mutex<T>); impl<T> shared_bus::BusMutex<T> for MyMutex<T> { fn create(v: T) -> MyMutex<T> { MyMutex(cortex_m::interrupt::Mutex::new(v)) } fn lock<R, F: FnOnce(&T) -> R>(&self, f: F) -> R { cortex_m::interrupt::free(|cs| { let v = self.0.borrow(cs); f(v) }) } } type MyBusManager<L, P> = shared_bus::BusManager<MyMutex<L>, P>;
Required Methods
fn create(v: T) -> Self
Create a new instance of this mutex type containing the value v.
fn lock<R, F: FnOnce(&T) -> R>(&self, f: F) -> R
Lock the mutex for the duration of the closure f.
Implementations on Foreign Types
impl<T> BusMutex<T> for Mutex<T>[src]
impl<T> BusMutex<T> for Mutex<T>impl<T> BusMutex<T> for Mutex<T>[src]
impl<T> BusMutex<T> for Mutex<T>