@@ -61,7 +61,7 @@ use rs_matter::dm::clusters::app::on_off::NoLevelControl;
6161use rs_matter:: dm:: clusters:: app:: on_off:: { self , test:: TestOnOffDeviceLogic , OnOffHooks } ;
6262use rs_matter:: dm:: clusters:: desc:: { self , ClusterHandler as _, DescHandler } ;
6363use rs_matter:: dm:: clusters:: net_comm:: {
64- NetCtl , NetCtlError , NetworkScanInfo , NetworkType , SharedNetworks , WirelessCreds ,
64+ NetCtl , NetCtlError , NetworkScanInfo , NetworkType , WirelessCreds ,
6565} ;
6666use 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;
7171use rs_matter:: dm:: endpoints:: WifiSysHandler ;
7272use rs_matter:: dm:: events:: DEFAULT_MAX_EVENTS_BUF_SIZE ;
7373use rs_matter:: dm:: networks:: wireless:: {
74- NetCtlState , NetCtlStateMutex , NetCtlWithStatusImpl , WifiNetworks , WirelessMgr , MAX_CREDS_SIZE ,
74+ NetCtlState , NetCtlStateMutex , NetCtlWithStatusImpl , WifiNetworks ,
7575} ;
7676use rs_matter:: dm:: networks:: NetChangeNotif ;
7777use 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 > > ;
194191type AppNetCtl < ' a > = NetCtlWithStatusImpl < ' a , FakeWifi > ;
195- type AppWirelessMgr < ' a > = WirelessMgr < ' a , & ' a AppNetworks , & ' a AppNetCtl < ' a > > ;
196192type AppTransport < ' a > = ChainedNetwork < FakeUdp , & ' a Btp , fn ( & Address ) -> bool > ;
197193type 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> ;
213210type 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) ]
587561fn transport_task_fut < ' a > (
588562 matter : & ' a Matter < ' a > ,
0 commit comments