From a6c102cf2656d88f25e80b90b486cbcf3e8dbe0e Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Wed, 19 Feb 2025 00:47:38 +0000 Subject: [PATCH 01/39] Changing AcceptedCommands Interface --- admin_storage.json | 30 ++++++ src/access/ProviderDeviceTypeResolver.h | 2 +- src/app/AttributePathExpandIterator.cpp | 2 +- src/app/AttributePathExpandIterator.h | 2 +- src/app/CommandHandlerInterface.h | 8 +- src/app/InteractionModelEngine.cpp | 2 +- src/app/clusters/descriptor/descriptor.cpp | 2 +- .../device-energy-management-server.cpp | 28 +++--- src/app/data-model-provider/BUILD.gn | 2 - .../data-model-provider/MetadataLookup.cpp | 2 +- src/app/data-model-provider/MetadataLookup.h | 2 +- .../ProviderMetadataTree.cpp | 2 +- .../ProviderMetadataTree.h | 2 +- .../tests/TestMetadataList.cpp | 2 +- src/app/data-model/BUILD.gn | 2 + .../MetadataList.cpp | 2 +- .../MetadataList.h | 0 src/app/reporting/Engine.cpp | 2 +- .../tests/TestServerCommandDispatch.cpp | 5 +- .../codegen/CodegenDataModelProvider.cpp | 94 +------------------ .../codegen/CodegenDataModelProvider.h | 2 +- .../tests/TestCodegenModelViaMocks.cpp | 20 ++-- 22 files changed, 77 insertions(+), 138 deletions(-) create mode 100644 admin_storage.json rename src/app/{data-model-provider => data-model}/MetadataList.cpp (99%) rename src/app/{data-model-provider => data-model}/MetadataList.h (100%) diff --git a/admin_storage.json b/admin_storage.json new file mode 100644 index 00000000000000..1b628b13de8fea --- /dev/null +++ b/admin_storage.json @@ -0,0 +1,30 @@ +{ + "sdk-config": { + "g/lkgt": "FSYAgKi8LBg=", + "g/gcc": "aJuaDw==", + "g/gdc": "eVQ1Cw==", + "ExampleOpCredsCAKey1": "BNJGVNf+KuPMsKB1rJHyNZEKiXS/0lXyW0m7Als9bGvS7yhgFy5HlZ+Ukuju7DyicIXPC+NAVNdWttf+z0YrSKNpPaFJxR1qyW4+aqrqzIEw0UYHFzL5wed7AWRtDb2PWw==", + "ExampleOpCredsICAKey1": "BJW39nhSeUPdfSELvjAuf7wNkny6xkzxC1eeb0p/FmcrVv7q0x+z5J7p61o1OgAW4mbyB2UPofsRjDWwxGVIUfwpnurkR+oLOyjiZD0cr+gPwpSO46drERQj8HTtbWs41g==", + "ExampleCARootCert1": "MIICQDCCAeagAwIBAgIBATAKBggqhkjOPQQDAjAiMSAwHgYKKwYBBAGConwBBAwQMDAwMDAwMDAwMDAwMDAwMTAeFw0yMTAxMDEwMDAwMDBaFw0zMDEyMzAwMDAwMDBaMCIxIDAeBgorBgEEAYKifAEEDBAwMDAwMDAwMDAwMDAwMDAxMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0kZU1/4q48ywoHWskfI1kQqJdL/SVfJbSbsCWz1sa9LvKGAXLkeVn5SS6O7sPKJwhc8L40BU11a21/7PRitIo6OCAQswggEHMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR8Wtrm0OOd3zySOb6aEq9hbKPh8zAfBgNVHSMEGDAWgBR8Wtrm0OOd3zySOb6aEq9hbKPh8zCBowYDVR0RBIGbBIGYQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEwCgYIKoZIzj0EAwIDSAAwRQIga+q2BK+HvAMpEJyc7rSs+JYLA+cablmaGnsUorQH+3ICIQDA9jARNp0krnq63VIPqaD1Bjovim6XVv6/ykQbnzlP9g==", + "ExampleCAIntermediateCert1": "MIICQDCCAeagAwIBAgIBATAKBggqhkjOPQQDAjAiMSAwHgYKKwYBBAGConwBBAwQMDAwMDAwMDAwMDAwMDAwMTAeFw0yMTAxMDEwMDAwMDBaFw0zMDEyMzAwMDAwMDBaMCIxIDAeBgorBgEEAYKifAEDDBAwMDAwMDAwMDAwMDAwMDAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAElbf2eFJ5Q919IQu+MC5/vA2SfLrGTPELV55vSn8WZytW/urTH7PknunrWjU6ABbiZvIHZQ+h+xGMNbDEZUhR/KOCAQswggEHMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSPbIW5kR4R1557pNLcxyJ9vZNQMzAfBgNVHSMEGDAWgBR8Wtrm0OOd3zySOb6aEq9hbKPh8zCBowYDVR0RBIGbBIGYQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEwCgYIKoZIzj0EAwIDSAAwRQIgaPSHU75svsHLrV0tdEBclY6Z5VPkrz6xbzsno58STfkCIQCxlHJT9IjBeT1zWWSUyBL6+cAkExMZQsFdWFqbqbe0/w==", + "f/1/m": "FSUA8f8sAQAY", + "f/1/n": "FTABAQEkAgE3AyQTAhgmBIAigScmBYAlTTo3BiQVASYRabYBACYWAQABABgkBwEkCAEwCUEETnxLK2KKVrJyEhLk5xyAxAYWS2dO4jwCeh1mXoQ2fOUSrJRm+5+xfi5R26bkzSzsmODu6KNt+VgXaeD2iUF/2jcKNQEoARgkAgE2AwQCBAEYMAQUmOnoN7kLzgFda1sM0KEC/RdvyqUwBRSPbIW5kR4R1557pNLcxyJ9vZNQMxgwC0B1yrr3+GDFOPQ6KXRQmcag5m7FPf8NjHVwHOZlJuit/oWFrKHJ1zWUhT7ulDlpRTEJb7UWMgGJbvK9b3UjR/gsGA==", + "f/1/i": "FTABAQEkAgE3AyQUARgmBIAigScmBYAlTTo3BiQTAhgkBwEkCAEwCUEElbf2eFJ5Q919IQu+MC5/vA2SfLrGTPELV55vSn8WZytW/urTH7PknunrWjU6ABbiZvIHZQ+h+xGMNbDEZUhR/DcKNQEpARgkAmAwBBSPbIW5kR4R1557pNLcxyJ9vZNQMzAFFHxa2ubQ453fPJI5vpoSr2Fso+HzMAamMIGjBgNVHREEgZsEgZhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQRgwC0Bo9IdTvmy+wcutXS10QFyVjpnlU+SvPrFvOyejnxJN+bGUclP0iMF5PXNZZJTIEvr5wCQTExlCwV1YWpupt7T/GA==", + "f/1/r": "FTABAQEkAgE3AyQUARgmBIAigScmBYAlTTo3BiQUARgkBwEkCAEwCUEE0kZU1/4q48ywoHWskfI1kQqJdL/SVfJbSbsCWz1sa9LvKGAXLkeVn5SS6O7sPKJwhc8L40BU11a21/7PRitIozcKNQEpARgkAmAwBBR8Wtrm0OOd3zySOb6aEq9hbKPh8zAFFHxa2ubQ453fPJI5vpoSr2Fso+HzMAamMIGjBgNVHREEgZsEgZhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQRgwC0Br6rYEr4e8AykQnJzutKz4lgsD5xpuWZoaexSitAf7csD2MBE2nSSuerrdUg+poPUGOi+KbpdW/r/KRBufOU/2GA==", + "g/fidx": "FSQAAjYBBAEYGA==", + "f/1/k/0": "FSQBACQCATYDFSQEACUFIjQwBhDpydi+x69atQKt/+IHwIAUGBUkBAAkBQAwBhAAAAAAAAAAAAAAAAAAAAAAGBUkBAAkBQAwBhAAAAAAAAAAAAAAAAAAAAAAGBglB///GA==", + "g/gfl": "FSQBASQCARg=", + "f/1/g": "FSQBACQCACQDACQEACQFACQGASQHABg=", + "g/icdfl": "FgQBGA==" + }, + "repl-config": { + "caList": { + "1": [ + { + "fabricId": 1, + "vendorId": 65521 + } + ] + } + } +} \ No newline at end of file diff --git a/src/access/ProviderDeviceTypeResolver.h b/src/access/ProviderDeviceTypeResolver.h index aff5b424a693f1..57a4f991fd9a54 100644 --- a/src/access/ProviderDeviceTypeResolver.h +++ b/src/access/ProviderDeviceTypeResolver.h @@ -16,7 +16,7 @@ #pragma once #include -#include +#include #include #include diff --git a/src/app/AttributePathExpandIterator.cpp b/src/app/AttributePathExpandIterator.cpp index 7f357164427b44..c7637dd0b437e2 100644 --- a/src/app/AttributePathExpandIterator.cpp +++ b/src/app/AttributePathExpandIterator.cpp @@ -17,7 +17,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/app/AttributePathExpandIterator.h b/src/app/AttributePathExpandIterator.h index e5d1f961434eb2..3ca57956ac9856 100644 --- a/src/app/AttributePathExpandIterator.h +++ b/src/app/AttributePathExpandIterator.h @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/app/CommandHandlerInterface.h b/src/app/CommandHandlerInterface.h index 4146556779756c..591716686af022 100644 --- a/src/app/CommandHandlerInterface.h +++ b/src/app/CommandHandlerInterface.h @@ -23,11 +23,15 @@ #include #include #include // So we can encode lists +#include // So we can get filled buffers #include #include namespace chip { namespace app { +namespace DataModel { + struct AcceptedCommandEntry; +} /* * This interface permits applications to register a server-side command handler @@ -122,7 +126,7 @@ class CommandHandlerInterface * This is used by callbacks that just look for a particular value in the * list. */ - virtual CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) + virtual CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) { return CHIP_ERROR_NOT_IMPLEMENTED; } @@ -146,7 +150,7 @@ class CommandHandlerInterface * This is used by callbacks that just look for a particular value in the * list. */ - virtual CHIP_ERROR EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) + virtual CHIP_ERROR EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, CommandIdCallback, void * context) { return CHIP_ERROR_NOT_IMPLEMENTED; } diff --git a/src/app/InteractionModelEngine.cpp b/src/app/InteractionModelEngine.cpp index da2190629ec4c1..e5b81894da819f 100644 --- a/src/app/InteractionModelEngine.cpp +++ b/src/app/InteractionModelEngine.cpp @@ -37,7 +37,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/app/clusters/descriptor/descriptor.cpp b/src/app/clusters/descriptor/descriptor.cpp index 35ddcabfd428d2..6d1d4f963c52ed 100644 --- a/src/app/clusters/descriptor/descriptor.cpp +++ b/src/app/clusters/descriptor/descriptor.cpp @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp index 0b7205dd83a33a..42c0b1a2ec3b6c 100644 --- a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp +++ b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp @@ -104,46 +104,46 @@ CHIP_ERROR Instance::Read(const ConcreteReadAttributePath & aPath, AttributeValu } // CommandHandlerInterface -CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) +CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, ListBuilder & builder) { using namespace Commands; + using QF = DataModel::CommandQualityFlags; if (HasFeature(Feature::kPowerAdjustment)) { - for (auto && cmd : { - PowerAdjustRequest::Id, - CancelPowerAdjustRequest::Id, - }) - { - VerifyOrExit(callback(cmd, context) == Loop::Continue, /**/); - } + VerifyOrExit(builder.AppendElements({ + {PowerAdjustRequest::Id, QF::kFabricScoped, Access::Privilege::kOperate}, //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + {CancelPowerAdjustRequest::Id, QF::kFabricScoped, Access::Privilege::kOperate} //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + })); } if (HasFeature(Feature::kStartTimeAdjustment)) { - VerifyOrExit(callback(StartTimeAdjustRequest::Id, context) == Loop::Continue, /**/); + VerifyOrExit(builder.AppendElement({StartTimeAdjustRequest::Id, QF::kFabricScoped})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags } if (HasFeature(Feature::kPausable)) { - VerifyOrExit(callback(PauseRequest::Id, context) == Loop::Continue, /**/); - VerifyOrExit(callback(ResumeRequest::Id, context) == Loop::Continue, /**/); + VerifyOrExit(builder.AppendElements({ + {PauseRequest::Id, QF::kFabricScoped, Access::Privilege::kOperate}, + {ResumeRequest::Id, BitFlags(QF::kFabricScoped), Access::Privilege::kOperate} + })); } if (HasFeature(Feature::kForecastAdjustment)) { - VerifyOrExit(callback(ModifyForecastRequest::Id, context) == Loop::Continue, /**/); + VerifyOrExit(builder.AppendElement({ModifyForecastRequest::Id, QF::kFabricScoped})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags } if (HasFeature(Feature::kConstraintBasedAdjustment)) { - VerifyOrExit(callback(RequestConstraintBasedForecast::Id, context) == Loop::Continue, /**/); + VerifyOrExit(builder.AppendElement({ModifyForecastRequest::Id, QF::kFabricScoped})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags } if (HasFeature(Feature::kStartTimeAdjustment) || HasFeature(Feature::kForecastAdjustment) || HasFeature(Feature::kConstraintBasedAdjustment)) { - VerifyOrExit(callback(CancelRequest::Id, context) == Loop::Continue, /**/); + VerifyOrExit(builder.AppendElement({CancelRequest::Id, QF::kFabricScoped})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags } exit: diff --git a/src/app/data-model-provider/BUILD.gn b/src/app/data-model-provider/BUILD.gn index a57e7d11fbde5d..9de9a044b485c4 100644 --- a/src/app/data-model-provider/BUILD.gn +++ b/src/app/data-model-provider/BUILD.gn @@ -31,8 +31,6 @@ source_set("data-model-provider") { "ActionReturnStatus.h", "Context.h", "EventsGenerator.h", - "MetadataList.cpp", - "MetadataList.h", "MetadataLookup.cpp", "MetadataLookup.h", "OperationTypes.h", diff --git a/src/app/data-model-provider/MetadataLookup.cpp b/src/app/data-model-provider/MetadataLookup.cpp index a249b7e33caeed..b26ffdcc23d84e 100644 --- a/src/app/data-model-provider/MetadataLookup.cpp +++ b/src/app/data-model-provider/MetadataLookup.cpp @@ -15,7 +15,7 @@ */ #include -#include +#include namespace chip { namespace app { diff --git a/src/app/data-model-provider/MetadataLookup.h b/src/app/data-model-provider/MetadataLookup.h index 7526bd32acc375..77f892a1becc17 100644 --- a/src/app/data-model-provider/MetadataLookup.h +++ b/src/app/data-model-provider/MetadataLookup.h @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/app/data-model-provider/ProviderMetadataTree.cpp b/src/app/data-model-provider/ProviderMetadataTree.cpp index 8b6b4b6d5c6ccb..b8d43aa06806ac 100644 --- a/src/app/data-model-provider/ProviderMetadataTree.cpp +++ b/src/app/data-model-provider/ProviderMetadataTree.cpp @@ -17,7 +17,7 @@ #include -#include +#include namespace chip { namespace app { diff --git a/src/app/data-model-provider/ProviderMetadataTree.h b/src/app/data-model-provider/ProviderMetadataTree.h index 3b0820e6efb73e..8151e3758e6e5c 100644 --- a/src/app/data-model-provider/ProviderMetadataTree.h +++ b/src/app/data-model-provider/ProviderMetadataTree.h @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/app/data-model-provider/tests/TestMetadataList.cpp b/src/app/data-model-provider/tests/TestMetadataList.cpp index f9fd7ab62be208..f987879e3b72f1 100644 --- a/src/app/data-model-provider/tests/TestMetadataList.cpp +++ b/src/app/data-model-provider/tests/TestMetadataList.cpp @@ -22,7 +22,7 @@ #include -#include +#include #include #include diff --git a/src/app/data-model/BUILD.gn b/src/app/data-model/BUILD.gn index d8e314e2a523b6..183df98929f21e 100644 --- a/src/app/data-model/BUILD.gn +++ b/src/app/data-model/BUILD.gn @@ -38,6 +38,8 @@ source_set("data-model") { "FabricScopedPreEncodedValue.cpp", "FabricScopedPreEncodedValue.h", "List.h", + "MetadataList.cpp", + "MetadataList.h", "PreEncodedValue.cpp", "PreEncodedValue.h", "WrappedStructEncoder.h", diff --git a/src/app/data-model-provider/MetadataList.cpp b/src/app/data-model/MetadataList.cpp similarity index 99% rename from src/app/data-model-provider/MetadataList.cpp rename to src/app/data-model/MetadataList.cpp index 01da67ea37bfd9..3e60231b6fcdc1 100644 --- a/src/app/data-model-provider/MetadataList.cpp +++ b/src/app/data-model/MetadataList.cpp @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#include +#include #include #include diff --git a/src/app/data-model-provider/MetadataList.h b/src/app/data-model/MetadataList.h similarity index 100% rename from src/app/data-model-provider/MetadataList.h rename to src/app/data-model/MetadataList.h diff --git a/src/app/reporting/Engine.cpp b/src/app/reporting/Engine.cpp index fbcd9d302cf1ec..3967f3511ee33b 100644 --- a/src/app/reporting/Engine.cpp +++ b/src/app/reporting/Engine.cpp @@ -172,7 +172,7 @@ DataModel::ActionReturnStatus RetrieveClusterData(DataModel::Provider * dataMode reportBuilder.Checkpoint(checkpoint); DataModel::ActionReturnStatus status(CHIP_NO_ERROR); - AttributeValueEncoder attributeValueEncoder(reportBuilder, subjectDescriptor, path, version, isFabricFiltered, encoderState); + AttributeValueEncoder attributeValueEncoder ={reportBuilder, subjectDescriptor, path, version, isFabricFiltered, encoderState}; // TODO: we explicitly DO NOT validate that path is a valid cluster path (even more, above serverClusterFinder // explicitly ignores that case). This means that global attribute reads as well as ReadAttribute diff --git a/src/controller/tests/TestServerCommandDispatch.cpp b/src/controller/tests/TestServerCommandDispatch.cpp index f4457c0013ef34..4ef61fbbeb1dd0 100644 --- a/src/controller/tests/TestServerCommandDispatch.cpp +++ b/src/controller/tests/TestServerCommandDispatch.cpp @@ -104,8 +104,7 @@ void TestClusterCommandHandler::InvokeCommand(chip::app::CommandHandlerInterface }); } -CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, - CommandHandlerInterface::CommandIdCallback callback, void * context) +CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, ListBuilder & builder) { if (!mOverrideAcceptedCommands) { @@ -116,7 +115,7 @@ CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteCl { return CHIP_NO_ERROR; } - + builder.get // We just have one command id. callback(Clusters::UnitTesting::Commands::TestSimpleArgumentRequest::Id, context); return CHIP_NO_ERROR; diff --git a/src/data-model-providers/codegen/CodegenDataModelProvider.cpp b/src/data-model-providers/codegen/CodegenDataModelProvider.cpp index b891346d170432..4b6cb8738bda8a 100644 --- a/src/data-model-providers/codegen/CodegenDataModelProvider.cpp +++ b/src/data-model-providers/codegen/CodegenDataModelProvider.cpp @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include #include #include @@ -335,53 +335,7 @@ CHIP_ERROR CodegenDataModelProvider::AcceptedCommands(const ConcreteClusterPath CommandHandlerInterfaceRegistry::Instance().GetCommandHandler(path.mEndpointId, path.mClusterId); if (interface != nullptr) { - size_t commandCount = 0; - - CHIP_ERROR err = interface->EnumerateAcceptedCommands( - path, - [](CommandId id, void * context) -> Loop { - *reinterpret_cast(context) += 1; - return Loop::Continue; - }, - reinterpret_cast(&commandCount)); - - if (err == CHIP_NO_ERROR) - { - using EnumerationData = struct - { - ConcreteCommandPath commandPath; - DataModel::ListBuilder * acceptedCommandList; - CHIP_ERROR processingError; - }; - - EnumerationData enumerationData; - enumerationData.commandPath = ConcreteCommandPath(path.mEndpointId, path.mClusterId, kInvalidCommandId); - enumerationData.processingError = CHIP_NO_ERROR; - enumerationData.acceptedCommandList = &builder; - - ReturnErrorOnFailure(builder.EnsureAppendCapacity(commandCount)); - - ReturnErrorOnFailure(interface->EnumerateAcceptedCommands( - path, - [](CommandId commandId, void * context) -> Loop { - auto input = reinterpret_cast(context); - input->commandPath.mCommandId = commandId; - CHIP_ERROR appendError = input->acceptedCommandList->Append(AcceptedCommandEntryFor(input->commandPath)); - if (appendError != CHIP_NO_ERROR) - { - input->processingError = appendError; - return Loop::Break; - } - return Loop::Continue; - }, - reinterpret_cast(&enumerationData))); - ReturnErrorOnFailure(enumerationData.processingError); - - // the two invocations MUST return the same sizes. - VerifyOrReturnError(builder.Size() == commandCount, CHIP_ERROR_INTERNAL); - return CHIP_NO_ERROR; - } - VerifyOrReturnError(err == CHIP_ERROR_NOT_IMPLEMENTED, err); + ReturnErrorOnFailure(interface->EnumerateAcceptedCommands(path, builder)); } VerifyOrReturnError(serverCluster->acceptedCommandList != nullptr, CHIP_NO_ERROR); @@ -420,48 +374,8 @@ CHIP_ERROR CodegenDataModelProvider::GeneratedCommands(const ConcreteClusterPath if (interface != nullptr) { size_t commandCount = 0; - - CHIP_ERROR err = interface->EnumerateGeneratedCommands( - path, - [](CommandId id, void * context) -> Loop { - *reinterpret_cast(context) += 1; - return Loop::Continue; - }, - reinterpret_cast(&commandCount)); - - if (err == CHIP_NO_ERROR) - { - ReturnErrorOnFailure(builder.EnsureAppendCapacity(commandCount)); - - using EnumerationData = struct - { - DataModel::ListBuilder * generatedCommandList; - CHIP_ERROR processingError; - }; - EnumerationData enumerationData; - enumerationData.processingError = CHIP_NO_ERROR; - enumerationData.generatedCommandList = &builder; - - ReturnErrorOnFailure(interface->EnumerateGeneratedCommands( - path, - [](CommandId id, void * context) -> Loop { - auto input = reinterpret_cast(context); - - CHIP_ERROR appendError = input->generatedCommandList->Append(id); - if (appendError != CHIP_NO_ERROR) - { - input->processingError = appendError; - return Loop::Break; - } - return Loop::Continue; - }, - reinterpret_cast(&enumerationData))); - ReturnErrorOnFailure(enumerationData.processingError); - - // the two invocations MUST return the same sizes. - VerifyOrReturnError(builder.Size() == commandCount, CHIP_ERROR_INTERNAL); - return CHIP_NO_ERROR; - } + CHIP_ERROR err = interface->EnumerateGeneratedCommands(path, builder); + // if err == CHIP_ERROR_NOT_IMPLEMENTED then continue, else just return whatever err is VerifyOrReturnError(err == CHIP_ERROR_NOT_IMPLEMENTED, err); } diff --git a/src/data-model-providers/codegen/CodegenDataModelProvider.h b/src/data-model-providers/codegen/CodegenDataModelProvider.h index 764f5f74874673..e890d73802bbd4 100644 --- a/src/data-model-providers/codegen/CodegenDataModelProvider.h +++ b/src/data-model-providers/codegen/CodegenDataModelProvider.h @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp b/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp index 4d54a194b1e0c5..44ebbfc61e4f88 100644 --- a/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp +++ b/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp @@ -33,7 +33,7 @@ #include #include #include -#include +#include #include #include #include @@ -282,18 +282,9 @@ class CustomListCommandHandler : public CommandHandlerInterface void SetHandleCommands(bool handle) { mHandleCommand = handle; } - CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) override + CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder& builder) override { - VerifyOrReturnError(mOverrideAccepted, CHIP_ERROR_NOT_IMPLEMENTED); - - for (auto id : mAccepted) - { - if (callback(id, context) != Loop::Continue) - { - break; - } - } - return CHIP_NO_ERROR; + return builder.ReferenceExisting(mAccepted); } CHIP_ERROR EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) override @@ -313,7 +304,7 @@ class CustomListCommandHandler : public CommandHandlerInterface void SetOverrideAccepted(bool o) { mOverrideAccepted = o; } void SetOverrideGenerated(bool o) { mOverrideGenerated = o; } - std::vector & AcceptedVec() { return mAccepted; } + std::vector & AcceptedVec() { return mAccepted; } std::vector & GeneratedVec() { return mGenerated; } private: @@ -321,7 +312,8 @@ class CustomListCommandHandler : public CommandHandlerInterface bool mOverrideGenerated = false; bool mHandleCommand = false; - std::vector mAccepted; + std::vector mAccepted; + std::vector mGenerated; }; From 60c855fc7199b871c271fe7b5df320b548e4a48b Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Sun, 23 Feb 2025 22:39:42 +0000 Subject: [PATCH 02/39] Update CHI::EnumerateGeneratedCommands to use builder --- src/app/CommandHandlerInterface.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/CommandHandlerInterface.h b/src/app/CommandHandlerInterface.h index 591716686af022..fbb772379f97d3 100644 --- a/src/app/CommandHandlerInterface.h +++ b/src/app/CommandHandlerInterface.h @@ -150,7 +150,7 @@ class CommandHandlerInterface * This is used by callbacks that just look for a particular value in the * list. */ - virtual CHIP_ERROR EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, CommandIdCallback, void * context) + virtual CHIP_ERROR EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) { return CHIP_ERROR_NOT_IMPLEMENTED; } From 97a16dba799c4f78180ecd732b81e8e930b0d205 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Sun, 23 Feb 2025 22:41:22 +0000 Subject: [PATCH 03/39] Added Builder initializer support --- src/app/data-model/MetadataList.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/app/data-model/MetadataList.h b/src/app/data-model/MetadataList.h index 24a34c8223f655..c8f625a6f0f28f 100644 --- a/src/app/data-model/MetadataList.h +++ b/src/app/data-model/MetadataList.h @@ -178,6 +178,16 @@ class ListBuilder : public detail::GenericAppendOnlyBuffer /// via `Take`) CHIP_ERROR AppendElements(SpanType span) { return AppendElementArrayRaw(span.data(), span.size()); } + /// Append always attempts to append/extend existing memory. + /// + /// Automatically attempts to allocate sufficient space to fulfill the element + /// requirements. + /// + /// `span` MUST NOT point inside "own" buffer (and generally will not + /// as this class does not expose buffer access except by releasing ownership + /// via `Take`) + CHIP_ERROR AppendElements(std::initializer_list span) { return AppendElementArrayRaw(span.begin(), span.size()); } + /// Append a single element. /// Sufficent append capacity MUST exist. CHIP_ERROR Append(const T & value) { return AppendSingleElementRaw(&value); } From 0aeb4e5a5ab7c6169039da8afc3a90996229046c Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Sun, 23 Feb 2025 22:43:27 +0000 Subject: [PATCH 04/39] Update all cluster Implentations of the CHI interface --- .../device-energy-management-server.cpp | 29 ++++---- .../device-energy-management-server.h | 2 +- .../energy-evse-server/energy-evse-server.cpp | 35 +++++----- .../energy-evse-server/energy-evse-server.h | 2 +- .../network-commissioning.cpp | 67 ++++++++----------- .../network-commissioning.h | 4 +- .../resource-monitoring-server.cpp | 10 ++- .../resource-monitoring-server.h | 2 +- .../software-diagnostics-server.cpp | 13 ++-- .../tests/TestServerCommandDispatch.cpp | 13 ++-- .../codegen/CodegenDataModelProvider.cpp | 1 - .../tests/TestCodegenModelViaMocks.cpp | 22 +++--- 12 files changed, 94 insertions(+), 106 deletions(-) diff --git a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp index 42c0b1a2ec3b6c..57515b8c4c32c0 100644 --- a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp +++ b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp @@ -104,49 +104,50 @@ CHIP_ERROR Instance::Read(const ConcreteReadAttributePath & aPath, AttributeValu } // CommandHandlerInterface -CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, ListBuilder & builder) +CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) { using namespace Commands; - using QF = DataModel::CommandQualityFlags; + using QF = DataModel::CommandQualityFlags; + static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); + static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; if (HasFeature(Feature::kPowerAdjustment)) { - VerifyOrExit(builder.AppendElements({ - {PowerAdjustRequest::Id, QF::kFabricScoped, Access::Privilege::kOperate}, //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags - {CancelPowerAdjustRequest::Id, QF::kFabricScoped, Access::Privilege::kOperate} //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + ReturnErrorOnFailure(builder.AppendElements({ + {PowerAdjustRequest::Id, kDefaultFlags, kDefaultPrivilege}, //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + {CancelPowerAdjustRequest::Id, kDefaultFlags, kDefaultPrivilege} //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags })); } if (HasFeature(Feature::kStartTimeAdjustment)) { - VerifyOrExit(builder.AppendElement({StartTimeAdjustRequest::Id, QF::kFabricScoped})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + ReturnErrorOnFailure(builder.Append({StartTimeAdjustRequest::Id, kDefaultFlags, kDefaultPrivilege})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags } if (HasFeature(Feature::kPausable)) { - VerifyOrExit(builder.AppendElements({ - {PauseRequest::Id, QF::kFabricScoped, Access::Privilege::kOperate}, - {ResumeRequest::Id, BitFlags(QF::kFabricScoped), Access::Privilege::kOperate} + ReturnErrorOnFailure(builder.AppendElements({ + {PauseRequest::Id, kDefaultFlags, kDefaultPrivilege}, + {ResumeRequest::Id, kDefaultFlags, kDefaultPrivilege} })); } if (HasFeature(Feature::kForecastAdjustment)) { - VerifyOrExit(builder.AppendElement({ModifyForecastRequest::Id, QF::kFabricScoped})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + ReturnErrorOnFailure(builder.Append({ModifyForecastRequest::Id, kDefaultFlags, kDefaultPrivilege})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags } if (HasFeature(Feature::kConstraintBasedAdjustment)) { - VerifyOrExit(builder.AppendElement({ModifyForecastRequest::Id, QF::kFabricScoped})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + ReturnErrorOnFailure(builder.Append({ModifyForecastRequest::Id, kDefaultFlags, kDefaultPrivilege})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags } if (HasFeature(Feature::kStartTimeAdjustment) || HasFeature(Feature::kForecastAdjustment) || HasFeature(Feature::kConstraintBasedAdjustment)) { - VerifyOrExit(builder.AppendElement({CancelRequest::Id, QF::kFabricScoped})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + ReturnErrorOnFailure(builder.Append({CancelRequest::Id, kDefaultFlags, kDefaultPrivilege})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags } - -exit: + return CHIP_NO_ERROR; } diff --git a/src/app/clusters/device-energy-management-server/device-energy-management-server.h b/src/app/clusters/device-energy-management-server/device-energy-management-server.h index c58e5c5a73743a..beb65d319ebbaa 100644 --- a/src/app/clusters/device-energy-management-server/device-energy-management-server.h +++ b/src/app/clusters/device-energy-management-server/device-energy-management-server.h @@ -235,7 +235,7 @@ class Instance : public AttributeAccessInterface, public CommandHandlerInterface // CommandHandlerInterface void InvokeCommand(HandlerContext & handlerContext) override; - CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) override; + CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) override; Protocols::InteractionModel::Status CheckOptOutAllowsRequest(AdjustmentCauseEnum adjustmentCause); void HandlePowerAdjustRequest(HandlerContext & ctx, const Commands::PowerAdjustRequest::DecodableType & commandData); diff --git a/src/app/clusters/energy-evse-server/energy-evse-server.cpp b/src/app/clusters/energy-evse-server/energy-evse-server.cpp index d4ae59307cfea1..f97e1d98e3992b 100644 --- a/src/app/clusters/energy-evse-server/energy-evse-server.cpp +++ b/src/app/clusters/energy-evse-server/energy-evse-server.cpp @@ -182,41 +182,36 @@ CHIP_ERROR Instance::Write(const ConcreteDataAttributePath & aPath, AttributeVal } // CommandHandlerInterface -CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) +CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) { using namespace Commands; + using QF = DataModel::CommandQualityFlags; + static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); + static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; - for (auto && cmd : { - Disable::Id, - EnableCharging::Id, - }) - { - VerifyOrExit(callback(cmd, context) == Loop::Continue, /**/); - } + ReturnErrorOnFailure(builder.AppendElements({ + {Disable::Id, kDefaultFlags, kDefaultPrivilege}, + {EnableCharging::Id, kDefaultFlags, kDefaultPrivilege}, + })); if (HasFeature(Feature::kV2x)) { - VerifyOrExit(callback(EnableDischarging::Id, context) == Loop::Continue, /**/); + ReturnErrorOnFailure(builder.Append({EnableDischarging::Id, kDefaultFlags, kDefaultPrivilege}) ); } if (HasFeature(Feature::kChargingPreferences)) { - for (auto && cmd : { - SetTargets::Id, - GetTargets::Id, - ClearTargets::Id, - }) - { - VerifyOrExit(callback(cmd, context) == Loop::Continue, /**/); - } + ReturnErrorOnFailure(builder.AppendElements({ + {SetTargets::Id, kDefaultFlags, kDefaultPrivilege}, + {GetTargets::Id, kDefaultFlags, kDefaultPrivilege}, + {ClearTargets::Id, kDefaultFlags, kDefaultPrivilege}, + })); } if (SupportsOptCmd(OptionalCommands::kSupportsStartDiagnostics)) { - callback(StartDiagnostics::Id, context); + ReturnErrorOnFailure(builder.Append({StartDiagnostics::Id, kDefaultFlags, kDefaultPrivilege})); } - -exit: return CHIP_NO_ERROR; } diff --git a/src/app/clusters/energy-evse-server/energy-evse-server.h b/src/app/clusters/energy-evse-server/energy-evse-server.h index 979e44c040a17b..e59d314d1f52e3 100644 --- a/src/app/clusters/energy-evse-server/energy-evse-server.h +++ b/src/app/clusters/energy-evse-server/energy-evse-server.h @@ -200,7 +200,7 @@ class Instance : public AttributeAccessInterface, public CommandHandlerInterface // CommandHandlerInterface void InvokeCommand(HandlerContext & handlerContext) override; - CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) override; + CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) override; void HandleDisable(HandlerContext & ctx, const Commands::Disable::DecodableType & commandData); void HandleEnableCharging(HandlerContext & ctx, const Commands::EnableCharging::DecodableType & commandData); diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index ea73b8ff23d9eb..cd86f4b83f3577 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1360,64 +1360,51 @@ void Instance::OnFailSafeTimerExpired() } } -CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) +CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) { using namespace Clusters::NetworkCommissioning::Commands; - - if (mFeatureFlags.Has(Feature::kThreadNetworkInterface)) - { - for (auto && cmd : { - ScanNetworks::Id, - AddOrUpdateThreadNetwork::Id, - RemoveNetwork::Id, - ConnectNetwork::Id, - ReorderNetwork::Id, - }) - { - VerifyOrExit(callback(cmd, context) == Loop::Continue, /**/); - } - } - else if (mFeatureFlags.Has(Feature::kWiFiNetworkInterface)) - { - for (auto && cmd : { - ScanNetworks::Id, - AddOrUpdateWiFiNetwork::Id, - RemoveNetwork::Id, - ConnectNetwork::Id, - ReorderNetwork::Id, - }) - { - VerifyOrExit(callback(cmd, context) == Loop::Continue, /**/); - } + using QF = DataModel::CommandQualityFlags; + static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); + static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; + + bool hasNet = mFeatureFlags.Has(Feature::kThreadNetworkInterface); + bool hasWifi = mFeatureFlags.Has(Feature::kWiFiNetworkInterface); + bool hasCred = mFeatureFlags.Has(Feature::kPerDeviceCredentials); + auto netId = hasNet? AddOrUpdateThreadNetwork::Id : AddOrUpdateWiFiNetwork::Id; + + static const DataModel::AcceptedCommandEntry commands [6] = { + {ScanNetworks::Id, kDefaultFlags, kDefaultPrivilege}, + {netId, kDefaultFlags, kDefaultPrivilege}, + {RemoveNetwork::Id, kDefaultFlags, kDefaultPrivilege}, + {ConnectNetwork::Id, kDefaultFlags, kDefaultPrivilege}, + {ReorderNetwork::Id, kDefaultFlags, kDefaultPrivilege}, + {QueryIdentity::Id, kDefaultFlags, kDefaultPrivilege} + }; + + if(hasNet | hasWifi) { + //Avoid extra memory allocation + return builder.ReferenceExisting({commands, 5 + hasCred? 1 : 0}); + } else if(hasCred) { + return builder.ReferenceExisting({commands + 5, 1}); } - if (mFeatureFlags.Has(Feature::kPerDeviceCredentials)) - { - VerifyOrExit(callback(QueryIdentity::Id, context) == Loop::Continue, /**/); - } - -exit: return CHIP_NO_ERROR; } -CHIP_ERROR Instance::EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) +CHIP_ERROR Instance::EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) { using namespace Clusters::NetworkCommissioning::Commands; if (mFeatureFlags.HasAny(Feature::kWiFiNetworkInterface, Feature::kThreadNetworkInterface)) { - for (auto && cmd : { ScanNetworksResponse::Id, NetworkConfigResponse::Id, ConnectNetworkResponse::Id }) - { - VerifyOrExit(callback(cmd, context) == Loop::Continue, /**/); - } + ReturnErrorOnFailure(builder.AppendElements({ ScanNetworksResponse::Id, NetworkConfigResponse::Id, ConnectNetworkResponse::Id })); } if (mFeatureFlags.Has(Feature::kPerDeviceCredentials)) { - VerifyOrExit(callback(QueryIdentityResponse::Id, context) == Loop::Continue, /**/); + ReturnErrorOnFailure(builder.Append(QueryIdentityResponse::Id)); } -exit: return CHIP_NO_ERROR; } diff --git a/src/app/clusters/network-commissioning/network-commissioning.h b/src/app/clusters/network-commissioning/network-commissioning.h index d727c9b6c2beb9..21e387e7029b00 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.h +++ b/src/app/clusters/network-commissioning/network-commissioning.h @@ -59,8 +59,8 @@ class Instance : public CommandHandlerInterface, // CommandHandlerInterface void InvokeCommand(HandlerContext & ctx) override; - CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) override; - CHIP_ERROR EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) override; + CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) override; + CHIP_ERROR EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) override; // AttributeAccessInterface CHIP_ERROR Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) override; diff --git a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp index 6c581ff72a9e19..6bcb8ed253baf8 100644 --- a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp +++ b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp @@ -187,13 +187,17 @@ void Instance::InvokeCommand(HandlerContext & handlerContext) } // List the commands supported by this instance. -CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, - CommandHandlerInterface::CommandIdCallback callback, void * context) +CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) { + using namespace ResourceMonitoring::Commands; + using QF = DataModel::CommandQualityFlags; + static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); + static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; + ChipLogDetail(Zcl, "resourcemonitoring: EnumerateAcceptedCommands"); if (mResetConditionCommandSupported) { - callback(ResourceMonitoring::Commands::ResetCondition::Id, context); + return builder.Append({ResetCondition::Id, kDefaultFlags, kDefaultPrivilege}); } return CHIP_NO_ERROR; diff --git a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.h b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.h index 45c96c39f30074..76b32cc74a1b9e 100644 --- a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.h +++ b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.h @@ -132,7 +132,7 @@ class Instance : public CommandHandlerInterface, public AttributeAccessInterface // CommandHandlerInterface void InvokeCommand(HandlerContext & ctx) override; - CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) override; + CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) override; // AttributeAccessInterface CHIP_ERROR Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) override; diff --git a/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp b/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp index d90d09d354749a..526ff0c5c40499 100644 --- a/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp +++ b/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp @@ -62,7 +62,7 @@ class SoftwareDiagnosticsCommandHandler : public CommandHandlerInterface void InvokeCommand(HandlerContext & handlerContext) override; - CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) override; + CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) override; }; SoftwareDiagosticsAttrAccess gAttrAccess; @@ -168,18 +168,19 @@ void SoftwareDiagnosticsCommandHandler::InvokeCommand(HandlerContext & handlerCo handlerContext.mCommandHandler.AddStatus(handlerContext.mRequestPath, status); } -CHIP_ERROR SoftwareDiagnosticsCommandHandler::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, - CommandIdCallback callback, void * context) +CHIP_ERROR SoftwareDiagnosticsCommandHandler::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) { + using namespace Commands; + using QF = DataModel::CommandQualityFlags; + static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); + static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; if (!DeviceLayer::GetDiagnosticDataProvider().SupportsWatermarks()) { // No commmands. return CHIP_NO_ERROR; } - callback(Commands::ResetWatermarks::Id, context); - - return CHIP_NO_ERROR; + return builder.Append({ResetWatermarks::Id, kDefaultFlags, kDefaultPrivilege}); } } // anonymous namespace diff --git a/src/controller/tests/TestServerCommandDispatch.cpp b/src/controller/tests/TestServerCommandDispatch.cpp index 4ef61fbbeb1dd0..ea0262790f2494 100644 --- a/src/controller/tests/TestServerCommandDispatch.cpp +++ b/src/controller/tests/TestServerCommandDispatch.cpp @@ -69,7 +69,7 @@ class TestClusterCommandHandler : public chip::app::CommandHandlerInterface private: void InvokeCommand(chip::app::CommandHandlerInterface::HandlerContext & handlerContext) final; - CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) final; + CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) final; bool mOverrideAcceptedCommands = false; bool mClaimNoCommands = false; @@ -104,8 +104,13 @@ void TestClusterCommandHandler::InvokeCommand(chip::app::CommandHandlerInterface }); } -CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, ListBuilder & builder) +CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) { + using namespace Clusters::UnitTesting::Commands; + using QF = DataModel::CommandQualityFlags; + static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); + static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; + if (!mOverrideAcceptedCommands) { return CHIP_ERROR_NOT_IMPLEMENTED; @@ -115,9 +120,9 @@ CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteCl { return CHIP_NO_ERROR; } - builder.get + // We just have one command id. - callback(Clusters::UnitTesting::Commands::TestSimpleArgumentRequest::Id, context); + ReturnErrorOnFailure(builder.Append({TestSimpleArgumentRequest::Id, kDefaultFlags, kDefaultPrivilege})); return CHIP_NO_ERROR; } diff --git a/src/data-model-providers/codegen/CodegenDataModelProvider.cpp b/src/data-model-providers/codegen/CodegenDataModelProvider.cpp index 4b6cb8738bda8a..578a8809b31251 100644 --- a/src/data-model-providers/codegen/CodegenDataModelProvider.cpp +++ b/src/data-model-providers/codegen/CodegenDataModelProvider.cpp @@ -373,7 +373,6 @@ CHIP_ERROR CodegenDataModelProvider::GeneratedCommands(const ConcreteClusterPath CommandHandlerInterfaceRegistry::Instance().GetCommandHandler(path.mEndpointId, path.mClusterId); if (interface != nullptr) { - size_t commandCount = 0; CHIP_ERROR err = interface->EnumerateGeneratedCommands(path, builder); // if err == CHIP_ERROR_NOT_IMPLEMENTED then continue, else just return whatever err is VerifyOrReturnError(err == CHIP_ERROR_NOT_IMPLEMENTED, err); diff --git a/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp b/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp index 44ebbfc61e4f88..b995724749c30b 100644 --- a/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp +++ b/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp @@ -284,21 +284,13 @@ class CustomListCommandHandler : public CommandHandlerInterface CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder& builder) override { - return builder.ReferenceExisting(mAccepted); + return builder.ReferenceExisting({mAccepted.data(), mAccepted.size()}); } - CHIP_ERROR EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context) override + CHIP_ERROR EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) override { VerifyOrReturnError(mOverrideGenerated, CHIP_ERROR_NOT_IMPLEMENTED); - - for (auto id : mGenerated) - { - if (callback(id, context) != Loop::Continue) - { - break; - } - } - return CHIP_NO_ERROR; + return builder.AppendElements({mGenerated.data(), mGenerated.size()}); } void SetOverrideAccepted(bool o) { mOverrideAccepted = o; } @@ -1234,6 +1226,10 @@ TEST_F(TestCodegenModelViaMocks, AcceptedGeneratedCommandsOnInvalidEndpoints) TEST_F(TestCodegenModelViaMocks, CommandHandlerInterfaceCommandHandling) { + using QF = DataModel::CommandQualityFlags; + static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); + static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; + UseMockNodeConfig config(gTestNodeConfig); CodegenDataModelProviderWithContext model; @@ -1260,8 +1256,8 @@ TEST_F(TestCodegenModelViaMocks, CommandHandlerInterfaceCommandHandling) ASSERT_TRUE(acceptedBuilder.IsEmpty()); // set some overrides - handler.AcceptedVec().push_back(1234); - handler.AcceptedVec().push_back(999); + handler.AcceptedVec().push_back({1234, kDefaultFlags, kDefaultPrivilege}); + handler.AcceptedVec().push_back({999, kDefaultFlags, kDefaultPrivilege}); handler.GeneratedVec().push_back(33); From c9918d2296346623abbf09c8473f27d4dabae09e Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Sun, 23 Feb 2025 22:45:34 +0000 Subject: [PATCH 05/39] Restyled by whitespace --- admin_storage.json | 2 +- .../device-energy-management-server.cpp | 4 ++-- src/app/clusters/energy-evse-server/energy-evse-server.cpp | 2 +- .../clusters/network-commissioning/network-commissioning.cpp | 4 ++-- .../resource-monitoring-server/resource-monitoring-server.cpp | 4 ++-- .../software-diagnostics-server.cpp | 2 +- src/controller/tests/TestServerCommandDispatch.cpp | 2 +- .../codegen/tests/TestCodegenModelViaMocks.cpp | 4 ++-- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/admin_storage.json b/admin_storage.json index 1b628b13de8fea..d6844e15ab6c0f 100644 --- a/admin_storage.json +++ b/admin_storage.json @@ -27,4 +27,4 @@ ] } } -} \ No newline at end of file +} diff --git a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp index 57515b8c4c32c0..ae85554086cfaf 100644 --- a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp +++ b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp @@ -107,7 +107,7 @@ CHIP_ERROR Instance::Read(const ConcreteReadAttributePath & aPath, AttributeValu CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) { using namespace Commands; - using QF = DataModel::CommandQualityFlags; + using QF = DataModel::CommandQualityFlags; static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; @@ -147,7 +147,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust { ReturnErrorOnFailure(builder.Append({CancelRequest::Id, kDefaultFlags, kDefaultPrivilege})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags } - + return CHIP_NO_ERROR; } diff --git a/src/app/clusters/energy-evse-server/energy-evse-server.cpp b/src/app/clusters/energy-evse-server/energy-evse-server.cpp index f97e1d98e3992b..605b5e50c8aa9f 100644 --- a/src/app/clusters/energy-evse-server/energy-evse-server.cpp +++ b/src/app/clusters/energy-evse-server/energy-evse-server.cpp @@ -185,7 +185,7 @@ CHIP_ERROR Instance::Write(const ConcreteDataAttributePath & aPath, AttributeVal CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) { using namespace Commands; - using QF = DataModel::CommandQualityFlags; + using QF = DataModel::CommandQualityFlags; static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index cd86f4b83f3577..920fb36f7d2723 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1363,14 +1363,14 @@ void Instance::OnFailSafeTimerExpired() CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) { using namespace Clusters::NetworkCommissioning::Commands; - using QF = DataModel::CommandQualityFlags; + using QF = DataModel::CommandQualityFlags; static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; bool hasNet = mFeatureFlags.Has(Feature::kThreadNetworkInterface); bool hasWifi = mFeatureFlags.Has(Feature::kWiFiNetworkInterface); bool hasCred = mFeatureFlags.Has(Feature::kPerDeviceCredentials); - auto netId = hasNet? AddOrUpdateThreadNetwork::Id : AddOrUpdateWiFiNetwork::Id; + auto netId = hasNet? AddOrUpdateThreadNetwork::Id : AddOrUpdateWiFiNetwork::Id; static const DataModel::AcceptedCommandEntry commands [6] = { {ScanNetworks::Id, kDefaultFlags, kDefaultPrivilege}, diff --git a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp index 6bcb8ed253baf8..b438b4bb318dc7 100644 --- a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp +++ b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp @@ -190,10 +190,10 @@ void Instance::InvokeCommand(HandlerContext & handlerContext) CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) { using namespace ResourceMonitoring::Commands; - using QF = DataModel::CommandQualityFlags; + using QF = DataModel::CommandQualityFlags; static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; - + ChipLogDetail(Zcl, "resourcemonitoring: EnumerateAcceptedCommands"); if (mResetConditionCommandSupported) { diff --git a/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp b/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp index 526ff0c5c40499..c269c5f0cbac30 100644 --- a/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp +++ b/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp @@ -171,7 +171,7 @@ void SoftwareDiagnosticsCommandHandler::InvokeCommand(HandlerContext & handlerCo CHIP_ERROR SoftwareDiagnosticsCommandHandler::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) { using namespace Commands; - using QF = DataModel::CommandQualityFlags; + using QF = DataModel::CommandQualityFlags; static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; if (!DeviceLayer::GetDiagnosticDataProvider().SupportsWatermarks()) diff --git a/src/controller/tests/TestServerCommandDispatch.cpp b/src/controller/tests/TestServerCommandDispatch.cpp index ea0262790f2494..3d220ccaa0379d 100644 --- a/src/controller/tests/TestServerCommandDispatch.cpp +++ b/src/controller/tests/TestServerCommandDispatch.cpp @@ -107,7 +107,7 @@ void TestClusterCommandHandler::InvokeCommand(chip::app::CommandHandlerInterface CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) { using namespace Clusters::UnitTesting::Commands; - using QF = DataModel::CommandQualityFlags; + using QF = DataModel::CommandQualityFlags; static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; diff --git a/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp b/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp index b995724749c30b..d6bd82dfe32d8c 100644 --- a/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp +++ b/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp @@ -1226,10 +1226,10 @@ TEST_F(TestCodegenModelViaMocks, AcceptedGeneratedCommandsOnInvalidEndpoints) TEST_F(TestCodegenModelViaMocks, CommandHandlerInterfaceCommandHandling) { - using QF = DataModel::CommandQualityFlags; + using QF = DataModel::CommandQualityFlags; static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; - + UseMockNodeConfig config(gTestNodeConfig); CodegenDataModelProviderWithContext model; From 9685feefd25e263ea5b61cdd1e6aed71238eb527 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Sun, 23 Feb 2025 23:26:49 +0000 Subject: [PATCH 06/39] Fixing Checks --- src/access/ProviderDeviceTypeResolver.h | 2 +- src/app/AttributePathExpandIterator.h | 2 +- src/app/CommandHandlerInterface.h | 2 +- .../microwave-oven-control-server.cpp | 2 +- .../clusters/network-commissioning/network-commissioning.cpp | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/access/ProviderDeviceTypeResolver.h b/src/access/ProviderDeviceTypeResolver.h index 57a4f991fd9a54..ef2b9456866681 100644 --- a/src/access/ProviderDeviceTypeResolver.h +++ b/src/access/ProviderDeviceTypeResolver.h @@ -16,9 +16,9 @@ #pragma once #include -#include #include #include +#include namespace chip { namespace Access { diff --git a/src/app/AttributePathExpandIterator.h b/src/app/AttributePathExpandIterator.h index 3ca57956ac9856..76cadc76e3f906 100644 --- a/src/app/AttributePathExpandIterator.h +++ b/src/app/AttributePathExpandIterator.h @@ -19,9 +19,9 @@ #include #include -#include #include #include +#include #include #include #include diff --git a/src/app/CommandHandlerInterface.h b/src/app/CommandHandlerInterface.h index fbb772379f97d3..2e5e458ea93e81 100644 --- a/src/app/CommandHandlerInterface.h +++ b/src/app/CommandHandlerInterface.h @@ -22,7 +22,7 @@ #include #include #include -#include // So we can encode lists +#include // So we can encode lists #include // So we can get filled buffers #include #include diff --git a/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp b/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp index 5d823d0cafe3cb..99a7d44d7fbc7e 100644 --- a/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp +++ b/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp @@ -16,7 +16,7 @@ * */ -#include "app/data-model-provider/MetadataList.h" +#include #include #include #include diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index 920fb36f7d2723..746115d4a55144 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1383,9 +1383,9 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust if(hasNet | hasWifi) { //Avoid extra memory allocation - return builder.ReferenceExisting({commands, 5 + hasCred? 1 : 0}); + return builder.ReferenceExisting({commands, 5z + (hasCred? 1z : 0z)}); } else if(hasCred) { - return builder.ReferenceExisting({commands + 5, 1}); + return builder.ReferenceExisting({commands + 5z, 1z}); } return CHIP_NO_ERROR; From 1e118db6ec65515c97e881d8e5ad4941f905b85a Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Sun, 23 Feb 2025 23:35:12 +0000 Subject: [PATCH 07/39] Size_t --- .../clusters/network-commissioning/network-commissioning.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index 746115d4a55144..0ffdf757783524 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1383,9 +1383,9 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust if(hasNet | hasWifi) { //Avoid extra memory allocation - return builder.ReferenceExisting({commands, 5z + (hasCred? 1z : 0z)}); + return builder.ReferenceExisting({commands, size_t{5} + (hasCred? 1 : 0)}); } else if(hasCred) { - return builder.ReferenceExisting({commands + 5z, 1z}); + return builder.ReferenceExisting({commands + 5, size_t{1}}); } return CHIP_NO_ERROR; From 3a551c1393a6d90606717e350bc77f839ebe6d89 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Mon, 24 Feb 2025 01:55:06 +0000 Subject: [PATCH 08/39] [PATCH] Restyled by clang-format --- src/app/AttributePathExpandIterator.cpp | 2 +- src/app/CommandHandlerInterface.h | 5 ++- src/app/InteractionModelEngine.cpp | 2 +- src/app/clusters/descriptor/descriptor.cpp | 2 +- .../device-energy-management-server.cpp | 31 ++++++++------ .../device-energy-management-server.h | 3 +- .../energy-evse-server/energy-evse-server.cpp | 21 +++++----- .../energy-evse-server/energy-evse-server.h | 3 +- .../microwave-oven-control-server.cpp | 2 +- .../network-commissioning.cpp | 40 ++++++++++--------- .../network-commissioning.h | 6 ++- .../resource-monitoring-server.cpp | 9 +++-- .../resource-monitoring-server.h | 3 +- .../software-diagnostics-server.cpp | 13 +++--- src/app/data-model-provider/MetadataLookup.h | 2 +- .../ProviderMetadataTree.h | 2 +- src/app/reporting/Engine.cpp | 4 +- .../tests/TestServerCommandDispatch.cpp | 12 +++--- .../codegen/CodegenDataModelProvider.cpp | 2 +- .../tests/TestCodegenModelViaMocks.cpp | 17 ++++---- 20 files changed, 102 insertions(+), 79 deletions(-) diff --git a/src/app/AttributePathExpandIterator.cpp b/src/app/AttributePathExpandIterator.cpp index c7637dd0b437e2..2c7cbb12593f5c 100644 --- a/src/app/AttributePathExpandIterator.cpp +++ b/src/app/AttributePathExpandIterator.cpp @@ -17,9 +17,9 @@ #include #include -#include #include #include +#include #include #include diff --git a/src/app/CommandHandlerInterface.h b/src/app/CommandHandlerInterface.h index 2e5e458ea93e81..8d4279d459a5c3 100644 --- a/src/app/CommandHandlerInterface.h +++ b/src/app/CommandHandlerInterface.h @@ -30,7 +30,7 @@ namespace chip { namespace app { namespace DataModel { - struct AcceptedCommandEntry; +struct AcceptedCommandEntry; } /* @@ -126,7 +126,8 @@ class CommandHandlerInterface * This is used by callbacks that just look for a particular value in the * list. */ - virtual CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) + virtual CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, + DataModel::ListBuilder & builder) { return CHIP_ERROR_NOT_IMPLEMENTED; } diff --git a/src/app/InteractionModelEngine.cpp b/src/app/InteractionModelEngine.cpp index e5b81894da819f..57c013fc3102f3 100644 --- a/src/app/InteractionModelEngine.cpp +++ b/src/app/InteractionModelEngine.cpp @@ -37,11 +37,11 @@ #include #include #include -#include #include #include #include #include +#include #include #include #include diff --git a/src/app/clusters/descriptor/descriptor.cpp b/src/app/clusters/descriptor/descriptor.cpp index 6d1d4f963c52ed..6c33db6ceff5c8 100644 --- a/src/app/clusters/descriptor/descriptor.cpp +++ b/src/app/clusters/descriptor/descriptor.cpp @@ -23,9 +23,9 @@ #include #include #include -#include #include #include +#include #include #include #include diff --git a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp index ae85554086cfaf..4a33290bc2e5bc 100644 --- a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp +++ b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp @@ -104,48 +104,53 @@ CHIP_ERROR Instance::Read(const ConcreteReadAttributePath & aPath, AttributeValu } // CommandHandlerInterface -CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) +CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, + DataModel::ListBuilder & builder) { using namespace Commands; - using QF = DataModel::CommandQualityFlags; - static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); + using QF = DataModel::CommandQualityFlags; + static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; if (HasFeature(Feature::kPowerAdjustment)) { ReturnErrorOnFailure(builder.AppendElements({ - {PowerAdjustRequest::Id, kDefaultFlags, kDefaultPrivilege}, //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags - {CancelPowerAdjustRequest::Id, kDefaultFlags, kDefaultPrivilege} //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + { PowerAdjustRequest::Id, kDefaultFlags, + kDefaultPrivilege }, // TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + { CancelPowerAdjustRequest::Id, kDefaultFlags, + kDefaultPrivilege } // TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags })); } if (HasFeature(Feature::kStartTimeAdjustment)) { - ReturnErrorOnFailure(builder.Append({StartTimeAdjustRequest::Id, kDefaultFlags, kDefaultPrivilege})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + ReturnErrorOnFailure(builder.Append({ StartTimeAdjustRequest::Id, kDefaultFlags, + kDefaultPrivilege })); // TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags } if (HasFeature(Feature::kPausable)) { - ReturnErrorOnFailure(builder.AppendElements({ - {PauseRequest::Id, kDefaultFlags, kDefaultPrivilege}, - {ResumeRequest::Id, kDefaultFlags, kDefaultPrivilege} - })); + ReturnErrorOnFailure(builder.AppendElements( + { { PauseRequest::Id, kDefaultFlags, kDefaultPrivilege }, { ResumeRequest::Id, kDefaultFlags, kDefaultPrivilege } })); } if (HasFeature(Feature::kForecastAdjustment)) { - ReturnErrorOnFailure(builder.Append({ModifyForecastRequest::Id, kDefaultFlags, kDefaultPrivilege})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + ReturnErrorOnFailure(builder.Append({ ModifyForecastRequest::Id, kDefaultFlags, + kDefaultPrivilege })); // TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags } if (HasFeature(Feature::kConstraintBasedAdjustment)) { - ReturnErrorOnFailure(builder.Append({ModifyForecastRequest::Id, kDefaultFlags, kDefaultPrivilege})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + ReturnErrorOnFailure(builder.Append({ ModifyForecastRequest::Id, kDefaultFlags, + kDefaultPrivilege })); // TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags } if (HasFeature(Feature::kStartTimeAdjustment) || HasFeature(Feature::kForecastAdjustment) || HasFeature(Feature::kConstraintBasedAdjustment)) { - ReturnErrorOnFailure(builder.Append({CancelRequest::Id, kDefaultFlags, kDefaultPrivilege})); //TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + ReturnErrorOnFailure(builder.Append({ CancelRequest::Id, kDefaultFlags, + kDefaultPrivilege })); // TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags } return CHIP_NO_ERROR; diff --git a/src/app/clusters/device-energy-management-server/device-energy-management-server.h b/src/app/clusters/device-energy-management-server/device-energy-management-server.h index beb65d319ebbaa..069f1c1b1965e4 100644 --- a/src/app/clusters/device-energy-management-server/device-energy-management-server.h +++ b/src/app/clusters/device-energy-management-server/device-energy-management-server.h @@ -235,7 +235,8 @@ class Instance : public AttributeAccessInterface, public CommandHandlerInterface // CommandHandlerInterface void InvokeCommand(HandlerContext & handlerContext) override; - CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) override; + CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, + DataModel::ListBuilder & builder) override; Protocols::InteractionModel::Status CheckOptOutAllowsRequest(AdjustmentCauseEnum adjustmentCause); void HandlePowerAdjustRequest(HandlerContext & ctx, const Commands::PowerAdjustRequest::DecodableType & commandData); diff --git a/src/app/clusters/energy-evse-server/energy-evse-server.cpp b/src/app/clusters/energy-evse-server/energy-evse-server.cpp index 605b5e50c8aa9f..16d99ce45be5f8 100644 --- a/src/app/clusters/energy-evse-server/energy-evse-server.cpp +++ b/src/app/clusters/energy-evse-server/energy-evse-server.cpp @@ -182,35 +182,36 @@ CHIP_ERROR Instance::Write(const ConcreteDataAttributePath & aPath, AttributeVal } // CommandHandlerInterface -CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) +CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, + DataModel::ListBuilder & builder) { using namespace Commands; - using QF = DataModel::CommandQualityFlags; - static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); + using QF = DataModel::CommandQualityFlags; + static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; ReturnErrorOnFailure(builder.AppendElements({ - {Disable::Id, kDefaultFlags, kDefaultPrivilege}, - {EnableCharging::Id, kDefaultFlags, kDefaultPrivilege}, + { Disable::Id, kDefaultFlags, kDefaultPrivilege }, + { EnableCharging::Id, kDefaultFlags, kDefaultPrivilege }, })); if (HasFeature(Feature::kV2x)) { - ReturnErrorOnFailure(builder.Append({EnableDischarging::Id, kDefaultFlags, kDefaultPrivilege}) ); + ReturnErrorOnFailure(builder.Append({ EnableDischarging::Id, kDefaultFlags, kDefaultPrivilege })); } if (HasFeature(Feature::kChargingPreferences)) { ReturnErrorOnFailure(builder.AppendElements({ - {SetTargets::Id, kDefaultFlags, kDefaultPrivilege}, - {GetTargets::Id, kDefaultFlags, kDefaultPrivilege}, - {ClearTargets::Id, kDefaultFlags, kDefaultPrivilege}, + { SetTargets::Id, kDefaultFlags, kDefaultPrivilege }, + { GetTargets::Id, kDefaultFlags, kDefaultPrivilege }, + { ClearTargets::Id, kDefaultFlags, kDefaultPrivilege }, })); } if (SupportsOptCmd(OptionalCommands::kSupportsStartDiagnostics)) { - ReturnErrorOnFailure(builder.Append({StartDiagnostics::Id, kDefaultFlags, kDefaultPrivilege})); + ReturnErrorOnFailure(builder.Append({ StartDiagnostics::Id, kDefaultFlags, kDefaultPrivilege })); } return CHIP_NO_ERROR; } diff --git a/src/app/clusters/energy-evse-server/energy-evse-server.h b/src/app/clusters/energy-evse-server/energy-evse-server.h index e59d314d1f52e3..6031eb8ac76a5a 100644 --- a/src/app/clusters/energy-evse-server/energy-evse-server.h +++ b/src/app/clusters/energy-evse-server/energy-evse-server.h @@ -200,7 +200,8 @@ class Instance : public AttributeAccessInterface, public CommandHandlerInterface // CommandHandlerInterface void InvokeCommand(HandlerContext & handlerContext) override; - CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) override; + CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, + DataModel::ListBuilder & builder) override; void HandleDisable(HandlerContext & ctx, const Commands::Disable::DecodableType & commandData); void HandleEnableCharging(HandlerContext & ctx, const Commands::EnableCharging::DecodableType & commandData); diff --git a/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp b/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp index 99a7d44d7fbc7e..5df8f7c38fab9b 100644 --- a/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp +++ b/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp @@ -16,7 +16,6 @@ * */ -#include #include #include #include @@ -25,6 +24,7 @@ #include #include #include +#include #include #include diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index 0ffdf757783524..24c08b84a91917 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1360,32 +1360,33 @@ void Instance::OnFailSafeTimerExpired() } } -CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) +CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, + DataModel::ListBuilder & builder) { using namespace Clusters::NetworkCommissioning::Commands; - using QF = DataModel::CommandQualityFlags; - static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); + using QF = DataModel::CommandQualityFlags; + static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; - bool hasNet = mFeatureFlags.Has(Feature::kThreadNetworkInterface); + bool hasNet = mFeatureFlags.Has(Feature::kThreadNetworkInterface); bool hasWifi = mFeatureFlags.Has(Feature::kWiFiNetworkInterface); bool hasCred = mFeatureFlags.Has(Feature::kPerDeviceCredentials); - auto netId = hasNet? AddOrUpdateThreadNetwork::Id : AddOrUpdateWiFiNetwork::Id; - - static const DataModel::AcceptedCommandEntry commands [6] = { - {ScanNetworks::Id, kDefaultFlags, kDefaultPrivilege}, - {netId, kDefaultFlags, kDefaultPrivilege}, - {RemoveNetwork::Id, kDefaultFlags, kDefaultPrivilege}, - {ConnectNetwork::Id, kDefaultFlags, kDefaultPrivilege}, - {ReorderNetwork::Id, kDefaultFlags, kDefaultPrivilege}, - {QueryIdentity::Id, kDefaultFlags, kDefaultPrivilege} + auto netId = hasNet ? AddOrUpdateThreadNetwork::Id : AddOrUpdateWiFiNetwork::Id; + + static const DataModel::AcceptedCommandEntry commands[6] = { + { ScanNetworks::Id, kDefaultFlags, kDefaultPrivilege }, { netId, kDefaultFlags, kDefaultPrivilege }, + { RemoveNetwork::Id, kDefaultFlags, kDefaultPrivilege }, { ConnectNetwork::Id, kDefaultFlags, kDefaultPrivilege }, + { ReorderNetwork::Id, kDefaultFlags, kDefaultPrivilege }, { QueryIdentity::Id, kDefaultFlags, kDefaultPrivilege } }; - if(hasNet | hasWifi) { - //Avoid extra memory allocation - return builder.ReferenceExisting({commands, size_t{5} + (hasCred? 1 : 0)}); - } else if(hasCred) { - return builder.ReferenceExisting({commands + 5, size_t{1}}); + if (hasNet | hasWifi) + { + // Avoid extra memory allocation + return builder.ReferenceExisting({ commands, size_t{ 5 } + (hasCred ? 1 : 0) }); + } + else if (hasCred) + { + return builder.ReferenceExisting({ commands + 5, size_t{ 1 } }); } return CHIP_NO_ERROR; @@ -1397,7 +1398,8 @@ CHIP_ERROR Instance::EnumerateGeneratedCommands(const ConcreteClusterPath & clus if (mFeatureFlags.HasAny(Feature::kWiFiNetworkInterface, Feature::kThreadNetworkInterface)) { - ReturnErrorOnFailure(builder.AppendElements({ ScanNetworksResponse::Id, NetworkConfigResponse::Id, ConnectNetworkResponse::Id })); + ReturnErrorOnFailure( + builder.AppendElements({ ScanNetworksResponse::Id, NetworkConfigResponse::Id, ConnectNetworkResponse::Id })); } if (mFeatureFlags.Has(Feature::kPerDeviceCredentials)) diff --git a/src/app/clusters/network-commissioning/network-commissioning.h b/src/app/clusters/network-commissioning/network-commissioning.h index 21e387e7029b00..a3c82bb79105f8 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.h +++ b/src/app/clusters/network-commissioning/network-commissioning.h @@ -59,8 +59,10 @@ class Instance : public CommandHandlerInterface, // CommandHandlerInterface void InvokeCommand(HandlerContext & ctx) override; - CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) override; - CHIP_ERROR EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) override; + CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, + DataModel::ListBuilder & builder) override; + CHIP_ERROR EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, + DataModel::ListBuilder & builder) override; // AttributeAccessInterface CHIP_ERROR Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) override; diff --git a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp index b438b4bb318dc7..900a2e0aa18795 100644 --- a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp +++ b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp @@ -187,17 +187,18 @@ void Instance::InvokeCommand(HandlerContext & handlerContext) } // List the commands supported by this instance. -CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) +CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, + DataModel::ListBuilder & builder) { using namespace ResourceMonitoring::Commands; - using QF = DataModel::CommandQualityFlags; - static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); + using QF = DataModel::CommandQualityFlags; + static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; ChipLogDetail(Zcl, "resourcemonitoring: EnumerateAcceptedCommands"); if (mResetConditionCommandSupported) { - return builder.Append({ResetCondition::Id, kDefaultFlags, kDefaultPrivilege}); + return builder.Append({ ResetCondition::Id, kDefaultFlags, kDefaultPrivilege }); } return CHIP_NO_ERROR; diff --git a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.h b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.h index 76b32cc74a1b9e..a43fa4262d2329 100644 --- a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.h +++ b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.h @@ -132,7 +132,8 @@ class Instance : public CommandHandlerInterface, public AttributeAccessInterface // CommandHandlerInterface void InvokeCommand(HandlerContext & ctx) override; - CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) override; + CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, + DataModel::ListBuilder & builder) override; // AttributeAccessInterface CHIP_ERROR Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) override; diff --git a/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp b/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp index c269c5f0cbac30..7252f5771ad8f8 100644 --- a/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp +++ b/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp @@ -62,7 +62,8 @@ class SoftwareDiagnosticsCommandHandler : public CommandHandlerInterface void InvokeCommand(HandlerContext & handlerContext) override; - CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) override; + CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, + DataModel::ListBuilder & builder) override; }; SoftwareDiagosticsAttrAccess gAttrAccess; @@ -168,11 +169,13 @@ void SoftwareDiagnosticsCommandHandler::InvokeCommand(HandlerContext & handlerCo handlerContext.mCommandHandler.AddStatus(handlerContext.mRequestPath, status); } -CHIP_ERROR SoftwareDiagnosticsCommandHandler::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) +CHIP_ERROR +SoftwareDiagnosticsCommandHandler::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, + DataModel::ListBuilder & builder) { using namespace Commands; - using QF = DataModel::CommandQualityFlags; - static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); + using QF = DataModel::CommandQualityFlags; + static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; if (!DeviceLayer::GetDiagnosticDataProvider().SupportsWatermarks()) { @@ -180,7 +183,7 @@ CHIP_ERROR SoftwareDiagnosticsCommandHandler::EnumerateAcceptedCommands(const Co return CHIP_NO_ERROR; } - return builder.Append({ResetWatermarks::Id, kDefaultFlags, kDefaultPrivilege}); + return builder.Append({ ResetWatermarks::Id, kDefaultFlags, kDefaultPrivilege }); } } // anonymous namespace diff --git a/src/app/data-model-provider/MetadataLookup.h b/src/app/data-model-provider/MetadataLookup.h index 77f892a1becc17..f281b88c930a23 100644 --- a/src/app/data-model-provider/MetadataLookup.h +++ b/src/app/data-model-provider/MetadataLookup.h @@ -19,9 +19,9 @@ #include #include -#include #include #include +#include #include #include diff --git a/src/app/data-model-provider/ProviderMetadataTree.h b/src/app/data-model-provider/ProviderMetadataTree.h index 8151e3758e6e5c..47173184de391f 100644 --- a/src/app/data-model-provider/ProviderMetadataTree.h +++ b/src/app/data-model-provider/ProviderMetadataTree.h @@ -21,9 +21,9 @@ #include #include #include -#include #include #include +#include #include namespace chip { diff --git a/src/app/reporting/Engine.cpp b/src/app/reporting/Engine.cpp index 3967f3511ee33b..880e4c3bcdf01e 100644 --- a/src/app/reporting/Engine.cpp +++ b/src/app/reporting/Engine.cpp @@ -172,7 +172,9 @@ DataModel::ActionReturnStatus RetrieveClusterData(DataModel::Provider * dataMode reportBuilder.Checkpoint(checkpoint); DataModel::ActionReturnStatus status(CHIP_NO_ERROR); - AttributeValueEncoder attributeValueEncoder ={reportBuilder, subjectDescriptor, path, version, isFabricFiltered, encoderState}; + AttributeValueEncoder attributeValueEncoder = { + reportBuilder, subjectDescriptor, path, version, isFabricFiltered, encoderState + }; // TODO: we explicitly DO NOT validate that path is a valid cluster path (even more, above serverClusterFinder // explicitly ignores that case). This means that global attribute reads as well as ReadAttribute diff --git a/src/controller/tests/TestServerCommandDispatch.cpp b/src/controller/tests/TestServerCommandDispatch.cpp index 3d220ccaa0379d..9ed89c4a8620c0 100644 --- a/src/controller/tests/TestServerCommandDispatch.cpp +++ b/src/controller/tests/TestServerCommandDispatch.cpp @@ -69,7 +69,8 @@ class TestClusterCommandHandler : public chip::app::CommandHandlerInterface private: void InvokeCommand(chip::app::CommandHandlerInterface::HandlerContext & handlerContext) final; - CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) final; + CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, + DataModel::ListBuilder & builder) final; bool mOverrideAcceptedCommands = false; bool mClaimNoCommands = false; @@ -104,11 +105,12 @@ void TestClusterCommandHandler::InvokeCommand(chip::app::CommandHandlerInterface }); } -CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) +CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, + DataModel::ListBuilder & builder) { using namespace Clusters::UnitTesting::Commands; - using QF = DataModel::CommandQualityFlags; - static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); + using QF = DataModel::CommandQualityFlags; + static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; if (!mOverrideAcceptedCommands) @@ -122,7 +124,7 @@ CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteCl } // We just have one command id. - ReturnErrorOnFailure(builder.Append({TestSimpleArgumentRequest::Id, kDefaultFlags, kDefaultPrivilege})); + ReturnErrorOnFailure(builder.Append({ TestSimpleArgumentRequest::Id, kDefaultFlags, kDefaultPrivilege })); return CHIP_NO_ERROR; } diff --git a/src/data-model-providers/codegen/CodegenDataModelProvider.cpp b/src/data-model-providers/codegen/CodegenDataModelProvider.cpp index 578a8809b31251..6e7b3d61f351ef 100644 --- a/src/data-model-providers/codegen/CodegenDataModelProvider.cpp +++ b/src/data-model-providers/codegen/CodegenDataModelProvider.cpp @@ -25,9 +25,9 @@ #include #include #include -#include #include #include +#include #include #include #include diff --git a/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp b/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp index d6bd82dfe32d8c..83409a16399846 100644 --- a/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp +++ b/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp @@ -33,7 +33,6 @@ #include #include #include -#include #include #include #include @@ -44,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -282,15 +282,16 @@ class CustomListCommandHandler : public CommandHandlerInterface void SetHandleCommands(bool handle) { mHandleCommand = handle; } - CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder& builder) override + CHIP_ERROR EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, + DataModel::ListBuilder & builder) override { - return builder.ReferenceExisting({mAccepted.data(), mAccepted.size()}); + return builder.ReferenceExisting({ mAccepted.data(), mAccepted.size() }); } CHIP_ERROR EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, DataModel::ListBuilder & builder) override { VerifyOrReturnError(mOverrideGenerated, CHIP_ERROR_NOT_IMPLEMENTED); - return builder.AppendElements({mGenerated.data(), mGenerated.size()}); + return builder.AppendElements({ mGenerated.data(), mGenerated.size() }); } void SetOverrideAccepted(bool o) { mOverrideAccepted = o; } @@ -1226,8 +1227,8 @@ TEST_F(TestCodegenModelViaMocks, AcceptedGeneratedCommandsOnInvalidEndpoints) TEST_F(TestCodegenModelViaMocks, CommandHandlerInterfaceCommandHandling) { - using QF = DataModel::CommandQualityFlags; - static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); + using QF = DataModel::CommandQualityFlags; + static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; UseMockNodeConfig config(gTestNodeConfig); @@ -1256,8 +1257,8 @@ TEST_F(TestCodegenModelViaMocks, CommandHandlerInterfaceCommandHandling) ASSERT_TRUE(acceptedBuilder.IsEmpty()); // set some overrides - handler.AcceptedVec().push_back({1234, kDefaultFlags, kDefaultPrivilege}); - handler.AcceptedVec().push_back({999, kDefaultFlags, kDefaultPrivilege}); + handler.AcceptedVec().push_back({ 1234, kDefaultFlags, kDefaultPrivilege }); + handler.AcceptedVec().push_back({ 999, kDefaultFlags, kDefaultPrivilege }); handler.GeneratedVec().push_back(33); From ff54464770fc3864c334fe718060fa97d9c02a5b Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Mon, 24 Feb 2025 18:48:55 +0000 Subject: [PATCH 09/39] Updated attributes --- .../energy-evse-server/energy-evse-server.cpp | 15 +++++------ .../network-commissioning.cpp | 27 ++++++++++++------- .../resource-monitoring-server.cpp | 7 ++--- src/app/reporting/Engine.cpp | 4 +-- .../tests/TestServerCommandDispatch.cpp | 5 +--- .../tests/TestCodegenModelViaMocks.cpp | 9 ++----- 6 files changed, 31 insertions(+), 36 deletions(-) diff --git a/src/app/clusters/energy-evse-server/energy-evse-server.cpp b/src/app/clusters/energy-evse-server/energy-evse-server.cpp index 16d99ce45be5f8..16ec8c860576ce 100644 --- a/src/app/clusters/energy-evse-server/energy-evse-server.cpp +++ b/src/app/clusters/energy-evse-server/energy-evse-server.cpp @@ -187,31 +187,30 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust { using namespace Commands; using QF = DataModel::CommandQualityFlags; - static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; ReturnErrorOnFailure(builder.AppendElements({ - { Disable::Id, kDefaultFlags, kDefaultPrivilege }, - { EnableCharging::Id, kDefaultFlags, kDefaultPrivilege }, + { Disable::Id, QF::kTimed, kDefaultPrivilege }, // + { EnableCharging::Id, QF::kTimed, kDefaultPrivilege }, // })); if (HasFeature(Feature::kV2x)) { - ReturnErrorOnFailure(builder.Append({ EnableDischarging::Id, kDefaultFlags, kDefaultPrivilege })); + ReturnErrorOnFailure(builder.Append({ EnableDischarging::Id, QF::kTimed, kDefaultPrivilege })); } if (HasFeature(Feature::kChargingPreferences)) { ReturnErrorOnFailure(builder.AppendElements({ - { SetTargets::Id, kDefaultFlags, kDefaultPrivilege }, - { GetTargets::Id, kDefaultFlags, kDefaultPrivilege }, - { ClearTargets::Id, kDefaultFlags, kDefaultPrivilege }, + { SetTargets::Id, QF::kTimed, kDefaultPrivilege }, // + { GetTargets::Id, QF::kTimed, kDefaultPrivilege }, // + { ClearTargets::Id, QF::kTimed, kDefaultPrivilege }, // })); } if (SupportsOptCmd(OptionalCommands::kSupportsStartDiagnostics)) { - ReturnErrorOnFailure(builder.Append({ StartDiagnostics::Id, kDefaultFlags, kDefaultPrivilege })); + ReturnErrorOnFailure(builder.Append({ StartDiagnostics::Id, QF::kTimed, kDefaultPrivilege })); } return CHIP_NO_ERROR; } diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index 24c08b84a91917..a55b7b2a78854b 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1365,28 +1365,36 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust { using namespace Clusters::NetworkCommissioning::Commands; using QF = DataModel::CommandQualityFlags; - static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); + static const auto kDefaultFlags = chip::BitFlags(); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; + bool hasNet = mFeatureFlags.Has(Feature::kThreadNetworkInterface); bool hasWifi = mFeatureFlags.Has(Feature::kWiFiNetworkInterface); bool hasCred = mFeatureFlags.Has(Feature::kPerDeviceCredentials); auto netId = hasNet ? AddOrUpdateThreadNetwork::Id : AddOrUpdateWiFiNetwork::Id; - static const DataModel::AcceptedCommandEntry commands[6] = { - { ScanNetworks::Id, kDefaultFlags, kDefaultPrivilege }, { netId, kDefaultFlags, kDefaultPrivilege }, - { RemoveNetwork::Id, kDefaultFlags, kDefaultPrivilege }, { ConnectNetwork::Id, kDefaultFlags, kDefaultPrivilege }, - { ReorderNetwork::Id, kDefaultFlags, kDefaultPrivilege }, { QueryIdentity::Id, kDefaultFlags, kDefaultPrivilege } + static constexpr kNetworkCommands = 5; // Count of Network Commands + static constexpr kCredentialsCommands = 1; // Count of Credential Commands + static const DataModel::AcceptedCommandEntry commands[] = { + { ScanNetworks::Id, kDefaultFlags, kDefaultPrivilege }, // + { netId, kDefaultFlags, kDefaultPrivilege }, // + { RemoveNetwork::Id, kDefaultFlags, kDefaultPrivilege }, // + { ConnectNetwork::Id, kDefaultFlags, kDefaultPrivilege }, // + { ReorderNetwork::Id, kDefaultFlags, kDefaultPrivilege }, // + { QueryIdentity::Id, kDefaultFlags, kDefaultPrivilege } }; if (hasNet | hasWifi) { // Avoid extra memory allocation - return builder.ReferenceExisting({ commands, size_t{ 5 } + (hasCred ? 1 : 0) }); + return builder.ReferenceExisting( + { commands, kNetworkCommands + (hasCred ? kCredentialsCommands : 0) } + ); } else if (hasCred) - { - return builder.ReferenceExisting({ commands + 5, size_t{ 1 } }); + { // Skip the network commands send the rest + return builder.ReferenceExisting({ commands + kNetworkCommands, kCredentialsCommands }); } return CHIP_NO_ERROR; @@ -1399,7 +1407,8 @@ CHIP_ERROR Instance::EnumerateGeneratedCommands(const ConcreteClusterPath & clus if (mFeatureFlags.HasAny(Feature::kWiFiNetworkInterface, Feature::kThreadNetworkInterface)) { ReturnErrorOnFailure( - builder.AppendElements({ ScanNetworksResponse::Id, NetworkConfigResponse::Id, ConnectNetworkResponse::Id })); + builder.AppendElements({ ScanNetworksResponse::Id, NetworkConfigResponse::Id, ConnectNetworkResponse::Id }) + ); } if (mFeatureFlags.Has(Feature::kPerDeviceCredentials)) diff --git a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp index 900a2e0aa18795..4f6f8491bda5b9 100644 --- a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp +++ b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp @@ -191,14 +191,11 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust DataModel::ListBuilder & builder) { using namespace ResourceMonitoring::Commands; - using QF = DataModel::CommandQualityFlags; - static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); - static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; - + using QF = DataModel::CommandQualityFlags; ChipLogDetail(Zcl, "resourcemonitoring: EnumerateAcceptedCommands"); if (mResetConditionCommandSupported) { - return builder.Append({ ResetCondition::Id, kDefaultFlags, kDefaultPrivilege }); + return builder.Append({ ResetCondition::Id, chip::BitFlags()}); } return CHIP_NO_ERROR; diff --git a/src/app/reporting/Engine.cpp b/src/app/reporting/Engine.cpp index 880e4c3bcdf01e..fbcd9d302cf1ec 100644 --- a/src/app/reporting/Engine.cpp +++ b/src/app/reporting/Engine.cpp @@ -172,9 +172,7 @@ DataModel::ActionReturnStatus RetrieveClusterData(DataModel::Provider * dataMode reportBuilder.Checkpoint(checkpoint); DataModel::ActionReturnStatus status(CHIP_NO_ERROR); - AttributeValueEncoder attributeValueEncoder = { - reportBuilder, subjectDescriptor, path, version, isFabricFiltered, encoderState - }; + AttributeValueEncoder attributeValueEncoder(reportBuilder, subjectDescriptor, path, version, isFabricFiltered, encoderState); // TODO: we explicitly DO NOT validate that path is a valid cluster path (even more, above serverClusterFinder // explicitly ignores that case). This means that global attribute reads as well as ReadAttribute diff --git a/src/controller/tests/TestServerCommandDispatch.cpp b/src/controller/tests/TestServerCommandDispatch.cpp index 9ed89c4a8620c0..f52a0453508897 100644 --- a/src/controller/tests/TestServerCommandDispatch.cpp +++ b/src/controller/tests/TestServerCommandDispatch.cpp @@ -109,9 +109,6 @@ CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteCl DataModel::ListBuilder & builder) { using namespace Clusters::UnitTesting::Commands; - using QF = DataModel::CommandQualityFlags; - static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); - static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; if (!mOverrideAcceptedCommands) { @@ -124,7 +121,7 @@ CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteCl } // We just have one command id. - ReturnErrorOnFailure(builder.Append({ TestSimpleArgumentRequest::Id, kDefaultFlags, kDefaultPrivilege })); + ReturnErrorOnFailure(builder.Append({ TestSimpleArgumentRequest::Id, {}})); return CHIP_NO_ERROR; } diff --git a/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp b/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp index 83409a16399846..f27dd801ca9b18 100644 --- a/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp +++ b/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp @@ -306,7 +306,6 @@ class CustomListCommandHandler : public CommandHandlerInterface bool mHandleCommand = false; std::vector mAccepted; - std::vector mGenerated; }; @@ -1227,10 +1226,6 @@ TEST_F(TestCodegenModelViaMocks, AcceptedGeneratedCommandsOnInvalidEndpoints) TEST_F(TestCodegenModelViaMocks, CommandHandlerInterfaceCommandHandling) { - using QF = DataModel::CommandQualityFlags; - static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); - static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; - UseMockNodeConfig config(gTestNodeConfig); CodegenDataModelProviderWithContext model; @@ -1257,8 +1252,8 @@ TEST_F(TestCodegenModelViaMocks, CommandHandlerInterfaceCommandHandling) ASSERT_TRUE(acceptedBuilder.IsEmpty()); // set some overrides - handler.AcceptedVec().push_back({ 1234, kDefaultFlags, kDefaultPrivilege }); - handler.AcceptedVec().push_back({ 999, kDefaultFlags, kDefaultPrivilege }); + handler.AcceptedVec().push_back({ 1234, {}}); + handler.AcceptedVec().push_back({ 999, {}}); handler.GeneratedVec().push_back(33); From 6511c4281ac8fdced039c61bf9f46ed2e364671a Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Mon, 24 Feb 2025 18:50:34 +0000 Subject: [PATCH 10/39] Restyled by whitespace --- .../clusters/network-commissioning/network-commissioning.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index a55b7b2a78854b..e35dd725cc5a0a 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1377,7 +1377,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust static constexpr kNetworkCommands = 5; // Count of Network Commands static constexpr kCredentialsCommands = 1; // Count of Credential Commands static const DataModel::AcceptedCommandEntry commands[] = { - { ScanNetworks::Id, kDefaultFlags, kDefaultPrivilege }, // + { ScanNetworks::Id, kDefaultFlags, kDefaultPrivilege }, // { netId, kDefaultFlags, kDefaultPrivilege }, // { RemoveNetwork::Id, kDefaultFlags, kDefaultPrivilege }, // { ConnectNetwork::Id, kDefaultFlags, kDefaultPrivilege }, // From 77a4f9fbeb71eb1f4b3c43c798d4dace31bf7ac6 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Mon, 24 Feb 2025 18:50:39 +0000 Subject: [PATCH 11/39] Restyled by clang-format --- .../energy-evse-server/energy-evse-server.cpp | 8 +++--- .../network-commissioning.cpp | 28 ++++++++----------- .../resource-monitoring-server.cpp | 2 +- .../tests/TestServerCommandDispatch.cpp | 2 +- .../tests/TestCodegenModelViaMocks.cpp | 4 +-- 5 files changed, 19 insertions(+), 25 deletions(-) diff --git a/src/app/clusters/energy-evse-server/energy-evse-server.cpp b/src/app/clusters/energy-evse-server/energy-evse-server.cpp index 16ec8c860576ce..83a9d86c566f90 100644 --- a/src/app/clusters/energy-evse-server/energy-evse-server.cpp +++ b/src/app/clusters/energy-evse-server/energy-evse-server.cpp @@ -190,8 +190,8 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; ReturnErrorOnFailure(builder.AppendElements({ - { Disable::Id, QF::kTimed, kDefaultPrivilege }, // - { EnableCharging::Id, QF::kTimed, kDefaultPrivilege }, // + { Disable::Id, QF::kTimed, kDefaultPrivilege }, // + { EnableCharging::Id, QF::kTimed, kDefaultPrivilege }, // })); if (HasFeature(Feature::kV2x)) @@ -202,8 +202,8 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust if (HasFeature(Feature::kChargingPreferences)) { ReturnErrorOnFailure(builder.AppendElements({ - { SetTargets::Id, QF::kTimed, kDefaultPrivilege }, // - { GetTargets::Id, QF::kTimed, kDefaultPrivilege }, // + { SetTargets::Id, QF::kTimed, kDefaultPrivilege }, // + { GetTargets::Id, QF::kTimed, kDefaultPrivilege }, // { ClearTargets::Id, QF::kTimed, kDefaultPrivilege }, // })); } diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index e35dd725cc5a0a..f4221a0c6ed00e 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1368,32 +1368,27 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust static const auto kDefaultFlags = chip::BitFlags(); static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; - bool hasNet = mFeatureFlags.Has(Feature::kThreadNetworkInterface); bool hasWifi = mFeatureFlags.Has(Feature::kWiFiNetworkInterface); bool hasCred = mFeatureFlags.Has(Feature::kPerDeviceCredentials); auto netId = hasNet ? AddOrUpdateThreadNetwork::Id : AddOrUpdateWiFiNetwork::Id; - static constexpr kNetworkCommands = 5; // Count of Network Commands - static constexpr kCredentialsCommands = 1; // Count of Credential Commands - static const DataModel::AcceptedCommandEntry commands[] = { - { ScanNetworks::Id, kDefaultFlags, kDefaultPrivilege }, // - { netId, kDefaultFlags, kDefaultPrivilege }, // - { RemoveNetwork::Id, kDefaultFlags, kDefaultPrivilege }, // - { ConnectNetwork::Id, kDefaultFlags, kDefaultPrivilege }, // - { ReorderNetwork::Id, kDefaultFlags, kDefaultPrivilege }, // - { QueryIdentity::Id, kDefaultFlags, kDefaultPrivilege } - }; + static constexpr kNetworkCommands = 5; // Count of Network Commands + static constexpr kCredentialsCommands = 1; // Count of Credential Commands + static const DataModel::AcceptedCommandEntry commands[] = { { ScanNetworks::Id, kDefaultFlags, kDefaultPrivilege }, // + { netId, kDefaultFlags, kDefaultPrivilege }, // + { RemoveNetwork::Id, kDefaultFlags, kDefaultPrivilege }, // + { ConnectNetwork::Id, kDefaultFlags, kDefaultPrivilege }, // + { ReorderNetwork::Id, kDefaultFlags, kDefaultPrivilege }, // + { QueryIdentity::Id, kDefaultFlags, kDefaultPrivilege } }; if (hasNet | hasWifi) { // Avoid extra memory allocation - return builder.ReferenceExisting( - { commands, kNetworkCommands + (hasCred ? kCredentialsCommands : 0) } - ); + return builder.ReferenceExisting({ commands, kNetworkCommands + (hasCred ? kCredentialsCommands : 0) }); } else if (hasCred) - { // Skip the network commands send the rest + { // Skip the network commands send the rest return builder.ReferenceExisting({ commands + kNetworkCommands, kCredentialsCommands }); } @@ -1407,8 +1402,7 @@ CHIP_ERROR Instance::EnumerateGeneratedCommands(const ConcreteClusterPath & clus if (mFeatureFlags.HasAny(Feature::kWiFiNetworkInterface, Feature::kThreadNetworkInterface)) { ReturnErrorOnFailure( - builder.AppendElements({ ScanNetworksResponse::Id, NetworkConfigResponse::Id, ConnectNetworkResponse::Id }) - ); + builder.AppendElements({ ScanNetworksResponse::Id, NetworkConfigResponse::Id, ConnectNetworkResponse::Id })); } if (mFeatureFlags.Has(Feature::kPerDeviceCredentials)) diff --git a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp index 4f6f8491bda5b9..f33a748e9fe93e 100644 --- a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp +++ b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp @@ -195,7 +195,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust ChipLogDetail(Zcl, "resourcemonitoring: EnumerateAcceptedCommands"); if (mResetConditionCommandSupported) { - return builder.Append({ ResetCondition::Id, chip::BitFlags()}); + return builder.Append({ ResetCondition::Id, chip::BitFlags() }); } return CHIP_NO_ERROR; diff --git a/src/controller/tests/TestServerCommandDispatch.cpp b/src/controller/tests/TestServerCommandDispatch.cpp index f52a0453508897..19ade1b3a4dbfd 100644 --- a/src/controller/tests/TestServerCommandDispatch.cpp +++ b/src/controller/tests/TestServerCommandDispatch.cpp @@ -121,7 +121,7 @@ CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteCl } // We just have one command id. - ReturnErrorOnFailure(builder.Append({ TestSimpleArgumentRequest::Id, {}})); + ReturnErrorOnFailure(builder.Append({ TestSimpleArgumentRequest::Id, {} })); return CHIP_NO_ERROR; } diff --git a/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp b/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp index f27dd801ca9b18..a89697475c08ff 100644 --- a/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp +++ b/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp @@ -1252,8 +1252,8 @@ TEST_F(TestCodegenModelViaMocks, CommandHandlerInterfaceCommandHandling) ASSERT_TRUE(acceptedBuilder.IsEmpty()); // set some overrides - handler.AcceptedVec().push_back({ 1234, {}}); - handler.AcceptedVec().push_back({ 999, {}}); + handler.AcceptedVec().push_back({ 1234, {} }); + handler.AcceptedVec().push_back({ 999, {} }); handler.GeneratedVec().push_back(33); From 7cb4b5eee2e84b693af67690b3bb6a9d81530b4e Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Mon, 24 Feb 2025 20:31:25 +0000 Subject: [PATCH 12/39] Clear up Access Permissions --- .../device-energy-management-server.cpp | 29 ++++++++----------- .../network-commissioning.cpp | 22 +++++++------- .../resource-monitoring-server.cpp | 3 +- .../software-diagnostics-server.cpp | 6 ++-- 4 files changed, 26 insertions(+), 34 deletions(-) diff --git a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp index 4a33290bc2e5bc..d69c098d84d630 100644 --- a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp +++ b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp @@ -108,49 +108,44 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust DataModel::ListBuilder & builder) { using namespace Commands; - using QF = DataModel::CommandQualityFlags; - static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); - static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; if (HasFeature(Feature::kPowerAdjustment)) { ReturnErrorOnFailure(builder.AppendElements({ - { PowerAdjustRequest::Id, kDefaultFlags, - kDefaultPrivilege }, // TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags - { CancelPowerAdjustRequest::Id, kDefaultFlags, - kDefaultPrivilege } // TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + { PowerAdjustRequest::Id, {} }, + { CancelPowerAdjustRequest::Id, {} } })); } if (HasFeature(Feature::kStartTimeAdjustment)) { - ReturnErrorOnFailure(builder.Append({ StartTimeAdjustRequest::Id, kDefaultFlags, - kDefaultPrivilege })); // TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + ReturnErrorOnFailure(builder.Append( + { StartTimeAdjustRequest::Id, {} } // + )); } if (HasFeature(Feature::kPausable)) { - ReturnErrorOnFailure(builder.AppendElements( - { { PauseRequest::Id, kDefaultFlags, kDefaultPrivilege }, { ResumeRequest::Id, kDefaultFlags, kDefaultPrivilege } })); + ReturnErrorOnFailure(builder.AppendElements({ + { PauseRequest::Id, {} }, // + { ResumeRequest::Id, {} } // + })); } if (HasFeature(Feature::kForecastAdjustment)) { - ReturnErrorOnFailure(builder.Append({ ModifyForecastRequest::Id, kDefaultFlags, - kDefaultPrivilege })); // TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + ReturnErrorOnFailure(builder.Append({ ModifyForecastRequest::Id, {} })); } if (HasFeature(Feature::kConstraintBasedAdjustment)) { - ReturnErrorOnFailure(builder.Append({ ModifyForecastRequest::Id, kDefaultFlags, - kDefaultPrivilege })); // TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + ReturnErrorOnFailure(builder.Append({ RequestConstraintBasedForecast::Id, {} })); } if (HasFeature(Feature::kStartTimeAdjustment) || HasFeature(Feature::kForecastAdjustment) || HasFeature(Feature::kConstraintBasedAdjustment)) { - ReturnErrorOnFailure(builder.Append({ CancelRequest::Id, kDefaultFlags, - kDefaultPrivilege })); // TODO:: WHAT IS THE NEEDED PRIVILEGE AND CommandQualityFlags + ReturnErrorOnFailure(builder.Append({ CancelRequest::Id, {} })); } return CHIP_NO_ERROR; diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index f4221a0c6ed00e..0f2101e9e514d3 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1364,23 +1364,23 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust DataModel::ListBuilder & builder) { using namespace Clusters::NetworkCommissioning::Commands; - using QF = DataModel::CommandQualityFlags; - static const auto kDefaultFlags = chip::BitFlags(); - static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; bool hasNet = mFeatureFlags.Has(Feature::kThreadNetworkInterface); bool hasWifi = mFeatureFlags.Has(Feature::kWiFiNetworkInterface); bool hasCred = mFeatureFlags.Has(Feature::kPerDeviceCredentials); auto netId = hasNet ? AddOrUpdateThreadNetwork::Id : AddOrUpdateWiFiNetwork::Id; - static constexpr kNetworkCommands = 5; // Count of Network Commands - static constexpr kCredentialsCommands = 1; // Count of Credential Commands - static const DataModel::AcceptedCommandEntry commands[] = { { ScanNetworks::Id, kDefaultFlags, kDefaultPrivilege }, // - { netId, kDefaultFlags, kDefaultPrivilege }, // - { RemoveNetwork::Id, kDefaultFlags, kDefaultPrivilege }, // - { ConnectNetwork::Id, kDefaultFlags, kDefaultPrivilege }, // - { ReorderNetwork::Id, kDefaultFlags, kDefaultPrivilege }, // - { QueryIdentity::Id, kDefaultFlags, kDefaultPrivilege } }; + static constexpr kNetworkCommands = 5; // Count of Network Commands + static constexpr kCredentialsCommands = 1; // Count of Credential Commands + + static const DataModel::AcceptedCommandEntry commands[] = { // A static array of the posible commands + { ScanNetworks::Id, {} }, // + { netId, {} }, // + { RemoveNetwork::Id, {} }, // + { ConnectNetwork::Id, {} }, // + { ReorderNetwork::Id, {} }, // + { QueryIdentity::Id, {} } // + }; if (hasNet | hasWifi) { diff --git a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp index f33a748e9fe93e..6b756d55ff1dcd 100644 --- a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp +++ b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp @@ -191,11 +191,10 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust DataModel::ListBuilder & builder) { using namespace ResourceMonitoring::Commands; - using QF = DataModel::CommandQualityFlags; ChipLogDetail(Zcl, "resourcemonitoring: EnumerateAcceptedCommands"); if (mResetConditionCommandSupported) { - return builder.Append({ ResetCondition::Id, chip::BitFlags() }); + return builder.Append({ ResetCondition::Id, {} }); } return CHIP_NO_ERROR; diff --git a/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp b/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp index 7252f5771ad8f8..8a3e22dc9bc6c5 100644 --- a/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp +++ b/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp @@ -174,16 +174,14 @@ SoftwareDiagnosticsCommandHandler::EnumerateAcceptedCommands(const ConcreteClust DataModel::ListBuilder & builder) { using namespace Commands; - using QF = DataModel::CommandQualityFlags; - static const auto kDefaultFlags = chip::BitFlags(QF::kTimed, QF::kLargeMessage, QF::kFabricScoped); - static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; + using Privilege = chip::Access::Privilege; if (!DeviceLayer::GetDiagnosticDataProvider().SupportsWatermarks()) { // No commmands. return CHIP_NO_ERROR; } - return builder.Append({ ResetWatermarks::Id, kDefaultFlags, kDefaultPrivilege }); + return builder.Append({ ResetWatermarks::Id, {}, Privilege::kOperate }); // From Matter Spec } } // anonymous namespace From dde4481cdd3c8f0fad86d6b0ce32dac10e0b32fb Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Mon, 24 Feb 2025 20:34:21 +0000 Subject: [PATCH 13/39] remove unnecesary file --- admin_storage.json | 30 ------------------------------ 1 file changed, 30 deletions(-) delete mode 100644 admin_storage.json diff --git a/admin_storage.json b/admin_storage.json deleted file mode 100644 index d6844e15ab6c0f..00000000000000 --- a/admin_storage.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "sdk-config": { - "g/lkgt": "FSYAgKi8LBg=", - "g/gcc": "aJuaDw==", - "g/gdc": "eVQ1Cw==", - "ExampleOpCredsCAKey1": "BNJGVNf+KuPMsKB1rJHyNZEKiXS/0lXyW0m7Als9bGvS7yhgFy5HlZ+Ukuju7DyicIXPC+NAVNdWttf+z0YrSKNpPaFJxR1qyW4+aqrqzIEw0UYHFzL5wed7AWRtDb2PWw==", - "ExampleOpCredsICAKey1": "BJW39nhSeUPdfSELvjAuf7wNkny6xkzxC1eeb0p/FmcrVv7q0x+z5J7p61o1OgAW4mbyB2UPofsRjDWwxGVIUfwpnurkR+oLOyjiZD0cr+gPwpSO46drERQj8HTtbWs41g==", - "ExampleCARootCert1": "MIICQDCCAeagAwIBAgIBATAKBggqhkjOPQQDAjAiMSAwHgYKKwYBBAGConwBBAwQMDAwMDAwMDAwMDAwMDAwMTAeFw0yMTAxMDEwMDAwMDBaFw0zMDEyMzAwMDAwMDBaMCIxIDAeBgorBgEEAYKifAEEDBAwMDAwMDAwMDAwMDAwMDAxMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0kZU1/4q48ywoHWskfI1kQqJdL/SVfJbSbsCWz1sa9LvKGAXLkeVn5SS6O7sPKJwhc8L40BU11a21/7PRitIo6OCAQswggEHMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR8Wtrm0OOd3zySOb6aEq9hbKPh8zAfBgNVHSMEGDAWgBR8Wtrm0OOd3zySOb6aEq9hbKPh8zCBowYDVR0RBIGbBIGYQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEwCgYIKoZIzj0EAwIDSAAwRQIga+q2BK+HvAMpEJyc7rSs+JYLA+cablmaGnsUorQH+3ICIQDA9jARNp0krnq63VIPqaD1Bjovim6XVv6/ykQbnzlP9g==", - "ExampleCAIntermediateCert1": "MIICQDCCAeagAwIBAgIBATAKBggqhkjOPQQDAjAiMSAwHgYKKwYBBAGConwBBAwQMDAwMDAwMDAwMDAwMDAwMTAeFw0yMTAxMDEwMDAwMDBaFw0zMDEyMzAwMDAwMDBaMCIxIDAeBgorBgEEAYKifAEDDBAwMDAwMDAwMDAwMDAwMDAyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAElbf2eFJ5Q919IQu+MC5/vA2SfLrGTPELV55vSn8WZytW/urTH7PknunrWjU6ABbiZvIHZQ+h+xGMNbDEZUhR/KOCAQswggEHMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSPbIW5kR4R1557pNLcxyJ9vZNQMzAfBgNVHSMEGDAWgBR8Wtrm0OOd3zySOb6aEq9hbKPh8zCBowYDVR0RBIGbBIGYQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEwCgYIKoZIzj0EAwIDSAAwRQIgaPSHU75svsHLrV0tdEBclY6Z5VPkrz6xbzsno58STfkCIQCxlHJT9IjBeT1zWWSUyBL6+cAkExMZQsFdWFqbqbe0/w==", - "f/1/m": "FSUA8f8sAQAY", - "f/1/n": "FTABAQEkAgE3AyQTAhgmBIAigScmBYAlTTo3BiQVASYRabYBACYWAQABABgkBwEkCAEwCUEETnxLK2KKVrJyEhLk5xyAxAYWS2dO4jwCeh1mXoQ2fOUSrJRm+5+xfi5R26bkzSzsmODu6KNt+VgXaeD2iUF/2jcKNQEoARgkAgE2AwQCBAEYMAQUmOnoN7kLzgFda1sM0KEC/RdvyqUwBRSPbIW5kR4R1557pNLcxyJ9vZNQMxgwC0B1yrr3+GDFOPQ6KXRQmcag5m7FPf8NjHVwHOZlJuit/oWFrKHJ1zWUhT7ulDlpRTEJb7UWMgGJbvK9b3UjR/gsGA==", - "f/1/i": "FTABAQEkAgE3AyQUARgmBIAigScmBYAlTTo3BiQTAhgkBwEkCAEwCUEElbf2eFJ5Q919IQu+MC5/vA2SfLrGTPELV55vSn8WZytW/urTH7PknunrWjU6ABbiZvIHZQ+h+xGMNbDEZUhR/DcKNQEpARgkAmAwBBSPbIW5kR4R1557pNLcxyJ9vZNQMzAFFHxa2ubQ453fPJI5vpoSr2Fso+HzMAamMIGjBgNVHREEgZsEgZhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQRgwC0Bo9IdTvmy+wcutXS10QFyVjpnlU+SvPrFvOyejnxJN+bGUclP0iMF5PXNZZJTIEvr5wCQTExlCwV1YWpupt7T/GA==", - "f/1/r": "FTABAQEkAgE3AyQUARgmBIAigScmBYAlTTo3BiQUARgkBwEkCAEwCUEE0kZU1/4q48ywoHWskfI1kQqJdL/SVfJbSbsCWz1sa9LvKGAXLkeVn5SS6O7sPKJwhc8L40BU11a21/7PRitIozcKNQEpARgkAmAwBBR8Wtrm0OOd3zySOb6aEq9hbKPh8zAFFHxa2ubQ453fPJI5vpoSr2Fso+HzMAamMIGjBgNVHREEgZsEgZhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQRgwC0Br6rYEr4e8AykQnJzutKz4lgsD5xpuWZoaexSitAf7csD2MBE2nSSuerrdUg+poPUGOi+KbpdW/r/KRBufOU/2GA==", - "g/fidx": "FSQAAjYBBAEYGA==", - "f/1/k/0": "FSQBACQCATYDFSQEACUFIjQwBhDpydi+x69atQKt/+IHwIAUGBUkBAAkBQAwBhAAAAAAAAAAAAAAAAAAAAAAGBUkBAAkBQAwBhAAAAAAAAAAAAAAAAAAAAAAGBglB///GA==", - "g/gfl": "FSQBASQCARg=", - "f/1/g": "FSQBACQCACQDACQEACQFACQGASQHABg=", - "g/icdfl": "FgQBGA==" - }, - "repl-config": { - "caList": { - "1": [ - { - "fabricId": 1, - "vendorId": 65521 - } - ] - } - } -} From e55e2372165762a9687c7ddf50ae973e1a907a8f Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Mon, 24 Feb 2025 20:33:52 +0000 Subject: [PATCH 14/39] Restyled by whitespace --- .../clusters/network-commissioning/network-commissioning.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index 0f2101e9e514d3..4278a9fa83b102 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1373,7 +1373,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust static constexpr kNetworkCommands = 5; // Count of Network Commands static constexpr kCredentialsCommands = 1; // Count of Credential Commands - static const DataModel::AcceptedCommandEntry commands[] = { // A static array of the posible commands + static const DataModel::AcceptedCommandEntry commands[] = { // A static array of the posible commands { ScanNetworks::Id, {} }, // { netId, {} }, // { RemoveNetwork::Id, {} }, // From 5a0a9345c04365709847b5400df117bed3e68a95 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Mon, 24 Feb 2025 20:33:57 +0000 Subject: [PATCH 15/39] Restyled by clang-format --- .../device-energy-management-server.cpp | 10 +++------- .../network-commissioning/network-commissioning.cpp | 3 ++- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp index d69c098d84d630..fc290e11e2d1c6 100644 --- a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp +++ b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp @@ -111,17 +111,13 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust if (HasFeature(Feature::kPowerAdjustment)) { - ReturnErrorOnFailure(builder.AppendElements({ - { PowerAdjustRequest::Id, {} }, - { CancelPowerAdjustRequest::Id, {} } - })); + ReturnErrorOnFailure(builder.AppendElements({ { PowerAdjustRequest::Id, {} }, { CancelPowerAdjustRequest::Id, {} } })); } if (HasFeature(Feature::kStartTimeAdjustment)) { - ReturnErrorOnFailure(builder.Append( - { StartTimeAdjustRequest::Id, {} } // - )); + ReturnErrorOnFailure(builder.Append({ StartTimeAdjustRequest::Id, {} } // + )); } if (HasFeature(Feature::kPausable)) diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index 4278a9fa83b102..100e03b86fb3c0 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1373,7 +1373,8 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust static constexpr kNetworkCommands = 5; // Count of Network Commands static constexpr kCredentialsCommands = 1; // Count of Credential Commands - static const DataModel::AcceptedCommandEntry commands[] = { // A static array of the posible commands + static const DataModel::AcceptedCommandEntry commands[] = { + // A static array of the posible commands { ScanNetworks::Id, {} }, // { netId, {} }, // { RemoveNetwork::Id, {} }, // From 62429e8f20d936be8ccec13275bf927ae2bc93ab Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Mon, 24 Feb 2025 20:43:21 +0000 Subject: [PATCH 16/39] Fix to networkCommisioning --- .../clusters/network-commissioning/network-commissioning.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index 100e03b86fb3c0..0daf9f31f66cbe 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1370,8 +1370,8 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust bool hasCred = mFeatureFlags.Has(Feature::kPerDeviceCredentials); auto netId = hasNet ? AddOrUpdateThreadNetwork::Id : AddOrUpdateWiFiNetwork::Id; - static constexpr kNetworkCommands = 5; // Count of Network Commands - static constexpr kCredentialsCommands = 1; // Count of Credential Commands + static constexpr size_t kNetworkCommands = 5; // Count of Network Commands + static constexpr size_t kCredentialsCommands = 1; // Count of Credential Commands static const DataModel::AcceptedCommandEntry commands[] = { // A static array of the posible commands From 6f5ea52c1f81b0caf3b739a8cd8b758151cd6e97 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Tue, 25 Feb 2025 16:14:45 +0000 Subject: [PATCH 17/39] AcceptedCommands should return early --- src/data-model-providers/codegen/CodegenDataModelProvider.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data-model-providers/codegen/CodegenDataModelProvider.cpp b/src/data-model-providers/codegen/CodegenDataModelProvider.cpp index 6e7b3d61f351ef..edb7aedfdc3e0f 100644 --- a/src/data-model-providers/codegen/CodegenDataModelProvider.cpp +++ b/src/data-model-providers/codegen/CodegenDataModelProvider.cpp @@ -335,7 +335,7 @@ CHIP_ERROR CodegenDataModelProvider::AcceptedCommands(const ConcreteClusterPath CommandHandlerInterfaceRegistry::Instance().GetCommandHandler(path.mEndpointId, path.mClusterId); if (interface != nullptr) { - ReturnErrorOnFailure(interface->EnumerateAcceptedCommands(path, builder)); + return interface->EnumerateAcceptedCommands(path, builder); } VerifyOrReturnError(serverCluster->acceptedCommandList != nullptr, CHIP_NO_ERROR); From 319d9aab99b32d36c2305ab9350bfb4b4e922a16 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Tue, 25 Feb 2025 16:27:58 +0000 Subject: [PATCH 18/39] Check Error for CHIP_ERROR_NOT_IMPLEMENTED --- src/data-model-providers/codegen/CodegenDataModelProvider.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/data-model-providers/codegen/CodegenDataModelProvider.cpp b/src/data-model-providers/codegen/CodegenDataModelProvider.cpp index edb7aedfdc3e0f..096149d345b646 100644 --- a/src/data-model-providers/codegen/CodegenDataModelProvider.cpp +++ b/src/data-model-providers/codegen/CodegenDataModelProvider.cpp @@ -335,7 +335,9 @@ CHIP_ERROR CodegenDataModelProvider::AcceptedCommands(const ConcreteClusterPath CommandHandlerInterfaceRegistry::Instance().GetCommandHandler(path.mEndpointId, path.mClusterId); if (interface != nullptr) { - return interface->EnumerateAcceptedCommands(path, builder); + CHIP_ERROR err = interface->EnumerateAcceptedCommands(path, builder); + // if err == CHIP_ERROR_NOT_IMPLEMENTED then continue, else just return whatever err is + VerifyOrReturnError(err == CHIP_ERROR_NOT_IMPLEMENTED, err); } VerifyOrReturnError(serverCluster->acceptedCommandList != nullptr, CHIP_NO_ERROR); From 8e92e770f7d05df5cabf9687f7fdc2dbcd9561f7 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Tue, 25 Feb 2025 23:31:55 +0000 Subject: [PATCH 19/39] Make sure there is space before appending --- .../device-energy-management-server.cpp | 7 +++++-- src/app/clusters/energy-evse-server/energy-evse-server.cpp | 2 ++ .../network-commissioning/network-commissioning.cpp | 1 + .../resource-monitoring-server.cpp | 1 + .../software-diagnostics-server.cpp | 2 +- src/controller/tests/TestServerCommandDispatch.cpp | 1 + 6 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp index fc290e11e2d1c6..bb16a7b682ad8c 100644 --- a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp +++ b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp @@ -116,8 +116,8 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust if (HasFeature(Feature::kStartTimeAdjustment)) { - ReturnErrorOnFailure(builder.Append({ StartTimeAdjustRequest::Id, {} } // - )); + ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); + ReturnErrorOnFailure(builder.Append({ StartTimeAdjustRequest::Id, {} })); } if (HasFeature(Feature::kPausable)) @@ -130,17 +130,20 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust if (HasFeature(Feature::kForecastAdjustment)) { + ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); ReturnErrorOnFailure(builder.Append({ ModifyForecastRequest::Id, {} })); } if (HasFeature(Feature::kConstraintBasedAdjustment)) { + ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); ReturnErrorOnFailure(builder.Append({ RequestConstraintBasedForecast::Id, {} })); } if (HasFeature(Feature::kStartTimeAdjustment) || HasFeature(Feature::kForecastAdjustment) || HasFeature(Feature::kConstraintBasedAdjustment)) { + ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); ReturnErrorOnFailure(builder.Append({ CancelRequest::Id, {} })); } diff --git a/src/app/clusters/energy-evse-server/energy-evse-server.cpp b/src/app/clusters/energy-evse-server/energy-evse-server.cpp index 83a9d86c566f90..d573dbc58a7e8b 100644 --- a/src/app/clusters/energy-evse-server/energy-evse-server.cpp +++ b/src/app/clusters/energy-evse-server/energy-evse-server.cpp @@ -196,6 +196,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust if (HasFeature(Feature::kV2x)) { + ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); ReturnErrorOnFailure(builder.Append({ EnableDischarging::Id, QF::kTimed, kDefaultPrivilege })); } @@ -210,6 +211,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust if (SupportsOptCmd(OptionalCommands::kSupportsStartDiagnostics)) { + ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); ReturnErrorOnFailure(builder.Append({ StartDiagnostics::Id, QF::kTimed, kDefaultPrivilege })); } return CHIP_NO_ERROR; diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index 0daf9f31f66cbe..1bfd2dabc99861 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1408,6 +1408,7 @@ CHIP_ERROR Instance::EnumerateGeneratedCommands(const ConcreteClusterPath & clus if (mFeatureFlags.Has(Feature::kPerDeviceCredentials)) { + ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); ReturnErrorOnFailure(builder.Append(QueryIdentityResponse::Id)); } diff --git a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp index 6b756d55ff1dcd..f6d9a6b4e3a2de 100644 --- a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp +++ b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp @@ -194,6 +194,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust ChipLogDetail(Zcl, "resourcemonitoring: EnumerateAcceptedCommands"); if (mResetConditionCommandSupported) { + ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); return builder.Append({ ResetCondition::Id, {} }); } diff --git a/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp b/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp index 8a3e22dc9bc6c5..b242429d777e1b 100644 --- a/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp +++ b/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp @@ -180,7 +180,7 @@ SoftwareDiagnosticsCommandHandler::EnumerateAcceptedCommands(const ConcreteClust // No commmands. return CHIP_NO_ERROR; } - + ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); return builder.Append({ ResetWatermarks::Id, {}, Privilege::kOperate }); // From Matter Spec } diff --git a/src/controller/tests/TestServerCommandDispatch.cpp b/src/controller/tests/TestServerCommandDispatch.cpp index 19ade1b3a4dbfd..6c0558350928a4 100644 --- a/src/controller/tests/TestServerCommandDispatch.cpp +++ b/src/controller/tests/TestServerCommandDispatch.cpp @@ -121,6 +121,7 @@ CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteCl } // We just have one command id. + ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); ReturnErrorOnFailure(builder.Append({ TestSimpleArgumentRequest::Id, {} })); return CHIP_NO_ERROR; } From 777a609df0f4548a482a27d0e8994ad50cca97c6 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Wed, 26 Feb 2025 01:19:09 +0000 Subject: [PATCH 20/39] Fix Darwing Clangtidy issue --- .../clusters/network-commissioning/network-commissioning.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index 1bfd2dabc99861..3c8ec09dcd2913 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1388,7 +1388,8 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust // Avoid extra memory allocation return builder.ReferenceExisting({ commands, kNetworkCommands + (hasCred ? kCredentialsCommands : 0) }); } - else if (hasCred) + + if (hasCred) { // Skip the network commands send the rest return builder.ReferenceExisting({ commands + kNetworkCommands, kCredentialsCommands }); } From 9671d96f2b4e22f4932142f86df8fa537187f39f Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Wed, 26 Feb 2025 01:52:07 +0000 Subject: [PATCH 21/39] Fixing dependency movement --- src/access/ProviderDeviceTypeResolver.h | 2 +- src/app/AttributePathExpandIterator.cpp | 2 +- src/app/AttributePathExpandIterator.h | 2 +- src/app/CommandHandlerInterface.h | 4 ++-- src/app/InteractionModelEngine.cpp | 5 +++-- src/app/clusters/descriptor/descriptor.cpp | 2 +- .../microwave-oven-control-server.cpp | 7 +++---- src/app/data-model-provider/BUILD.gn | 2 ++ .../{data-model => data-model-provider}/MetadataList.cpp | 2 +- src/app/{data-model => data-model-provider}/MetadataList.h | 0 src/app/data-model-provider/MetadataLookup.cpp | 2 +- src/app/data-model-provider/MetadataLookup.h | 2 +- src/app/data-model-provider/ProviderMetadataTree.cpp | 2 +- src/app/data-model-provider/ProviderMetadataTree.h | 2 +- src/app/data-model-provider/tests/TestMetadataList.cpp | 2 +- src/app/data-model/BUILD.gn | 2 -- .../codegen/CodegenDataModelProvider.cpp | 2 +- .../codegen/CodegenDataModelProvider.h | 2 +- .../codegen/tests/TestCodegenModelViaMocks.cpp | 2 +- 19 files changed, 23 insertions(+), 23 deletions(-) rename src/app/{data-model => data-model-provider}/MetadataList.cpp (99%) rename src/app/{data-model => data-model-provider}/MetadataList.h (100%) diff --git a/src/access/ProviderDeviceTypeResolver.h b/src/access/ProviderDeviceTypeResolver.h index ef2b9456866681..aff5b424a693f1 100644 --- a/src/access/ProviderDeviceTypeResolver.h +++ b/src/access/ProviderDeviceTypeResolver.h @@ -16,9 +16,9 @@ #pragma once #include +#include #include #include -#include namespace chip { namespace Access { diff --git a/src/app/AttributePathExpandIterator.cpp b/src/app/AttributePathExpandIterator.cpp index 00d1ea1b75fb25..708ce612c73468 100644 --- a/src/app/AttributePathExpandIterator.cpp +++ b/src/app/AttributePathExpandIterator.cpp @@ -17,9 +17,9 @@ #include #include +#include #include #include -#include #include #include diff --git a/src/app/AttributePathExpandIterator.h b/src/app/AttributePathExpandIterator.h index 76cadc76e3f906..e5d1f961434eb2 100644 --- a/src/app/AttributePathExpandIterator.h +++ b/src/app/AttributePathExpandIterator.h @@ -19,9 +19,9 @@ #include #include +#include #include #include -#include #include #include #include diff --git a/src/app/CommandHandlerInterface.h b/src/app/CommandHandlerInterface.h index 8d4279d459a5c3..870def091d39b0 100644 --- a/src/app/CommandHandlerInterface.h +++ b/src/app/CommandHandlerInterface.h @@ -21,9 +21,9 @@ #include #include #include +#include // So we can get filled buffers #include -#include // So we can encode lists -#include // So we can get filled buffers +#include // So we can encode lists #include #include diff --git a/src/app/InteractionModelEngine.cpp b/src/app/InteractionModelEngine.cpp index a0adcd20a96808..16696488b4a12f 100644 --- a/src/app/InteractionModelEngine.cpp +++ b/src/app/InteractionModelEngine.cpp @@ -37,11 +37,11 @@ #include #include #include +#include #include #include #include #include -#include #include #include #include @@ -130,7 +130,8 @@ bool MayHaveAccessibleEventPath(DataModel::Provider * aProvider, const EventPath class AutoReleaseSubscriptionInfoIterator { public: - AutoReleaseSubscriptionInfoIterator(SubscriptionResumptionStorage::SubscriptionInfoIterator * iterator) : mIterator(iterator){}; + AutoReleaseSubscriptionInfoIterator(SubscriptionResumptionStorage::SubscriptionInfoIterator * iterator) : + mIterator(iterator) {}; ~AutoReleaseSubscriptionInfoIterator() { mIterator->Release(); } SubscriptionResumptionStorage::SubscriptionInfoIterator * operator->() const { return mIterator; } diff --git a/src/app/clusters/descriptor/descriptor.cpp b/src/app/clusters/descriptor/descriptor.cpp index 6c33db6ceff5c8..35ddcabfd428d2 100644 --- a/src/app/clusters/descriptor/descriptor.cpp +++ b/src/app/clusters/descriptor/descriptor.cpp @@ -23,9 +23,9 @@ #include #include #include +#include #include #include -#include #include #include #include diff --git a/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp b/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp index 5df8f7c38fab9b..fae0acfe6f4735 100644 --- a/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp +++ b/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp @@ -23,8 +23,8 @@ #include #include #include +#include #include -#include #include #include @@ -46,9 +46,8 @@ namespace MicrowaveOvenControl { Instance::Instance(Delegate * aDelegate, EndpointId aEndpointId, ClusterId aClusterId, BitMask aFeature, Clusters::OperationalState::Instance & aOpStateInstance, Clusters::ModeBase::Instance & aMicrowaveOvenModeInstance) : - CommandHandlerInterface(MakeOptional(aEndpointId), aClusterId), - AttributeAccessInterface(MakeOptional(aEndpointId), aClusterId), mDelegate(aDelegate), mEndpointId(aEndpointId), - mClusterId(aClusterId), mFeature(aFeature), mOpStateInstance(aOpStateInstance), + CommandHandlerInterface(MakeOptional(aEndpointId), aClusterId), AttributeAccessInterface(MakeOptional(aEndpointId), aClusterId), + mDelegate(aDelegate), mEndpointId(aEndpointId), mClusterId(aClusterId), mFeature(aFeature), mOpStateInstance(aOpStateInstance), mMicrowaveOvenModeInstance(aMicrowaveOvenModeInstance) { mDelegate->SetInstance(this); diff --git a/src/app/data-model-provider/BUILD.gn b/src/app/data-model-provider/BUILD.gn index 61d3a274bc84a4..da60a3433e2a10 100644 --- a/src/app/data-model-provider/BUILD.gn +++ b/src/app/data-model-provider/BUILD.gn @@ -31,6 +31,8 @@ source_set("data-model-provider") { "ActionReturnStatus.h", "Context.h", "EventsGenerator.h", + "MetadataList.cpp", + "MetadataList.h", "MetadataLookup.cpp", "MetadataLookup.h", "OperationTypes.h", diff --git a/src/app/data-model/MetadataList.cpp b/src/app/data-model-provider/MetadataList.cpp similarity index 99% rename from src/app/data-model/MetadataList.cpp rename to src/app/data-model-provider/MetadataList.cpp index 3e60231b6fcdc1..01da67ea37bfd9 100644 --- a/src/app/data-model/MetadataList.cpp +++ b/src/app/data-model-provider/MetadataList.cpp @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#include +#include #include #include diff --git a/src/app/data-model/MetadataList.h b/src/app/data-model-provider/MetadataList.h similarity index 100% rename from src/app/data-model/MetadataList.h rename to src/app/data-model-provider/MetadataList.h diff --git a/src/app/data-model-provider/MetadataLookup.cpp b/src/app/data-model-provider/MetadataLookup.cpp index d1d11be77685d6..cfbdb91e278edc 100644 --- a/src/app/data-model-provider/MetadataLookup.cpp +++ b/src/app/data-model-provider/MetadataLookup.cpp @@ -15,7 +15,7 @@ */ #include -#include +#include namespace chip { namespace app { diff --git a/src/app/data-model-provider/MetadataLookup.h b/src/app/data-model-provider/MetadataLookup.h index 94ae9f85bc15a2..29ded483667c1d 100644 --- a/src/app/data-model-provider/MetadataLookup.h +++ b/src/app/data-model-provider/MetadataLookup.h @@ -19,9 +19,9 @@ #include #include +#include #include #include -#include #include #include #include diff --git a/src/app/data-model-provider/ProviderMetadataTree.cpp b/src/app/data-model-provider/ProviderMetadataTree.cpp index b8d43aa06806ac..8b6b4b6d5c6ccb 100644 --- a/src/app/data-model-provider/ProviderMetadataTree.cpp +++ b/src/app/data-model-provider/ProviderMetadataTree.cpp @@ -17,7 +17,7 @@ #include -#include +#include namespace chip { namespace app { diff --git a/src/app/data-model-provider/ProviderMetadataTree.h b/src/app/data-model-provider/ProviderMetadataTree.h index 9af1d9a356ca49..8e7763dc489020 100644 --- a/src/app/data-model-provider/ProviderMetadataTree.h +++ b/src/app/data-model-provider/ProviderMetadataTree.h @@ -21,9 +21,9 @@ #include #include #include +#include #include #include -#include #include namespace chip { diff --git a/src/app/data-model-provider/tests/TestMetadataList.cpp b/src/app/data-model-provider/tests/TestMetadataList.cpp index f987879e3b72f1..f9fd7ab62be208 100644 --- a/src/app/data-model-provider/tests/TestMetadataList.cpp +++ b/src/app/data-model-provider/tests/TestMetadataList.cpp @@ -22,7 +22,7 @@ #include -#include +#include #include #include diff --git a/src/app/data-model/BUILD.gn b/src/app/data-model/BUILD.gn index 183df98929f21e..d8e314e2a523b6 100644 --- a/src/app/data-model/BUILD.gn +++ b/src/app/data-model/BUILD.gn @@ -38,8 +38,6 @@ source_set("data-model") { "FabricScopedPreEncodedValue.cpp", "FabricScopedPreEncodedValue.h", "List.h", - "MetadataList.cpp", - "MetadataList.h", "PreEncodedValue.cpp", "PreEncodedValue.h", "WrappedStructEncoder.h", diff --git a/src/data-model-providers/codegen/CodegenDataModelProvider.cpp b/src/data-model-providers/codegen/CodegenDataModelProvider.cpp index ffdede997b321a..73f4fbec165a90 100644 --- a/src/data-model-providers/codegen/CodegenDataModelProvider.cpp +++ b/src/data-model-providers/codegen/CodegenDataModelProvider.cpp @@ -27,9 +27,9 @@ #include #include #include +#include #include #include -#include #include #include #include diff --git a/src/data-model-providers/codegen/CodegenDataModelProvider.h b/src/data-model-providers/codegen/CodegenDataModelProvider.h index e890d73802bbd4..764f5f74874673 100644 --- a/src/data-model-providers/codegen/CodegenDataModelProvider.h +++ b/src/data-model-providers/codegen/CodegenDataModelProvider.h @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp b/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp index 931bc2c4125a7d..ad503fcb9b2860 100644 --- a/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp +++ b/src/data-model-providers/codegen/tests/TestCodegenModelViaMocks.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -43,7 +44,6 @@ #include #include #include -#include #include #include #include From 33a06639e84e857d328008ae59cdcaa83d18e0cc Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Wed, 26 Feb 2025 02:23:50 +0000 Subject: [PATCH 22/39] Restyled by clang-format --- src/app/InteractionModelEngine.cpp | 3 +-- .../microwave-oven-control-server.cpp | 5 +++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/InteractionModelEngine.cpp b/src/app/InteractionModelEngine.cpp index 16696488b4a12f..fe7105846c8892 100644 --- a/src/app/InteractionModelEngine.cpp +++ b/src/app/InteractionModelEngine.cpp @@ -130,8 +130,7 @@ bool MayHaveAccessibleEventPath(DataModel::Provider * aProvider, const EventPath class AutoReleaseSubscriptionInfoIterator { public: - AutoReleaseSubscriptionInfoIterator(SubscriptionResumptionStorage::SubscriptionInfoIterator * iterator) : - mIterator(iterator) {}; + AutoReleaseSubscriptionInfoIterator(SubscriptionResumptionStorage::SubscriptionInfoIterator * iterator) : mIterator(iterator){}; ~AutoReleaseSubscriptionInfoIterator() { mIterator->Release(); } SubscriptionResumptionStorage::SubscriptionInfoIterator * operator->() const { return mIterator; } diff --git a/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp b/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp index fae0acfe6f4735..1fa83ffbf43ac2 100644 --- a/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp +++ b/src/app/clusters/microwave-oven-control-server/microwave-oven-control-server.cpp @@ -46,8 +46,9 @@ namespace MicrowaveOvenControl { Instance::Instance(Delegate * aDelegate, EndpointId aEndpointId, ClusterId aClusterId, BitMask aFeature, Clusters::OperationalState::Instance & aOpStateInstance, Clusters::ModeBase::Instance & aMicrowaveOvenModeInstance) : - CommandHandlerInterface(MakeOptional(aEndpointId), aClusterId), AttributeAccessInterface(MakeOptional(aEndpointId), aClusterId), - mDelegate(aDelegate), mEndpointId(aEndpointId), mClusterId(aClusterId), mFeature(aFeature), mOpStateInstance(aOpStateInstance), + CommandHandlerInterface(MakeOptional(aEndpointId), aClusterId), + AttributeAccessInterface(MakeOptional(aEndpointId), aClusterId), mDelegate(aDelegate), mEndpointId(aEndpointId), + mClusterId(aClusterId), mFeature(aFeature), mOpStateInstance(aOpStateInstance), mMicrowaveOvenModeInstance(aMicrowaveOvenModeInstance) { mDelegate->SetInstance(this); From 6e4a9e9e5397d79ef5856a9df6e68eccb2a92249 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Wed, 26 Feb 2025 02:34:20 +0000 Subject: [PATCH 23/39] Remove Forward declaration --- src/app/CommandHandlerInterface.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/app/CommandHandlerInterface.h b/src/app/CommandHandlerInterface.h index 870def091d39b0..84be3ef53beceb 100644 --- a/src/app/CommandHandlerInterface.h +++ b/src/app/CommandHandlerInterface.h @@ -22,6 +22,7 @@ #include #include #include // So we can get filled buffers +#include #include #include // So we can encode lists #include @@ -29,10 +30,6 @@ namespace chip { namespace app { -namespace DataModel { -struct AcceptedCommandEntry; -} - /* * This interface permits applications to register a server-side command handler * at run-time for a given cluster. The handler can either be configured to handle all endpoints From e4a4968da52a41e9fbd9717e41474207012e0699 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Wed, 26 Feb 2025 19:18:01 +0000 Subject: [PATCH 24/39] Use builder instead of static array for network comissioning --- .../network-commissioning.cpp | 31 +++++++------------ 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index 3c8ec09dcd2913..18d1c4235724ba 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1364,34 +1364,27 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust DataModel::ListBuilder & builder) { using namespace Clusters::NetworkCommissioning::Commands; - - bool hasNet = mFeatureFlags.Has(Feature::kThreadNetworkInterface); - bool hasWifi = mFeatureFlags.Has(Feature::kWiFiNetworkInterface); - bool hasCred = mFeatureFlags.Has(Feature::kPerDeviceCredentials); - auto netId = hasNet ? AddOrUpdateThreadNetwork::Id : AddOrUpdateWiFiNetwork::Id; - static constexpr size_t kNetworkCommands = 5; // Count of Network Commands static constexpr size_t kCredentialsCommands = 1; // Count of Credential Commands - static const DataModel::AcceptedCommandEntry commands[] = { - // A static array of the posible commands - { ScanNetworks::Id, {} }, // - { netId, {} }, // - { RemoveNetwork::Id, {} }, // - { ConnectNetwork::Id, {} }, // - { ReorderNetwork::Id, {} }, // - { QueryIdentity::Id, {} } // - }; + bool hasNet = mFeatureFlags.Has(Feature::kThreadNetworkInterface); + bool hasWifi = mFeatureFlags.Has(Feature::kWiFiNetworkInterface); if (hasNet | hasWifi) { - // Avoid extra memory allocation - return builder.ReferenceExisting({ commands, kNetworkCommands + (hasCred ? kCredentialsCommands : 0) }); + ReturnErrorOnFailure(builder.EnsureAppendCapacity(kNetworkCommands)); + ReturnErrorOnFailure(builder.AppendElements({ + { ScanNetworks::Id, {} }, // + { RemoveNetwork::Id, {} }, // + { ConnectNetwork::Id, {} }, // + { ReorderNetwork::Id, {} }, // + })); + ReturnErrorOnFailure(builder.Append({ hasNet ? AddOrUpdateThreadNetwork::Id : AddOrUpdateWiFiNetwork::Id, {} })); } - if (hasCred) + if (mFeatureFlags.Has(Feature::kPerDeviceCredentials)) { // Skip the network commands send the rest - return builder.ReferenceExisting({ commands + kNetworkCommands, kCredentialsCommands }); + return builder.Append({ QueryIdentity::Id, {} }); } return CHIP_NO_ERROR; From 10cd5d33e0e476c69290c8dea0a14d8b1a230f58 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Wed, 26 Feb 2025 19:19:47 +0000 Subject: [PATCH 25/39] Update Comment on new AppendElements for initializer list --- src/app/data-model-provider/MetadataList.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/app/data-model-provider/MetadataList.h b/src/app/data-model-provider/MetadataList.h index c8f625a6f0f28f..569459a929a39a 100644 --- a/src/app/data-model-provider/MetadataList.h +++ b/src/app/data-model-provider/MetadataList.h @@ -182,10 +182,6 @@ class ListBuilder : public detail::GenericAppendOnlyBuffer /// /// Automatically attempts to allocate sufficient space to fulfill the element /// requirements. - /// - /// `span` MUST NOT point inside "own" buffer (and generally will not - /// as this class does not expose buffer access except by releasing ownership - /// via `Take`) CHIP_ERROR AppendElements(std::initializer_list span) { return AppendElementArrayRaw(span.begin(), span.size()); } /// Append a single element. From 731222ea80c684939761b2e97f06df4d42d7c733 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Wed, 26 Feb 2025 19:24:09 +0000 Subject: [PATCH 26/39] Better phrasing in comments --- .../codegen/CodegenDataModelProvider.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/data-model-providers/codegen/CodegenDataModelProvider.cpp b/src/data-model-providers/codegen/CodegenDataModelProvider.cpp index 73f4fbec165a90..2e8b51807695c1 100644 --- a/src/data-model-providers/codegen/CodegenDataModelProvider.cpp +++ b/src/data-model-providers/codegen/CodegenDataModelProvider.cpp @@ -362,7 +362,8 @@ CHIP_ERROR CodegenDataModelProvider::AcceptedCommands(const ConcreteClusterPath if (interface != nullptr) { CHIP_ERROR err = interface->EnumerateAcceptedCommands(path, builder); - // if err == CHIP_ERROR_NOT_IMPLEMENTED then continue, else just return whatever err is + // if enumeration returns CHIP_ERROR_NOT_IMPLEMENTED then continue with normal procesing + // otherwise we finished VerifyOrReturnError(err == CHIP_ERROR_NOT_IMPLEMENTED, err); } @@ -402,7 +403,8 @@ CHIP_ERROR CodegenDataModelProvider::GeneratedCommands(const ConcreteClusterPath if (interface != nullptr) { CHIP_ERROR err = interface->EnumerateGeneratedCommands(path, builder); - // if err == CHIP_ERROR_NOT_IMPLEMENTED then continue, else just return whatever err is + // If enumeration returns CHIP_ERROR_NOT_IMPLEMENTED then continue with normal procesing + // otherwise we finished VerifyOrReturnError(err == CHIP_ERROR_NOT_IMPLEMENTED, err); } From 98ea178c3e3afe1f74deb2d9aad800537ade309e Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Wed, 26 Feb 2025 19:28:42 +0000 Subject: [PATCH 27/39] TestClusterCommandHandler::EnumerateAcceptedCommands don't use dynamic memory --- src/controller/tests/TestServerCommandDispatch.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/controller/tests/TestServerCommandDispatch.cpp b/src/controller/tests/TestServerCommandDispatch.cpp index 4a6beb9cecbb74..5eeac380ec074b 100644 --- a/src/controller/tests/TestServerCommandDispatch.cpp +++ b/src/controller/tests/TestServerCommandDispatch.cpp @@ -120,10 +120,8 @@ CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteCl return CHIP_NO_ERROR; } - // We just have one command id. - ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); - ReturnErrorOnFailure(builder.Append({ TestSimpleArgumentRequest::Id, {} })); - return CHIP_NO_ERROR; + DataModel::AcceptedCommandEntry entries[] = { { TestSimpleArgumentRequest::Id, {} } }; + return builder.ReferenceExisting({ entries, std::size(entries) }); } } // namespace From 3f4a90607f07c39694c17588dae9ef79d0f92122 Mon Sep 17 00:00:00 2001 From: Ricardo Alberto Torres Guzman Date: Wed, 26 Feb 2025 14:41:24 -0600 Subject: [PATCH 28/39] Update src/app/CommandHandlerInterface.h Co-authored-by: Andrei Litvin --- src/app/CommandHandlerInterface.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/CommandHandlerInterface.h b/src/app/CommandHandlerInterface.h index 84be3ef53beceb..47cedcc5c8cfdf 100644 --- a/src/app/CommandHandlerInterface.h +++ b/src/app/CommandHandlerInterface.h @@ -21,7 +21,7 @@ #include #include #include -#include // So we can get filled buffers +#include #include #include #include // So we can encode lists From 3037bfc6bc43c8f7712331c01783fcb48069280a Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Wed, 26 Feb 2025 21:29:52 +0000 Subject: [PATCH 29/39] Documenting Upgrading changes --- docs/upgrading.md | 84 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/docs/upgrading.md b/docs/upgrading.md index e9e17239d50049..3cdaeee26ee518 100644 --- a/docs/upgrading.md +++ b/docs/upgrading.md @@ -107,3 +107,87 @@ To use default attribute persistence, you need to pass in a `PersistentStorageDelegate` to `CodegenDataModelProviderInstance`. See example changes in [36658](https://github.com/project-chip/connectedhomeip/pull/36658) ). + +### Decoupling of Command Handler Interface from Ember + +#### EnumerateGeneratedCommands + +Changed the old callback based iteration, into a ListBuilder based approach for +the Enumeration of Generated Commands + +`CommandHandlerInterface::EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context)` +becomes +`CommandHandlerInterface::EnumerateGeneratedCommands(const ConcreteClusterPath & cluster, ListBuilder & builder)` + +Changes for implementation + +- old + +```cpp + for (auto && cmd : { ScanNetworksResponse::Id, NetworkConfigResponse::Id, ConnectNetworkResponse::Id }) + { + VerifyOrExit(callback(cmd, context) == Loop::Continue, /**/); + } +``` + +- new + +```cpp + ReturnErrorOnFailure( + builder.AppendElements({ ScanNetworksResponse::Id, NetworkConfigResponse::Id, ConnectNetworkResponse::Id }) + ) +``` + +#### EnumerateAcceptedCommands + +Expanded `EnumerateAcceptedCommands` Interface to provide Attributes and +Privileges using a ListBuilder + +`CommandHandlerInterface::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context)` +becomes +`CommandHandlerInterface::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, ListBuilder & builder)` + +Changes for implementation: + +- Old + +```cpp + for (auto && cmd : { + Disable::Id, + EnableCharging::Id, + }) + { + VerifyOrExit(callback(cmd, context) == Loop::Continue, /**/); + } + + if (HasFeature(Feature::kV2x)) + { + VerifyOrExit(callback(EnableDischarging::Id, context) == Loop::Continue, /**/); + } +``` + +- new + +```cpp + using QF = DataModel::CommandQualityFlags; + using Priv = chip::Access::Privilege; + + ReturnErrorOnFailure(builder.AppendElements({ + { Disable::Id, QF::kTimed, Priv::kOperate }, + { EnableCharging::Id, QF::kTimed, Priv::kOperate }, + })); + + if (HasFeature(Feature::kV2x)) + { + ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); + ReturnErrorOnFailure( + builder.Append({ EnableDischarging::Id, QF::kTimed, Priv::kOperate}) + ); + } + +``` + +Important Notes: + +Careful to use `EnsureAppendCapacity` before single element Append +`ListBuilder::Append` as it will not grow the buffer if not available already From f4cdd15fbb526d18cd071076f6266f8ae3716a71 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Wed, 26 Feb 2025 21:47:47 +0000 Subject: [PATCH 30/39] Quick Fix --- .../clusters/network-commissioning/network-commissioning.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index 18d1c4235724ba..97d00e930f8e39 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1364,8 +1364,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust DataModel::ListBuilder & builder) { using namespace Clusters::NetworkCommissioning::Commands; - static constexpr size_t kNetworkCommands = 5; // Count of Network Commands - static constexpr size_t kCredentialsCommands = 1; // Count of Credential Commands + static constexpr size_t kNetworkCommands = 5; // Count of Network Commands bool hasNet = mFeatureFlags.Has(Feature::kThreadNetworkInterface); bool hasWifi = mFeatureFlags.Has(Feature::kWiFiNetworkInterface); From 7f56e9ff633b749f2c4d42897ba74ef27766a147 Mon Sep 17 00:00:00 2001 From: Ricardo Alberto Torres Guzman Date: Wed, 26 Feb 2025 15:48:30 -0600 Subject: [PATCH 31/39] Update docs/upgrading.md Co-authored-by: Andrei Litvin --- docs/upgrading.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/upgrading.md b/docs/upgrading.md index 3cdaeee26ee518..dfa3d157a4603f 100644 --- a/docs/upgrading.md +++ b/docs/upgrading.md @@ -189,5 +189,5 @@ Changes for implementation: Important Notes: -Careful to use `EnsureAppendCapacity` before single element Append +Be sure to use `EnsureAppendCapacity` before single element Append `ListBuilder::Append` as it will not grow the buffer if not available already From a20600edeabdb735eb22e072dc7efe68a1cbc39c Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Wed, 26 Feb 2025 23:14:37 +0000 Subject: [PATCH 32/39] Making all Privileges Explicit --- .../device-energy-management-server.cpp | 18 +++++++++++------- .../energy-evse-server/energy-evse-server.cpp | 18 +++++++++--------- .../network-commissioning.cpp | 17 ++++++++++------- .../resource-monitoring-server.cpp | 4 +++- .../tests/TestServerCommandDispatch.cpp | 3 ++- 5 files changed, 35 insertions(+), 25 deletions(-) diff --git a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp index bb16a7b682ad8c..985d567e0e845b 100644 --- a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp +++ b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp @@ -108,43 +108,47 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust DataModel::ListBuilder & builder) { using namespace Commands; + using Priv = chip::Access::Privilege; if (HasFeature(Feature::kPowerAdjustment)) { - ReturnErrorOnFailure(builder.AppendElements({ { PowerAdjustRequest::Id, {} }, { CancelPowerAdjustRequest::Id, {} } })); + ReturnErrorOnFailure(builder.AppendElements({ + { PowerAdjustRequest::Id, {}, Priv::kOperate }, // + { CancelPowerAdjustRequest::Id, {}, Priv::kOperate } // + })); } if (HasFeature(Feature::kStartTimeAdjustment)) { ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); - ReturnErrorOnFailure(builder.Append({ StartTimeAdjustRequest::Id, {} })); + ReturnErrorOnFailure(builder.Append({ StartTimeAdjustRequest::Id, {}, Priv::kOperate })); } if (HasFeature(Feature::kPausable)) { ReturnErrorOnFailure(builder.AppendElements({ - { PauseRequest::Id, {} }, // - { ResumeRequest::Id, {} } // + { PauseRequest::Id, {}, Priv::kOperate }, // + { ResumeRequest::Id, {}, Priv::kOperate } // })); } if (HasFeature(Feature::kForecastAdjustment)) { ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); - ReturnErrorOnFailure(builder.Append({ ModifyForecastRequest::Id, {} })); + ReturnErrorOnFailure(builder.Append({ ModifyForecastRequest::Id, {}, Priv::kOperate })); } if (HasFeature(Feature::kConstraintBasedAdjustment)) { ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); - ReturnErrorOnFailure(builder.Append({ RequestConstraintBasedForecast::Id, {} })); + ReturnErrorOnFailure(builder.Append({ RequestConstraintBasedForecast::Id, {}, Priv::kOperate })); } if (HasFeature(Feature::kStartTimeAdjustment) || HasFeature(Feature::kForecastAdjustment) || HasFeature(Feature::kConstraintBasedAdjustment)) { ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); - ReturnErrorOnFailure(builder.Append({ CancelRequest::Id, {} })); + ReturnErrorOnFailure(builder.Append({ CancelRequest::Id, {}, Priv::kOperate })); } return CHIP_NO_ERROR; diff --git a/src/app/clusters/energy-evse-server/energy-evse-server.cpp b/src/app/clusters/energy-evse-server/energy-evse-server.cpp index d573dbc58a7e8b..92d769d4533edf 100644 --- a/src/app/clusters/energy-evse-server/energy-evse-server.cpp +++ b/src/app/clusters/energy-evse-server/energy-evse-server.cpp @@ -186,33 +186,33 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust DataModel::ListBuilder & builder) { using namespace Commands; - using QF = DataModel::CommandQualityFlags; - static const auto kDefaultPrivilege = chip::Access::Privilege::kOperate; + using QF = DataModel::CommandQualityFlags; + using Priv = chip::Access::Privilege; ReturnErrorOnFailure(builder.AppendElements({ - { Disable::Id, QF::kTimed, kDefaultPrivilege }, // - { EnableCharging::Id, QF::kTimed, kDefaultPrivilege }, // + { Disable::Id, QF::kTimed, Priv::kOperate }, // + { EnableCharging::Id, QF::kTimed, Priv::kOperate }, // })); if (HasFeature(Feature::kV2x)) { ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); - ReturnErrorOnFailure(builder.Append({ EnableDischarging::Id, QF::kTimed, kDefaultPrivilege })); + ReturnErrorOnFailure(builder.Append({ EnableDischarging::Id, QF::kTimed, Priv::kOperate })); } if (HasFeature(Feature::kChargingPreferences)) { ReturnErrorOnFailure(builder.AppendElements({ - { SetTargets::Id, QF::kTimed, kDefaultPrivilege }, // - { GetTargets::Id, QF::kTimed, kDefaultPrivilege }, // - { ClearTargets::Id, QF::kTimed, kDefaultPrivilege }, // + { SetTargets::Id, QF::kTimed, Priv::kOperate }, // + { GetTargets::Id, QF::kTimed, Priv::kOperate }, // + { ClearTargets::Id, QF::kTimed, Priv::kOperate }, // })); } if (SupportsOptCmd(OptionalCommands::kSupportsStartDiagnostics)) { ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); - ReturnErrorOnFailure(builder.Append({ StartDiagnostics::Id, QF::kTimed, kDefaultPrivilege })); + ReturnErrorOnFailure(builder.Append({ StartDiagnostics::Id, QF::kTimed, Priv::kOperate })); } return CHIP_NO_ERROR; } diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index 97d00e930f8e39..34b8de9815d789 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1364,6 +1364,8 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust DataModel::ListBuilder & builder) { using namespace Clusters::NetworkCommissioning::Commands; + using Priv = chip::Access::Privilege; + static constexpr size_t kNetworkCommands = 5; // Count of Network Commands bool hasNet = mFeatureFlags.Has(Feature::kThreadNetworkInterface); @@ -1373,17 +1375,18 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust { ReturnErrorOnFailure(builder.EnsureAppendCapacity(kNetworkCommands)); ReturnErrorOnFailure(builder.AppendElements({ - { ScanNetworks::Id, {} }, // - { RemoveNetwork::Id, {} }, // - { ConnectNetwork::Id, {} }, // - { ReorderNetwork::Id, {} }, // + { ScanNetworks::Id, {}, Priv::kAdminister }, // + { RemoveNetwork::Id, {}, Priv::kAdminister }, // + { ConnectNetwork::Id, {}, Priv::kAdminister }, // + { ReorderNetwork::Id, {}, Priv::kAdminister }, // })); - ReturnErrorOnFailure(builder.Append({ hasNet ? AddOrUpdateThreadNetwork::Id : AddOrUpdateWiFiNetwork::Id, {} })); + ReturnErrorOnFailure( + builder.Append({ hasNet ? AddOrUpdateThreadNetwork::Id : AddOrUpdateWiFiNetwork::Id, {}, Priv::kAdminister })); } if (mFeatureFlags.Has(Feature::kPerDeviceCredentials)) - { // Skip the network commands send the rest - return builder.Append({ QueryIdentity::Id, {} }); + { + ReturnErrorOnFailure(builder.Append({ QueryIdentity::Id, {} })); } return CHIP_NO_ERROR; diff --git a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp index f6d9a6b4e3a2de..e2bc9c8d8da08b 100644 --- a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp +++ b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp @@ -191,11 +191,13 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust DataModel::ListBuilder & builder) { using namespace ResourceMonitoring::Commands; + using Priv = chip::Access::Privilege; + ChipLogDetail(Zcl, "resourcemonitoring: EnumerateAcceptedCommands"); if (mResetConditionCommandSupported) { ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); - return builder.Append({ ResetCondition::Id, {} }); + return builder.Append({ ResetCondition::Id, {}, Priv::kOperate }); } return CHIP_NO_ERROR; diff --git a/src/controller/tests/TestServerCommandDispatch.cpp b/src/controller/tests/TestServerCommandDispatch.cpp index 5eeac380ec074b..cc600f792e6c3d 100644 --- a/src/controller/tests/TestServerCommandDispatch.cpp +++ b/src/controller/tests/TestServerCommandDispatch.cpp @@ -109,6 +109,7 @@ CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteCl DataModel::ListBuilder & builder) { using namespace Clusters::UnitTesting::Commands; + using Priv = chip::Access::Privilege; if (!mOverrideAcceptedCommands) { @@ -120,7 +121,7 @@ CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteCl return CHIP_NO_ERROR; } - DataModel::AcceptedCommandEntry entries[] = { { TestSimpleArgumentRequest::Id, {} } }; + DataModel::AcceptedCommandEntry entries[] = { { TestSimpleArgumentRequest::Id, {}, Priv::kOperate } }; return builder.ReferenceExisting({ entries, std::size(entries) }); } From afc80b16be9ace3e9b1b17f4e77d5acc38ea6e9d Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Wed, 26 Feb 2025 23:24:13 +0000 Subject: [PATCH 33/39] Remove return of stack ptr --- src/controller/tests/TestServerCommandDispatch.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controller/tests/TestServerCommandDispatch.cpp b/src/controller/tests/TestServerCommandDispatch.cpp index cc600f792e6c3d..0a72aa7e20e4d0 100644 --- a/src/controller/tests/TestServerCommandDispatch.cpp +++ b/src/controller/tests/TestServerCommandDispatch.cpp @@ -121,7 +121,7 @@ CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteCl return CHIP_NO_ERROR; } - DataModel::AcceptedCommandEntry entries[] = { { TestSimpleArgumentRequest::Id, {}, Priv::kOperate } }; + static constexpr DataModel::AcceptedCommandEntry entries[] = { { TestSimpleArgumentRequest::Id, {}, Priv::kOperate } }; return builder.ReferenceExisting({ entries, std::size(entries) }); } From 8c10c167f66a329d548fab79c456060255297942 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Thu, 27 Feb 2025 20:35:31 +0000 Subject: [PATCH 34/39] Allocate only once in enumeration --- .../device-energy-management-server.cpp | 6 ++---- .../energy-evse-server/energy-evse-server.cpp | 3 +-- .../network-commissioning.cpp | 16 +++++++++------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp index 985d567e0e845b..f33300c7c31e37 100644 --- a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp +++ b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp @@ -110,6 +110,8 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust using namespace Commands; using Priv = chip::Access::Privilege; + ReturnErrorOnFailure(builder.EnsureAppendCapacity(8)); // Ensure we have capacity for all possible commands + if (HasFeature(Feature::kPowerAdjustment)) { ReturnErrorOnFailure(builder.AppendElements({ @@ -120,7 +122,6 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust if (HasFeature(Feature::kStartTimeAdjustment)) { - ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); ReturnErrorOnFailure(builder.Append({ StartTimeAdjustRequest::Id, {}, Priv::kOperate })); } @@ -134,20 +135,17 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust if (HasFeature(Feature::kForecastAdjustment)) { - ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); ReturnErrorOnFailure(builder.Append({ ModifyForecastRequest::Id, {}, Priv::kOperate })); } if (HasFeature(Feature::kConstraintBasedAdjustment)) { - ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); ReturnErrorOnFailure(builder.Append({ RequestConstraintBasedForecast::Id, {}, Priv::kOperate })); } if (HasFeature(Feature::kStartTimeAdjustment) || HasFeature(Feature::kForecastAdjustment) || HasFeature(Feature::kConstraintBasedAdjustment)) { - ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); ReturnErrorOnFailure(builder.Append({ CancelRequest::Id, {}, Priv::kOperate })); } diff --git a/src/app/clusters/energy-evse-server/energy-evse-server.cpp b/src/app/clusters/energy-evse-server/energy-evse-server.cpp index 92d769d4533edf..43f068b4328277 100644 --- a/src/app/clusters/energy-evse-server/energy-evse-server.cpp +++ b/src/app/clusters/energy-evse-server/energy-evse-server.cpp @@ -188,6 +188,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust using namespace Commands; using QF = DataModel::CommandQualityFlags; using Priv = chip::Access::Privilege; + ReturnErrorOnFailure(builder.EnsureAppendCapacity(7)); ReturnErrorOnFailure(builder.AppendElements({ { Disable::Id, QF::kTimed, Priv::kOperate }, // @@ -196,7 +197,6 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust if (HasFeature(Feature::kV2x)) { - ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); ReturnErrorOnFailure(builder.Append({ EnableDischarging::Id, QF::kTimed, Priv::kOperate })); } @@ -211,7 +211,6 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust if (SupportsOptCmd(OptionalCommands::kSupportsStartDiagnostics)) { - ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); ReturnErrorOnFailure(builder.Append({ StartDiagnostics::Id, QF::kTimed, Priv::kOperate })); } return CHIP_NO_ERROR; diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index 34b8de9815d789..c30244ec1534ce 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1366,14 +1366,14 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust using namespace Clusters::NetworkCommissioning::Commands; using Priv = chip::Access::Privilege; - static constexpr size_t kNetworkCommands = 5; // Count of Network Commands + static constexpr size_t kNetworkCommands = 7; // Count of max possible commands assuming all features + ReturnErrorOnFailure(builder.EnsureAppendCapacity(kNetworkCommands)); - bool hasNet = mFeatureFlags.Has(Feature::kThreadNetworkInterface); - bool hasWifi = mFeatureFlags.Has(Feature::kWiFiNetworkInterface); + bool hasThread = mFeatureFlags.Has(Feature::kThreadNetworkInterface); + bool hasWifi = mFeatureFlags.Has(Feature::kWiFiNetworkInterface); - if (hasNet | hasWifi) + if (hasThread | hasWifi) { - ReturnErrorOnFailure(builder.EnsureAppendCapacity(kNetworkCommands)); ReturnErrorOnFailure(builder.AppendElements({ { ScanNetworks::Id, {}, Priv::kAdminister }, // { RemoveNetwork::Id, {}, Priv::kAdminister }, // @@ -1381,7 +1381,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust { ReorderNetwork::Id, {}, Priv::kAdminister }, // })); ReturnErrorOnFailure( - builder.Append({ hasNet ? AddOrUpdateThreadNetwork::Id : AddOrUpdateWiFiNetwork::Id, {}, Priv::kAdminister })); + builder.Append({ hasThread ? AddOrUpdateThreadNetwork::Id : AddOrUpdateWiFiNetwork::Id, {}, Priv::kAdminister })); } if (mFeatureFlags.Has(Feature::kPerDeviceCredentials)) @@ -1396,6 +1396,9 @@ CHIP_ERROR Instance::EnumerateGeneratedCommands(const ConcreteClusterPath & clus { using namespace Clusters::NetworkCommissioning::Commands; + static constexpr size_t kCommands = 5; // Count of max possible commands assuming all features + ReturnErrorOnFailure(builder.EnsureAppendCapacity(kCommands)); + if (mFeatureFlags.HasAny(Feature::kWiFiNetworkInterface, Feature::kThreadNetworkInterface)) { ReturnErrorOnFailure( @@ -1404,7 +1407,6 @@ CHIP_ERROR Instance::EnumerateGeneratedCommands(const ConcreteClusterPath & clus if (mFeatureFlags.Has(Feature::kPerDeviceCredentials)) { - ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); ReturnErrorOnFailure(builder.Append(QueryIdentityResponse::Id)); } From 2bf9949b5c95b0452b1bc7d26f3049d0ff48bcc3 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Fri, 28 Feb 2025 01:53:31 +0000 Subject: [PATCH 35/39] Privileges in ResetWatermarks up to spec --- .../software-diagnostics-server/software-diagnostics-server.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp b/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp index 4d15b3b21037c5..b1c8a3ec572175 100644 --- a/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp +++ b/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp @@ -181,7 +181,7 @@ SoftwareDiagnosticsCommandHandler::EnumerateAcceptedCommands(const ConcreteClust return CHIP_NO_ERROR; } ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); - return builder.Append({ ResetWatermarks::Id, {}, Privilege::kOperate }); // From Matter Spec + return builder.Append({ ResetWatermarks::Id, {}, Privilege::kManage }); } } // anonymous namespace From 8b8947bc98a37555b705ae82b87f0b9a4db08a8b Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Fri, 28 Feb 2025 02:03:13 +0000 Subject: [PATCH 36/39] remove chip from Access::Privilege; --- .../device-energy-management-server.cpp | 2 +- src/app/clusters/energy-evse-server/energy-evse-server.cpp | 2 +- .../clusters/network-commissioning/network-commissioning.cpp | 4 ++-- .../resource-monitoring-server/resource-monitoring-server.cpp | 2 +- .../software-diagnostics-server.cpp | 4 ++-- src/controller/tests/TestServerCommandDispatch.cpp | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp index f33300c7c31e37..8791a842676711 100644 --- a/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp +++ b/src/app/clusters/device-energy-management-server/device-energy-management-server.cpp @@ -108,7 +108,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust DataModel::ListBuilder & builder) { using namespace Commands; - using Priv = chip::Access::Privilege; + using Priv = Access::Privilege; ReturnErrorOnFailure(builder.EnsureAppendCapacity(8)); // Ensure we have capacity for all possible commands diff --git a/src/app/clusters/energy-evse-server/energy-evse-server.cpp b/src/app/clusters/energy-evse-server/energy-evse-server.cpp index 43f068b4328277..a598bf7428da4c 100644 --- a/src/app/clusters/energy-evse-server/energy-evse-server.cpp +++ b/src/app/clusters/energy-evse-server/energy-evse-server.cpp @@ -187,7 +187,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust { using namespace Commands; using QF = DataModel::CommandQualityFlags; - using Priv = chip::Access::Privilege; + using Priv = Access::Privilege; ReturnErrorOnFailure(builder.EnsureAppendCapacity(7)); ReturnErrorOnFailure(builder.AppendElements({ diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index c30244ec1534ce..f15d5fb1a493f0 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1364,7 +1364,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust DataModel::ListBuilder & builder) { using namespace Clusters::NetworkCommissioning::Commands; - using Priv = chip::Access::Privilege; + using Priv = Access::Privilege; static constexpr size_t kNetworkCommands = 7; // Count of max possible commands assuming all features ReturnErrorOnFailure(builder.EnsureAppendCapacity(kNetworkCommands)); @@ -1396,7 +1396,7 @@ CHIP_ERROR Instance::EnumerateGeneratedCommands(const ConcreteClusterPath & clus { using namespace Clusters::NetworkCommissioning::Commands; - static constexpr size_t kCommands = 5; // Count of max possible commands assuming all features + static constexpr size_t kCommands = 4; // Count of max possible commands assuming all features ReturnErrorOnFailure(builder.EnsureAppendCapacity(kCommands)); if (mFeatureFlags.HasAny(Feature::kWiFiNetworkInterface, Feature::kThreadNetworkInterface)) diff --git a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp index e2bc9c8d8da08b..6fe79a538fc748 100644 --- a/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp +++ b/src/app/clusters/resource-monitoring-server/resource-monitoring-server.cpp @@ -191,7 +191,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust DataModel::ListBuilder & builder) { using namespace ResourceMonitoring::Commands; - using Priv = chip::Access::Privilege; + using Priv = Access::Privilege; ChipLogDetail(Zcl, "resourcemonitoring: EnumerateAcceptedCommands"); if (mResetConditionCommandSupported) diff --git a/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp b/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp index b1c8a3ec572175..9dbcc1af4e0163 100644 --- a/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp +++ b/src/app/clusters/software-diagnostics-server/software-diagnostics-server.cpp @@ -174,14 +174,14 @@ SoftwareDiagnosticsCommandHandler::EnumerateAcceptedCommands(const ConcreteClust DataModel::ListBuilder & builder) { using namespace Commands; - using Privilege = chip::Access::Privilege; + using Priv = Access::Privilege; if (!DeviceLayer::GetDiagnosticDataProvider().SupportsWatermarks()) { // No commmands. return CHIP_NO_ERROR; } ReturnErrorOnFailure(builder.EnsureAppendCapacity(1)); - return builder.Append({ ResetWatermarks::Id, {}, Privilege::kManage }); + return builder.Append({ ResetWatermarks::Id, {}, Priv::kManage }); } } // anonymous namespace diff --git a/src/controller/tests/TestServerCommandDispatch.cpp b/src/controller/tests/TestServerCommandDispatch.cpp index 0a72aa7e20e4d0..f7f739203aef33 100644 --- a/src/controller/tests/TestServerCommandDispatch.cpp +++ b/src/controller/tests/TestServerCommandDispatch.cpp @@ -109,7 +109,7 @@ CHIP_ERROR TestClusterCommandHandler::EnumerateAcceptedCommands(const ConcreteCl DataModel::ListBuilder & builder) { using namespace Clusters::UnitTesting::Commands; - using Priv = chip::Access::Privilege; + using Priv = Access::Privilege; if (!mOverrideAcceptedCommands) { From 316072b443ca263969ea9d3b8a63271d62c8f9f9 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Fri, 28 Feb 2025 02:04:34 +0000 Subject: [PATCH 37/39] Rephrasing Upgrading comment --- docs/upgrading.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/upgrading.md b/docs/upgrading.md index dfa3d157a4603f..f1396d4f737885 100644 --- a/docs/upgrading.md +++ b/docs/upgrading.md @@ -170,7 +170,7 @@ Changes for implementation: ```cpp using QF = DataModel::CommandQualityFlags; - using Priv = chip::Access::Privilege; + using Priv = Access::Privilege; ReturnErrorOnFailure(builder.AppendElements({ { Disable::Id, QF::kTimed, Priv::kOperate }, @@ -189,5 +189,5 @@ Changes for implementation: Important Notes: -Be sure to use `EnsureAppendCapacity` before single element Append -`ListBuilder::Append` as it will not grow the buffer if not available already +Use `EnsureAppendCapacity` before `ListBuilder::Append` to prevent buffer +overflow when appending a single element, this function never allocates. From 9c54176c6b6e8b73500a6e574285b146295ad692 Mon Sep 17 00:00:00 2001 From: Ricardo Torres Guzman Date: Fri, 28 Feb 2025 02:19:59 +0000 Subject: [PATCH 38/39] Some more fixes --- docs/upgrading.md | 4 ++-- .../clusters/network-commissioning/network-commissioning.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/upgrading.md b/docs/upgrading.md index f1396d4f737885..8e77cc3afe38ba 100644 --- a/docs/upgrading.md +++ b/docs/upgrading.md @@ -140,8 +140,8 @@ Changes for implementation #### EnumerateAcceptedCommands -Expanded `EnumerateAcceptedCommands` Interface to provide Attributes and -Privileges using a ListBuilder +Expanded `EnumerateAcceptedCommands` Interface to provide the Access Information +(Attributes and Qualities) using a ListBuilder `CommandHandlerInterface::EnumerateAcceptedCommands(const ConcreteClusterPath & cluster, CommandIdCallback callback, void * context)` becomes diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index f15d5fb1a493f0..a8dd6c83bd66fc 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1386,7 +1386,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust if (mFeatureFlags.Has(Feature::kPerDeviceCredentials)) { - ReturnErrorOnFailure(builder.Append({ QueryIdentity::Id, {} })); + ReturnErrorOnFailure(builder.Append({ QueryIdentity::Id, {}, Priv::kAdminister })); } return CHIP_NO_ERROR; From 088f797a7b2ad2a75053065e96b73fa4e5a07767 Mon Sep 17 00:00:00 2001 From: Ricardo Alberto Torres Guzman Date: Fri, 28 Feb 2025 09:39:42 -0600 Subject: [PATCH 39/39] Update src/app/clusters/network-commissioning/network-commissioning.cpp Co-authored-by: Andrei Litvin --- .../clusters/network-commissioning/network-commissioning.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/clusters/network-commissioning/network-commissioning.cpp b/src/app/clusters/network-commissioning/network-commissioning.cpp index a8dd6c83bd66fc..4fa6d541b4709b 100644 --- a/src/app/clusters/network-commissioning/network-commissioning.cpp +++ b/src/app/clusters/network-commissioning/network-commissioning.cpp @@ -1372,7 +1372,7 @@ CHIP_ERROR Instance::EnumerateAcceptedCommands(const ConcreteClusterPath & clust bool hasThread = mFeatureFlags.Has(Feature::kThreadNetworkInterface); bool hasWifi = mFeatureFlags.Has(Feature::kWiFiNetworkInterface); - if (hasThread | hasWifi) + if (hasThread || hasWifi) { ReturnErrorOnFailure(builder.AppendElements({ { ScanNetworks::Id, {}, Priv::kAdminister }, //