1#![no_std]
4#![cfg_attr(nightly, feature(doc_cfg))]
5#![deny(missing_docs)]
6
7pub mod gpio;
8
9#[cfg(any(feature = "storage", feature = "_cyw43"))]
10mod dma;
11
12#[doc(hidden)]
13pub mod peripheral {
14 pub use embassy_rp::Peri;
15}
16#[cfg(context = "rp235xa")]
17mod picotool;
18
19#[cfg(feature = "wifi")]
20mod wifi;
21
22#[cfg(feature = "ble")]
23#[doc(hidden)]
24pub mod ble;
25
26#[cfg(feature = "_cyw43")]
27#[doc(hidden)]
28pub mod cyw43;
29
30#[cfg(feature = "hwrng")]
31#[doc(hidden)]
32pub mod hwrng;
33
34#[cfg(feature = "i2c")]
35pub mod i2c;
36
37#[doc(hidden)]
38pub mod identity;
39
40#[cfg(feature = "spi")]
41pub mod spi;
42
43#[cfg(feature = "uart")]
44pub mod uart;
45
46#[cfg(feature = "storage")]
47#[doc(hidden)]
48pub mod storage;
49
50#[cfg(feature = "usb")]
51#[doc(hidden)]
52pub mod usb;
53
54#[doc(hidden)]
55pub use embassy_rp::OptionalPeripherals;
56
57pub use embassy_rp::peripherals;
58
59#[cfg(feature = "executor-interrupt")]
60#[doc(hidden)]
61pub use embassy_executor::InterruptExecutor as Executor;
62#[cfg(feature = "executor-interrupt")]
63#[doc(hidden)]
64pub use embassy_rp::interrupt;
65
66use embassy_rp::{Peri, PeripheralType};
67
68#[cfg(feature = "executor-interrupt")]
69ariel_os_embassy_common::executor_swi!(SWI_IRQ_1);
70
71#[cfg(feature = "executor-interrupt")]
72#[doc(hidden)]
73pub static EXECUTOR: Executor = Executor::new();
74
75#[doc(hidden)]
76pub trait IntoPeripheral<'a, T: PeripheralType>: private::Sealed {
77 fn into_hal_peripheral(self) -> Peri<'a, T>;
78}
79
80impl<T: PeripheralType> private::Sealed for Peri<'_, T> {}
81
82#[doc(hidden)]
83impl<'a, T: PeripheralType> IntoPeripheral<'a, T> for Peri<'a, T> {
84 fn into_hal_peripheral(self) -> Peri<'a, T> {
85 self
86 }
87}
88
89mod private {
90 pub trait Sealed {}
91}
92
93#[doc(hidden)]
94#[must_use]
95pub fn init() -> OptionalPeripherals {
96 #[cfg(feature = "executor-interrupt")]
97 {
98 use embassy_rp::interrupt::{InterruptExt as _, Priority};
100 SWI.set_priority(Priority::P3);
101 }
102
103 let peripherals = embassy_rp::init(embassy_rp::config::Config::default());
104 OptionalPeripherals::from(peripherals)
105}