18
18
use core:: borrow:: Borrow ;
19
19
use core:: pin:: pin;
20
20
21
- use embassy_futures:: select:: select3;
22
21
use log:: info;
23
22
use matter:: core:: { CommissioningData , Matter } ;
24
23
use matter:: data_model:: cluster_basic_information:: BasicInfoConfig ;
@@ -28,13 +27,11 @@ use matter::data_model::objects::*;
28
27
use matter:: data_model:: root_endpoint;
29
28
use matter:: data_model:: system_model:: descriptor;
30
29
use matter:: error:: Error ;
31
- use matter:: mdns:: { DefaultMdns , DefaultMdnsRunner } ;
30
+ use matter:: mdns:: MdnsService ;
32
31
use matter:: persist:: FilePsm ;
33
32
use matter:: secure_channel:: spake2p:: VerifierData ;
34
33
use matter:: transport:: network:: { Ipv4Addr , Ipv6Addr , NetworkStack } ;
35
- use matter:: transport:: runner:: { RxBuf , TransportRunner , TxBuf } ;
36
- use matter:: transport:: udp:: UdpBuffers ;
37
- use matter:: utils:: select:: EitherUnwrap ;
34
+ use matter:: transport:: runner:: { AllUdpBuffers , TransportRunner } ;
38
35
39
36
mod dev_att;
40
37
@@ -59,10 +56,11 @@ fn run() -> Result<(), Error> {
59
56
initialize_logger ( ) ;
60
57
61
58
info ! (
62
- "Matter memory: mDNS={}, Matter={}, TransportRunner={}" ,
63
- core:: mem:: size_of:: <DefaultMdns >( ) ,
59
+ "Matter memory: mDNS={}, Matter={}, TransportRunner={}, UdpBuffers={} " ,
60
+ core:: mem:: size_of:: <MdnsService >( ) ,
64
61
core:: mem:: size_of:: <Matter >( ) ,
65
62
core:: mem:: size_of:: <TransportRunner >( ) ,
63
+ core:: mem:: size_of:: <AllUdpBuffers >( ) ,
66
64
) ;
67
65
68
66
let dev_det = BasicInfoConfig {
@@ -83,20 +81,6 @@ fn run() -> Result<(), Error> {
83
81
84
82
let ( ipv4_addr, ipv6_addr, interface) = initialize_network ( ) ?;
85
83
86
- let mdns = DefaultMdns :: new (
87
- 0 ,
88
- "matter-demo" ,
89
- ipv4_addr. octets ( ) ,
90
- Some ( ipv6_addr. octets ( ) ) ,
91
- interface,
92
- & dev_det,
93
- matter:: MATTER_PORT ,
94
- ) ;
95
-
96
- let mut mdns_runner = DefaultMdnsRunner :: new ( & mdns) ;
97
-
98
- info ! ( "mDNS initialized: {:p}, {:p}" , & mdns, & mdns_runner) ;
99
-
100
84
let dev_att = dev_att:: HardCodedDevAtt :: new ( ) ;
101
85
102
86
#[ cfg( feature = "std" ) ]
@@ -113,6 +97,18 @@ fn run() -> Result<(), Error> {
113
97
#[ cfg( not( feature = "std" ) ) ]
114
98
let rand = matter:: utils:: rand:: dummy_rand;
115
99
100
+ let mdns = MdnsService :: new (
101
+ 0 ,
102
+ "matter-demo" ,
103
+ ipv4_addr. octets ( ) ,
104
+ Some ( ipv6_addr. octets ( ) ) ,
105
+ interface,
106
+ & dev_det,
107
+ matter:: MATTER_PORT ,
108
+ ) ;
109
+
110
+ info ! ( "mDNS initialized: {:p}" , & mdns) ;
111
+
116
112
let matter = Matter :: new (
117
113
// vid/pid should match those in the DAC
118
114
& dev_det,
@@ -125,20 +121,6 @@ fn run() -> Result<(), Error> {
125
121
126
122
info ! ( "Matter initialized: {:p}" , & matter) ;
127
123
128
- let mut runner = TransportRunner :: new ( & matter) ;
129
-
130
- info ! ( "Transport Runner initialized: {:p}" , & runner) ;
131
-
132
- let mut tx_buf = TxBuf :: uninit ( ) ;
133
- let mut rx_buf = RxBuf :: uninit ( ) ;
134
-
135
- // NOTE (no_std): If using the `embassy-net` UDP implementation, replace this dummy stack with the `embassy-net` one
136
- // When using a custom UDP stack, remove this
137
- let stack = NetworkStack :: new ( ) ;
138
-
139
- let mut mdns_udp_buffers = UdpBuffers :: new ( ) ;
140
- let mut trans_udp_buffers = UdpBuffers :: new ( ) ;
141
-
142
124
#[ cfg( all( feature = "std" , not( target_os = "espidf" ) ) ) ]
143
125
{
144
126
let mut buf = [ 0 ; 4096 ] ;
@@ -152,62 +134,33 @@ fn run() -> Result<(), Error> {
152
134
}
153
135
}
154
136
155
- let node = Node {
156
- id : 0 ,
157
- endpoints : & [
158
- root_endpoint:: endpoint ( 0 ) ,
159
- Endpoint {
160
- id : 1 ,
161
- device_type : DEV_TYPE_ON_OFF_LIGHT ,
162
- clusters : & [ descriptor:: CLUSTER , cluster_on_off:: CLUSTER ] ,
163
- } ,
164
- ] ,
165
- } ;
137
+ let mut runner = TransportRunner :: new ( & matter) ;
138
+
139
+ info ! ( "Transport runner initialized: {:p}" , & runner) ;
166
140
167
141
let handler = HandlerCompat ( handler ( & matter) ) ;
168
142
169
- let matter = & matter;
170
- let node = & node;
171
- let handler = & handler;
172
- let runner = & mut runner;
173
- let tx_buf = & mut tx_buf;
174
- let rx_buf = & mut rx_buf;
175
- let stack = & stack;
176
- let mdns_udp_buffers = & mut mdns_udp_buffers;
177
- let trans_udp_buffers = & mut trans_udp_buffers;
143
+ // NOTE (no_std): If using the `embassy-net` UDP implementation, replace this dummy stack with the `embassy-net` one
144
+ // When using a custom UDP stack, remove this
145
+ let stack = NetworkStack :: new ( ) ;
178
146
179
- info ! (
180
- "About to run wth node {:p}, handler {:p}, transport runner {:p}, mdns_runner {:p}" ,
181
- node, handler, runner, & mdns_runner
182
- ) ;
147
+ let mut buffers = AllUdpBuffers :: new ( ) ;
183
148
184
- let mut fut = pin ! ( async move {
185
- // NOTE: If using a custom UDP stack, replace `run_udp` with `run`
186
- // and connect the pipes of the `run` method with the custom UDP stack
187
- let mut transport = pin!( runner. run_udp(
188
- stack,
189
- trans_udp_buffers,
190
- tx_buf,
191
- rx_buf,
192
- CommissioningData {
193
- // TODO: Hard-coded for now
194
- verifier: VerifierData :: new_with_pw( 123456 , * matter. borrow( ) ) ,
195
- discriminator: 250 ,
196
- } ,
197
- & handler,
198
- ) ) ;
199
-
200
- // NOTE: If using a custom UDP stack, replace `run_udp` with `run`
201
- // and connect the pipes of the `run` method with the custom UDP stack
202
- let mut mdns = pin!( mdns_runner. run_udp( stack, mdns_udp_buffers) ) ;
203
-
204
- let mut save = pin!( save( matter, & psm) ) ;
205
- select3( & mut transport, & mut mdns, & mut save) . await . unwrap( )
206
- } ) ;
149
+ let mut fut = pin ! ( runner. run_udp_all(
150
+ & stack,
151
+ & mdns,
152
+ & mut buffers,
153
+ CommissioningData {
154
+ // TODO: Hard-coded for now
155
+ verifier: VerifierData :: new_with_pw( 123456 , * matter. borrow( ) ) ,
156
+ discriminator: 250 ,
157
+ } ,
158
+ & handler,
159
+ ) ) ;
207
160
208
161
// NOTE: For no_std, replace with your own no_std way of polling the future
209
162
#[ cfg( feature = "std" ) ]
210
- smol :: block_on ( & mut fut) ?;
163
+ async_io :: block_on ( & mut fut) ?;
211
164
212
165
// NOTE (no_std): For no_std, replace with your own more efficient no_std executor,
213
166
// because the executor used below is a simple busy-loop poller
0 commit comments