This is an implementation of the Matter OTA Requestor functionality that can be used by Matter applications for OTA software updates
There are various components defined to support OTA software updates. The Matter SDK supplies the default implementation to all components. If so desired, a custom implementation may be used to replace the default implementation.
This is an interface for processing the core requestor logic. This includes sending commands to the OTA Provider cluster as well as handling the responses for those commands. This component also maintains the server attributes for the OTA Requestor cluster.
DefaultOTARequestor
class is the default implementation of this interface. Any custom implementation should reside under examples/platform/<platform-name>
.
This is an interface for using/driving the OTARequestorInterface
. This component determines the next action to take based on the current status returned by OTARequestorInterface
. For instance, after OTARequestorInterface
receives a QueryImageResponse that an update is available, it informs OTARequestorDriver
which then decides whether it is ready to immediately start the download or to wait on some conditions.
DefaultOTARequestorDriver
class is the default implementation of this interface. Any custom implementation should reside under examples/platform/<platform-name>
.
Please note the following implementation choices in the default implementation:
OTAImageProcessorInterface
OTARequestorInterface
is in the idle stateThis is a platform-agnostic interface for processing downloaded chunks of OTA image data. The data could be raw image data meant for flash or metadata. This component should interact with the OTADownloader
to drive the download process.
Each platform should provide an implementation of this interface which should reside under src/platform/<platform-name>
.
This is an interface for image download functionality over a particular protocol. Each DownloadProtocolEnum
supported should provide an implementation of this interface.
BDXDownloader
class is an implementation of this interface for the BDX protocol.
This is an interface for storing/loading persistent data related to OTA.
DefaultOTARequestorStorage
class is the default implementation of this interface. Any custom implementation should reside under examples/platform/<platform-name>
.
Server
for the OTA Software Update Requestor cluster in the application zap fileClient
for the OTA Software Update Provider cluster in the application zap fileDefaultOTARequestor
class or implement a class derived from OTARequestorInterface
DefaultOTARequestorDriver
class or implement a class derived from OTARequestorDriver
BDXDownloader
class or implement a class derived from OTADownloader
OTAImageProcessorInterface
DefaultOTARequestorStorage
class or implement a class derived from OTARequestorStorage
src/app/clusters/ota-requestor
in the application make/build file. For example: src/app/chip_data_model.gni
. Otherwise, list the source files where the component implementation reside.src/platform
. For example: src/platform/Linux/BUILD.gn
DefaultOTARequestor
classDefaultOTARequestorDriver
classOTAImageProcessorImpl
class from src/platform/Linux/OTAImageProcessorImpl.h
BDXDownloader
classDefaultOTARequestorStorage
classDefaultOTARequestor
through SetRequestorInstance()
DefaultOTARequestorStorage
through DefaultOTARequestorStorage::Init
DefaultOTARequestorStorage
, DefaultOTARequestorDriver
, and BDXDownloader
with the instance of DefaultOTARequestor
through DefaultOTARequestor::Init
()DefaultOTARequestor
and OTAImageProcessorImpl
with the instance of DefaultOTARequestorDriver
through DefaultOTARequestorDriver::Init
(). It is important that this is performed after DefaultOTARequestor::Init
as there are dependencies that DefaultOTARequestor
already has access to DefaultOTARequestorDriver
by the time this initialization occurs.BDXDownloader
with the instance of OTAImageProcessorImpl
through OTAImageProcessorImpl::SetOTADownloader
OTAImageProcessorImpl
with the instance of BDXDownloader
through OTADownloader::SetImageProcessorDelegate
examples/ota-requestor-app/linux/main.cpp
for an example of the initialization code above