Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ limitations under the License.
<!--
XML generated by Alchemy; DO NOT EDIT.
Source: src/app_clusters/CameraAVStreamManagement.adoc
Parameters: zap ignore-errored sdk-root=./repoforks/connectedhomeip/ spec-root=./repoforks/connectedhomeip-spec/ ./repoforks/connectedhomeip-spec/src/app_clusters/PushAVStreamTransport.adoc
Git: 0.9-winter-2026-20-ge0d0c59ef
Alchemy: v1.6.8+dirty
Parameters: zap attribute=in-progress sdkRoot=./ specRoot=../../ConnectedHomeIP-Spec/connectedhomeip-spec/ ../../ConnectedHomeIP-Spec/connectedhomeip-spec/src/app_clusters/CameraAVStreamManagement.adoc
Git: 0.9-summer2026-436-g1a5d43d18
Alchemy: v1.6.12
-->
<configurator xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../zcl.xsd">
<domain name="Cameras"/>
Expand Down Expand Up @@ -147,7 +147,7 @@ Alchemy: v1.6.8+dirty
<description>The Camera AV Stream Management cluster is used to allow clients to manage, control, and configure various audio, video, and snapshot streams on a camera.</description>
<client init="false" tick="false">true</client>
<server init="false" tick="false">true</server>
<globalAttribute code="0xFFFD" side="either" value="1"/>
<globalAttribute code="0xFFFD" side="either" value="2"/>
<attribute code="0x0000" side="server" name="MaxConcurrentEncoders" define="MAX_CONCURRENT_VIDEO_ENCODERS" type="int8u" optional="true">
<mandatoryConform>
<orTerm>
Expand Down Expand Up @@ -382,20 +382,20 @@ Alchemy: v1.6.8+dirty
<command code="0x00" source="client" name="AudioStreamAllocate" response="AudioStreamAllocateResponse" optional="true">
<description>This command SHALL allocate an audio stream on the camera and return an allocated audio stream identifier.</description>
<access op="invoke" privilege="manage"/>
<arg id="0" name="StreamUsage" type="StreamUsageEnum" min="0x01" max="0x03"/>
<arg id="1" name="AudioCodec" type="AudioCodecEnum" max="0x01"/>
<arg id="2" name="ChannelCount" type="int8u" min="1" max="8"/>
<arg id="3" name="SampleRate" type="int32u" min="1"/>
<arg id="4" name="BitRate" type="int32u" min="1"/>
<arg id="5" name="BitDepth" type="int8u" min="8" max="32"/>
<arg fieldId="0" name="StreamUsage" type="StreamUsageEnum" min="0x01" max="0x03"/>
<arg fieldId="1" name="AudioCodec" type="AudioCodecEnum" max="0x01"/>
<arg fieldId="2" name="ChannelCount" type="int8u" min="1" max="8"/>
<arg fieldId="3" name="SampleRate" type="int32u" min="1"/>
<arg fieldId="4" name="BitRate" type="int32u" min="1"/>
<arg fieldId="5" name="BitDepth" type="int8u" min="8" max="32"/>
<mandatoryConform>
<feature name="ADO"/>
</mandatoryConform>
</command>

