@@ -30,7 +30,7 @@ use matter::data_model::root_endpoint;
30
30
use matter:: data_model:: system_model:: descriptor;
31
31
use matter:: error:: Error ;
32
32
use matter:: interaction_model:: core:: InteractionModel ;
33
- use matter:: mdns:: builtin:: Mdns ;
33
+ use matter:: mdns:: builtin:: { Mdns , MdnsRxBuf , MdnsTxBuf } ;
34
34
use matter:: persist;
35
35
use matter:: secure_channel:: spake2p:: VerifierData ;
36
36
use matter:: transport:: network:: { Address , IpAddr , Ipv4Addr , Ipv6Addr , SocketAddr } ;
@@ -46,7 +46,7 @@ mod dev_att;
46
46
fn main ( ) -> Result < ( ) , Error > {
47
47
let thread = std:: thread:: Builder :: new ( )
48
48
. stack_size ( 120 * 1024 )
49
- . spawn ( move || run ( ) )
49
+ . spawn ( run)
50
50
. unwrap ( ) ;
51
51
52
52
thread. join ( ) . unwrap ( )
@@ -63,10 +63,10 @@ fn run() -> Result<(), Error> {
63
63
initialize_logger ( ) ;
64
64
65
65
info ! (
66
- "Matter memory: mDNS={}, Transport ={} (of which Matter ={}) " ,
66
+ "Matter memory: mDNS={}, Matter ={}, Transport ={}" ,
67
67
core:: mem:: size_of:: <Mdns >( ) ,
68
- core:: mem:: size_of:: <Transport >( ) ,
69
68
core:: mem:: size_of:: <Matter >( ) ,
69
+ core:: mem:: size_of:: <Transport >( ) ,
70
70
) ;
71
71
72
72
let ( ipv4_addr, ipv6_addr) = initialize_network ( ) ?;
@@ -78,15 +78,15 @@ fn run() -> Result<(), Error> {
78
78
Some ( ipv6_addr. octets ( ) ) ,
79
79
) ;
80
80
81
- let ( mut mdns, mut mdns_runner) = mdns. split ( ) ;
81
+ let ( mdns, mut mdns_runner) = mdns. split ( ) ;
82
82
//let (mut mdns, mdns_runner) = (matter::mdns::astro::AstroMdns::new()?, core::future::pending::pending());
83
83
//let (mut mdns, mdns_runner) = (matter::mdns::DummyMdns {}, core::future::pending::pending());
84
84
85
85
let dev_att = dev_att:: HardCodedDevAtt :: new ( ) ;
86
86
87
87
let matter = Matter :: new_default (
88
88
// vid/pid should match those in the DAC
89
- BasicInfoConfig {
89
+ & BasicInfoConfig {
90
90
vid : 0xFFF1 ,
91
91
pid : 0x8000 ,
92
92
hw_ver : 2 ,
@@ -96,7 +96,7 @@ fn run() -> Result<(), Error> {
96
96
device_name : "OnOff Light" ,
97
97
} ,
98
98
& dev_att,
99
- & mut mdns,
99
+ & mdns,
100
100
matter:: MATTER_PORT ,
101
101
) ;
102
102
@@ -106,12 +106,13 @@ fn run() -> Result<(), Error> {
106
106
let psm = persist:: FilePsm :: new ( psm_path) ?;
107
107
108
108
let mut buf = [ 0 ; 4096 ] ;
109
+ let buf = & mut buf;
109
110
110
- if let Some ( data) = psm. load ( "acls" , & mut buf) ? {
111
+ if let Some ( data) = psm. load ( "acls" , buf) ? {
111
112
matter. load_acls ( data) ?;
112
113
}
113
114
114
- if let Some ( data) = psm. load ( "fabrics" , & mut buf) ? {
115
+ if let Some ( data) = psm. load ( "fabrics" , buf) ? {
115
116
matter. load_fabrics ( data) ?;
116
117
}
117
118
@@ -123,12 +124,33 @@ fn run() -> Result<(), Error> {
123
124
verifier : VerifierData :: new_with_pw ( 123456 , * matter. borrow ( ) ) ,
124
125
discriminator : 250 ,
125
126
} ,
126
- & mut buf,
127
+ buf,
127
128
) ?;
128
129
129
- let matter = & matter;
130
+ let node = Node {
131
+ id : 0 ,
132
+ endpoints : & [
133
+ root_endpoint:: endpoint ( 0 ) ,
134
+ Endpoint {
135
+ id : 1 ,
136
+ device_type : DEV_TYPE_ON_OFF_LIGHT ,
137
+ clusters : & [ descriptor:: CLUSTER , cluster_on_off:: CLUSTER ] ,
138
+ } ,
139
+ ] ,
140
+ } ;
141
+
142
+ let mut handler = handler ( & matter) ;
143
+
144
+ let mut im = InteractionModel ( DataModel :: new ( matter. borrow ( ) , & node, & mut handler) ) ;
145
+
146
+ let mut rx_buf = [ 0 ; MAX_RX_BUF_SIZE ] ;
147
+ let mut tx_buf = [ 0 ; MAX_TX_BUF_SIZE ] ;
148
+
149
+ let im = & mut im;
130
150
let mdns_runner = & mut mdns_runner;
131
151
let transport = & mut transport;
152
+ let rx_buf = & mut rx_buf;
153
+ let tx_buf = & mut tx_buf;
132
154
133
155
let mut io_fut = pin ! ( async move {
134
156
let udp = UdpListener :: new( SocketAddr :: new(
@@ -138,52 +160,29 @@ fn run() -> Result<(), Error> {
138
160
. await ?;
139
161
140
162
loop {
141
- let mut rx_buf = [ 0 ; MAX_RX_BUF_SIZE ] ;
142
- let mut tx_buf = [ 0 ; MAX_TX_BUF_SIZE ] ;
163
+ let ( len, addr) = udp. recv( rx_buf) . await ?;
143
164
144
- let ( len, addr) = udp. recv( & mut rx_buf) . await ?;
145
-
146
- let mut completion =
147
- transport. recv( Address :: Udp ( addr) , & mut rx_buf[ ..len] , & mut tx_buf) ;
165
+ let mut completion = transport. recv( Address :: Udp ( addr) , & mut rx_buf[ ..len] , tx_buf) ;
148
166
149
167
while let Some ( action) = completion. next_action( ) ? {
150
168
match action {
151
169
RecvAction :: Send ( addr, buf) => {
152
170
udp. send( addr. unwrap_udp( ) , buf) . await ?;
153
171
}
154
172
RecvAction :: Interact ( mut ctx) => {
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
- } ;
166
-
167
- let mut handler = handler( matter) ;
168
-
169
- let mut im =
170
- InteractionModel ( DataModel :: new( matter. borrow( ) , & node, & mut handler) ) ;
171
-
172
- if im. handle( & mut ctx) ? {
173
- if ctx. send( ) ? {
174
- udp. send( ctx. tx. peer. unwrap_udp( ) , ctx. tx. as_slice( ) )
175
- . await ?;
176
- }
173
+ if im. handle( & mut ctx) ? && ctx. send( ) ? {
174
+ udp. send( ctx. tx. peer. unwrap_udp( ) , ctx. tx. as_slice( ) )
175
+ . await ?;
177
176
}
178
177
}
179
178
}
180
179
}
181
180
182
- if let Some ( data) = transport. matter( ) . store_fabrics( & mut buf) ? {
181
+ if let Some ( data) = transport. matter( ) . store_fabrics( buf) ? {
183
182
psm. store( "fabrics" , data) ?;
184
183
}
185
184
186
- if let Some ( data) = transport. matter( ) . store_acls( & mut buf) ? {
185
+ if let Some ( data) = transport. matter( ) . store_acls( buf) ? {
187
186
psm. store( "acls" , data) ?;
188
187
}
189
188
}
@@ -192,7 +191,12 @@ fn run() -> Result<(), Error> {
192
191
Ok :: <_, matter:: error:: Error >( ( ) )
193
192
} ) ;
194
193
195
- let mut mdns_fut = pin ! ( async move { mdns_runner. run( ) . await } ) ;
194
+ let mut tx_buf = MdnsTxBuf :: uninit ( ) ;
195
+ let mut rx_buf = MdnsRxBuf :: uninit ( ) ;
196
+ let tx_buf = & mut tx_buf;
197
+ let rx_buf = & mut rx_buf;
198
+
199
+ let mut mdns_fut = pin ! ( async move { mdns_runner. run_udp( tx_buf, rx_buf) . await } ) ;
196
200
197
201
let mut fut = pin ! ( async move { select( & mut io_fut, & mut mdns_fut, ) . await . unwrap( ) } ) ;
198
202
0 commit comments