blob: 7bafac36b227ed0e4fa7175e8b26b9a4e9a92b9a [file] [view]
# Closure Dimension Cluster
This cluster provides an interface for controlling a single degree of freedom
(also referred to as a "dimension" or an "axis" below) of a composed closure.
## Overview
This directory contains a code-driven C++ implementation of the Matter Closure
Dimension cluster server. This implementation (`ClosureDimensionCluster.h`) is
designed for flexibility, avoiding the tight coupling present in older
codegen-based implementations.
It uses a delegate pattern
(`chip::app::Clusters::ClosureDimension::ClosureDimensionClusterDelegate`) to
interact with the application's closure dimension logic and state management.
## Usage
To integrate the `ClosureDimensionCluster` into your application, follow these
steps:
### 1. Implement the Delegate
Create a class that inherits from
`chip::app::Clusters::ClosureDimension::ClosureDimensionClusterDelegate` and
implement its virtual methods to handle commands and provide dimension state
information.
```cpp
#include "app/clusters/closure-dimension-server/ClosureDimensionClusterDelegate.h"
class MyClosureDimensionDelegate : public chip::app::Clusters::ClosureDimension::ClosureDimensionClusterDelegate
{
};
```
### 2. Configure Cluster Conformance
Configure the cluster's feature map and optional attributes based on your device
capabilities. The conformance must be valid before cluster creation (see
"Conformance Validation" below).
```cpp
#include "app/clusters/closure-dimension-server/ClosureDimensionCluster.h"
chip::app::Clusters::ClosureDimension::ClusterConformance conformance;
conformance.FeatureMap().Set(chip::app::Clusters::ClosureDimension::Feature::kPositioning);
conformance.FeatureMap().Set(chip::app::Clusters::ClosureDimension::Feature::kMotionLatching);
// Add other features as needed
// Optional: Configure init parameters (translation / rotation / modulation when those features are enabled)
chip::app::Clusters::ClosureDimension::ClusterInitParameters initParams;
initParams.translationDirection = chip::app::Clusters::ClosureDimension::TranslationDirectionEnum::kDownward;
// initParams.rotationAxis / initParams.modulationType when required
```
### 3. Instantiate Delegates and Cluster
Instantiate your delegate and the `ClosureDimensionCluster` itself for each
endpoint that requires it. Using `RegisteredServerCluster` simplifies
registration.
```cpp
#include "app/server-cluster/ServerClusterInterfaceRegistry.h"
// In a .cpp file
MyClosureDimensionDelegate gMyDelegate;
chip::app::Clusters::ClosureDimension::ClosureDimensionCluster::Context clusterContext{
.delegate = gMyDelegate,
.conformance = conformance,
.initParams = initParams
};
chip::app::RegisteredServerCluster<chip::app::Clusters::ClosureDimension::ClosureDimensionCluster> gClosureDimensionCluster(
chip::EndpointId{ 2 }, clusterContext);
```
### 4. Register the Cluster
In your application's initialization sequence, register the cluster instance
with the `CodegenDataModelProvider`. This hooks the cluster into the Matter data
model and message processing framework.
```cpp
#include "data-model-providers/codegen/CodegenDataModelProvider.h"
void ApplicationInit()
{
// ... other initializations
// Register cluster BEFORE server starts
CHIP_ERROR err = chip::app::CodegenDataModelProvider::Instance().Registry().Register(
gClosureDimensionCluster.Registration());
VerifyOrDie(err == CHIP_NO_ERROR);
// ... server startup happens later
}
```
## Initialization Sequence
### Code-Driven Cluster Usage (Recommended)
For new applications using the code-driven cluster pattern:
1. **Before Server Startup:**
- Configure `ClusterConformance` with valid feature map
- Configure `ClusterInitParameters` with initial state
- Instantiate delegate and cluster
- Register cluster with `CodegenDataModelProvider`
2. **After Startup:**
- All getter/setter methods are safe to use via Cluster Instance
Legacy API Usage
The legacy classes `ClusterLogic` and `MatterContext` have been removed and are
no longer required in the newer implementation.
Other APIs are retained for backward compatibility and remain accessible through
the legacy Interface class through `CodegenIntegration.h`
## Conformance Validation
The cluster performs strict conformance validation during construction. **Any
validation failure is fatal** and will terminate the application with "Invalid
Conformance" message
### Migrating from the Legacy API
We recommend migrating to the new, direct instantiation method to improve
performance and reduce your application's footprint.
#### Recommended Usage
The new approach is to instantiate the cluster directly and register it with the
`CodegenDataModelProvider`, as detailed in the "Usage" section above.