<command code="0x01" source="server" name="AudioStreamAllocateResponse" disableDefaultResponse="true" optional="true">
<description>This command SHALL be sent by the camera in response to the AudioStreamAllocate command, carrying the newly allocated or re-used audio stream identifier.</description>
<arg id="0" name="AudioStreamID" type="int16u"/>
<arg fieldId="0" name="AudioStreamID" type="int16u"/>
<mandatoryConform>
<feature name="ADO"/>
</mandatoryConform>
Expand All @@ -404,7 +404,7 @@ Alchemy: v1.6.8+dirty
<command code="0x02" source="client" name="AudioStreamDeallocate" optional="true">
<description>This command SHALL deallocate an audio stream on the camera, corresponding to the given audio stream identifier.</description>
<access op="invoke" privilege="manage"/>
<arg id="0" name="AudioStreamID" type="int16u"/>
<arg fieldId="0" name="AudioStreamID" type="int16u"/>
<mandatoryConform>
<feature name="ADO"/>
</mandatoryConform>
Expand All @@ -413,25 +413,25 @@ Alchemy: v1.6.8+dirty
<command code="0x03" source="client" name="VideoStreamAllocate" response="VideoStreamAllocateResponse" optional="true">
<description>This command SHALL allocate a video stream on the camera and return an allocated video stream identifier.</description>
<access op="invoke" privilege="manage"/>
<arg id="0" name="StreamUsage" type="StreamUsageEnum" min="0x01" max="0x03"/>
<arg id="1" name="VideoCodec" type="VideoCodecEnum" max="0x03"/>
<arg id="2" name="MinFrameRate" type="int16u" min="1"/>
<arg id="3" name="MaxFrameRate" type="int16u" min="1"/>
<arg id="4" name="MinResolution" type="VideoResolutionStruct"/>
<arg id="5" name="MaxResolution" type="VideoResolutionStruct"/>
<arg id="6" name="MinBitRate" type="int32u" min="1"/>
<arg id="7" name="MaxBitRate" type="int32u" min="1"/>
<arg id="8" name="KeyFrameInterval" type="int16u" max="65500"/>
<arg id="9" name="WatermarkEnabled" type="boolean" optional="true"/>
<arg id="10" name="OSDEnabled" type="boolean" optional="true"/>
<arg fieldId="0" name="StreamUsage" type="StreamUsageEnum" min="0x01" max="0x03"/>
<arg fieldId="1" name="VideoCodec" type="VideoCodecEnum" max="0x03"/>
<arg fieldId="2" name="MinFrameRate" type="int16u" min="1"/>
<arg fieldId="3" name="MaxFrameRate" type="int16u" min="1"/>
<arg fieldId="4" name="MinResolution" type="VideoResolutionStruct"/>
<arg fieldId="5" name="MaxResolution" type="VideoResolutionStruct"/>
<arg fieldId="6" name="MinBitRate" type="int32u" min="1"/>
<arg fieldId="7" name="MaxBitRate" type="int32u" min="1"/>
<arg fieldId="8" name="KeyFrameInterval" type="int16u" max="65500"/>
<arg fieldId="9" name="WatermarkEnabled" type="boolean" optional="true"/>
<arg fieldId="10" name="OSDEnabled" type="boolean" optional="true"/>
<mandatoryConform>
<feature name="VDO"/>
</mandatoryConform>
</command>

<command code="0x04" source="server" name="VideoStreamAllocateResponse" disableDefaultResponse="true" optional="true">
<description>This command SHALL be sent by the camera in response to the VideoStreamAllocate command, carrying the newly allocated or re-used video stream identifier.</description>
<arg id="0" name="VideoStreamID" type="int16u"/>
<arg fieldId="0" name="VideoStreamID" type="int16u"/>
<mandatoryConform>
<feature name="VDO"/>
</mandatoryConform>
Expand All @@ -440,9 +440,9 @@ Alchemy: v1.6.8+dirty
<command code="0x05" source="client" name="VideoStreamModify" optional="true">
<description>This command SHALL be used to modify a stream specified by the VideoStreamID.</description>
<access op="invoke" privilege="manage"/>
<arg id="0" name="VideoStreamID" type="int16u"/>
<arg id="1" name="WatermarkEnabled" type="boolean" optional="true"/>
<arg id="2" name="OSDEnabled" type="boolean" optional="true"/>
<arg fieldId="0" name="VideoStreamID" type="int16u"/>
<arg fieldId="1" name="WatermarkEnabled" type="boolean" optional="true"/>
<arg fieldId="2" name="OSDEnabled" type="boolean" optional="true"/>
<mandatoryConform>
<andTerm>
<feature name="VDO"/>
Expand All @@ -457,7 +457,7 @@ Alchemy: v1.6.8+dirty
<command code="0x06" source="client" name="VideoStreamDeallocate" optional="true">
<description>This command SHALL deallocate a video stream on the camera, corresponding to the given video stream identifier.</description>
<access op="invoke" privilege="manage"/>
<arg id="0" name="VideoStreamID" type="int16u"/>
<arg fieldId="0" name="VideoStreamID" type="int16u"/>
<mandatoryConform>
<feature name="VDO"/>
</mandatoryConform>
Expand All @@ -466,21 +466,21 @@ Alchemy: v1.6.8+dirty
<command code="0x07" source="client" name="SnapshotStreamAllocate" response="SnapshotStreamAllocateResponse" optional="true">
<description>This command SHALL allocate a snapshot stream on the device and return an allocated snapshot stream identifier.</description>
<access op="invoke" privilege="manage"/>
<arg id="0" name="ImageCodec" type="ImageCodecEnum" max="0x01"/>
<arg id="1" name="MaxFrameRate" type="int16u" min="1"/>
<arg id="2" name="MinResolution" type="VideoResolutionStruct"/>
<arg id="3" name="MaxResolution" type="VideoResolutionStruct"/>
<arg id="4" name="Quality" type="int8u" min="1" max="100"/>
<arg id="5" name="WatermarkEnabled" type="boolean" optional="true"/>
<arg id="6" name="OSDEnabled" type="boolean" optional="true"/>
<arg fieldId="0" name="ImageCodec" type="ImageCodecEnum" max="0x01"/>
<arg fieldId="1" name="MaxFrameRate" type="int16u" min="1"/>
<arg fieldId="2" name="MinResolution" type="VideoResolutionStruct"/>
<arg fieldId="3" name="MaxResolution" type="VideoResolutionStruct"/>
<arg fieldId="4" name="Quality" type="int8u" min="1" max="100"/>
<arg fieldId="5" name="WatermarkEnabled" type="boolean" optional="true"/>
<arg fieldId="6" name="OSDEnabled" type="boolean" optional="true"/>
<mandatoryConform>
<feature name="SNP"/>
</mandatoryConform>
</command>

