From 00e5f3035219656823ec7a2451f4ebae6802e1b8 Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Sun, 28 Mar 2021 22:41:07 +0200 Subject: [PATCH] nrf/ppi: add AnyConfigurableChannel --- embassy-nrf/src/ppi.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/embassy-nrf/src/ppi.rs b/embassy-nrf/src/ppi.rs index 0129a2a4..6487267d 100644 --- a/embassy-nrf/src/ppi.rs +++ b/embassy-nrf/src/ppi.rs @@ -123,7 +123,13 @@ pub trait Channel: sealed::Channel + Sized { } } } -pub trait ConfigurableChannel: Channel + sealed::ConfigurableChannel {} +pub trait ConfigurableChannel: Channel + sealed::ConfigurableChannel { + fn degrade_configurable(self) -> AnyConfigurableChannel { + AnyConfigurableChannel { + number: self.number() as u8, + } + } +} pub trait Group: sealed::Group + Sized { fn number(&self) -> usize; @@ -148,6 +154,19 @@ impl Channel for AnyChannel { } } +pub struct AnyConfigurableChannel { + number: u8, +} +impl_unborrow!(AnyConfigurableChannel); +impl sealed::Channel for AnyConfigurableChannel {} +impl sealed::ConfigurableChannel for AnyConfigurableChannel {} +impl ConfigurableChannel for AnyConfigurableChannel {} +impl Channel for AnyConfigurableChannel { + fn number(&self) -> usize { + self.number as usize + } +} + macro_rules! impl_channel { ($type:ident, $number:expr, configurable) => { impl_channel!($type, $number);