SDK Architecture Overview#
Getting Started#
SDK Location: project-chip/connectedhomeip_
email help@csa-iot.org to get access to the other repos and to be added to project-chip org
Basic SDK Architecture#
Platform Layer#
Platform layer implements the connection to the network stack and the base OS. Messages flow off the wire into the platform layer, where they are routed into the platform API for processing by the Matter stack.
Platform API#
The platform API defines a common layer to interact with the core.
Core#
Core encompasses a huge part of the spec, including all of the the underlying communication protocols. The goal of the core code is to deliver valid messages to the ember layer indicating the cluster request and associated endpoint information.
Ember#
The ember layer is a generated layer that implements the composition of ONE SPECIFIC device. It looks at each message and determines if the device has implemented the selected attribute or command on the cluster on the selected endpoint, and then blocks or routes accordingly, based on the implementation and the access control.
Valid requests are forwarded on to the cluster implementations to handle and invalid requests get sent back with an error. Ember layer is the piece that makes your device your device. Most are generated statically using zap.
Cluster implementations#
The cluster implementations are the logic that back the cluster. The cluster implementation code receives messages from the ember layer to request data model operations on the cluster (reads / writes / command invokes). They are also responsible for event generation and attribute change reporting. Simple cluster logic can be written in the ember callback functions, but more complex cluster logic is handled in the run-time installed interface layers.
SDK Organization (some key bits)#
docs
docs/guides/BUILDING.md - follow this first
examples
examples/chip-tool - main controller example
examples/all-clusters-app - QA app
examples/<others> - Specific Device examples
scripts
bootstrap.sh & activate.sh - environment setup
build/build_examples.py - build example code
tools/zap/run_zaptool.sh - start zap tool
tools/zap_regen_all.py - .zap -> .matter
src
controller - client side code including python implementation
app - base server side code
app/clusters - cluster implementations (.cpp)
app/zap-templates/zcl/data-model/chip/ - cluster definitions (.xml)
app/tests/suites/certification - yaml cert test automation scripts
lib/support/ - Embedded versions of common utilities
platform - platform delegate APIs / implementations
include/platform - platform delegate APIs / implementations
python_testing - python cert test automation scripts
zzz_generated/app-common/app-common/zap-generated/*
all the generated cluster logic / namespaces
data_model
These files are generated and are used to check conformance against the spec. They should not be manually changed.