Skip to content

Commit 03458c3

Browse files
authored
Merge pull request #73 from AnthonyGrondin/feat/update-esp-hal
Update esp-hal to 1.0.0-beta.0, esp-wifi to 0.13.0
2 parents 1806f8f + 8607fb0 commit 03458c3

16 files changed

+334
-433
lines changed

Cargo.toml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ opt-level = "z"
2424
opt-level = 3
2525

2626
[dependencies]
27-
esp-hal = { version = "0.23.0", optional = true }
28-
esp-backtrace = { version = "0.15.0", optional = true, features = [
27+
esp-hal = { version = "1.0.0-beta.0", optional = true }
28+
esp-backtrace = { version = "0.15.1", optional = true, features = [
2929
"panic-handler",
3030
"println",
3131
"exception-handler",
3232
] }
33-
esp-println = { version = "0.13.0", optional = true, features = ["log"] }
34-
esp-hal-embassy = { version = "0.6.0", optional = true }
33+
esp-println = { version = "0.13.1", optional = true, features = ["log"] }
34+
esp-hal-embassy = { version = "0.7.0", optional = true }
3535

3636
embassy-time = { version = "0.4.0", optional = true }
3737
embassy-executor = { version = "0.7", package = "embassy-executor", features = [
@@ -44,9 +44,8 @@ embassy-net = { version = "0.6.0", features = [
4444
"medium-ethernet",
4545
], optional = true }
4646

47-
esp-wifi = { version = "0.12.0", optional = true, features = [
47+
esp-wifi = { version = "0.13.0", optional = true, features = [
4848
"sys-logs",
49-
"utils",
5049
"wifi",
5150
] }
5251
blocking-network-stack = { git = "https://github.com/bjoernQ/blocking-network-stack", rev = "b3ecefc222d8806edd221f266999ca339c52d34e" }
@@ -73,7 +72,7 @@ edge-http = { version = "0.5.0", optional = true }
7372
edge-nal = { version = "0.5.0", optional = true }
7473
edge-nal-embassy = { version = "0.5.0", optional = true }
7574
cfg-if = "1.0.0"
76-
esp-alloc = { version = "0.6.0", optional = true }
75+
esp-alloc = { version = "0.7.0", optional = true }
7776
enumset = { version = "1", default-features = false }
7877

7978
[target.'cfg(target_os = "espidf")'.dependencies]
@@ -104,6 +103,7 @@ examples = [
104103
"esp-backtrace",
105104
"esp-println",
106105
"esp-wifi",
106+
"esp-wifi/smoltcp",
107107
"smoltcp",
108108
"esp-alloc",
109109
]

esp-mbedtls-sys/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ embuild = "0.33"
1919
# For malloc/free
2020
# TODO: Replace with `esp-alloc` once `esp-alloc` starts to provide `malloc` and `free` in future
2121
# ... or switch to our own `mbedtls_malloc/free`
22-
esp-wifi = { version = "0.12.0", default-features = false, optional = true }
22+
esp-wifi = { version = "0.13.0", default-features = false, optional = true }
2323

2424
# ESP-IDF: The mbedtls lib distributed with ESP-IDF is used
2525
[target.'cfg(target_os = "espidf")'.dependencies]

esp-mbedtls/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ log = { version = "0.4.17", default-features = false }
1414
enumset = { version = "1", default-features = false }
1515
embedded-io = { version = "0.6.1" }
1616
embedded-io-async = { version = "0.6.0", optional = true }
17-
esp-hal = { version = "0.23.0", optional = true }
17+
esp-hal = { version = "1.0.0-beta.0", features = ["unstable"], optional = true }
1818
# For malloc/free
1919
# TODO: Replace with `esp-alloc` once `esp-alloc` starts to provide `malloc` and `free` in future
2020
# ... or switch to our own `mbedtls_malloc/free`
21-
esp-wifi = { version = "0.12.0", default-features = false, optional = true }
21+
esp-wifi = { version = "0.13.0", default-features = false, optional = true }
2222
cfg-if = "1.0.0"
2323
edge-nal = { version = "0.5.0", optional = true }
2424
critical-section = "1.1.3"

examples/async_client.rs

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ use esp_mbedtls::{Tls, X509};
2525
use esp_println::logger::init_logger;
2626
use esp_println::{print, println};
2727
use esp_wifi::wifi::{
28-
ClientConfiguration, Configuration, WifiController, WifiDevice, WifiEvent, WifiStaDevice,
29-
WifiState,
28+
ClientConfiguration, Configuration, WifiController, WifiDevice, WifiEvent, WifiState,
3029
};
3130
use esp_wifi::{init, EspWifiController};
3231
use hal::{clock::CpuClock, rng::Rng, timer::timg::TimerGroup};
@@ -61,29 +60,22 @@ cfg_if::cfg_if! {
6160
async fn main(spawner: Spawner) -> ! {
6261
init_logger(log::LevelFilter::Info);
6362

64-
let peripherals = esp_hal::init({
65-
let mut config = esp_hal::Config::default();
66-
config.cpu_clock = CpuClock::max();
67-
config
68-
});
63+
let config = esp_hal::Config::default().with_cpu_clock(CpuClock::max());
64+
let peripherals = esp_hal::init(config);
6965

70-
esp_alloc::heap_allocator!(115 * 1024);
66+
esp_alloc::heap_allocator!(size: 115 * 1024);
7167

7268
let timg0 = TimerGroup::new(peripherals.TIMG0);
69+
let mut rng = Rng::new(peripherals.RNG);
7370

74-
let init = &*mk_static!(
71+
let esp_wifi_ctrl = &*mk_static!(
7572
EspWifiController<'_>,
76-
init(
77-
timg0.timer0,
78-
Rng::new(peripherals.RNG),
79-
peripherals.RADIO_CLK,
80-
)
81-
.unwrap()
73+
init(timg0.timer0, rng.clone(), peripherals.RADIO_CLK,).unwrap()
8274
);
8375

84-
let wifi = peripherals.WIFI;
85-
let (wifi_interface, controller) =
86-
esp_wifi::wifi::new_with_mode(init, wifi, WifiStaDevice).unwrap();
76+
let (controller, interfaces) = esp_wifi::wifi::new(&esp_wifi_ctrl, peripherals.WIFI).unwrap();
77+
78+
let wifi_interface = interfaces.sta;
8779

8880
cfg_if::cfg_if! {
8981
if #[cfg(feature = "esp32")] {
@@ -98,7 +90,7 @@ async fn main(spawner: Spawner) -> ! {
9890

9991
let config = Config::dhcpv4(Default::default());
10092

101-
let seed = 1234; // very random, very secure seed
93+
let seed = (rng.random() as u64) << 32 | rng.random() as u64;
10294

10395
// Init network stack
10496
let (stack, runner) = embassy_net::new(
@@ -253,6 +245,6 @@ async fn connection(mut controller: WifiController<'static>) {
253245
}
254246

255247
#[embassy_executor::task]
256-
async fn net_task(mut runner: Runner<'static, WifiDevice<'static, WifiStaDevice>>) {
248+
async fn net_task(mut runner: Runner<'static, WifiDevice<'static>>) {
257249
runner.run().await
258250
}

examples/async_server.rs

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ use esp_mbedtls::{Tls, TlsError, X509};
4545
use esp_println::logger::init_logger;
4646
use esp_println::{print, println};
4747
use esp_wifi::wifi::{
48-
ClientConfiguration, Configuration, WifiController, WifiDevice, WifiEvent, WifiStaDevice,
49-
WifiState,
48+
ClientConfiguration, Configuration, WifiController, WifiDevice, WifiEvent, WifiState,
5049
};
5150
use esp_wifi::{init, EspWifiController};
5251
use hal::{clock::CpuClock, rng::Rng, timer::timg::TimerGroup};
@@ -68,29 +67,22 @@ const PASSWORD: &str = env!("PASSWORD");
6867
async fn main(spawner: Spawner) -> ! {
6968
init_logger(log::LevelFilter::Info);
7069

71-
let peripherals = esp_hal::init({
72-
let mut config = esp_hal::Config::default();
73-
config.cpu_clock = CpuClock::max();
74-
config
75-
});
70+
let config = esp_hal::Config::default().with_cpu_clock(CpuClock::max());
71+
let peripherals = esp_hal::init(config);
7672

77-
esp_alloc::heap_allocator!(115 * 1024);
73+
esp_alloc::heap_allocator!(size: 115 * 1024);
7874

7975
let timg0 = TimerGroup::new(peripherals.TIMG0);
76+
let mut rng = Rng::new(peripherals.RNG);
8077

81-
let init = &*mk_static!(
78+
let esp_wifi_ctrl = &*mk_static!(
8279
EspWifiController<'_>,
83-
init(
84-
timg0.timer0,
85-
Rng::new(peripherals.RNG),
86-
peripherals.RADIO_CLK,
87-
)
88-
.unwrap()
80+
init(timg0.timer0, rng.clone(), peripherals.RADIO_CLK,).unwrap()
8981
);
9082

91-
let wifi = peripherals.WIFI;
92-
let (wifi_interface, controller) =
93-
esp_wifi::wifi::new_with_mode(init, wifi, WifiStaDevice).unwrap();
83+
let (controller, interfaces) = esp_wifi::wifi::new(&esp_wifi_ctrl, peripherals.WIFI).unwrap();
84+
85+
let wifi_interface = interfaces.sta;
9486

9587
cfg_if::cfg_if! {
9688
if #[cfg(feature = "esp32")] {
@@ -105,7 +97,7 @@ async fn main(spawner: Spawner) -> ! {
10597

10698
let config = Config::dhcpv4(Default::default());
10799

108-
let seed = 1234; // very random, very secure seed
100+
let seed = (rng.random() as u64) << 32 | rng.random() as u64;
109101

110102
// Init network stack
111103
let (stack, runner) = embassy_net::new(
@@ -291,6 +283,6 @@ async fn connection(mut controller: WifiController<'static>) {
291283
}
292284

293285
#[embassy_executor::task]
294-
async fn net_task(mut runner: Runner<'static, WifiDevice<'static, WifiStaDevice>>) {
286+
async fn net_task(mut runner: Runner<'static, WifiDevice<'static>>) {
295287
runner.run().await
296288
}

examples/certs/ca_cert.pem

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,20 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIFSzCCAzOgAwIBAgIUEnhwUe+pVB+2Dh0nvU/4RxtC0qowDQYJKoZIhvcNAQEL
2+
MIIDSzCCAjOgAwIBAgIUAtFs1cYQXPzsSiAx9eNPjZ6WwpUwDQYJKoZIhvcNAQEL
33
BQAwNTEaMBgGA1UEAwwRZXNwLW1iZWR0bHMubG9jYWwxFzAVBgNVBAoMDkNBIENl
4-
cnRpZmljYXRlMB4XDTIzMDcxMDIxMDY0NFoXDTI0MDcwOTIxMDY0NFowNTEaMBgG
4+
cnRpZmljYXRlMB4XDTI1MDIyODE4NTQ1OFoXDTI2MDIyODE4NTQ1OFowNTEaMBgG
55
A1UEAwwRZXNwLW1iZWR0bHMubG9jYWwxFzAVBgNVBAoMDkNBIENlcnRpZmljYXRl
6-
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA04b8Hf8MVL7XQj/wA0Im
7-
l+hhgbJr0FabcbU6XuGM3bZVgQ+Xrru6iD46EOgI9xXeas96B+zu5DQrdZ7x4j2R
8-
l9HRXo6Ul+wtkUENNzqNr5hagbtCx7VPNEwpZziydRfmPoUfYZWgIg4eiu8QvWnk
9-
21VQx8MM3SMXblXJI9gGc57RTAU8JZbpCW/CVdYUnTE/ZeTdPPzIq777k7xY9QLN
10-
ISC8YuwAjmGw9SW/gKF5gv9y3dMm7XvoTV3MNaPx3584XkHeLaMP4KEp6i1P+cMn
11-
UXzQj182QudVcf0AzCjsF4+r17NsDarpzU4zQcWOr61vMFseiHR26ejAJmG5TPBi
12-
nXyrEzCkV+qfHpRTk5u5ksn62GJvhbzvF0q7Upgju7QtKz2/5CXyyDWocs/i6X69
13-
6rcGaPNRvrwMTJAbtzoKA2ojuoeVStoN6S7zGtywfXSbL322U/GFAe7KnKo94tvV
14-
jJn+76bRInzxEDkowvlbVveWjpz/u8IyJ2DhTcsHGsY8O9/UuGV4FTTq1faomnxI
15-
BVGz5ALl9ewJez2fbtsjseZYOcB1AS39Y/X8wngS8/20OLZKd+TtN0bW8S/jg/sj
16-
h3m8Yp53Sw927oopP8miBfpPdAjhv+OSYqhnF4HQVxz8RMKz3PbGA5aCbvUGXeHw
17-
K62jEKQ6iNwv6qCABy+7ZCECAwEAAaNTMFEwHQYDVR0OBBYEFDnq4mz6ySjpfXVK
18-
WJGdGxc9TKgsMB8GA1UdIwQYMBaAFDnq4mz6ySjpfXVKWJGdGxc9TKgsMA8GA1Ud
19-
EwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBALKYWaSBji16FcpVwgYfv2Ag
20-
dQQ+mevOg3HF2R+XRHD235/QBsS2LrzOFSbtsz4bWMY7gDmwDE3sx0MWRe/OaPfN
21-
pVxx2TIYLdNSzI+gazAhqQOu4+i8MII0uuMuRsxI6gFjHAr0D+x+xH2gyOak1hQq
22-
JG1eLjEv3JQaFW2M16pN1a+oHoCk/uPhG2tegqPlps6tRpLTjUKQ+zfJrtpmCWoU
23-
K9XxaksIIZSJ6fnH13t0EvzYdkzt524dVgiEI/C8NpGT9ARXl/nlxuCoe8IHwFlI
24-
af47/WOay6PhJ5OSIfE5/Oi/B3iXtj/ssWE84ct72Gxx4xOaNkRJRymW232NLXfP
25-
QEQV0LXPT1f4j/qAv9gKqrmOCRCAB92pfZsPE2VatxqO8XdSvTu8GZvGoSrK/6GJ
26-
QXMUT3n/6ACAcTdkGnwJMfz6jDcXz+b9SAeKk22CHVl7nKV7vKYkCVkAHOxlXJh6
27-
k3yfrUy9Z0p07EFtMlejLSmbBY2TH+C7a0E4pkEu4ODQvpOZsEQjZS2yc0gfuxTv
28-
o4dJflpo3vm3V4V3794p/77jr83KHOTiiQcT1eMlhbN3q3WhkQq+TBCtHeq6D4NF
29-
x/dkPkJFjoQJn8WbMJrALIeUz97PdZjo6rdKqHaDgfZk8OIjAh3+IWbOMQs05l3A
30-
7WPtPr5ID+yRmohdBs/A
6+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmZ/fLZ7vJy0MJVNNpAc2
7+
TExin7zmSuVMKJlmqkOXpZs34AycQ3ew2kSBPH53ikna/qAKUnXJz2P/21XzBNb0
8+
aeixTqT0ABG+RG6g7gpD//XiEzjMzrl7dlWKOXCA5/nXQB43s01HPT2838lVsbJu
9+
J/y5bUHyPTuZoJEXRDuetuIr6Pw8fGr6ZraHSdJ2FWjndDcyluFAqONwa+HBJHd8
10+
QuKyb7eK0gi3EhOl356630J0dQKXEAsQdmgYRirRK3YwmqKtHpWqmau2WI6iaM+4
11+
alGIZSnsIqtE1Dp09Q64v6CDvhPF98uCuuBtpDVGIyY9WVUeDqz6WJ5vN9GGVtw7
12+
KQIDAQABo1MwUTAdBgNVHQ4EFgQUJOks4RmsqH87xDke2I2lgONnh44wHwYDVR0j
13+
BBgwFoAUJOks4RmsqH87xDke2I2lgONnh44wDwYDVR0TAQH/BAUwAwEB/zANBgkq
14+
hkiG9w0BAQsFAAOCAQEAAUsAqMDVMR3Vxen8QipBw97B6PnwoDwCOC4qCW2cbQ65
15+
RL+F53CuOPQrKDxztzk6z/DkrxkyaTRnpJkjtnpFL0+Jg5lX5LvMMckaLT4+eTXG
16+
IpN1p9QmH6paivdampMj3ahTyW1RtKQxEj2tArpy7mSGz4eopCALOGZw6xD717vQ
17+
gaOmyky24k+ZTXlGNq1pAppv5WT/CP9kj/QLfXjjSMDePaBnZFPoijuQNWWp0AP7
18+
h2E4jlPd2YLYdmxyuDCf7MYrUtpOmtzRcLa6TdEqtomqIrHkKyNO6fG+F4MWQgQK
19+
oyB3qwwIfRvoZrJ8r9IKFMtGxowVD/PMWM0hlpqWHQ==
3120
-----END CERTIFICATE-----

examples/certs/ca_key.pem

Lines changed: 26 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,28 @@
11
-----BEGIN PRIVATE KEY-----
2-
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
51-
LmBOTP1m5m96P3sSCYmHRCXdBOZHrdxV
2+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCZn98tnu8nLQwl
3+
U02kBzZMTGKfvOZK5UwomWaqQ5elmzfgDJxDd7DaRIE8fneKSdr+oApSdcnPY//b
4+
VfME1vRp6LFOpPQAEb5EbqDuCkP/9eITOMzOuXt2VYo5cIDn+ddAHjezTUc9Pbzf
5+
yVWxsm4n/LltQfI9O5mgkRdEO5624ivo/Dx8avpmtodJ0nYVaOd0NzKW4UCo43Br
6+
4cEkd3xC4rJvt4rSCLcSE6XfnrrfQnR1ApcQCxB2aBhGKtErdjCaoq0elaqZq7ZY
7+
jqJoz7hqUYhlKewiq0TUOnT1Dri/oIO+E8X3y4K64G2kNUYjJj1ZVR4OrPpYnm83
8+
0YZW3DspAgMBAAECggEAFO4F0TiX0xHNV5F9oLUV1ffLMQGiq34JbfeWV+idEsQu
9+
rODy8jMunlIafGQrg6Tzx+CEf38KN23jmB2h3h0uD/bSn0kUcCT6s+aRmNS/tnHo
10+
st84cgqtsi3Nxu0XtuMgSx1Cz/Qdmk+cua17thm97cc9+Q90whhqYgiab6KiyT4Z
11+
m9sZgN8emjkYI57NY+b4sSE2owgbn5Ow4dRhAP9NriC/Pb9DtrN+iOWZYFGgSUjv
12+
hobMZBj48ChM7krT3gxJVzGIKU/7cVB20Llq7hBLn+f9dhkTP/FCFfT9svY0OHd/
13+
jD7DJJzjpyGUfZiTC1itJzt/3ncmU0xpjujx96FC7QKBgQDJU763LI9X2YqyD7b9
14+
5fEpZ4R9y0/NrOlremYZB7dq+F8EzTju5oExYmHwMMXhbPXEdvPCOpvaOMJURP/K
15+
vP0IVYg2M8D5dIGPCqeUu8+DC6PAu2E2cb2y0ZPV1XJECpyRl4GNIcwIVHpE4EhZ
16+
ecJsGNM74OIC/skv/1s8iVDZTQKBgQDDV9d2MEevGYbMBkONRHO38I9NwA6GGH0Q
17+
MGb0GjCP3PEBk+LlSow13GryrThLJxo1rmKVPlUvMsCxWA58PSPBZ5PHCXKis1sp
18+
4vG8fGr0NyUSOlgklaPGxiFlM44OvyFRwXeCt/a2HWUaIXT85Fir380qI1PFUEdS
19+
AWQtuz7bTQKBgEhsr/cFOKvJvnM/4/yCc7cJXkhCk3rR8UaQyZnHhNwebVA0435N
20+
vbweQE0/vm/R2rfKcvY0T0y5jm7yQ3KTehM9cbrN82XJ27Gxi4ed6JCj50y2G8qS
21+
MEPb0Orj1i9UAe7+KcSzm8qDWVjdtik5/A8W/yZTR/r73TQ/EHs+iq8hAoGAATK+
22+
vZjaN7a+Xu4C6BDtbMlq950f+a6YxcqmNwUaGyfNyqavk5x7c7EgbtClMcDRplal
23+
gCjbuOhkyjGyFQ0C9SK/g08Jhvn2qzEbLn7M4SadcZkuBTttv8BjYA2K54hAmhHH
24+
u+OI/eD8R8bAwvRbnuJGjeWdk+5EIbqkdKtbXVkCgYAFnotzrjwD2kTyWZikKIzz
25+
fqHBGfTwIX7PqKK4XXOs/2A6Uhi255mbFcYolQoGnsHqzd1OXAPCnKCfy0HkEuKh
26+
6xgAL10X6Ew1b4KnNRYnuaRB59cVfg3cyWDaxK9bg36DmlxRijJwe4pbNyJbhqIP
27+
bPu9SGuz598NRff62GGTgg==
5228
-----END PRIVATE KEY-----

0 commit comments

Comments
 (0)