<command code="0x08" source="server" name="SnapshotStreamAllocateResponse" disableDefaultResponse="true" optional="true">
<description>This command SHALL be sent by the device in response to the SnapshotStreamAllocate command, carrying the newly allocated or re-used snapshot stream identifier.</description>
<arg id="0" name="SnapshotStreamID" type="int16u"/>
<arg fieldId="0" name="SnapshotStreamID" type="int16u"/>
<mandatoryConform>
<feature name="SNP"/>
</mandatoryConform>
Expand All @@ -489,9 +489,9 @@ Alchemy: v1.6.8+dirty
<command code="0x09" source="client" name="SnapshotStreamModify" optional="true">
<description>This command SHALL be used to modify a stream specified by the VideoStreamID.</description>
<access op="invoke" privilege="manage"/>
<arg id="0" name="SnapshotStreamID" type="int16u"/>
<arg id="1" name="WatermarkEnabled" type="boolean" optional="true"/>
<arg id="2" name="OSDEnabled" type="boolean" optional="true"/>
<arg fieldId="0" name="SnapshotStreamID" type="int16u"/>
<arg fieldId="1" name="WatermarkEnabled" type="boolean" optional="true"/>
<arg fieldId="2" name="OSDEnabled" type="boolean" optional="true"/>
<mandatoryConform>
<andTerm>
<feature name="SNP"/>
Expand All @@ -506,7 +506,7 @@ Alchemy: v1.6.8+dirty
<command code="0x0A" source="client" name="SnapshotStreamDeallocate" optional="true">
<description>This command SHALL deallocate an snapshot stream on the camera, corresponding to the given snapshot stream identifier.</description>
<access op="invoke" privilege="manage"/>
<arg id="0" name="SnapshotStreamID" type="int16u"/>
<arg fieldId="0" name="SnapshotStreamID" type="int16u"/>
<mandatoryConform>
<feature name="SNP"/>
</mandatoryConform>
Expand All @@ -515,14 +515,14 @@ Alchemy: v1.6.8+dirty
<command code="0x0B" source="client" name="SetStreamPriorities">
<description>This command SHALL set the relative priorities of the various stream usages on the camera.</description>
<access op="invoke" privilege="administer"/>
<arg id="0" name="StreamPriorities" type="StreamUsageEnum" array="true"/>
<arg fieldId="0" name="StreamPriorities" type="StreamUsageEnum" array="true"/>
</command>

