@@ -229,6 +229,7 @@ CHIP_ERROR CameraAVStreamMgmtServer::AddToFabricsUsingCamera(FabricIndex aFabric
229
229
{
230
230
mFabricsUsingCamera .insert (aFabricIndex);
231
231
auto path = ConcreteAttributePath (mEndpointId , CameraAvStreamManagement::Id, Attributes::FabricsUsingCamera::Id);
232
+ mDelegate .OnAttributeChanged (Attributes::FabricsUsingCamera::Id);
232
233
MatterReportingAttributeChangeCallback (path);
233
234
234
235
return CHIP_NO_ERROR;
@@ -238,6 +239,7 @@ CHIP_ERROR CameraAVStreamMgmtServer::RemoveFromFabricsUsingCamera(FabricIndex aF
238
239
{
239
240
mFabricsUsingCamera .erase (aFabricIndex);
240
241
auto path = ConcreteAttributePath (mEndpointId , CameraAvStreamManagement::Id, Attributes::FabricsUsingCamera::Id);
242
+ mDelegate .OnAttributeChanged (Attributes::FabricsUsingCamera::Id);
241
243
MatterReportingAttributeChangeCallback (path);
242
244
243
245
return CHIP_NO_ERROR;
@@ -250,6 +252,7 @@ CHIP_ERROR CameraAVStreamMgmtServer::SetRankedVideoStreamPriorities(
250
252
251
253
ReturnErrorOnFailure (StoreRankedVideoStreamPriorities ());
252
254
auto path = ConcreteAttributePath (mEndpointId , CameraAvStreamManagement::Id, Attributes::RankedVideoStreamPrioritiesList::Id);
255
+ mDelegate .OnAttributeChanged (Attributes::RankedVideoStreamPrioritiesList::Id);
253
256
MatterReportingAttributeChangeCallback (path);
254
257
255
258
return CHIP_NO_ERROR;
@@ -259,6 +262,7 @@ CHIP_ERROR CameraAVStreamMgmtServer::AddVideoStream(const VideoStreamStruct & vi
259
262
{
260
263
mAllocatedVideoStreams .push_back (videoStream);
261
264
auto path = ConcreteAttributePath (mEndpointId , CameraAvStreamManagement::Id, Attributes::AllocatedVideoStreams::Id);
265
+ mDelegate .OnAttributeChanged (Attributes::AllocatedVideoStreams::Id);
262
266
MatterReportingAttributeChangeCallback (path);
263
267
264
268
return CHIP_NO_ERROR;
@@ -271,6 +275,7 @@ CHIP_ERROR CameraAVStreamMgmtServer::RemoveVideoStream(uint16_t videoStreamId)
271
275
[&](const VideoStreamStruct & vStream) { return vStream.videoStreamID == videoStreamId; }),
272
276
mAllocatedVideoStreams .end ());
273
277
auto path = ConcreteAttributePath (mEndpointId , CameraAvStreamManagement::Id, Attributes::AllocatedVideoStreams::Id);
278
+ mDelegate .OnAttributeChanged (Attributes::AllocatedVideoStreams::Id);
274
279
MatterReportingAttributeChangeCallback (path);
275
280
276
281
return CHIP_NO_ERROR;
@@ -280,6 +285,7 @@ CHIP_ERROR CameraAVStreamMgmtServer::AddAudioStream(const AudioStreamStruct & au
280
285
{
281
286
mAllocatedAudioStreams .push_back (audioStream);
282
287
auto path = ConcreteAttributePath (mEndpointId , CameraAvStreamManagement::Id, Attributes::AllocatedAudioStreams::Id);
288
+ mDelegate .OnAttributeChanged (Attributes::AllocatedAudioStreams::Id);
283
289
MatterReportingAttributeChangeCallback (path);
284
290
285
291
return CHIP_NO_ERROR;
@@ -292,6 +298,7 @@ CHIP_ERROR CameraAVStreamMgmtServer::RemoveAudioStream(uint16_t audioStreamId)
292
298
[&](const AudioStreamStruct & aStream) { return aStream.audioStreamID == audioStreamId; }),
293
299
mAllocatedAudioStreams .end ());
294
300
auto path = ConcreteAttributePath (mEndpointId , CameraAvStreamManagement::Id, Attributes::AllocatedAudioStreams::Id);
301
+ mDelegate .OnAttributeChanged (Attributes::AllocatedAudioStreams::Id);
295
302
MatterReportingAttributeChangeCallback (path);
296
303
297
304
return CHIP_NO_ERROR;
@@ -301,6 +308,7 @@ CHIP_ERROR CameraAVStreamMgmtServer::AddSnapshotStream(const SnapshotStreamStruc
301
308
{
302
309
mAllocatedSnapshotStreams .push_back (snapshotStream);
303
310
auto path = ConcreteAttributePath (mEndpointId , CameraAvStreamManagement::Id, Attributes::AllocatedSnapshotStreams::Id);
311
+ mDelegate .OnAttributeChanged (Attributes::AllocatedSnapshotStreams::Id);
304
312
MatterReportingAttributeChangeCallback (path);
305
313
306
314
return CHIP_NO_ERROR;
@@ -313,6 +321,7 @@ CHIP_ERROR CameraAVStreamMgmtServer::RemoveSnapshotStream(uint16_t snapshotStrea
313
321
[&](const SnapshotStreamStruct & sStream ) { return sStream .snapshotStreamID == snapshotStreamId; }),
314
322
mAllocatedSnapshotStreams .end ());
315
323
auto path = ConcreteAttributePath (mEndpointId , CameraAvStreamManagement::Id, Attributes::AllocatedSnapshotStreams::Id);
324
+ mDelegate .OnAttributeChanged (Attributes::AllocatedSnapshotStreams::Id);
316
325
MatterReportingAttributeChangeCallback (path);
317
326
318
327
return CHIP_NO_ERROR;
@@ -776,6 +785,7 @@ CHIP_ERROR CameraAVStreamMgmtServer::SetNightVision(TriStateAutoEnum aNightVisio
776
785
mNightVision = aNightVision;
777
786
auto path = ConcreteAttributePath (mEndpointId , CameraAvStreamManagement::Id, Attributes::NightVision::Id);
778
787
ReturnErrorOnFailure (GetSafeAttributePersistenceProvider ()->WriteScalarValue (path, to_underlying (mNightVision )));
788
+ mDelegate .OnAttributeChanged (Attributes::NightVision::Id);
779
789
MatterReportingAttributeChangeCallback (path);
780
790
}
781
791
return CHIP_NO_ERROR;
@@ -788,6 +798,7 @@ CHIP_ERROR CameraAVStreamMgmtServer::SetNightVisionIllum(TriStateAutoEnum aNight
788
798
mNightVisionIllum = aNightVisionIllum;
789
799
auto path = ConcreteAttributePath (mEndpointId , CameraAvStreamManagement::Id, Attributes::NightVisionIllum::Id);
790
800
ReturnErrorOnFailure (GetSafeAttributePersistenceProvider ()->WriteScalarValue (path, to_underlying (mNightVisionIllum )));
801
+ mDelegate .OnAttributeChanged (Attributes::NightVisionIllum::Id);
791
802
MatterReportingAttributeChangeCallback (path);
792
803
}
793
804
return CHIP_NO_ERROR;
@@ -799,6 +810,7 @@ CHIP_ERROR CameraAVStreamMgmtServer::SetViewport(const ViewportStruct & aViewpor
799
810
800
811
StoreViewport (mViewport );
801
812
auto path = ConcreteAttributePath (mEndpointId , CameraAvStreamManagement::Id, Attributes::Viewport::Id);
813
+ mDelegate .OnAttributeChanged (Attributes::Viewport::Id);
802
814
MatterReportingAttributeChangeCallback (path);
803
815
804
816
return CHIP_NO_ERROR;
@@ -923,6 +935,7 @@ CHIP_ERROR CameraAVStreamMgmtServer::SetStatusLightBrightness(Globals::ThreeLeve
923
935
mStatusLightBrightness = aStatusLightBrightness;
924
936
auto path = ConcreteAttributePath (mEndpointId , CameraAvStreamManagement::Id, Attributes::StatusLightBrightness::Id);
925
937
ReturnErrorOnFailure (GetSafeAttributePersistenceProvider ()->WriteScalarValue (path, to_underlying (mStatusLightBrightness )));
938
+ mDelegate .OnAttributeChanged (Attributes::StatusLightBrightness::Id);
926
939
MatterReportingAttributeChangeCallback (path);
927
940
}
928
941
return CHIP_NO_ERROR;
@@ -1472,15 +1485,13 @@ void CameraAVStreamMgmtServer::HandleVideoStreamAllocate(HandlerContext & ctx,
1472
1485
// If Watermark feature is supported, then command should have the
1473
1486
// isWaterMarkEnabled param. Or, if it is not supported, then command should
1474
1487
// not have the param.
1475
- VerifyOrReturn ((HasFeature (Feature::kWatermark ) && commandData.watermarkEnabled .HasValue ()) ||
1476
- (!HasFeature (Feature::kWatermark ) && !commandData.watermarkEnabled .HasValue ()),
1488
+ VerifyOrReturn ((HasFeature (Feature::kWatermark ) == commandData.watermarkEnabled .HasValue ()),
1477
1489
ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::InvalidCommand));
1478
1490
1479
1491
// If OSD feature is supported, then command should have the
1480
1492
// isOSDEnabled param. Or, if it is not supported, then command should
1481
1493
// not have the param.
1482
- VerifyOrReturn ((HasFeature (Feature::kOnScreenDisplay ) && commandData.OSDEnabled .HasValue ()) ||
1483
- (!HasFeature (Feature::kOnScreenDisplay ) && !commandData.OSDEnabled .HasValue ()),
1494
+ VerifyOrReturn ((HasFeature (Feature::kOnScreenDisplay ) == commandData.OSDEnabled .HasValue ()),
1484
1495
ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::InvalidCommand));
1485
1496
1486
1497
VerifyOrReturn (IsStreamUsageValid (streamUsage), {
@@ -1493,11 +1504,11 @@ void CameraAVStreamMgmtServer::HandleVideoStreamAllocate(HandlerContext & ctx,
1493
1504
ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::InvalidCommand);
1494
1505
});
1495
1506
1496
- VerifyOrReturn (minFrameRate <= maxFrameRate, ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::ConstraintError));
1507
+ VerifyOrReturn (minFrameRate >= 1 && minFrameRate <= maxFrameRate && maxFrameRate >= 1 , ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::ConstraintError));
1497
1508
1498
- VerifyOrReturn (minBitRate <= maxBitRate, ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::ConstraintError));
1509
+ VerifyOrReturn (minBitRate >= 1 && minBitRate <= maxBitRate && maxBitRate >= 1 , ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::ConstraintError));
1499
1510
1500
- VerifyOrReturn (minFragmentLen <= maxFragmentLen, ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::ConstraintError));
1511
+ VerifyOrReturn (minFragmentLen <= maxFragmentLen && maxFragmentLen <= kMaxFragmentLenMaxValue , ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::ConstraintError));
1501
1512
1502
1513
// Call the delegate
1503
1514
status =
@@ -1530,15 +1541,13 @@ void CameraAVStreamMgmtServer::HandleVideoStreamModify(HandlerContext & ctx,
1530
1541
// If Watermark feature is supported, then command should have the
1531
1542
// isWaterMarkEnabled param. Or, if it is not supported, then command should
1532
1543
// not have the param.
1533
- VerifyOrReturn ((HasFeature (Feature::kWatermark ) && commandData.watermarkEnabled .HasValue ()) ||
1534
- (!HasFeature (Feature::kWatermark ) && !commandData.watermarkEnabled .HasValue ()),
1544
+ VerifyOrReturn ((HasFeature (Feature::kWatermark ) == commandData.watermarkEnabled .HasValue ()),
1535
1545
ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::InvalidCommand));
1536
1546
1537
1547
// If OSD feature is supported, then command should have the
1538
1548
// isOSDEnabled param. Or, if it is not supported, then command should
1539
1549
// not have the param.
1540
- VerifyOrReturn ((HasFeature (Feature::kOnScreenDisplay ) && commandData.OSDEnabled .HasValue ()) ||
1541
- (!HasFeature (Feature::kOnScreenDisplay ) && !commandData.OSDEnabled .HasValue ()),
1550
+ VerifyOrReturn ((HasFeature (Feature::kOnScreenDisplay ) == commandData.OSDEnabled .HasValue ()),
1542
1551
ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::InvalidCommand));
1543
1552
1544
1553
// Call the delegate
@@ -1550,19 +1559,12 @@ void CameraAVStreamMgmtServer::HandleVideoStreamModify(HandlerContext & ctx,
1550
1559
void CameraAVStreamMgmtServer::HandleVideoStreamDeallocate (HandlerContext & ctx,
1551
1560
const Commands::VideoStreamDeallocate::DecodableType & commandData)
1552
1561
{
1553
-
1554
1562
auto & videoStreamID = commandData.videoStreamID ;
1555
1563
1556
1564
// Call the delegate
1557
1565
Status status = mDelegate .VideoStreamDeallocate (videoStreamID);
1558
1566
1559
- if (status != Status::Success)
1560
- {
1561
- ctx.mCommandHandler .AddStatus (ctx.mRequestPath , status);
1562
- return ;
1563
- }
1564
-
1565
- ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Protocols::InteractionModel::Status::Success);
1567
+ ctx.mCommandHandler .AddStatus (ctx.mRequestPath , status);
1566
1568
}
1567
1569
1568
1570
void CameraAVStreamMgmtServer::HandleAudioStreamAllocate (HandlerContext & ctx,
@@ -1588,8 +1590,13 @@ void CameraAVStreamMgmtServer::HandleAudioStreamAllocate(HandlerContext & ctx,
1588
1590
ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::ConstraintError);
1589
1591
});
1590
1592
1591
- VerifyOrReturn (sampleRate > 0 && bitRate > 0 , {
1592
- ChipLogError (Zcl, " CameraAVStreamMgmt: Invalid sampleRate or bitRate " );
1593
+ VerifyOrReturn (sampleRate > 0 , {
1594
+ ChipLogError (Zcl, " CameraAVStreamMgmt: Invalid sampleRate" );
1595
+ ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::ConstraintError);
1596
+ });
1597
+
1598
+ VerifyOrReturn (bitRate > 0 , {
1599
+ ChipLogError (Zcl, " CameraAVStreamMgmt: Invalid bitRate " );
1593
1600
ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::ConstraintError);
1594
1601
});
1595
1602
@@ -1598,7 +1605,7 @@ void CameraAVStreamMgmtServer::HandleAudioStreamAllocate(HandlerContext & ctx,
1598
1605
ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::ConstraintError);
1599
1606
});
1600
1607
1601
- VerifyOrReturn (channelCount <= kMaxChannelCount , {
1608
+ VerifyOrReturn (channelCount >= 1 && channelCount <= kMaxChannelCount , {
1602
1609
ChipLogError (Zcl, " CameraAVStreamMgmt: Invalid channel count" );
1603
1610
ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::ConstraintError);
1604
1611
});
@@ -1615,7 +1622,6 @@ void CameraAVStreamMgmtServer::HandleAudioStreamAllocate(HandlerContext & ctx,
1615
1622
1616
1623
response.audioStreamID = audioStreamID;
1617
1624
ctx.mCommandHandler .AddResponse (ctx.mRequestPath , response);
1618
- ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Protocols::InteractionModel::Status::Success);
1619
1625
}
1620
1626
1621
1627
void CameraAVStreamMgmtServer::HandleAudioStreamDeallocate (HandlerContext & ctx,
@@ -1627,13 +1633,7 @@ void CameraAVStreamMgmtServer::HandleAudioStreamDeallocate(HandlerContext & ctx,
1627
1633
// Call the delegate
1628
1634
Status status = mDelegate .AudioStreamDeallocate (audioStreamID);
1629
1635
1630
- if (status != Status::Success)
1631
- {
1632
- ctx.mCommandHandler .AddStatus (ctx.mRequestPath , status);
1633
- return ;
1634
- }
1635
-
1636
- ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Protocols::InteractionModel::Status::Success);
1636
+ ctx.mCommandHandler .AddStatus (ctx.mRequestPath , status);
1637
1637
}
1638
1638
1639
1639
void CameraAVStreamMgmtServer::HandleSnapshotStreamAllocate (HandlerContext & ctx,
@@ -1654,8 +1654,13 @@ void CameraAVStreamMgmtServer::HandleSnapshotStreamAllocate(HandlerContext & ctx
1654
1654
ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Protocols::InteractionModel::Status::InvalidCommand);
1655
1655
});
1656
1656
1657
- VerifyOrReturn (maxFrameRate > 0 && bitRate > 0 , {
1658
- ChipLogError (Zcl, " CameraAVStreamMgmt: Invalid maxFrameRate or bitRate" );
1657
+ VerifyOrReturn (maxFrameRate > 0 , {
1658
+ ChipLogError (Zcl, " CameraAVStreamMgmt: Invalid maxFrameRate" );
1659
+ ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::ConstraintError);
1660
+ });
1661
+
1662
+ VerifyOrReturn (bitRate > 0 , {
1663
+ ChipLogError (Zcl, " CameraAVStreamMgmt: Invalid bitRate" );
1659
1664
ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Status::ConstraintError);
1660
1665
});
1661
1666
@@ -1676,7 +1681,6 @@ void CameraAVStreamMgmtServer::HandleSnapshotStreamAllocate(HandlerContext & ctx
1676
1681
1677
1682
response.snapshotStreamID = snapshotStreamID;
1678
1683
ctx.mCommandHandler .AddResponse (ctx.mRequestPath , response);
1679
- ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Protocols::InteractionModel::Status::Success);
1680
1684
}
1681
1685
1682
1686
void CameraAVStreamMgmtServer::HandleSnapshotStreamDeallocate (HandlerContext & ctx,
@@ -1688,13 +1692,7 @@ void CameraAVStreamMgmtServer::HandleSnapshotStreamDeallocate(HandlerContext & c
1688
1692
// Call the delegate
1689
1693
Status status = mDelegate .SnapshotStreamDeallocate (snapshotStreamID);
1690
1694
1691
- if (status != Status::Success)
1692
- {
1693
- ctx.mCommandHandler .AddStatus (ctx.mRequestPath , status);
1694
- return ;
1695
- }
1696
-
1697
- ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Protocols::InteractionModel::Status::Success);
1695
+ ctx.mCommandHandler .AddStatus (ctx.mRequestPath , status);
1698
1696
}
1699
1697
1700
1698
void CameraAVStreamMgmtServer::HandleSetStreamPriorities (HandlerContext & ctx,
@@ -1749,7 +1747,6 @@ void CameraAVStreamMgmtServer::HandleCaptureSnapshot(HandlerContext & ctx,
1749
1747
}
1750
1748
1751
1749
ctx.mCommandHandler .AddResponse (ctx.mRequestPath , response);
1752
- ctx.mCommandHandler .AddStatus (ctx.mRequestPath , Protocols::InteractionModel::Status::Success);
1753
1750
}
1754
1751
1755
1752
} // namespace CameraAvStreamManagement
0 commit comments