diff --git a/Cargo.toml b/Cargo.toml
index d09dfdd9..fac76df1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -24,6 +24,7 @@ lto = "off"
[workspace.dependencies]
embedded-hal = "0.2.3"
+esp-hal-common = { version = "0.8.0" }
esp32c3-hal = { version = "0.8.0" }
esp32c2-hal = { version = "0.6.0" }
esp32c6-hal = { version = "0.1.0" }
diff --git a/README.md b/README.md
index db56f6b2..1a09d0bc 100644
--- a/README.md
+++ b/README.md
@@ -54,7 +54,7 @@ To build these ensure you are in the `examples-esp32XXX` directory matching your
- pressing the boot-button on a dev-board will send a notification if it is subscribed
- this uses a toy level BLE stack - might not work with every BLE central device (tested with Android and Windows Bluetooth LE Explorer)
-`cargo run --example ble --release --features "esp32,ble"`
+`cargo run --example ble --release --features "ble"`
**NOTE:** ESP32-S2 doesn't support bluetooth, for ESP32-C6 bluetooth support isn't implemented yet
diff --git a/esp-wifi/Cargo.toml b/esp-wifi/Cargo.toml
index b51de5ad..bcac61f7 100644
--- a/esp-wifi/Cargo.toml
+++ b/esp-wifi/Cargo.toml
@@ -16,6 +16,7 @@ esp32c3 = { workspace = true, optional = true }
esp32c2 = { workspace = true, optional = true }
esp32c6 = { workspace = true, optional = true }
smoltcp = { workspace = true, optional = true }
+esp-hal-common = { workspace = true, optional = true }
critical-section.workspace = true
atomic-polyfill.workspace = true
log.workspace = true
@@ -37,12 +38,12 @@ embassy-net-driver = { workspace = true, optional = true }
default = [ "utils" ]
# chip features
-esp32c3 = [ "esp32c3-hal", "dep:esp32c3", "esp-wifi-sys/esp32c3" ]
-esp32c2 = [ "esp32c2-hal", "dep:esp32c2", "esp-wifi-sys/esp32c2" ]
-esp32c6 = [ "esp32c6-hal", "dep:esp32c6", "esp-wifi-sys/esp32c6" ]
-esp32 = [ "esp32-hal", "esp-wifi-sys/esp32" ]
-esp32s3 = [ "esp32s3-hal", "esp-wifi-sys/esp32s3" ]
-esp32s2 = [ "esp32s2-hal", "esp-wifi-sys/esp32s2" ]
+esp32c3 = [ "esp32c3-hal", "dep:esp32c3", "esp-wifi-sys/esp32c3", "esp-hal-common/esp32c3" ]
+esp32c2 = [ "esp32c2-hal", "dep:esp32c2", "esp-wifi-sys/esp32c2", "esp-hal-common/esp32c2" ]
+esp32c6 = [ "esp32c6-hal", "dep:esp32c6", "esp-wifi-sys/esp32c6", "esp-hal-common/esp32c6" ]
+esp32 = [ "esp32-hal", "esp-wifi-sys/esp32", "esp-hal-common/esp32" ]
+esp32s3 = [ "esp32s3-hal", "esp-wifi-sys/esp32s3", "esp-hal-common/esp32s3" ]
+esp32s2 = [ "esp32s2-hal", "esp-wifi-sys/esp32s2", "esp-hal-common/esp32s2" ]
# async features
esp32c3-async = [ "esp32c3-hal/embassy", "esp32c3-hal/embassy-time-timg0", "async" ]
diff --git a/esp-wifi/src/ble/controller/mod.rs b/esp-wifi/src/ble/controller/mod.rs
index 7624a940..b2361f38 100644
--- a/esp-wifi/src/ble/controller/mod.rs
+++ b/esp-wifi/src/ble/controller/mod.rs
@@ -2,10 +2,23 @@ use embedded_io::{
blocking::{Read, Write},
Error, Io,
};
+use esp_hal_common::peripheral::{Peripheral, PeripheralRef};
use super::{read_hci, send_hci};
-pub struct BleConnector {}
+pub struct BleConnector<'d> {
+ _device: PeripheralRef<'d, esp_hal_common::radio::Bluetooth>,
+}
+
+impl<'d> BleConnector<'d> {
+ pub fn new(
+ device: impl Peripheral
+ 'd,
+ ) -> BleConnector<'d> {
+ Self {
+ _device: device.into_ref(),
+ }
+ }
+}
#[derive(Debug)]
pub enum BleConnectorError {
@@ -18,11 +31,11 @@ impl Error for BleConnectorError {
}
}
-impl Io for BleConnector {
+impl Io for BleConnector<'_> {
type Error = BleConnectorError;
}
-impl Read for BleConnector {
+impl Read for BleConnector<'_> {
fn read(&mut self, buf: &mut [u8]) -> Result {
let mut total = 0;
for b in buf {
@@ -41,7 +54,7 @@ impl Read for BleConnector {
}
}
-impl Write for BleConnector {
+impl Write for BleConnector<'_> {
fn write(&mut self, buf: &[u8]) -> Result {
for b in buf {
send_hci(&[*b]);
diff --git a/esp-wifi/src/esp_now/mod.rs b/esp-wifi/src/esp_now/mod.rs
index 96b4b1ac..78c71e50 100644
--- a/esp-wifi/src/esp_now/mod.rs
+++ b/esp-wifi/src/esp_now/mod.rs
@@ -9,6 +9,7 @@
use core::{cell::RefCell, fmt::Debug};
use critical_section::Mutex;
+use esp_hal_common::peripheral::{Peripheral, PeripheralRef};
use crate::compat::queue::SimpleQueue;
@@ -20,10 +21,6 @@ pub const ESP_NOW_MAX_DATA_LEN: usize = 250;
/// Broadcast address
pub const BROADCAST_ADDRESS: [u8; 6] = [0xffu8, 0xffu8, 0xffu8, 0xffu8, 0xffu8, 0xffu8];
-static ESP_NOW: Mutex> = Mutex::new(RefCell::new(EspNowHolder {
- esp_now: Some(EspNowCreator { _private: () }),
-}));
-
static RECEIVE_QUEUE: Mutex>> =
Mutex::new(RefCell::new(SimpleQueue::new()));
@@ -236,17 +233,17 @@ impl Debug for ReceivedData {
}
}
-pub struct EspNowCreator {
- _private: (),
+pub struct EspNow<'d> {
+ _device: PeripheralRef<'d, esp_hal_common::radio::Wifi>,
}
-impl EspNowCreator {
- /// Initialize esp-now
- ///
- /// Must be called after initializing esp-wifi.
- /// After this the broadcast address is already added as a peer.
- pub fn initialize(self) -> Result {
- let mut esp_now = EspNow { _private: () };
+impl<'d> EspNow<'d> {
+ pub fn new(
+ device: impl Peripheral + 'd,
+ ) -> Result, EspNowError> {
+ let mut esp_now = EspNow {
+ _device: device.into_ref(),
+ };
check_error!({ esp_wifi_set_mode(wifi_mode_t_WIFI_MODE_STA) });
check_error!({ esp_wifi_start() });
check_error!({ esp_now_init() });
@@ -261,34 +258,6 @@ impl EspNowCreator {
Ok(esp_now)
}
-}
-
-struct EspNowHolder {
- esp_now: Option,
-}
-
-pub fn esp_now() -> EspNowCreator {
- critical_section::with(|cs| ESP_NOW.borrow_ref_mut(cs).esp_now.take().unwrap())
-}
-
-pub struct EspNow {
- _private: (),
-}
-
-impl EspNow {
- /// Deinit
- pub fn free(self) {
- unsafe {
- esp_now_unregister_recv_cb();
- esp_now_deinit();
- critical_section::with(|cs| {
- ESP_NOW
- .borrow_ref_mut(cs)
- .esp_now
- .replace(EspNowCreator { _private: () });
- })
- }
- }
/// Get the version of ESPNOW
pub fn get_version(&self) -> Result {
@@ -454,6 +423,15 @@ impl EspNow {
}
}
+impl Drop for EspNow<'_> {
+ fn drop(&mut self) {
+ unsafe {
+ esp_now_unregister_recv_cb();
+ esp_now_deinit();
+ }
+ }
+}
+
unsafe extern "C" fn rcv_cb(
esp_now_info: *const esp_now_recv_info_t,
data: *const u8,
@@ -555,36 +533,30 @@ unsafe extern "C" fn rcv_cb(
#[cfg(feature = "async")]
mod asynch {
+ use super::*;
use core::task::{Context, Poll};
use embassy_sync::waitqueue::AtomicWaker;
- use super::{EspNow, ReceivedData};
-
pub(super) static ESP_NOW_WAKER: AtomicWaker = AtomicWaker::new();
- impl EspNow {
+ impl<'d> EspNow<'d> {
pub async fn receive_async(&mut self) -> ReceivedData {
- ReceiveFuture::new(self).await
+ ReceiveFuture.await
}
}
- struct ReceiveFuture<'a> {
- esp_now: &'a mut EspNow,
- }
-
- impl<'a> ReceiveFuture<'a> {
- fn new(esp_now: &'a mut EspNow) -> Self {
- Self { esp_now }
- }
- }
+ struct ReceiveFuture;
- impl<'a> core::future::Future for ReceiveFuture<'a> {
+ impl core::future::Future for ReceiveFuture {
type Output = ReceivedData;
fn poll(self: core::pin::Pin<&mut Self>, cx: &mut Context<'_>) -> Poll {
ESP_NOW_WAKER.register(cx.waker());
- if let Some(data) = self.esp_now.receive() {
+ if let Some(data) = critical_section::with(|cs| {
+ let mut queue = RECEIVE_QUEUE.borrow_ref_mut(cs);
+ queue.dequeue()
+ }) {
Poll::Ready(data)
} else {
Poll::Pending
diff --git a/esp-wifi/src/wifi/mod.rs b/esp-wifi/src/wifi/mod.rs
index c0f48d18..8fbb2e5d 100644
--- a/esp-wifi/src/wifi/mod.rs
+++ b/esp-wifi/src/wifi/mod.rs
@@ -10,6 +10,8 @@ use critical_section::Mutex;
use embedded_svc::wifi::{AccessPointInfo, AuthMethod, SecondaryChannel};
use enumset::EnumSet;
use enumset::EnumSetType;
+use esp_hal_common::peripheral::Peripheral;
+use esp_hal_common::peripheral::PeripheralRef;
use esp_wifi_sys::include::esp_interface_t_ESP_IF_WIFI_AP;
use esp_wifi_sys::include::esp_wifi_disconnect;
use esp_wifi_sys::include::esp_wifi_get_mode;
@@ -682,7 +684,11 @@ pub fn wifi_start_scan(block: bool) -> i32 {
unsafe { esp_wifi_scan_start(&scan_config, block) }
}
-pub fn new_with_config(config: embedded_svc::wifi::Configuration) -> (WifiDevice, WifiController) {
+pub fn new_with_config<'d>(
+ device: impl Peripheral + 'd,
+ config: embedded_svc::wifi::Configuration,
+) -> (WifiDevice<'d>, WifiController<'d>) {
+ esp_hal_common::into_ref!(device);
let mode = match config {
embedded_svc::wifi::Configuration::None => panic!(),
embedded_svc::wifi::Configuration::Client(_) => WifiMode::Sta,
@@ -690,44 +696,60 @@ pub fn new_with_config(config: embedded_svc::wifi::Configuration) -> (WifiDevice
embedded_svc::wifi::Configuration::Mixed(_, _) => panic!(),
};
(
- WifiDevice::new(mode),
- WifiController::new_with_config(config),
+ WifiDevice::new(unsafe { device.clone_unchecked() }, mode),
+ WifiController::new_with_config(device, config),
+ )
+}
+
+pub fn new_with_mode<'d>(
+ device: impl Peripheral
+ 'd,
+ mode: WifiMode,
+) -> (WifiDevice<'d>, WifiController<'d>) {
+ new_with_config(
+ device,
+ match mode {
+ WifiMode::Sta => embedded_svc::wifi::Configuration::Client(Default::default()),
+ WifiMode::Ap => embedded_svc::wifi::Configuration::AccessPoint(Default::default()),
+ },
)
}
-pub fn new(mode: WifiMode) -> (WifiDevice, WifiController) {
- (WifiDevice::new(mode), WifiController::new())
+pub fn new<'d>(
+ device: impl Peripheral
+ 'd,
+) -> (WifiDevice<'d>, WifiController<'d>) {
+ new_with_config(device, Default::default())
}
/// A wifi device implementing smoltcp's Device trait.
-pub struct WifiDevice {
- _private: (),
+pub struct WifiDevice<'d> {
+ _device: PeripheralRef<'d, esp_hal_common::radio::Wifi>,
// only used by embassy-net
#[allow(unused)]
mode: WifiMode,
}
-impl WifiDevice {
- pub(crate) fn new(mode: WifiMode) -> WifiDevice {
- Self { _private: (), mode }
+impl<'d> WifiDevice<'d> {
+ pub(crate) fn new(
+ _device: PeripheralRef<'d, esp_hal_common::radio::Wifi>,
+ mode: WifiMode,
+ ) -> WifiDevice {
+ Self { _device, mode }
}
}
/// A wifi controller implementing embedded_svc::Wifi traits
-pub struct WifiController {
+pub struct WifiController<'d> {
+ _device: PeripheralRef<'d, esp_hal_common::radio::Wifi>,
config: embedded_svc::wifi::Configuration,
}
-impl WifiController {
- pub(crate) fn new_with_config(config: embedded_svc::wifi::Configuration) -> Self {
- Self { config }
- }
-
- pub(crate) fn new() -> Self {
- Self {
- config: Default::default(),
- }
+impl<'d> WifiController<'d> {
+ pub(crate) fn new_with_config(
+ _device: PeripheralRef<'d, esp_hal_common::radio::Wifi>,
+ config: embedded_svc::wifi::Configuration,
+ ) -> Self {
+ Self { _device, config }
}
fn is_sta_enabled(&self) -> Result {
@@ -864,9 +886,9 @@ impl WifiController {
}
// see https://docs.rs/smoltcp/0.7.1/smoltcp/phy/index.html
-impl Device for WifiDevice {
- type RxToken<'a> = WifiRxToken;
- type TxToken<'a> = WifiTxToken;
+impl<'d> Device for WifiDevice<'d> {
+ type RxToken<'a> = WifiRxToken where Self: 'a;
+ type TxToken<'a> = WifiTxToken where Self: 'a;
fn receive(
&mut self,
@@ -989,7 +1011,7 @@ pub fn send_data_if_needed() {
});
}
-impl embedded_svc::wifi::Wifi for WifiController {
+impl embedded_svc::wifi::Wifi for WifiController<'_> {
type Error = WifiError;
/// This currently only supports the `Client` and `AccessPoint` capability.
@@ -1290,7 +1312,7 @@ pub(crate) mod embassy {
}
}
- impl Driver for WifiDevice {
+ impl Driver for WifiDevice<'_> {
type RxToken<'a> = WifiRxToken
where
Self: 'a;
@@ -1381,7 +1403,7 @@ mod asynch {
use super::*;
// TODO assumes STA mode only
- impl WifiController {
+ impl<'d> WifiController<'d> {
/// Async version of [`embedded_svc::wifi::Wifi`]'s `scan_n` method
pub async fn scan_n(
&mut self,
diff --git a/esp-wifi/src/wifi/utils.rs b/esp-wifi/src/wifi/utils.rs
index 5aa2c64a..13c92dbc 100644
--- a/esp-wifi/src/wifi/utils.rs
+++ b/esp-wifi/src/wifi/utils.rs
@@ -12,10 +12,11 @@ use super::{WifiController, WifiDevice, WifiMode};
/// Convenient way to create an `smoltcp` ethernet interface
/// You can use the provided macros to create and pass a suitable backing storage.
-pub fn create_network_interface<'a>(
+pub fn create_network_interface<'a, 'd>(
+ device: impl esp_hal_common::peripheral::Peripheral + 'd,
mode: WifiMode,
storage: &'a mut [SocketStorage<'a>],
-) -> (Interface, WifiDevice, WifiController, SocketSet<'a>) {
+) -> (Interface, WifiDevice<'d>, WifiController<'d>, SocketSet<'a>) {
let socket_set_entries = storage;
let mut mac = [0u8; 6];
@@ -25,7 +26,7 @@ pub fn create_network_interface<'a>(
}
let hw_address = EthernetAddress::from_bytes(&mac);
- let (mut device, controller) = crate::wifi::new(mode);
+ let (mut device, controller) = crate::wifi::new_with_mode(device, mode);
let mut config = Config::new();
diff --git a/esp-wifi/src/wifi_interface.rs b/esp-wifi/src/wifi_interface.rs
index 583ca9d4..8ae5ea8b 100644
--- a/esp-wifi/src/wifi_interface.rs
+++ b/esp-wifi/src/wifi_interface.rs
@@ -16,7 +16,7 @@ use crate::wifi::WifiDevice;
use core::borrow::BorrowMut;
pub struct WifiStack<'a> {
- device: RefCell,
+ device: RefCell>, // TODO allow non static lifetime
network_interface: RefCell,
sockets: RefCell>,
current_millis_fn: fn() -> u64,
@@ -29,7 +29,7 @@ pub struct WifiStack<'a> {
impl<'a> WifiStack<'a> {
pub fn new(
network_interface: Interface,
- device: WifiDevice,
+ device: WifiDevice<'static>, // TODO relax this lifetime requirement
mut sockets: SocketSet<'a>,
current_millis_fn: fn() -> u64,
) -> WifiStack<'a> {
diff --git a/examples-esp32/examples/access_point.rs b/examples-esp32/examples/access_point.rs
index 041dedf1..5c34e7fa 100644
--- a/examples-esp32/examples/access_point.rs
+++ b/examples-esp32/examples/access_point.rs
@@ -34,9 +34,10 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
+ let (wifi, _) = peripherals.RADIO.split();
let mut socket_set_entries: [SocketStorage; 3] = Default::default();
let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Ap, &mut socket_set_entries);
+ create_network_interface(wifi, WifiMode::Ap, &mut socket_set_entries);
let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
let timer = examples_util::timer!(peripherals, clocks);
diff --git a/examples-esp32/examples/ble.rs b/examples-esp32/examples/ble.rs
index 8e6c274d..50810491 100644
--- a/examples-esp32/examples/ble.rs
+++ b/examples-esp32/examples/ble.rs
@@ -40,12 +40,14 @@ fn main() -> ! {
)
.unwrap();
+ let (_, mut bluetooth) = peripherals.RADIO.split();
+
let button = examples_util::boot_button!(peripherals);
let mut debounce_cnt = 500;
loop {
- let connector = BleConnector {};
+ let connector = BleConnector::new(&mut bluetooth);
let hci = HciConnector::new(connector, esp_wifi::current_millis);
let mut ble = Ble::new(&hci);
diff --git a/examples-esp32/examples/coex.rs b/examples-esp32/examples/coex.rs
index f162f9fe..1f9409d4 100644
--- a/examples-esp32/examples/coex.rs
+++ b/examples-esp32/examples/coex.rs
@@ -44,11 +44,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -58,6 +53,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, bluetooth) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),
@@ -109,7 +110,7 @@ fn main() -> ! {
}
}
- let connector = BleConnector {};
+ let connector = BleConnector::new(bluetooth);
let hci = HciConnector::new(connector, esp_wifi::current_millis);
let mut ble = Ble::new(&hci);
diff --git a/examples-esp32/examples/dhcp.rs b/examples-esp32/examples/dhcp.rs
index 3993e998..243b6487 100644
--- a/examples-esp32/examples/dhcp.rs
+++ b/examples-esp32/examples/dhcp.rs
@@ -34,9 +34,10 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
+ let (wifi, _) = peripherals.RADIO.split();
let mut socket_set_entries: [SocketStorage; 3] = Default::default();
let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
let timer = examples_util::timer!(peripherals, clocks);
diff --git a/examples-esp32/examples/embassy_access_point.rs b/examples-esp32/examples/embassy_access_point.rs
index 3acd3e91..629fd4de 100644
--- a/examples-esp32/examples/embassy_access_point.rs
+++ b/examples-esp32/examples/embassy_access_point.rs
@@ -54,7 +54,8 @@ fn main() -> ! {
)
.unwrap();
- let (wifi_interface, controller) = esp_wifi::wifi::new(WifiMode::Ap);
+ let (wifi, _) = peripherals.RADIO.split();
+ let (wifi_interface, controller) = esp_wifi::wifi::new_with_mode(wifi, WifiMode::Ap);
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
embassy::init(&clocks, timer_group0.timer0);
@@ -84,7 +85,7 @@ fn main() -> ! {
}
#[embassy_executor::task]
-async fn connection(mut controller: WifiController) {
+async fn connection(mut controller: WifiController<'static>) {
println!("start connection task");
println!("Device capabilities: {:?}", controller.get_capabilities());
loop {
@@ -110,12 +111,12 @@ async fn connection(mut controller: WifiController) {
}
#[embassy_executor::task]
-async fn net_task(stack: &'static Stack) {
+async fn net_task(stack: &'static Stack>) {
stack.run().await
}
#[embassy_executor::task]
-async fn task(stack: &'static Stack) {
+async fn task(stack: &'static Stack>) {
let mut rx_buffer = [0; 4096];
let mut tx_buffer = [0; 4096];
diff --git a/examples-esp32/examples/embassy_dhcp.rs b/examples-esp32/examples/embassy_dhcp.rs
index 13bb7df3..8c32337f 100644
--- a/examples-esp32/examples/embassy_dhcp.rs
+++ b/examples-esp32/examples/embassy_dhcp.rs
@@ -56,7 +56,8 @@ fn main() -> ! {
)
.unwrap();
- let (wifi_interface, controller) = esp_wifi::wifi::new(WifiMode::Sta);
+ let (wifi, _) = peripherals.RADIO.split();
+ let (wifi_interface, controller) = esp_wifi::wifi::new_with_mode(wifi, WifiMode::Sta);
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
embassy::init(&clocks, timer_group0.timer0);
@@ -82,7 +83,7 @@ fn main() -> ! {
}
#[embassy_executor::task]
-async fn connection(mut controller: WifiController) {
+async fn connection(mut controller: WifiController<'static>) {
println!("start connection task");
println!("Device capabilities: {:?}", controller.get_capabilities());
loop {
@@ -118,12 +119,12 @@ async fn connection(mut controller: WifiController) {
}
#[embassy_executor::task]
-async fn net_task(stack: &'static Stack) {
+async fn net_task(stack: &'static Stack>) {
stack.run().await
}
#[embassy_executor::task]
-async fn task(stack: &'static Stack) {
+async fn task(stack: &'static Stack>) {
let mut rx_buffer = [0; 4096];
let mut tx_buffer = [0; 4096];
diff --git a/examples-esp32/examples/embassy_esp_now.rs b/examples-esp32/examples/embassy_esp_now.rs
index d1c2f4e8..803b7c0e 100644
--- a/examples-esp32/examples/embassy_esp_now.rs
+++ b/examples-esp32/examples/embassy_esp_now.rs
@@ -22,7 +22,7 @@ use hal::{embassy, peripherals::Peripherals, prelude::*, timer::TimerGroup, Rtc}
use hal::system::SystemExt;
#[embassy_executor::task]
-async fn run(mut esp_now: EspNow) {
+async fn run(mut esp_now: EspNow<'static>) {
let mut ticker = Ticker::every(Duration::from_secs(5));
loop {
let res = select(ticker.next(), async {
@@ -76,7 +76,8 @@ fn main() -> ! {
)
.unwrap();
- let esp_now = esp_wifi::esp_now::esp_now().initialize().unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let esp_now = esp_wifi::esp_now::EspNow::new(wifi).unwrap();
println!("esp-now version {}", esp_now.get_version().unwrap());
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
diff --git a/examples-esp32/examples/esp_now.rs b/examples-esp32/examples/esp_now.rs
index 108b9835..97f63cda 100644
--- a/examples-esp32/examples/esp_now.rs
+++ b/examples-esp32/examples/esp_now.rs
@@ -31,7 +31,8 @@ fn main() -> ! {
)
.unwrap();
- let mut esp_now = esp_wifi::esp_now::esp_now().initialize().unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let mut esp_now = esp_wifi::esp_now::EspNow::new(wifi).unwrap();
println!("esp-now version {}", esp_now.get_version().unwrap());
diff --git a/examples-esp32/examples/static_ip.rs b/examples-esp32/examples/static_ip.rs
index 0481aa8c..afda203e 100644
--- a/examples-esp32/examples/static_ip.rs
+++ b/examples-esp32/examples/static_ip.rs
@@ -37,11 +37,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -51,6 +46,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),
diff --git a/examples-esp32c2/examples/access_point.rs b/examples-esp32c2/examples/access_point.rs
index 041dedf1..3e1e6fef 100644
--- a/examples-esp32c2/examples/access_point.rs
+++ b/examples-esp32c2/examples/access_point.rs
@@ -34,11 +34,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Ap, &mut socket_set_entries);
- let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -48,6 +43,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Ap, &mut socket_set_entries);
+ let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::AccessPoint(AccessPointConfiguration {
ssid: "esp-wifi".into(),
..Default::default()
diff --git a/examples-esp32c2/examples/ble.rs b/examples-esp32c2/examples/ble.rs
index 8e6c274d..50810491 100644
--- a/examples-esp32c2/examples/ble.rs
+++ b/examples-esp32c2/examples/ble.rs
@@ -40,12 +40,14 @@ fn main() -> ! {
)
.unwrap();
+ let (_, mut bluetooth) = peripherals.RADIO.split();
+
let button = examples_util::boot_button!(peripherals);
let mut debounce_cnt = 500;
loop {
- let connector = BleConnector {};
+ let connector = BleConnector::new(&mut bluetooth);
let hci = HciConnector::new(connector, esp_wifi::current_millis);
let mut ble = Ble::new(&hci);
diff --git a/examples-esp32c2/examples/coex.rs b/examples-esp32c2/examples/coex.rs
index f162f9fe..1f9409d4 100644
--- a/examples-esp32c2/examples/coex.rs
+++ b/examples-esp32c2/examples/coex.rs
@@ -44,11 +44,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -58,6 +53,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, bluetooth) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),
@@ -109,7 +110,7 @@ fn main() -> ! {
}
}
- let connector = BleConnector {};
+ let connector = BleConnector::new(bluetooth);
let hci = HciConnector::new(connector, esp_wifi::current_millis);
let mut ble = Ble::new(&hci);
diff --git a/examples-esp32c2/examples/dhcp.rs b/examples-esp32c2/examples/dhcp.rs
index 3993e998..d235412a 100644
--- a/examples-esp32c2/examples/dhcp.rs
+++ b/examples-esp32c2/examples/dhcp.rs
@@ -34,11 +34,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -48,6 +43,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),
diff --git a/examples-esp32c2/examples/embassy_access_point.rs b/examples-esp32c2/examples/embassy_access_point.rs
index 3acd3e91..629fd4de 100644
--- a/examples-esp32c2/examples/embassy_access_point.rs
+++ b/examples-esp32c2/examples/embassy_access_point.rs
@@ -54,7 +54,8 @@ fn main() -> ! {
)
.unwrap();
- let (wifi_interface, controller) = esp_wifi::wifi::new(WifiMode::Ap);
+ let (wifi, _) = peripherals.RADIO.split();
+ let (wifi_interface, controller) = esp_wifi::wifi::new_with_mode(wifi, WifiMode::Ap);
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
embassy::init(&clocks, timer_group0.timer0);
@@ -84,7 +85,7 @@ fn main() -> ! {
}
#[embassy_executor::task]
-async fn connection(mut controller: WifiController) {
+async fn connection(mut controller: WifiController<'static>) {
println!("start connection task");
println!("Device capabilities: {:?}", controller.get_capabilities());
loop {
@@ -110,12 +111,12 @@ async fn connection(mut controller: WifiController) {
}
#[embassy_executor::task]
-async fn net_task(stack: &'static Stack) {
+async fn net_task(stack: &'static Stack>) {
stack.run().await
}
#[embassy_executor::task]
-async fn task(stack: &'static Stack) {
+async fn task(stack: &'static Stack>) {
let mut rx_buffer = [0; 4096];
let mut tx_buffer = [0; 4096];
diff --git a/examples-esp32c2/examples/embassy_dhcp.rs b/examples-esp32c2/examples/embassy_dhcp.rs
index 13bb7df3..8c32337f 100644
--- a/examples-esp32c2/examples/embassy_dhcp.rs
+++ b/examples-esp32c2/examples/embassy_dhcp.rs
@@ -56,7 +56,8 @@ fn main() -> ! {
)
.unwrap();
- let (wifi_interface, controller) = esp_wifi::wifi::new(WifiMode::Sta);
+ let (wifi, _) = peripherals.RADIO.split();
+ let (wifi_interface, controller) = esp_wifi::wifi::new_with_mode(wifi, WifiMode::Sta);
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
embassy::init(&clocks, timer_group0.timer0);
@@ -82,7 +83,7 @@ fn main() -> ! {
}
#[embassy_executor::task]
-async fn connection(mut controller: WifiController) {
+async fn connection(mut controller: WifiController<'static>) {
println!("start connection task");
println!("Device capabilities: {:?}", controller.get_capabilities());
loop {
@@ -118,12 +119,12 @@ async fn connection(mut controller: WifiController) {
}
#[embassy_executor::task]
-async fn net_task(stack: &'static Stack) {
+async fn net_task(stack: &'static Stack>) {
stack.run().await
}
#[embassy_executor::task]
-async fn task(stack: &'static Stack) {
+async fn task(stack: &'static Stack>) {
let mut rx_buffer = [0; 4096];
let mut tx_buffer = [0; 4096];
diff --git a/examples-esp32c2/examples/embassy_esp_now.rs b/examples-esp32c2/examples/embassy_esp_now.rs
index d1c2f4e8..803b7c0e 100644
--- a/examples-esp32c2/examples/embassy_esp_now.rs
+++ b/examples-esp32c2/examples/embassy_esp_now.rs
@@ -22,7 +22,7 @@ use hal::{embassy, peripherals::Peripherals, prelude::*, timer::TimerGroup, Rtc}
use hal::system::SystemExt;
#[embassy_executor::task]
-async fn run(mut esp_now: EspNow) {
+async fn run(mut esp_now: EspNow<'static>) {
let mut ticker = Ticker::every(Duration::from_secs(5));
loop {
let res = select(ticker.next(), async {
@@ -76,7 +76,8 @@ fn main() -> ! {
)
.unwrap();
- let esp_now = esp_wifi::esp_now::esp_now().initialize().unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let esp_now = esp_wifi::esp_now::EspNow::new(wifi).unwrap();
println!("esp-now version {}", esp_now.get_version().unwrap());
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
diff --git a/examples-esp32c2/examples/esp_now.rs b/examples-esp32c2/examples/esp_now.rs
index 108b9835..97f63cda 100644
--- a/examples-esp32c2/examples/esp_now.rs
+++ b/examples-esp32c2/examples/esp_now.rs
@@ -31,7 +31,8 @@ fn main() -> ! {
)
.unwrap();
- let mut esp_now = esp_wifi::esp_now::esp_now().initialize().unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let mut esp_now = esp_wifi::esp_now::EspNow::new(wifi).unwrap();
println!("esp-now version {}", esp_now.get_version().unwrap());
diff --git a/examples-esp32c2/examples/static_ip.rs b/examples-esp32c2/examples/static_ip.rs
index 0481aa8c..afda203e 100644
--- a/examples-esp32c2/examples/static_ip.rs
+++ b/examples-esp32c2/examples/static_ip.rs
@@ -37,11 +37,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -51,6 +46,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),
diff --git a/examples-esp32c3/examples/access_point.rs b/examples-esp32c3/examples/access_point.rs
index 041dedf1..3e1e6fef 100644
--- a/examples-esp32c3/examples/access_point.rs
+++ b/examples-esp32c3/examples/access_point.rs
@@ -34,11 +34,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Ap, &mut socket_set_entries);
- let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -48,6 +43,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Ap, &mut socket_set_entries);
+ let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::AccessPoint(AccessPointConfiguration {
ssid: "esp-wifi".into(),
..Default::default()
diff --git a/examples-esp32c3/examples/ble.rs b/examples-esp32c3/examples/ble.rs
index 8e6c274d..5a7adb0f 100644
--- a/examples-esp32c3/examples/ble.rs
+++ b/examples-esp32c3/examples/ble.rs
@@ -44,8 +44,10 @@ fn main() -> ! {
let mut debounce_cnt = 500;
+ let (_, mut bluetooth) = peripherals.RADIO.split();
+
loop {
- let connector = BleConnector {};
+ let connector = BleConnector::new(&mut bluetooth);
let hci = HciConnector::new(connector, esp_wifi::current_millis);
let mut ble = Ble::new(&hci);
diff --git a/examples-esp32c3/examples/coex.rs b/examples-esp32c3/examples/coex.rs
index f162f9fe..cbdfe49d 100644
--- a/examples-esp32c3/examples/coex.rs
+++ b/examples-esp32c3/examples/coex.rs
@@ -44,11 +44,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -58,6 +53,13 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, bluetooth) = peripherals.RADIO.split();
+
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),
@@ -109,7 +111,7 @@ fn main() -> ! {
}
}
- let connector = BleConnector {};
+ let connector = BleConnector::new(bluetooth);
let hci = HciConnector::new(connector, esp_wifi::current_millis);
let mut ble = Ble::new(&hci);
diff --git a/examples-esp32c3/examples/dhcp.rs b/examples-esp32c3/examples/dhcp.rs
index 3993e998..d235412a 100644
--- a/examples-esp32c3/examples/dhcp.rs
+++ b/examples-esp32c3/examples/dhcp.rs
@@ -34,11 +34,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -48,6 +43,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),
diff --git a/examples-esp32c3/examples/embassy_access_point.rs b/examples-esp32c3/examples/embassy_access_point.rs
index 3acd3e91..629fd4de 100644
--- a/examples-esp32c3/examples/embassy_access_point.rs
+++ b/examples-esp32c3/examples/embassy_access_point.rs
@@ -54,7 +54,8 @@ fn main() -> ! {
)
.unwrap();
- let (wifi_interface, controller) = esp_wifi::wifi::new(WifiMode::Ap);
+ let (wifi, _) = peripherals.RADIO.split();
+ let (wifi_interface, controller) = esp_wifi::wifi::new_with_mode(wifi, WifiMode::Ap);
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
embassy::init(&clocks, timer_group0.timer0);
@@ -84,7 +85,7 @@ fn main() -> ! {
}
#[embassy_executor::task]
-async fn connection(mut controller: WifiController) {
+async fn connection(mut controller: WifiController<'static>) {
println!("start connection task");
println!("Device capabilities: {:?}", controller.get_capabilities());
loop {
@@ -110,12 +111,12 @@ async fn connection(mut controller: WifiController) {
}
#[embassy_executor::task]
-async fn net_task(stack: &'static Stack) {
+async fn net_task(stack: &'static Stack>) {
stack.run().await
}
#[embassy_executor::task]
-async fn task(stack: &'static Stack) {
+async fn task(stack: &'static Stack>) {
let mut rx_buffer = [0; 4096];
let mut tx_buffer = [0; 4096];
diff --git a/examples-esp32c3/examples/embassy_dhcp.rs b/examples-esp32c3/examples/embassy_dhcp.rs
index 13bb7df3..8c32337f 100644
--- a/examples-esp32c3/examples/embassy_dhcp.rs
+++ b/examples-esp32c3/examples/embassy_dhcp.rs
@@ -56,7 +56,8 @@ fn main() -> ! {
)
.unwrap();
- let (wifi_interface, controller) = esp_wifi::wifi::new(WifiMode::Sta);
+ let (wifi, _) = peripherals.RADIO.split();
+ let (wifi_interface, controller) = esp_wifi::wifi::new_with_mode(wifi, WifiMode::Sta);
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
embassy::init(&clocks, timer_group0.timer0);
@@ -82,7 +83,7 @@ fn main() -> ! {
}
#[embassy_executor::task]
-async fn connection(mut controller: WifiController) {
+async fn connection(mut controller: WifiController<'static>) {
println!("start connection task");
println!("Device capabilities: {:?}", controller.get_capabilities());
loop {
@@ -118,12 +119,12 @@ async fn connection(mut controller: WifiController) {
}
#[embassy_executor::task]
-async fn net_task(stack: &'static Stack) {
+async fn net_task(stack: &'static Stack>) {
stack.run().await
}
#[embassy_executor::task]
-async fn task(stack: &'static Stack) {
+async fn task(stack: &'static Stack>) {
let mut rx_buffer = [0; 4096];
let mut tx_buffer = [0; 4096];
diff --git a/examples-esp32c3/examples/embassy_esp_now.rs b/examples-esp32c3/examples/embassy_esp_now.rs
index d1c2f4e8..803b7c0e 100644
--- a/examples-esp32c3/examples/embassy_esp_now.rs
+++ b/examples-esp32c3/examples/embassy_esp_now.rs
@@ -22,7 +22,7 @@ use hal::{embassy, peripherals::Peripherals, prelude::*, timer::TimerGroup, Rtc}
use hal::system::SystemExt;
#[embassy_executor::task]
-async fn run(mut esp_now: EspNow) {
+async fn run(mut esp_now: EspNow<'static>) {
let mut ticker = Ticker::every(Duration::from_secs(5));
loop {
let res = select(ticker.next(), async {
@@ -76,7 +76,8 @@ fn main() -> ! {
)
.unwrap();
- let esp_now = esp_wifi::esp_now::esp_now().initialize().unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let esp_now = esp_wifi::esp_now::EspNow::new(wifi).unwrap();
println!("esp-now version {}", esp_now.get_version().unwrap());
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
diff --git a/examples-esp32c3/examples/esp_now.rs b/examples-esp32c3/examples/esp_now.rs
index 108b9835..97f63cda 100644
--- a/examples-esp32c3/examples/esp_now.rs
+++ b/examples-esp32c3/examples/esp_now.rs
@@ -31,7 +31,8 @@ fn main() -> ! {
)
.unwrap();
- let mut esp_now = esp_wifi::esp_now::esp_now().initialize().unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let mut esp_now = esp_wifi::esp_now::EspNow::new(wifi).unwrap();
println!("esp-now version {}", esp_now.get_version().unwrap());
diff --git a/examples-esp32c3/examples/static_ip.rs b/examples-esp32c3/examples/static_ip.rs
index 0481aa8c..afda203e 100644
--- a/examples-esp32c3/examples/static_ip.rs
+++ b/examples-esp32c3/examples/static_ip.rs
@@ -37,11 +37,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -51,6 +46,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),
diff --git a/examples-esp32c6/examples/access_point.rs b/examples-esp32c6/examples/access_point.rs
index 041dedf1..09e16726 100644
--- a/examples-esp32c6/examples/access_point.rs
+++ b/examples-esp32c6/examples/access_point.rs
@@ -34,11 +34,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Ap, &mut socket_set_entries);
- let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -48,6 +43,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, _, _) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Ap, &mut socket_set_entries);
+ let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::AccessPoint(AccessPointConfiguration {
ssid: "esp-wifi".into(),
..Default::default()
diff --git a/examples-esp32c6/examples/ble.rs b/examples-esp32c6/examples/ble.rs
index 8e6c274d..517f4e56 100644
--- a/examples-esp32c6/examples/ble.rs
+++ b/examples-esp32c6/examples/ble.rs
@@ -40,12 +40,14 @@ fn main() -> ! {
)
.unwrap();
+ let (_, mut bluetooth, _) = peripherals.RADIO.split();
+
let button = examples_util::boot_button!(peripherals);
let mut debounce_cnt = 500;
loop {
- let connector = BleConnector {};
+ let connector = BleConnector::new(&mut bluetooth);
let hci = HciConnector::new(connector, esp_wifi::current_millis);
let mut ble = Ble::new(&hci);
diff --git a/examples-esp32c6/examples/coex.rs b/examples-esp32c6/examples/coex.rs
index f162f9fe..efe21193 100644
--- a/examples-esp32c6/examples/coex.rs
+++ b/examples-esp32c6/examples/coex.rs
@@ -44,11 +44,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -58,6 +53,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, bluetooth, _) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),
@@ -109,7 +110,7 @@ fn main() -> ! {
}
}
- let connector = BleConnector {};
+ let connector = BleConnector::new(bluetooth);
let hci = HciConnector::new(connector, esp_wifi::current_millis);
let mut ble = Ble::new(&hci);
diff --git a/examples-esp32c6/examples/dhcp.rs b/examples-esp32c6/examples/dhcp.rs
index 3993e998..5a49541d 100644
--- a/examples-esp32c6/examples/dhcp.rs
+++ b/examples-esp32c6/examples/dhcp.rs
@@ -34,11 +34,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -48,6 +43,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, _, _) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),
diff --git a/examples-esp32c6/examples/embassy_access_point.rs b/examples-esp32c6/examples/embassy_access_point.rs
index 3acd3e91..572e3e08 100644
--- a/examples-esp32c6/examples/embassy_access_point.rs
+++ b/examples-esp32c6/examples/embassy_access_point.rs
@@ -54,7 +54,8 @@ fn main() -> ! {
)
.unwrap();
- let (wifi_interface, controller) = esp_wifi::wifi::new(WifiMode::Ap);
+ let (wifi, _, _) = peripherals.RADIO.split();
+ let (wifi_interface, controller) = esp_wifi::wifi::new_with_mode(wifi, WifiMode::Ap);
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
embassy::init(&clocks, timer_group0.timer0);
@@ -84,7 +85,7 @@ fn main() -> ! {
}
#[embassy_executor::task]
-async fn connection(mut controller: WifiController) {
+async fn connection(mut controller: WifiController<'static>) {
println!("start connection task");
println!("Device capabilities: {:?}", controller.get_capabilities());
loop {
@@ -110,12 +111,12 @@ async fn connection(mut controller: WifiController) {
}
#[embassy_executor::task]
-async fn net_task(stack: &'static Stack) {
+async fn net_task(stack: &'static Stack>) {
stack.run().await
}
#[embassy_executor::task]
-async fn task(stack: &'static Stack) {
+async fn task(stack: &'static Stack>) {
let mut rx_buffer = [0; 4096];
let mut tx_buffer = [0; 4096];
diff --git a/examples-esp32c6/examples/embassy_dhcp.rs b/examples-esp32c6/examples/embassy_dhcp.rs
index 13bb7df3..bdda84bb 100644
--- a/examples-esp32c6/examples/embassy_dhcp.rs
+++ b/examples-esp32c6/examples/embassy_dhcp.rs
@@ -56,7 +56,8 @@ fn main() -> ! {
)
.unwrap();
- let (wifi_interface, controller) = esp_wifi::wifi::new(WifiMode::Sta);
+ let (wifi, _, _) = peripherals.RADIO.split();
+ let (wifi_interface, controller) = esp_wifi::wifi::new_with_mode(wifi, WifiMode::Sta);
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
embassy::init(&clocks, timer_group0.timer0);
@@ -82,7 +83,7 @@ fn main() -> ! {
}
#[embassy_executor::task]
-async fn connection(mut controller: WifiController) {
+async fn connection(mut controller: WifiController<'static>) {
println!("start connection task");
println!("Device capabilities: {:?}", controller.get_capabilities());
loop {
@@ -118,12 +119,12 @@ async fn connection(mut controller: WifiController) {
}
#[embassy_executor::task]
-async fn net_task(stack: &'static Stack) {
+async fn net_task(stack: &'static Stack>) {
stack.run().await
}
#[embassy_executor::task]
-async fn task(stack: &'static Stack) {
+async fn task(stack: &'static Stack>) {
let mut rx_buffer = [0; 4096];
let mut tx_buffer = [0; 4096];
diff --git a/examples-esp32c6/examples/embassy_esp_now.rs b/examples-esp32c6/examples/embassy_esp_now.rs
index d1c2f4e8..26ce1560 100644
--- a/examples-esp32c6/examples/embassy_esp_now.rs
+++ b/examples-esp32c6/examples/embassy_esp_now.rs
@@ -22,7 +22,7 @@ use hal::{embassy, peripherals::Peripherals, prelude::*, timer::TimerGroup, Rtc}
use hal::system::SystemExt;
#[embassy_executor::task]
-async fn run(mut esp_now: EspNow) {
+async fn run(mut esp_now: EspNow<'static>) {
let mut ticker = Ticker::every(Duration::from_secs(5));
loop {
let res = select(ticker.next(), async {
@@ -76,7 +76,8 @@ fn main() -> ! {
)
.unwrap();
- let esp_now = esp_wifi::esp_now::esp_now().initialize().unwrap();
+ let (wifi, _, _) = peripherals.RADIO.split();
+ let esp_now = esp_wifi::esp_now::EspNow::new(wifi).unwrap();
println!("esp-now version {}", esp_now.get_version().unwrap());
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
diff --git a/examples-esp32c6/examples/esp_now.rs b/examples-esp32c6/examples/esp_now.rs
index 108b9835..e8237076 100644
--- a/examples-esp32c6/examples/esp_now.rs
+++ b/examples-esp32c6/examples/esp_now.rs
@@ -31,7 +31,8 @@ fn main() -> ! {
)
.unwrap();
- let mut esp_now = esp_wifi::esp_now::esp_now().initialize().unwrap();
+ let (wifi, _, _) = peripherals.RADIO.split();
+ let mut esp_now = esp_wifi::esp_now::EspNow::new(wifi).unwrap();
println!("esp-now version {}", esp_now.get_version().unwrap());
diff --git a/examples-esp32c6/examples/static_ip.rs b/examples-esp32c6/examples/static_ip.rs
index 0481aa8c..9ddc84a5 100644
--- a/examples-esp32c6/examples/static_ip.rs
+++ b/examples-esp32c6/examples/static_ip.rs
@@ -37,11 +37,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -51,6 +46,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, _, _) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),
diff --git a/examples-esp32s2/examples/access_point.rs b/examples-esp32s2/examples/access_point.rs
index 041dedf1..255e3a93 100644
--- a/examples-esp32s2/examples/access_point.rs
+++ b/examples-esp32s2/examples/access_point.rs
@@ -34,11 +34,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Ap, &mut socket_set_entries);
- let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -48,6 +43,12 @@ fn main() -> ! {
)
.unwrap();
+ let wifi = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Ap, &mut socket_set_entries);
+ let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::AccessPoint(AccessPointConfiguration {
ssid: "esp-wifi".into(),
..Default::default()
diff --git a/examples-esp32s2/examples/ble.rs b/examples-esp32s2/examples/ble.rs
deleted file mode 100644
index 8e6c274d..00000000
--- a/examples-esp32s2/examples/ble.rs
+++ /dev/null
@@ -1,140 +0,0 @@
-#![no_std]
-#![no_main]
-
-use bleps::{
- ad_structure::{
- create_advertising_data, AdStructure, BR_EDR_NOT_SUPPORTED, LE_GENERAL_DISCOVERABLE,
- },
- attribute_server::{AttributeServer, NotificationData, WorkResult},
- Ble, HciConnector,
-};
-use bleps_macros::gatt;
-use esp_backtrace as _;
-use esp_println::{logger::init_logger, println};
-use esp_wifi::{ble::controller::BleConnector, initialize};
-use examples_util::hal;
-use hal::{
- clock::{ClockControl, CpuClock},
- peripherals::*,
- prelude::*,
- Rng, Rtc, IO,
-};
-
-#[entry]
-fn main() -> ! {
- init_logger(log::LevelFilter::Info);
- esp_wifi::init_heap();
-
- let peripherals = Peripherals::take();
-
- let system = examples_util::system!(peripherals);
- let clocks = examples_util::clocks!(system);
- examples_util::rtc!(peripherals);
-
- let timer = examples_util::timer!(peripherals, clocks);
- initialize(
- timer,
- Rng::new(peripherals.RNG),
- system.radio_clock_control,
- &clocks,
- )
- .unwrap();
-
- let button = examples_util::boot_button!(peripherals);
-
- let mut debounce_cnt = 500;
-
- loop {
- let connector = BleConnector {};
- let hci = HciConnector::new(connector, esp_wifi::current_millis);
- let mut ble = Ble::new(&hci);
-
- println!("{:?}", ble.init());
- println!("{:?}", ble.cmd_set_le_advertising_parameters());
- println!(
- "{:?}",
- ble.cmd_set_le_advertising_data(create_advertising_data(&[
- AdStructure::Flags(LE_GENERAL_DISCOVERABLE | BR_EDR_NOT_SUPPORTED),
- AdStructure::ServiceUuids16(&[Uuid::Uuid16(0x1809)]),
- AdStructure::CompleteLocalName(examples_util::SOC_NAME),
- ]))
- );
- println!("{:?}", ble.cmd_set_le_advertise_enable(true));
-
- println!("started advertising");
-
- let mut rf = || &b"Hello Bare-Metal BLE"[..];
- let mut wf = |offset: u16, data: &[u8]| {
- println!("RECEIVED: {} {:x?}", offset, data);
- };
-
- let mut wf2 = |offset: u16, data: &[u8]| {
- println!("RECEIVED: {} {:x?}", offset, data);
- };
-
- let mut rf3 = || &b"Hola!"[..];
- let mut wf3 = |offset: u16, data: &[u8]| {
- println!("RECEIVED: Offset {}, data {:x?}", offset, data);
- };
-
- gatt!([service {
- uuid: "937312e0-2354-11eb-9f10-fbc30a62cf38",
- characteristics: [
- characteristic {
- uuid: "937312e0-2354-11eb-9f10-fbc30a62cf38",
- read: rf,
- write: wf,
- },
- characteristic {
- uuid: "957312e0-2354-11eb-9f10-fbc30a62cf38",
- write: wf2,
- },
- characteristic {
- name: "my_characteristic",
- uuid: "987312e0-2354-11eb-9f10-fbc30a62cf38",
- notify: true,
- read: rf3,
- write: wf3,
- },
- ],
- },]);
-
- let mut srv = AttributeServer::new(&mut ble, &mut gatt_attributes);
-
- loop {
- let mut notification = None;
-
- if button.is_low().unwrap() && debounce_cnt > 0 {
- debounce_cnt -= 1;
- if debounce_cnt == 0 {
- if let Some(cccd) =
- srv.get_characteristic_value(my_characteristic_notify_enable_handle)
- {
- // if notifications enabled
- if cccd[0] == 1 {
- notification = Some(NotificationData::new(
- my_characteristic_handle,
- &b"Notification"[..],
- ));
- }
- }
- }
- };
-
- if button.is_high().unwrap() {
- debounce_cnt = 500;
- }
-
- match srv.do_work_with_notification(notification) {
- Ok(res) => {
- if let WorkResult::GotDisconnected = res {
- break;
- }
- }
- Err(err) => {
- println!("{:x?}", err);
- }
- }
- }
- }
-}
diff --git a/examples-esp32s2/examples/coex.rs b/examples-esp32s2/examples/coex.rs
deleted file mode 100644
index f162f9fe..00000000
--- a/examples-esp32s2/examples/coex.rs
+++ /dev/null
@@ -1,173 +0,0 @@
-#![no_std]
-#![no_main]
-
-use examples_util::hal;
-
-use bleps::{
- ad_structure::{
- create_advertising_data, AdStructure, BR_EDR_NOT_SUPPORTED, LE_GENERAL_DISCOVERABLE,
- },
- att::Uuid,
- Ble, HciConnector,
-};
-
-use esp_wifi::{
- ble::controller::BleConnector, current_millis, wifi::WifiMode, wifi_interface::WifiStack,
-};
-
-use embedded_io::blocking::*;
-use embedded_svc::ipv4::Interface;
-use embedded_svc::wifi::{AccessPointInfo, ClientConfiguration, Configuration, Wifi};
-
-use esp_backtrace as _;
-use esp_println::{logger::init_logger, print, println};
-use esp_wifi::initialize;
-use esp_wifi::wifi::{utils::create_network_interface, WifiError};
-use hal::{
- clock::{ClockControl, CpuClock},
- Rng,
-};
-use hal::{peripherals::Peripherals, prelude::*, Rtc};
-use smoltcp::{iface::SocketStorage, wire::Ipv4Address};
-
-const SSID: &str = env!("SSID");
-const PASSWORD: &str = env!("PASSWORD");
-
-#[entry]
-fn main() -> ! {
- init_logger(log::LevelFilter::Info);
- esp_wifi::init_heap();
-
- let peripherals = Peripherals::take();
-
- let system = examples_util::system!(peripherals);
- let clocks = examples_util::clocks!(system);
- examples_util::rtc!(peripherals);
-
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
- let timer = examples_util::timer!(peripherals, clocks);
- initialize(
- timer,
- Rng::new(peripherals.RNG),
- system.radio_clock_control,
- &clocks,
- )
- .unwrap();
-
- let client_config = Configuration::Client(ClientConfiguration {
- ssid: SSID.into(),
- password: PASSWORD.into(),
- ..Default::default()
- });
- let res = controller.set_configuration(&client_config);
- println!("wifi_set_configuration returned {:?}", res);
-
- controller.start().unwrap();
- println!("is wifi started: {:?}", controller.is_started());
-
- println!("Start Wifi Scan");
- let res: Result<(heapless::Vec, usize), WifiError> = controller.scan_n();
- if let Ok((res, _count)) = res {
- for ap in res {
- println!("{:?}", ap);
- }
- }
-
- println!("{:?}", controller.get_capabilities());
- println!("wifi_connect {:?}", controller.connect());
-
- // wait to get connected
- println!("Wait to get connected");
- loop {
- let res = controller.is_connected();
- match res {
- Ok(connected) => {
- if connected {
- break;
- }
- }
- Err(err) => {
- println!("{:?}", err);
- loop {}
- }
- }
- }
- println!("{:?}", controller.is_connected());
-
- // wait for getting an ip address
- println!("Wait to get an ip address");
- loop {
- wifi_stack.work();
-
- if wifi_stack.is_iface_up() {
- println!("got ip {:?}", wifi_stack.get_ip_info());
- break;
- }
- }
-
- let connector = BleConnector {};
- let hci = HciConnector::new(connector, esp_wifi::current_millis);
- let mut ble = Ble::new(&hci);
-
- println!("{:?}", ble.init());
- println!("{:?}", ble.cmd_set_le_advertising_parameters());
- println!(
- "{:?}",
- ble.cmd_set_le_advertising_data(create_advertising_data(&[
- AdStructure::Flags(LE_GENERAL_DISCOVERABLE | BR_EDR_NOT_SUPPORTED),
- AdStructure::ServiceUuids16(&[Uuid::Uuid16(0x1809)]),
- AdStructure::CompleteLocalName(examples_util::SOC_NAME),
- ]))
- );
- println!("{:?}", ble.cmd_set_le_advertise_enable(true));
-
- println!("started advertising");
-
- println!("Start busy loop on main");
-
- let mut rx_buffer = [0u8; 1536];
- let mut tx_buffer = [0u8; 1536];
- let mut socket = wifi_stack.get_socket(&mut rx_buffer, &mut tx_buffer);
-
- loop {
- println!("Making HTTP request");
- socket.work();
-
- socket
- .open(Ipv4Address::new(142, 250, 185, 115), 80)
- .unwrap();
-
- socket
- .write(b"GET / HTTP/1.0\r\nHost: www.mobile-j.de\r\n\r\n")
- .unwrap();
- socket.flush().unwrap();
-
- let wait_end = current_millis() + 20 * 1000;
- loop {
- let mut buffer = [0u8; 512];
- if let Ok(len) = socket.read(&mut buffer) {
- let to_print = unsafe { core::str::from_utf8_unchecked(&buffer[..len]) };
- print!("{}", to_print);
- } else {
- break;
- }
-
- if current_millis() > wait_end {
- println!("Timeout");
- break;
- }
- }
- println!();
-
- socket.disconnect();
-
- let wait_end = current_millis() + 5 * 1000;
- while current_millis() < wait_end {
- socket.work();
- }
- }
-}
diff --git a/examples-esp32s2/examples/dhcp.rs b/examples-esp32s2/examples/dhcp.rs
index 3993e998..23ebd19b 100644
--- a/examples-esp32s2/examples/dhcp.rs
+++ b/examples-esp32s2/examples/dhcp.rs
@@ -34,11 +34,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -48,6 +43,12 @@ fn main() -> ! {
)
.unwrap();
+ let wifi = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),
diff --git a/examples-esp32s2/examples/embassy_access_point.rs b/examples-esp32s2/examples/embassy_access_point.rs
index 3acd3e91..51aaefb8 100644
--- a/examples-esp32s2/examples/embassy_access_point.rs
+++ b/examples-esp32s2/examples/embassy_access_point.rs
@@ -54,7 +54,8 @@ fn main() -> ! {
)
.unwrap();
- let (wifi_interface, controller) = esp_wifi::wifi::new(WifiMode::Ap);
+ let wifi = peripherals.RADIO.split();
+ let (wifi_interface, controller) = esp_wifi::wifi::new_with_mode(wifi, WifiMode::Ap);
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
embassy::init(&clocks, timer_group0.timer0);
@@ -84,7 +85,7 @@ fn main() -> ! {
}
#[embassy_executor::task]
-async fn connection(mut controller: WifiController) {
+async fn connection(mut controller: WifiController<'static>) {
println!("start connection task");
println!("Device capabilities: {:?}", controller.get_capabilities());
loop {
@@ -110,12 +111,12 @@ async fn connection(mut controller: WifiController) {
}
#[embassy_executor::task]
-async fn net_task(stack: &'static Stack) {
+async fn net_task(stack: &'static Stack>) {
stack.run().await
}
#[embassy_executor::task]
-async fn task(stack: &'static Stack) {
+async fn task(stack: &'static Stack>) {
let mut rx_buffer = [0; 4096];
let mut tx_buffer = [0; 4096];
diff --git a/examples-esp32s2/examples/embassy_dhcp.rs b/examples-esp32s2/examples/embassy_dhcp.rs
index 13bb7df3..2808aed6 100644
--- a/examples-esp32s2/examples/embassy_dhcp.rs
+++ b/examples-esp32s2/examples/embassy_dhcp.rs
@@ -56,7 +56,8 @@ fn main() -> ! {
)
.unwrap();
- let (wifi_interface, controller) = esp_wifi::wifi::new(WifiMode::Sta);
+ let wifi = peripherals.RADIO.split();
+ let (wifi_interface, controller) = esp_wifi::wifi::new_with_mode(wifi, WifiMode::Sta);
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
embassy::init(&clocks, timer_group0.timer0);
@@ -82,7 +83,7 @@ fn main() -> ! {
}
#[embassy_executor::task]
-async fn connection(mut controller: WifiController) {
+async fn connection(mut controller: WifiController<'static>) {
println!("start connection task");
println!("Device capabilities: {:?}", controller.get_capabilities());
loop {
@@ -118,12 +119,12 @@ async fn connection(mut controller: WifiController) {
}
#[embassy_executor::task]
-async fn net_task(stack: &'static Stack) {
+async fn net_task(stack: &'static Stack>) {
stack.run().await
}
#[embassy_executor::task]
-async fn task(stack: &'static Stack) {
+async fn task(stack: &'static Stack>) {
let mut rx_buffer = [0; 4096];
let mut tx_buffer = [0; 4096];
diff --git a/examples-esp32s2/examples/embassy_esp_now.rs b/examples-esp32s2/examples/embassy_esp_now.rs
index d1c2f4e8..5197d2b7 100644
--- a/examples-esp32s2/examples/embassy_esp_now.rs
+++ b/examples-esp32s2/examples/embassy_esp_now.rs
@@ -22,7 +22,7 @@ use hal::{embassy, peripherals::Peripherals, prelude::*, timer::TimerGroup, Rtc}
use hal::system::SystemExt;
#[embassy_executor::task]
-async fn run(mut esp_now: EspNow) {
+async fn run(mut esp_now: EspNow<'static>) {
let mut ticker = Ticker::every(Duration::from_secs(5));
loop {
let res = select(ticker.next(), async {
@@ -76,7 +76,8 @@ fn main() -> ! {
)
.unwrap();
- let esp_now = esp_wifi::esp_now::esp_now().initialize().unwrap();
+ let wifi = peripherals.RADIO.split();
+ let esp_now = esp_wifi::esp_now::EspNow::new(wifi).unwrap();
println!("esp-now version {}", esp_now.get_version().unwrap());
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
diff --git a/examples-esp32s2/examples/esp_now.rs b/examples-esp32s2/examples/esp_now.rs
index 108b9835..df018b19 100644
--- a/examples-esp32s2/examples/esp_now.rs
+++ b/examples-esp32s2/examples/esp_now.rs
@@ -31,7 +31,8 @@ fn main() -> ! {
)
.unwrap();
- let mut esp_now = esp_wifi::esp_now::esp_now().initialize().unwrap();
+ let wifi = peripherals.RADIO.split();
+ let mut esp_now = esp_wifi::esp_now::EspNow::new(wifi).unwrap();
println!("esp-now version {}", esp_now.get_version().unwrap());
diff --git a/examples-esp32s2/examples/static_ip.rs b/examples-esp32s2/examples/static_ip.rs
index 0481aa8c..91c3ccc6 100644
--- a/examples-esp32s2/examples/static_ip.rs
+++ b/examples-esp32s2/examples/static_ip.rs
@@ -37,11 +37,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -51,6 +46,12 @@ fn main() -> ! {
)
.unwrap();
+ let wifi = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),
diff --git a/examples-esp32s3/examples/access_point.rs b/examples-esp32s3/examples/access_point.rs
index 041dedf1..c1b6b287 100644
--- a/examples-esp32s3/examples/access_point.rs
+++ b/examples-esp32s3/examples/access_point.rs
@@ -34,11 +34,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Ap, &mut socket_set_entries);
- let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -48,6 +43,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, radio.0, WifiMode::Ap, &mut socket_set_entries);
+ let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::AccessPoint(AccessPointConfiguration {
ssid: "esp-wifi".into(),
..Default::default()
diff --git a/examples-esp32s3/examples/ble.rs b/examples-esp32s3/examples/ble.rs
index 8e6c274d..50810491 100644
--- a/examples-esp32s3/examples/ble.rs
+++ b/examples-esp32s3/examples/ble.rs
@@ -40,12 +40,14 @@ fn main() -> ! {
)
.unwrap();
+ let (_, mut bluetooth) = peripherals.RADIO.split();
+
let button = examples_util::boot_button!(peripherals);
let mut debounce_cnt = 500;
loop {
- let connector = BleConnector {};
+ let connector = BleConnector::new(&mut bluetooth);
let hci = HciConnector::new(connector, esp_wifi::current_millis);
let mut ble = Ble::new(&hci);
diff --git a/examples-esp32s3/examples/coex.rs b/examples-esp32s3/examples/coex.rs
index f162f9fe..1f9409d4 100644
--- a/examples-esp32s3/examples/coex.rs
+++ b/examples-esp32s3/examples/coex.rs
@@ -44,11 +44,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -58,6 +53,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, bluetooth) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),
@@ -109,7 +110,7 @@ fn main() -> ! {
}
}
- let connector = BleConnector {};
+ let connector = BleConnector::new(bluetooth);
let hci = HciConnector::new(connector, esp_wifi::current_millis);
let mut ble = Ble::new(&hci);
diff --git a/examples-esp32s3/examples/dhcp.rs b/examples-esp32s3/examples/dhcp.rs
index 3993e998..d235412a 100644
--- a/examples-esp32s3/examples/dhcp.rs
+++ b/examples-esp32s3/examples/dhcp.rs
@@ -34,11 +34,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -48,6 +43,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),
diff --git a/examples-esp32s3/examples/embassy_access_point.rs b/examples-esp32s3/examples/embassy_access_point.rs
index 3acd3e91..629fd4de 100644
--- a/examples-esp32s3/examples/embassy_access_point.rs
+++ b/examples-esp32s3/examples/embassy_access_point.rs
@@ -54,7 +54,8 @@ fn main() -> ! {
)
.unwrap();
- let (wifi_interface, controller) = esp_wifi::wifi::new(WifiMode::Ap);
+ let (wifi, _) = peripherals.RADIO.split();
+ let (wifi_interface, controller) = esp_wifi::wifi::new_with_mode(wifi, WifiMode::Ap);
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
embassy::init(&clocks, timer_group0.timer0);
@@ -84,7 +85,7 @@ fn main() -> ! {
}
#[embassy_executor::task]
-async fn connection(mut controller: WifiController) {
+async fn connection(mut controller: WifiController<'static>) {
println!("start connection task");
println!("Device capabilities: {:?}", controller.get_capabilities());
loop {
@@ -110,12 +111,12 @@ async fn connection(mut controller: WifiController) {
}
#[embassy_executor::task]
-async fn net_task(stack: &'static Stack) {
+async fn net_task(stack: &'static Stack>) {
stack.run().await
}
#[embassy_executor::task]
-async fn task(stack: &'static Stack) {
+async fn task(stack: &'static Stack>) {
let mut rx_buffer = [0; 4096];
let mut tx_buffer = [0; 4096];
diff --git a/examples-esp32s3/examples/embassy_dhcp.rs b/examples-esp32s3/examples/embassy_dhcp.rs
index 13bb7df3..8c32337f 100644
--- a/examples-esp32s3/examples/embassy_dhcp.rs
+++ b/examples-esp32s3/examples/embassy_dhcp.rs
@@ -56,7 +56,8 @@ fn main() -> ! {
)
.unwrap();
- let (wifi_interface, controller) = esp_wifi::wifi::new(WifiMode::Sta);
+ let (wifi, _) = peripherals.RADIO.split();
+ let (wifi_interface, controller) = esp_wifi::wifi::new_with_mode(wifi, WifiMode::Sta);
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
embassy::init(&clocks, timer_group0.timer0);
@@ -82,7 +83,7 @@ fn main() -> ! {
}
#[embassy_executor::task]
-async fn connection(mut controller: WifiController) {
+async fn connection(mut controller: WifiController<'static>) {
println!("start connection task");
println!("Device capabilities: {:?}", controller.get_capabilities());
loop {
@@ -118,12 +119,12 @@ async fn connection(mut controller: WifiController) {
}
#[embassy_executor::task]
-async fn net_task(stack: &'static Stack) {
+async fn net_task(stack: &'static Stack>) {
stack.run().await
}
#[embassy_executor::task]
-async fn task(stack: &'static Stack) {
+async fn task(stack: &'static Stack>) {
let mut rx_buffer = [0; 4096];
let mut tx_buffer = [0; 4096];
diff --git a/examples-esp32s3/examples/embassy_esp_now.rs b/examples-esp32s3/examples/embassy_esp_now.rs
index d1c2f4e8..feec4976 100644
--- a/examples-esp32s3/examples/embassy_esp_now.rs
+++ b/examples-esp32s3/examples/embassy_esp_now.rs
@@ -22,7 +22,7 @@ use hal::{embassy, peripherals::Peripherals, prelude::*, timer::TimerGroup, Rtc}
use hal::system::SystemExt;
#[embassy_executor::task]
-async fn run(mut esp_now: EspNow) {
+async fn run(mut esp_now: EspNow<'static>) {
let mut ticker = Ticker::every(Duration::from_secs(5));
loop {
let res = select(ticker.next(), async {
@@ -76,7 +76,8 @@ fn main() -> ! {
)
.unwrap();
- let esp_now = esp_wifi::esp_now::esp_now().initialize().unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let esp_now = EspNow::new(wifi).unwrap();
println!("esp-now version {}", esp_now.get_version().unwrap());
let timer_group0 = TimerGroup::new(peripherals.TIMG0, &clocks);
diff --git a/examples-esp32s3/examples/esp_now.rs b/examples-esp32s3/examples/esp_now.rs
index 108b9835..97f63cda 100644
--- a/examples-esp32s3/examples/esp_now.rs
+++ b/examples-esp32s3/examples/esp_now.rs
@@ -31,7 +31,8 @@ fn main() -> ! {
)
.unwrap();
- let mut esp_now = esp_wifi::esp_now::esp_now().initialize().unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let mut esp_now = esp_wifi::esp_now::EspNow::new(wifi).unwrap();
println!("esp-now version {}", esp_now.get_version().unwrap());
diff --git a/examples-esp32s3/examples/static_ip.rs b/examples-esp32s3/examples/static_ip.rs
index 0481aa8c..afda203e 100644
--- a/examples-esp32s3/examples/static_ip.rs
+++ b/examples-esp32s3/examples/static_ip.rs
@@ -37,11 +37,6 @@ fn main() -> ! {
let clocks = examples_util::clocks!(system);
examples_util::rtc!(peripherals);
- let mut socket_set_entries: [SocketStorage; 3] = Default::default();
- let (iface, device, mut controller, sockets) =
- create_network_interface(WifiMode::Sta, &mut socket_set_entries);
- let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
-
let timer = examples_util::timer!(peripherals, clocks);
initialize(
timer,
@@ -51,6 +46,12 @@ fn main() -> ! {
)
.unwrap();
+ let (wifi, _) = peripherals.RADIO.split();
+ let mut socket_set_entries: [SocketStorage; 3] = Default::default();
+ let (iface, device, mut controller, sockets) =
+ create_network_interface(wifi, WifiMode::Sta, &mut socket_set_entries);
+ let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
+
let client_config = Configuration::Client(ClientConfiguration {
ssid: SSID.into(),
password: PASSWORD.into(),