This commit is contained in:
Pat Nakajima 2026-05-18 13:55:31 -07:00
commit f4366945cb
2 changed files with 77 additions and 9 deletions

36
releasor2000.toml Normal file
View File

@ -0,0 +1,36 @@
[project]
name = "toes-matter"
auto-tag = true # detect Cargo.toml version, create/push git tag v<version> before releasing to git
# binary = "toes-matter" # defaults to project name
# package = "toes-matter" # optional workspace package override; auto-detected from binary when unique
# binaries = ["toes-matter", "toes-matter-cli"] # optional extra release assets
repo = "nakajima/toes-matter"
# version-command = "git describe --tags --abbrev=0"
[build]
command = "cargo build --release --target {target}"
artifact = "target/{target}/release/{binary}"
targets = [
"aarch64-unknown-linux-gnu",
]
[git]
type = "gitea" # defaults to "github"
base-url = "https://git.fishmt.net"
# api-base-url = "https://git.example.com/api/v1" # defaults from type/base-url
# token-env = "GITEA_TOKEN" # defaults: GITHUB_TOKEN or GITEA_TOKEN
[channels.git]
enabled = true
# [channels.homebrew]
# tap = "owner/homebrew-tap"
# formula-name = "toes-matter"
# [channels.cargo]
# crate-name = "toes-matter"
[channels.curl]
# [channels.nix]
# flake-repo = "owner/nix-repo" # defaults to project repo

View File

@ -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::mdns::zeroconf::ZeroconfMdnsResponder;
use rs_matter::transport::network::wifi::wpa_supp::unix::DhClientCtl; use rs_matter::transport::network::wifi::wpa_supp::unix::DhClientCtl;
use rs_matter::transport::network::wifi::wpa_supp::WpaSuppCtl; 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::transport::MATTER_SOCKET_BIND_ADDR;
use rs_matter::utils::select::Coalesce; use rs_matter::utils::select::Coalesce;
use rs_matter::utils::storage::pooled::PooledBuffers; use rs_matter::utils::storage::pooled::PooledBuffers;
@ -67,6 +67,8 @@ const DEFAULT_CREDS_DIR: &str = "./creds";
const DEFAULT_WIFI_IFACE: &str = "wlan0"; const DEFAULT_WIFI_IFACE: &str = "wlan0";
const LIGHT_ENDPOINT_ID: u16 = 1; const LIGHT_ENDPOINT_ID: u16 = 1;
const KV_BUF_SIZE: usize = 4096; 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 { const DEV_TYPE_EXTENDED_COLOR_LIGHT: rs_matter::dm::DeviceType = rs_matter::dm::DeviceType {
dtype: 0x010d, dtype: 0x010d,
@ -360,28 +362,58 @@ where
let btp = Btp::new(); let btp = Btp::new();
btp.set_relaxed_mtu_nego(true); 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 adv_data = AdvData::new(&TEST_DEV_DET, comm.discriminator);
let mut bluetooth = pin!(bluez::run_peripheral( 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 transport = pin!(matter.run(
let mut wifi_prov_task = pin!(async { &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; 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(()) Ok(())
}); });
select4( let mut matter_tasks = pin!(select4(
&mut transport, &mut transport,
&mut bluetooth, &mut bluetooth,
&mut wifi_prov_task, &mut mdns,
select(&mut respond, &mut dm_job).coalesce(), select(&mut respond, &mut dm_job).coalesce(),
) )
.coalesce());
select(&mut matter_tasks, &mut commissioning_done_task)
.coalesce() .coalesce()
.await?; .await?;
matter.reset_transport()?; 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(()) Ok(())
} }