Matter All-Devices Application — Silabs (EFR32)#
This is the Silabs/EFR32 target for the all-devices-app. Refer to the
top-level all-devices-app README for a description of the
Code-Driven paradigm, supported device types, CLI concepts, and the overall
documentation suite under ../docs/.
Unlike the Linux/POSIX variant, the Silabs image cannot select device types from
argv at boot. Instead the topology is chosen in one of two ways:
Runtime (Matter shell) — flash the default image and use the
devtypeshell command to store a single device type in KVS. The image will instantiate that device on the next boot.Build time (no shell required) — bake a fixed, ordered list of device types into the image via GN args. This is the recommended flow for product-like builds and enables running multiple device types on consecutive endpoints without any Matter-shell interaction.
The build-time selection is driven by two GN args declared in all-devices-common/device-factory/enabled_devices.gni:
all_devices_enabled_devices— subset of device types compiled into theDeviceFactory. Empty (default) compiles all of them in.all_devices_default_devices— ordered list of device types instantiated at boot, one per endpoint starting at endpoint 1. Empty (default) means “fall back to the runtime KVS override / factory default single device”.
Every entry in all_devices_default_devices must also be present in
all_devices_enabled_devices (unless the enabled list is empty). GN enforces
this at gen time.
Build command (humidity + temperature sensor on BRD4187C)#
./scripts/examples/gn_silabs_example.sh \
examples/all-devices-app/silabs \
out/all-devices-app \
BRD4187C \
'all_devices_enabled_devices=["humidity-sensor","temperature-sensor"]' \
'all_devices_default_devices=["humidity-sensor","temperature-sensor"]' \
'all_devices_app_name="humidity-and-temp-sensor"' \
'chip_build_libshell=false'
Result:
Output image:
out/all-devices-app/thread/BRD4187C/humidity-and-temp-sensor.outEndpoint layout on boot:
Endpoint 0 → Root Node Endpoint 1 → humidity-sensor Endpoint 2 → temperature-sensor
No Matter shell interaction is needed to select the device types — the mapping
is fixed at build time. Dropping chip_build_libshell=false keeps the devtype
shell command available but has no effect on the pre-baked topology (the
build-time list takes precedence over any KVS override).
Building a single device type#
Same recipe with a single-element list, e.g. a temperature sensor only:
./scripts/examples/gn_silabs_example.sh \
examples/all-devices-app/silabs \
out/all-devices-app \
BRD4187C \
'all_devices_enabled_devices=["temperature-sensor"]' \
'all_devices_default_devices=["temperature-sensor"]' \
'all_devices_app_name="temperature-sensor-app"' \
'chip_build_libshell=false'
Default image (runtime device selection)#
Omitting both args produces the full matter-silabs-all-devices-example.out
image with every device type registered in the factory and runtime selection via
the shell:
./scripts/examples/gn_silabs_example.sh \
examples/all-devices-app/silabs \
out/all-devices-app \
BRD4187C
Then, from the device shell:
matterCli> devtype list
matterCli> devtype set humidity-sensor
matterCli> reboot