mirror of
https://github.com/embassy-rs/embassy.git
synced 2024-11-22 14:53:03 +00:00
extras: add impl_unborrow macro
This commit is contained in:
parent
2c248dab56
commit
a338841797
@ -84,3 +84,24 @@ macro_rules! unborrow {
|
||||
)*
|
||||
}
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! impl_unborrow {
|
||||
($type:ident) => {
|
||||
impl PeripheralBorrow for $type {
|
||||
type Target = $type;
|
||||
#[inline]
|
||||
unsafe fn unborrow(self) -> Self::Target {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> PeripheralBorrow for &'a mut $type {
|
||||
type Target = $type;
|
||||
#[inline]
|
||||
unsafe fn unborrow(self) -> Self::Target {
|
||||
unsafe { ::core::ptr::read(self) }
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ use core::hint::unreachable_unchecked;
|
||||
use core::marker::PhantomData;
|
||||
|
||||
use embassy::util::PeripheralBorrow;
|
||||
use embassy_extras::unborrow;
|
||||
use embassy_extras::{impl_unborrow, unborrow};
|
||||
use embedded_hal::digital::v2::{InputPin, OutputPin, StatefulOutputPin};
|
||||
use gpio::pin_cnf::DRIVE_A;
|
||||
|
||||
@ -305,6 +305,7 @@ impl AnyPin {
|
||||
}
|
||||
}
|
||||
|
||||
impl_unborrow!(AnyPin);
|
||||
impl Pin for AnyPin {}
|
||||
impl sealed::Pin for AnyPin {
|
||||
#[inline]
|
||||
@ -313,24 +314,6 @@ impl sealed::Pin for AnyPin {
|
||||
}
|
||||
}
|
||||
|
||||
impl PeripheralBorrow for AnyPin {
|
||||
type Target = AnyPin;
|
||||
#[inline]
|
||||
unsafe fn unborrow(self) -> Self::Target {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> PeripheralBorrow for &'a mut AnyPin {
|
||||
type Target = AnyPin;
|
||||
#[inline]
|
||||
unsafe fn unborrow(self) -> Self::Target {
|
||||
AnyPin {
|
||||
pin_port: self.pin_port,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ====================
|
||||
|
||||
pub trait OptionalPin: sealed::OptionalPin + Sized {
|
||||
@ -379,6 +362,7 @@ impl sealed::Pin for DummyPin {
|
||||
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
pub struct NoPin;
|
||||
impl_unborrow!(NoPin);
|
||||
impl sealed::OptionalPin for NoPin {}
|
||||
impl OptionalPin for NoPin {
|
||||
type Pin = DummyPin;
|
||||
@ -394,14 +378,6 @@ impl OptionalPin for NoPin {
|
||||
}
|
||||
}
|
||||
|
||||
impl PeripheralBorrow for NoPin {
|
||||
type Target = NoPin;
|
||||
#[inline]
|
||||
unsafe fn unborrow(self) -> Self::Target {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
// ====================
|
||||
|
||||
macro_rules! make_impl {
|
||||
|
Loading…
Reference in New Issue
Block a user