pub struct DpMaster<'a> { /* private fields */ }
Expand description
The DP master
Currently only implements a subset of DP-V0.
The DP master holds all peripherals that we interact with. To get access, use the
PeripheralHandle
that you get when calling
dp_master.add()
.
When constructing the DP master, you need to pass a storage for peripherals. This can either
be a fixed-size storage (slice or array) or, if alloc
/std
is available, a Vec<>
that will
be dynamically grown to house the peripherals.
The DP master starts in the Stop
state. To communicate with
peripherals, you first need to move it into the Operate
state
using the dp_master.enter_operate()
method.
§Example
use profirust::dp;
let buffer: [dp::PeripheralStorage; 4] = Default::default();
let mut dp_master = dp::DpMaster::new(buffer);
// or with `std`:
// let mut dp_master = dp::DpMaster::new(Vec::new());
// Let's add a peripheral.
let remoteio_address = 7;
let remoteio_options = dp::PeripheralOptions {
// ...
// best generated using `gsdtool`
// ...
..Default::default()
};
let mut buffer_inputs = [0u8; 8];
let mut buffer_outputs = [0u8; 4];
let remoteio = dp_master.add(dp::Peripheral::new(
remoteio_address,
remoteio_options,
&mut buffer_inputs,
&mut buffer_outputs,
));
dp_master.enter_operate();
Implementations§
source§impl<'a> DpMaster<'a>
impl<'a> DpMaster<'a>
pub fn new<S>(storage: S) -> Self
sourcepub fn add(&mut self, peripheral: Peripheral<'a>) -> PeripheralHandle
pub fn add(&mut self, peripheral: Peripheral<'a>) -> PeripheralHandle
Add a peripheral to the set, and return its handle.
§Panics
This function panics if the storage is fixed-size (not a Vec
) and is full.
sourcepub fn get_mut(&mut self, handle: PeripheralHandle) -> &mut Peripheral<'a>
pub fn get_mut(&mut self, handle: PeripheralHandle) -> &mut Peripheral<'a>
Get a peripheral from the set by its handle, as mutable.
§Panics
This function may panic if the handle does not belong to this peripheral set.
pub fn iter_mut( &mut self ) -> impl Iterator<Item = (PeripheralHandle, &mut Peripheral<'a>)>
pub fn iter(&self) -> impl Iterator<Item = (PeripheralHandle, &Peripheral<'a>)>
pub fn operating_state(&self) -> OperatingState
pub fn enter_state(&mut self, state: OperatingState)
sourcepub fn enter_stop(&mut self)
pub fn enter_stop(&mut self)
Enter the Stop
operating state.
This is equivalent to calling .enter_state(OperatingState::Stop)
.
sourcepub fn enter_clear(&mut self)
pub fn enter_clear(&mut self)
Enter the Clear
operating state.
This is equivalent to calling .enter_state(OperatingState::Clear)
.
sourcepub fn enter_operate(&mut self)
pub fn enter_operate(&mut self)
Enter the Operate
operating state.
This is equivalent to calling .enter_state(OperatingState::Operate)
.
Trait Implementations§
source§impl<'a> FdlApplication for DpMaster<'a>
impl<'a> FdlApplication for DpMaster<'a>
type Events = DpEvents
source§fn transmit_telegram(
&mut self,
now: Instant,
fdl: &FdlMaster,
tx: TelegramTx<'_>,
high_prio_only: bool
) -> (Option<TelegramTxResponse>, Self::Events)
fn transmit_telegram( &mut self, now: Instant, fdl: &FdlMaster, tx: TelegramTx<'_>, high_prio_only: bool ) -> (Option<TelegramTxResponse>, Self::Events)
Auto Trait Implementations§
impl<'a> Freeze for DpMaster<'a>
impl<'a> RefUnwindSafe for DpMaster<'a>
impl<'a> Send for DpMaster<'a>
impl<'a> Sync for DpMaster<'a>
impl<'a> Unpin for DpMaster<'a>
impl<'a> !UnwindSafe for DpMaster<'a>
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
source§impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
impl<Choices> CoproductSubsetter<CNil, HNil> for Choices
source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.