<command code="0x0C" source="client" name="CaptureSnapshot" response="CaptureSnapshotResponse" optional="true">
<description>This command SHALL return a Snapshot from the camera.</description>
<quality largeMessage="true"/>
<arg id="0" name="SnapshotStreamID" type="int16u" isNullable="true"/>
<arg id="1" name="RequestedResolution" type="VideoResolutionStruct"/>
<arg fieldId="0" name="SnapshotStreamID" type="int16u" isNullable="true"/>
<arg fieldId="1" name="RequestedResolution" type="VideoResolutionStruct"/>
<mandatoryConform>
<feature name="SNP"/>
</mandatoryConform>
Expand All @@ -531,9 +531,9 @@ Alchemy: v1.6.8+dirty
<command code="0x0D" source="server" name="CaptureSnapshotResponse" disableDefaultResponse="true" optional="true">
<description>This command SHALL be sent by the device in response to the CaptureSnapshot command, carrying the requested snapshot.</description>
<quality largeMessage="true"/>
<arg id="0" name="Data" type="octet_string"/>
<arg id="1" name="ImageCodec" type="ImageCodecEnum" max="0x01"/>
<arg id="2" name="Resolution" type="VideoResolutionStruct"/>
<arg fieldId="0" name="Data" type="octet_string"/>
<arg fieldId="1" name="ImageCodec" type="ImageCodecEnum" max="0x01"/>
<arg fieldId="2" name="Resolution" type="VideoResolutionStruct"/>
<mandatoryConform>
<feature name="SNP"/>
</mandatoryConform>
Expand Down Expand Up @@ -601,5 +601,24 @@ Alchemy: v1.6.8+dirty
</optionalConform>
</feature>
</features>
<attribute code="0x0029" side="server" name="ImageRotationDiscreteAngles" define="IMAGE_ROTATION_DISCRETE_ANGLES" type="int16u" max="270" default="0" writable="true" optional="true">
Comment thread
pidarped marked this conversation as resolved.
Outdated
<access op="read" privilege="manage"/>
<access op="write" privilege="manage"/>
<otherwiseConform>
<provisionalConform/>
<optionalConform choice="b" more="true" min="1">
<andTerm>
<greaterOrEqualTerm>
<revision value="current"/>
<revision value="2"/>
</greaterOrEqualTerm>
<feature name="ICTL"/>
<notTerm>
<attribute name="ImageRotation"/>
</notTerm>
</andTerm>
</optionalConform>
</otherwiseConform>
</attribute>
</cluster>
</configurator>
3 changes: 2 additions & 1 deletion src/controller/data_model/controller-clusters.matter
Original file line number Diff line number Diff line change
Expand Up @@ -10194,7 +10194,7 @@ cluster ZoneManagement = 1360 {

/** The Camera AV Stream Management cluster is used to allow clients to manage, control, and configure various audio, video, and snapshot streams on a camera. */
cluster CameraAvStreamManagement = 1361 {
revision 1;
revision 2;

enum AudioCodecEnum : enum8 {
kOPUS = 0 [spec_name = "OPUS"];
Expand Down Expand Up @@ -10354,6 +10354,7 @@ cluster CameraAvStreamManagement = 1361 {
attribute access(read: manage, write: manage) optional boolean localSnapshotRecordingEnabled = 38;
attribute access(read: manage, write: manage) optional boolean statusLightEnabled = 39;
attribute access(read: manage, write: manage) optional ThreeLevelAutoEnum statusLightBrightness = 40;
attribute access(read: manage, write: manage) optional int16u imageRotationDiscreteAngles = 41;
readonly attribute command_id generatedCommandList[] = 65528;
readonly attribute command_id acceptedCommandList[] = 65529;
readonly attribute attrib_id attributeList[] = 65531;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59335,6 +59335,7 @@ public static class CameraAvStreamManagementCluster extends BaseChipCluster {
private static final long LOCAL_SNAPSHOT_RECORDING_ENABLED_ATTRIBUTE_ID = 38L;
private static final long STATUS_LIGHT_ENABLED_ATTRIBUTE_ID = 39L;
private static final long STATUS_LIGHT_BRIGHTNESS_ATTRIBUTE_ID = 40L;
private static final long IMAGE_ROTATION_DISCRETE_ANGLES_ATTRIBUTE_ID = 41L;
private static final long GENERATED_COMMAND_LIST_ATTRIBUTE_ID = 65528L;
private static final long ACCEPTED_COMMAND_LIST_ATTRIBUTE_ID = 65529L;
private static final long ATTRIBUTE_LIST_ATTRIBUTE_ID = 65531L;
Expand Down Expand Up @@ -61013,6 +61014,41 @@ public void onSuccess(byte[] tlv) {
}, STATUS_LIGHT_BRIGHTNESS_ATTRIBUTE_ID, minInterval, maxInterval);
}

public void readImageRotationDiscreteAnglesAttribute(
IntegerAttributeCallback callback) {
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, IMAGE_ROTATION_DISCRETE_ANGLES_ATTRIBUTE_ID);

readAttribute(new ReportCallbackImpl(callback, path) {
@Override
public void onSuccess(byte[] tlv) {
Integer value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
callback.onSuccess(value);
}
}, IMAGE_ROTATION_DISCRETE_ANGLES_ATTRIBUTE_ID, true);
}

public void writeImageRotationDiscreteAnglesAttribute(DefaultClusterCallback callback, Integer value) {
writeImageRotationDiscreteAnglesAttribute(callback, value, 0);
}

public void writeImageRotationDiscreteAnglesAttribute(DefaultClusterCallback callback, Integer value, int timedWriteTimeoutMs) {
BaseTLVType tlvValue = new UIntType(value);
writeAttribute(new WriteAttributesCallbackImpl(callback), IMAGE_ROTATION_DISCRETE_ANGLES_ATTRIBUTE_ID, tlvValue, timedWriteTimeoutMs);
}

public void subscribeImageRotationDiscreteAnglesAttribute(
IntegerAttributeCallback callback, int minInterval, int maxInterval) {
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, IMAGE_ROTATION_DISCRETE_ANGLES_ATTRIBUTE_ID);

subscribeAttribute(new ReportCallbackImpl(callback, path) {
@Override
public void onSuccess(byte[] tlv) {
Integer value = ChipTLVValueDecoder.decodeAttributeValue(path, tlv);
callback.onSuccess(value);
}
}, IMAGE_ROTATION_DISCRETE_ANGLES_ATTRIBUTE_ID, minInterval, maxInterval);
}

public void readGeneratedCommandListAttribute(
GeneratedCommandListAttributeCallback callback) {
ChipAttributePath path = ChipAttributePath.newInstance(endpointId, clusterId, GENERATED_COMMAND_LIST_ATTRIBUTE_ID);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18121,6 +18121,7 @@ public enum Attribute {
LocalSnapshotRecordingEnabled(38L),
StatusLightEnabled(39L),
StatusLightBrightness(40L),
ImageRotationDiscreteAngles(41L),
GeneratedCommandList(65528L),
AcceptedCommandList(65529L),
AttributeList(65531L),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18280,6 +18280,17 @@ private static Map<String, InteractionInfo> readCameraAvStreamManagementInteract
readCameraAvStreamManagementStatusLightBrightnessCommandParams
);
result.put("readStatusLightBrightnessAttribute", readCameraAvStreamManagementStatusLightBrightnessAttributeInteractionInfo);
Map<String, CommandParameterInfo> readCameraAvStreamManagementImageRotationDiscreteAnglesCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
InteractionInfo readCameraAvStreamManagementImageRotationDiscreteAnglesAttributeInteractionInfo = new InteractionInfo(
(cluster, callback, commandArguments) -> {
((ChipClusters.CameraAvStreamManagementCluster) cluster).readImageRotationDiscreteAnglesAttribute(
(ChipClusters.IntegerAttributeCallback) callback
);
},
() -> new ClusterInfoMapping.DelegatedIntegerAttributeCallback(),
readCameraAvStreamManagementImageRotationDiscreteAnglesCommandParams
);
result.put("readImageRotationDiscreteAnglesAttribute", readCameraAvStreamManagementImageRotationDiscreteAnglesAttributeInteractionInfo);
Map<String, CommandParameterInfo> readCameraAvStreamManagementGeneratedCommandListCommandParams = new LinkedHashMap<String, CommandParameterInfo>();
InteractionInfo readCameraAvStreamManagementGeneratedCommandListAttributeInteractionInfo = new InteractionInfo(
(cluster, callback, commandArguments) -> {
Expand Down
Loading
Loading