Skip to content

Commit

Permalink
Make embedded svc really optional (esp-rs#429)
Browse files Browse the repository at this point in the history
* Make embedded-svc really optional

* Update README.md

* CHANGELOG.md entry
  • Loading branch information
bjoernQ committed May 24, 2024
1 parent fc03ae8 commit ed9f9b6
Show file tree
Hide file tree
Showing 26 changed files with 1,125 additions and 143 deletions.
4 changes: 3 additions & 1 deletion esp-wifi/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ fugit.workspace = true
heapless = { workspace = true, default-features = false }
num-derive = { workspace = true }
num-traits = { workspace = true, default-features = false }
no-std-net = { workspace = true, optional = true }
esp-wifi-sys = { version = "0.3.0", path = "../esp-wifi-sys" }
embassy-sync = { workspace = true, optional = true }
embassy-futures = { workspace = true, optional = true }
Expand Down Expand Up @@ -115,7 +116,8 @@ dump-packets = []
smoltcp = [ "dep:smoltcp" ]
utils = [ "smoltcp" ]
enumset = []
wifi = [ "dep:enumset", "dep:embedded-svc" ]
wifi = [ "dep:enumset", "dep:no-std-net" ]
embedded-svc = [ "dep:embedded-svc" ]
ble = [ "esp32-hal?/bluetooth" ]
phy-enable-usb = []
ps-min-modem = []
Expand Down
1 change: 1 addition & 0 deletions esp-wifi/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@ Don't use this feature if you are _not_ using USB-SERIAL-JTAG as it might reduce
| ps-max-modem | Enable maximum modem sleep. Only affects STA mode |
| log | Route log output to the `log` crate |
| defmt | Add `defmt::Format` implementation and output logs via `defmt` |
| embedded-svc | Implement the embedded-svc Wifi trait |

Note that not all features are available on every MCU. For example, `ble` (and thus, `coex`) is not available on ESP32-S2.

Expand Down
23 changes: 12 additions & 11 deletions esp-wifi/automated-tests/open_access_point.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ mod examples_util;
use examples_util::hal;

use embedded_io::*;
use embedded_svc::ipv4::Interface;
use embedded_svc::wifi::{AccessPointConfiguration, Configuration, Wifi};
use esp_wifi::wifi::{AccessPointConfiguration, Configuration};

use esp_backtrace as _;
use esp_println::println;
Expand Down Expand Up @@ -64,16 +63,18 @@ fn main() -> ! {
println!("{:?}", controller.get_capabilities());

wifi_stack
.set_iface_configuration(&embedded_svc::ipv4::Configuration::Client(
embedded_svc::ipv4::ClientConfiguration::Fixed(embedded_svc::ipv4::ClientSettings {
ip: embedded_svc::ipv4::Ipv4Addr::from(parse_ip("192.168.2.1")),
subnet: embedded_svc::ipv4::Subnet {
gateway: embedded_svc::ipv4::Ipv4Addr::from(parse_ip("192.168.2.1")),
mask: embedded_svc::ipv4::Mask(24),
.set_iface_configuration(&esp_wifi::wifi::ipv4::Configuration::Client(
esp_wifi::wifi::ipv4::ClientConfiguration::Fixed(
esp_wifi::wifi::ipv4::ClientSettings {
ip: esp_wifi::wifi::ipv4::Ipv4Addr::from(parse_ip("192.168.2.1")),
subnet: esp_wifi::wifi::ipv4::Subnet {
gateway: esp_wifi::wifi::ipv4::Ipv4Addr::from(parse_ip("192.168.2.1")),
mask: esp_wifi::wifi::ipv4::Mask(24),
},
dns: None,
secondary_dns: None,
},
dns: None,
secondary_dns: None,
}),
),
))
.unwrap();

Expand Down
3 changes: 2 additions & 1 deletion esp-wifi/automated-tests/test_ble.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@ fn main() -> ! {
},],
},]);

let mut srv = AttributeServer::new(&mut ble, &mut gatt_attributes);
let mut rng = bleps::no_rng::NoRng;
let mut srv = AttributeServer::new(&mut ble, &mut gatt_attributes, &mut rng);

loop {
match srv.do_work_with_notification(None) {
Expand Down
23 changes: 12 additions & 11 deletions esp-wifi/automated-tests/test_connect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ mod examples_util;
use examples_util::hal;

use embedded_io::*;
use embedded_svc::ipv4::Interface;
use embedded_svc::wifi::{AccessPointInfo, AuthMethod, ClientConfiguration, Configuration, Wifi};
use esp_wifi::wifi::{AccessPointInfo, AuthMethod, ClientConfiguration, Configuration};

use esp_backtrace as _;
use esp_println::println;
Expand Down Expand Up @@ -136,16 +135,18 @@ fn main() -> ! {
println!("Setting static IP {}", STATIC_IP);

wifi_stack
.set_iface_configuration(&embedded_svc::ipv4::Configuration::Client(
embedded_svc::ipv4::ClientConfiguration::Fixed(embedded_svc::ipv4::ClientSettings {
ip: embedded_svc::ipv4::Ipv4Addr::from(parse_ip(STATIC_IP)),
subnet: embedded_svc::ipv4::Subnet {
gateway: embedded_svc::ipv4::Ipv4Addr::from(parse_ip(GATEWAY_IP)),
mask: embedded_svc::ipv4::Mask(24),
.set_iface_configuration(&esp_wifi::wifi::ipv4::Configuration::Client(
esp_wifi::wifi::ipv4::ClientConfiguration::Fixed(
esp_wifi::wifi::ipv4::ClientSettings {
ip: esp_wifi::wifi::ipv4::Ipv4Addr::from(parse_ip(STATIC_IP)),
subnet: esp_wifi::wifi::ipv4::Subnet {
gateway: esp_wifi::wifi::ipv4::Ipv4Addr::from(parse_ip(GATEWAY_IP)),
mask: esp_wifi::wifi::ipv4::Mask(24),
},
dns: None,
secondary_dns: None,
},
dns: None,
secondary_dns: None,
}),
),
))
.unwrap();

Expand Down
23 changes: 12 additions & 11 deletions esp-wifi/examples/access_point.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ mod examples_util;
use examples_util::hal;

use embedded_io::*;
use embedded_svc::ipv4::Interface;
use embedded_svc::wifi::{AccessPointConfiguration, Configuration, Wifi};
use esp_wifi::wifi::{AccessPointConfiguration, Configuration};

use esp_backtrace as _;
use esp_println::{print, println};
Expand Down Expand Up @@ -64,16 +63,18 @@ fn main() -> ! {
println!("{:?}", controller.get_capabilities());

wifi_stack
.set_iface_configuration(&embedded_svc::ipv4::Configuration::Client(
embedded_svc::ipv4::ClientConfiguration::Fixed(embedded_svc::ipv4::ClientSettings {
ip: embedded_svc::ipv4::Ipv4Addr::from(parse_ip("192.168.2.1")),
subnet: embedded_svc::ipv4::Subnet {
gateway: embedded_svc::ipv4::Ipv4Addr::from(parse_ip("192.168.2.1")),
mask: embedded_svc::ipv4::Mask(24),
.set_iface_configuration(&esp_wifi::wifi::ipv4::Configuration::Client(
esp_wifi::wifi::ipv4::ClientConfiguration::Fixed(
esp_wifi::wifi::ipv4::ClientSettings {
ip: esp_wifi::wifi::ipv4::Ipv4Addr::from(parse_ip("192.168.2.1")),
subnet: esp_wifi::wifi::ipv4::Subnet {
gateway: esp_wifi::wifi::ipv4::Ipv4Addr::from(parse_ip("192.168.2.1")),
mask: esp_wifi::wifi::ipv4::Mask(24),
},
dns: None,
secondary_dns: None,
},
dns: None,
secondary_dns: None,
}),
),
))
.unwrap();

Expand Down
23 changes: 12 additions & 11 deletions esp-wifi/examples/access_point_with_sta.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ mod examples_util;
use examples_util::hal;

use embedded_io::*;
use embedded_svc::ipv4::Interface;
use embedded_svc::wifi::{AccessPointConfiguration, ClientConfiguration, Configuration, Wifi};
use esp_wifi::wifi::{AccessPointConfiguration, ClientConfiguration, Configuration};

use esp_backtrace as _;
use esp_println::{print, println};
Expand Down Expand Up @@ -93,16 +92,18 @@ fn main() -> ! {
println!("{:?}", controller.get_capabilities());

wifi_ap_stack
.set_iface_configuration(&embedded_svc::ipv4::Configuration::Client(
embedded_svc::ipv4::ClientConfiguration::Fixed(embedded_svc::ipv4::ClientSettings {
ip: embedded_svc::ipv4::Ipv4Addr::from(parse_ip("192.168.2.1")),
subnet: embedded_svc::ipv4::Subnet {
gateway: embedded_svc::ipv4::Ipv4Addr::from(parse_ip("192.168.2.1")),
mask: embedded_svc::ipv4::Mask(24),
.set_iface_configuration(&esp_wifi::wifi::ipv4::Configuration::Client(
esp_wifi::wifi::ipv4::ClientConfiguration::Fixed(
esp_wifi::wifi::ipv4::ClientSettings {
ip: esp_wifi::wifi::ipv4::Ipv4Addr::from(parse_ip("192.168.2.1")),
subnet: esp_wifi::wifi::ipv4::Subnet {
gateway: esp_wifi::wifi::ipv4::Ipv4Addr::from(parse_ip("192.168.2.1")),
mask: esp_wifi::wifi::ipv4::Mask(24),
},
dns: None,
secondary_dns: None,
},
dns: None,
secondary_dns: None,
}),
),
))
.unwrap();

Expand Down
3 changes: 1 addition & 2 deletions esp-wifi/examples/bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ mod examples_util;
use examples_util::hal;

use embedded_io::*;
use embedded_svc::ipv4::Interface;
use embedded_svc::wifi::{AccessPointInfo, ClientConfiguration, Configuration, Wifi};
use esp_wifi::wifi::{AccessPointInfo, ClientConfiguration, Configuration};

use esp_backtrace as _;
use esp_println::println;
Expand Down
3 changes: 2 additions & 1 deletion esp-wifi/examples/ble.rs
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,8 @@ fn main() -> ! {
],
},]);

let mut srv = AttributeServer::new(&mut ble, &mut gatt_attributes);
let mut rng = bleps::no_rng::NoRng;
let mut srv = AttributeServer::new(&mut ble, &mut gatt_attributes, &mut rng);

loop {
let mut notification = None;
Expand Down
3 changes: 1 addition & 2 deletions esp-wifi/examples/coex.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ use esp_wifi::{
};

use embedded_io::*;
use embedded_svc::ipv4::Interface;
use embedded_svc::wifi::{ClientConfiguration, Configuration, Wifi};
use esp_wifi::wifi::{ClientConfiguration, Configuration};

use esp_backtrace as _;
use esp_println::{print, println};
Expand Down
3 changes: 1 addition & 2 deletions esp-wifi/examples/dhcp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ mod examples_util;
use examples_util::hal;

use embedded_io::*;
use embedded_svc::ipv4::Interface;
use embedded_svc::wifi::{AccessPointInfo, ClientConfiguration, Configuration, Wifi};
use esp_wifi::wifi::{AccessPointInfo, ClientConfiguration, Configuration};

use esp_backtrace as _;
use esp_println::{print, println};
Expand Down
2 changes: 1 addition & 1 deletion esp-wifi/examples/embassy_access_point.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ use examples_util::hal;

use embassy_executor::Spawner;
use embassy_time::{Duration, Timer};
use embedded_svc::wifi::{AccessPointConfiguration, Configuration, Wifi};
use esp_backtrace as _;
use esp_println::{print, println};
use esp_wifi::wifi::{AccessPointConfiguration, Configuration};
use esp_wifi::wifi::{WifiApDevice, WifiController, WifiDevice, WifiEvent, WifiState};
use esp_wifi::{initialize, EspWifiInitFor};
use hal::clock::ClockControl;
Expand Down
2 changes: 1 addition & 1 deletion esp-wifi/examples/embassy_access_point_with_sta.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ use examples_util::hal;

use embassy_executor::Spawner;
use embassy_time::{Duration, Timer};
use embedded_svc::wifi::{AccessPointConfiguration, ClientConfiguration, Configuration, Wifi};
use esp_backtrace as _;
use esp_println::{print, println};
use esp_wifi::wifi::{AccessPointConfiguration, ClientConfiguration, Configuration};
use esp_wifi::wifi::{
WifiApDevice, WifiController, WifiDevice, WifiEvent, WifiStaDevice, WifiState,
};
Expand Down
2 changes: 1 addition & 1 deletion esp-wifi/examples/embassy_bench.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ mod examples_util;
use examples_util::hal;

use embassy_time::{with_timeout, Duration, Timer};
use embedded_svc::wifi::{ClientConfiguration, Configuration, Wifi};
use esp_backtrace as _;
use esp_println::println;
use esp_wifi::wifi::{ClientConfiguration, Configuration};
use esp_wifi::wifi::{WifiApDevice, WifiController, WifiDevice, WifiEvent, WifiState};
use esp_wifi::{initialize, EspWifiInitFor};
use hal::clock::ClockControl;
Expand Down
6 changes: 5 additions & 1 deletion esp-wifi/examples/embassy_ble.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ async fn main(_spawner: Spawner) -> ! {
println!("Connector created");

let pin_ref = RefCell::new(button);
let pin_ref = &pin_ref;

loop {
println!("{:?}", ble.init().await);
Expand Down Expand Up @@ -137,9 +138,12 @@ async fn main(_spawner: Spawner) -> ! {
],
},]);

let mut srv = AttributeServer::new(&mut ble, &mut gatt_attributes);
let mut rng = bleps::no_rng::NoRng;
let mut srv = AttributeServer::new(&mut ble, &mut gatt_attributes, &mut rng);

let counter = RefCell::new(0u8);
let counter = &counter;

let mut notifier = async || {
// TODO how to check if notifications are enabled for the characteristic?
// maybe pass something into the closure which just can query the characterisic value
Expand Down
2 changes: 1 addition & 1 deletion esp-wifi/examples/embassy_dhcp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ mod examples_util;
use examples_util::hal;

use embassy_time::{Duration, Timer};
use embedded_svc::wifi::{ClientConfiguration, Configuration, Wifi};
use esp_backtrace as _;
use esp_println::println;
use esp_wifi::wifi::{ClientConfiguration, Configuration};
use esp_wifi::wifi::{WifiController, WifiDevice, WifiEvent, WifiStaDevice, WifiState};
use esp_wifi::{initialize, EspWifiInitFor};
use hal::clock::ClockControl;
Expand Down
23 changes: 12 additions & 11 deletions esp-wifi/examples/static_ip.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,7 @@ mod examples_util;
use examples_util::hal;

use embedded_io::*;
use embedded_svc::ipv4::Interface;
use embedded_svc::wifi::{AccessPointInfo, ClientConfiguration, Configuration, Wifi};
use esp_wifi::wifi::{AccessPointInfo, ClientConfiguration, Configuration};

use esp_backtrace as _;
use esp_println::{print, println};
Expand Down Expand Up @@ -99,16 +98,18 @@ fn main() -> ! {
println!("Setting static IP {}", STATIC_IP);

wifi_stack
.set_iface_configuration(&embedded_svc::ipv4::Configuration::Client(
embedded_svc::ipv4::ClientConfiguration::Fixed(embedded_svc::ipv4::ClientSettings {
ip: embedded_svc::ipv4::Ipv4Addr::from(parse_ip(STATIC_IP)),
subnet: embedded_svc::ipv4::Subnet {
gateway: embedded_svc::ipv4::Ipv4Addr::from(parse_ip(GATEWAY_IP)),
mask: embedded_svc::ipv4::Mask(24),
.set_iface_configuration(&esp_wifi::wifi::ipv4::Configuration::Client(
esp_wifi::wifi::ipv4::ClientConfiguration::Fixed(
esp_wifi::wifi::ipv4::ClientSettings {
ip: esp_wifi::wifi::ipv4::Ipv4Addr::from(parse_ip(STATIC_IP)),
subnet: esp_wifi::wifi::ipv4::Subnet {
gateway: esp_wifi::wifi::ipv4::Ipv4Addr::from(parse_ip(GATEWAY_IP)),
mask: esp_wifi::wifi::ipv4::Mask(24),
},
dns: None,
secondary_dns: None,
},
dns: None,
secondary_dns: None,
}),
),
))
.unwrap();

Expand Down
14 changes: 7 additions & 7 deletions esp-wifi/src/ble/npl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1040,7 +1040,7 @@ pub(crate) fn ble_init() {

ble_os_adapter_chip_specific::disable_sleep_mode();

let res = esp_register_npl_funcs(&G_NPL_FUNCS as *const npl_funcs_t);
let res = esp_register_npl_funcs(core::ptr::addr_of!(G_NPL_FUNCS));
if res != 0 {
panic!("esp_register_npl_funcs returned {}", res);
}
Expand Down Expand Up @@ -1180,8 +1180,8 @@ fn os_msys_init() {

let rc = r_mem_init_mbuf_pool(
OS_MSYS_INIT_1_DATA as *const c_void,
&OS_MSYS_INIT_1_MEMPOOL,
&OS_MSYS_INIT_1_MBUF_POOL,
addr_of!(OS_MSYS_INIT_1_MEMPOOL),
addr_of!(OS_MSYS_INIT_1_MBUF_POOL),
OS_MSYS_1_BLOCK_COUNT,
SYSINIT_MSYS_1_MEMBLOCK_SIZE,
MSYS1 as *const _ as *const u8,
Expand All @@ -1190,15 +1190,15 @@ fn os_msys_init() {
panic!("r_mem_init_mbuf_pool failed");
}

let rc = r_os_msys_register(&OS_MSYS_INIT_1_MBUF_POOL);
let rc = r_os_msys_register(addr_of!(OS_MSYS_INIT_1_MBUF_POOL));
if rc != 0 {
panic!("r_os_msys_register failed");
}

let rc = r_mem_init_mbuf_pool(
OS_MSYS_INIT_2_DATA as *const c_void,
&OS_MSYS_INIT_2_MEMPOOL,
&OS_MSYS_INIT_2_MBUF_POOL,
addr_of!(OS_MSYS_INIT_2_MEMPOOL),
addr_of!(OS_MSYS_INIT_2_MBUF_POOL),
OS_MSYS_2_BLOCK_COUNT,
SYSINIT_MSYS_2_MEMBLOCK_SIZE,
MSYS2 as *const _ as *const u8,
Expand All @@ -1207,7 +1207,7 @@ fn os_msys_init() {
panic!("r_mem_init_mbuf_pool failed");
}

let rc = r_os_msys_register(&OS_MSYS_INIT_2_MBUF_POOL);
let rc = r_os_msys_register(addr_of!(OS_MSYS_INIT_2_MBUF_POOL));
if rc != 0 {
panic!("r_os_msys_register failed");
}
Expand Down
4 changes: 3 additions & 1 deletion esp-wifi/src/common_adapter/mod.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
use core::ptr::addr_of;

use crate::binary::include::esp_event_base_t;
use crate::binary::include::esp_timer_create_args_t;
use crate::binary::include::esp_timer_get_time;
Expand Down Expand Up @@ -266,7 +268,7 @@ pub unsafe extern "C" fn pp_printf(s: *const u8, args: ...) {
// #define ESP_EVENT_DEFINE_BASE(id) esp_event_base_t id = #id
static mut EVT: i8 = 0;
#[no_mangle]
static mut WIFI_EVENT: esp_event_base_t = unsafe { &EVT };
static mut WIFI_EVENT: esp_event_base_t = unsafe { addr_of!(EVT) };

// stuff needed by wpa-supplicant
#[no_mangle]
Expand Down
Loading

0 comments on commit ed9f9b6

Please sign in to comment.