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
|
||||||
50
src/lib.rs
50
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::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()
|
.coalesce());
|
||||||
.await?;
|
|
||||||
|
select(&mut matter_tasks, &mut commissioning_done_task)
|
||||||
|
.coalesce()
|
||||||
|
.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(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user