Skip to content

Commit 7e16f30

Browse files
authored
Configurable number of subscriptions, im-buffers and responders (#12)
1 parent 614cd0e commit 7e16f30

File tree

2 files changed

+227
-7
lines changed

2 files changed

+227
-7
lines changed

Cargo.toml

Lines changed: 115 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,130 @@ resolver = "2"
77
categories = ["embedded", "hardware-support"]
88
keywords = ["matter", "embedded"]
99
description = "Utility for configuring and running rs-matter"
10-
repository = "https://github.com/ivmarkov/rs-matter-stack"
10+
repository = "https://github.com/sysgrok/rs-matter-stack"
1111
license = "MIT OR Apache-2.0"
1212
readme = "README.md"
1313
rust-version = "1.77"
1414

1515
[patch.crates-io]
1616
rs-matter = { git = "https://github.com/project-chip/rs-matter" }
1717
#rs-matter = { path = "../rs-matter/rs-matter" }
18-
#edge-nal = { git = "https://github.com/ivmarkov/edge-net" }
19-
#edge-nal-std = { git = "https://github.com/ivmarkov/edge-net" }
20-
#edge-mdns = { git = "https://github.com/ivmarkov/edge-net" }
18+
#edge-nal = { git = "https://github.com/sysgrok/edge-net" }
19+
#edge-nal-std = { git = "https://github.com/sysgrok/edge-net" }
20+
#edge-mdns = { git = "https://github.com/sysgrok/edge-net" }
2121

2222
[features]
2323
default = []
24+
25+
# Sizing
26+
27+
# Number of subscriptions
28+
max-subscriptions-32 = []
29+
max-subscriptions-16 = []
30+
max-subscriptions-8 = []
31+
max-subscriptions-7 = []
32+
max-subscriptions-6 = []
33+
max-subscriptions-5 = []
34+
max-subscriptions-4 = []
35+
max-subscriptions-3 = [] # default
36+
max-subscriptions-2 = []
37+
max-subscriptions-1 = []
38+
39+
# Number of IM buffers
40+
max-im-buffers-64 = []
41+
max-im-buffers-32 = []
42+
max-im-buffers-16 = []
43+
max-im-buffers-10 = [] # default
44+
max-im-buffers-9 = []
45+
max-im-buffers-8 = []
46+
max-im-buffers-7 = []
47+
max-im-buffers-6 = []
48+
max-im-buffers-5 = []
49+
max-im-buffers-4 = []
50+
51+
# Number of responders
52+
max-responders-32 = []
53+
max-responders-16 = []
54+
max-responders-8 = []
55+
max-responders-7 = []
56+
max-responders-6 = []
57+
max-responders-5 = []
58+
max-responders-4 = [] # default
59+
max-responders-3 = []
60+
max-responders-2 = []
61+
max-responders-1 = []
62+
63+
# Sizing / rs-matter
64+
65+
# Number of fabrics
66+
max-fabrics-32 = ["rs-matter/max-fabrics-32"]
67+
max-fabrics-16 = ["rs-matter/max-fabrics-16"]
68+
max-fabrics-8 = ["rs-matter/max-fabrics-8"]
69+
max-fabrics-7 = ["rs-matter/max-fabrics-7"]
70+
max-fabrics-6 = ["rs-matter/max-fabrics-6"]
71+
max-fabrics-5 = ["rs-matter/max-fabrics-5"]
72+
max-fabrics-4 = ["rs-matter/max-fabrics-4"]
73+
max-fabrics-3 = ["rs-matter/max-fabrics-3"] # default
74+
max-fabrics-2 = ["rs-matter/max-fabrics-2"]
75+
max-fabrics-1 = ["rs-matter/max-fabrics-1"]
76+
77+
# Number of ACL entries per fabric
78+
max-acls-per-fabric-32 = ["rs-matter/max-acls-per-fabric-32"]
79+
max-acls-per-fabric-16 = ["rs-matter/max-acls-per-fabric-16"]
80+
max-acls-per-fabric-8 = ["rs-matter/max-acls-per-fabric-8"]
81+
max-acls-per-fabric-7 = ["rs-matter/max-acls-per-fabric-7"]
82+
max-acls-per-fabric-6 = ["rs-matter/max-acls-per-fabric-6"]
83+
max-acls-per-fabric-5 = ["rs-matter/max-acls-per-fabric-5"]
84+
max-acls-per-fabric-4 = ["rs-matter/max-acls-per-fabric-4"] # default
85+
max-acls-per-fabric-3 = ["rs-matter/max-acls-per-fabric-3"]
86+
max-acls-per-fabric-2 = ["rs-matter/max-acls-per-fabric-3"]
87+
max-acls-per-fabric-1 = ["rs-matter/max-acls-per-fabric-1"]
88+
89+
# Number of subjects per ACL entry
90+
max-subjects-per-acl-32 = ["rs-matter/max-subjects-per-acl-32"]
91+
max-subjects-per-acl-16 = ["rs-matter/max-subjects-per-acl-16"]
92+
max-subjects-per-acl-8 = ["rs-matter/max-subjects-per-acl-8"]
93+
max-subjects-per-acl-7 = ["rs-matter/max-subjects-per-acl-7"]
94+
max-subjects-per-acl-6 = ["rs-matter/max-subjects-per-acl-6"]
95+
max-subjects-per-acl-5 = ["rs-matter/max-subjects-per-acl-5"]
96+
max-subjects-per-acl-4 = ["rs-matter/max-subjects-per-acl-4"] # default
97+
max-subjects-per-acl-3 = ["rs-matter/max-subjects-per-acl-3"]
98+
max-subjects-per-acl-2 = ["rs-matter/max-subjects-per-acl-2"]
99+
max-subjects-per-acl-1 = ["rs-matter/max-subjects-per-acl-1"]
100+
101+
# Number of targets per ACL entry
102+
max-targets-per-acl-32 = ["rs-matter/max-targets-per-acl-32"]
103+
max-targets-per-acl-16 = ["rs-matter/max-targets-per-acl-16"]
104+
max-targets-per-acl-8 = ["rs-matter/max-targets-per-acl-8"]
105+
max-targets-per-acl-7 = ["rs-matter/max-targets-per-acl-7"]
106+
max-targets-per-acl-6 = ["rs-matter/max-targets-per-acl-6"]
107+
max-targets-per-acl-5 = ["rs-matter/max-targets-per-acl-5"]
108+
max-targets-per-acl-4 = ["rs-matter/max-targets-per-acl-4"]
109+
max-targets-per-acl-3 = ["rs-matter/max-targets-per-acl-3"] # default
110+
max-targets-per-acl-2 = ["rs-matter/max-targets-per-acl-2"]
111+
max-targets-per-acl-1 = ["rs-matter/max-targets-per-acl-1"]
112+
113+
# Number of sessions
114+
max-sessions-64 = ["rs-matter/max-sessions-64"]
115+
max-sessions-32 = ["rs-matter/max-sessions-32"]
116+
max-sessions-16 = ["rs-matter/max-sessions-16"] # default
117+
max-sessions-8 = ["rs-matter/max-sessions-8"]
118+
max-sessions-7 = ["rs-matter/max-sessions-7"]
119+
max-sessions-6 = ["rs-matter/max-sessions-6"]
120+
max-sessions-5 = ["rs-matter/max-sessions-5"]
121+
max-sessions-4 = ["rs-matter/max-sessions-4"]
122+
max-sessions-3 = ["rs-matter/max-sessions-3"]
123+
124+
# Number of exchanges per session
125+
max-exchanges-per-session-16 = ["rs-matter/max-exchanges-per-session-16"]
126+
max-exchanges-per-session-8 = ["rs-matter/max-exchanges-per-session-8"]
127+
max-exchanges-per-session-7 = ["rs-matter/max-exchanges-per-session-7"]
128+
max-exchanges-per-session-6 = ["rs-matter/max-exchanges-per-session-6"]
129+
max-exchanges-per-session-5 = ["rs-matter/max-exchanges-per-session-5"] # default
130+
max-exchanges-per-session-4 = ["rs-matter/max-exchanges-per-session-4"]
131+
max-exchanges-per-session-3 = ["rs-matter/max-exchanges-per-session-3"]
132+
133+
# General
24134
log = ["dep:log", "rs-matter/log", "embedded-svc/log", "edge-mdns?/log"]
25135
defmt = ["dep:defmt", "rs-matter/defmt", "embedded-svc/defmt", "heapless/defmt-03", "edge-mdns?/defmt"]
26136
zbus = ["rs-matter/zbus"]
@@ -35,6 +145,7 @@ alloc = ["embedded-svc/alloc"]
35145
examples = ["log", "os", "nix", "embassy-time-queue-utils/generic-queue-64", "zeroconf"]
36146

37147
[dependencies]
148+
cfg-if = "1"
38149
log = { version = "0.4", default-features = false, optional = true }
39150
defmt = { version = "0.3", default-features = false, optional = true, features = ["ip_in_core"] }
40151
heapless = "0.8"

src/lib.rs

Lines changed: 112 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use core::future::Future;
1313
use core::net::{Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV6};
1414
use core::pin::pin;
1515

16+
use cfg_if::cfg_if;
1617
use edge_nal::{UdpBind, UdpSplit};
1718
use embassy_futures::select::{select, select4, Either4};
1819
use embassy_sync::blocking_mutex::raw::NoopRawMutex;
@@ -71,9 +72,117 @@ mod private {
7172
impl Sealed for () {}
7273
}
7374

74-
const MAX_SUBSCRIPTIONS: usize = 3;
75-
const MAX_IM_BUFFERS: usize = 10;
76-
const MAX_RESPONDERS: usize = 4;
75+
cfg_if! {
76+
if #[cfg(feature = "max-subscriptions-32")] {
77+
/// Max number of subscriptions
78+
const MAX_SUBSCRIPTIONS: usize = 32;
79+
} else if #[cfg(feature = "max-subscriptions-16")] {
80+
/// Max number of subscriptions
81+
const MAX_SUBSCRIPTIONS: usize = 16;
82+
} else if #[cfg(feature = "max-subscriptions-8")] {
83+
/// Max number of subscriptions
84+
const MAX_SUBSCRIPTIONS: usize = 8;
85+
} else if #[cfg(feature = "max-subscriptions-7")] {
86+
/// Max number of subscriptions
87+
const MAX_SUBSCRIPTIONS: usize = 7;
88+
} else if #[cfg(feature = "max-subscriptions-6")] {
89+
/// Max number of subscriptions
90+
const MAX_SUBSCRIPTIONS: usize = 6;
91+
} else if #[cfg(feature = "max-subscriptions-5")] {
92+
/// Max number of subscriptions
93+
const MAX_SUBSCRIPTIONS: usize = 5;
94+
} else if #[cfg(feature = "max-subscriptions-4")] {
95+
/// Max number of subscriptions
96+
const MAX_SUBSCRIPTIONS: usize = 4;
97+
} else if #[cfg(feature = "max-subscriptions-3")] {
98+
/// Max number of subscriptions
99+
const MAX_SUBSCRIPTIONS: usize = 3;
100+
} else if #[cfg(feature = "max-subscriptions-2")] {
101+
/// Max number of subscriptions
102+
const MAX_SUBSCRIPTIONS: usize = 2;
103+
} else if #[cfg(feature = "max-subscriptions-1")] {
104+
/// Max number of subscriptions
105+
const MAX_SUBSCRIPTIONS: usize = 1;
106+
} else {
107+
/// Max number of subscriptions
108+
const MAX_SUBSCRIPTIONS: usize = 3;
109+
}
110+
}
111+
112+
cfg_if! {
113+
if #[cfg(feature = "max-im-buffers-64")] {
114+
/// Max number of IM buffers
115+
const MAX_IM_BUFFERS: usize = 64;
116+
} else if #[cfg(feature = "max-im-buffers-32")] {
117+
/// Max number of IM buffers
118+
const MAX_IM_BUFFERS: usize = 32;
119+
} else if #[cfg(feature = "max-im-buffers-16")] {
120+
/// Max number of IM buffers
121+
const MAX_IM_BUFFERS: usize = 16;
122+
} else if #[cfg(feature = "max-im-buffers-10")] {
123+
/// Max number of IM buffers
124+
const MAX_IM_BUFFERS: usize = 10;
125+
} else if #[cfg(feature = "max-im-buffers-9")] {
126+
/// Max number of IM buffers
127+
const MAX_IM_BUFFERS: usize = 9;
128+
} else if #[cfg(feature = "max-im-buffers-8")] {
129+
/// Max number of IM buffers
130+
const MAX_IM_BUFFERS: usize = 8;
131+
} else if #[cfg(feature = "max-im-buffers-7")] {
132+
/// Max number of IM buffers
133+
const MAX_IM_BUFFERS: usize = 7;
134+
} else if #[cfg(feature = "max-im-buffers-6")] {
135+
/// Max number of IM buffers
136+
const MAX_IM_BUFFERS: usize = 6;
137+
} else if #[cfg(feature = "max-im-buffers-5")] {
138+
/// Max number of IM buffers
139+
const MAX_IM_BUFFERS: usize = 5;
140+
} else if #[cfg(feature = "max-im-buffers-4")] {
141+
/// Max number of IM buffers
142+
const MAX_IM_BUFFERS: usize = 4;
143+
} else {
144+
/// Max number of IM buffers
145+
const MAX_IM_BUFFERS: usize = 10;
146+
}
147+
}
148+
149+
cfg_if! {
150+
if #[cfg(feature = "max-responders-32")] {
151+
/// Max number of concurrent responders
152+
const MAX_RESPONDERS: usize = 32;
153+
} else if #[cfg(feature = "max-responders-16")] {
154+
/// Max number of concurrent responders
155+
const MAX_RESPONDERS: usize = 16;
156+
} else if #[cfg(feature = "max-responders-8")] {
157+
/// Max number of concurrent responders
158+
const MAX_RESPONDERS: usize = 8;
159+
} else if #[cfg(feature = "max-responders-7")] {
160+
/// Max number of concurrent responders
161+
const MAX_RESPONDERS: usize = 7;
162+
} else if #[cfg(feature = "max-responders-6")] {
163+
/// Max number of concurrent responders
164+
const MAX_RESPONDERS: usize = 6;
165+
} else if #[cfg(feature = "max-responders-5")] {
166+
/// Max number of concurrent responders
167+
const MAX_RESPONDERS: usize = 5;
168+
} else if #[cfg(feature = "max-responders-4")] {
169+
/// Max number of concurrent responders
170+
const MAX_RESPONDERS: usize = 4;
171+
} else if #[cfg(feature = "max-responders-3")] {
172+
/// Max number of concurrent responders
173+
const MAX_RESPONDERS: usize = 3;
174+
} else if #[cfg(feature = "max-responders-2")] {
175+
/// Max number of concurrent responders
176+
const MAX_RESPONDERS: usize = 2;
177+
} else if #[cfg(feature = "max-responders-1")] {
178+
/// Max number of concurrent responders
179+
const MAX_RESPONDERS: usize = 1;
180+
} else {
181+
/// Max number of concurrent responders
182+
const MAX_RESPONDERS: usize = 4;
183+
}
184+
}
185+
77186
const MAX_BUSY_RESPONDERS: usize = 2;
78187

79188
/// The `MatterStack` struct is the main entry point for the Matter stack.

0 commit comments

Comments
 (0)