Skip to content

Commit bc26768

Browse files
MabezDevbjoernQ
authored andcommitted
Smoltcp 0.9 upgrade (esp-rs#124)
* switch to heapless for SimpleQueue * Merge Network into WifiStack - Merge the Network and Wifi structs into WifiStack - Get it building & running with just TCP socket for now * get dhcp example building with changes and no warnings * fixup error checking * Fix other examples * fmt * Remove redundant comment * fix unused results * bump BT_INTERNAL_QUEUE to 10 * add back static ip configuration in work()
1 parent d47c22a commit bc26768

File tree

14 files changed

+500
-723
lines changed

14 files changed

+500
-723
lines changed

esp-wifi/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ riscv-rt = { version = "0.11.0", optional = true }
1919
riscv = { version = "0.10.1", optional = true }
2020
xtensa-lx-rt = { version = "0.14.0", optional = true }
2121
xtensa-lx = { version = "0.7.0", optional = true }
22-
smoltcp = { version = "0.8.2", default-features=false, features = ["proto-igmp", "proto-ipv4", "socket-tcp", "socket-icmp", "socket-udp", "medium-ethernet", "proto-dhcpv4", "socket-raw", "socket-dhcpv4"] }
22+
smoltcp = { version = "0.9.1", default-features=false, features = ["proto-igmp", "proto-ipv4", "socket-tcp", "socket-icmp", "socket-udp", "medium-ethernet", "proto-dhcpv4", "socket-raw", "socket-dhcpv4"] }
2323
critical-section = "1.1.1"
2424
atomic-polyfill = "1.0.1"
2525
log = "0.4.17"

esp-wifi/examples/ble.rs

+3-9
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,10 @@
55

66
use bleps::{
77
ad_structure::{
8-
create_advertising_data,
9-
AdStructure,
10-
BR_EDR_NOT_SUPPORTED,
11-
LE_GENERAL_DISCOVERABLE,
8+
create_advertising_data, AdStructure, BR_EDR_NOT_SUPPORTED, LE_GENERAL_DISCOVERABLE,
129
},
1310
attribute_server::{AttributeServer, NotificationData, WorkResult},
14-
Ble,
15-
HciConnector,
11+
Ble, HciConnector,
1612
};
1713
use bleps_macros::gatt;
1814
#[cfg(feature = "esp32")]
@@ -32,9 +28,7 @@ use hal::{
3228
clock::{ClockControl, CpuClock},
3329
peripherals::*,
3430
prelude::*,
35-
Rng,
36-
Rtc,
37-
IO,
31+
Rng, Rtc, IO,
3832
};
3933
#[cfg(any(feature = "esp32c3", feature = "esp32c2"))]
4034
use riscv_rt::entry;

esp-wifi/examples/coex.rs

+17-22
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use bleps::{
1818
Ble, HciConnector,
1919
};
2020

21-
use esp_wifi::{ble::controller::BleConnector, current_millis, wifi_interface::Network};
21+
use esp_wifi::{ble::controller::BleConnector, current_millis, wifi_interface::WifiStack};
2222

2323
use embedded_io::blocking::*;
2424
use embedded_svc::ipv4::Interface;
@@ -27,14 +27,13 @@ use embedded_svc::wifi::{AccessPointInfo, ClientConfiguration, Configuration, Wi
2727
use esp_backtrace as _;
2828
use esp_println::{logger::init_logger, print, println};
2929
use esp_wifi::initialize;
30-
use esp_wifi::wifi::{WifiError, utils::create_network_interface};
31-
use esp_wifi::{create_network_stack_storage, network_stack_storage};
30+
use esp_wifi::wifi::{utils::create_network_interface, WifiError};
3231
use hal::{
3332
clock::{ClockControl, CpuClock},
3433
Rng,
3534
};
3635
use hal::{peripherals::Peripherals, prelude::*, Rtc};
37-
use smoltcp::wire::Ipv4Address;
36+
use smoltcp::{iface::SocketStorage, wire::Ipv4Address};
3837

3938
#[cfg(feature = "esp32c3")]
4039
use hal::system::SystemExt;
@@ -72,9 +71,9 @@ fn main() -> ! {
7271

7372
rtc.rwdt.disable();
7473

75-
let mut storage = create_network_stack_storage!(3, 8, 1, 1);
76-
let ethernet = create_network_interface(network_stack_storage!(storage));
77-
let mut wifi_interface = esp_wifi::wifi_interface::Wifi::new(ethernet);
74+
let mut socket_set_entries: [SocketStorage; 3] = Default::default();
75+
let (iface, device, sockets) = create_network_interface(&mut socket_set_entries);
76+
let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
7877

7978
#[cfg(feature = "esp32c3")]
8079
{
@@ -89,11 +88,10 @@ fn main() -> ! {
8988
initialize(timg1.timer0, Rng::new(peripherals.RNG), &clocks).unwrap();
9089
}
9190

92-
println!("is wifi started: {:?}", wifi_interface.is_started());
91+
println!("is wifi started: {:?}", wifi_stack.is_started());
9392

9493
println!("Start Wifi Scan");
95-
let res: Result<(heapless::Vec<AccessPointInfo, 10>, usize), WifiError> =
96-
wifi_interface.scan_n();
94+
let res: Result<(heapless::Vec<AccessPointInfo, 10>, usize), WifiError> = wifi_stack.scan_n();
9795
if let Ok((res, _count)) = res {
9896
for ap in res {
9997
println!("{:?}", ap);
@@ -106,16 +104,16 @@ fn main() -> ! {
106104
password: PASSWORD.into(),
107105
..Default::default()
108106
});
109-
let res = wifi_interface.set_configuration(&client_config);
107+
let res = wifi_stack.set_configuration(&client_config);
110108
println!("wifi_connect returned {:?}", res);
111109

112-
println!("{:?}", wifi_interface.get_capabilities());
113-
println!("wifi_connect {:?}", wifi_interface.connect());
110+
println!("{:?}", wifi_stack.get_capabilities());
111+
println!("wifi_connect {:?}", wifi_stack.connect());
114112

115113
// wait to get connected
116114
println!("Wait to get connected");
117115
loop {
118-
let res = wifi_interface.is_connected();
116+
let res = wifi_stack.is_connected();
119117
match res {
120118
Ok(connected) => {
121119
if connected {
@@ -128,18 +126,15 @@ fn main() -> ! {
128126
}
129127
}
130128
}
131-
println!("{:?}", wifi_interface.is_connected());
129+
println!("{:?}", wifi_stack.is_connected());
132130

133131
// wait for getting an ip address
134132
println!("Wait to get an ip address");
135-
let network = Network::new(wifi_interface, current_millis);
136133
loop {
137-
network.poll_dhcp().unwrap();
134+
wifi_stack.work();
138135

139-
network.work();
140-
141-
if network.is_iface_up() {
142-
println!("got ip {:?}", network.get_ip_info());
136+
if wifi_stack.is_iface_up() {
137+
println!("got ip {:?}", wifi_stack.get_ip_info());
143138
break;
144139
}
145140
}
@@ -171,7 +166,7 @@ fn main() -> ! {
171166

172167
let mut rx_buffer = [0u8; 1536];
173168
let mut tx_buffer = [0u8; 1536];
174-
let mut socket = network.get_socket(&mut rx_buffer, &mut tx_buffer);
169+
let mut socket = wifi_stack.get_socket(&mut rx_buffer, &mut tx_buffer);
175170

176171
loop {
177172
println!("Making HTTP request");

esp-wifi/examples/dhcp.rs

+18-21
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,14 @@ use embedded_svc::wifi::{AccessPointInfo, ClientConfiguration, Configuration, Wi
2121
use esp_backtrace as _;
2222
use esp_println::logger::init_logger;
2323
use esp_println::{print, println};
24-
use esp_wifi::wifi::{WifiError, utils::create_network_interface};
25-
use esp_wifi::wifi_interface::Network;
26-
use esp_wifi::{create_network_stack_storage, network_stack_storage};
24+
use esp_wifi::wifi::utils::create_network_interface;
25+
use esp_wifi::wifi::WifiError;
26+
use esp_wifi::wifi_interface::WifiStack;
2727
use esp_wifi::{current_millis, initialize};
2828
use hal::clock::{ClockControl, CpuClock};
2929
use hal::Rng;
3030
use hal::{peripherals::Peripherals, prelude::*, Rtc};
31+
use smoltcp::iface::SocketStorage;
3132
use smoltcp::wire::Ipv4Address;
3233

3334
#[cfg(any(feature = "esp32c3", feature = "esp32c2"))]
@@ -68,9 +69,9 @@ fn main() -> ! {
6869

6970
rtc.rwdt.disable();
7071

71-
let mut storage = create_network_stack_storage!(3, 8, 1, 1);
72-
let ethernet = create_network_interface(network_stack_storage!(storage));
73-
let mut wifi_interface = esp_wifi::wifi_interface::Wifi::new(ethernet);
72+
let mut socket_set_entries: [SocketStorage; 3] = Default::default();
73+
let (iface, device, sockets) = create_network_interface(&mut socket_set_entries);
74+
let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
7475

7576
#[cfg(any(feature = "esp32c3", feature = "esp32c2"))]
7677
{
@@ -85,11 +86,10 @@ fn main() -> ! {
8586
initialize(timg1.timer0, Rng::new(peripherals.RNG), &clocks).unwrap();
8687
}
8788

88-
println!("is wifi started: {:?}", wifi_interface.is_started());
89+
println!("is wifi started: {:?}", wifi_stack.is_started());
8990

9091
println!("Start Wifi Scan");
91-
let res: Result<(heapless::Vec<AccessPointInfo, 10>, usize), WifiError> =
92-
wifi_interface.scan_n();
92+
let res: Result<(heapless::Vec<AccessPointInfo, 10>, usize), WifiError> = wifi_stack.scan_n();
9393
if let Ok((res, _count)) = res {
9494
for ap in res {
9595
println!("{:?}", ap);
@@ -102,16 +102,16 @@ fn main() -> ! {
102102
password: PASSWORD.into(),
103103
..Default::default()
104104
});
105-
let res = wifi_interface.set_configuration(&client_config);
105+
let res = wifi_stack.set_configuration(&client_config);
106106
println!("wifi_set_configuration returned {:?}", res);
107107

108-
println!("{:?}", wifi_interface.get_capabilities());
109-
println!("wifi_connect {:?}", wifi_interface.connect());
108+
println!("{:?}", wifi_stack.get_capabilities());
109+
println!("wifi_connect {:?}", wifi_stack.connect());
110110

111111
// wait to get connected
112112
println!("Wait to get connected");
113113
loop {
114-
let res = wifi_interface.is_connected();
114+
let res = wifi_stack.is_connected();
115115
match res {
116116
Ok(connected) => {
117117
if connected {
@@ -124,18 +124,15 @@ fn main() -> ! {
124124
}
125125
}
126126
}
127-
println!("{:?}", wifi_interface.is_connected());
127+
println!("{:?}", wifi_stack.is_connected());
128128

129129
// wait for getting an ip address
130130
println!("Wait to get an ip address");
131-
let network = Network::new(wifi_interface, current_millis);
132131
loop {
133-
network.poll_dhcp().unwrap();
132+
wifi_stack.work();
134133

135-
network.work();
136-
137-
if network.is_iface_up() {
138-
println!("got ip {:?}", network.get_ip_info());
134+
if wifi_stack.is_iface_up() {
135+
println!("got ip {:?}", wifi_stack.get_ip_info());
139136
break;
140137
}
141138
}
@@ -144,7 +141,7 @@ fn main() -> ! {
144141

145142
let mut rx_buffer = [0u8; 1536];
146143
let mut tx_buffer = [0u8; 1536];
147-
let mut socket = network.get_socket(&mut rx_buffer, &mut tx_buffer);
144+
let mut socket = wifi_stack.get_socket(&mut rx_buffer, &mut tx_buffer);
148145

149146
loop {
150147
println!("Making HTTP request");

esp-wifi/examples/static_ip.rs

+18-18
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ use embedded_svc::wifi::{AccessPointInfo, ClientConfiguration, Configuration, Wi
2121
use esp_backtrace as _;
2222
use esp_println::logger::init_logger;
2323
use esp_println::{print, println};
24-
use esp_wifi::wifi::{WifiError, utils::create_network_interface};
25-
use esp_wifi::wifi_interface::Network;
26-
use esp_wifi::{create_network_stack_storage, network_stack_storage};
27-
use esp_wifi::{current_millis, initialize};
24+
use esp_wifi::current_millis;
25+
use esp_wifi::initialize;
26+
use esp_wifi::wifi::{utils::create_network_interface, WifiError};
27+
use esp_wifi::wifi_interface::WifiStack;
2828
use hal::clock::{ClockControl, CpuClock};
2929
use hal::Rng;
3030
use hal::{peripherals::Peripherals, prelude::*, Rtc};
@@ -34,6 +34,7 @@ use hal::system::SystemExt;
3434

3535
#[cfg(any(feature = "esp32c3", feature = "esp32c2"))]
3636
use riscv_rt::entry;
37+
use smoltcp::iface::SocketStorage;
3738
#[cfg(any(feature = "esp32", feature = "esp32s3", feature = "esp32s2"))]
3839
use xtensa_lx_rt::entry;
3940

@@ -69,9 +70,9 @@ fn main() -> ! {
6970

7071
rtc.rwdt.disable();
7172

72-
let mut storage = create_network_stack_storage!(3, 8, 1, 1);
73-
let ethernet = create_network_interface(network_stack_storage!(storage));
74-
let mut wifi_interface = esp_wifi::wifi_interface::Wifi::new(ethernet);
73+
let mut socket_set_entries: [SocketStorage; 3] = Default::default();
74+
let (iface, device, sockets) = create_network_interface(&mut socket_set_entries);
75+
let mut wifi_stack = WifiStack::new(iface, device, sockets, current_millis);
7576

7677
#[cfg(any(feature = "esp32c3", feature = "esp32c2"))]
7778
{
@@ -86,11 +87,10 @@ fn main() -> ! {
8687
initialize(timg1.timer0, Rng::new(peripherals.RNG), &clocks).unwrap();
8788
}
8889

89-
println!("is wifi started: {:?}", wifi_interface.is_started());
90+
println!("is wifi started: {:?}", wifi_stack.is_started());
9091

9192
println!("Start Wifi Scan");
92-
let res: Result<(heapless::Vec<AccessPointInfo, 10>, usize), WifiError> =
93-
wifi_interface.scan_n();
93+
let res: Result<(heapless::Vec<AccessPointInfo, 10>, usize), WifiError> = wifi_stack.scan_n();
9494
if let Ok((res, _count)) = res {
9595
for ap in res {
9696
println!("{:?}", ap);
@@ -103,16 +103,16 @@ fn main() -> ! {
103103
password: PASSWORD.into(),
104104
..Default::default()
105105
});
106-
let res = wifi_interface.set_configuration(&client_config);
106+
let res = wifi_stack.set_configuration(&client_config);
107107
println!("wifi_set_configuration returned {:?}", res);
108108

109-
println!("{:?}", wifi_interface.get_capabilities());
110-
println!("wifi_connect {:?}", wifi_interface.connect());
109+
println!("{:?}", wifi_stack.get_capabilities());
110+
println!("wifi_connect {:?}", wifi_stack.connect());
111111

112112
// wait to get connected
113113
println!("Wait to get connected");
114114
loop {
115-
let res = wifi_interface.is_connected();
115+
let res = wifi_stack.is_connected();
116116
match res {
117117
Ok(connected) => {
118118
if connected {
@@ -125,11 +125,11 @@ fn main() -> ! {
125125
}
126126
}
127127
}
128-
println!("{:?}", wifi_interface.is_connected());
128+
println!("{:?}", wifi_stack.is_connected());
129129

130130
println!("Setting static IP {}", STATIC_IP);
131-
let mut network = Network::new(wifi_interface, current_millis);
132-
network
131+
132+
wifi_stack
133133
.set_iface_configuration(&embedded_svc::ipv4::Configuration::Client(
134134
embedded_svc::ipv4::ClientConfiguration::Fixed(embedded_svc::ipv4::ClientSettings {
135135
ip: embedded_svc::ipv4::Ipv4Addr::from(parse_ip(STATIC_IP)),
@@ -150,7 +150,7 @@ fn main() -> ! {
150150

151151
let mut rx_buffer = [0u8; 1536];
152152
let mut tx_buffer = [0u8; 1536];
153-
let mut socket = network.get_socket(&mut rx_buffer, &mut tx_buffer);
153+
let mut socket = wifi_stack.get_socket(&mut rx_buffer, &mut tx_buffer);
154154

155155
socket.listen(8080).unwrap();
156156

esp-wifi/src/ble/btdm.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ pub struct ReceivedPacket {
3636
pub data: [u8; 256],
3737
}
3838

39-
static BT_INTERNAL_QUEUE: Mutex<RefCell<SimpleQueue<[u8; 8], 5>>> =
39+
static BT_INTERNAL_QUEUE: Mutex<RefCell<SimpleQueue<[u8; 8], 10>>> =
4040
Mutex::new(RefCell::new(SimpleQueue::new()));
4141

4242
#[repr(C)]
@@ -91,7 +91,7 @@ extern "C" fn notify_host_recv(data: *mut u8, len: u16) -> i32 {
9191

9292
critical_section::with(|cs| {
9393
let mut queue = BT_RECEIVE_QUEUE.borrow_ref_mut(cs);
94-
queue.enqueue(packet);
94+
queue.enqueue(packet).unwrap();
9595
});
9696
}
9797

@@ -189,7 +189,7 @@ unsafe extern "C" fn queue_send(queue: *const (), item: *const (), _block_time_m
189189

190190
critical_section::with(|cs| {
191191
let mut queue = BT_INTERNAL_QUEUE.borrow_ref_mut(cs);
192-
queue.enqueue(data);
192+
queue.enqueue(data).unwrap();
193193
});
194194
memory_fence();
195195
});

esp-wifi/src/ble/npl.rs

+12-8
Original file line numberDiff line numberDiff line change
@@ -1226,10 +1226,12 @@ unsafe extern "C" fn ble_hs_hci_rx_evt(cmd: *const u8, arg: *const c_void) {
12261226
data[2] = len as u8;
12271227
data[3..][..len].copy_from_slice(payload);
12281228

1229-
queue.enqueue(ReceivedPacket {
1230-
len: (len + 3) as u8,
1231-
data,
1232-
});
1229+
queue
1230+
.enqueue(ReceivedPacket {
1231+
len: (len + 3) as u8,
1232+
data,
1233+
})
1234+
.unwrap();
12331235
});
12341236
}
12351237

@@ -1247,10 +1249,12 @@ unsafe extern "C" fn ble_hs_rx_data(om: *const OsMbuf, arg: *const c_void) {
12471249
data[0] = 0x02; // ACL
12481250
data[1..][..data_slice.len()].copy_from_slice(data_slice);
12491251

1250-
queue.enqueue(ReceivedPacket {
1251-
len: (len + 1) as u8,
1252-
data,
1253-
});
1252+
queue
1253+
.enqueue(ReceivedPacket {
1254+
len: (len + 1) as u8,
1255+
data,
1256+
})
1257+
.unwrap();
12541258
});
12551259
}
12561260

0 commit comments

Comments
 (0)