Merge branch 'main' of https://git.fishmt.net/nakajima/toes-matter
This commit is contained in:
commit
f4366945cb
36
releasor2000.toml
Normal file
36
releasor2000.toml
Normal 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
|
||||
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