Skip to content

Commit 3b5a27d

Browse files
committed
Also push the networks inside the DataModelState struct
1 parent 3b6b540 commit 3b5a27d

4 files changed

Lines changed: 156 additions & 74 deletions

File tree

bloat-check/src/bin/bloat-check.rs

Lines changed: 16 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ use rs_matter::dm::clusters::app::on_off::NoLevelControl;
6161
use rs_matter::dm::clusters::app::on_off::{self, test::TestOnOffDeviceLogic, OnOffHooks};
6262
use rs_matter::dm::clusters::desc::{self, ClusterHandler as _, DescHandler};
6363
use rs_matter::dm::clusters::net_comm::{
64-
NetCtl, NetCtlError, NetworkScanInfo, NetworkType, SharedNetworks, WirelessCreds,
64+
NetCtl, NetCtlError, NetworkScanInfo, NetworkType, WirelessCreds,
6565
};
6666
use rs_matter::dm::clusters::wifi_diag::{
6767
SecurityTypeEnum, WiFiVersionEnum, WifiDiag, WirelessDiag,
@@ -71,7 +71,7 @@ use rs_matter::dm::devices::DEV_TYPE_ON_OFF_LIGHT;
7171
use rs_matter::dm::endpoints::WifiSysHandler;
7272
use rs_matter::dm::events::DEFAULT_MAX_EVENTS_BUF_SIZE;
7373
use rs_matter::dm::networks::wireless::{
74-
NetCtlState, NetCtlStateMutex, NetCtlWithStatusImpl, WifiNetworks, WirelessMgr, MAX_CREDS_SIZE,
74+
NetCtlState, NetCtlStateMutex, NetCtlWithStatusImpl, WifiNetworks,
7575
};
7676
use rs_matter::dm::networks::NetChangeNotif;
7777
use rs_matter::dm::subscriptions::DEFAULT_MAX_SUBSCRIPTIONS;
@@ -162,7 +162,6 @@ struct MatterStack<'a> {
162162
state: WirelessDataModelState<WifiNetworks<3>>,
163163
net_ctl_state: NetCtlStateMutex,
164164
btp: Btp,
165-
wireless_mgr_buffer: MaybeUninit<[u8; MAX_CREDS_SIZE]>,
166165
// We don't run a persistence task, but emulate its typical memory consumnption
167166
psm_buffer: MaybeUninit<[u8; 4096]>,
168167
}
@@ -181,7 +180,6 @@ impl<'a> MatterStack<'a> {
181180
state <- WirelessDataModelState::init(WifiNetworks::init()),
182181
net_ctl_state <- NetCtlState::init_with_mutex(),
183182
btp <- Btp::init(),
184-
wireless_mgr_buffer: MaybeUninit::zeroed(),
185183
psm_buffer: MaybeUninit::zeroed(),
186184
})
187185
}
@@ -190,9 +188,7 @@ impl<'a> MatterStack<'a> {
190188
// Fully spelled-out types for everything which is passed down as arguments to `embassy-executor` tasks
191189
// Necessary, because `embassy-executor` doesn't grok generics
192190

193-
type AppNetworks = SharedNetworks<WifiNetworks<3>>;
194191
type AppNetCtl<'a> = NetCtlWithStatusImpl<'a, FakeWifi>;
195-
type AppWirelessMgr<'a> = WirelessMgr<'a, &'a AppNetworks, &'a AppNetCtl<'a>>;
196192
type AppTransport<'a> = ChainedNetwork<FakeUdp, &'a Btp, fn(&Address) -> bool>;
197193
type AppDmHandler<'a> = handler_chain_type!(
198194
EpClMatcher => on_off::HandlerAsyncAdaptor<on_off::OnOffHandler<'a, TestOnOffDeviceLogic, NoLevelControl>>,
@@ -209,6 +205,7 @@ type AppDataModel<'a> = DataModel<
209205
(Node<'a>, &'a AppDmHandler<'a>),
210206
SharedKvBlobStore<DummyKvBlobStore, &'static mut [u8]>,
211207
WifiNetworks<3>,
208+
&'a AppNetCtl<'a>,
212209
>;
213210
type AppResponder<'d, 'a> = DefaultResponder<
214211
'd,
@@ -220,6 +217,7 @@ type AppResponder<'d, 'a> = DefaultResponder<
220217
(Node<'a>, &'a AppDmHandler<'a>),
221218
SharedKvBlobStore<DummyKvBlobStore, &'static mut [u8]>,
222219
WifiNetworks<3>,
220+
&'a AppNetCtl<'a>,
223221
>;
224222

225223
#[cfg_attr(target_os = "none", main)]
@@ -275,7 +273,11 @@ fn main() -> ! {
275273
size_of_val(stack.state.subscriptions()),
276274
&mut stack_total,
277275
);
278-
report_size("Events", size_of_val(stack.state.events()), &mut stack_total);
276+
report_size(
277+
"Events",
278+
size_of_val(stack.state.events()),
279+
&mut stack_total,
280+
);
279281
report_size(
280282
"Networks",
281283
size_of_val(stack.state.networks()),
@@ -287,11 +289,6 @@ fn main() -> ! {
287289
&mut stack_total,
288290
);
289291
report_size("BTP", size_of_val(&stack.btp), &mut stack_total);
290-
report_size(
291-
"Wireless mgr buffer",
292-
size_of_val(&stack.wireless_mgr_buffer),
293-
&mut stack_total,
294-
);
295292
report_size(
296293
"Persister buffer",
297294
size_of_val(&stack.psm_buffer),
@@ -314,15 +311,9 @@ fn main() -> ! {
314311

315312
report_size("Network controller", size_of_val(net_ctl), &mut aux_total);
316313

317-
// Wifi network manager (cycle registered networks, auto-reconnect)
318-
let wifi_mgr = mk_static!(
319-
AppWirelessMgr,
320-
WirelessMgr::new(stack.state.networks(), net_ctl, unsafe {
321-
stack.wireless_mgr_buffer.assume_init_mut()
322-
},)
323-
);
324-
325-
report_size("Wireless manager", size_of_val(&*wifi_mgr), &mut aux_total);
314+
// The operational Wifi connection manager is now driven from inside
315+
// `DataModel::run` (no separate task); its footprint shows up under the data
316+
// model future below.
326317

327318
let crypto = &*mk_static!(
328319
AppCrypto,
@@ -351,15 +342,17 @@ fn main() -> ! {
351342

352343
report_size("DM Handler size", size_of_val(&*handler), &mut aux_total);
353344

354-
// Data Model
345+
// Data Model. `net_ctl` is wired in so the data model's `run` drives the
346+
// operational Wifi connection manager itself (no separate manager task).
355347
let dm = &*mk_static!(
356348
AppDataModel,
357-
DataModel::new(
349+
DataModel::new_with_net_ctl(
358350
&stack.matter,
359351
crypto,
360352
&stack.buffers,
361353
(NODE, handler),
362354
kv,
355+
net_ctl,
363356
&stack.state,
364357
)
365358
);
@@ -431,11 +424,6 @@ fn main() -> ! {
431424
size_of_val(&btp_task_fut(&stack.btp)),
432425
&mut fut_total,
433426
);
434-
report_size(
435-
"Wifi task",
436-
size_of_val(&wifi_task_fut(wifi_mgr)),
437-
&mut fut_total,
438-
);
439427
report_size(
440428
"Transport task",
441429
size_of_val(&transport_task_fut(
@@ -479,7 +467,6 @@ fn main() -> ! {
479467
spawner.spawn(unwrap!(dm_task(dm)));
480468
spawner.spawn(unwrap!(mdns_task(mdns, &stack.matter, crypto)));
481469
spawner.spawn(unwrap!(btp_task(&stack.btp)));
482-
spawner.spawn(unwrap!(wifi_task(wifi_mgr)));
483470
spawner.spawn(unwrap!(transport_task(
484471
&stack.matter,
485472
crypto,
@@ -570,19 +557,6 @@ async fn btp_task(btp: &'static Btp) {
570557
unwrap!(btp_task_fut(btp).await);
571558
}
572559

573-
#[inline(always)]
574-
fn wifi_task_fut<'a>(
575-
wifi_mgr: &'a mut AppWirelessMgr<'static>,
576-
) -> impl Future<Output = Result<(), Error>> + 'a {
577-
wifi_mgr.run()
578-
}
579-
580-
#[embassy_executor::task]
581-
async fn wifi_task(wifi_mgr: &'static mut AppWirelessMgr<'static>) {
582-
info!("Starting Wifi task...");
583-
unwrap!(wifi_task_fut(wifi_mgr).await);
584-
}
585-
586560
#[inline(always)]
587561
fn transport_task_fut<'a>(
588562
matter: &'a Matter<'a>,

examples/src/bin/onoff_light_bt.rs

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ use rs_matter::dm::devices::DEV_TYPE_ON_OFF_LIGHT;
5252
use rs_matter::dm::endpoints;
5353
use rs_matter::dm::networks::unix::UnixNetifs;
5454
use rs_matter::dm::networks::wireless::{NetCtlState, NetCtlWithStatusImpl, WifiNetworks};
55+
use rs_matter::dm::networks::NetChangeNotif;
5556
use rs_matter::dm::{
5657
Async, DataModel, DataModelHandler, Dataver, Endpoint, EpClMatcher, Node,
5758
WirelessDataModelState,
@@ -118,7 +119,10 @@ fn main() -> Result<(), Error> {
118119
}
119120
}
120121

121-
fn run<N: NetCtl + WifiDiag>(connection: &Connection, net_ctl: N) -> Result<(), Error> {
122+
fn run<N: NetCtl + WifiDiag + NetChangeNotif>(
123+
connection: &Connection,
124+
net_ctl: N,
125+
) -> Result<(), Error> {
122126
// Create the Matter object
123127
let mut matter = Matter::new(&TEST_DEV_DET, TEST_DEV_COMM, &TEST_DEV_ATT, MATTER_PORT);
124128

@@ -157,13 +161,16 @@ fn run<N: NetCtl + WifiDiag>(connection: &Connection, net_ctl: N) -> Result<(),
157161

158162
let net_ctl = NetCtlWithStatusImpl::new(&net_ctl_state, net_ctl);
159163

160-
// Create the Data Model instance
161-
let dm = DataModel::new(
164+
// Create the Data Model instance. The same `net_ctl` is wired both into the
165+
// `NetworkCommissioning` handler (above) and into the data model, which drives
166+
// the operational Wifi connection manager from `DataModel::run`.
167+
let dm = DataModel::new_with_net_ctl(
162168
&matter,
163169
&crypto,
164170
&buffers,
165171
dm_handler(rand, &on_off_handler, &net_ctl, &net_ctl),
166172
SharedKvBlobStore::new(kv, kv_buf.as_mut_slice()),
173+
&net_ctl,
167174
&state,
168175
);
169176

0 commit comments

Comments
 (0)