Skip to content

Commit 7d6b84e

Browse files
sayondeeprestyled-commitsmarktrayer
authored
Initial implementation of PushAV Stream Transport Cluster (#37787)
* initial implementation of pushav server * Restyled by prettier-json * add push av cluster to camera-app and some fixes * Address review comments * Check cluster specific code * remove conflict to camera example app * Restyled by clang-format * added delegate implementation in all_clusters_app * Restyled by clang-format * Restyled by prettier-json * all-clusters-app build fix * Restyled by clang-format * ci fix to include vector * update all-cluster-app to spec changes * Address review comments * Update to latest spec changes * Restyled by clang-format * Restyled by clang-format * Address review comments * Address review comments * Restyled by clang-format * update all-cluster-app.matter * Address Review Comments * Restyled by clang-format * [ESP32]: Optimize flash usage for all-clusters-app * zap_generate for updated push_av_stream_transport xml * Update Push AV server implementation for fabric-scoped transportConfigurationStruct * Address review comments * Restyled by clang-format * Common method for validation of incoming TransportOpions * Fix CI failure * Codegen Integration for Push AV Cluster * Restyled by clang-format * Add unit tests for push av * Restyled by gn * make push av logic type safe Restyled by clang-format Restyled by gn * update push av cluster unit tests * Correct namespaces * Update PushAVStreamTransport Storage tests * Split Storage tests to reduce stack usage * Command Handling fixes Restyled by clang-format --------- Co-authored-by: Restyled.io <[email protected]> Co-authored-by: marktrayer <[email protected]>
1 parent ff795a1 commit 7d6b84e

30 files changed

+5075
-37
lines changed

examples/all-clusters-app/all-clusters-common/all-clusters-app.matter

Lines changed: 191 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6650,6 +6650,176 @@ provisional cluster CameraAvSettingsUserLevelManagement = 1362 {
66506650
command DPTZRelativeMove(DPTZRelativeMoveRequest): DefaultSuccess = 6;
66516651
}
66526652

6653+
/** This cluster implements the upload of Audio and Video streams from the Push AV Stream Transport Cluster using suitable push-based transports. */
6654+
provisional cluster PushAvStreamTransport = 1365 {
6655+
revision 1;
6656+
6657+
enum ContainerFormatEnum : enum8 {
6658+
kCMAF = 0 [spec_name = "CMAF"];
6659+
}
6660+
6661+
enum IngestMethodsEnum : enum8 {
6662+
kCMAFIngest = 0;
6663+
}
6664+
6665+
enum StatusCodeEnum : enum8 {
6666+
kInvalidTLSEndpoint = 2;
6667+
kInvalidStream = 3;
6668+
kInvalidURL = 4;
6669+
kInvalidZone = 5;
6670+
kInvalidCombination = 6;
6671+
kInvalidTriggerType = 7;
6672+
kInvalidTransportStatus = 8;
6673+
}
6674+
6675+
enum TransportStatusEnum : enum8 {
6676+
kActive = 0;
6677+
kInactive = 1;
6678+
}
6679+
6680+
enum TransportTriggerTypeEnum : enum8 {
6681+
kCommand = 0;
6682+
kMotion = 1;
6683+
kContinuous = 2;
6684+
}
6685+
6686+
enum TriggerActivationReasonEnum : enum8 {
6687+
kUserInitiated = 0;
6688+
kAutomation = 1;
6689+
kEmergency = 2;
6690+
}
6691+
6692+
bitmap Feature : bitmap32 {
6693+
kPerZoneSensitivity = 0x1;
6694+
kMetadata = 0x2;
6695+
}
6696+
6697+
struct TransportMotionTriggerTimeControlStruct {
6698+
int16u initialDuration = 0;
6699+
int16u augmentationDuration = 1;
6700+
elapsed_s maxDuration = 2;
6701+
int16u blindDuration = 3;
6702+
}
6703+
6704+
struct TransportZoneOptionsStruct {
6705+
nullable int16u zone = 0;
6706+
optional int8u sensitivity = 1;
6707+
}
6708+
6709+
struct TransportTriggerOptionsStruct {
6710+
TransportTriggerTypeEnum triggerType = 0;
6711+
optional nullable TransportZoneOptionsStruct motionZones[] = 1;
6712+
optional nullable int8u motionSensitivity = 2;
6713+
optional TransportMotionTriggerTimeControlStruct motionTimeControl = 3;
6714+
optional int16u maxPreRollLen = 4;
6715+
}
6716+
6717+
struct CMAFContainerOptionsStruct {
6718+
int16u chunkDuration = 0;
6719+
optional octet_string<16> CENCKey = 1;
6720+
optional boolean metadataEnabled = 2;
6721+
optional octet_string<16> CENCKeyID = 3;
6722+
}
6723+
6724+
struct ContainerOptionsStruct {
6725+
ContainerFormatEnum containerType = 0;
6726+
optional CMAFContainerOptionsStruct CMAFContainerOptions = 1;
6727+
}
6728+
6729+
struct TransportOptionsStruct {
6730+
StreamUsageEnum streamUsage = 0;
6731+
optional nullable int16u videoStreamID = 1;
6732+
optional nullable int16u audioStreamID = 2;
6733+
int16u endpointID = 3;
6734+
long_char_string<2000> url = 4;
6735+
TransportTriggerOptionsStruct triggerOptions = 5;
6736+
IngestMethodsEnum ingestMethod = 6;
6737+
ContainerOptionsStruct containerOptions = 7;
6738+
optional epoch_s expiryTime = 8;
6739+
}
6740+
6741+
fabric_scoped struct TransportConfigurationStruct {
6742+
int16u connectionID = 0;
6743+
TransportStatusEnum transportStatus = 1;
6744+
optional TransportOptionsStruct transportOptions = 2;
6745+
fabric_idx fabricIndex = 254;
6746+
}
6747+
6748+
struct SupportedFormatStruct {
6749+
ContainerFormatEnum containerFormat = 0;
6750+
IngestMethodsEnum ingestMethod = 1;
6751+
}
6752+
6753+
info event PushTransportBegin = 0 {
6754+
int16u connectionID = 0;
6755+
TransportTriggerTypeEnum triggerType = 1;
6756+
optional TriggerActivationReasonEnum activationReason = 2;
6757+
}
6758+
6759+
info event PushTransportEnd = 1 {
6760+
int16u connectionID = 0;
6761+
TransportTriggerTypeEnum triggerType = 1;
6762+
optional TriggerActivationReasonEnum activationReason = 2;
6763+
}
6764+
6765+
readonly attribute SupportedFormatStruct supportedFormats[] = 0;
6766+
readonly attribute TransportConfigurationStruct currentConnections[] = 1;
6767+
readonly attribute command_id generatedCommandList[] = 65528;
6768+
readonly attribute command_id acceptedCommandList[] = 65529;
6769+
readonly attribute attrib_id attributeList[] = 65531;
6770+
readonly attribute bitmap32 featureMap = 65532;
6771+
readonly attribute int16u clusterRevision = 65533;
6772+
6773+
request struct AllocatePushTransportRequest {
6774+
TransportOptionsStruct transportOptions = 0;
6775+
}
6776+
6777+
response struct AllocatePushTransportResponse = 1 {
6778+
TransportConfigurationStruct transportConfiguration = 0;
6779+
}
6780+
6781+
request struct DeallocatePushTransportRequest {
6782+
int16u connectionID = 0;
6783+
}
6784+
6785+
request struct ModifyPushTransportRequest {
6786+
int16u connectionID = 0;
6787+
TransportOptionsStruct transportOptions = 1;
6788+
}
6789+
6790+
request struct SetTransportStatusRequest {
6791+
nullable int16u connectionID = 0;
6792+
TransportStatusEnum transportStatus = 1;
6793+
}
6794+
6795+
request struct ManuallyTriggerTransportRequest {
6796+
int16u connectionID = 0;
6797+
TriggerActivationReasonEnum activationReason = 1;
6798+
optional TransportMotionTriggerTimeControlStruct timeControl = 2;
6799+
}
6800+
6801+
request struct FindTransportRequest {
6802+
optional nullable int16u connectionID = 0;
6803+
}
6804+
6805+
response struct FindTransportResponse = 7 {
6806+
TransportConfigurationStruct transportConfigurations[] = 0;
6807+
}
6808+
6809+
/** This command SHALL allocate a transport and return a PushTransportConnectionID. */
6810+
fabric command access(invoke: manage) AllocatePushTransport(AllocatePushTransportRequest): AllocatePushTransportResponse = 0;
6811+
/** This command SHALL be generated to request the Node deallocates the specified transport. */
6812+
fabric command access(invoke: manage) DeallocatePushTransport(DeallocatePushTransportRequest): DefaultSuccess = 2;
6813+
/** This command is used to request the Node modifies the configuration of the specified push transport. */
6814+
fabric command access(invoke: manage) ModifyPushTransport(ModifyPushTransportRequest): DefaultSuccess = 3;
6815+
/** This command SHALL be generated to request the Node modifies the Transport Status of a specified transport or all transports. */
6816+
fabric command access(invoke: manage) SetTransportStatus(SetTransportStatusRequest): DefaultSuccess = 4;
6817+
/** This command SHALL be generated to request the Node to manually start the specified push transport. */
6818+
fabric command ManuallyTriggerTransport(ManuallyTriggerTransportRequest): DefaultSuccess = 5;
6819+
/** This command SHALL return the Transport Configuration for the specified push transport or all allocated transports for the fabric if null. */
6820+
fabric command FindTransport(FindTransportRequest): FindTransportResponse = 6;
6821+
}
6822+
66536823
/** This cluster provides facilities to configure and play Chime sounds, such as those used in a doorbell. */
66546824
provisional cluster Chime = 1366 {
66556825
revision 1;
@@ -8924,6 +9094,27 @@ endpoint 1 {
89249094
handle command DPTZRelativeMove;
89259095
}
89269096

9097+
server cluster PushAvStreamTransport {
9098+
emits event PushTransportBegin;
9099+
emits event PushTransportEnd;
9100+
callback attribute supportedFormats;
9101+
callback attribute currentConnections;
9102+
callback attribute generatedCommandList;
9103+
callback attribute acceptedCommandList;
9104+
callback attribute attributeList;
9105+
ram attribute featureMap default = 0;
9106+
ram attribute clusterRevision default = 1;
9107+
9108+
handle command AllocatePushTransport;
9109+
handle command AllocatePushTransportResponse;
9110+
handle command DeallocatePushTransport;
9111+
handle command ModifyPushTransport;
9112+
handle command SetTransportStatus;
9113+
handle command ManuallyTriggerTransport;
9114+
handle command FindTransport;
9115+
handle command FindTransportResponse;
9116+
}
9117+
89279118
server cluster Chime {
89289119
callback attribute installedChimeSounds;
89299120
callback attribute selectedChime;

0 commit comments

Comments
 (0)