#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Capability {
Wifi,
Rmt,
I2s,
AudioGpio,
ButtonGpio,
HighGpioPins,
ExtendedGpio,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct CapabilitySet {
bits: u32,
}
impl Capability {
const fn bit(self) -> u32 {
match self {
Capability::Wifi => 1 << 0,
Capability::Rmt => 1 << 1,
Capability::I2s => 1 << 2,
Capability::AudioGpio => 1 << 3,
Capability::ButtonGpio => 1 << 4,
Capability::HighGpioPins => 1 << 5,
Capability::ExtendedGpio => 1 << 6,
}
}
}
impl CapabilitySet {
pub const EMPTY: Self = Self { bits: 0 };
#[must_use]
pub const fn with(mut self, capability: Capability) -> Self {
self.bits |= capability.bit();
self
}
#[must_use]
pub const fn contains(self, capability: Capability) -> bool {
(self.bits & capability.bit()) != 0
}
}
pub trait PlatformCapabilities {
const CAPABILITIES: CapabilitySet;
}