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(),