tweaks for matter boot
This commit is contained in:
parent
1062d5ba7b
commit
3d588a553a
46
src/lib.rs
46
src/lib.rs
|
|
@ -52,7 +52,7 @@ use rs_matter::transport::network::btp::{AdvData, Btp};
|
|||
use rs_matter::transport::network::mdns::zeroconf::ZeroconfMdnsResponder;
|
||||
use rs_matter::transport::network::wifi::wpa_supp::unix::DhClientCtl;
|
||||
use rs_matter::transport::network::wifi::wpa_supp::WpaSuppCtl;
|
||||
use rs_matter::transport::network::NoNetwork;
|
||||
use rs_matter::transport::network::{Address, ChainedNetwork};
|
||||
use rs_matter::transport::MATTER_SOCKET_BIND_ADDR;
|
||||
use rs_matter::utils::select::Coalesce;
|
||||
use rs_matter::utils::storage::pooled::PooledBuffers;
|
||||
|
|
@ -67,6 +67,8 @@ const DEFAULT_CREDS_DIR: &str = "./creds";
|
|||
const DEFAULT_WIFI_IFACE: &str = "wlan0";
|
||||
const LIGHT_ENDPOINT_ID: u16 = 1;
|
||||
const KV_BUF_SIZE: usize = 4096;
|
||||
const BLE_SERVICE_NAME: &str = "TOES";
|
||||
const COMMISSIONING_HANDOFF_SECS: u64 = 20;
|
||||
|
||||
const DEV_TYPE_EXTENDED_COLOR_LIGHT: rs_matter::dm::DeviceType = rs_matter::dm::DeviceType {
|
||||
dtype: 0x010d,
|
||||
|
|
@ -360,28 +362,58 @@ where
|
|||
let btp = Btp::new();
|
||||
btp.set_relaxed_mtu_nego(true);
|
||||
|
||||
let udp = async_io::Async::<UdpSocket>::bind(MATTER_SOCKET_BIND_ADDR)?;
|
||||
let mut mdns_responder = ZeroconfMdnsResponder::new();
|
||||
let mut mdns = pin!(mdns_responder.run(&matter));
|
||||
|
||||
let adv_data = AdvData::new(&TEST_DEV_DET, comm.discriminator);
|
||||
let mut bluetooth = pin!(bluez::run_peripheral(
|
||||
connection, None, "TOES", &adv_data, &btp
|
||||
connection,
|
||||
None,
|
||||
BLE_SERVICE_NAME,
|
||||
&adv_data,
|
||||
&btp,
|
||||
));
|
||||
let mut transport = pin!(matter.run(&crypto, &btp, &btp, NoNetwork));
|
||||
let mut wifi_prov_task = pin!(async {
|
||||
let mut transport = pin!(matter.run(
|
||||
&crypto,
|
||||
ChainedNetwork::new(Address::is_udp, &udp, &btp),
|
||||
ChainedNetwork::new(Address::is_udp, &udp, &btp),
|
||||
&udp,
|
||||
));
|
||||
info!("Running Matter over concurrent BLE commissioning and IP transport");
|
||||
|
||||
let mut commissioning_done_task = pin!(async {
|
||||
NetCtlState::wait_prov_ready(&net_ctl_state, &btp).await;
|
||||
info!("Wi-Fi credentials accepted; waiting for Matter fabric setup");
|
||||
|
||||
while !matter.is_commissioned() {
|
||||
embassy_time::Timer::after_secs(1).await;
|
||||
}
|
||||
|
||||
info!(
|
||||
"Matter fabric added; keeping BLE/IP commissioning transports alive for {}s handoff",
|
||||
COMMISSIONING_HANDOFF_SECS
|
||||
);
|
||||
embassy_time::Timer::after_secs(COMMISSIONING_HANDOFF_SECS).await;
|
||||
|
||||
Ok(())
|
||||
});
|
||||
|
||||
select4(
|
||||
let mut matter_tasks = pin!(select4(
|
||||
&mut transport,
|
||||
&mut bluetooth,
|
||||
&mut wifi_prov_task,
|
||||
&mut mdns,
|
||||
select(&mut respond, &mut dm_job).coalesce(),
|
||||
)
|
||||
.coalesce());
|
||||
|
||||
select(&mut matter_tasks, &mut commissioning_done_task)
|
||||
.coalesce()
|
||||
.await?;
|
||||
|
||||
matter.reset_transport()?;
|
||||
|
||||
info!("Wi-Fi provisioning completed; call toes_matter::listen().await next");
|
||||
info!("Matter provisioning completed; call toes_matter::listen().await next");
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user