Skip to content

Commit 15b9127

Browse files
hastyraul-marquez-csa
authored andcommitted
Initial XML for Power Topology cluster (project-chip#31689)
* Initial XML for Power Topology cluster * Regen * Restyled really wants newlines at the end of every JSON file * Rename LeafTopology to TreeTopology
1 parent 9803c3a commit 15b9127

40 files changed

+3716
-0
lines changed

.github/workflows/tests.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ jobs:
155155
src/app/zap-templates/zcl/data-model/chip/operational-state-oven-cluster.xml \
156156
src/app/zap-templates/zcl/data-model/chip/operational-state-rvc-cluster.xml \
157157
src/app/zap-templates/zcl/data-model/chip/oven-mode-cluster.xml \
158+
src/app/zap-templates/zcl/data-model/chip/power-topology-cluster.xml \
158159
src/app/zap-templates/zcl/data-model/chip/pressure-measurement-cluster.xml \
159160
src/app/zap-templates/zcl/data-model/chip/power-source-cluster.xml \
160161
src/app/zap-templates/zcl/data-model/chip/power-source-configuration-cluster.xml \

docs/clusters.md

+1
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ Generally regenerate using one of:
8484
| 152 | 0x98 | DeviceEnergyManagement |
8585
| 153 | 0x99 | EnergyEvse |
8686
| 155 | 0x9B | EnergyPreference |
87+
| 156 | 0x9C | PowerTopology |
8788
| 157 | 0x9D | EnergyEvseMode |
8889
| 159 | 0x9F | DeviceEnergyManagementMode |
8990
| 257 | 0x101 | DoorLock |

scripts/rules.matterlint

+1
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ load "../src/app/zap-templates/zcl/data-model/chip/operational-state-rvc-cluster
6868
load "../src/app/zap-templates/zcl/data-model/chip/oven-mode-cluster.xml";
6969
load "../src/app/zap-templates/zcl/data-model/chip/power-source-cluster.xml";
7070
load "../src/app/zap-templates/zcl/data-model/chip/power-source-configuration-cluster.xml";
71+
load "../src/app/zap-templates/zcl/data-model/chip/power-topology-cluster.xml";
7172
load "../src/app/zap-templates/zcl/data-model/chip/pressure-measurement-cluster.xml";
7273
load "../src/app/zap-templates/zcl/data-model/chip/proxy-configuration-cluster.xml";
7374
load "../src/app/zap-templates/zcl/data-model/chip/proxy-discovery-cluster.xml";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
Copyright (c) 2024 Project CHIP Authors
4+
5+
Licensed under the Apache License, Version 2.0 (the "License");
6+
you may not use this file except in compliance with the License.
7+
You may obtain a copy of the License at
8+
9+
http://www.apache.org/licenses/LICENSE-2.0
10+
11+
Unless required by applicable law or agreed to in writing, software
12+
distributed under the License is distributed on an "AS IS" BASIS,
13+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
See the License for the specific language governing permissions and
15+
limitations under the License.
16+
-->
17+
<configurator>
18+
<domain name="Measurement &amp; Sensing"/>
19+
<bitmap name="Feature" type="bitmap32">
20+
<cluster code="0x009C"/>
21+
<field name="NodeTopology" mask="0x01"/>
22+
<field name="TreeTopology" mask="0x02"/>
23+
<field name="SetTopology" mask="0x04"/>
24+
<field name="DynamicPowerFlow" mask="0x08"/>
25+
</bitmap>
26+
<cluster code="0x009C">
27+
<domain>Measurement &amp; Sensing</domain>
28+
<name>Power Topology</name>
29+
<code>0x009C</code>
30+
<define>POWER_TOPOLOGY_CLUSTER</define>
31+
<description>The Power Topology Cluster provides a mechanism for expressing how power is flowing between endpoints.</description>
32+
<client init="false" tick="false">true</client>
33+
<server init="false" tick="false">true</server>
34+
<globalAttribute code="0xFFFD" side="either" value="1"/>
35+
<attribute code="0x0000" side="server" define="AVAILABLE_ENDPOINTS" type="array" entryType="endpoint_no" length="20" optional="true">AvailableEndpoints</attribute>
36+
<attribute code="0x0001" side="server" define="ACTIVE_ENDPOINTS" type="array" entryType="endpoint_no" length="20" optional="true">ActiveEndpoints</attribute>
37+
</cluster>
38+
</configurator>

src/app/zap-templates/zcl/zcl-with-test-extensions.json

+1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
"operational-state-oven-cluster.xml",
8989
"operational-state-rvc-cluster.xml",
9090
"oven-mode-cluster.xml",
91+
"power-topology-cluster.xml",
9192
"pressure-measurement-cluster.xml",
9293
"power-source-cluster.xml",
9394
"power-source-configuration-cluster.xml",

src/app/zap-templates/zcl/zcl.json

+1
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@
8585
"operational-state-oven-cluster.xml",
8686
"operational-state-rvc-cluster.xml",
8787
"oven-mode-cluster.xml",
88+
"power-topology-cluster.xml",
8889
"pressure-measurement-cluster.xml",
8990
"power-source-cluster.xml",
9091
"power-source-configuration-cluster.xml",

src/app/zap_cluster_list.json

+2
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
"MESSAGES_CLUSTER": [],
6969
"MODE_SELECT_CLUSTER": [],
7070
"NETWORK_COMMISSIONING_CLUSTER": [],
71+
"POWER_TOPOLOGY_CLUSTER": [],
7172
"SAMPLE_MEI_CLUSTER": [],
7273
"NITROGEN_DIOXIDE_CONCENTRATION_MEASUREMENT_CLUSTER": [],
7374
"OCCUPANCY_SENSING_CLUSTER": ["occupancy-sensor-server"],
@@ -227,6 +228,7 @@
227228
"SAMPLE_MEI_CLUSTER": ["sample-mei-server"],
228229
"OCCUPANCY_SENSING_CLUSTER": ["occupancy-sensor-server"],
229230
"ON_OFF_CLUSTER": ["on-off-server"],
231+
"POWER_TOPOLOGY_CLUSTER": [],
230232
"ON_OFF_SWITCH_CONFIGURATION_CLUSTER": [],
231233
"OPERATIONAL_CREDENTIALS_CLUSTER": ["operational-credentials-server"],
232234
"OPERATIONAL_STATE_CLUSTER": ["operational-state-server"],

src/controller/data_model/controller-clusters.matter

+21
Original file line numberDiff line numberDiff line change
@@ -4994,6 +4994,27 @@ cluster EnergyPreference = 155 {
49944994
readonly attribute int16u clusterRevision = 65533;
49954995
}
49964996

4997+
/** The Power Topology Cluster provides a mechanism for expressing how power is flowing between endpoints. */
4998+
cluster PowerTopology = 156 {
4999+
revision 1;
5000+
5001+
bitmap Feature : bitmap32 {
5002+
kNodeTopology = 0x1;
5003+
kTreeTopology = 0x2;
5004+
kSetTopology = 0x4;
5005+
kDynamicPowerFlow = 0x8;
5006+
}
5007+
5008+
readonly attribute optional endpoint_no availableEndpoints[] = 0;
5009+
readonly attribute optional endpoint_no activeEndpoints[] = 1;
5010+
readonly attribute command_id generatedCommandList[] = 65528;
5011+
readonly attribute command_id acceptedCommandList[] = 65529;
5012+
readonly attribute event_id eventList[] = 65530;
5013+
readonly attribute attrib_id attributeList[] = 65531;
5014+
readonly attribute bitmap32 featureMap = 65532;
5015+
readonly attribute int16u clusterRevision = 65533;
5016+
}
5017+
49975018
/** Attributes and commands for selecting a mode from a list of supported options. */
49985019
provisional cluster EnergyEvseMode = 157 {
49995020
revision 1;

src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java

+247
Original file line numberDiff line numberDiff line change
@@ -32073,6 +32073,253 @@ public void onSuccess(byte[] tlv) {
3207332073
}
3207432074
}
3207532075

32076+
public static class PowerTopologyCluster extends BaseChipCluster {
32077+
public static final long CLUSTER_ID = 156L;
32078+
32079+
private static final long AVAILABLE_ENDPOINTS_ATTRIBUTE_ID = 0L;
32080+
private static final long ACTIVE_ENDPOINTS_ATTRIBUTE_ID = 1L;
32081+
private static final long GENERATED_COMMAND_LIST_ATTRIBUTE_ID = 65528L;
32082+
private static final long ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID = 65529L;
32083+
private static final long EVENT_LIST_ATTRIBUTE_ID = 65530L;
32084+
private static final long ATTRIBUTE_LIST_ATTRIBUTE_ID = 65531L;
32085+
private static final long FEATURE_MAP_ATTRIBUTE_ID = 65532L;
32086+
private static final long CLUSTER_REVISION_ATTRIBUTE_ID = 65533L;
32087+
32088+
public PowerTopologyCluster(long devicePtr, int endpointId) {
32089+
super(devicePtr, endpointId, CLUSTER_ID);
32090+
}
32091+
32092+
@Override
32093+
@Deprecated
32094+
public long initWithDevice(long devicePtr, int endpointId) {
32095+
return 0L;
32096+
}
32097+
32098+
public interface AvailableEndpointsAttributeCallback extends BaseAttributeCallback {
32099+
void onSuccess(List<Integer> value);
32100+
}
32101+
32102+
public interface ActiveEndpointsAttributeCallback extends BaseAttributeCallback {
32103+
void onSuccess(List<Integer> value);
32104+
}
32105+
32106+
public interface GeneratedCommandListAttributeCallback extends BaseAttributeCallback {
32107+
void onSuccess(List<Long> value);
32108+
}
32109+
32110+
public interface AcceptedCommandListAttributeCallback extends BaseAttributeCallback {
32111+
void onSuccess(List<Long> value);
32112+
}
32113+
32114+
public interface EventListAttributeCallback extends BaseAttributeCallback {
32115+
void onSuccess(List<Long> value);
32116+
}
32117+
32118+
public interface AttributeListAttributeCallback extends BaseAttributeCallback {
32119+
void onSuccess(List<Long> value);
32120+
}
32121+
32122+
public void readAvailableEndpointsAttribute(
32123+
AvailableEndpointsAttributeCallback callback) {
32124+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, AVAILABLE_ENDPOINTS_ATTRIBUTE_ID);
32125+
32126+
readAttribute(new ReportCallbackImpl(callback, path) {
32127+
@Override
32128+
public void onSuccess(byte[] tlv) {
32129+
List<Integer> value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32130+
callback.onSuccess(value);
32131+
}
32132+
}, AVAILABLE_ENDPOINTS_ATTRIBUTE_ID, true);
32133+
}
32134+
32135+
public void subscribeAvailableEndpointsAttribute(
32136+
AvailableEndpointsAttributeCallback callback, int minInterval, int maxInterval) {
32137+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, AVAILABLE_ENDPOINTS_ATTRIBUTE_ID);
32138+
32139+
subscribeAttribute(new ReportCallbackImpl(callback, path) {
32140+
@Override
32141+
public void onSuccess(byte[] tlv) {
32142+
List<Integer> value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32143+
}
32144+
}, AVAILABLE_ENDPOINTS_ATTRIBUTE_ID, minInterval, maxInterval);
32145+
}
32146+
32147+
public void readActiveEndpointsAttribute(
32148+
ActiveEndpointsAttributeCallback callback) {
32149+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, ACTIVE_ENDPOINTS_ATTRIBUTE_ID);
32150+
32151+
readAttribute(new ReportCallbackImpl(callback, path) {
32152+
@Override
32153+
public void onSuccess(byte[] tlv) {
32154+
List<Integer> value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32155+
callback.onSuccess(value);
32156+
}
32157+
}, ACTIVE_ENDPOINTS_ATTRIBUTE_ID, true);
32158+
}
32159+
32160+
public void subscribeActiveEndpointsAttribute(
32161+
ActiveEndpointsAttributeCallback callback, int minInterval, int maxInterval) {
32162+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, ACTIVE_ENDPOINTS_ATTRIBUTE_ID);
32163+
32164+
subscribeAttribute(new ReportCallbackImpl(callback, path) {
32165+
@Override
32166+
public void onSuccess(byte[] tlv) {
32167+
List<Integer> value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32168+
}
32169+
}, ACTIVE_ENDPOINTS_ATTRIBUTE_ID, minInterval, maxInterval);
32170+
}
32171+
32172+
public void readGeneratedCommandListAttribute(
32173+
GeneratedCommandListAttributeCallback callback) {
32174+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, GENERATED_COMMAND_LIST_ATTRIBUTE_ID);
32175+
32176+
readAttribute(new ReportCallbackImpl(callback, path) {
32177+
@Override
32178+
public void onSuccess(byte[] tlv) {
32179+
List<Long> value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32180+
callback.onSuccess(value);
32181+
}
32182+
}, GENERATED_COMMAND_LIST_ATTRIBUTE_ID, true);
32183+
}
32184+
32185+
public void subscribeGeneratedCommandListAttribute(
32186+
GeneratedCommandListAttributeCallback callback, int minInterval, int maxInterval) {
32187+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, GENERATED_COMMAND_LIST_ATTRIBUTE_ID);
32188+
32189+
subscribeAttribute(new ReportCallbackImpl(callback, path) {
32190+
@Override
32191+
public void onSuccess(byte[] tlv) {
32192+
List<Long> value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32193+
}
32194+
}, GENERATED_COMMAND_LIST_ATTRIBUTE_ID, minInterval, maxInterval);
32195+
}
32196+
32197+
public void readAcceptedCommandListAttribute(
32198+
AcceptedCommandListAttributeCallback callback) {
32199+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID);
32200+
32201+
readAttribute(new ReportCallbackImpl(callback, path) {
32202+
@Override
32203+
public void onSuccess(byte[] tlv) {
32204+
List<Long> value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32205+
callback.onSuccess(value);
32206+
}
32207+
}, ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID, true);
32208+
}
32209+
32210+
public void subscribeAcceptedCommandListAttribute(
32211+
AcceptedCommandListAttributeCallback callback, int minInterval, int maxInterval) {
32212+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID);
32213+
32214+
subscribeAttribute(new ReportCallbackImpl(callback, path) {
32215+
@Override
32216+
public void onSuccess(byte[] tlv) {
32217+
List<Long> value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32218+
}
32219+
}, ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID, minInterval, maxInterval);
32220+
}
32221+
32222+
public void readEventListAttribute(
32223+
EventListAttributeCallback callback) {
32224+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, EVENT_LIST_ATTRIBUTE_ID);
32225+
32226+
readAttribute(new ReportCallbackImpl(callback, path) {
32227+
@Override
32228+
public void onSuccess(byte[] tlv) {
32229+
List<Long> value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32230+
callback.onSuccess(value);
32231+
}
32232+
}, EVENT_LIST_ATTRIBUTE_ID, true);
32233+
}
32234+
32235+
public void subscribeEventListAttribute(
32236+
EventListAttributeCallback callback, int minInterval, int maxInterval) {
32237+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, EVENT_LIST_ATTRIBUTE_ID);
32238+
32239+
subscribeAttribute(new ReportCallbackImpl(callback, path) {
32240+
@Override
32241+
public void onSuccess(byte[] tlv) {
32242+
List<Long> value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32243+
}
32244+
}, EVENT_LIST_ATTRIBUTE_ID, minInterval, maxInterval);
32245+
}
32246+
32247+
public void readAttributeListAttribute(
32248+
AttributeListAttributeCallback callback) {
32249+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, ATTRIBUTE_LIST_ATTRIBUTE_ID);
32250+
32251+
readAttribute(new ReportCallbackImpl(callback, path) {
32252+
@Override
32253+
public void onSuccess(byte[] tlv) {
32254+
List<Long> value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32255+
callback.onSuccess(value);
32256+
}
32257+
}, ATTRIBUTE_LIST_ATTRIBUTE_ID, true);
32258+
}
32259+
32260+
public void subscribeAttributeListAttribute(
32261+
AttributeListAttributeCallback callback, int minInterval, int maxInterval) {
32262+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, ATTRIBUTE_LIST_ATTRIBUTE_ID);
32263+
32264+
subscribeAttribute(new ReportCallbackImpl(callback, path) {
32265+
@Override
32266+
public void onSuccess(byte[] tlv) {
32267+
List<Long> value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32268+
}
32269+
}, ATTRIBUTE_LIST_ATTRIBUTE_ID, minInterval, maxInterval);
32270+
}
32271+
32272+
public void readFeatureMapAttribute(
32273+
LongAttributeCallback callback) {
32274+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, FEATURE_MAP_ATTRIBUTE_ID);
32275+
32276+
readAttribute(new ReportCallbackImpl(callback, path) {
32277+
@Override
32278+
public void onSuccess(byte[] tlv) {
32279+
Long value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32280+
callback.onSuccess(value);
32281+
}
32282+
}, FEATURE_MAP_ATTRIBUTE_ID, true);
32283+
}
32284+
32285+
public void subscribeFeatureMapAttribute(
32286+
LongAttributeCallback callback, int minInterval, int maxInterval) {
32287+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, FEATURE_MAP_ATTRIBUTE_ID);
32288+
32289+
subscribeAttribute(new ReportCallbackImpl(callback, path) {
32290+
@Override
32291+
public void onSuccess(byte[] tlv) {
32292+
Long value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32293+
}
32294+
}, FEATURE_MAP_ATTRIBUTE_ID, minInterval, maxInterval);
32295+
}
32296+
32297+
public void readClusterRevisionAttribute(
32298+
IntegerAttributeCallback callback) {
32299+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, CLUSTER_REVISION_ATTRIBUTE_ID);
32300+
32301+
readAttribute(new ReportCallbackImpl(callback, path) {
32302+
@Override
32303+
public void onSuccess(byte[] tlv) {
32304+
Integer value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32305+
callback.onSuccess(value);
32306+
}
32307+
}, CLUSTER_REVISION_ATTRIBUTE_ID, true);
32308+
}
32309+
32310+
public void subscribeClusterRevisionAttribute(
32311+
IntegerAttributeCallback callback, int minInterval, int maxInterval) {
32312+
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, CLUSTER_REVISION_ATTRIBUTE_ID);
32313+
32314+
subscribeAttribute(new ReportCallbackImpl(callback, path) {
32315+
@Override
32316+
public void onSuccess(byte[] tlv) {
32317+
Integer value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
32318+
}
32319+
}, CLUSTER_REVISION_ATTRIBUTE_ID, minInterval, maxInterval);
32320+
}
32321+
}
32322+
3207632323
public static class EnergyEvseModeCluster extends BaseChipCluster {
3207732324
public static final long CLUSTER_ID = 157L;
3207832325

0 commit comments

Comments
 (0)