From d61bfd63f05aa8cdada4a584a95fc45ff0563474 Mon Sep 17 00:00:00 2001 From: mkardous-silabs <84793247+mkardous-silabs@users.noreply.github.com> Date: Tue, 30 Jan 2024 17:50:01 -0500 Subject: [PATCH 01/16] [ICD] Add Check-In message check when switching to idle mode (#31563) * Add Check-In message check when switching to idle mode * Rename function to something shorter Co-authored-by: Boris Zbarsky * Add unit test to validate fix * Rename last functions * add lib/support to the ICDConfigurationData dependencies * Apply suggestions from code review Co-authored-by: Boris Zbarsky * Fix comment * Refactor ICDManager dependency with InteractionModelEngine to introduce mediator * Clean up refactor * Address comments * Fix comment typos Co-authored-by: Junior Martinez <67972863+jmartinez-silabs@users.noreply.github.com> * Use a variable instead of GetInstance * Rename SetDurations to SetModeDurations * Fix typo --------- Co-authored-by: Boris Zbarsky Co-authored-by: Junior Martinez <67972863+jmartinez-silabs@users.noreply.github.com> --- src/app/BUILD.gn | 7 + src/app/InteractionModelEngine.cpp | 8 +- src/app/InteractionModelEngine.h | 38 ++--- src/app/SubscriptionManager.h | 67 +++++++++ src/app/icd/BUILD.gn | 3 +- src/app/icd/ICDConfigurationData.cpp | 13 ++ src/app/icd/ICDConfigurationData.h | 34 ++++- src/app/icd/ICDManager.cpp | 65 +++++++-- src/app/icd/ICDManager.h | 22 ++- src/app/server/Server.cpp | 3 +- src/app/tests/BUILD.gn | 2 +- src/app/tests/TestICDManager.cpp | 210 +++++++++++++++++++++++++-- 12 files changed, 422 insertions(+), 50 deletions(-) create mode 100644 src/app/SubscriptionManager.h diff --git a/src/app/BUILD.gn b/src/app/BUILD.gn index d2c97e188192ed..443919026df953 100644 --- a/src/app/BUILD.gn +++ b/src/app/BUILD.gn @@ -114,6 +114,12 @@ source_set("pre-encoded-value") { ] } +source_set("subscription-manager") { + sources = [ "SubscriptionManager.h" ] + + public_deps = [ "${chip_root}/src/lib/core" ] +} + source_set("message-def") { sources = [ "MessageDef/ArrayBuilder.cpp", @@ -247,6 +253,7 @@ static_library("interaction-model") { ":app_config", ":message-def", ":paths", + ":subscription-manager", "${chip_root}/src/app/icd:icd_config", "${chip_root}/src/app/icd:observer", "${chip_root}/src/lib/address_resolve", diff --git a/src/app/InteractionModelEngine.cpp b/src/app/InteractionModelEngine.cpp index 34e2c2055e36f2..2b73251fff3b09 100644 --- a/src/app/InteractionModelEngine.cpp +++ b/src/app/InteractionModelEngine.cpp @@ -330,7 +330,7 @@ void InteractionModelEngine::ShutdownMatchingSubscriptions(const Optional #include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - #include #include #include @@ -51,10 +36,14 @@ #include #include #include +#include +#include #include #include #include #include +#include +#include #include #include #include @@ -62,6 +51,17 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include @@ -79,7 +79,8 @@ class InteractionModelEngine : public Messaging::UnsolicitedMessageHandler, public Messaging::ExchangeDelegate, public CommandHandler::Callback, public ReadHandler::ManagementCallback, - public FabricTable::Delegate + public FabricTable::Delegate, + public SubscriptionManager { public: /** @@ -323,8 +324,9 @@ class InteractionModelEngine : public Messaging::UnsolicitedMessageHandler, CHIP_ERROR ResumeSubscriptions(); - // Check if a given subject (CAT or NodeId) has at least 1 active subscription - bool SubjectHasActiveSubscription(const FabricIndex aFabricIndex, const NodeId & subject); + bool SubjectHasActiveSubscription(const FabricIndex & aFabricIndex, const NodeId & subject) override; + + bool SubjectHasPersistedSubscription(const FabricIndex & aFabricIndex, const NodeId & subject) override; #if CONFIG_BUILD_FOR_HOST_UNIT_TEST // diff --git a/src/app/SubscriptionManager.h b/src/app/SubscriptionManager.h new file mode 100644 index 00000000000000..6ca47c19de8a8b --- /dev/null +++ b/src/app/SubscriptionManager.h @@ -0,0 +1,67 @@ +/* + * + * Copyright (c) 2024 Project CHIP Authors + * All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file + * This file defines an interface that exposes all the public subscription management APIs. + * The interface is implemented by the InteractionModelEngine to avoid creating unnecessary dependencies + * Since the IMEgine has more dependency than its consummers need. + * By leveraging the SubscriptionManager APIs, a consummer avoids depending on the global data model functions. + */ + +#pragma once + +#include +#include + +namespace chip { +namespace app { + +class SubscriptionManager +{ +public: + virtual ~SubscriptionManager(){}; + + /** + * @brief Check if a given subject (CAT or operational NodeId) has at least 1 active subscription. + * + * @param[in] aFabricIndex fabric index of the subject + * @param[in] subject NodeId of the subect + * + * @return true subject has at least one active subscription with the device + * false subject doesn't have any acitve subscription with the device + */ + virtual bool SubjectHasActiveSubscription(const FabricIndex & aFabricIndex, const NodeId & subject) = 0; + + /** + * @brief Check if a given subject (CAT or operational NodeId) has at least 1 persisted subscription. + * If CHIP_CONFIG_PERSIST_SUBSCRIPTIONS is not enable, function alweays returns false. + * See the CHIP_CONFIG_PERSIST_SUBSCRIPTIONS for more information on persisted subscriptions. + * + * @param[in] aFabricIndex fabric index of the subject + * @param[in] subject NodeId of the subect + * + * @return true subject has at least one persisted subscription with the device + * false subject doesn't have any acitve subscription with the device + * false If CHIP_CONFIG_PERSIST_SUBSCRIPTIONS is not enabled + */ + virtual bool SubjectHasPersistedSubscription(const FabricIndex & aFabricIndex, const NodeId & subject) = 0; +}; + +} // namespace app +} // namespace chip diff --git a/src/app/icd/BUILD.gn b/src/app/icd/BUILD.gn index ba72052fffbffa..f1d3a8a382c9d0 100644 --- a/src/app/icd/BUILD.gn +++ b/src/app/icd/BUILD.gn @@ -70,7 +70,7 @@ source_set("manager") { ":notifier", ":observer", ":sender", - "${chip_root}/src/app:interaction-model", + "${chip_root}/src/app:subscription-manager", "${chip_root}/src/credentials:credentials", ] } @@ -114,5 +114,6 @@ source_set("configuration-data") { deps = [ ":icd_config", "${chip_root}/src/lib/core", + "${chip_root}/src/lib/support", ] } diff --git a/src/app/icd/ICDConfigurationData.cpp b/src/app/icd/ICDConfigurationData.cpp index 4df2ca75f217b9..9c2079a4386742 100644 --- a/src/app/icd/ICDConfigurationData.cpp +++ b/src/app/icd/ICDConfigurationData.cpp @@ -17,6 +17,7 @@ #include "ICDConfigurationData.h" #include +#include namespace chip { @@ -36,4 +37,16 @@ System::Clock::Milliseconds32 ICDConfigurationData::GetSlowPollingInterval() return mSlowPollingInterval; } +CHIP_ERROR ICDConfigurationData::SetModeDurations(uint32_t activeModeDuration_ms, uint32_t idleModeInterval_s) +{ + VerifyOrReturnError(activeModeDuration_ms <= (idleModeInterval_s * 1000), CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(idleModeInterval_s <= kMaxIdleModeDuration_s, CHIP_ERROR_INVALID_ARGUMENT); + VerifyOrReturnError(idleModeInterval_s >= kMinIdleModeDuration_s, CHIP_ERROR_INVALID_ARGUMENT); + + mIdleModeDuration_s = idleModeInterval_s; + mActiveModeDuration_ms = activeModeDuration_ms; + + return CHIP_NO_ERROR; +} + } // namespace chip diff --git a/src/app/icd/ICDConfigurationData.h b/src/app/icd/ICDConfigurationData.h index 48f3966a5e5948..2762077429b006 100644 --- a/src/app/icd/ICDConfigurationData.h +++ b/src/app/icd/ICDConfigurationData.h @@ -25,6 +25,11 @@ namespace chip { namespace app { // Forward declaration of ICDManager to allow it to be friend with ICDConfigurationData class ICDManager; + +// Forward declaration of TestICDManager to allow it to be friend with the ICDConfigurationData +// Used in unit tests +class TestICDManager; + } // namespace app /** @@ -47,9 +52,9 @@ class ICDConfigurationData static ICDConfigurationData & GetInstance() { return instance; }; - uint32_t GetIdleModeDurationSec() { return mIdleInterval_s; } + uint32_t GetIdleModeDurationSec() { return mIdleModeDuration_s; } - uint32_t GetActiveModeDurationMs() { return mActiveInterval_ms; } + uint32_t GetActiveModeDurationMs() { return mActiveModeDuration_ms; } uint16_t GetActiveModeThresholdMs() { return mActiveThreshold_ms; } @@ -89,6 +94,7 @@ class ICDConfigurationData // the ICDManager, the ICDManager is a friend that can access the private setters. If a consummer needs to be notified when a // value is changed, they can leverage the Observer events the ICDManager generates. See src/app/icd/ICDStateObserver.h friend class chip::app::ICDManager; + friend class chip::app::TestICDManager; void SetICDMode(ICDMode mode) { mICDMode = mode; }; void SetICDCounter(uint32_t count) { mICDCounter = count; } @@ -97,15 +103,31 @@ class ICDConfigurationData static constexpr uint32_t kMinLitActiveModeThreshold_ms = 5000; - static_assert((CHIP_CONFIG_ICD_IDLE_MODE_DURATION_SEC) <= 64800, + /** + * @brief Change the ActiveModeDuration and IdleModeDuration value + * To only change one value, pass the old value for the other one + * + * @param[in] activeModeDuration_ms new ActiveModeDuration value + * @param[in] idleModeDuration_s new IdleModeDuration value + * @return CHIP_ERROR CHIP_ERROR_INVALID_ARGUMENT is returned if idleModeDuration_s is smaller than activeModeDuration_ms + * is returned if idleModeDuration_s is greater than 64800 seconds + * is returned if idleModeDuration_s is smaller than 1 seconds + * CHIP_NO_ERROR is returned if the new intervals were set + */ + CHIP_ERROR SetModeDurations(uint32_t activeModeDuration_ms, uint32_t idleModeDuration_s); + + static constexpr uint32_t kMaxIdleModeDuration_s = 64800; + static constexpr uint32_t kMinIdleModeDuration_s = 1; + + static_assert((CHIP_CONFIG_ICD_IDLE_MODE_DURATION_SEC) <= kMaxIdleModeDuration_s, "Spec requires the IdleModeDuration to be equal or inferior to 64800s."); - static_assert((CHIP_CONFIG_ICD_IDLE_MODE_DURATION_SEC) >= 1, + static_assert((CHIP_CONFIG_ICD_IDLE_MODE_DURATION_SEC) >= kMinIdleModeDuration_s, "Spec requires the IdleModeDuration to be equal or greater to 1s."); - uint32_t mIdleInterval_s = CHIP_CONFIG_ICD_IDLE_MODE_DURATION_SEC; + uint32_t mIdleModeDuration_s = CHIP_CONFIG_ICD_IDLE_MODE_DURATION_SEC; static_assert((CHIP_CONFIG_ICD_ACTIVE_MODE_DURATION_MS) <= (CHIP_CONFIG_ICD_IDLE_MODE_DURATION_SEC * kMillisecondsPerSecond), "Spec requires the IdleModeDuration be equal or greater to the ActiveModeDuration."); - uint32_t mActiveInterval_ms = CHIP_CONFIG_ICD_ACTIVE_MODE_DURATION_MS; + uint32_t mActiveModeDuration_ms = CHIP_CONFIG_ICD_ACTIVE_MODE_DURATION_MS; uint16_t mActiveThreshold_ms = CHIP_CONFIG_ICD_ACTIVE_MODE_THRESHOLD_MS; diff --git a/src/app/icd/ICDManager.cpp b/src/app/icd/ICDManager.cpp index 99e8e950dd853f..f6c1fe5cca32b8 100644 --- a/src/app/icd/ICDManager.cpp +++ b/src/app/icd/ICDManager.cpp @@ -18,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -41,12 +40,13 @@ static_assert(UINT8_MAX >= CHIP_CONFIG_MAX_EXCHANGE_CONTEXTS, "ICDManager::mOpenExchangeContextCount cannot hold count for the max exchange count"); void ICDManager::Init(PersistentStorageDelegate * storage, FabricTable * fabricTable, Crypto::SymmetricKeystore * symmetricKeystore, - Messaging::ExchangeManager * exchangeManager) + Messaging::ExchangeManager * exchangeManager, SubscriptionManager * manager) { VerifyOrDie(storage != nullptr); VerifyOrDie(fabricTable != nullptr); VerifyOrDie(symmetricKeystore != nullptr); VerifyOrDie(exchangeManager != nullptr); + VerifyOrDie(manager != nullptr); // LIT ICD Verification Checks if (SupportsFeature(Feature::kLongIdleTimeSupport)) @@ -63,11 +63,13 @@ void ICDManager::Init(PersistentStorageDelegate * storage, FabricTable * fabricT // "LIT support is required for slow polling intervals superior to 15 seconds"); } - mStorage = storage; - mFabricTable = fabricTable; VerifyOrDie(ICDNotifier::GetInstance().Subscribe(this) == CHIP_NO_ERROR); + + mStorage = storage; + mFabricTable = fabricTable; mSymmetricKeystore = symmetricKeystore; mExchangeManager = exchangeManager; + mSubManager = manager; VerifyOrDie(InitCounter() == CHIP_NO_ERROR); @@ -78,14 +80,19 @@ void ICDManager::Init(PersistentStorageDelegate * storage, FabricTable * fabricT void ICDManager::Shutdown() { ICDNotifier::GetInstance().Unsubscribe(this); + // cancel any running timer of the icd DeviceLayer::SystemLayer().CancelTimer(OnIdleModeDone, this); DeviceLayer::SystemLayer().CancelTimer(OnActiveModeDone, this); DeviceLayer::SystemLayer().CancelTimer(OnTransitionToIdle, this); + ICDConfigurationData::GetInstance().SetICDMode(ICDConfigurationData::ICDMode::SIT); mOperationalState = OperationalState::ActiveMode; - mStorage = nullptr; - mFabricTable = nullptr; + + mStorage = nullptr; + mFabricTable = nullptr; + mSubManager = nullptr; + mStateObserverPool.ReleaseAll(); mICDSenderPool.ReleaseAll(); } @@ -137,8 +144,7 @@ void ICDManager::SendCheckInMsgs() continue; } - bool active = - InteractionModelEngine::GetInstance()->SubjectHasActiveSubscription(entry.fabricIndex, entry.monitoredSubject); + bool active = mSubManager->SubjectHasActiveSubscription(entry.fabricIndex, entry.monitoredSubject); if (active) { continue; @@ -272,7 +278,9 @@ void ICDManager::UpdateOperationState(OperationalState state) mOperationalState = OperationalState::IdleMode; // When the active mode interval is 0, we stay in idleMode until a notification brings the icd into active mode - if (ICDConfigurationData::GetInstance().GetActiveModeDurationMs() > 0) + // unless the device would need to send Check-In messages + // TODO(#30281) : Verify how persistent subscriptions affects this at ICDManager::Init + if (ICDConfigurationData::GetInstance().GetActiveModeDurationMs() > 0 || CheckInMessagesWouldBeSent()) { uint32_t idleModeDuration = ICDConfigurationData::GetInstance().GetIdleModeDurationSec(); DeviceLayer::SystemLayer().StartTimer(System::Clock::Seconds32(idleModeDuration), OnIdleModeDone, this); @@ -538,5 +546,44 @@ void ICDManager::postObserverEvent(ObserverEventType event) } }); } + +bool ICDManager::CheckInMessagesWouldBeSent() +{ + for (const auto & fabricInfo : *mFabricTable) + { + uint16_t supported_clients = ICDConfigurationData::GetInstance().GetClientsSupportedPerFabric(); + + ICDMonitoringTable table(*mStorage, fabricInfo.GetFabricIndex(), supported_clients /*Table entry limit*/, + mSymmetricKeystore); + if (table.IsEmpty()) + { + continue; + } + + for (uint16_t i = 0; i < table.Limit(); i++) + { + ICDMonitoringEntry entry(mSymmetricKeystore); + CHIP_ERROR err = table.Get(i, entry); + if (err == CHIP_ERROR_NOT_FOUND) + { + break; + } + + if (err != CHIP_NO_ERROR) + { + // Try to fetch the next entry upon failure (should not happen). + ChipLogError(AppServer, "Failed to retrieved ICDMonitoring entry, will try next entry."); + continue; + } + + // At least one registration would require a Check-In message + VerifyOrReturnValue(mSubManager->SubjectHasActiveSubscription(entry.fabricIndex, entry.monitoredSubject), true); + } + } + + // None of the registrations would require a Check-In message + return false; +} + } // namespace app } // namespace chip diff --git a/src/app/icd/ICDManager.h b/src/app/icd/ICDManager.h index 81011c688858c3..429942302d2227 100644 --- a/src/app/icd/ICDManager.h +++ b/src/app/icd/ICDManager.h @@ -17,6 +17,7 @@ #pragma once #include +#include #include #include #include @@ -66,7 +67,7 @@ class ICDManager : public ICDListener ICDManager() {} void Init(PersistentStorageDelegate * storage, FabricTable * fabricTable, Crypto::SymmetricKeystore * symmetricKeyStore, - Messaging::ExchangeManager * exchangeManager); + Messaging::ExchangeManager * exchangeManager, SubscriptionManager * manager); void Shutdown(); void UpdateICDMode(); void UpdateOperationState(OperationalState state); @@ -100,7 +101,7 @@ class ICDManager : public ICDListener #endif // Implementation of ICDListener functions. - // Callers must origin from the chip task context or be holding the ChipStack lock. + // Callers must origin from the chip task context or hold the ChipStack lock. void OnNetworkActivity() override; void OnKeepActiveRequest(KeepActiveFlags request) override; void OnActiveRequestWithdrawal(KeepActiveFlags request) override; @@ -129,15 +130,28 @@ class ICDManager : public ICDListener uint8_t mCheckInRequestCount = 0; private: + /** + * @brief Function checks if at least one client registration would require a Check-In message + * + * @return true At least one registration would require an Check-In message if we were entering ActiveMode. + * @return false None of the registration would require a Check-In message either because there are no registration or because + * they all have associated subscriptions. + */ + bool CheckInMessagesWouldBeSent(); + KeepActiveFlags mKeepActiveFlags{ 0 }; // Initialize mOperationalState to ActiveMode so the init sequence at bootup triggers the IdleMode behaviour first. - OperationalState mOperationalState = OperationalState::ActiveMode; + OperationalState mOperationalState = OperationalState::ActiveMode; + PersistentStorageDelegate * mStorage = nullptr; FabricTable * mFabricTable = nullptr; Messaging::ExchangeManager * mExchangeManager = nullptr; - bool mTransitionToIdleCalled = false; Crypto::SymmetricKeystore * mSymmetricKeystore = nullptr; + SubscriptionManager * mSubManager = nullptr; + + bool mTransitionToIdleCalled = false; + ObjectPool mStateObserverPool; ObjectPool mICDSenderPool; diff --git a/src/app/server/Server.cpp b/src/app/server/Server.cpp index 4a0fa91f56d520..3c33c45537d5ef 100644 --- a/src/app/server/Server.cpp +++ b/src/app/server/Server.cpp @@ -339,7 +339,8 @@ CHIP_ERROR Server::Init(const ServerInitParams & initParams) mICDManager.RegisterObserver(mReportScheduler); mICDManager.RegisterObserver(&app::DnssdServer::Instance()); - mICDManager.Init(mDeviceStorage, &GetFabricTable(), mSessionKeystore, &mExchangeMgr); + mICDManager.Init(mDeviceStorage, &GetFabricTable(), mSessionKeystore, &mExchangeMgr, + chip::app::InteractionModelEngine::GetInstance()); #endif // CHIP_CONFIG_ENABLE_ICD_SERVER // This code is necessary to restart listening to existing groups after a reboot diff --git a/src/app/tests/BUILD.gn b/src/app/tests/BUILD.gn index 9a21f1f4589d81..520fb3adf85675 100644 --- a/src/app/tests/BUILD.gn +++ b/src/app/tests/BUILD.gn @@ -231,7 +231,7 @@ chip_test_suite_using_nltest("tests") { # Do not run TestCommissionManager when running ICD specific unit tests. # ICDManager has a dependency on the Accessors.h file which causes a link error # when building the TestCommissionManager - if (!chip_enable_icd_server && chip_config_network_layer_ble && + if (chip_config_network_layer_ble && (chip_device_platform == "linux" || chip_device_platform == "darwin")) { test_sources += [ "TestCommissionManager.cpp" ] public_deps += [ "${chip_root}/src/app/server" ] diff --git a/src/app/tests/TestICDManager.cpp b/src/app/tests/TestICDManager.cpp index f4ff46fd713556..06669b45d1cd51 100644 --- a/src/app/tests/TestICDManager.cpp +++ b/src/app/tests/TestICDManager.cpp @@ -16,11 +16,14 @@ * limitations under the License. */ #include +#include #include #include #include #include #include +#include +#include #include #include #include @@ -68,6 +71,21 @@ class TestICDStateObserver : public app::ICDStateObserver void OnICDModeChange() {} }; +class TestSubscriptionManager : public SubscriptionManager +{ +public: + TestSubscriptionManager() = default; + ~TestSubscriptionManager(){}; + + void SetReturnValue(bool value) { mReturnValue = value; }; + + bool SubjectHasActiveSubscription(const FabricIndex & aFabricIndex, const NodeId & subject) { return mReturnValue; }; + bool SubjectHasPersistedSubscription(const FabricIndex & aFabricIndex, const NodeId & subject) { return mReturnValue; }; + +private: + bool mReturnValue = false; +}; + class TestContext : public chip::Test::AppContext { public: @@ -93,7 +111,7 @@ class TestContext : public chip::Test::AppContext CHIP_ERROR SetUp() override { ReturnErrorOnFailure(chip::Test::AppContext::SetUp()); - mICDManager.Init(&testStorage, &GetFabricTable(), &mKeystore, &GetExchangeManager()); + mICDManager.Init(&testStorage, &GetFabricTable(), &mKeystore, &GetExchangeManager(), &mSubManager); mICDManager.RegisterObserver(&mICDStateObserver); return CHIP_NO_ERROR; } @@ -108,6 +126,7 @@ class TestContext : public chip::Test::AppContext System::Clock::Internal::MockClock mMockClock; TestSessionKeystoreImpl mKeystore; app::ICDManager mICDManager; + TestSubscriptionManager mSubManager; TestPersistentStorageDelegate testStorage; private: @@ -142,17 +161,17 @@ class TestICDManager // After the init we should be in Idle mode NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); AdvanceClockAndRunEventLoop(ctx, SecondsToMilliseconds(ICDConfigurationData::GetInstance().GetIdleModeDurationSec()) + 1); - // Idle mode interval expired, ICDManager transitioned to the ActiveMode. + // Idle mode Duration expired, ICDManager transitioned to the ActiveMode. NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::ActiveMode); AdvanceClockAndRunEventLoop(ctx, ICDConfigurationData::GetInstance().GetActiveModeDurationMs() + 1); - // Active mode interval expired, ICDManager transitioned to the IdleMode. + // Active mode Duration expired, ICDManager transitioned to the IdleMode. NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); AdvanceClockAndRunEventLoop(ctx, SecondsToMilliseconds(ICDConfigurationData::GetInstance().GetIdleModeDurationSec()) + 1); - // Idle mode interval expired, ICDManager transitioned to the ActiveMode. + // Idle mode Duration expired, ICDManager transitioned to the ActiveMode. NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::ActiveMode); // Events updating the Operation to Active mode can extend the current active mode time by 1 Active mode threshold. - // Kick an active Threshold just before the end of the Active interval and validate that the active mode is extended. + // Kick an active Threshold just before the end of the ActiveMode duration and validate that the active mode is extended. AdvanceClockAndRunEventLoop(ctx, ICDConfigurationData::GetInstance().GetActiveModeDurationMs() - 1); ICDNotifier::GetInstance().NotifyNetworkActivityNotification(); AdvanceClockAndRunEventLoop(ctx, ICDConfigurationData::GetInstance().GetActiveModeThresholdMs() / 2); @@ -161,6 +180,175 @@ class TestICDManager NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); } + /** + * @brief Test verifies that the ICDManager starts its timers correctly based on if it will have any messages to send + * when the IdleModeDuration expires + */ + static void TestICDModeDurationsWith0ActiveModeDurationWithoutActiveSub(nlTestSuite * aSuite, void * aContext) + { + TestContext * ctx = static_cast(aContext); + typedef ICDListener::ICDManagementEvents ICDMEvent; + ICDConfigurationData & icdConfigData = ICDConfigurationData::GetInstance(); + + // Set FeatureMap - Configures CIP, UAT and LITS to 1 + ctx->mICDManager.SetTestFeatureMapValue(0x07); + + // Set that there are no matching subscriptions + ctx->mSubManager.SetReturnValue(false); + + // Set New durations for test case + uint32_t oldActiveModeDuration_ms = icdConfigData.GetActiveModeDurationMs(); + icdConfigData.SetModeDurations(0, icdConfigData.GetIdleModeDurationSec()); + + // Verify That ICDManager starts in Idle + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); + + // Reset IdleModeInterval since it was started before the ActiveModeDuration change + AdvanceClockAndRunEventLoop(ctx, SecondsToMilliseconds(icdConfigData.GetIdleModeDurationSec()) + 1); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::ActiveMode); + + // Force the device to return to IdleMode - Increase time by ActiveModeThreshold since ActiveModeDuration is now 0 + AdvanceClockAndRunEventLoop(ctx, icdConfigData.GetActiveModeThresholdMs() + 1); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); + + // Expire Idle mode duration; ICDManager should remain in IdleMode since it has no message to send + AdvanceClockAndRunEventLoop(ctx, SecondsToMilliseconds(icdConfigData.GetIdleModeDurationSec()) + 1); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); + + // Add an entry to the ICDMonitoringTable + ICDMonitoringTable table(ctx->testStorage, kTestFabricIndex1, kMaxTestClients, &(ctx->mKeystore)); + + ICDMonitoringEntry entry(&(ctx->mKeystore)); + entry.checkInNodeID = kClientNodeId11; + entry.monitoredSubject = kClientNodeId11; + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == entry.SetKey(ByteSpan(kKeyBuffer1a))); + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == table.Set(0, entry)); + + // Trigger register event after first entry was added + ICDNotifier::GetInstance().NotifyICDManagementEvent(ICDMEvent::kTableUpdated); + + // Check ICDManager is now in the LIT operating mode + NL_TEST_ASSERT(aSuite, icdConfigData.GetICDMode() == ICDConfigurationData::ICDMode::LIT); + + // Kick an ActiveModeThreshold since a Registration can only happen from an incoming message that would transition the ICD + // to ActiveMode + ICDNotifier::GetInstance().NotifyNetworkActivityNotification(); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::ActiveMode); + + // Return the device to return to IdleMode - Increase time by ActiveModeThreshold since ActiveModeDuration is 0 + AdvanceClockAndRunEventLoop(ctx, icdConfigData.GetActiveModeThresholdMs() + 1); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); + + // Expire IdleModeDuration - Device should be in ActiveMode since it has an ICDM registration + AdvanceClockAndRunEventLoop(ctx, SecondsToMilliseconds(icdConfigData.GetIdleModeDurationSec()) + 1); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::ActiveMode); + + // Remove entry from the fabric - ICDManager won't have any messages to send + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == table.Remove(0)); + NL_TEST_ASSERT(aSuite, table.IsEmpty()); + + // Return the device to return to IdleMode - Increase time by ActiveModeThreshold since ActiveModeDuration is 0 + AdvanceClockAndRunEventLoop(ctx, icdConfigData.GetActiveModeThresholdMs() + 1); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); + + // Expire Idle mode duration; ICDManager should remain in IdleMode since it has no message to send + AdvanceClockAndRunEventLoop(ctx, SecondsToMilliseconds(icdConfigData.GetIdleModeDurationSec()) + 1); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); + + // Reset Old durations + icdConfigData.SetModeDurations(oldActiveModeDuration_ms, icdConfigData.GetIdleModeDurationSec()); + } + + /** + * @brief Test verifies that the ICDManager remains in IdleMode since it will not have any messages to send + * when the IdleModeDuration expires + */ + static void TestICDModeDurationsWith0ActiveModeDurationWithActiveSub(nlTestSuite * aSuite, void * aContext) + { + TestContext * ctx = static_cast(aContext); + typedef ICDListener::ICDManagementEvents ICDMEvent; + ICDConfigurationData & icdConfigData = ICDConfigurationData::GetInstance(); + + // Set FeatureMap - Configures CIP, UAT and LITS to 1 + ctx->mICDManager.SetTestFeatureMapValue(0x07); + + // Set that there are not matching subscriptions + ctx->mSubManager.SetReturnValue(true); + + // Set New durations for test case + uint32_t oldActiveModeDuration_ms = icdConfigData.GetActiveModeDurationMs(); + icdConfigData.SetModeDurations(0, icdConfigData.GetIdleModeDurationSec()); + + // Verify That ICDManager starts in Idle + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); + + // Reset IdleModeInterval since it was started before the ActiveModeDuration change + AdvanceClockAndRunEventLoop(ctx, SecondsToMilliseconds(icdConfigData.GetIdleModeDurationSec()) + 1); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::ActiveMode); + + // Force the device to return to IdleMode - Increase time by ActiveModeThreshold since ActiveModeDuration is now 0 + AdvanceClockAndRunEventLoop(ctx, icdConfigData.GetActiveModeThresholdMs() + 1); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); + + // Expire Idle mode duration; ICDManager should remain in IdleMode since it has no message to send + AdvanceClockAndRunEventLoop(ctx, SecondsToMilliseconds(icdConfigData.GetIdleModeDurationSec()) + 1); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); + + // Add an entry to the ICDMonitoringTable + ICDMonitoringTable table(ctx->testStorage, kTestFabricIndex1, kMaxTestClients, &(ctx->mKeystore)); + + ICDMonitoringEntry entry(&(ctx->mKeystore)); + entry.checkInNodeID = kClientNodeId11; + entry.monitoredSubject = kClientNodeId11; + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == entry.SetKey(ByteSpan(kKeyBuffer1a))); + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == table.Set(0, entry)); + + // Trigger register event after first entry was added + ICDNotifier::GetInstance().NotifyICDManagementEvent(ICDMEvent::kTableUpdated); + + // Check ICDManager is now in the LIT operating mode + NL_TEST_ASSERT(aSuite, icdConfigData.GetICDMode() == ICDConfigurationData::ICDMode::LIT); + + // Kick an ActiveModeThreshold since a Registration can only happen from an incoming message that would transition the ICD + // to ActiveMode + ICDNotifier::GetInstance().NotifyNetworkActivityNotification(); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::ActiveMode); + + // Return the device to return to IdleMode - Increase time by ActiveModeThreshold since ActiveModeDuration is 0 + AdvanceClockAndRunEventLoop(ctx, icdConfigData.GetActiveModeThresholdMs() + 1); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); + + // Expire IdleModeDuration - Device stay in IdleMode since it has an active subscription for the ICDM entry + AdvanceClockAndRunEventLoop(ctx, SecondsToMilliseconds(icdConfigData.GetIdleModeDurationSec()) + 1); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); + + // Remove entry from the fabric + NL_TEST_ASSERT(aSuite, CHIP_NO_ERROR == table.Remove(0)); + NL_TEST_ASSERT(aSuite, table.IsEmpty()); + + // Trigger unregister event after last entry was removed + ICDNotifier::GetInstance().NotifyICDManagementEvent(ICDMEvent::kTableUpdated); + + // Check ICDManager is now in the LIT operating mode + NL_TEST_ASSERT(aSuite, icdConfigData.GetICDMode() == ICDConfigurationData::ICDMode::SIT); + + // Kick an ActiveModeThreshold since a Unregistration can only happen from an incoming message that would transition the ICD + // to ActiveMode + ICDNotifier::GetInstance().NotifyNetworkActivityNotification(); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::ActiveMode); + + // Return the device to return to IdleMode - Increase time by ActiveModeThreshold since ActiveModeDuration is 0 + AdvanceClockAndRunEventLoop(ctx, icdConfigData.GetActiveModeThresholdMs() + 1); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); + + // Expire Idle mode duration; ICDManager should remain in IdleMode since it has no message to send + AdvanceClockAndRunEventLoop(ctx, SecondsToMilliseconds(icdConfigData.GetIdleModeDurationSec()) + 1); + NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); + + // Reset Old durations + icdConfigData.SetModeDurations(oldActiveModeDuration_ms, icdConfigData.GetIdleModeDurationSec()); + } + static void TestKeepActivemodeRequests(nlTestSuite * aSuite, void * aContext) { TestContext * ctx = static_cast(aContext); @@ -170,7 +358,7 @@ class TestICDManager // Setting a requirement will transition the ICD to active mode. notifier.NotifyActiveRequestNotification(ActiveFlag::kCommissioningWindowOpen); NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::ActiveMode); - // Advance time so active mode interval expires. + // Advance time so active mode duration expires. AdvanceClockAndRunEventLoop(ctx, ICDConfigurationData::GetInstance().GetActiveModeDurationMs() + 1); // Requirement flag still set. We stay in active mode NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::ActiveMode); @@ -183,13 +371,13 @@ class TestICDManager // Requirement will transition us to active mode. NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::ActiveMode); - // Advance time, but by less than the active mode interval and remove the requirement. + // Advance time, but by less than the active mode duration and remove the requirement. // We should stay in active mode. AdvanceClockAndRunEventLoop(ctx, ICDConfigurationData::GetInstance().GetActiveModeDurationMs() / 2); notifier.NotifyActiveRequestWithdrawal(ActiveFlag::kFailSafeArmed); NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::ActiveMode); - // Advance time again, The activemode interval is completed. + // Advance time again, The activemode duration is completed. AdvanceClockAndRunEventLoop(ctx, ICDConfigurationData::GetInstance().GetActiveModeDurationMs() + 1); NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::IdleMode); @@ -197,7 +385,7 @@ class TestICDManager notifier.NotifyActiveRequestNotification(ActiveFlag::kFailSafeArmed); notifier.NotifyActiveRequestNotification(ActiveFlag::kExchangeContextOpen); NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::ActiveMode); - // advance time so the active mode interval expires. + // advance time so the active mode duration expires. AdvanceClockAndRunEventLoop(ctx, ICDConfigurationData::GetInstance().GetActiveModeDurationMs() + 1); // A requirement flag is still set. We stay in active mode. NL_TEST_ASSERT(aSuite, ctx->mICDManager.mOperationalState == ICDManager::OperationalState::ActiveMode); @@ -352,6 +540,10 @@ namespace { static const nlTest sTests[] = { NL_TEST_DEF("TestICDModeDurations", TestICDManager::TestICDModeDurations), NL_TEST_DEF("TestOnSubscriptionReport", TestICDManager::TestOnSubscriptionReport), + NL_TEST_DEF("TestICDModeDurationsWith0ActiveModeDurationWithoutActiveSub", + TestICDManager::TestICDModeDurationsWith0ActiveModeDurationWithoutActiveSub), + NL_TEST_DEF("TestICDModeDurationsWith0ActiveModeDurationWithActiveSub", + TestICDManager::TestICDModeDurationsWith0ActiveModeDurationWithActiveSub), NL_TEST_DEF("TestKeepActivemodeRequests", TestICDManager::TestKeepActivemodeRequests), NL_TEST_DEF("TestICDMRegisterUnregisterEvents", TestICDManager::TestICDMRegisterUnregisterEvents), NL_TEST_DEF("TestICDCounter", TestICDManager::TestICDCounter), From 506865dee86af396e54734dff96b5a3ddd3fdaf1 Mon Sep 17 00:00:00 2001 From: C Freeman Date: Tue, 30 Jan 2024 17:54:28 -0500 Subject: [PATCH 02/16] TC-IDM-10.4: add steps and fix name (#31780) --- src/python_testing/TC_pics_checker.py | 37 +++++++++++++++++++++------ 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/src/python_testing/TC_pics_checker.py b/src/python_testing/TC_pics_checker.py index d7f076b471173d..6d49142f8f40b2 100644 --- a/src/python_testing/TC_pics_checker.py +++ b/src/python_testing/TC_pics_checker.py @@ -20,7 +20,7 @@ from basic_composition_support import BasicCompositionTests from global_attribute_ids import GlobalAttributeIds from matter_testing_support import (AttributePathLocation, ClusterPathLocation, CommandPathLocation, FeaturePathLocation, - MatterBaseTest, async_test_body, default_matter_test_main) + MatterBaseTest, TestStep, async_test_body, default_matter_test_main) from mobly import asserts from spec_parsing_support import build_xml_clusters @@ -101,27 +101,48 @@ def _add_pics_for_lists(self, cluster_id: int, attribute_id_of_element_list: Glo self._check_and_record_errors(location, required, pics) - def test_TC_pics_checker(self): + def steps_TC_IDM_10_4(self): + return [TestStep(1, "TH performs a wildcard read of all attributes on the endpoint under test"), + TestStep(2, "For every standard cluster: If the cluster is present on the endpoint, ensure the server-side PICS code for the cluster is present in the PICS file (e.g. OO.S for On/Off cluster).If the cluster is not present on the endpoint, ensure the cluster server PICS code is not present in the PICS file."), + TestStep(3, "For every standard cluster, for every attribute in the cluster:If the cluster is present on the endpoint and the attribute ID is present in the AttributeList global attribute within the cluster, ensure the server-side PICS code for the attribute is present in the PICS file (e.g. OO.S.A000 for On/Off cluster’s OnOff attribute).Otherwise, ensure the attribute PICS code is NOT present in the PICS file."), + TestStep(4, "For every cluster present in the spec, for every client → server command in the cluster: If the cluster is present on the endpoint and the command id is present in the accepted commands list, ensure the PICS code for the accepted command is present in the PICS file. Otherwise, ensure the accepted command PICS code is not present in the PICS file."), + TestStep(5, "For every cluster present in the spec, for every server → client command in the cluster: If the cluster is present on the endpoint and the command id is present in the generated commands list, ensure the PICS code for the generated command is present in the PICS file. Otherwise, ensure the generated command PICS code is not present in the PICS file."), + TestStep(6, "For every cluster present in the spec, for every feature in the cluster: If the cluster is present on the endpoint and the feature is marked in the feature map, ensure the PICS code for the feature is present in the PICS file. Otherwise, ensure the feature PICS code is not present in the PICS file.")] + + def test_TC_IDM_10_4(self): + # wildcard read is done in setup_class + self.step(1) self.endpoint_id = self.matter_test_config.endpoint self.endpoint = self.endpoints_tlv[self.endpoint_id] self.success = True - for cluster_id, cluster in Clusters.ClusterObjects.ALL_CLUSTERS.items(): - # Data model XML is used to get the PICS code for this cluster. If we don't know the PICS - # code, we can't evaluate the PICS list. Clusters that are present on the device but are - # not present in the spec are checked in the IDM tests. - if cluster_id not in self.xml_clusters or self.xml_clusters[cluster_id].pics is None: - continue + # Data model XML is used to get the PICS code for this cluster. If we don't know the PICS + # code, we can't evaluate the PICS list. Clusters that are present on the device but are + # not present in the spec are checked in the IDM tests. + checkable_clusters = {cluster_id: cluster for cluster_id, cluster in Clusters.ClusterObjects.ALL_CLUSTERS.items( + ) if cluster_id in self.xml_clusters and self.xml_clusters[cluster_id].pics is not None} + self.step(2) + for cluster_id, cluster in checkable_clusters.items(): # Ensure the PICS.S code is correctly marked pics_cluster = f'{self.xml_clusters[cluster_id].pics}.S' location = ClusterPathLocation(endpoint_id=self.endpoint_id, cluster_id=cluster_id) self._check_and_record_errors(location, cluster_id in self.endpoint, pics_cluster) + self.step(3) + for cluster_id, cluster in checkable_clusters.items(): self._add_pics_for_lists(cluster_id, GlobalAttributeIds.ATTRIBUTE_LIST_ID) + + self.step(4) + for cluster_id, cluster in checkable_clusters.items(): self._add_pics_for_lists(cluster_id, GlobalAttributeIds.ACCEPTED_COMMAND_LIST_ID) + + self.step(5) + for cluster_id, cluster in checkable_clusters.items(): self._add_pics_for_lists(cluster_id, GlobalAttributeIds.GENERATED_COMMAND_LIST_ID) + self.step(6) + for cluster_id, cluster in checkable_clusters.items(): try: cluster_features = cluster.Bitmaps.Feature except AttributeError: From 935aa45c8a4b03580014524f0370d259aec97a77 Mon Sep 17 00:00:00 2001 From: Justin Wood Date: Tue, 30 Jan 2024 14:56:01 -0800 Subject: [PATCH 03/16] When dimming a light/bulb over time or changing color the thread network can be spammed (#31778) * Adding diff * Restyled by clang-format --------- Co-authored-by: Restyled.io --- .../color-control-server.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/app/clusters/color-control-server/color-control-server.cpp b/src/app/clusters/color-control-server/color-control-server.cpp index a21a44ada8d23f..0f24ccd5b01e43 100644 --- a/src/app/clusters/color-control-server/color-control-server.cpp +++ b/src/app/clusters/color-control-server/color-control-server.cpp @@ -2602,6 +2602,24 @@ void ColorControlServer::updateTempCommand(EndpointId endpoint) isColorTempTransitionDone = computeNewColor16uValue(colorTempTransitionState); + if (!isColorTempTransitionDone) + { + // Check whether our color temperature has actually changed. If not, do + // nothing, and wait for it to change. + uint16_t currentColorTemp; + if (Attributes::ColorTemperatureMireds::Get(endpoint, ¤tColorTemp) != EMBER_ZCL_STATUS_SUCCESS) + { + // Why can't we read our attribute? + return; + } + + if (currentColorTemp == colorTempTransitionState->currentValue) + { + scheduleTimerCallbackMs(configureTempEventControl(endpoint), TRANSITION_UPDATE_TIME_MS.count()); + return; + } + } + Attributes::RemainingTime::Set(endpoint, colorTempTransitionState->timeRemaining); if (isColorTempTransitionDone) From af29ce60652f6e5ef27d86c61a912fce07efef67 Mon Sep 17 00:00:00 2001 From: "tianfeng.yang" <130436698+tianfeng-yang@users.noreply.github.com> Date: Wed, 31 Jan 2024 06:57:37 +0800 Subject: [PATCH 04/16] [Linux] Fix mDNSResolver memory leak (#31709) * [Linux] fix memory leak * [Python] call StopDiscovery after DiscoveryNodes --------- Co-authored-by: Andrei Litvin --- src/controller/python/ChipDeviceController-Discovery.cpp | 5 +++++ src/controller/python/chip/ChipDeviceCtrl.py | 7 +++++++ src/platform/Linux/DnssdImpl.cpp | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/controller/python/ChipDeviceController-Discovery.cpp b/src/controller/python/ChipDeviceController-Discovery.cpp index a9fc93b2fbc40b..7b502140a36bb6 100644 --- a/src/controller/python/ChipDeviceController-Discovery.cpp +++ b/src/controller/python/ChipDeviceController-Discovery.cpp @@ -89,6 +89,11 @@ PyChipError pychip_DeviceController_DiscoverCommissionableNodes(Controller::Devi return ToPyChipError(devCtrl->DiscoverCommissionableNodes(filter)); } +PyChipError pychip_DeviceController_StopCommissionableDiscovery(Controller::DeviceCommissioner * devCtrl) +{ + return ToPyChipError(devCtrl->StopCommissionableDiscovery()); +} + void pychip_DeviceController_IterateDiscoveredCommissionableNodes(Controller::DeviceCommissioner * devCtrl, IterateDiscoveredCommissionableNodesFunct cb) { diff --git a/src/controller/python/chip/ChipDeviceCtrl.py b/src/controller/python/chip/ChipDeviceCtrl.py index 20e21177fe2b1d..402f2b7cea694d 100644 --- a/src/controller/python/chip/ChipDeviceCtrl.py +++ b/src/controller/python/chip/ChipDeviceCtrl.py @@ -594,6 +594,9 @@ def DiscoverCommissionableNodes(self, filterType: discovery.FilterType = discove else: time.sleep(timeoutSecond) + self._ChipStack.Call( + lambda: self._dmLib.pychip_DeviceController_StopCommissionableDiscovery(self.devCtrl)).raise_on_error() + return self.GetDiscoveredDevices() def DiscoverCommissionableNodesLongDiscriminator(self, long_discriminator): @@ -1567,6 +1570,10 @@ def _InitLib(self): c_void_p, c_uint8, c_char_p] self._dmLib.pychip_DeviceController_DiscoverCommissionableNodes.restype = PyChipError + self._dmLib.pychip_DeviceController_StopCommissionableDiscovery.argtypes = [ + c_void_p] + self._dmLib.pychip_DeviceController_StopCommissionableDiscovery.restype = PyChipError + self._dmLib.pychip_DeviceController_DiscoverCommissionableNodesLongDiscriminator.argtypes = [ c_void_p, c_uint16] self._dmLib.pychip_DeviceController_DiscoverCommissionableNodesLongDiscriminator.restype = PyChipError diff --git a/src/platform/Linux/DnssdImpl.cpp b/src/platform/Linux/DnssdImpl.cpp index 5f46dd24d8728f..2a1873072fbb9e 100644 --- a/src/platform/Linux/DnssdImpl.cpp +++ b/src/platform/Linux/DnssdImpl.cpp @@ -893,7 +893,7 @@ void MdnsAvahi::HandleResolve(AvahiServiceResolver * resolver, AvahiIfIndex inte avahi_service_resolver_free(resolver); context->mResolver = avahi_service_resolver_new( context->mInstance->mClient, context->mInterface, context->mTransport, context->mName, context->mFullType.c_str(), - nullptr, context->mAddressType, static_cast(0), HandleResolve, context); + nullptr, context->mAddressType, static_cast(0), HandleResolve, userdata); if (context->mResolver == nullptr) { ChipLogError(DeviceLayer, "Avahi resolve failed on retry"); From 1b87b4ad81abd5d6617a1d2a792057edd4743e61 Mon Sep 17 00:00:00 2001 From: Nivi Sarkar <55898241+nivi-apple@users.noreply.github.com> Date: Tue, 30 Jan 2024 16:37:46 -0800 Subject: [PATCH 05/16] Add handling for SetAliroReaderConfig and ClearAliroReaderConfig commands (#31700) * Add handling for SetAliroReaderConfig and ClearAliroReaderConfig commands Add a delegate for the door lock to provide the attribute data for the aliro attributes * Apply suggestions from code review Co-authored-by: Boris Zbarsky * Address review comments * Apply suggestions from code review Co-authored-by: Boris Zbarsky * Addressed more review comments * Apply suggestions from code review Co-authored-by: Boris Zbarsky * Add an AttributeNullabilityType enum instead of boolean to indicate if an attribute is nullable or not * Restyled by clang-format * Make AttributeNullabilityType enum private --------- Co-authored-by: Boris Zbarsky Co-authored-by: Restyled.io --- .../door-lock-server/door-lock-delegate.h | 133 ++++++++ .../door-lock-server-callback.cpp | 12 + .../door-lock-server/door-lock-server.cpp | 292 +++++++++++++++++- .../door-lock-server/door-lock-server.h | 123 +++++++- 4 files changed, 557 insertions(+), 3 deletions(-) create mode 100644 src/app/clusters/door-lock-server/door-lock-delegate.h diff --git a/src/app/clusters/door-lock-server/door-lock-delegate.h b/src/app/clusters/door-lock-server/door-lock-delegate.h new file mode 100644 index 00000000000000..8908926822aa02 --- /dev/null +++ b/src/app/clusters/door-lock-server/door-lock-delegate.h @@ -0,0 +1,133 @@ +/* + * + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include + +namespace chip { +namespace app { +namespace Clusters { +namespace DoorLock { + +static constexpr size_t kAliroReaderVerificationKeySize = 65; + +static constexpr size_t kAliroReaderGroupIdentifierSize = 16; + +static constexpr size_t kAliroReaderGroupSubIdentifierSize = 16; + +static constexpr size_t kAliroGroupResolvingKeySize = 16; + +static constexpr size_t kAliroProtocolVersionSize = 2; + +static constexpr size_t kAliroSigningKeySize = 32; + +/** @brief + * Defines methods for implementing application-specific logic for the door lock cluster. + * It defines the interfaces that a door lock should implement to support Aliro provisioning attributes. + */ + +class Delegate +{ +public: + Delegate() = default; + + virtual ~Delegate() = default; + + /** + * @brief Get the Aliro verification key component of the Reader's key pair. + * + * @param[out] verificationKey The MutableByteSpan to copy the verification key into. On success, + * the callee must update the length to the length of the copied data. If the value of + * the attribute is null, the callee must set the MutableByteSpan to empty. + */ + virtual CHIP_ERROR GetAliroReaderVerificationKey(MutableByteSpan & verificationKey) = 0; + + /** + * @brief Get the Aliro Reader's group identifier + * + * @param[out] groupIdentifier The MutableByteSpan to copy the group identifier into. On success, + * the callee must update the length to the length of the copied data. If the value of + * the attribute is null, the callee must set the MutableByteSpan to empty. + */ + virtual CHIP_ERROR GetAliroReaderGroupIdentifier(MutableByteSpan & groupIdentifier) = 0; + + /** + * @brief Get the Aliro Reader's group subidentifier + * + * @param[out] groupSubIdentifier The MutableByteSpan to copy the group subidentifier into. On success, + * the callee must update the length to the length of the copied data. The MutableByteSpan + * must not be empty since the attribute is not nullable. + */ + virtual CHIP_ERROR GetAliroReaderGroupSubIdentifier(MutableByteSpan & groupSubIdentifier) = 0; + + /** + * @brief Get the Aliro expedited transaction supported protocol version at the given index. + * + * @param[in] index The index of the protocol version in the list. + * @param[out] protocolVersion The MutableByteSpan to copy the expedited transaction supported protocol version at the given + * index into. On success, the callee must update the length to the length of the copied data. + * @return CHIP_ERROR_PROVIDER_LIST_EXHAUSTED if the index is out of range for the attribute list. + */ + virtual CHIP_ERROR GetAliroExpeditedTransactionSupportedProtocolVersionAtIndex(size_t index, + MutableByteSpan & protocolVersion) = 0; + + /** + * @brief Get the Reader's group resolving key. + * + * @param[out] groupResolvingKey The MutableByteSpan to copy the group resolving key into. On success, + * the callee must update the length to the length of the copied data. If the value of + * the attribute is null, the callee must set the MutableByteSpan to empty. + */ + virtual CHIP_ERROR GetAliroGroupResolvingKey(MutableByteSpan & groupResolvingKey) = 0; + + /** + * @brief Get the Aliro supported BLE UWB protocol version at the given index. + * + * @param[in] index The index of the protocol version in the list. + * @param[out] protocolVersion The MutableByteSpan to copy the supported BLE UWB protocol version at the given index into. + * On success, the callee must update the length to the length of the copied data. + * @return CHIP_ERROR_PROVIDER_LIST_EXHAUSTED if the index is out of range for the attribute list. + */ + virtual CHIP_ERROR GetAliroSupportedBLEUWBProtocolVersionAtIndex(size_t index, MutableByteSpan & protocolVersion) = 0; + + /** + * @brief Get the Aliro BLE Advertising Version. + * + * @return The BLE Advertising Version. + */ + virtual uint8_t GetAliroBLEAdvertisingVersion() = 0; + + /** + * @brief Get the maximum number of Aliro credential issuer keys supported. + * + * @return The max number of Aliro credential issuer keys supported. + */ + virtual uint16_t GetNumberOfAliroCredentialIssuerKeysSupported() = 0; + + /** + * @brief Get the maximum number of Aliro endpoint keys supported. + * + * @return The max number of Aliro endpoint keys supported. + */ + virtual uint16_t GetNumberOfAliroEndpointKeysSupported() = 0; +}; + +} // namespace DoorLock +} // namespace Clusters +} // namespace app +} // namespace chip diff --git a/src/app/clusters/door-lock-server/door-lock-server-callback.cpp b/src/app/clusters/door-lock-server/door-lock-server-callback.cpp index a1644286c1af1a..64ab48232c4f40 100644 --- a/src/app/clusters/door-lock-server/door-lock-server-callback.cpp +++ b/src/app/clusters/door-lock-server/door-lock-server-callback.cpp @@ -243,3 +243,15 @@ emberAfPluginDoorLockGetFaceCredentialLengthConstraints(chip::EndpointId endpoin { return false; } + +bool __attribute__((weak)) +emberAfPluginDoorLockSetAliroReaderConfig(EndpointId endpointId, const ByteSpan & signingKey, const ByteSpan & verificationKey, + const ByteSpan & groupIdentifier, const Optional groupResolvingKey) +{ + return false; +} + +bool __attribute__((weak)) emberAfPluginDoorLockClearAliroReaderConfig(chip::EndpointId endpointId) +{ + return false; +} diff --git a/src/app/clusters/door-lock-server/door-lock-server.cpp b/src/app/clusters/door-lock-server/door-lock-server.cpp index b51a10e6f02744..5b975d5d88262c 100644 --- a/src/app/clusters/door-lock-server/door-lock-server.cpp +++ b/src/app/clusters/door-lock-server/door-lock-server.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -40,6 +41,7 @@ using namespace chip; using namespace chip::app; using namespace chip::app::DataModel; using namespace chip::app::Clusters::DoorLock; +using namespace chip::app::Clusters::DoorLock::Attributes; using chip::Protocols::InteractionModel::Status; static constexpr uint8_t DOOR_LOCK_SCHEDULE_MAX_HOUR = 23; @@ -47,6 +49,39 @@ static constexpr uint8_t DOOR_LOCK_SCHEDULE_MAX_MINUTE = 59; static constexpr uint32_t DOOR_LOCK_MAX_LOCK_TIMEOUT_SEC = MAX_INT32U_VALUE / MILLISECOND_TICKS_PER_SECOND; +static constexpr size_t kDoorLockDelegateTableSize = + EMBER_AF_DOOR_LOCK_CLUSTER_SERVER_ENDPOINT_COUNT + CHIP_DEVICE_CONFIG_DYNAMIC_ENDPOINT_COUNT; + +static_assert(kDoorLockDelegateTableSize <= kEmberInvalidEndpointIndex, "Door Lock Delegate table size error"); + +namespace chip { +namespace app { +namespace Clusters { +namespace DoorLock { + +Delegate * gDelegateTable[kDoorLockDelegateTableSize] = { nullptr }; + +Delegate * GetDelegate(EndpointId endpoint) +{ + uint16_t ep = emberAfGetClusterServerEndpointIndex(endpoint, DoorLock::Id, EMBER_AF_DOOR_LOCK_CLUSTER_SERVER_ENDPOINT_COUNT); + return (ep >= kDoorLockDelegateTableSize ? nullptr : gDelegateTable[ep]); +} + +void SetDefaultDelegate(EndpointId endpoint, Delegate * delegate) +{ + uint16_t ep = emberAfGetClusterServerEndpointIndex(endpoint, DoorLock::Id, EMBER_AF_DOOR_LOCK_CLUSTER_SERVER_ENDPOINT_COUNT); + // if endpoint is found + if (ep < ArraySize(gDelegateTable)) + { + gDelegateTable[ep] = delegate; + } +} + +} // namespace DoorLock +} // namespace Clusters +} // namespace app +} // namespace chip + DoorLockServer DoorLockServer::instance; class DoorLockClusterFabricDelegate : public chip::FabricTable::Delegate @@ -1569,9 +1604,33 @@ bool DoorLockServer::getMaxNumberOfCredentials(chip::EndpointId endpointId, Cred case CredentialTypeEnum::kFace: status = emberAfPluginDoorLockGetNumberOfFaceCredentialsSupported(endpointId, maxNumberOfCredentials); break; - case CredentialTypeEnum::kAliroCredentialIssuerKey: + case CredentialTypeEnum::kAliroCredentialIssuerKey: { + Delegate * delegate = GetDelegate(endpointId); + if (delegate == nullptr) + { + ChipLogError(Zcl, "Delegate is null"); + return false; + } + + maxNumberOfCredentials = delegate->GetNumberOfAliroCredentialIssuerKeysSupported(); + status = true; + break; + } case CredentialTypeEnum::kAliroEvictableEndpointKey: - case CredentialTypeEnum::kAliroNonEvictableEndpointKey: + case CredentialTypeEnum::kAliroNonEvictableEndpointKey: { + Delegate * delegate = GetDelegate(endpointId); + if (delegate == nullptr) + { + ChipLogError(Zcl, "Delegate is null"); + return false; + } + + // For AliroEvictableEndpointKey and AliroNonEvictableEndpointKey credential type, return the total + // number of endpoint keys supported. + maxNumberOfCredentials = delegate->GetNumberOfAliroEndpointKeysSupported(); + status = true; + break; + } default: return false; } @@ -3812,6 +3871,108 @@ bool emberAfDoorLockClusterClearHolidayScheduleCallback( return true; } +bool emberAfDoorLockClusterSetAliroReaderConfigCallback(CommandHandler * commandObj, const ConcreteCommandPath & commandPath, + const Commands::SetAliroReaderConfig::DecodableType & commandData) +{ + DoorLockServer::Instance().setAliroReaderConfigCommandHandler(commandObj, commandPath, commandData.signingKey, + commandData.verificationKey, commandData.groupIdentifier, + commandData.groupResolvingKey); + return true; +} + +bool emberAfDoorLockClusterClearAliroReaderConfigCallback(CommandHandler * commandObj, const ConcreteCommandPath & commandPath, + const Commands::ClearAliroReaderConfig::DecodableType & commandData) +{ + DoorLockServer::Instance().clearAliroReaderConfigCommandHandler(commandObj, commandPath); + return true; +} + +void DoorLockServer::setAliroReaderConfigCommandHandler(CommandHandler * commandObj, const ConcreteCommandPath & commandPath, + const ByteSpan & signingKey, const ByteSpan & verificationKey, + const ByteSpan & groupIdentifier, + const Optional & groupResolvingKey) +{ + EndpointId endpointID = commandPath.mEndpointId; + ChipLogProgress(Zcl, "[SetAliroReaderConfig] Incoming command [endpointId=%d]", endpointID); + + // If Aliro Provisioning feature is not supported, return UNSUPPORTED_COMMAND. + if (!SupportsAliroProvisioning(endpointID)) + { + ChipLogProgress(Zcl, "[SetAliroReaderConfig] Aliro Provisioning is not supported [endpointId=%d]", endpointID); + commandObj->AddStatus(commandPath, Status::UnsupportedCommand); + return; + } + + Delegate * delegate = GetDelegate(endpointID); + VerifyOrReturn(delegate != nullptr, ChipLogError(Zcl, "Delegate is null")); + + // If Aliro BLE UWB feature is supported and groupResolvingKey is not provided in the command, return INVALID_COMMAND. + if (SupportsAliroBLEUWB(endpointID) && !groupResolvingKey.HasValue()) + { + ChipLogProgress(Zcl, "[SetAliroReaderConfig] Aliro BLE UWB supported but Group Resolving Key is not provided"); + commandObj->AddStatus(commandPath, Status::InvalidCommand); + return; + } + + // Check if the size of the signingKey, verificationKey, groupIdentifier, groupResolvingKey parameters conform to the spec. + // Return INVALID_COMMAND if not. + if (signingKey.size() != kAliroSigningKeySize || verificationKey.size() != kAliroReaderVerificationKeySize || + groupIdentifier.size() != kAliroReaderGroupIdentifierSize || + (groupResolvingKey.HasValue() && groupResolvingKey.Value().size() != kAliroGroupResolvingKeySize)) + { + ChipLogProgress(Zcl, + "[SetAliroReaderConfig] One or more parameters in the command do not meet the size constraint as per spec"); + commandObj->AddStatus(commandPath, Status::ConstraintError); + return; + } + + uint8_t buffer[kAliroReaderVerificationKeySize]; + MutableByteSpan readerVerificationKey(buffer); + + CHIP_ERROR err = delegate->GetAliroReaderVerificationKey(readerVerificationKey); + + // If Aliro reader verification key attribute was not read successfuly, return INVALID_IN_STATE. Or if the verification key was + // read and is not null (i.e not empty), we can't set a new reader config without clearing the previous one, return + // INVALID_IN_STATE. + if (err != CHIP_NO_ERROR || !readerVerificationKey.empty()) + { + ChipLogProgress( + Zcl, "[SetAliroReaderConfig] Aliro reader verification key was not read or is not null. Return INVALID_IN_STATE"); + commandObj->AddStatus(commandPath, Status::InvalidInState); + return; + } + + EmberAfStatus status = EMBER_ZCL_STATUS_SUCCESS; + if (!emberAfPluginDoorLockSetAliroReaderConfig(endpointID, signingKey, verificationKey, groupIdentifier, groupResolvingKey)) + { + ChipLogProgress(Zcl, "[SetAliroReaderConfig] Unable to set aliro reader config [endpointId=%d]", endpointID); + status = EMBER_ZCL_STATUS_FAILURE; + } + sendClusterResponse(commandObj, commandPath, status); +} + +void DoorLockServer::clearAliroReaderConfigCommandHandler(CommandHandler * commandObj, const ConcreteCommandPath & commandPath) +{ + EndpointId endpointID = commandPath.mEndpointId; + ChipLogProgress(Zcl, "[ClearAliroReaderConfig] Incoming command [endpointId=%d]", endpointID); + + // If Aliro Provisioning feature is not supported, return UNSUPPORTED_COMMAND. + if (!SupportsAliroProvisioning(endpointID)) + { + ChipLogProgress(Zcl, "[ClearAliroReaderConfig] Aliro Provisioning is not supported [endpointId=%d]", endpointID); + commandObj->AddStatus(commandPath, Status::UnsupportedCommand); + return; + } + + EmberAfStatus status = EMBER_ZCL_STATUS_SUCCESS; + if (!emberAfPluginDoorLockClearAliroReaderConfig(endpointID)) + { + ChipLogProgress(Zcl, "[SetAliroReaderConfig] Unable to set aliro reader config [endpointId=%d]", endpointID); + status = EMBER_ZCL_STATUS_FAILURE; + } + sendClusterResponse(commandObj, commandPath, status); +} + // ============================================================================= // SDK callbacks // ============================================================================= @@ -3932,6 +4093,8 @@ void MatterDoorLockPluginServerInitCallback() { ChipLogProgress(Zcl, "Door Lock server initialized"); Server::GetInstance().GetFabricTable().AddFabricDelegate(&gFabricDelegate); + + registerAttributeAccessOverride(&DoorLockServer::Instance()); } void MatterDoorLockClusterServerAttributeChangedCallback(const app::ConcreteAttributePath & attributePath) {} @@ -3966,3 +4129,128 @@ void DoorLockServer::DoorLockOnAutoRelockCallback(System::Layer *, void * callba ChipLogProgress(Zcl, "Door Auto relock timer expired. %s", "Already locked."); } } + +CHIP_ERROR DoorLockServer::ReadAliroExpeditedTransactionSupportedProtocolVersions(const ConcreteReadAttributePath & aPath, + AttributeValueEncoder & aEncoder, + Delegate * delegate) +{ + VerifyOrReturnValue(delegate != nullptr, aEncoder.EncodeEmptyList()); + + return aEncoder.EncodeList([delegate](const auto & encoder) -> CHIP_ERROR { + for (uint8_t i = 0; true; i++) + { + uint8_t buffer[kAliroProtocolVersionSize]; + MutableByteSpan protocolVersion(buffer); + auto err = delegate->GetAliroExpeditedTransactionSupportedProtocolVersionAtIndex(i, protocolVersion); + if (err == CHIP_ERROR_PROVIDER_LIST_EXHAUSTED) + { + return CHIP_NO_ERROR; + } + ReturnErrorOnFailure(err); + ReturnErrorOnFailure(encoder.Encode(protocolVersion)); + } + }); +} + +CHIP_ERROR DoorLockServer::ReadAliroSupportedBLEUWBProtocolVersions(const ConcreteReadAttributePath & aPath, + AttributeValueEncoder & aEncoder, Delegate * delegate) +{ + VerifyOrReturnValue(delegate != nullptr, aEncoder.EncodeEmptyList()); + + return aEncoder.EncodeList([delegate](const auto & encoder) -> CHIP_ERROR { + for (uint8_t i = 0; true; i++) + { + uint8_t buffer[kAliroProtocolVersionSize]; + MutableByteSpan protocolVersion(buffer); + auto err = delegate->GetAliroSupportedBLEUWBProtocolVersionAtIndex(i, protocolVersion); + if (err == CHIP_ERROR_PROVIDER_LIST_EXHAUSTED) + { + return CHIP_NO_ERROR; + } + ReturnErrorOnFailure(err); + ReturnErrorOnFailure(encoder.Encode(protocolVersion)); + } + }); +} + +CHIP_ERROR DoorLockServer::ReadAliroByteSpanAttribute(CHIP_ERROR (Delegate::*func)(MutableByteSpan &), MutableByteSpan & data, + Delegate * delegate, AttributeValueEncoder & aEncoder, + AttributeNullabilityType nullabilityType) +{ + VerifyOrReturnError(delegate != nullptr, CHIP_ERROR_INCORRECT_STATE, ChipLogError(Zcl, "Delegate is null")); + + ReturnErrorOnFailure((delegate->*func)(data)); + if (nullabilityType == AttributeNullabilityType::kNullable && data.empty()) + { + ReturnErrorOnFailure(aEncoder.EncodeNull()); + } + else + { + ReturnErrorOnFailure(aEncoder.Encode(data)); + } + return CHIP_NO_ERROR; +} + +// Implements the read functionality for the AttributeAccessInterface. +CHIP_ERROR DoorLockServer::Read(const ConcreteReadAttributePath & aPath, AttributeValueEncoder & aEncoder) +{ + if (aPath.mClusterId != Clusters::DoorLock::Id) + { + // We shouldn't have been called at all. + return CHIP_ERROR_INVALID_ARGUMENT; + } + + Delegate * delegate = GetDelegate(aPath.mEndpointId); + + switch (aPath.mAttributeId) + { + case AliroReaderVerificationKey::Id: { + uint8_t buffer[kAliroReaderVerificationKeySize]; + MutableByteSpan readerVerificationKey(buffer); + return ReadAliroByteSpanAttribute(&Delegate::GetAliroReaderVerificationKey, readerVerificationKey, delegate, aEncoder, + AttributeNullabilityType::kNullable); + } + case AliroReaderGroupIdentifier::Id: { + uint8_t buffer[kAliroReaderGroupIdentifierSize]; + MutableByteSpan readerGroupIdentifier(buffer); + return ReadAliroByteSpanAttribute(&Delegate::GetAliroReaderGroupIdentifier, readerGroupIdentifier, delegate, aEncoder, + AttributeNullabilityType::kNullable); + } + case AliroReaderGroupSubIdentifier::Id: { + uint8_t buffer[kAliroReaderGroupSubIdentifierSize]; + MutableByteSpan readerGroupSubIdentifier(buffer); + return ReadAliroByteSpanAttribute(&Delegate::GetAliroReaderGroupSubIdentifier, readerGroupSubIdentifier, delegate, aEncoder, + AttributeNullabilityType::kNotNullable); + } + case AliroExpeditedTransactionSupportedProtocolVersions::Id: { + return ReadAliroExpeditedTransactionSupportedProtocolVersions(aPath, aEncoder, delegate); + } + case AliroGroupResolvingKey::Id: { + uint8_t buffer[kAliroGroupResolvingKeySize]; + MutableByteSpan groupResolvingKey(buffer); + return ReadAliroByteSpanAttribute(&Delegate::GetAliroGroupResolvingKey, groupResolvingKey, delegate, aEncoder, + AttributeNullabilityType::kNullable); + } + case AliroSupportedBLEUWBProtocolVersions::Id: { + return ReadAliroSupportedBLEUWBProtocolVersions(aPath, aEncoder, delegate); + } + case AliroBLEAdvertisingVersion::Id: { + uint8_t bleAdvertisingVersion = delegate->GetAliroBLEAdvertisingVersion(); + ReturnErrorOnFailure(aEncoder.Encode(bleAdvertisingVersion)); + return CHIP_NO_ERROR; + } + case NumberOfAliroCredentialIssuerKeysSupported::Id: { + uint16_t numberOfCredentialIssuerKeysSupported = delegate->GetNumberOfAliroCredentialIssuerKeysSupported(); + ReturnErrorOnFailure(aEncoder.Encode(numberOfCredentialIssuerKeysSupported)); + return CHIP_NO_ERROR; + } + case NumberOfAliroEndpointKeysSupported::Id: { + uint16_t numberOfEndpointKeysSupported = delegate->GetNumberOfAliroEndpointKeysSupported(); + ReturnErrorOnFailure(aEncoder.Encode(numberOfEndpointKeysSupported)); + return CHIP_NO_ERROR; + } + default: + break; + } + return CHIP_NO_ERROR; +} diff --git a/src/app/clusters/door-lock-server/door-lock-server.h b/src/app/clusters/door-lock-server/door-lock-server.h index a8007f211641a4..675a1450baf28a 100644 --- a/src/app/clusters/door-lock-server/door-lock-server.h +++ b/src/app/clusters/door-lock-server/door-lock-server.h @@ -24,7 +24,9 @@ #pragma once +#include "door-lock-delegate.h" #include +#include #include #include #include @@ -88,9 +90,10 @@ struct EmberAfDoorLockEndpointContext /** * @brief Door Lock Server Plugin class. */ -class DoorLockServer +class DoorLockServer : public chip::app::AttributeAccessInterface { public: + DoorLockServer() : AttributeAccessInterface(chip::Optional::Missing(), chip::app::Clusters::DoorLock::Id) {} static DoorLockServer & Instance(); using Feature = chip::app::Clusters::DoorLock::Feature; @@ -203,6 +206,23 @@ class DoorLockServer inline bool SupportsUnbolt(chip::EndpointId endpointId) { return GetFeatures(endpointId).Has(Feature::kUnbolt); } + /** + * @brief Checks if Aliro Provisioning feature is supported on the given endpoint + * + * @param endpointId endpointId ID of the endpoint which contains the lock. + */ + inline bool SupportsAliroProvisioning(chip::EndpointId endpointId) + { + return GetFeatures(endpointId).Has(Feature::kAliroProvisioning); + } + + /** + * @brief Checks if Aliro BLE UWB feature is supported on the given endpoint + * + * @param endpointId endpointId ID of the endpoint which contains the lock. + */ + inline bool SupportsAliroBLEUWB(chip::EndpointId endpointId) { return GetFeatures(endpointId).Has(Feature::kAliroBLEUWB); } + /** * @brief Allows the application to register a custom callback which will be called after the default DoorLock * OnFabricRemoved implementation. At that point the door lock cluster has done any @@ -430,6 +450,13 @@ class DoorLockServer void clearHolidayScheduleCommandHandler(chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath, uint8_t holidayIndex); + void setAliroReaderConfigCommandHandler(chip::app::CommandHandler * commandObj, + const chip::app::ConcreteCommandPath & commandPath, const chip::ByteSpan & signingKey, + const chip::ByteSpan & verificationKey, const chip::ByteSpan & groupIdentifier, + const Optional & groupResolvingKey); + void clearAliroReaderConfigCommandHandler(chip::app::CommandHandler * commandObj, + const chip::app::ConcreteCommandPath & commandPath); + bool RemoteOperationEnabled(chip::EndpointId endpointId) const; EmberAfDoorLockEndpointContext * getContext(chip::EndpointId endpointId); @@ -521,6 +548,62 @@ class DoorLockServer bool SetAttribute(chip::EndpointId endpointId, chip::AttributeId attributeId, EmberAfStatus (*setFn)(chip::EndpointId endpointId, T value), T value); + // AttributeAccessInterface's Read API + CHIP_ERROR Read(const chip::app::ConcreteReadAttributePath & aPath, chip::app::AttributeValueEncoder & aEncoder) override; + + /** + * @brief Reads AliroExpeditedTransactionSupportedProtocolVersions attribute for door lock + * + * @param aPath attribute path. + * @param aEncoder attribute value encoder. + * @param delegate door lock cluster delegate that will provide the value + * + * @return CHIP_NO_ERROR on success + * @return CHIP_ERROR if attribute read failed + */ + CHIP_ERROR ReadAliroExpeditedTransactionSupportedProtocolVersions(const chip::app::ConcreteReadAttributePath & aPath, + chip::app::AttributeValueEncoder & aEncoder, + chip::app::Clusters::DoorLock::Delegate * delegate); + + /** + * @brief Reads AliroSupportedBLEUWBProtocolVersions attribute for door lock + * + * @param aPath attribute path. + * @param aEncoder attribute value encoder. + * @param delegate door lock cluster delegate that will provide the value + * + * @return CHIP_NO_ERROR on success + * @return CHIP_ERROR if attribute read failed + */ + CHIP_ERROR ReadAliroSupportedBLEUWBProtocolVersions(const chip::app::ConcreteReadAttributePath & aPath, + chip::app::AttributeValueEncoder & aEncoder, + chip::app::Clusters::DoorLock::Delegate * delegate); + + /** + * @brief Indicates whether an attribute can be nullable or not. + */ + enum class AttributeNullabilityType : uint8_t + { + kNullable = 0, /**< Indicates if an attribute is nullable */ + kNotNullable = 1, /**< Indicates if an attribute is not nullable */ + }; + + /** + * @brief Utility to read aliro attributes of type ByteSpan + * + * @param func getter function for the attribute. + * @param data buffer for the data. + * @param delegate door lock cluster delegate that will provide the value + * @param aEncoder attribute value encoder. + * @param nullabilityType enum value indicating whether the attribute is nullable or not. + * + * @return CHIP_NO_ERROR on success + * @return CHIP_ERROR if attribute read failed + */ + CHIP_ERROR ReadAliroByteSpanAttribute(CHIP_ERROR (chip::app::Clusters::DoorLock::Delegate::*func)(chip::MutableByteSpan & data), + chip::MutableByteSpan & data, chip::app::Clusters::DoorLock::Delegate * delegate, + chip::app::AttributeValueEncoder & aEncoder, AttributeNullabilityType nullabilityType); + friend bool emberAfDoorLockClusterLockDoorCallback(chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath, @@ -601,6 +684,14 @@ class DoorLockServer chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath, const chip::app::Clusters::DoorLock::Commands::ClearYearDaySchedule::DecodableType & commandData); + friend bool emberAfDoorLockClusterSetAliroReaderConfigCallback( + chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath, + const chip::app::Clusters::DoorLock::Commands::SetAliroReaderConfig::DecodableType & commandData); + + friend bool emberAfDoorLockClusterClearAliroReaderConfigCallback( + chip::app::CommandHandler * commandObj, const chip::app::ConcreteCommandPath & commandPath, + const chip::app::Clusters::DoorLock::Commands::ClearAliroReaderConfig::DecodableType & commandData); + static constexpr size_t kDoorLockClusterServerMaxEndpointCount = EMBER_AF_DOOR_LOCK_CLUSTER_SERVER_ENDPOINT_COUNT + CHIP_DEVICE_CONFIG_DYNAMIC_ENDPOINT_COUNT; static_assert(kDoorLockClusterServerMaxEndpointCount <= kEmberInvalidEndpointIndex, "DoorLock Endpoint count error"); @@ -1167,3 +1258,33 @@ bool emberAfPluginDoorLockGetFingerVeinCredentialLengthConstraints(chip::Endpoin * @return false on failure, true on success. */ bool emberAfPluginDoorLockGetFaceCredentialLengthConstraints(chip::EndpointId endpointId, uint8_t & minLen, uint8_t & maxLen); + +/** + * @brief This callback is called when Door Lock cluster needs to communicate the Aliro reader configuration to the door lock. + * + * @note This function is used for communicating the Aliro signing key, verification key, group identifier and group resolving key + * to the lock. + * + * @param endpointId ID of the endpoint which contains the lock. + * @param[in] signingKey Signing key component of the Reader's key pair. + * @param[in] verificationKey Verification key component of the Reader's key pair. + * @param[in] groupIdentifier Reader group identifier for the lock. + * @param[in] groupResolvingKey Group resolving key for the lock if Aliro BLE UWB feature is supported + * + * @retval true, if the Aliro reader config was successfully communicated to the door lock. + * @retval false, if error occurred while communicating the Aliro reader config. + */ +bool emberAfPluginDoorLockSetAliroReaderConfig(chip::EndpointId endpointId, const chip::ByteSpan & signingKey, + const chip::ByteSpan & verificationKey, const chip::ByteSpan & groupIdentifier, + const Optional & groupResolvingKey); + +/** + * @brief This callback is called when Door Lock cluster needs to clear an existing Aliro reader configuration from the door lock. + * + * + * @param endpointId ID of the endpoint which contains the lock. + * + * @retval true, if the Aliro reader config was successfully cleared from the door lock. + * @retval false, if error occurred while clearing the Aliro reader config. + */ +bool emberAfPluginDoorLockClearAliroReaderConfig(chip::EndpointId endpointId); From 5f955f4fbc2122de5933aab9349bdfb52414511c Mon Sep 17 00:00:00 2001 From: mkardous-silabs <84793247+mkardous-silabs@users.noreply.github.com> Date: Tue, 30 Jan 2024 20:52:28 -0500 Subject: [PATCH 06/16] [ICD] Move ICD server sources to the server directory (#31674) * Move ICD server files to server directory * update all the icd paths * update examples paths * restyle * cmake icd path * fix src/app path * update comment path * fix icd_config to icd_server_config rename * Fix ESP builds * restyle --- .../esp32/main/CMakeLists.txt | 2 +- .../esp32/main/CMakeLists.txt | 2 +- examples/lit-icd-app/linux/BUILD.gn | 2 +- examples/lock-app/esp32/main/CMakeLists.txt | 4 ++-- examples/platform/silabs/BaseApplication.cpp | 2 +- src/app/BUILD.gn | 10 ++++----- src/app/FailSafeContext.cpp | 4 ++-- src/app/ReadHandler.cpp | 4 ++-- src/app/chip_data_model.cmake | 6 ++--- src/app/chip_data_model.gni | 8 +++---- .../icd-management-server.cpp | 4 ++-- .../icd-management-server.h | 4 ++-- src/app/icd/{ => server}/BUILD.gn | 22 +++++++++---------- src/app/icd/{ => server}/ICDCheckInSender.cpp | 6 ++--- src/app/icd/{ => server}/ICDCheckInSender.h | 2 +- .../icd/{ => server}/ICDConfigurationData.cpp | 2 +- .../icd/{ => server}/ICDConfigurationData.h | 2 +- src/app/icd/{ => server}/ICDManager.cpp | 8 +++---- src/app/icd/{ => server}/ICDManager.h | 10 ++++----- .../icd/{ => server}/ICDMonitoringTable.cpp | 0 src/app/icd/{ => server}/ICDMonitoringTable.h | 0 src/app/icd/{ => server}/ICDNotifier.cpp | 2 +- src/app/icd/{ => server}/ICDNotifier.h | 2 +- .../{ICDConfig.h => server/ICDServerConfig.h} | 2 +- src/app/icd/{ => server}/ICDStateObserver.h | 0 src/app/reporting/Engine.cpp | 4 ++-- src/app/reporting/ReportScheduler.h | 2 +- src/app/server/BUILD.gn | 6 ++--- src/app/server/CommissioningWindowManager.cpp | 4 ++-- src/app/server/Dnssd.h | 6 ++--- src/app/server/Server.h | 4 ++-- src/app/tests/BUILD.gn | 2 +- src/app/tests/TestICDManager.cpp | 8 +++---- src/app/tests/TestICDMonitoringTable.cpp | 2 +- src/include/platform/ConnectivityManager.h | 2 +- src/lib/dnssd/Advertiser_ImplMinimalMdns.cpp | 2 +- src/lib/dnssd/BUILD.gn | 2 +- src/lib/dnssd/Discovery_ImplPlatform.cpp | 2 +- .../minimal_mdns/tests/TestAdvertiser.cpp | 2 +- src/messaging/BUILD.gn | 6 ++--- src/messaging/ExchangeContext.cpp | 4 ++-- src/messaging/ReliableMessageMgr.cpp | 4 ++-- .../ReliableMessageProtocolConfig.cpp | 2 +- src/messaging/tests/BUILD.gn | 2 +- .../tests/TestAbortExchangesForFabric.cpp | 2 +- .../tests/TestReliableMessageProtocol.cpp | 2 +- src/platform/BUILD.gn | 2 +- src/protocols/secure_channel/tests/BUILD.gn | 4 ++-- .../secure_channel/tests/TestPASESession.cpp | 2 +- 49 files changed, 94 insertions(+), 94 deletions(-) rename src/app/icd/{ => server}/BUILD.gn (87%) rename src/app/icd/{ => server}/ICDCheckInSender.cpp (97%) rename src/app/icd/{ => server}/ICDCheckInSender.h (97%) rename src/app/icd/{ => server}/ICDConfigurationData.cpp (97%) rename src/app/icd/{ => server}/ICDConfigurationData.h (99%) rename src/app/icd/{ => server}/ICDManager.cpp (99%) rename src/app/icd/{ => server}/ICDManager.h (96%) rename src/app/icd/{ => server}/ICDMonitoringTable.cpp (100%) rename src/app/icd/{ => server}/ICDMonitoringTable.h (100%) rename src/app/icd/{ => server}/ICDNotifier.cpp (98%) rename src/app/icd/{ => server}/ICDNotifier.h (99%) rename src/app/icd/{ICDConfig.h => server/ICDServerConfig.h} (93%) rename src/app/icd/{ => server}/ICDStateObserver.h (100%) diff --git a/examples/all-clusters-app/esp32/main/CMakeLists.txt b/examples/all-clusters-app/esp32/main/CMakeLists.txt index f2f432a60d615a..b47def73690bf8 100644 --- a/examples/all-clusters-app/esp32/main/CMakeLists.txt +++ b/examples/all-clusters-app/esp32/main/CMakeLists.txt @@ -36,7 +36,7 @@ set(SRC_DIRS_LIST "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/examples/platform/esp32/shell_extension" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/examples/platform/esp32/mode-support" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/server" - "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/icd" + "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/icd/server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/util" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/reporting" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/administrator-commissioning-server" diff --git a/examples/light-switch-app/esp32/main/CMakeLists.txt b/examples/light-switch-app/esp32/main/CMakeLists.txt index 5bdac22300b33f..210cbcefee9a23 100644 --- a/examples/light-switch-app/esp32/main/CMakeLists.txt +++ b/examples/light-switch-app/esp32/main/CMakeLists.txt @@ -31,7 +31,7 @@ idf_component_register(PRIV_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/util" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/reporting" - "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/icd" + "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/icd/server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/access-control-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/administrator-commissioning-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/basic-information" diff --git a/examples/lit-icd-app/linux/BUILD.gn b/examples/lit-icd-app/linux/BUILD.gn index 6a2a26c7b8a034..fd8c0dfbbad343 100644 --- a/examples/lit-icd-app/linux/BUILD.gn +++ b/examples/lit-icd-app/linux/BUILD.gn @@ -21,7 +21,7 @@ executable("lit-icd-app") { deps = [ "${chip_root}/examples/lit-icd-app/lit-icd-common", "${chip_root}/examples/platform/linux:app-main", - "${chip_root}/src/app/icd:manager", + "${chip_root}/src/app/icd/server:manager", "${chip_root}/src/lib", "${chip_root}/third_party/jsoncpp", ] diff --git a/examples/lock-app/esp32/main/CMakeLists.txt b/examples/lock-app/esp32/main/CMakeLists.txt index 7efc567f107ffd..e7266908ff3c1d 100644 --- a/examples/lock-app/esp32/main/CMakeLists.txt +++ b/examples/lock-app/esp32/main/CMakeLists.txt @@ -50,7 +50,7 @@ idf_component_register(INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/util" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/reporting" - "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/icd" + "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/icd/server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/access-control-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/administrator-commissioning-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/basic-information" @@ -163,7 +163,7 @@ idf_component_register(PRIV_INCLUDE_DIRS "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/util" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/reporting" - "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/icd" + "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/icd/server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/access-control-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/administrator-commissioning-server" "${CMAKE_SOURCE_DIR}/third_party/connectedhomeip/src/app/clusters/basic-information" diff --git a/examples/platform/silabs/BaseApplication.cpp b/examples/platform/silabs/BaseApplication.cpp index 99acb26d9bd26e..5870de2aeb947d 100644 --- a/examples/platform/silabs/BaseApplication.cpp +++ b/examples/platform/silabs/BaseApplication.cpp @@ -36,7 +36,7 @@ #include "SilabsDeviceDataProvider.h" #if CHIP_CONFIG_ENABLE_ICD_SERVER == 1 -#include // nogncheck +#include // nogncheck #endif #include #include diff --git a/src/app/BUILD.gn b/src/app/BUILD.gn index 443919026df953..803a86643c13fa 100644 --- a/src/app/BUILD.gn +++ b/src/app/BUILD.gn @@ -254,8 +254,8 @@ static_library("interaction-model") { ":message-def", ":paths", ":subscription-manager", - "${chip_root}/src/app/icd:icd_config", - "${chip_root}/src/app/icd:observer", + "${chip_root}/src/app/icd/server:icd-server-config", + "${chip_root}/src/app/icd/server:observer", "${chip_root}/src/lib/address_resolve", "${chip_root}/src/lib/support", "${chip_root}/src/protocols/interaction_model", @@ -333,7 +333,7 @@ static_library("app") { ":interaction-model", ":pre-encoded-value", ":revision_info", - "${chip_root}/src/app/icd:icd_config", + "${chip_root}/src/app/icd/server:icd-server-config", "${chip_root}/src/lib/address_resolve", "${chip_root}/src/lib/support", "${chip_root}/src/messaging", @@ -353,8 +353,8 @@ static_library("app") { if (chip_enable_icd_server) { public_deps += [ - "${chip_root}/src/app/icd:manager", - "${chip_root}/src/app/icd:notifier", + "${chip_root}/src/app/icd/server:manager", + "${chip_root}/src/app/icd/server:notifier", ] } diff --git a/src/app/FailSafeContext.cpp b/src/app/FailSafeContext.cpp index 9ecc3dea060340..699fcb8c0ce280 100644 --- a/src/app/FailSafeContext.cpp +++ b/src/app/FailSafeContext.cpp @@ -20,9 +20,9 @@ * Provides the implementation of the FailSafeContext object. */ #include "FailSafeContext.h" -#include +#include #if CHIP_CONFIG_ENABLE_ICD_SERVER -#include // nogncheck +#include // nogncheck #endif #include #include diff --git a/src/app/ReadHandler.cpp b/src/app/ReadHandler.cpp index c0cfbe4a829e76..df8516dd17a30e 100644 --- a/src/app/ReadHandler.cpp +++ b/src/app/ReadHandler.cpp @@ -28,7 +28,7 @@ #include #include #include -#include +#include #include #include @@ -36,7 +36,7 @@ #include #if CHIP_CONFIG_ENABLE_ICD_SERVER -#include //nogncheck +#include //nogncheck #endif namespace chip { diff --git a/src/app/chip_data_model.cmake b/src/app/chip_data_model.cmake index 0126836897a7a2..3e1d669a49569a 100644 --- a/src/app/chip_data_model.cmake +++ b/src/app/chip_data_model.cmake @@ -139,9 +139,9 @@ function(chip_configure_data_model APP_TARGET) ${CHIP_APP_BASE_DIR}/util/attribute-storage.cpp ${CHIP_APP_BASE_DIR}/util/attribute-table.cpp ${CHIP_APP_BASE_DIR}/util/binding-table.cpp - ${CHIP_APP_BASE_DIR}/icd/ICDMonitoringTable.cpp - ${CHIP_APP_BASE_DIR}/icd/ICDNotifier.cpp - ${CHIP_APP_BASE_DIR}/icd/ICDConfigurationData.cpp + ${CHIP_APP_BASE_DIR}/icd/server/ICDMonitoringTable.cpp + ${CHIP_APP_BASE_DIR}/icd/server/ICDNotifier.cpp + ${CHIP_APP_BASE_DIR}/icd/server/ICDConfigurationData.cpp ${CHIP_APP_BASE_DIR}/util/DataModelHandler.cpp ${CHIP_APP_BASE_DIR}/util/ember-compatibility-functions.cpp ${CHIP_APP_BASE_DIR}/util/generic-callback-stubs.cpp diff --git a/src/app/chip_data_model.gni b/src/app/chip_data_model.gni index d4d4913a120ca6..aede00f0e12115 100644 --- a/src/app/chip_data_model.gni +++ b/src/app/chip_data_model.gni @@ -300,10 +300,10 @@ template("chip_data_model") { "${_app_root}/clusters/${cluster}/${cluster}.h", ] deps += [ - "${chip_root}/src/app/icd:configuration-data", - "${chip_root}/src/app/icd:icd_config", - "${chip_root}/src/app/icd:monitoring-table", - "${chip_root}/src/app/icd:notifier", + "${chip_root}/src/app/icd/server:configuration-data", + "${chip_root}/src/app/icd/server:icd-server-config", + "${chip_root}/src/app/icd/server:monitoring-table", + "${chip_root}/src/app/icd/server:notifier", ] } else if (cluster == "resource-monitoring-server") { sources += [ diff --git a/src/app/clusters/icd-management-server/icd-management-server.cpp b/src/app/clusters/icd-management-server/icd-management-server.cpp index da4bada1482d19..e748030f1da9d3 100644 --- a/src/app/clusters/icd-management-server/icd-management-server.cpp +++ b/src/app/clusters/icd-management-server/icd-management-server.cpp @@ -23,8 +23,8 @@ #include #include #include -#include -#include +#include +#include #include #include #include diff --git a/src/app/clusters/icd-management-server/icd-management-server.h b/src/app/clusters/icd-management-server/icd-management-server.h index 0255112d801388..308d50859d2d4b 100644 --- a/src/app/clusters/icd-management-server/icd-management-server.h +++ b/src/app/clusters/icd-management-server/icd-management-server.h @@ -20,8 +20,8 @@ #include #include #include -#include -#include +#include +#include #include #include #include diff --git a/src/app/icd/BUILD.gn b/src/app/icd/server/BUILD.gn similarity index 87% rename from src/app/icd/BUILD.gn rename to src/app/icd/server/BUILD.gn index f1d3a8a382c9d0..ee2b2be0034c5c 100644 --- a/src/app/icd/BUILD.gn +++ b/src/app/icd/server/BUILD.gn @@ -14,13 +14,13 @@ import("//build_overrides/chip.gni") import("${chip_root}/build/chip/buildconfig_header.gni") -import("icd.gni") +import("${chip_root}/src/app/icd/icd.gni") # ICD Server sources and configurations -buildconfig_header("icd_buildconfig") { - header = "ICDBuildConfig.h" - header_dir = "app/icd" +buildconfig_header("icd-server-buildconfig") { + header = "ICDServerBuildConfig.h" + header_dir = "app/icd/server" defines = [ "CHIP_CONFIG_ENABLE_ICD_SERVER=${chip_enable_icd_server}", @@ -29,13 +29,13 @@ buildconfig_header("icd_buildconfig") { "ICD_ENFORCE_SIT_SLOW_POLL_LIMIT=${icd_enforce_sit_slow_poll_limit}", ] - visibility = [ ":icd_config" ] + visibility = [ ":icd-server-config" ] } -source_set("icd_config") { - sources = [ "ICDConfig.h" ] +source_set("icd-server-config") { + sources = [ "ICDServerConfig.h" ] - deps = [ ":icd_buildconfig" ] + deps = [ ":icd-server-buildconfig" ] } source_set("observer") { @@ -49,7 +49,7 @@ source_set("notifier") { ] deps = [ - ":icd_config", + ":icd-server-config", "${chip_root}/src/lib/core", ] } @@ -62,7 +62,7 @@ source_set("manager") { "ICDManager.h", ] - deps = [ ":icd_config" ] + deps = [ ":icd-server-config" ] public_deps = [ ":configuration-data", @@ -112,7 +112,7 @@ source_set("configuration-data") { ] deps = [ - ":icd_config", + ":icd-server-config", "${chip_root}/src/lib/core", "${chip_root}/src/lib/support", ] diff --git a/src/app/icd/ICDCheckInSender.cpp b/src/app/icd/server/ICDCheckInSender.cpp similarity index 97% rename from src/app/icd/ICDCheckInSender.cpp rename to src/app/icd/server/ICDCheckInSender.cpp index 69f47137cdec4f..21bcc336b0d357 100644 --- a/src/app/icd/ICDCheckInSender.cpp +++ b/src/app/icd/server/ICDCheckInSender.cpp @@ -15,9 +15,9 @@ * limitations under the License. */ -#include -#include -#include +#include +#include +#include #include #include #include diff --git a/src/app/icd/ICDCheckInSender.h b/src/app/icd/server/ICDCheckInSender.h similarity index 97% rename from src/app/icd/ICDCheckInSender.h rename to src/app/icd/server/ICDCheckInSender.h index a9d7919aaaaf28..b681bec149f667 100644 --- a/src/app/icd/ICDCheckInSender.h +++ b/src/app/icd/server/ICDCheckInSender.h @@ -16,7 +16,7 @@ */ #pragma once -#include +#include #include #include diff --git a/src/app/icd/ICDConfigurationData.cpp b/src/app/icd/server/ICDConfigurationData.cpp similarity index 97% rename from src/app/icd/ICDConfigurationData.cpp rename to src/app/icd/server/ICDConfigurationData.cpp index 9c2079a4386742..e29ec6f6703c7d 100644 --- a/src/app/icd/ICDConfigurationData.cpp +++ b/src/app/icd/server/ICDConfigurationData.cpp @@ -16,7 +16,7 @@ */ #include "ICDConfigurationData.h" -#include +#include #include namespace chip { diff --git a/src/app/icd/ICDConfigurationData.h b/src/app/icd/server/ICDConfigurationData.h similarity index 99% rename from src/app/icd/ICDConfigurationData.h rename to src/app/icd/server/ICDConfigurationData.h index 2762077429b006..855cbae132f8ef 100644 --- a/src/app/icd/ICDConfigurationData.h +++ b/src/app/icd/server/ICDConfigurationData.h @@ -92,7 +92,7 @@ class ICDConfigurationData // ICD related information is managed by the ICDManager but stored in the ICDConfigurationData to enable consummers to access it // without creating a circular dependency. To avoid allowing consummers changing the state of the ICD mode without going through // the ICDManager, the ICDManager is a friend that can access the private setters. If a consummer needs to be notified when a - // value is changed, they can leverage the Observer events the ICDManager generates. See src/app/icd/ICDStateObserver.h + // value is changed, they can leverage the Observer events the ICDManager generates. See src/app/icd/server/ICDStateObserver.h friend class chip::app::ICDManager; friend class chip::app::TestICDManager; diff --git a/src/app/icd/ICDManager.cpp b/src/app/icd/server/ICDManager.cpp similarity index 99% rename from src/app/icd/ICDManager.cpp rename to src/app/icd/server/ICDManager.cpp index f6c1fe5cca32b8..08aee6423eded2 100644 --- a/src/app/icd/ICDManager.cpp +++ b/src/app/icd/server/ICDManager.cpp @@ -18,10 +18,10 @@ #include #include #include -#include -#include -#include -#include +#include +#include +#include +#include #include #include #include diff --git a/src/app/icd/ICDManager.h b/src/app/icd/server/ICDManager.h similarity index 96% rename from src/app/icd/ICDManager.h rename to src/app/icd/server/ICDManager.h index 429942302d2227..e5cec3ecd9ec5a 100644 --- a/src/app/icd/ICDManager.h +++ b/src/app/icd/server/ICDManager.h @@ -18,11 +18,11 @@ #include #include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include #include #include diff --git a/src/app/icd/ICDMonitoringTable.cpp b/src/app/icd/server/ICDMonitoringTable.cpp similarity index 100% rename from src/app/icd/ICDMonitoringTable.cpp rename to src/app/icd/server/ICDMonitoringTable.cpp diff --git a/src/app/icd/ICDMonitoringTable.h b/src/app/icd/server/ICDMonitoringTable.h similarity index 100% rename from src/app/icd/ICDMonitoringTable.h rename to src/app/icd/server/ICDMonitoringTable.h diff --git a/src/app/icd/ICDNotifier.cpp b/src/app/icd/server/ICDNotifier.cpp similarity index 98% rename from src/app/icd/ICDNotifier.cpp rename to src/app/icd/server/ICDNotifier.cpp index 8266c2a2ea6e87..4df2379d065131 100644 --- a/src/app/icd/ICDNotifier.cpp +++ b/src/app/icd/server/ICDNotifier.cpp @@ -15,7 +15,7 @@ * limitations under the License. */ -#include +#include #include #include diff --git a/src/app/icd/ICDNotifier.h b/src/app/icd/server/ICDNotifier.h similarity index 99% rename from src/app/icd/ICDNotifier.h rename to src/app/icd/server/ICDNotifier.h index bde16ff53f984e..1223732e3fc05f 100644 --- a/src/app/icd/ICDNotifier.h +++ b/src/app/icd/server/ICDNotifier.h @@ -16,7 +16,7 @@ */ #pragma once -#include +#include #include #include diff --git a/src/app/icd/ICDConfig.h b/src/app/icd/server/ICDServerConfig.h similarity index 93% rename from src/app/icd/ICDConfig.h rename to src/app/icd/server/ICDServerConfig.h index 4c85d39f83e9cf..aca74dac301efa 100644 --- a/src/app/icd/ICDConfig.h +++ b/src/app/icd/server/ICDServerConfig.h @@ -18,5 +18,5 @@ #pragma once #if CHIP_HAVE_CONFIG_H -#include +#include #endif diff --git a/src/app/icd/ICDStateObserver.h b/src/app/icd/server/ICDStateObserver.h similarity index 100% rename from src/app/icd/ICDStateObserver.h rename to src/app/icd/server/ICDStateObserver.h diff --git a/src/app/reporting/Engine.cpp b/src/app/reporting/Engine.cpp index f230e307544358..2530ec7eff59ae 100644 --- a/src/app/reporting/Engine.cpp +++ b/src/app/reporting/Engine.cpp @@ -23,9 +23,9 @@ * */ -#include +#include #if CHIP_CONFIG_ENABLE_ICD_SERVER -#include // nogncheck +#include // nogncheck #endif #include #include diff --git a/src/app/reporting/ReportScheduler.h b/src/app/reporting/ReportScheduler.h index d823c2f18114c9..622a10a80c3bd2 100644 --- a/src/app/reporting/ReportScheduler.h +++ b/src/app/reporting/ReportScheduler.h @@ -19,7 +19,7 @@ #pragma once #include -#include +#include #include #include diff --git a/src/app/server/BUILD.gn b/src/app/server/BUILD.gn index 60f88cf08cae8f..690da2354071cc 100644 --- a/src/app/server/BUILD.gn +++ b/src/app/server/BUILD.gn @@ -51,8 +51,8 @@ static_library("server") { public_deps = [ "${chip_root}/src/app", - "${chip_root}/src/app/icd:icd_config", - "${chip_root}/src/app/icd:observer", + "${chip_root}/src/app/icd/server:icd-server-config", + "${chip_root}/src/app/icd/server:observer", "${chip_root}/src/lib/address_resolve", "${chip_root}/src/lib/dnssd", "${chip_root}/src/messaging", @@ -63,6 +63,6 @@ static_library("server") { ] if (chip_enable_icd_server) { - public_deps += [ "${chip_root}/src/app/icd:notifier" ] + public_deps += [ "${chip_root}/src/app/icd/server:notifier" ] } } diff --git a/src/app/server/CommissioningWindowManager.cpp b/src/app/server/CommissioningWindowManager.cpp index 8e37d0aa0d76e5..01509a41a2acd0 100644 --- a/src/app/server/CommissioningWindowManager.cpp +++ b/src/app/server/CommissioningWindowManager.cpp @@ -15,10 +15,10 @@ * limitations under the License. */ -#include +#include #include #if CHIP_CONFIG_ENABLE_ICD_SERVER -#include // nogncheck +#include // nogncheck #endif #include #include diff --git a/src/app/server/Dnssd.h b/src/app/server/Dnssd.h index 6a9af18cda1dea..559cac6a464b2f 100644 --- a/src/app/server/Dnssd.h +++ b/src/app/server/Dnssd.h @@ -17,11 +17,11 @@ #pragma once -#include +#include #if CHIP_CONFIG_ENABLE_ICD_SERVER -#include // nogncheck +#include // nogncheck #endif -#include +#include #include #include #include diff --git a/src/app/server/Server.h b/src/app/server/Server.h index e574b52b159957..5e51254e76753e 100644 --- a/src/app/server/Server.h +++ b/src/app/server/Server.h @@ -18,7 +18,7 @@ #pragma once #include -#include +#include #include #include @@ -70,7 +70,7 @@ #include #if CHIP_CONFIG_ENABLE_ICD_SERVER -#include // nogncheck +#include // nogncheck #endif namespace chip { diff --git a/src/app/tests/BUILD.gn b/src/app/tests/BUILD.gn index 520fb3adf85675..88311e2b414e58 100644 --- a/src/app/tests/BUILD.gn +++ b/src/app/tests/BUILD.gn @@ -207,8 +207,8 @@ chip_test_suite_using_nltest("tests") { ":time-sync-data-provider-test-srcs", "${chip_root}/src/app", "${chip_root}/src/app/common:cluster-objects", - "${chip_root}/src/app/icd:manager", "${chip_root}/src/app/icd/client:manager", + "${chip_root}/src/app/icd/server:manager", "${chip_root}/src/app/tests:helpers", "${chip_root}/src/app/util/mock:mock_ember", "${chip_root}/src/lib/core", diff --git a/src/app/tests/TestICDManager.cpp b/src/app/tests/TestICDManager.cpp index 06669b45d1cd51..bcd74238d6727e 100644 --- a/src/app/tests/TestICDManager.cpp +++ b/src/app/tests/TestICDManager.cpp @@ -17,10 +17,10 @@ */ #include #include -#include -#include -#include -#include +#include +#include +#include +#include #include #include #include diff --git a/src/app/tests/TestICDMonitoringTable.cpp b/src/app/tests/TestICDMonitoringTable.cpp index 1a6460e31640e3..f5de7ed59ba3e1 100644 --- a/src/app/tests/TestICDMonitoringTable.cpp +++ b/src/app/tests/TestICDMonitoringTable.cpp @@ -15,7 +15,7 @@ * limitations under the License. */ -#include +#include #include #include #include diff --git a/src/include/platform/ConnectivityManager.h b/src/include/platform/ConnectivityManager.h index 70f9d48a6bef07..ed881f78cc2c3c 100644 --- a/src/include/platform/ConnectivityManager.h +++ b/src/include/platform/ConnectivityManager.h @@ -25,7 +25,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/lib/dnssd/Advertiser_ImplMinimalMdns.cpp b/src/lib/dnssd/Advertiser_ImplMinimalMdns.cpp index a77abebab68a58..b3b1f8ea8876a6 100644 --- a/src/lib/dnssd/Advertiser_ImplMinimalMdns.cpp +++ b/src/lib/dnssd/Advertiser_ImplMinimalMdns.cpp @@ -23,7 +23,7 @@ #include "MinimalMdnsServer.h" #include "ServiceNaming.h" -#include +#include #include #include #include diff --git a/src/lib/dnssd/BUILD.gn b/src/lib/dnssd/BUILD.gn index cb8fb449908bca..295be7d51a191d 100644 --- a/src/lib/dnssd/BUILD.gn +++ b/src/lib/dnssd/BUILD.gn @@ -23,7 +23,7 @@ source_set("platform_header") { static_library("dnssd") { public_deps = [ ":platform_header", - "${chip_root}/src/app/icd:icd_config", + "${chip_root}/src/app/icd/server:icd-server-config", "${chip_root}/src/crypto", "${chip_root}/src/lib/core", "${chip_root}/src/lib/support", diff --git a/src/lib/dnssd/Discovery_ImplPlatform.cpp b/src/lib/dnssd/Discovery_ImplPlatform.cpp index 240bb979991038..8b1bbbfb7b82e5 100644 --- a/src/lib/dnssd/Discovery_ImplPlatform.cpp +++ b/src/lib/dnssd/Discovery_ImplPlatform.cpp @@ -19,7 +19,7 @@ #include -#include +#include #include #include #include diff --git a/src/lib/dnssd/minimal_mdns/tests/TestAdvertiser.cpp b/src/lib/dnssd/minimal_mdns/tests/TestAdvertiser.cpp index c265d1802d3073..aa6fcf0c04b815 100644 --- a/src/lib/dnssd/minimal_mdns/tests/TestAdvertiser.cpp +++ b/src/lib/dnssd/minimal_mdns/tests/TestAdvertiser.cpp @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#include +#include #include #include diff --git a/src/messaging/BUILD.gn b/src/messaging/BUILD.gn index 4c8ba1b9cb243c..7d402e78ee2306 100644 --- a/src/messaging/BUILD.gn +++ b/src/messaging/BUILD.gn @@ -67,7 +67,7 @@ static_library("messaging") { public_deps = [ ":messaging_mrp_config", - "${chip_root}/src/app/icd:icd_config", + "${chip_root}/src/app/icd/server:icd-server-config", "${chip_root}/src/crypto", "${chip_root}/src/inet", "${chip_root}/src/lib/core", @@ -80,8 +80,8 @@ static_library("messaging") { if (chip_enable_icd_server) { public_deps += [ - "${chip_root}/src/app/icd:configuration-data", - "${chip_root}/src/app/icd:notifier", + "${chip_root}/src/app/icd/server:configuration-data", + "${chip_root}/src/app/icd/server:notifier", ] } } diff --git a/src/messaging/ExchangeContext.cpp b/src/messaging/ExchangeContext.cpp index af3b87c5337703..15522ebcb76d77 100644 --- a/src/messaging/ExchangeContext.cpp +++ b/src/messaging/ExchangeContext.cpp @@ -32,9 +32,9 @@ #include #include -#include +#include #if CHIP_CONFIG_ENABLE_ICD_SERVER -#include // nogncheck +#include // nogncheck #endif #include #include diff --git a/src/messaging/ReliableMessageMgr.cpp b/src/messaging/ReliableMessageMgr.cpp index d4e2457d178098..2db80c5ffd337e 100644 --- a/src/messaging/ReliableMessageMgr.cpp +++ b/src/messaging/ReliableMessageMgr.cpp @@ -37,8 +37,8 @@ #include #if CHIP_CONFIG_ENABLE_ICD_SERVER -#include // nogncheck -#include // nogncheck +#include // nogncheck +#include // nogncheck #endif using namespace chip::System::Clock::Literals; diff --git a/src/messaging/ReliableMessageProtocolConfig.cpp b/src/messaging/ReliableMessageProtocolConfig.cpp index 46d4b4b675b405..67e199779c3bcd 100644 --- a/src/messaging/ReliableMessageProtocolConfig.cpp +++ b/src/messaging/ReliableMessageProtocolConfig.cpp @@ -30,7 +30,7 @@ #include #if CHIP_CONFIG_ENABLE_ICD_SERVER -#include // nogncheck +#include // nogncheck #endif namespace chip { diff --git a/src/messaging/tests/BUILD.gn b/src/messaging/tests/BUILD.gn index db09de5034e253..d2d3ebbd8bafb9 100644 --- a/src/messaging/tests/BUILD.gn +++ b/src/messaging/tests/BUILD.gn @@ -83,6 +83,6 @@ chip_test_suite_using_nltest("tests") { ] if (chip_enable_icd_server) { - public_deps += [ "${chip_root}/src/app/icd:configuration-data" ] + public_deps += [ "${chip_root}/src/app/icd/server:configuration-data" ] } } diff --git a/src/messaging/tests/TestAbortExchangesForFabric.cpp b/src/messaging/tests/TestAbortExchangesForFabric.cpp index 4c2d682441ab82..455462bb14e2e4 100644 --- a/src/messaging/tests/TestAbortExchangesForFabric.cpp +++ b/src/messaging/tests/TestAbortExchangesForFabric.cpp @@ -33,7 +33,7 @@ #include #if CHIP_CONFIG_ENABLE_ICD_SERVER -#include // nogncheck +#include // nogncheck #endif namespace { diff --git a/src/messaging/tests/TestReliableMessageProtocol.cpp b/src/messaging/tests/TestReliableMessageProtocol.cpp index db5dc144b0c2ae..cfdd00bff624f5 100644 --- a/src/messaging/tests/TestReliableMessageProtocol.cpp +++ b/src/messaging/tests/TestReliableMessageProtocol.cpp @@ -46,7 +46,7 @@ #include #if CHIP_CONFIG_ENABLE_ICD_SERVER -#include // nogncheck +#include // nogncheck #endif namespace { diff --git a/src/platform/BUILD.gn b/src/platform/BUILD.gn index f8dcd3b9d5f1e6..1a86faba89922c 100644 --- a/src/platform/BUILD.gn +++ b/src/platform/BUILD.gn @@ -516,7 +516,7 @@ if (chip_device_platform != "none") { ":platform_base", "${chip_root}/src/app:app_config", "${chip_root}/src/app/common:cluster-objects", - "${chip_root}/src/app/icd:icd_config", + "${chip_root}/src/app/icd/server:icd-server-config", "${chip_root}/src/credentials:build_time_header", "${chip_root}/src/crypto", "${chip_root}/src/lib/support", diff --git a/src/protocols/secure_channel/tests/BUILD.gn b/src/protocols/secure_channel/tests/BUILD.gn index de3984a74dc2aa..fe3cafe7f0d4fb 100644 --- a/src/protocols/secure_channel/tests/BUILD.gn +++ b/src/protocols/secure_channel/tests/BUILD.gn @@ -24,7 +24,7 @@ chip_test_suite_using_nltest("tests") { sources = [ "CheckIn_Message_test_vectors.h" ] public_deps = [ - "${chip_root}/src/app/icd:icd_config", + "${chip_root}/src/app/icd/server:icd-server-config", "${chip_root}/src/credentials/tests:cert_test_vectors", "${chip_root}/src/crypto/tests:tests.lib", "${chip_root}/src/lib/core", @@ -42,6 +42,6 @@ chip_test_suite_using_nltest("tests") { cflags = [ "-Wconversion" ] if (chip_enable_icd_server) { - public_deps += [ "${chip_root}/src/app/icd:configuration-data" ] + public_deps += [ "${chip_root}/src/app/icd/server:configuration-data" ] } } diff --git a/src/protocols/secure_channel/tests/TestPASESession.cpp b/src/protocols/secure_channel/tests/TestPASESession.cpp index 01e987d425446b..f94ebb0921a533 100644 --- a/src/protocols/secure_channel/tests/TestPASESession.cpp +++ b/src/protocols/secure_channel/tests/TestPASESession.cpp @@ -36,7 +36,7 @@ #include #if CHIP_CONFIG_ENABLE_ICD_SERVER -#include // nogncheck +#include // nogncheck #endif // This test suite pushes multiple PASESession objects onto the stack for the From bdbd6de18e4cdc2b09c28fe7bf91eef8da524d9a Mon Sep 17 00:00:00 2001 From: Tennessee Carmel-Veilleux Date: Tue, 30 Jan 2024 23:16:13 -0500 Subject: [PATCH 07/16] Remove several direct uses of TLVWriter::mWritePoint (#31770) * Remove several direct uses of TLVWriter::mWritePoint - Remove all writing to mWritePoint that occur outside of WriteData - Remove unsafe usage of CONFIG_HAVE_VSNPRINTF_EX - Does not impact public API as it was one underlying possible optimization, and the remaining code would work. Also, not used in SDK at all. - Removed secondary paths that were potentially unsafe in TLVWriter::WriteElementHead Fixes #31769 Testing done: - All existing unit tests still pass. - Only removed and non-functionally-refactored code. * Restyled by clang-format * Update src/lib/core/TLVWriter.cpp Co-authored-by: Kevin Schoedel --------- Co-authored-by: tennessee.carmelveilleux@gmail.com Co-authored-by: Restyled.io Co-authored-by: Kevin Schoedel --- src/lib/core/TLVWriter.cpp | 69 ++++++-------------------------------- src/system/BUILD.gn | 1 - 2 files changed, 11 insertions(+), 59 deletions(-) diff --git a/src/lib/core/TLVWriter.cpp b/src/lib/core/TLVWriter.cpp index b20cc70adde8f0..825b8c7b671406 100644 --- a/src/lib/core/TLVWriter.cpp +++ b/src/lib/core/TLVWriter.cpp @@ -101,6 +101,7 @@ CHIP_ERROR TLVWriter::Init(TLVBackingStore & backingStore, uint32_t maxLen /* = if (err != CHIP_NO_ERROR) return err; + VerifyOrReturnError(mBufStart != nullptr, CHIP_ERROR_INTERNAL); mWritePoint = mBufStart; mInitializationCookie = kExpectedInitializationCookie; return CHIP_NO_ERROR; @@ -363,11 +364,7 @@ CHIP_ERROR TLVWriter::VPutStringF(Tag tag, const char * fmt, va_list ap) size_t dataLen; CHIP_ERROR err = CHIP_NO_ERROR; TLVFieldSize lenFieldSize; -#if CONFIG_HAVE_VSNPRINTF_EX - size_t skipLen; - size_t writtenBytes; -#elif CONFIG_HAVE_VCBPRINTF -#else +#if !CONFIG_HAVE_VCBPRINTF char * tmpBuf; #endif va_copy(aq, ap); @@ -396,47 +393,14 @@ CHIP_ERROR TLVWriter::VPutStringF(Tag tag, const char * fmt, va_list ap) VerifyOrExit((mLenWritten + dataLen) <= mMaxLen, err = CHIP_ERROR_BUFFER_TOO_SMALL); // write data -#if CONFIG_HAVE_VSNPRINTF_EX - - skipLen = 0; - - do - { - va_copy(aq, ap); - - vsnprintf_ex(reinterpret_cast(mWritePoint), mRemainingLen, skipLen, fmt, aq); - - va_end(aq); - - writtenBytes = (mRemainingLen >= (dataLen - skipLen)) ? dataLen - skipLen : mRemainingLen; - skipLen += writtenBytes; - mWritePoint += writtenBytes; - mRemainingLen -= writtenBytes; - mLenWritten += writtenBytes; - if (skipLen < dataLen) - { - VerifyOrExit(mBackingStore != NULL, err = CHIP_ERROR_NO_MEMORY); - - err = mBackingStore->FinalizeBuffer(*this, mBufHandle, mBufStart, mWritePoint - mBufStart); - SuccessOrExit(err); - - err = mBackingStore->GetNewBuffer(*this, mBufHandle, mBufStart, mRemainingLen); - SuccessOrExit(err); - - mWritePoint = mBufStart; - } - - } while (skipLen < dataLen); - -#elif CONFIG_HAVE_VCBPRINTF +#if CONFIG_HAVE_VCBPRINTF va_copy(aq, ap); vcbprintf(TLVWriterPutcharCB, this, dataLen, fmt, aq); va_end(aq); - -#else // CONFIG_HAVE_VSNPRINTF_EX +#else // CONFIG_HAVE_VCBPRINTF tmpBuf = static_cast(chip::Platform::MemoryAlloc(dataLen + 1)); VerifyOrExit(tmpBuf != nullptr, err = CHIP_ERROR_NO_MEMORY); @@ -450,7 +414,7 @@ CHIP_ERROR TLVWriter::VPutStringF(Tag tag, const char * fmt, va_list ap) err = WriteData(reinterpret_cast(tmpBuf), static_cast(dataLen)); chip::Platform::MemoryFree(tmpBuf); -#endif // CONFIG_HAVE_VSNPRINTF_EX +#endif // CONFIG_HAVE_VCBPRINTF exit: @@ -694,19 +658,13 @@ CHIP_ERROR TLVWriter::WriteElementHead(TLVElementType elemType, Tag tag, uint64_ ABORT_ON_UNINITIALIZED_IF_ENABLED(); VerifyOrReturnError(IsInitialized(), CHIP_ERROR_INCORRECT_STATE); - uint8_t * p; - uint8_t stagingBuf[17]; // 17 = 1 control byte + 8 tag bytes + 8 length/value bytes - if (IsContainerOpen()) return CHIP_ERROR_TLV_CONTAINER_OPEN; + uint8_t stagingBuf[17]; // 17 = 1 control byte + 8 tag bytes + 8 length/value bytes + uint8_t * p = stagingBuf; uint32_t tagNum = TagNumFromTag(tag); - if ((mRemainingLen >= sizeof(stagingBuf)) && (mMaxLen >= sizeof(stagingBuf))) - p = mWritePoint; - else - p = stagingBuf; - if (IsSpecialTag(tag)) { if (tagNum <= Tag::kContextTagMaxNum) @@ -799,15 +757,9 @@ CHIP_ERROR TLVWriter::WriteElementHead(TLVElementType elemType, Tag tag, uint64_ break; } - if ((mRemainingLen >= sizeof(stagingBuf)) && (mMaxLen >= sizeof(stagingBuf))) - { - uint32_t len = static_cast(p - mWritePoint); - mWritePoint = p; - mRemainingLen -= len; - mLenWritten += len; - return CHIP_NO_ERROR; - } - return WriteData(stagingBuf, static_cast(p - stagingBuf)); + uint32_t bytesStaged = static_cast(p - stagingBuf); + VerifyOrDie(bytesStaged <= sizeof(stagingBuf)); + return WriteData(stagingBuf, bytesStaged); } CHIP_ERROR TLVWriter::WriteElementWithData(TLVType type, Tag tag, const uint8_t * data, uint32_t dataLen) @@ -855,6 +807,7 @@ CHIP_ERROR TLVWriter::WriteData(const uint8_t * p, uint32_t len) ReturnErrorOnFailure(mBackingStore->FinalizeBuffer(*this, mBufStart, static_cast(mWritePoint - mBufStart))); ReturnErrorOnFailure(mBackingStore->GetNewBuffer(*this, mBufStart, mRemainingLen)); + VerifyOrReturnError(mRemainingLen > 0, CHIP_ERROR_NO_MEMORY); mWritePoint = mBufStart; diff --git a/src/system/BUILD.gn b/src/system/BUILD.gn index 73acdf1bc24d42..5953dc6a0ffdd0 100644 --- a/src/system/BUILD.gn +++ b/src/system/BUILD.gn @@ -118,7 +118,6 @@ buildconfig_header("system_buildconfig") { "HAVE_NETINET_ICMP6_H=true", "HAVE_ICMP6_FILTER=true", "CONFIG_HAVE_VCBPRINTF=false", - "CONFIG_HAVE_VSNPRINTF_EX=false", "HAVE_SYS_SOCKET_H=${chip_system_config_use_sockets}", ] From 219c3f0d592a24d54b9508f28f1048df55ae7ddc Mon Sep 17 00:00:00 2001 From: Song GUO Date: Wed, 31 Jan 2024 15:59:41 +0800 Subject: [PATCH 08/16] [chip-tool] Support LIT ICD in chip-tool for subscriptions (#31576) --- .../commands/clusters/ModelCommand.cpp | 30 +++++++++++++++++++ .../commands/clusters/ModelCommand.h | 9 ++++++ .../commands/clusters/ReportCommand.h | 3 ++ .../chip-tool/commands/icd/ICDCommand.cpp | 8 +++-- src/app/icd/client/DefaultICDClientStorage.h | 22 ++++++++++++++ src/app/tests/TestDefaultICDClientStorage.cpp | 4 ++- .../interaction_model/InteractionModel.cpp | 3 ++ .../interaction_model/InteractionModel.h | 8 +++++ .../java/CHIPDeviceController-JNI.cpp | 4 +-- 9 files changed, 86 insertions(+), 5 deletions(-) diff --git a/examples/chip-tool/commands/clusters/ModelCommand.cpp b/examples/chip-tool/commands/clusters/ModelCommand.cpp index 31fd2e14a15a1f..c908f9fa71b548 100644 --- a/examples/chip-tool/commands/clusters/ModelCommand.cpp +++ b/examples/chip-tool/commands/clusters/ModelCommand.cpp @@ -19,6 +19,7 @@ #include "ModelCommand.h" #include +#include #include using namespace ::chip; @@ -35,6 +36,7 @@ CHIP_ERROR ModelCommand::RunCommand() } ChipLogProgress(chipTool, "Sending command to node 0x%" PRIx64, mDestinationId); + CheckPeerICDType(); CommissioneeDeviceProxy * commissioneeDeviceProxy = nullptr; if (CHIP_NO_ERROR == CurrentCommissioner().GetDeviceBeingCommissioned(mDestinationId, &commissioneeDeviceProxy)) @@ -73,3 +75,31 @@ void ModelCommand::Shutdown() CHIPCommand::Shutdown(); } + +void ModelCommand::CheckPeerICDType() +{ + if (mIsPeerLIT.HasValue()) + { + ChipLogProgress(chipTool, "Peer ICD type is set to %s", mIsPeerLIT.Value() == 1 ? "LIT-ICD" : "non LIT-ICD"); + return; + } + + app::ICDClientInfo info; + auto destinationPeerId = chip::ScopedNodeId(mDestinationId, CurrentCommissioner().GetFabricIndex()); + auto iter = CHIPCommand::sICDClientStorage.IterateICDClientInfo(); + if (iter == nullptr) + { + return; + } + app::DefaultICDClientStorage::ICDClientInfoIteratorWrapper clientInfoIteratorWrapper(iter); + + while (iter->Next(info)) + { + if (ScopedNodeId(info.peer_node.GetNodeId(), info.peer_node.GetFabricIndex()) == destinationPeerId) + { + ChipLogProgress(chipTool, "Peer is a registered LIT ICD."); + mIsPeerLIT.SetValue(true); + return; + } + } +} diff --git a/examples/chip-tool/commands/clusters/ModelCommand.h b/examples/chip-tool/commands/clusters/ModelCommand.h index 0b6339ab60f5ed..9561932c9b74e0 100644 --- a/examples/chip-tool/commands/clusters/ModelCommand.h +++ b/examples/chip-tool/commands/clusters/ModelCommand.h @@ -52,6 +52,10 @@ class ModelCommand : public CHIPCommand "Endpoint the command is targeted at."); } } + AddArgument( + "lit-icd-peer", 0, 1, &mIsPeerLIT, + "Whether to treat the peer as a LIT ICD. false: Always no, true: Always yes, (not set): Yes if the peer is registered " + "to this controller."); AddArgument("timeout", 0, UINT16_MAX, &mTimeout); } @@ -66,11 +70,16 @@ class ModelCommand : public CHIPCommand void Shutdown() override; protected: + bool IsPeerLIT() { return mIsPeerLIT.ValueOr(false); } + chip::Optional mTimeout; private: chip::NodeId mDestinationId; std::vector mEndPointId; + chip::Optional mIsPeerLIT; + + void CheckPeerICDType(); static void OnDeviceConnectedFn(void * context, chip::Messaging::ExchangeManager & exchangeMgr, const chip::SessionHandle & sessionHandle); diff --git a/examples/chip-tool/commands/clusters/ReportCommand.h b/examples/chip-tool/commands/clusters/ReportCommand.h index eefd938c2d0717..e2c0f1db785900 100644 --- a/examples/chip-tool/commands/clusters/ReportCommand.h +++ b/examples/chip-tool/commands/clusters/ReportCommand.h @@ -277,6 +277,7 @@ class SubscribeAttribute : public SubscribeCommand CHIP_ERROR SendCommand(chip::DeviceProxy * device, std::vector endpointIds) override { + SubscribeCommand::SetPeerLIT(IsPeerLIT()); return SubscribeCommand::SubscribeAttribute(device, endpointIds, mClusterIds, mAttributeIds); } @@ -407,6 +408,7 @@ class SubscribeEvent : public SubscribeCommand CHIP_ERROR SendCommand(chip::DeviceProxy * device, std::vector endpointIds) override { + SubscribeCommand::SetPeerLIT(IsPeerLIT()); return SubscribeCommand::SubscribeEvent(device, endpointIds, mClusterIds, mEventIds); } @@ -538,6 +540,7 @@ class SubscribeAll : public SubscribeCommand CHIP_ERROR SendCommand(chip::DeviceProxy * device, std::vector endpointIds) override { + SubscribeCommand::SetPeerLIT(IsPeerLIT()); return SubscribeCommand::SubscribeAll(device, endpointIds, mClusterIds, mAttributeIds, mEventIds); } diff --git a/examples/chip-tool/commands/icd/ICDCommand.cpp b/examples/chip-tool/commands/icd/ICDCommand.cpp index 4d8ab7e93452d1..fbfc6a2083a5d5 100644 --- a/examples/chip-tool/commands/icd/ICDCommand.cpp +++ b/examples/chip-tool/commands/icd/ICDCommand.cpp @@ -18,6 +18,7 @@ #include "ICDCommand.h" +#include #include #include @@ -29,6 +30,11 @@ CHIP_ERROR ICDListCommand::RunCommand() auto iter = CHIPCommand::sICDClientStorage.IterateICDClientInfo(); char icdAesKeyHex[Crypto::kAES_CCM128_Key_Length * 2 + 1]; char icdHmacKeyHex[Crypto::kHMAC_CCM128_Key_Length * 2 + 1]; + if (iter == nullptr) + { + return CHIP_ERROR_NO_MEMORY; + } + app::DefaultICDClientStorage::ICDClientInfoIteratorWrapper clientInfoIteratorWrapper(iter); fprintf(stderr, " +-----------------------------------------------------------------------------+\n"); fprintf(stderr, " | %-75s |\n", "Known ICDs:"); fprintf(stderr, " +-----------------------------------------------------------------------------+\n"); @@ -54,8 +60,6 @@ CHIP_ERROR ICDListCommand::RunCommand() } fprintf(stderr, " +-----------------------------------------------------------------------------+\n"); - - iter->Release(); SetCommandExitStatus(CHIP_NO_ERROR); return CHIP_NO_ERROR; } diff --git a/src/app/icd/client/DefaultICDClientStorage.h b/src/app/icd/client/DefaultICDClientStorage.h index 1f6c2f8eb14a2c..7306dbafdf65d2 100644 --- a/src/app/icd/client/DefaultICDClientStorage.h +++ b/src/app/icd/client/DefaultICDClientStorage.h @@ -53,6 +53,28 @@ class DefaultICDClientStorage : public ICDClientStorage public: using ICDClientInfoIterator = CommonIterator; + // ICDClientInfoIterator wrapper to release ICDClientInfoIterator when it is out of scope + class ICDClientInfoIteratorWrapper + { + public: + ICDClientInfoIteratorWrapper(ICDClientInfoIterator * apICDClientInfoIterator) + { + mpICDClientInfoIterator = apICDClientInfoIterator; + } + + ~ICDClientInfoIteratorWrapper() + { + if (mpICDClientInfoIterator != nullptr) + { + mpICDClientInfoIterator->Release(); + mpICDClientInfoIterator = nullptr; + } + } + + private: + ICDClientInfoIterator * mpICDClientInfoIterator = nullptr; + }; + static constexpr size_t kIteratorsMax = CHIP_CONFIG_MAX_ICD_CLIENTS_INFO_STORAGE_CONCURRENT_ITERATORS; CHIP_ERROR Init(PersistentStorageDelegate * clientInfoStore, Crypto::SymmetricKeystore * keyStore); diff --git a/src/app/tests/TestDefaultICDClientStorage.cpp b/src/app/tests/TestDefaultICDClientStorage.cpp index e5e0024c0022f0..62787a2c9e4144 100644 --- a/src/app/tests/TestDefaultICDClientStorage.cpp +++ b/src/app/tests/TestDefaultICDClientStorage.cpp @@ -179,6 +179,8 @@ void TestClientInfoCountMultipleFabric(nlTestSuite * apSuite, void * apContext) err = manager.DeleteEntry(ScopedNodeId(nodeId1, fabricId1)); NL_TEST_ASSERT(apSuite, err == CHIP_NO_ERROR); iterator = manager.IterateICDClientInfo(); + NL_TEST_ASSERT(apSuite, iterator != nullptr); + DefaultICDClientStorage::ICDClientInfoIteratorWrapper clientInfoIteratorWrapper(iterator); NL_TEST_ASSERT(apSuite, iterator->Count() == 2); err = manager.DeleteEntry(ScopedNodeId(nodeId2, fabricId1)); @@ -196,7 +198,7 @@ void TestClientInfoCountMultipleFabric(nlTestSuite * apSuite, void * apContext) { count++; } - iterator->Release(); + NL_TEST_ASSERT(apSuite, count == 0); } diff --git a/src/app/tests/suites/commands/interaction_model/InteractionModel.cpp b/src/app/tests/suites/commands/interaction_model/InteractionModel.cpp index a2c418435990e4..04e658f18cc188 100644 --- a/src/app/tests/suites/commands/interaction_model/InteractionModel.cpp +++ b/src/app/tests/suites/commands/interaction_model/InteractionModel.cpp @@ -350,6 +350,7 @@ CHIP_ERROR InteractionModelReports::ReportAttribute(DeviceProxy * device, std::v { params.mKeepSubscriptions = mKeepSubscriptions.Value(); } + params.mIsPeerLIT = mIsPeerLIT; } auto client = std::make_unique(InteractionModelEngine::GetInstance(), device->GetExchangeManager(), @@ -479,6 +480,7 @@ CHIP_ERROR InteractionModelReports::ReportEvent(DeviceProxy * device, std::vecto { params.mKeepSubscriptions = mKeepSubscriptions.Value(); } + params.mIsPeerLIT = mIsPeerLIT; } auto client = std::make_unique(InteractionModelEngine::GetInstance(), device->GetExchangeManager(), @@ -652,6 +654,7 @@ CHIP_ERROR InteractionModelReports::ReportAll(chip::DeviceProxy * device, std::v { params.mKeepSubscriptions = mKeepSubscriptions.Value(); } + params.mIsPeerLIT = mIsPeerLIT; } auto client = std::make_unique(InteractionModelEngine::GetInstance(), device->GetExchangeManager(), diff --git a/src/app/tests/suites/commands/interaction_model/InteractionModel.h b/src/app/tests/suites/commands/interaction_model/InteractionModel.h index da3c3378a45d90..dbbf4246680c5f 100644 --- a/src/app/tests/suites/commands/interaction_model/InteractionModel.h +++ b/src/app/tests/suites/commands/interaction_model/InteractionModel.h @@ -205,6 +205,12 @@ class InteractionModelReports return *this; } + InteractionModelReports & SetPeerLIT(bool isPeerLIT) + { + mIsPeerLIT = isPeerLIT; + return *this; + } + void ResetOptions() { mDataVersions = chip::NullOptional; @@ -213,6 +219,7 @@ class InteractionModelReports mFabricFiltered = chip::Optional(true); mKeepSubscriptions = chip::NullOptional; mAutoResubscribe = chip::NullOptional; + mIsPeerLIT = false; mMinInterval = 0; mMaxInterval = 0; } @@ -223,6 +230,7 @@ class InteractionModelReports chip::Optional mFabricFiltered; chip::Optional mKeepSubscriptions; chip::Optional mAutoResubscribe; + bool mIsPeerLIT; uint16_t mMinInterval; uint16_t mMaxInterval; }; diff --git a/src/controller/java/CHIPDeviceController-JNI.cpp b/src/controller/java/CHIPDeviceController-JNI.cpp index 48e2192c1d5281..655f10c0870391 100644 --- a/src/controller/java/CHIPDeviceController-JNI.cpp +++ b/src/controller/java/CHIPDeviceController-JNI.cpp @@ -2176,6 +2176,8 @@ JNI_METHOD(jobject, getICDClientInfo)(JNIEnv * env, jobject self, jlong handle, ChipLogError(Controller, "CreateArrayList failed!: %" CHIP_ERROR_FORMAT, err.Format())); auto iter = wrapper->getICDClientStorage()->IterateICDClientInfo(); + VerifyOrReturnValue(iter != nullptr, nullptr, ChipLogError(Controller, "IterateICDClientInfo failed!")); + app::DefaultICDClientStorage::ICDClientInfoIteratorWrapper clientInfoIteratorWrapper(iter); jmethodID constructor; jclass infoClass; @@ -2219,8 +2221,6 @@ JNI_METHOD(jobject, getICDClientInfo)(JNIEnv * env, jobject self, jlong handle, ChipLogError(Controller, "AddToList error!: %" CHIP_ERROR_FORMAT, err.Format())); } - iter->Release(); - return jInfo; } From b1bf11eae359e6744ba571676f210617802dab9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Josefsen?= <69624991+ReneJosefsen@users.noreply.github.com> Date: Wed, 31 Jan 2024 09:58:22 +0100 Subject: [PATCH 09/16] Initial version of matter device graph tool (#30187) * Initial commit of matter device graph tool * Fix a few misspell * Minor word change in readme * Fix spelling * Restyle * Restyle2 * Remove from wordlist and make link * Update src/tools/device-graph/matter-device-graph.py Co-authored-by: C Freeman * Suppressed linter warnings * Rename readme file * Uppercase readme file * Added orphan to readme * Added line limet for cluster names and fixed arrow parameter * Added handling for long cluster names and improved tree view * Added output details in readme --------- Co-authored-by: C Freeman --- .github/.wordlist.txt | 1 + src/tools/device-graph/README.md | 82 +++++++ .../matter-device-graph-example.png | Bin 0 -> 163814 bytes src/tools/device-graph/matter-device-graph.py | 208 ++++++++++++++++++ 4 files changed, 291 insertions(+) create mode 100644 src/tools/device-graph/README.md create mode 100644 src/tools/device-graph/matter-device-graph-example.png create mode 100644 src/tools/device-graph/matter-device-graph.py diff --git a/.github/.wordlist.txt b/.github/.wordlist.txt index c2820eee66d529..58a06086679e06 100644 --- a/.github/.wordlist.txt +++ b/.github/.wordlist.txt @@ -634,6 +634,7 @@ GPL GPLv Gradle gradlew +graphviz Groupcast GroupId GroupKeyManagement diff --git a/src/tools/device-graph/README.md b/src/tools/device-graph/README.md new file mode 100644 index 00000000000000..db8c10f96b1c7f --- /dev/null +++ b/src/tools/device-graph/README.md @@ -0,0 +1,82 @@ +--- +orphan: true +--- + +# Setup + +This tool uses the python environment used by the python_testing efforts, which +can be built using the below command. Notice that graphviz is required as an +extra package in order for the tool to generate the graph file. + +``` +scripts/build_python.sh -m platform -i out/python_env --extra_packages graphviz +``` + +Once the python environment is build it can be activated using this command: + +``` +source out/python_env/bin/activate +``` + +# How to run + +When the python environment is activated the tool can be started as a regular +python script. The tool does rely on the "framework" used for python testing, +which means it is possible to do the commissioning of the DUT as well. + +By adding the appropriate parameters to the script execution, it will +automatically perform a commissioning before running the tool itself. + +This is an example of running the test including commissioning a Thread based +example app device + +``` +python3 '/Users/renejosefsen/Developer/GitData/connectedhomeip/src/tools/device-graph/matter-device-graph.py' --commissioning-method ble-thread --discriminator 3840 --passcode 20202021 --thread-dataset-hex 0e08000000000001000035060004001fffe00708fdbeb88eb19ecbe60410ec73aeaadc21448df01599e6eaf216eb0c0402a0f7f8000300001901025b3502085b35dead5b35beef030435623335051000112233445566778899aabbccddeeff +``` + +In case the setup code and discriminator is not available, the QR code can also +be used: + +``` +python3 '/Users/renejosefsen/Developer/GitData/connectedhomeip/src/tools/device-graph/matter-device-graph.py' --commissioning-method ble-thread --qr-code MT:K2AA04EG15LL6I0LF00 --thread-dataset-hex 0e08000000000001000035060004001fffe00708fd6df9cc6d0db45b0410e12c1d624d8b4daf6adbfe5b2cd7787b0c0402a0f7f8000300001901025b3502085b35dead5b35beef030435623335051000112233445566778899aabbccddeeff +``` + +In case the device uses a development PAA, the following parameter should be +added. + +``` +--paa-trust-store-path credentials/development/paa-root-certs +``` + +In case the device uses a production PAA, the following parameter should be +added. + +``` +--paa-trust-store-path credentials/production/paa-root-certs +``` + +Once a commissioning is completed for the device, is is possible to rerun the +tool again for an already commissioned devices, this is an example of how to do +so: + +``` +python3 '/Users/renejosefsen/Developer/GitData/connectedhomeip/src/tools/device-graph/matter-device-graph.py' +``` + +The tool currently outputs the dot file in this folder and the output file is +named "matter-device-graph.dot". + +# How to view graph + +In order to view the graph, any tool that renders dot/graphviz files can be +used. + +It is possible to open dot files and get them rendered in vscode using this +extension: +[vscode-graphviz](https://marketplace.visualstudio.com/items?itemName=joaompinto.vscode-graphviz) + +# Example of output + +This is an example of the graph outputted from a device: + +![matter device graph example](./matter-device-graph-example.png) diff --git a/src/tools/device-graph/matter-device-graph-example.png b/src/tools/device-graph/matter-device-graph-example.png new file mode 100644 index 0000000000000000000000000000000000000000..f6ae192adffa07a95f3450360c029bbbac705a87 GIT binary patch literal 163814 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

!KCWN>+|XMzv+|y^_lJVi)Y@pAccv6~ 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 _%qEdf{+JDtu77BI^_ul;NQ7{6BtolHu$ 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%0A;nI{YJe(rF?6A#fcklA?vU+xoQw zudMcv3SS9YhUI*~`-ZHo>9en+crBD4Lme(%&!zjadQbr6t%`te(gyj|u(M{tV?cvE zv=@1Y=@COYD)tH zSD9lFic%U=IH+IdH~(rLID!x9lHmZ0_vv*ZzOiHk z+Rn(IM3Cwf<4{VR!Y3;$xQqbmch;)5n>Zp?hCUZ%E^Pu)B#}LVTxo0YbVxZLk!*y|1p{s%C zBIryy2Ok3!7-3yk%73O9D!QC7JHhgDqzZ1;sU-Ccy5SP1{0PdT?D$vRHtQiXew$GX zdUUAp{_f&nfczUNj%L*KjtJZg@+UJdq6U`Xqd5r8~){EKgNZ!8tZT(Vn8+7iRNreiKlZA&LWXqp)dp539EW@ z490(Ov;?A4I#M2BvT{^* z2W4})jbq?SYJiB>#fV2%pv~hf6T}Ed!ZOhW7r^znqFV`Hm!^2@c!TV#0^ln_B{ZLuij`64y(4NH-x`)xFszVV#!Wz6W z-@mvgsS1s977^BP4J>DHV~rk1cyFm_rQtS>+p8K8=q+q1D!a`nHVgg0YaSil2`Z6@ zx2rdwyDg#tH<(c#8M%P)BT6Tp805!Xjk6mtgc=il3J;(iBG?5y$Jxxn6&6ajowZl! z*Il#EKgbY2!+D_h_OXB|(l8r-^}}DTx`6xD`x1feddgw>!}DNHdm!a4>AHN?cz@N& z$|6kzM?XMi0d;F)dj6auK<+eFU zG8yZjJz(9)Y&D%6xv*kmes+k%cu)e%L>Gi?y=ZGJV044rYeTl zX3U#F-tWDbZ|(l(u#VMiq3+oltBS+u1RG04t3ej7G!?spi?xxJd%ugoU75`!p_Y@< z#=bYwsiF|%v^w#v$Z9+R+%&wzKCFo)gE_5blj4&N} z*uVHv@1qecoh{J;%Np!ua6huP&p5t(USjcIp7^)Z*~=hPz%?k5cp*3a+Q4g8z)NcB zA|L0=h7M9|$-TtiA} zEUH$lL~OMo+{4iYLHbB8m3rld5q_fI-CmVy-$i)8RG0!nO8|HIT^)Q^$j?f4kiXtk z1lyLh`!&}O?o@0PWJyG_XpMn0xE2rSQY*pVwEU$|_(g`Lr5fBi1^1P(qQ#0`eJJHL zG8cYreJ@5fA{&11tWX6C5oS0amUEKfuvHy}6}ZS+XMhmAxum2Kf1&HRNWi5l$DQeq zt1s$U-IoKNf?Ipg{eG(^t{(CJ&(9sEow(258AHV=tAxc~6vRx1ZhIX?>D6X_gYnv+ zwgS_hsqRe8gN}67tm@}SG4Efsx6YKU|II&&+d}(*!(m}yZ!xEiG8$b#xn8WW*?EYn zeIe_VWP+>(i#D#CtN+UW*^~ZdTSy+L0nm!; z)_-AZ|Cr$a&U|JNIIf8QEA9Wc0{j1`Z99S6WeQGb2jkPEiR=a&56@ydUmQ2R|86k& cAi>rl-*7w9FX>C;Iq;8+guM7CQC-jf2g0SZlK=n! literal 0 HcmV?d00001 diff --git a/src/tools/device-graph/matter-device-graph.py b/src/tools/device-graph/matter-device-graph.py new file mode 100644 index 00000000000000..16a2e6dbb0cd5b --- /dev/null +++ b/src/tools/device-graph/matter-device-graph.py @@ -0,0 +1,208 @@ +# +# Copyright (c) 2023 Project CHIP Authors +# All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import os +import pprint +import sys + +import chip.clusters as Clusters +import graphviz +from rich.console import Console + +# Add the path to python_testing folder, in order to be able to import from matter_testing_support +sys.path.append(os.path.abspath(sys.path[0] + "/../../python_testing")) +from matter_testing_support import MatterBaseTest, async_test_body, default_matter_test_main # noqa: E402 + +console = None +maxClusterNameLength = 30 + + +# Given there is currently no tranlation from DeviceTypeID to the device type name, +# this dict is created for now. When some more general is available, it should be updated to use this. +deviceTypeDict = { + 22: "Root Node", + 17: "Power Source", + 18: "OTA Requestor", + 20: "OTA Provider", + 14: "Aggregator", + 19: "Bridged Node", + 256: "On/Off Light", + 257: "Dimmable Light", + 268: "Color Temperature Light", + 269: "Extended Color Light", + 266: "On/Off Plug-in Unit", + 267: "Dimmable Plug-In Unit", + 771: "Pump", + 259: "On/Off Light Switch", + 260: "Dimmer Switch", + 261: "Color Dimmer Switch", + 2112: "Control Bridge", + 772: "Pump Controller", + 15: "Generic Switch", + 21: "Contact Sensor", + 262: "Light Sensor", + 263: "Occupancy Sensor", + 770: "Temperature Sensor", + 773: "Pressure Sensor", + 774: "Flow Sensor", + 775: "Humidity Sensor", + 2128: "On/Off Sensor", + 10: "Door Lock", + 11: "Door Lock Controller", + 514: "Window Covering", + 515: "Window Covering Controller", + 768: "Heating/Cooling Unit", + 769: "Thermostat", + 43: "Fan", + 35: "Casting Video Player", + 34: "Speaker", + 36: "Content App", + 40: "Basic Video Player", + 41: "Casting Video Client", + 42: "Video Remote Control", + 39: "Mode Select", + 45: "Air Purifier", + 44: "Air Quality Sensor", + 112: "Refrigerator", + 113: "Temperature Controlled Cabinet", + 114: "Room Air Conditioner", + 115: "Laundry Washer", + 116: "Robotic Vacuum Cleaner", + 117: "Dishwasher", + 118: "Smoke CO Alarm" +} + + +def AddServerOrClientNode(graphSection, endpoint, clusterName, color, nodeRef): + + if (len(clusterName) > maxClusterNameLength): + clusterNameAdjustedLength = clusterName[:maxClusterNameLength] + '...' + else: + clusterNameAdjustedLength = clusterName + + graphSection.node(f"ep{endpoint}_{clusterName}", label=f"{clusterNameAdjustedLength}", style="filled,rounded", + color=color, shape="box", fixedsize="true", width="3", height="0.5") + graphSection.edge(nodeRef, f"ep{endpoint}_{clusterName}", style="invis") + + +def CreateEndpointGraph(graph, graphSection, endpoint, wildcardResponse): + + numberOfRowsInEndpoint = 2 + + partsListFromWildcardRead = wildcardResponse[endpoint][Clusters.Objects.Descriptor][Clusters.Objects.Descriptor.Attributes.PartsList] + + listOfDeviceTypes = [] + for deviceTypeStruct in wildcardResponse[endpoint][Clusters.Objects.Descriptor][Clusters.Objects.Descriptor.Attributes.DeviceTypeList]: + try: + listOfDeviceTypes.append(deviceTypeDict[deviceTypeStruct.deviceType]) + except KeyError: + listOfDeviceTypes.append(deviceTypeStruct.deviceType) + + # console.print(f"Endpoint: {endpoint}") + # console.print(f"DeviceTypeList: {listOfDeviceTypes}") + # console.print(f"PartsList: {partsListFromWildcardRead}") + + endpointLabel = f"Endpoint: {endpoint}\lDeviceTypeList: {listOfDeviceTypes}\lPartsList: {partsListFromWildcardRead}\l" # noqa: W605 + + nextNodeRef = "" + nodeRef = f"ep{endpoint}" + clusterColumnCount = 0 + + graphSection.node(f"ep{endpoint}", label=endpointLabel, style="filled,rounded", + color="dodgerblue", shape="box", fixedsize="true", width="4", height="1") + + for clusterId in wildcardResponse[endpoint][Clusters.Objects.Descriptor][Clusters.Objects.Descriptor.Attributes.ServerList]: + clusterColumnCount += 1 + + try: + clusterName = Clusters.ClusterObjects.ALL_CLUSTERS[clusterId].__name__ + except KeyError: + clusterName = f"Custom server\l0x{clusterId:08X}" # noqa: W605 + + AddServerOrClientNode(graphSection, endpoint, clusterName, "olivedrab", nodeRef) + + if clusterColumnCount == 2: + nextNodeRef = f"ep{endpoint}_{clusterName}" + elif clusterColumnCount == 3: + nodeRef = nextNodeRef + clusterColumnCount = 0 + numberOfRowsInEndpoint += 1 + + for clusterId in wildcardResponse[endpoint][Clusters.Objects.Descriptor][Clusters.Objects.Descriptor.Attributes.ClientList]: + clusterColumnCount += 1 + + try: + clusterName = Clusters.ClusterObjects.ALL_CLUSTERS[clusterId].__name__ + except KeyError: + clusterName = f"Custom client\l0x{clusterId:08X}" # noqa: W605 + + AddServerOrClientNode(graphSection, endpoint, clusterName, "orange", nodeRef) + + if clusterColumnCount == 2: + nextNodeRef = f"ep{endpoint}_{clusterName}" + elif clusterColumnCount == 3: + nodeRef = nextNodeRef + clusterColumnCount = 0 + numberOfRowsInEndpoint += 1 + + if endpoint != 0: + # Create link to endpoints in the parts list + for part in partsListFromWildcardRead: + graph.edge(f"ep{endpoint}", f"ep{part}", ltail=f"cluster_{endpoint}", minlen=f"{numberOfRowsInEndpoint}") + + +class TC_MatterDeviceGraph(MatterBaseTest): + @async_test_body + async def test_matter_device_graph(self): + + # Create console to print + global console + console = Console() + + # Run descriptor validation test + dev_ctrl = self.default_controller + + # Perform wildcard read to get all attributes from device + console.print("[blue]Capturing data from device") + wildcardResponse = await dev_ctrl.ReadAttribute(self.dut_node_id, [('*')]) + # console.print(wildcardResponse) + + # Creating graph object + deviceGraph = graphviz.Digraph() + deviceGraph.attr(style="rounded", splines="line", compound="true") + + console.print("[blue]Generating graph") + # Loop through each endpoint in the response from the wildcard read + for endpoint in wildcardResponse: + + if endpoint == 0: + with deviceGraph.subgraph(name='cluster_rootnode') as rootNodeSection: + CreateEndpointGraph(deviceGraph, rootNodeSection, endpoint, wildcardResponse) + else: + with deviceGraph.subgraph(name='cluster_endpoints') as endpointsSection: + with endpointsSection.subgraph(name=f'cluster_{endpoint}') as endpointSection: + CreateEndpointGraph(deviceGraph, endpointSection, endpoint, wildcardResponse) + + deviceGraph.save(f'{sys.path[0]}/matter-device-graph.dot') + + deviceDataFile = open(f'{sys.path[0]}/matter-device-data.txt', 'w') + deviceDataFile.write(pprint.pformat((wildcardResponse))) + deviceDataFile.close() + + +if __name__ == "__main__": + default_matter_test_main() From cdd128b9e47dc32cef69b182d8954a75de8e9082 Mon Sep 17 00:00:00 2001 From: Boris Date: Wed, 31 Jan 2024 22:04:44 +0800 Subject: [PATCH 10/16] add a diagram to introduce workflow of casting video player (#31707) * add diagram * modify name * change the diagram. * Modify according to comments. --- examples/tv-casting-app/APIs.md | 3 +++ .../workflow_of_casting_video_player.png | Bin 0 -> 606892 bytes 2 files changed, 3 insertions(+) create mode 100644 examples/tv-casting-app/diagram/workflow_of_casting_video_player.png diff --git a/examples/tv-casting-app/APIs.md b/examples/tv-casting-app/APIs.md index f0fdb32484a72e..f254df1d7e2d14 100644 --- a/examples/tv-casting-app/APIs.md +++ b/examples/tv-casting-app/APIs.md @@ -67,6 +67,9 @@ Next, you're ready to: 1. [Read](#read-operations) endpoint attributes like playback state. 1. [Subscribe](#subscriptions) to playback events. +In order to illustrate these steps, refer to the figure below +![workflow of casting video player](./diagram/workflow_of_casting_video_player.png) + ## Build and Setup The Casting Client is expected to consume the Matter TV Casting library built diff --git a/examples/tv-casting-app/diagram/workflow_of_casting_video_player.png b/examples/tv-casting-app/diagram/workflow_of_casting_video_player.png new file mode 100644 index 0000000000000000000000000000000000000000..7b8abeb30e40680ca23b7a9d097329fa2cabb37d GIT binary patch literal 606892 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 z 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

yk& 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

? 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'E9_j_W#w;oC58b=7FFrER^R40Y>hB(`-6Kr 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

ExeJ%z?`t=)|b)fo%HyQwB)>n_EF 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

b0ZvuvG_sIV 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 Date: Wed, 31 Jan 2024 09:07:56 -0800 Subject: [PATCH 11/16] Generate compilation database for darwin framework and tool (#31696) * Generate compilation database for darwin framework and tool * Address codereview comments * Applied restyler fixes * Update scripts/helpers/generate_darwin_compdb.sh Co-authored-by: Boris Zbarsky --------- Co-authored-by: Andrei Litvin Co-authored-by: Boris Zbarsky --- examples/darwin-framework-tool/BUILD.gn | 9 +++++ scripts/build/build_darwin_framework.py | 4 ++ scripts/helpers/generate_darwin_compdb.sh | 45 +++++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100755 scripts/helpers/generate_darwin_compdb.sh diff --git a/examples/darwin-framework-tool/BUILD.gn b/examples/darwin-framework-tool/BUILD.gn index 1973c64a889e20..e31acadec076b6 100644 --- a/examples/darwin-framework-tool/BUILD.gn +++ b/examples/darwin-framework-tool/BUILD.gn @@ -42,6 +42,9 @@ declare_args() { } enable_provisional_features = config_enable_yaml_tests + + # Disable generating compiler database by default + generate_compilation_database = false } sdk = "macosx" @@ -107,6 +110,12 @@ action("build-darwin-framework") { args += [ "--no-clang" ] } + if (generate_compilation_database) { + args += [ "--compdb" ] + } else { + args += [ "--no-compdb" ] + } + if (config_enable_yaml_tests) { args += [ "--enable-encoding-sentinel-enum-values" ] } else { diff --git a/scripts/build/build_darwin_framework.py b/scripts/build/build_darwin_framework.py index 95f666a39fff29..d2d3665a1bcfd0 100644 --- a/scripts/build/build_darwin_framework.py +++ b/scripts/build/build_darwin_framework.py @@ -129,6 +129,9 @@ def build_darwin_framework(args): if args.enable_encoding_sentinel_enum_values: cflags += ["-DCHIP_CONFIG_IM_ENABLE_ENCODING_SENTINEL_ENUM_VALUES=1"] + if args.compdb: + cflags += ["-gen-cdb-fragment-path ", abs_path + '/compdb'] + command += ["OTHER_CFLAGS=" + ' '.join(cflags), "OTHER_LDFLAGS=" + ' '.join(ldflags)] command_result = run_command(command) print("Build Framework Result: {}".format(command_result)) @@ -172,6 +175,7 @@ def build_darwin_framework(args): parser.add_argument('--ble', action=argparse.BooleanOptionalAction) parser.add_argument('--clang', action=argparse.BooleanOptionalAction) parser.add_argument('--enable-encoding-sentinel-enum-values', action=argparse.BooleanOptionalAction) + parser.add_argument('--compdb', action=argparse.BooleanOptionalAction) args = parser.parse_args() build_darwin_framework(args) diff --git a/scripts/helpers/generate_darwin_compdb.sh b/scripts/helpers/generate_darwin_compdb.sh new file mode 100755 index 00000000000000..cc11a31569923b --- /dev/null +++ b/scripts/helpers/generate_darwin_compdb.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2020-2023 Project CHIP Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +JQ=$(which jq) +if [ $? -ne 0 ]; then + echo "'jq' not detected in PATH. Install using: brew install jq" + exit 1 +fi + +set -e +set -x + +source "$(dirname "$0")/../../scripts/activate.sh" +CHIP_ROOT="$(dirname "$0")/../.." +OUTPUT_DIR=$2 + +# Build the framework +scripts/examples/gn_build_example.sh "$@" generate_compilation_database=true + +# Clean up any stale DB files +find "$OUTPUT_DIR" -iname compile_commands\*.json | xargs rm + +# Construct json from fragments generated by xcodebuild +COMPDB_FRAGMENTS_DIR=$(find "$OUTPUT_DIR" -type d -name compdb) +sed -e '1s/^/[\'$'\n''/' -e '$s/,$/\'$'\n'']/' "$COMPDB_FRAGMENTS_DIR"/*.json >"$OUTPUT_DIR"/compile_commands_darwin_framework.json + +# Get ninja to build comdb for the rest +ninja -C "$OUTPUT_DIR" -t compdb >"$OUTPUT_DIR"/compile_commands_rest.json + +# Combine the generated compdb into one +find "$OUTPUT_DIR" -iname compile_commands\*.json | xargs jq -s 'map(.[])' >"$OUTPUT_DIR"/compile_commands.json From 4422581ac60bba47d7e51ad1227f05bda4165adf Mon Sep 17 00:00:00 2001 From: joonhaengHeo <85541460+joonhaengHeo@users.noreply.github.com> Date: Thu, 1 Feb 2024 02:38:43 +0900 Subject: [PATCH 12/16] [Android] Add to set CD trust keys (#31708) * Add to set CD trust keys * Restyled by google-java-format * Restyled by clang-format --------- Co-authored-by: Restyled.io --- .../java/AndroidDeviceControllerWrapper.cpp | 26 ++++++++++++++++++- .../java/AndroidDeviceControllerWrapper.h | 2 +- .../java/CHIPDeviceController-JNI.cpp | 4 +-- .../ChipDeviceController.java | 15 +++++++++-- 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/src/controller/java/AndroidDeviceControllerWrapper.cpp b/src/controller/java/AndroidDeviceControllerWrapper.cpp index 39feef3f704177..bdd62742c12306 100644 --- a/src/controller/java/AndroidDeviceControllerWrapper.cpp +++ b/src/controller/java/AndroidDeviceControllerWrapper.cpp @@ -543,7 +543,8 @@ CHIP_ERROR AndroidDeviceControllerWrapper::UpdateDeviceAttestationDelegateBridge return err; } -CHIP_ERROR AndroidDeviceControllerWrapper::UpdateAttestationTrustStoreBridge(jobject attestationTrustStoreDelegate) +CHIP_ERROR AndroidDeviceControllerWrapper::UpdateAttestationTrustStoreBridge(jobject attestationTrustStoreDelegate, + jobject cdTrustKeys) { CHIP_ERROR err = CHIP_NO_ERROR; @@ -566,6 +567,29 @@ CHIP_ERROR AndroidDeviceControllerWrapper::UpdateAttestationTrustStoreBridge(job } mDeviceAttestationVerifier = deviceAttestationVerifier; + if (cdTrustKeys != nullptr) + { + WellKnownKeysTrustStore * cdTrustStore = mDeviceAttestationVerifier->GetCertificationDeclarationTrustStore(); + VerifyOrExit(cdTrustStore != nullptr, err = CHIP_ERROR_INCORRECT_STATE); + + jint size; + err = JniReferences::GetInstance().GetListSize(cdTrustKeys, size); + VerifyOrExit(err == CHIP_NO_ERROR, err = CHIP_ERROR_INVALID_ARGUMENT); + + for (jint i = 0; i < size; i++) + { + jobject jTrustKey = nullptr; + err = JniReferences::GetInstance().GetListItem(cdTrustKeys, i, jTrustKey); + + VerifyOrExit(err == CHIP_NO_ERROR, err = CHIP_ERROR_INVALID_ARGUMENT); + + JNIEnv * env = JniReferences::GetInstance().GetEnvForCurrentThread(); + JniByteArray jniTrustKey(env, static_cast(jTrustKey)); + err = cdTrustStore->AddTrustedKey(jniTrustKey.byteSpan()); + VerifyOrExit(err == CHIP_NO_ERROR, err = CHIP_ERROR_INVALID_ARGUMENT); + } + } + mController->SetDeviceAttestationVerifier(mDeviceAttestationVerifier); exit: diff --git a/src/controller/java/AndroidDeviceControllerWrapper.h b/src/controller/java/AndroidDeviceControllerWrapper.h index 4e9a541fa29564..69a7fe75c0bf0b 100644 --- a/src/controller/java/AndroidDeviceControllerWrapper.h +++ b/src/controller/java/AndroidDeviceControllerWrapper.h @@ -202,7 +202,7 @@ class AndroidDeviceControllerWrapper : public chip::Controller::DevicePairingDel CHIP_ERROR UpdateDeviceAttestationDelegateBridge(jobject deviceAttestationDelegate, chip::Optional expiryTimeoutSecs, bool shouldWaitAfterDeviceAttestation); - CHIP_ERROR UpdateAttestationTrustStoreBridge(jobject attestationTrustStoreDelegate); + CHIP_ERROR UpdateAttestationTrustStoreBridge(jobject attestationTrustStoreDelegate, jobject cdTrustKeys); CHIP_ERROR StartOTAProvider(jobject otaProviderDelegate); diff --git a/src/controller/java/CHIPDeviceController-JNI.cpp b/src/controller/java/CHIPDeviceController-JNI.cpp index 655f10c0870391..ea993051b39c28 100644 --- a/src/controller/java/CHIPDeviceController-JNI.cpp +++ b/src/controller/java/CHIPDeviceController-JNI.cpp @@ -533,7 +533,7 @@ JNI_METHOD(void, setDeviceAttestationDelegate) } JNI_METHOD(void, setAttestationTrustStoreDelegate) -(JNIEnv * env, jobject self, jlong handle, jobject attestationTrustStoreDelegate) +(JNIEnv * env, jobject self, jlong handle, jobject attestationTrustStoreDelegate, jobject cdTrustKeys) { chip::DeviceLayer::StackLock lock; CHIP_ERROR err = CHIP_NO_ERROR; @@ -544,7 +544,7 @@ JNI_METHOD(void, setAttestationTrustStoreDelegate) if (attestationTrustStoreDelegate != nullptr) { jobject attestationTrustStoreDelegateRef = env->NewGlobalRef(attestationTrustStoreDelegate); - err = wrapper->UpdateAttestationTrustStoreBridge(attestationTrustStoreDelegateRef); + err = wrapper->UpdateAttestationTrustStoreBridge(attestationTrustStoreDelegateRef, cdTrustKeys); SuccessOrExit(err); } diff --git a/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java b/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java index e4b59ac387429e..6f70ad885ec9b7 100644 --- a/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java +++ b/src/controller/java/src/chip/devicecontroller/ChipDeviceController.java @@ -19,6 +19,7 @@ import android.bluetooth.BluetoothGatt; import android.util.Log; +import chip.devicecontroller.ChipDeviceController.CompletionListener; import chip.devicecontroller.GetConnectedDeviceCallbackJni.GetConnectedDeviceCallback; import chip.devicecontroller.model.AttributeWriteRequest; import chip.devicecontroller.model.ChipAttributePath; @@ -117,10 +118,18 @@ public void setDeviceAttestationDelegate( * paa certificates before commissioning. * * @param attestationTrustStoreDelegate Delegate for attestation trust store + * @param cdTrustKeys certification Declaration Trust Keys */ + public void setAttestationTrustStoreDelegate( + AttestationTrustStoreDelegate attestationTrustStoreDelegate, + @Nullable List cdTrustKeys) { + setAttestationTrustStoreDelegate( + deviceControllerPtr, attestationTrustStoreDelegate, cdTrustKeys); + } + public void setAttestationTrustStoreDelegate( AttestationTrustStoreDelegate attestationTrustStoreDelegate) { - setAttestationTrustStoreDelegate(deviceControllerPtr, attestationTrustStoreDelegate); + setAttestationTrustStoreDelegate(deviceControllerPtr, attestationTrustStoreDelegate, null); } /** @@ -1367,7 +1376,9 @@ private native void setDeviceAttestationDelegate( long deviceControllerPtr, int failSafeExpiryTimeoutSecs, DeviceAttestationDelegate delegate); private native void setAttestationTrustStoreDelegate( - long deviceControllerPtr, AttestationTrustStoreDelegate delegate); + long deviceControllerPtr, + AttestationTrustStoreDelegate delegate, + @Nullable List cdTrustKeys); private native void startOTAProvider(long deviceControllerPtr, OTAProviderDelegate delegate); From 058f1994f56fa0a390984848a2b8531d9b721f3f Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Wed, 31 Jan 2024 12:52:10 -0500 Subject: [PATCH 13/16] Add some APIs for defining local endpoints to Matter.framework. (#31673) * Add some APIs for defining local endpoints to Matter.framework. These are not hooked up to anything yet, in the sense that you can create an MTREndpointDescription but then can't do anything with it. APIs on MTRDeviceController that take an MTREndpointDescription and hook up the endpoint to actually be exposed will come later. * Address review comments. * Fix some build/lint issues. * Address more review comments. * Addressing more review comments. --- src/darwin/Framework/CHIP/Matter.h | 5 + .../CHIP/ServerEndpoint/MTRAccessGrant.h | 80 +++ .../CHIP/ServerEndpoint/MTRAccessGrant.mm | 155 ++++++ .../ServerEndpoint/MTRDeviceTypeRevision.h | 45 ++ .../ServerEndpoint/MTRDeviceTypeRevision.mm | 88 ++++ .../CHIP/ServerEndpoint/MTRServerAttribute.h | 63 +++ .../CHIP/ServerEndpoint/MTRServerAttribute.mm | 158 ++++++ .../MTRServerAttribute_Internal.h | 48 ++ .../CHIP/ServerEndpoint/MTRServerCluster.h | 111 ++++ .../CHIP/ServerEndpoint/MTRServerCluster.mm | 228 ++++++++ .../MTRServerCluster_Internal.h | 47 ++ .../CHIP/ServerEndpoint/MTRServerEndpoint.h | 87 ++++ .../CHIP/ServerEndpoint/MTRServerEndpoint.mm | 197 +++++++ .../MTRServerEndpoint_Internal.h | 39 ++ .../CHIPTests/MTRServerEndpointTests.m | 492 ++++++++++++++++++ .../Matter.xcodeproj/project.pbxproj | 66 ++- 16 files changed, 1908 insertions(+), 1 deletion(-) create mode 100644 src/darwin/Framework/CHIP/ServerEndpoint/MTRAccessGrant.h create mode 100644 src/darwin/Framework/CHIP/ServerEndpoint/MTRAccessGrant.mm create mode 100644 src/darwin/Framework/CHIP/ServerEndpoint/MTRDeviceTypeRevision.h create mode 100644 src/darwin/Framework/CHIP/ServerEndpoint/MTRDeviceTypeRevision.mm create mode 100644 src/darwin/Framework/CHIP/ServerEndpoint/MTRServerAttribute.h create mode 100644 src/darwin/Framework/CHIP/ServerEndpoint/MTRServerAttribute.mm create mode 100644 src/darwin/Framework/CHIP/ServerEndpoint/MTRServerAttribute_Internal.h create mode 100644 src/darwin/Framework/CHIP/ServerEndpoint/MTRServerCluster.h create mode 100644 src/darwin/Framework/CHIP/ServerEndpoint/MTRServerCluster.mm create mode 100644 src/darwin/Framework/CHIP/ServerEndpoint/MTRServerCluster_Internal.h create mode 100644 src/darwin/Framework/CHIP/ServerEndpoint/MTRServerEndpoint.h create mode 100644 src/darwin/Framework/CHIP/ServerEndpoint/MTRServerEndpoint.mm create mode 100644 src/darwin/Framework/CHIP/ServerEndpoint/MTRServerEndpoint_Internal.h create mode 100644 src/darwin/Framework/CHIPTests/MTRServerEndpointTests.m diff --git a/src/darwin/Framework/CHIP/Matter.h b/src/darwin/Framework/CHIP/Matter.h index 85f1399268f1a1..7000e9bade89c1 100644 --- a/src/darwin/Framework/CHIP/Matter.h +++ b/src/darwin/Framework/CHIP/Matter.h @@ -19,6 +19,7 @@ #define MTR_INCLUDED_FROM_UMBRELLA_HEADER +#import #import #import #import @@ -45,6 +46,7 @@ #import #import #import +#import #import #import #import @@ -56,6 +58,9 @@ #import #import #import +#import +#import +#import #import #import #import diff --git a/src/darwin/Framework/CHIP/ServerEndpoint/MTRAccessGrant.h b/src/darwin/Framework/CHIP/ServerEndpoint/MTRAccessGrant.h new file mode 100644 index 00000000000000..e0b25449755f16 --- /dev/null +++ b/src/darwin/Framework/CHIP/ServerEndpoint/MTRAccessGrant.h @@ -0,0 +1,80 @@ +/** + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * An access grant, which can be represented as an entry in the Matter Access + * Control cluster. + */ +MTR_NEWLY_AVAILABLE +@interface MTRAccessGrant : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + * Grant access at the provided level to a specific node on the fabric. The + * provided nodeID must be an operational node identifier. + */ ++ (nullable MTRAccessGrant *)accessGrantForNodeID:(NSNumber *)nodeID privilege:(MTRAccessControlEntryPrivilege)privilege; + +/** + * Grant access to any node on the fabric that has a matching CASE Authenticated + * Tag in its operational certificate. The provided caseAuthenticatedTag must + * be a 32-bit unsigned integer with lower 16 bits not 0, per the Matter + * specification. + */ ++ (nullable MTRAccessGrant *)accessGrantForCASEAuthenticatedTag:(NSNumber *)caseAuthenticatedTag privilege:(MTRAccessControlEntryPrivilege)privilege; + +/** + * Grant access to any node on the fabric that is communicating with us via + * group messages sent to the given group. The provided groupID must be a valid + * group identifier in the range 1-65535. + */ ++ (nullable MTRAccessGrant *)accessGrantForGroupID:(NSNumber *)groupID privilege:(MTRAccessControlEntryPrivilege)privilege; + +/** + * Grant access to any node on the fabric, as long as it's communicating with us + * over a unicast authenticated channel. + */ ++ (MTRAccessGrant *)accessGrantForAllNodesWithPrivilege:(MTRAccessControlEntryPrivilege)privilege; + +/** + * The matter access control subject ID that access has been granted for. Nil + * when access has been granted for all subjects (e.g. via initForAllNodesWithPrivilege). + */ +@property (nonatomic, copy, readonly, nullable) NSNumber * subjectID; + +/** + * The privilege that has been granted + */ +@property (nonatomic, assign, readonly) MTRAccessControlEntryPrivilege grantedPrivilege; + +/** + * The type of authentication mode the access grant is + * for. MTRAccessControlEntryAuthModeCASE for unicast messages and + * MTRAccessControlEntryAuthModeGroup for groupcast ones. + */ +@property (nonatomic, assign, readonly) MTRAccessControlEntryAuthMode authenticationMode; + +@end + +NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/ServerEndpoint/MTRAccessGrant.mm b/src/darwin/Framework/CHIP/ServerEndpoint/MTRAccessGrant.mm new file mode 100644 index 00000000000000..a4c0eebf17794a --- /dev/null +++ b/src/darwin/Framework/CHIP/ServerEndpoint/MTRAccessGrant.mm @@ -0,0 +1,155 @@ +/** + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "MTRDefines_Internal.h" +#import "MTRLogging_Internal.h" +#import + +#include +#include +#include +#include + +using namespace chip; + +MTR_DIRECT_MEMBERS +@implementation MTRAccessGrant + ++ (nullable MTRAccessGrant *)accessGrantForNodeID:(NSNumber *)nodeID privilege:(MTRAccessControlEntryPrivilege)privilege +{ + NodeId id = nodeID.unsignedLongLongValue; + if (!IsOperationalNodeId(id)) { + MTR_LOG_ERROR("MTRAccessGrant provided non-operational node ID: 0x%llx", id); + return nil; + } + + return [[MTRAccessGrant alloc] initWithSubject:[nodeID copy] privilege:privilege authenticationMode:MTRAccessControlEntryAuthModeCASE]; +} + ++ (nullable MTRAccessGrant *)accessGrantForCASEAuthenticatedTag:(NSNumber *)caseAuthenticatedTag privilege:(MTRAccessControlEntryPrivilege)privilege +{ + auto value = caseAuthenticatedTag.unsignedLongLongValue; + if (!CanCastTo(value)) { + MTR_LOG_ERROR("MTRAccessGrant provided too-large CAT value: 0x%llx", value); + return nil; + } + + CASEAuthTag tag = static_cast(value); + if (!IsValidCASEAuthTag(tag)) { + MTR_LOG_ERROR("MTRAccessGrant provided invalid CAT value: 0x%" PRIx32, tag); + return nil; + } + + return [[MTRAccessGrant alloc] initWithSubject:@(NodeIdFromCASEAuthTag(tag)) privilege:privilege authenticationMode:MTRAccessControlEntryAuthModeCASE]; +} + ++ (nullable MTRAccessGrant *)accessGrantForGroupID:(NSNumber *)groupID privilege:(MTRAccessControlEntryPrivilege)privilege +{ + auto value = groupID.unsignedLongLongValue; + if (!CanCastTo(value)) { + MTR_LOG_ERROR("MTRAccessGrant provided too-large group id: 0x%llx", value); + return nil; + } + + GroupId id = static_cast(value); + if (!IsValidGroupId(id)) { + MTR_LOG_ERROR("MTRAccessGrant provided invalid group id: 0x%" PRIx32, id); + return nil; + } + + return [[MTRAccessGrant alloc] initWithSubject:@(NodeIdFromGroupId(id)) privilege:privilege authenticationMode:MTRAccessControlEntryAuthModeGroup]; +} + ++ (MTRAccessGrant *)accessGrantForAllNodesWithPrivilege:(MTRAccessControlEntryPrivilege)privilege +{ + return [[MTRAccessGrant alloc] initWithSubject:nil privilege:privilege authenticationMode:MTRAccessControlEntryAuthModeCASE]; +} + +// initWithSubject assumes that the subject has already been validated and, if +// needed, copied from the input. +- (nullable instancetype)initWithSubject:(nullable NSNumber *)subject privilege:(MTRAccessControlEntryPrivilege)privilege authenticationMode:(MTRAccessControlEntryAuthMode)authenticationMode +{ + if (!(self = [super init])) { + return nil; + } + + _subjectID = subject; + _grantedPrivilege = privilege; + _authenticationMode = authenticationMode; + return self; +} + +- (id)copyWithZone:(NSZone *)zone +{ + // We have no mutable state. + return self; +} + +- (BOOL)isEqual:(id)object +{ + if ([object class] != [self class]) { + return NO; + } + + MTRAccessGrant * other = object; + + BOOL sameSubjectID = (_subjectID == nil && other.subjectID == nil) || [_subjectID isEqual:other.subjectID]; + return sameSubjectID && _grantedPrivilege == other.grantedPrivilege && _authenticationMode == other.authenticationMode; +} + +- (NSUInteger)hash +{ + return _subjectID.unsignedLongLongValue ^ _grantedPrivilege ^ _authenticationMode; +} + +- (NSString *)description +{ + NSString * privilege = @"Unknown"; + switch (_grantedPrivilege) { + case MTRAccessControlEntryPrivilegeView: + privilege = @"View"; + break; + case MTRAccessControlEntryPrivilegeProxyView: + privilege = @"ProxyView"; + break; + case MTRAccessControlEntryPrivilegeOperate: + privilege = @"Operate"; + break; + case MTRAccessControlEntryPrivilegeManage: + privilege = @"Manage"; + break; + case MTRAccessControlEntryPrivilegeAdminister: + privilege = @"Administer"; + break; + } + + if (_subjectID == nil) { + return [NSString stringWithFormat:@"<%@ all nodes can %@>", self.class, privilege]; + } + + NodeId nodeId = static_cast(_subjectID.unsignedLongLongValue); + if (IsGroupId(nodeId)) { + return [NSString stringWithFormat:@"<%@ group 0x%x can %@>", self.class, GroupIdFromNodeId(nodeId), privilege]; + } + + if (IsCASEAuthTag(nodeId)) { + return [NSString stringWithFormat:@"<%@ nodes with CASE Authenticated Tag 0x%08x can %@>", self.class, CASEAuthTagFromNodeId(nodeId), privilege]; + } + + return [NSString stringWithFormat:@"<%@ node 0x%016llx can %@>", self.class, nodeId, privilege]; +} + +@end diff --git a/src/darwin/Framework/CHIP/ServerEndpoint/MTRDeviceTypeRevision.h b/src/darwin/Framework/CHIP/ServerEndpoint/MTRDeviceTypeRevision.h new file mode 100644 index 00000000000000..7f4f88b0cfd643 --- /dev/null +++ b/src/darwin/Framework/CHIP/ServerEndpoint/MTRDeviceTypeRevision.h @@ -0,0 +1,45 @@ +/** + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * A representation of a "device type revision" in the sense used in the Matter + * specification. This has an identifier and a version number. + */ +MTR_NEWLY_AVAILABLE +@interface MTRDeviceTypeRevision : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + * The provided deviceTypeID must be in the range 0xVVVV0000-0xVVVVBFFF, where + * VVVV is the vendor identifier (0 for standard device types). + * + * The provided deviceTypeRevision must be in the range 1-65535. + */ +- (nullable instancetype)initWithDeviceTypeID:(NSNumber *)deviceTypeID revision:(NSNumber *)revision; + +@property (nonatomic, copy, readonly) NSNumber * deviceTypeID; +@property (nonatomic, copy, readonly) NSNumber * deviceTypeRevision; + +@end + +NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/ServerEndpoint/MTRDeviceTypeRevision.mm b/src/darwin/Framework/CHIP/ServerEndpoint/MTRDeviceTypeRevision.mm new file mode 100644 index 00000000000000..de5782c92e4aeb --- /dev/null +++ b/src/darwin/Framework/CHIP/ServerEndpoint/MTRDeviceTypeRevision.mm @@ -0,0 +1,88 @@ +/** + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "MTRDefines_Internal.h" +#import "MTRLogging_Internal.h" +#import + +#include +#include +#include + +using namespace chip; + +MTR_DIRECT_MEMBERS +@implementation MTRDeviceTypeRevision + +- (nullable instancetype)initWithDeviceTypeID:(NSNumber *)deviceTypeID revision:(NSNumber *)revision +{ + auto deviceTypeIDValue = deviceTypeID.unsignedLongLongValue; + if (!CanCastTo(deviceTypeIDValue)) { + MTR_LOG_ERROR("MTRDeviceTypeRevision provided too-large device type ID: 0x%llx", deviceTypeIDValue); + return nil; + } + + auto id = static_cast(deviceTypeIDValue); + if (!IsValidDeviceTypeId(id)) { + MTR_LOG_ERROR("MTRDeviceTypeRevision provided invalid device type ID: 0x%" PRIx32, id); + return nil; + } + + auto revisionValue = revision.unsignedLongLongValue; + if (!CanCastTo(revisionValue) || revisionValue < 1) { + MTR_LOG_ERROR("MTRDeviceTypeRevision provided invalid device type revision: 0x%llx", revisionValue); + return nil; + } + + return [self initInternalWithDeviceTypeID:[deviceTypeID copy] revision:[revision copy]]; +} + +// initInternalWithDeviceTypeID:revision assumes that the device type ID and device +// revision have already been validated and, if needed, copied from the input. +- (instancetype)initInternalWithDeviceTypeID:(NSNumber *)deviceTypeID revision:(NSNumber *)revision +{ + if (!(self = [super init])) { + return nil; + } + + _deviceTypeID = deviceTypeID; + _deviceTypeRevision = revision; + return self; +} + +- (id)copyWithZone:(NSZone *)zone +{ + // We have no mutable state. + return self; +} + +- (BOOL)isEqual:(id)object +{ + if ([object class] != [self class]) { + return NO; + } + + MTRDeviceTypeRevision * other = object; + + return [_deviceTypeID isEqual:other.deviceTypeID] && [_deviceTypeRevision isEqual:other.deviceTypeRevision]; +} + +- (NSUInteger)hash +{ + return _deviceTypeID.unsignedLongValue ^ _deviceTypeRevision.unsignedShortValue; +} + +@end diff --git a/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerAttribute.h b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerAttribute.h new file mode 100644 index 00000000000000..46e95bfb39a7bd --- /dev/null +++ b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerAttribute.h @@ -0,0 +1,63 @@ +/** + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * A representation of an attribute implemented on a server cluster by an + * MTRDeviceController. An attribute has an identifier and a value, and may or + * may not be writable. + */ +MTR_NEWLY_AVAILABLE +@interface MTRServerAttribute : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + * Initialize as a readonly attribute. The value is a data-value as documented + * in MTRBaseDevice.h. + * + * Will fail if the attribute ID is not valid per the Matter specification or + * the attribute value is not a valid data-value. + * + * requiredPrivilege is the privilege required to read the attribute. + */ +- (nullable instancetype)initReadonlyAttributeWithID:(NSNumber *)attributeID initialValue:(NSDictionary *)value requiredPrivilege:(MTRAccessControlEntryPrivilege)requiredPrivilege; + +/** + * Change the value of the attribute to a new value. The value is a data-value as documented + * in MTRBaseDevice.h. + * + * Will fail if the attribute is not a valid data-value. + */ +- (BOOL)setValue:(NSDictionary *)value; + +@property (nonatomic, copy, readonly) NSNumber * attributeID; +@property (nonatomic, copy, readonly) NSDictionary * value; +/** + * The privilege level necessary to read this attribute. + */ +@property (nonatomic, assign, readonly) MTRAccessControlEntryPrivilege requiredReadPrivilege; +@property (nonatomic, assign, readonly, getter=isWritable) BOOL writable; + +@end + +NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerAttribute.mm b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerAttribute.mm new file mode 100644 index 00000000000000..0337d555d02f2a --- /dev/null +++ b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerAttribute.mm @@ -0,0 +1,158 @@ +/** + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "MTRBaseDevice_Internal.h" +#import "MTRDefines_Internal.h" +#import "MTRDeviceController_Internal.h" +#import "MTRLogging_Internal.h" +#import "MTRServerAttribute_Internal.h" +#import "MTRServerEndpoint_Internal.h" +#import "NSDataSpanConversion.h" +#import + +#include +#include +#include +#include + +using namespace chip; + +MTR_DIRECT_MEMBERS +@implementation MTRServerAttribute { + MTRDeviceController * __weak _deviceController; +} + +- (nullable instancetype)initAttributeWithID:(NSNumber *)attributeID initialValue:(NSDictionary *)value requiredReadPrivilege:(MTRAccessControlEntryPrivilege)requiredReadPrivilege writable:(BOOL)writable +{ + auto attrIDValue = attributeID.unsignedLongLongValue; + if (!CanCastTo(attrIDValue)) { + MTR_LOG_ERROR("MTRServerAttribute provided too-large attribute ID: 0x%llx", attrIDValue); + return nil; + } + + auto attrId = static_cast(attrIDValue); + if (!IsValidAttributeId(attrId)) { + MTR_LOG_ERROR("MTRServerAttribute provided invalid attribute ID: 0x%" PRIx32, attrId); + return nil; + } + + return [self initWithAttributeID:[attributeID copy] value:[value copy] requiredReadPrivilege:requiredReadPrivilege writable:writable]; +} + +- (nullable instancetype)initReadonlyAttributeWithID:(NSNumber *)attributeID initialValue:(NSDictionary *)value requiredPrivilege:(MTRAccessControlEntryPrivilege)requiredPrivilege +{ + return [self initAttributeWithID:attributeID initialValue:value requiredReadPrivilege:requiredPrivilege writable:NO]; +} + +// initWithAttributeID:value:serializedValue:requiredReadPrivilege:writable: +// assumes that the attribute ID, value, serializedValue, have already been +// validated and, if needed, copied from the input. +- (nullable instancetype)initWithAttributeID:(NSNumber *)attributeID value:(NSDictionary *)value requiredReadPrivilege:(MTRAccessControlEntryPrivilege)requiredReadPrivilege writable:(BOOL)writable +{ + if (!(self = [super init])) { + return nil; + } + + _attributeID = attributeID; + _requiredReadPrivilege = requiredReadPrivilege; + _writable = writable; + _parentCluster = app::ConcreteClusterPath(kInvalidEndpointId, kInvalidClusterId); + + // Now call setValue to store the value and its serialization. + if ([self setValue:value] == NO) { + return nil; + } + + return self; +} + +- (BOOL)setValue:(NSDictionary *)value +{ + id serializedValue; + id dataType = value[MTRTypeKey]; + if ([MTRArrayValueType isEqual:dataType]) { + id dataValue = value[MTRValueKey]; + if (![dataValue isKindOfClass:NSArray.class]) { + MTR_LOG_ERROR("MTRServerAttribute value claims to be a list but isn't: %@", value); + return NO; + } + NSArray * dataValueList = dataValue; + auto * listValue = [NSMutableArray arrayWithCapacity:dataValueList.count]; + if (listValue == nil) { + return NO; + } + for (id item in dataValueList) { + NSError * encodingError; + NSData * encodedItem = MTREncodeTLVFromDataValueDictionary(item, &encodingError); + if (encodedItem == nil) { + return NO; + } + [listValue addObject:encodedItem]; + } + serializedValue = listValue; + } else { + NSError * encodingError; + serializedValue = MTREncodeTLVFromDataValueDictionary(value, &encodingError); + if (serializedValue == nil) { + return NO; + } + } + + // We serialized properly, so should be good to go on the value. + _value = [value copy]; + + MTRDeviceController * deviceController = _deviceController; + if (deviceController == nil) { + // We're not bound to a controller, so safe to directly update _serializedValue. + _serializedValue = serializedValue; + } else { + [deviceController asyncDispatchToMatterQueue:^{ + auto changed = ![self->_serializedValue isEqual:serializedValue]; + self->_serializedValue = serializedValue; + if (changed) { + MatterReportingAttributeChangeCallback(self->_parentCluster.mEndpointId, self->_parentCluster.mClusterId, static_cast(self->_attributeID.unsignedLongLongValue)); + } + } + errorHandler:nil]; + } + + return YES; +} + +- (BOOL)associateWithController:(MTRDeviceController *)controller +{ + MTRDeviceController * existingController = _deviceController; + if (existingController != nil) { +#if MTR_PER_CONTROLLER_STORAGE_ENABLED + MTR_LOG_ERROR("Cannot associate MTRServerAttribute with controller %@; already associated with controller %@", + controller.uniqueIdentifier, existingController.uniqueIdentifier); +#else + MTR_LOG_ERROR("Cannot associate MTRServerAttribute with controller; already associated with a different controller"); +#endif + return NO; + } + + _deviceController = controller; + + return YES; +} + +- (void)invalidate +{ + _deviceController = nil; +} + +@end diff --git a/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerAttribute_Internal.h b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerAttribute_Internal.h new file mode 100644 index 00000000000000..dbc7cebb857a88 --- /dev/null +++ b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerAttribute_Internal.h @@ -0,0 +1,48 @@ +/** + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import +#import + +#include + +@interface MTRServerAttribute () + +/** + * Mark this attribute as associated with a particular controller. + */ +- (BOOL)associateWithController:(MTRDeviceController *)controller; + +/** + * Mark this attribute as part of an Defunct-state endpoint. + */ +- (void)invalidate; + +/** + * serializedValue is either an NSData or an NSArray, depending on + * whether the attribute is list-typed. + */ +@property (nonatomic, strong, readonly) id serializedValue; + +/** + * parentCluster will have kInvalidClusterId for the cluster ID until the + * attribute is added to a cluster. + */ +@property (nonatomic, assign) chip::app::ConcreteClusterPath parentCluster; + +@end diff --git a/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerCluster.h b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerCluster.h new file mode 100644 index 00000000000000..48604dd2a76797 --- /dev/null +++ b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerCluster.h @@ -0,0 +1,111 @@ +/** + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * A representation of a server cluster implemented by an MTRDeviceController. + */ +MTR_NEWLY_AVAILABLE +@interface MTRServerCluster : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + * The provided clusterID must not be MTRClusterIDTypeDescriptorID; see + * newDescriptorCluster. + * + * Otherwise, it must be a valid cluster identifier. That means: + * + * * In the range 0-0x7FFF for standard clusters. + * * In the range 0xVVVVFC00-0xVVVVFFFE for vendor-specific clusters, where VVVV + * is the vendor identifier. + * + * The provided revision must be in the range 1-65535. + * + */ +- (nullable instancetype)initWithClusterID:(NSNumber *)clusterID revision:(NSNumber *)revision; + +/** + * Add an access grant to the cluster. If the same access grant is added + * multiple times, it will be treated as if it were added once (and removing + * it once will remove it). + */ +- (void)addAccessGrant:(MTRAccessGrant *)accessGrant; + +/** + * Remove an access grant from the cluster. + */ +- (void)removeAccessGrant:(MTRAccessGrant *)accessGrant; + +/** + * Add an attribute to the cluster. This can only be done before the endpoint + * the cluster is a part of has been added to a controller. + * + * The attribute must not have the same attribute ID as another attribute in + * this cluster. + * + * The attribute must not already be added to another cluster. + * + * If this cluster is the Descriptor cluster (id MTRClusterIDTypeDescriptorID), + * it must not define any values for DeviceTypeList, ServerList, ClientList, PartsList; + * those values will be determined automatically. + * + * For all clusters, the global AttributeList, AcceptedCommandList, + * GeneratedCommandList attributes will be determined automatically and must not + * be included in the attributes added on the cluster. + * + * For all clusters, the FeatureMap attribute will be assumed to be 0 unless + * otherwise specified and may be omitted from the attributes added to the cluster. + * + * For all clusters, ClusterRevision will be determined automatically based on + * this object's clusterRevision property, and must not be explicitly added to + * the cluster. + */ +- (BOOL)addAttribute:(MTRServerAttribute *)attribute; + +/** + * Create a cluster description for the descriptor cluster. This will set + * clusterRevision to the current version implemented by Matter.framework. + */ ++ (MTRServerCluster *)newDescriptorCluster; + +@property (nonatomic, copy, readonly) NSNumber * clusterID; + +@property (nonatomic, copy, readonly) NSNumber * clusterRevision; + +/** + * The list of entities that are allowed to access this cluster instance. This + * list is in addition to any endpoint-wide access grants that exist. + * + * Defaults to empty list, which means no additional access grants. + */ +@property (nonatomic, copy, readonly) NSArray * accessGrants; + +/** + * The list of attributes supported by the cluster. + */ +@property (nonatomic, copy, readonly) NSArray * attributes; + +@end + +NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerCluster.mm b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerCluster.mm new file mode 100644 index 00000000000000..8af4ca975ffb3d --- /dev/null +++ b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerCluster.mm @@ -0,0 +1,228 @@ +/** + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "MTRDefines_Internal.h" +#import "MTRDeviceController_Internal.h" +#import "MTRLogging_Internal.h" +#import "MTRServerAttribute_Internal.h" +#import "MTRServerCluster_Internal.h" +#import "MTRServerEndpoint_Internal.h" +#import +#import + +#include +#include +#include +#include + +using namespace chip; + +MTR_DIRECT_MEMBERS +@implementation MTRServerCluster { + /** + * The access grants our API consumer can manipulate directly. Never + * touched on the Matter queue. + */ + NSMutableSet * _accessGrants; + NSMutableArray * _attributes; + MTRDeviceController * __weak _deviceController; +} + +- (nullable instancetype)initWithClusterID:(NSNumber *)clusterID revision:(NSNumber *)revision +{ + auto clusterIDValue = clusterID.unsignedLongLongValue; + if (!CanCastTo(clusterIDValue)) { + MTR_LOG_ERROR("MTRServerCluster provided too-large cluster ID: 0x%llx", clusterIDValue); + return nil; + } + + auto id = static_cast(clusterIDValue); + if (!IsValidClusterId(id)) { + MTR_LOG_ERROR("MTRServerCluster provided invalid cluster ID: 0x%" PRIx32, id); + return nil; + } + + if (id == MTRClusterIDTypeDescriptorID) { + MTR_LOG_ERROR("Should be using newDescriptorCluster to initialize an MTRServerCluster for Descriptor"); + return nil; + } + + auto revisionValue = revision.unsignedLongLongValue; + if (revisionValue < 1 || revisionValue > 0xFFFF) { + MTR_LOG_ERROR("MTRServerCluster provided invalid cluster revision: 0x%llx", revisionValue); + return nil; + } + + return [self initInternalWithClusterID:clusterID revision:revision accessGrants:[NSSet set] attributes:@[]]; +} + ++ (MTRServerCluster *)newDescriptorCluster +{ + return [[MTRServerCluster alloc] initInternalWithClusterID:@(MTRClusterIDTypeDescriptorID) revision:@(app::Clusters::Descriptor::kClusterRevision) accessGrants:[NSSet set] attributes:@[]]; +} + +- (instancetype)initInternalWithClusterID:(NSNumber *)clusterID revision:(NSNumber *)revision accessGrants:(NSSet *)accessGrants attributes:(NSArray *)attributes +{ + if (!(self = [super init])) { + return nil; + } + + _clusterID = [clusterID copy]; + _clusterRevision = [revision copy]; + _accessGrants = [[NSMutableSet alloc] init]; + _attributes = [[NSMutableArray alloc] init]; + _matterAccessGrants = [NSSet set]; + _parentEndpoint = kInvalidEndpointId; + + for (MTRAccessGrant * grant in accessGrants) { + // Since our state is MTRServerEndpointStateInitializing, we know this + // will succeed. + [self addAccessGrant:grant]; + } + + for (MTRServerAttribute * attr in attributes) { + // Since our state is MTRServerEndpointStateInitializing and the initial + // attribute array was valid, we know this will succeed. + [self addAttribute:attr]; + } + + return self; +} + +- (void)updateMatterAccessGrants +{ + MTRDeviceController * deviceController = _deviceController; + if (deviceController == nil) { + // _matterAccessGrants will be updated when we get bound to a controller. + return; + } + + NSSet * grants = [_accessGrants copy]; + [deviceController asyncDispatchToMatterQueue:^{ + self->_matterAccessGrants = grants; + } + errorHandler:nil]; +} + +- (void)addAccessGrant:(MTRAccessGrant *)accessGrant +{ + [_accessGrants addObject:accessGrant]; + + [self updateMatterAccessGrants]; +} + +- (void)removeAccessGrant:(MTRAccessGrant *)accessGrant; +{ + [_accessGrants removeObject:accessGrant]; + + [self updateMatterAccessGrants]; +} + +- (BOOL)addAttribute:(MTRServerAttribute *)attribute +{ + MTRDeviceController * deviceController = _deviceController; + if (deviceController != nil) { + MTR_LOG_ERROR("Cannot add attribute on cluster %llx which is already in use", _clusterID.unsignedLongLongValue); + return NO; + } + + if (attribute.parentCluster.mClusterId != kInvalidClusterId) { + MTR_LOG_ERROR("Cannot add attribute to cluster %llu; already added to cluster %" PRIu32, _clusterID.unsignedLongLongValue, attribute.parentCluster.mClusterId); + return NO; + } + + auto attributeID = attribute.attributeID.unsignedLongLongValue; + if (attributeID == MTRAttributeIDTypeGlobalAttributeAttributeListID || attributeID == MTRAttributeIDTypeGlobalAttributeAcceptedCommandListID || attributeID == MTRAttributeIDTypeGlobalAttributeGeneratedCommandListID || attributeID == MTRAttributeIDTypeGlobalAttributeClusterRevisionID) { + MTR_LOG_ERROR("Cannot add global attribute %llx on cluster %llx", attributeID, _clusterID.unsignedLongLongValue); + return NO; + } + + if ([_clusterID isEqual:@(MTRClusterIDTypeDescriptorID)]) { + if (attributeID == MTRAttributeIDTypeClusterDescriptorAttributeDeviceTypeListID || attributeID == MTRAttributeIDTypeClusterDescriptorAttributeServerListID || attributeID == MTRAttributeIDTypeClusterDescriptorAttributeClientListID || attributeID == MTRAttributeIDTypeClusterDescriptorAttributePartsListID) { + MTR_LOG_ERROR("Cannot add attribute with id %llx on descriptor cluster", attributeID); + return NO; + } + } + + for (MTRServerAttribute * existingAttr in _attributes) { + if (existingAttr.attributeID.unsignedLongLongValue == attributeID) { + MTR_LOG_ERROR("Cannot add second attribute with ID %llx on cluster %llx", attributeID, _clusterID.unsignedLongLongValue); + return NO; + } + } + + [_attributes addObject:attribute]; + attribute.parentCluster = app::ConcreteClusterPath(_parentEndpoint, static_cast(_clusterID.unsignedLongLongValue)); + return YES; +} + +- (BOOL)associateWithController:(MTRDeviceController *)controller +{ + MTRDeviceController * existingController = _deviceController; + if (existingController != nil) { +#if MTR_PER_CONTROLLER_STORAGE_ENABLED + MTR_LOG_ERROR("Cannot associate MTRServerCluster with controller %@; already associated with controller %@", + controller.uniqueIdentifier, existingController.uniqueIdentifier); +#else + MTR_LOG_ERROR("Cannot associate MTRServerCluster with controller; already associated with a different controller"); +#endif + return NO; + } + + for (MTRServerAttribute * attr in _attributes) { + if (![attr associateWithController:controller]) { + return NO; + } + } + + // Snapshot _matterAccessGrants now; after this point it will only be + // updated on the Matter queue. + _matterAccessGrants = [_accessGrants copy]; + _deviceController = controller; + + return YES; +} + +- (void)invalidate +{ + for (MTRServerAttribute * attr in _attributes) { + [attr invalidate]; + } + + _deviceController = nil; +} + +- (NSArray *)accessGrants +{ + return [_accessGrants allObjects]; +} + +- (NSArray *)attributes +{ + return [_attributes copy]; +} + +- (void)setParentEndpoint:(EndpointId)endpoint +{ + _parentEndpoint = endpoint; + // Update it on all the attributes, in case the attributes were added to us + // before we were added to the endpoint. + for (MTRServerAttribute * attr in _attributes) { + attr.parentCluster = app::ConcreteClusterPath(endpoint, static_cast(_clusterID.unsignedLongLongValue)); + } +} + +@end diff --git a/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerCluster_Internal.h b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerCluster_Internal.h new file mode 100644 index 00000000000000..5bd9ba0692ed4a --- /dev/null +++ b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerCluster_Internal.h @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#import +#import + +#include + +@interface MTRServerCluster () + +/** + * Mark this cluster as associated with a particular controller. + */ +- (BOOL)associateWithController:(MTRDeviceController *)controller; + +/** + * Mark this cluster as part of an Defunct-state endpoint. + */ +- (void)invalidate; + +/** + * The access grants the Matter stack can observe. Only modified while in + * Initializing state or on the Matter queue. + */ +@property (nonatomic, strong, readonly) NSSet * matterAccessGrants; + +/** + * parentEndpoint will be kInvalidEndpointId until the cluster is added to an endpoint. + */ +@property (nonatomic, assign) chip::EndpointId parentEndpoint; + +@end diff --git a/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerEndpoint.h b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerEndpoint.h new file mode 100644 index 00000000000000..642dc5fb4ec658 --- /dev/null +++ b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerEndpoint.h @@ -0,0 +1,87 @@ +/** + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#import +#import +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + * A representation of an endpoint implemented by an MTRDeviceController. + */ +MTR_NEWLY_AVAILABLE +@interface MTRServerEndpoint : NSObject + +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +/** + * The provided endpointID must be in the range 1-65535. The list of device + * types provided must be nonempty (but may include vendor-specific device + * types). + */ +- (nullable instancetype)initWithEndpointID:(NSNumber *)endpointID deviceTypes:(NSArray *)deviceTypes; + +/** + * Add an access grant to the endpoint. If the same access grant is added + * multiple times, it will be treated as if it were added once (and removing + * it once will remove it). + */ +- (void)addAccessGrant:(MTRAccessGrant *)accessGrant; + +/** + * Remove an access grant from the endpoint. + */ +- (void)removeAccessGrant:(MTRAccessGrant *)accessGrant; + +/** + * Add a server cluster to the endpoint. This can only be done before the + * endpoint has been added to a controller. + * + * The cluster must not have the same cluster ID as another cluster on + * this endpoint. + * + * The cluster must not already be added to another endpoint. + */ +- (BOOL)addServerCluster:(MTRServerCluster *)serverCluster; + +@property (nonatomic, copy, readonly) NSNumber * endpointID; + +@property (nonatomic, copy, readonly) NSArray * deviceTypes; + +/** + * The list of entities that are allowed to access all clusters on this + * endpoint. If more fine-grained access control is desired, access grants + * should be defined on individual clusters. + * + * Defaults to empty list, which means no access granted. + */ +@property (nonatomic, copy, readonly) NSArray * accessGrants; + +/** + * A list of server clusters supported on this endpoint. The Descriptor cluster + * does not need to be included unless a TagList attribute is desired on it or + * unless it has a non-empty PartsList. If not included, the Descriptor cluster + * will be generated automatically. + */ +@property (nonatomic, copy, readonly) NSArray * serverClusters; + +@end + +NS_ASSUME_NONNULL_END diff --git a/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerEndpoint.mm b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerEndpoint.mm new file mode 100644 index 00000000000000..ee35e4da0bc0db --- /dev/null +++ b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerEndpoint.mm @@ -0,0 +1,197 @@ +/** + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "MTRDefines_Internal.h" +#import "MTRDeviceController_Internal.h" +#import "MTRLogging_Internal.h" +#import "MTRServerCluster_Internal.h" +#import "MTRServerEndpoint_Internal.h" +#import + +#include +#include +#include + +using namespace chip; + +MTR_DIRECT_MEMBERS +@implementation MTRServerEndpoint { + /** + * The access grants our API consumer can manipulate directly. Never + * touched on the Matter queue. + */ + NSMutableSet * _accessGrants; + NSMutableArray * _serverClusters; + MTRDeviceController * __weak _deviceController; +} + +- (nullable instancetype)initWithEndpointID:(NSNumber *)endpointID deviceTypes:(NSArray *)deviceTypes +{ + auto endpointIDValue = endpointID.unsignedLongLongValue; + if (!CanCastTo(endpointIDValue)) { + MTR_LOG_ERROR("MTRServerEndpoint provided too-large endpoint ID: 0x%llx", endpointIDValue); + return nil; + } + + auto id = static_cast(endpointIDValue); + if (!IsValidEndpointId(id)) { + MTR_LOG_ERROR("MTRServerEndpoint provided invalid endpoint ID: 0x%x", id); + return nil; + } + + if (id == kRootEndpointId) { + // We don't allow this; we use that endpoint for our own purposes in + // Matter.framework. + MTR_LOG_ERROR("MTRServerEndpoint provided invalid endpoint ID: 0x%x", id); + return nil; + } + + if (deviceTypes.count == 0) { + MTR_LOG_ERROR("MTRServerEndpoint needs a non-empty list of device types"); + return nil; + } + + return [self initInternalWithEndpointID:endpointID deviceTypes:deviceTypes accessGrants:[NSSet set] clusters:@[]]; +} + +- (instancetype)initInternalWithEndpointID:(NSNumber *)endpointID deviceTypes:(NSArray *)deviceTypes accessGrants:(NSSet *)accessGrants clusters:(NSArray *)clusters +{ + if (!(self = [super init])) { + return nil; + } + + _endpointID = [endpointID copy]; + _deviceTypes = [deviceTypes copy]; + _accessGrants = [[NSMutableSet alloc] init]; + _serverClusters = [[NSMutableArray alloc] init]; + _matterAccessGrants = [NSSet set]; + + for (MTRAccessGrant * grant in accessGrants) { + // Since our state is MTRServerEndpointStateInitializing, we know this + // will succeed. + [self addAccessGrant:[grant copy]]; + } + + for (MTRServerCluster * cluster in clusters) { + // Since our state is MTRServerEndpointStateInitializing and the initial + // cluster array was valid, we know this will succeed. + [self addServerCluster:[cluster copy]]; + } + + return self; +} + +- (void)updateMatterAccessGrants +{ + MTRDeviceController * deviceController = _deviceController; + if (deviceController == nil) { + // _matterAccessGrants will be updated when we get bound to a controller. + return; + } + + NSSet * grants = [_accessGrants copy]; + [deviceController asyncDispatchToMatterQueue:^{ + self->_matterAccessGrants = grants; + } + errorHandler:nil]; +} + +- (void)addAccessGrant:(MTRAccessGrant *)accessGrant +{ + [_accessGrants addObject:accessGrant]; + + [self updateMatterAccessGrants]; +} + +- (void)removeAccessGrant:(MTRAccessGrant *)accessGrant; +{ + [_accessGrants removeObject:accessGrant]; + + [self updateMatterAccessGrants]; +} + +- (BOOL)addServerCluster:(MTRServerCluster *)serverCluster +{ + MTRDeviceController * deviceController = _deviceController; + if (deviceController != nil) { + MTR_LOG_ERROR("Cannot add cluster on endpoint %llu which is already in use", _endpointID.unsignedLongLongValue); + return NO; + } + + if (serverCluster.parentEndpoint != kInvalidEndpointId) { + MTR_LOG_ERROR("Cannot add cluster to endpoint %llu; already added to endpoint %" PRIu32, _endpointID.unsignedLongLongValue, serverCluster.parentEndpoint); + return NO; + } + + for (MTRServerCluster * existingCluster in _serverClusters) { + if ([existingCluster.clusterID isEqual:serverCluster.clusterID]) { + MTR_LOG_ERROR("Cannot add second cluster with ID %llx on endpoint %llu", serverCluster.clusterID.unsignedLongLongValue, _endpointID.unsignedLongLongValue); + return NO; + } + } + + [_serverClusters addObject:serverCluster]; + serverCluster.parentEndpoint = static_cast(_endpointID.unsignedLongLongValue); + return YES; +} + +- (BOOL)associateWithController:(MTRDeviceController *)controller +{ + MTRDeviceController * existingController = _deviceController; + if (existingController != nil) { +#if MTR_PER_CONTROLLER_STORAGE_ENABLED + MTR_LOG_ERROR("Cannot associate MTRServerEndpoint with controller %@; already associated with controller %@", + controller.uniqueIdentifier, existingController.uniqueIdentifier); +#else + MTR_LOG_ERROR("Cannot associate MTRServerEndpoint with controller; already associated with a different controller"); +#endif + return NO; + } + + for (MTRServerCluster * cluster in _serverClusters) { + if (![cluster associateWithController:controller]) { + return NO; + } + } + + // Snapshot _matterAccessGrants now; after this point it will only be + // updated on the Matter queue. + _matterAccessGrants = [_accessGrants copy]; + _deviceController = controller; + + return YES; +} + +- (void)invalidate +{ + for (MTRServerCluster * cluster in _serverClusters) { + [cluster invalidate]; + } + + _deviceController = nil; +} + +- (NSArray *)accessGrants +{ + return [_accessGrants allObjects]; +} + +- (NSArray *)serverClusters +{ + return [_serverClusters copy]; +} + +@end diff --git a/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerEndpoint_Internal.h b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerEndpoint_Internal.h new file mode 100644 index 00000000000000..97725c2b1afad5 --- /dev/null +++ b/src/darwin/Framework/CHIP/ServerEndpoint/MTRServerEndpoint_Internal.h @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#import +#import + +@interface MTRServerEndpoint () + +/** + * Mark this endpoint as associated with a particular controller. + */ +- (BOOL)associateWithController:(MTRDeviceController *)controller; + +/** + * Mark this endpoint as being in a Defunct state. + */ +- (void)invalidate; + +/** + * The access grants the Matter stack can observe. Only modified while in + * Initializing state or on the Matter queue. + */ +@property (nonatomic, strong, readonly) NSSet * matterAccessGrants; + +@end diff --git a/src/darwin/Framework/CHIPTests/MTRServerEndpointTests.m b/src/darwin/Framework/CHIPTests/MTRServerEndpointTests.m new file mode 100644 index 00000000000000..57b47f8eb540b7 --- /dev/null +++ b/src/darwin/Framework/CHIPTests/MTRServerEndpointTests.m @@ -0,0 +1,492 @@ +/** + * Copyright (c) 2024 Project CHIP Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import +#import + +@interface MTRServerEndpointTests : XCTestCase + +@end + +@implementation MTRServerEndpointTests + +- (void)testAccessGrant +{ + // Try to create an access grant with an invalid node ID + { + __auto_type * grant = [MTRAccessGrant accessGrantForNodeID:@(0) privilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertNil(grant); + } + + // Try to create an access grant with a group-range node ID + { + __auto_type * grant = [MTRAccessGrant accessGrantForNodeID:@(0xFFFFFFFFFFFF0001) privilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertNil(grant); + } + + // Try to create an access grant with a local node ID + { + __auto_type * grant = [MTRAccessGrant accessGrantForNodeID:@(0xFFFFFFFE00020002) privilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertNil(grant); + } + + // Try to create an access grant with a CAT-range node ID + { + __auto_type * grant = [MTRAccessGrant accessGrantForNodeID:@(0xFFFFFFFD00020002) privilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertNil(grant); + } + + // Try to create an access grant with an operational node ID + { + NSNumber * nodeID = @(2); + __auto_type * grant = [MTRAccessGrant accessGrantForNodeID:nodeID privilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertNotNil(grant); + XCTAssertEqualObjects(grant.subjectID, nodeID); + XCTAssertEqual(grant.grantedPrivilege, MTRAccessControlEntryPrivilegeView); + XCTAssertEqual(grant.authenticationMode, MTRAccessControlEntryAuthModeCASE); + XCTAssertEqualObjects([grant description], @""); + } + + // Try different privileges + { + NSNumber * nodeID = @(2); + __auto_type * grant = [MTRAccessGrant accessGrantForNodeID:nodeID privilege:MTRAccessControlEntryPrivilegeAdminister]; + XCTAssertNotNil(grant); + XCTAssertEqualObjects(grant.subjectID, nodeID); + XCTAssertEqual(grant.grantedPrivilege, MTRAccessControlEntryPrivilegeAdminister); + XCTAssertEqual(grant.authenticationMode, MTRAccessControlEntryAuthModeCASE); + XCTAssertEqualObjects([grant description], @""); + } + + // Try a CAT + { + __auto_type * grant = [MTRAccessGrant accessGrantForCASEAuthenticatedTag:@(0x00020003) privilege:MTRAccessControlEntryPrivilegeManage]; + XCTAssertNotNil(grant); + XCTAssertEqualObjects(grant.subjectID, @(0xFFFFFFFD00020003)); + XCTAssertEqual(grant.grantedPrivilege, MTRAccessControlEntryPrivilegeManage); + XCTAssertEqual(grant.authenticationMode, MTRAccessControlEntryAuthModeCASE); + XCTAssertEqualObjects([grant description], @""); + } + + // Try some invalid CATs + { + __auto_type * grant = [MTRAccessGrant accessGrantForCASEAuthenticatedTag:@(0x100000000) privilege:MTRAccessControlEntryPrivilegeManage]; + XCTAssertNil(grant); + } + + { + __auto_type * grant = [MTRAccessGrant accessGrantForCASEAuthenticatedTag:@(0x00020000) privilege:MTRAccessControlEntryPrivilegeManage]; + XCTAssertNil(grant); + } + + // Try a group ID + { + __auto_type * grant = [MTRAccessGrant accessGrantForGroupID:@(0x0005) privilege:MTRAccessControlEntryPrivilegeOperate]; + XCTAssertNotNil(grant); + XCTAssertEqualObjects(grant.subjectID, @(0xFFFFFFFFFFFF0005)); + XCTAssertEqual(grant.grantedPrivilege, MTRAccessControlEntryPrivilegeOperate); + XCTAssertEqual(grant.authenticationMode, MTRAccessControlEntryAuthModeGroup); + XCTAssertEqualObjects([grant description], @""); + } + + // Try an invalid group ID + { + __auto_type * grant = [MTRAccessGrant accessGrantForGroupID:@(0) privilege:MTRAccessControlEntryPrivilegeOperate]; + XCTAssertNil(grant); + } + + // Try a wildcard subject. + { + __auto_type * grant = [MTRAccessGrant accessGrantForAllNodesWithPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertNotNil(grant); + XCTAssertNil(grant.subjectID); + XCTAssertEqual(grant.grantedPrivilege, MTRAccessControlEntryPrivilegeView); + XCTAssertEqual(grant.authenticationMode, MTRAccessControlEntryAuthModeCASE); + XCTAssertEqualObjects([grant description], @""); + } +} + +- (void)testServerAttribute +{ + __auto_type * unsignedIntValue = @{ + MTRTypeKey : MTRUnsignedIntegerValueType, + MTRValueKey : @(5), + }; + + __auto_type * listOfStringsValue = @{ + MTRTypeKey : MTRArrayValueType, + MTRValueKey : @[ + @{ + MTRTypeKey : MTRUTF8StringValueType, + MTRValueKey : @"str1", + }, + @{ + MTRTypeKey : MTRUTF8StringValueType, + MTRValueKey : @"str2", + }, + ], + }; + + // Basic readonly attribute. + { + __auto_type * attr = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(0) initialValue:unsignedIntValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertNotNil(attr); + XCTAssertEqualObjects(attr.attributeID, @(0)); + XCTAssertEqualObjects(attr.value, unsignedIntValue); + XCTAssertEqual(attr.writable, NO); + } + + // list-typed readonly attribute. + { + __auto_type * attr = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(5) initialValue:listOfStringsValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertNotNil(attr); + XCTAssertEqualObjects(attr.attributeID, @(5)); + XCTAssertEqualObjects(attr.value, listOfStringsValue); + XCTAssertEqual(attr.writable, NO); + } + + // Vendor-specific attribute. + { + NSNumber * vendorSpecificID = @(0xFFF10004); + __auto_type * attr = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:vendorSpecificID initialValue:unsignedIntValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertNotNil(attr); + XCTAssertEqualObjects(attr.attributeID, vendorSpecificID); + XCTAssertEqualObjects(attr.value, unsignedIntValue); + XCTAssertEqual(attr.writable, NO); + } + + // Invalid attribute ID + { + NSNumber * invalidID = @(0x00005000); + __auto_type * attr = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:invalidID initialValue:unsignedIntValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertNil(attr); + } + + // Invalid "global" attribute ID + { + NSNumber * invalidID = @(0x0000FFFF); + __auto_type * attr = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:invalidID initialValue:unsignedIntValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertNil(attr); + } + + // Invalid vendor prefix on attribute ID + { + NSNumber * invalidID = @(0xFFFF0000); + __auto_type * attr = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:invalidID initialValue:unsignedIntValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertNil(attr); + } +} + +- (void)testDeviceType +{ + // Invalid device type ID + { + __auto_type * deviceType = [[MTRDeviceTypeRevision alloc] initWithDeviceTypeID:@(0xC000) revision:@(1)]; + XCTAssertNil(deviceType); + } + + // Another invalid device type ID + { + __auto_type * deviceType = [[MTRDeviceTypeRevision alloc] initWithDeviceTypeID:@(0xFFFF1234) revision:@(1)]; + XCTAssertNil(deviceType); + } + + // Another invalid device type ID + { + __auto_type * deviceType = [[MTRDeviceTypeRevision alloc] initWithDeviceTypeID:@(0x100000000) revision:@(1)]; + XCTAssertNil(deviceType); + } + + // Invalid device type revision + { + __auto_type * deviceType = [[MTRDeviceTypeRevision alloc] initWithDeviceTypeID:@(0x1234) revision:@(0)]; + XCTAssertNil(deviceType); + } + + // Another invalid device type revision + { + __auto_type * deviceType = [[MTRDeviceTypeRevision alloc] initWithDeviceTypeID:@(0x1234) revision:@(0x10000)]; + XCTAssertNil(deviceType); + } + + // Valid device type + { + NSNumber * deviceTypeID = @(0x1234); + NSNumber * deviceTypeRevision = @(1); + __auto_type * deviceType = [[MTRDeviceTypeRevision alloc] initWithDeviceTypeID:deviceTypeID revision:deviceTypeRevision]; + XCTAssertNotNil(deviceType); + XCTAssertEqualObjects(deviceType.deviceTypeID, deviceTypeID); + XCTAssertEqualObjects(deviceType.deviceTypeRevision, deviceTypeRevision); + } +} + +- (void)testClusterDescription +{ + // Standard cluster. + { + NSNumber * clusterID = @(6); + NSNumber * clusterRevision = @(1); + __auto_type * cluster = [[MTRServerCluster alloc] initWithClusterID:clusterID revision:clusterRevision]; + XCTAssertNotNil(cluster); + XCTAssertEqualObjects(cluster.clusterID, clusterID); + XCTAssertEqualObjects(cluster.clusterRevision, clusterRevision); + XCTAssertEqualObjects(cluster.accessGrants, @[]); + XCTAssertEqualObjects(cluster.attributes, @[]); + } + + // Vendor-specific cluster. + { + NSNumber * clusterID = @(0xFFF1FC01); + NSNumber * clusterRevision = @(1); + __auto_type * cluster = [[MTRServerCluster alloc] initWithClusterID:clusterID revision:clusterRevision]; + XCTAssertNotNil(cluster); + XCTAssertEqualObjects(cluster.clusterID, clusterID); + XCTAssertEqualObjects(cluster.clusterRevision, clusterRevision); + XCTAssertEqualObjects(cluster.accessGrants, @[]); + XCTAssertEqualObjects(cluster.attributes, @[]); + } + + // Invalid "standard" cluster. + { + NSNumber * clusterID = @(0x8000); + NSNumber * clusterRevision = @(1); + __auto_type * cluster = [[MTRServerCluster alloc] initWithClusterID:clusterID revision:clusterRevision]; + XCTAssertNil(cluster); + } + + // Invalid vendor-specific cluster. + { + NSNumber * clusterID = @(0xFFF10002); + NSNumber * clusterRevision = @(1); + __auto_type * cluster = [[MTRServerCluster alloc] initWithClusterID:clusterID revision:clusterRevision]; + XCTAssertNil(cluster); + } + + // Cluster ID out of range. + { + NSNumber * clusterID = @(0x100000000); + NSNumber * clusterRevision = @(1); + __auto_type * cluster = [[MTRServerCluster alloc] initWithClusterID:clusterID revision:clusterRevision]; + XCTAssertNil(cluster); + } + + // Revision too small. + { + NSNumber * clusterID = @(6); + NSNumber * clusterRevision = @(0); + __auto_type * cluster = [[MTRServerCluster alloc] initWithClusterID:clusterID revision:clusterRevision]; + XCTAssertNil(cluster); + } + + // Revision too big. + { + NSNumber * clusterID = @(6); + NSNumber * clusterRevision = @(0x10000); + __auto_type * cluster = [[MTRServerCluster alloc] initWithClusterID:clusterID revision:clusterRevision]; + XCTAssertNil(cluster); + } + + // Descriptor cluster wrong method. + { + NSNumber * clusterID = @(0x001D); + NSNumber * clusterRevision = @(0x10000); + __auto_type * cluster = [[MTRServerCluster alloc] initWithClusterID:clusterID revision:clusterRevision]; + XCTAssertNil(cluster); + } + + __auto_type * emptyListValue = @{ + MTRTypeKey : MTRArrayValueType, + MTRValueKey : @[], + }; + + __auto_type * unsignedIntValue = @{ + MTRTypeKey : MTRUnsignedIntegerValueType, + MTRValueKey : @(2), + }; + + // Descriptor cluster right method + { + NSNumber * clusterID = @(0x001D); + __auto_type * cluster = [MTRServerCluster newDescriptorCluster]; + XCTAssertNotNil(cluster); + XCTAssertEqualObjects(cluster.clusterID, clusterID); + // Don't hardcode the cluster revision here; we want it to be able to + // change without updating this test. + XCTAssertEqualObjects(cluster.accessGrants, @[]); + XCTAssertEqualObjects(cluster.attributes, @[]); + + // Adding descriptor's list attributes should fail. + __auto_type * deviceTypeListAttribute = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(0) initialValue:emptyListValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertFalse([cluster addAttribute:deviceTypeListAttribute]); + + __auto_type * serverListAttribute = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(1) initialValue:emptyListValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertFalse([cluster addAttribute:serverListAttribute]); + + __auto_type * clientListAttribute = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(2) initialValue:emptyListValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertFalse([cluster addAttribute:clientListAttribute]); + + __auto_type * partsListAttribute = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(3) initialValue:emptyListValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertFalse([cluster addAttribute:partsListAttribute]); + + // Adding global attributes should fail. + __auto_type * attributeListAttribute = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(0xFFFB) initialValue:emptyListValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertFalse([cluster addAttribute:attributeListAttribute]); + + __auto_type * acceptedCommandListAttribute = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(0xFFF9) initialValue:emptyListValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertFalse([cluster addAttribute:acceptedCommandListAttribute]); + + __auto_type * generatedCommandListAttribute = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(0xFFF8) initialValue:emptyListValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertFalse([cluster addAttribute:generatedCommandListAttribute]); + + __auto_type * clusterRevisionAttribute = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(0xFFFD) initialValue:unsignedIntValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertFalse([cluster addAttribute:clusterRevisionAttribute]); + + // Adding random attributes should succeed. + __auto_type * randomListAttribute = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(0xFFF10000) initialValue:emptyListValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertTrue([cluster addAttribute:randomListAttribute]); + } + + // Adding some attributes + { + NSNumber * clusterID = @(0xFFF1FC01); + NSNumber * clusterRevision = @(1); + __auto_type * cluster = [[MTRServerCluster alloc] initWithClusterID:clusterID revision:clusterRevision]; + XCTAssertNotNil(cluster); + XCTAssertEqualObjects(cluster.accessGrants, @[]); + XCTAssertEqualObjects(cluster.attributes, @[]); + + __auto_type * grants = @[ + [MTRAccessGrant accessGrantForAllNodesWithPrivilege:MTRAccessControlEntryPrivilegeManage], + [MTRAccessGrant accessGrantForNodeID:@(1) privilege:MTRAccessControlEntryPrivilegeView], + ]; + for (MTRAccessGrant * grant in grants) { + [cluster addAccessGrant:grant]; + } + XCTAssertEqualObjects(cluster.accessGrants, grants); + + __auto_type * signedIntValue = @{ + MTRTypeKey : MTRSignedIntegerValueType, + MTRValueKey : @(5), + }; + + __auto_type * attributes = @[ [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(0) initialValue:signedIntValue requiredPrivilege:MTRAccessControlEntryPrivilegeView] ]; + XCTAssertNotNil(attributes); + for (MTRServerAttribute * attribute in attributes) { + XCTAssertTrue([cluster addAttribute:attribute]); + } + XCTAssertEqualObjects(cluster.attributes, attributes); + + __auto_type * otherCluster = [[MTRServerCluster alloc] initWithClusterID:clusterID revision:clusterRevision]; + + // Adding an already-added attribute should fail. + XCTAssertFalse([otherCluster addAttribute:attributes[0]]); + + MTRServerAttribute * otherAttribute = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(0) initialValue:signedIntValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + + // Adding same-id attribute should fail. + XCTAssertFalse([cluster addAttribute:otherAttribute]); + + // Adding the same-id attribute to a different cluster should work. + XCTAssertTrue([otherCluster addAttribute:otherAttribute]); + + // Adding global attributes should fail. + __auto_type * attributeListAttribute = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(0xFFFB) initialValue:emptyListValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertFalse([cluster addAttribute:attributeListAttribute]); + + __auto_type * acceptedCommandListAttribute = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(0xFFF9) initialValue:emptyListValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertFalse([cluster addAttribute:acceptedCommandListAttribute]); + + __auto_type * generatedCommandListAttribute = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(0xFFF8) initialValue:emptyListValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertFalse([cluster addAttribute:generatedCommandListAttribute]); + + __auto_type * clusterRevisionAttribute = [[MTRServerAttribute alloc] initReadonlyAttributeWithID:@(0xFFFD) initialValue:unsignedIntValue requiredPrivilege:MTRAccessControlEntryPrivilegeView]; + XCTAssertFalse([cluster addAttribute:clusterRevisionAttribute]); + } +} + +- (void)testEndpointDescription +{ + NSArray * deviceTypes; + { + deviceTypes = @[ [[MTRDeviceTypeRevision alloc] initWithDeviceTypeID:@(0xFFF11234) revision:@(2)] ]; + XCTAssertNotNil(deviceTypes); + } + + // Invalid endpoint ID. + { + NSNumber * endpointID = @(0); + __auto_type * endpoint = [[MTRServerEndpoint alloc] initWithEndpointID:endpointID deviceTypes:deviceTypes]; + XCTAssertNil(endpoint); + } + + // Too-large endpoint ID. + { + NSNumber * endpointID = @(0x10000); + __auto_type * endpoint = [[MTRServerEndpoint alloc] initWithEndpointID:endpointID deviceTypes:deviceTypes]; + XCTAssertNil(endpoint); + } + + // Invalid device type list. + { + NSNumber * endpointID = @(1); + __auto_type * endpoint = [[MTRServerEndpoint alloc] initWithEndpointID:endpointID deviceTypes:@[]]; + XCTAssertNil(endpoint); + } + + // Valid endpoint definition. + { + NSNumber * endpointID = @(1); + __auto_type * endpoint = [[MTRServerEndpoint alloc] initWithEndpointID:endpointID deviceTypes:deviceTypes]; + XCTAssertNotNil(endpoint); + + XCTAssertEqualObjects(endpoint.endpointID, endpointID); + XCTAssertEqualObjects(endpoint.deviceTypes, deviceTypes); + XCTAssertEqualObjects(endpoint.accessGrants, @[]); + XCTAssertEqualObjects(endpoint.serverClusters, @[]); + + __auto_type * grants = @[ + [MTRAccessGrant accessGrantForAllNodesWithPrivilege:MTRAccessControlEntryPrivilegeManage], + [MTRAccessGrant accessGrantForGroupID:@(1) privilege:MTRAccessControlEntryPrivilegeAdminister], + ]; + for (MTRAccessGrant * grant in grants) { + [endpoint addAccessGrant:grant]; + } + XCTAssertEqualObjects(endpoint.accessGrants, grants); + + __auto_type * clusters = @[ + [[MTRServerCluster alloc] initWithClusterID:@(6) revision:@(1)], + ]; + for (MTRServerCluster * cluster in clusters) { + XCTAssertTrue([endpoint addServerCluster:cluster]); + } + XCTAssertEqualObjects(endpoint.serverClusters, clusters); + + __auto_type * otherEndpoint = [[MTRServerEndpoint alloc] initWithEndpointID:endpointID deviceTypes:deviceTypes]; + + // Adding an already-added cluster should fail. + XCTAssertFalse([otherEndpoint addServerCluster:clusters[0]]); + + MTRServerCluster * otherCluster = [[MTRServerCluster alloc] initWithClusterID:@(6) revision:@(1)]; + + // Adding same-id cluster should fail. + XCTAssertFalse([endpoint addServerCluster:otherCluster]); + + // Adding the same-id cluster to a different endpoint should work. + XCTAssertTrue([otherEndpoint addServerCluster:otherCluster]); + } +} + +@end diff --git a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj index ea1b9b8bf338c4..65da008e6d9f83 100644 --- a/src/darwin/Framework/Matter.xcodeproj/project.pbxproj +++ b/src/darwin/Framework/Matter.xcodeproj/project.pbxproj @@ -150,6 +150,9 @@ 5143851E2A65885500EDC8E6 /* MTRSwiftPairingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5143851D2A65885500EDC8E6 /* MTRSwiftPairingTests.swift */; }; 514654492A72F9DF00904E61 /* MTRDemuxingStorage.mm in Sources */ = {isa = PBXBuildFile; fileRef = 514654482A72F9DF00904E61 /* MTRDemuxingStorage.mm */; }; 5146544B2A72F9F500904E61 /* MTRDemuxingStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 5146544A2A72F9F500904E61 /* MTRDemuxingStorage.h */; }; + 514C7A012B64223400DD6D7B /* MTRServerAttribute_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C79FF2B64223400DD6D7B /* MTRServerAttribute_Internal.h */; }; + 514C7A022B64223400DD6D7B /* MTRServerEndpoint_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C7A002B64223400DD6D7B /* MTRServerEndpoint_Internal.h */; }; + 514C7A042B6436D500DD6D7B /* MTRServerCluster_Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 514C7A032B6436D500DD6D7B /* MTRServerCluster_Internal.h */; }; 51565CAE2A79D42100469F18 /* MTRConversion.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51565CAD2A79D42100469F18 /* MTRConversion.mm */; }; 51565CB12A7AD77600469F18 /* MTRDeviceControllerDataStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 51565CAF2A7AD77600469F18 /* MTRDeviceControllerDataStore.h */; }; 51565CB22A7AD77600469F18 /* MTRDeviceControllerDataStore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51565CB02A7AD77600469F18 /* MTRDeviceControllerDataStore.mm */; }; @@ -182,6 +185,17 @@ 51C984622A61CE2A00B0AD9A /* MTRFabricInfoChecker.m in Sources */ = {isa = PBXBuildFile; fileRef = 51C984602A61CE2A00B0AD9A /* MTRFabricInfoChecker.m */; }; 51CFDDB12AC5F78F00DA7CA5 /* EmptyDataModelHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51CFDDB02AC5F78F00DA7CA5 /* EmptyDataModelHandler.cpp */; }; 51CFDDB22AC5F78F00DA7CA5 /* EmptyDataModelHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51CFDDB02AC5F78F00DA7CA5 /* EmptyDataModelHandler.cpp */; }; + 51D0B1272B617246006E3511 /* MTRServerEndpoint.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51D0B1252B617246006E3511 /* MTRServerEndpoint.mm */; }; + 51D0B1282B617246006E3511 /* MTRServerEndpoint.h in Headers */ = {isa = PBXBuildFile; fileRef = 51D0B1262B617246006E3511 /* MTRServerEndpoint.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 51D0B12A2B61766F006E3511 /* MTRServerEndpointTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 51D0B1292B61766F006E3511 /* MTRServerEndpointTests.m */; }; + 51D0B12E2B6177FD006E3511 /* MTRAccessGrant.h in Headers */ = {isa = PBXBuildFile; fileRef = 51D0B12C2B6177D9006E3511 /* MTRAccessGrant.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 51D0B12F2B617800006E3511 /* MTRAccessGrant.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51D0B12B2B6177D9006E3511 /* MTRAccessGrant.mm */; }; + 51D0B1382B618CC6006E3511 /* MTRServerAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 51D0B1362B618CC6006E3511 /* MTRServerAttribute.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 51D0B1392B618CC6006E3511 /* MTRServerAttribute.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51D0B1372B618CC6006E3511 /* MTRServerAttribute.mm */; }; + 51D0B13C2B61B2F2006E3511 /* MTRDeviceTypeRevision.h in Headers */ = {isa = PBXBuildFile; fileRef = 51D0B13A2B61B2F2006E3511 /* MTRDeviceTypeRevision.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 51D0B13D2B61B2F2006E3511 /* MTRDeviceTypeRevision.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51D0B13B2B61B2F2006E3511 /* MTRDeviceTypeRevision.mm */; }; + 51D0B1402B61B3A4006E3511 /* MTRServerCluster.h in Headers */ = {isa = PBXBuildFile; fileRef = 51D0B13E2B61B3A3006E3511 /* MTRServerCluster.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 51D0B1412B61B3A4006E3511 /* MTRServerCluster.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51D0B13F2B61B3A3006E3511 /* MTRServerCluster.mm */; }; 51D10D2E2808E2CA00E8CA3D /* MTRTestStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 51D10D2D2808E2CA00E8CA3D /* MTRTestStorage.m */; }; 51E0FC102ACBBF230001E197 /* MTRSwiftDeviceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51E0FC0F2ACBBF230001E197 /* MTRSwiftDeviceTests.swift */; }; 51E24E73274E0DAC007CCF6E /* MTRErrorTestUtils.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51E24E72274E0DAC007CCF6E /* MTRErrorTestUtils.mm */; }; @@ -305,10 +319,10 @@ B4E2621B2AA0D02000DBA5BC /* SleepCommand.mm in Sources */ = {isa = PBXBuildFile; fileRef = B4E262192AA0D01D00DBA5BC /* SleepCommand.mm */; }; B4E2621E2AA0D02D00DBA5BC /* WaitForCommissioneeCommand.mm in Sources */ = {isa = PBXBuildFile; fileRef = B4E2621C2AA0D02A00DBA5BC /* WaitForCommissioneeCommand.mm */; }; B4FCD56A2B5EDBD300832859 /* MTRDiagnosticLogsType.h in Headers */ = {isa = PBXBuildFile; fileRef = B4FCD5692B5EDBD300832859 /* MTRDiagnosticLogsType.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B4FCD5732B611EB300832859 /* MTRDiagnosticLogsDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = B4C8E6B32B3453AD00FCD54D /* MTRDiagnosticLogsDownloader.h */; }; B4FCD5702B603A6300832859 /* Commands.h in Headers */ = {isa = PBXBuildFile; fileRef = B4FCD56D2B603A6300832859 /* Commands.h */; }; B4FCD5712B603A6300832859 /* DownloadLogCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = B4FCD56E2B603A6300832859 /* DownloadLogCommand.h */; }; B4FCD5722B603A6300832859 /* DownloadLogCommand.mm in Sources */ = {isa = PBXBuildFile; fileRef = B4FCD56F2B603A6300832859 /* DownloadLogCommand.mm */; }; + B4FCD5732B611EB300832859 /* MTRDiagnosticLogsDownloader.h in Headers */ = {isa = PBXBuildFile; fileRef = B4C8E6B32B3453AD00FCD54D /* MTRDiagnosticLogsDownloader.h */; }; BA09EB43247477BA00605257 /* libCHIP.a in Frameworks */ = {isa = PBXBuildFile; fileRef = BA09EB3F2474762900605257 /* libCHIP.a */; }; D4772A46285AE98400383630 /* MTRClusterConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = D4772A45285AE98300383630 /* MTRClusterConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; /* End PBXBuildFile section */ @@ -515,6 +529,9 @@ 5143851D2A65885500EDC8E6 /* MTRSwiftPairingTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MTRSwiftPairingTests.swift; sourceTree = ""; }; 514654482A72F9DF00904E61 /* MTRDemuxingStorage.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDemuxingStorage.mm; sourceTree = ""; }; 5146544A2A72F9F500904E61 /* MTRDemuxingStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRDemuxingStorage.h; sourceTree = ""; }; + 514C79FF2B64223400DD6D7B /* MTRServerAttribute_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRServerAttribute_Internal.h; sourceTree = ""; }; + 514C7A002B64223400DD6D7B /* MTRServerEndpoint_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRServerEndpoint_Internal.h; sourceTree = ""; }; + 514C7A032B6436D500DD6D7B /* MTRServerCluster_Internal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRServerCluster_Internal.h; sourceTree = ""; }; 51565CAD2A79D42100469F18 /* MTRConversion.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRConversion.mm; sourceTree = ""; }; 51565CAF2A7AD77600469F18 /* MTRDeviceControllerDataStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRDeviceControllerDataStore.h; sourceTree = ""; }; 51565CB02A7AD77600469F18 /* MTRDeviceControllerDataStore.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceControllerDataStore.mm; sourceTree = ""; }; @@ -553,6 +570,17 @@ 51C984602A61CE2A00B0AD9A /* MTRFabricInfoChecker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTRFabricInfoChecker.m; sourceTree = ""; }; 51C984612A61CE2A00B0AD9A /* MTRFabricInfoChecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRFabricInfoChecker.h; sourceTree = ""; }; 51CFDDB02AC5F78F00DA7CA5 /* EmptyDataModelHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EmptyDataModelHandler.cpp; path = ../controller/EmptyDataModelHandler.cpp; sourceTree = ""; }; + 51D0B1252B617246006E3511 /* MTRServerEndpoint.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRServerEndpoint.mm; sourceTree = ""; }; + 51D0B1262B617246006E3511 /* MTRServerEndpoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRServerEndpoint.h; sourceTree = ""; }; + 51D0B1292B61766F006E3511 /* MTRServerEndpointTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTRServerEndpointTests.m; sourceTree = ""; }; + 51D0B12B2B6177D9006E3511 /* MTRAccessGrant.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRAccessGrant.mm; sourceTree = ""; }; + 51D0B12C2B6177D9006E3511 /* MTRAccessGrant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRAccessGrant.h; sourceTree = ""; }; + 51D0B1362B618CC6006E3511 /* MTRServerAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRServerAttribute.h; sourceTree = ""; }; + 51D0B1372B618CC6006E3511 /* MTRServerAttribute.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRServerAttribute.mm; sourceTree = ""; }; + 51D0B13A2B61B2F2006E3511 /* MTRDeviceTypeRevision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRDeviceTypeRevision.h; sourceTree = ""; }; + 51D0B13B2B61B2F2006E3511 /* MTRDeviceTypeRevision.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRDeviceTypeRevision.mm; sourceTree = ""; }; + 51D0B13E2B61B3A3006E3511 /* MTRServerCluster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRServerCluster.h; sourceTree = ""; }; + 51D0B13F2B61B3A3006E3511 /* MTRServerCluster.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRServerCluster.mm; sourceTree = ""; }; 51D10D2D2808E2CA00E8CA3D /* MTRTestStorage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTRTestStorage.m; sourceTree = ""; }; 51E0FC0F2ACBBF230001E197 /* MTRSwiftDeviceTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MTRSwiftDeviceTests.swift; sourceTree = ""; }; 51E24E72274E0DAC007CCF6E /* MTRErrorTestUtils.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRErrorTestUtils.mm; sourceTree = ""; }; @@ -1092,6 +1120,26 @@ path = TestHelpers; sourceTree = ""; }; + 51D0B1312B618C4F006E3511 /* ServerEndpoint */ = { + isa = PBXGroup; + children = ( + 51D0B12C2B6177D9006E3511 /* MTRAccessGrant.h */, + 51D0B12B2B6177D9006E3511 /* MTRAccessGrant.mm */, + 51D0B1362B618CC6006E3511 /* MTRServerAttribute.h */, + 51D0B1372B618CC6006E3511 /* MTRServerAttribute.mm */, + 514C79FF2B64223400DD6D7B /* MTRServerAttribute_Internal.h */, + 51D0B13A2B61B2F2006E3511 /* MTRDeviceTypeRevision.h */, + 51D0B13B2B61B2F2006E3511 /* MTRDeviceTypeRevision.mm */, + 51D0B1262B617246006E3511 /* MTRServerEndpoint.h */, + 51D0B1252B617246006E3511 /* MTRServerEndpoint.mm */, + 514C7A002B64223400DD6D7B /* MTRServerEndpoint_Internal.h */, + 51D0B13E2B61B3A3006E3511 /* MTRServerCluster.h */, + 51D0B13F2B61B3A3006E3511 /* MTRServerCluster.mm */, + 514C7A032B6436D500DD6D7B /* MTRServerCluster_Internal.h */, + ); + path = ServerEndpoint; + sourceTree = ""; + }; B20252832459E34F00F97062 = { isa = PBXGroup; children = ( @@ -1130,6 +1178,7 @@ 1EC4CE5825CC26AB00D7304F /* zap-generated */, B20252912459E34F00F97062 /* Info.plist */, B2E0D7A8245B0B5C003C5B48 /* Matter.h */, + 51D0B1312B618C4F006E3511 /* ServerEndpoint */, 7596A84628762783004DAE0E /* MTRAsyncCallbackWorkQueue.h */, 7596A84728762783004DAE0E /* MTRAsyncCallbackWorkQueue.mm */, 3DA1A3522ABAB3B4004F0BB9 /* MTRAsyncWorkQueue.h */, @@ -1285,6 +1334,7 @@ 51E0FC0F2ACBBF230001E197 /* MTRSwiftDeviceTests.swift */, 51E95DF72A78110900A434F0 /* MTRPerControllerStorageTests.m */, 518D3F842AA14006008E0007 /* MTRControllerAdvertisingTests.m */, + 51D0B1292B61766F006E3511 /* MTRServerEndpointTests.m */, B202529D2459E34F00F97062 /* Info.plist */, 5143851C2A65885400EDC8E6 /* MatterTests-Bridging-Header.h */, ); @@ -1428,6 +1478,7 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + 51D0B1282B617246006E3511 /* MTRServerEndpoint.h in Headers */, 51565CB62A7B0D6600469F18 /* MTRDeviceControllerParameters.h in Headers */, 51565CB42A7AD78D00469F18 /* MTRDeviceControllerStorageDelegate.h in Headers */, 510A07492A685D3900A9241C /* Matter.apinotes in Headers */, @@ -1438,6 +1489,7 @@ 5136661628067D550025EDAE /* MTRDeviceControllerFactory.h in Headers */, 5178E6812AE098520069DF72 /* MTRCommandTimedCheck.h in Headers */, 7596A84B287636C1004DAE0E /* MTRDevice_Internal.h in Headers */, + 514C7A042B6436D500DD6D7B /* MTRServerCluster_Internal.h in Headers */, 5A6FEC9927B5C88900F25F42 /* MTRDeviceOverXPC.h in Headers */, B4FCD5732B611EB300832859 /* MTRDiagnosticLogsDownloader.h in Headers */, 51B22C222740CB1D008D5055 /* MTRCommandPayloadsObjc.h in Headers */, @@ -1465,6 +1517,7 @@ 7596A84F2877E6A9004DAE0E /* MTRCluster_Internal.h in Headers */, 991DC0842475F45400C13860 /* MTRDeviceController.h in Headers */, AF1CB86E2874B03B00865A96 /* MTROTAProviderDelegate.h in Headers */, + 51D0B1402B61B3A4006E3511 /* MTRServerCluster.h in Headers */, 754F3DF427FBB94B00E60580 /* MTREventTLVValueDecoder_Internal.h in Headers */, 3CF134AF289D90FF0017A19E /* MTROperationalCertificateIssuer.h in Headers */, 5178E6822AE098520069DF72 /* MTRCommissionableBrowserResult_Internal.h in Headers */, @@ -1481,7 +1534,9 @@ 9956064426420367000C28DE /* MTRSetupPayload_Internal.h in Headers */, 27A53C1727FBC6920053F131 /* MTRAttestationTrustStoreBridge.h in Headers */, 5A830D6C27CFCF590053B85D /* MTRDeviceControllerOverXPC_Internal.h in Headers */, + 51D0B13C2B61B2F2006E3511 /* MTRDeviceTypeRevision.h in Headers */, 88EBF8D027FABDD500686BC1 /* MTRDeviceAttestationDelegateBridge.h in Headers */, + 514C7A012B64223400DD6D7B /* MTRServerAttribute_Internal.h in Headers */, 3DFCB32C29678C9500332B35 /* MTRConversion.h in Headers */, 5A60370827EA1FF60020DB79 /* MTRClusterStateCacheContainer+XPC.h in Headers */, 5ACDDD7E27CD3F3A00EFD68A /* MTRClusterStateCacheContainer_Internal.h in Headers */, @@ -1495,6 +1550,7 @@ 2C8C8FC1253E0C2100797F05 /* MTRStorage.h in Headers */, AF1CB8702874B04C00865A96 /* MTROTAProviderDelegateBridge.h in Headers */, B2E0D7B5245B0B5C003C5B48 /* MTRQRCodeSetupPayloadParser.h in Headers */, + 51D0B1382B618CC6006E3511 /* MTRServerAttribute.h in Headers */, 1EC4CE6425CC276600D7304F /* MTRBaseClusters.h in Headers */, 3D843712294977000070D20A /* MTRCallbackBridgeBase.h in Headers */, 3DECCB742934C21B00585AEC /* MTRDefines.h in Headers */, @@ -1506,11 +1562,13 @@ 1E4D654E29C208DD00BC3478 /* MTRCommissionableBrowserResult.h in Headers */, 998F286F26D55EC5001846C6 /* MTRP256KeypairBridge.h in Headers */, 2C222ADF255C811800E446B9 /* MTRBaseDevice_Internal.h in Headers */, + 514C7A022B64223400DD6D7B /* MTRServerEndpoint_Internal.h in Headers */, 511913FC28C100EF009235E9 /* MTRBaseSubscriptionCallback.h in Headers */, 51565CB12A7AD77600469F18 /* MTRDeviceControllerDataStore.h in Headers */, 3D843713294977000070D20A /* NSDataSpanConversion.h in Headers */, 991DC08B247704DC00C13860 /* MTRLogging_Internal.h in Headers */, 51FE723F2ACDEF3E00437032 /* MTRCommandPayloadExtensions_Internal.h in Headers */, + 51D0B12E2B6177FD006E3511 /* MTRAccessGrant.h in Headers */, 1E4D655029C208DD00BC3478 /* MTRCommissionableBrowserDelegate.h in Headers */, 7596A84828762783004DAE0E /* MTRAsyncCallbackWorkQueue.h in Headers */, 5A7947E527C0129F00434CF2 /* MTRDeviceController+XPC.h in Headers */, @@ -1760,7 +1818,9 @@ 51029DF6293AA6100087AFB0 /* MTROperationalCertificateIssuer.mm in Sources */, 27A53C1827FBC6920053F131 /* MTRAttestationTrustStoreBridge.mm in Sources */, 998F287126D56940001846C6 /* MTRP256KeypairBridge.mm in Sources */, + 51D0B1412B61B3A4006E3511 /* MTRServerCluster.mm in Sources */, 5136661428067D550025EDAE /* MTRDeviceControllerFactory.mm in Sources */, + 51D0B1392B618CC6006E3511 /* MTRServerAttribute.mm in Sources */, 51B22C2A2740CB47008D5055 /* MTRCommandPayloadsObjc.mm in Sources */, 51F522682AE70734000C4050 /* MTRDeviceTypeMetadata.mm in Sources */, 75B765C32A1D82D30014719B /* MTRAttributeSpecifiedCheck.mm in Sources */, @@ -1777,8 +1837,10 @@ B2E0D7B7245B0B5C003C5B48 /* MTRQRCodeSetupPayloadParser.mm in Sources */, 514304202914CED9004DC7FE /* generic-callback-stubs.cpp in Sources */, 1EDCE546289049A100E41EC9 /* MTROTAHeader.mm in Sources */, + 51D0B13D2B61B2F2006E3511 /* MTRDeviceTypeRevision.mm in Sources */, 1EC4CE5D25CC26E900D7304F /* MTRBaseClusters.mm in Sources */, 51565CB22A7AD77600469F18 /* MTRDeviceControllerDataStore.mm in Sources */, + 51D0B12F2B617800006E3511 /* MTRAccessGrant.mm in Sources */, 1ED276E226C5812A00547A89 /* MTRCluster.mm in Sources */, B2E0D7B3245B0B5C003C5B48 /* MTRError.mm in Sources */, 51E51FC1282AD37A00FC978D /* MTRDeviceControllerStartupParams.mm in Sources */, @@ -1809,6 +1871,7 @@ 514654492A72F9DF00904E61 /* MTRDemuxingStorage.mm in Sources */, 1E4D655229C30A8700BC3478 /* MTRCommissionableBrowser.mm in Sources */, 3DA1A3562ABAB3B4004F0BB9 /* MTRAsyncWorkQueue.mm in Sources */, + 51D0B1272B617246006E3511 /* MTRServerEndpoint.mm in Sources */, 3DECCB722934AFE200585AEC /* MTRLogging.mm in Sources */, 7596A84528762729004DAE0E /* MTRDevice.mm in Sources */, ); @@ -1821,6 +1884,7 @@ 51742B4E29CB6B88009974FE /* MTRPairingTests.m in Sources */, 51669AF02913204400F4AA36 /* MTRBackwardsCompatTests.m in Sources */, 51D10D2E2808E2CA00E8CA3D /* MTRTestStorage.m in Sources */, + 51D0B12A2B61766F006E3511 /* MTRServerEndpointTests.m in Sources */, 7596A8512878709F004DAE0E /* MTRAsyncCallbackQueueTests.m in Sources */, 997DED1A26955D0200975E97 /* MTRThreadOperationalDatasetTests.mm in Sources */, 518D3F852AA14006008E0007 /* MTRControllerAdvertisingTests.m in Sources */, From c4b5df959e1f95ffd5d6c79b0cb058674b0c71a9 Mon Sep 17 00:00:00 2001 From: andrei-menzopol <96489227+andrei-menzopol@users.noreply.github.com> Date: Wed, 31 Jan 2024 20:58:45 +0200 Subject: [PATCH 14/16] [shell] Fixes for Matter cli (#31768) * [shell] Fixed parsing of long otcli commands The otcli command buffer (128) was to small for some ot commands like otcli dataset set active . The 128 value was taken from an OT config a long time ago and since was increased to 384. A new static constexpr was created with the value of 384 to be used instead of the define. Signed-off-by: Marius Preda * [shell] Add backspace character in ReadLine Signed-off-by: Andrei Menzopol --------- Signed-off-by: Marius Preda Signed-off-by: Andrei Menzopol Co-authored-by: Marius Preda --- examples/shell/shell_common/cmd_otcli.cpp | 3 +-- src/lib/shell/MainLoopDefault.cpp | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/shell/shell_common/cmd_otcli.cpp b/examples/shell/shell_common/cmd_otcli.cpp index 590fda96e16fae..98736c2cb4215d 100644 --- a/examples/shell/shell_common/cmd_otcli.cpp +++ b/examples/shell/shell_common/cmd_otcli.cpp @@ -48,6 +48,7 @@ static char sTxBuffer[SHELL_OTCLI_TX_BUFFER_SIZE]; static constexpr uint16_t sTxLength = SHELL_OTCLI_TX_BUFFER_SIZE; #endif // !CHIP_DEVICE_CONFIG_THREAD_ENABLE_CLI) #endif +static constexpr uint16_t kMaxLineLength = 384; #else #include #include @@ -81,8 +82,6 @@ CHIP_ERROR cmd_otcli_dispatch(int argc, char ** argv) { CHIP_ERROR error = CHIP_NO_ERROR; -// From OT CLI internal lib, kMaxLineLength = 128 -#define kMaxLineLength 128 char buff[kMaxLineLength] = { 0 }; char * buff_ptr = buff; int i = 0; diff --git a/src/lib/shell/MainLoopDefault.cpp b/src/lib/shell/MainLoopDefault.cpp index fba29a7238f161..c83fc96e4a1413 100644 --- a/src/lib/shell/MainLoopDefault.cpp +++ b/src/lib/shell/MainLoopDefault.cpp @@ -69,6 +69,7 @@ size_t ReadLine(char * buffer, size_t max) done = true; } break; + case 0x08: case 0x7F: // Do not accept backspace character (i.e. don't increment line_sz) and remove 1 additional character if it exists. if (line_sz >= 1u) From 0bd5786bcf902ffbd7e33b751745bbf358b3eb7c Mon Sep 17 00:00:00 2001 From: William Date: Wed, 31 Jan 2024 19:02:58 +0000 Subject: [PATCH 15/16] Update rvc op state in all clusters (#31763) * Updated the all-clusters-app to change the operataional state from the rvc run mode change-to-mode command. Updated the CI pics file to match the capabilities of the all-clutsers-app. * Updated TC_RVCOPSTATE_2_1 to take the --endpoind flag and fix an execution issue. * Updated TC_RVCOPSTATE_2_3 to error if the --endpoind flag is not defined and fix an execution issue. * Updated TC_RVCOPSTATE_2_4 to error if the --endpoind flag is not defined and fixed some execution issues. * Restyled by whitespace * Restyled by clang-format * Restyled by autopep8 * Added the GoHome command PICS, RVCOPSTATE.S.C128.Rsp, to the PICS.yaml. * fixed typo. --------- Co-authored-by: Restyled.io --- .../all-clusters-common/src/rvc-modes.cpp | 17 +++++++-- src/app/tests/suites/certification/PICS.yaml | 3 ++ .../tests/suites/certification/ci-pics-values | 32 ++++++++-------- src/python_testing/TC_RVCOPSTATE_2_1.py | 21 ++++------- src/python_testing/TC_RVCOPSTATE_2_3.py | 37 ++++++++----------- src/python_testing/TC_RVCOPSTATE_2_4.py | 26 +++++-------- 6 files changed, 66 insertions(+), 70 deletions(-) diff --git a/examples/all-clusters-app/all-clusters-common/src/rvc-modes.cpp b/examples/all-clusters-app/all-clusters-common/src/rvc-modes.cpp index 7fc5b61499fed2..627709a8c30921 100644 --- a/examples/all-clusters-app/all-clusters-common/src/rvc-modes.cpp +++ b/examples/all-clusters-app/all-clusters-common/src/rvc-modes.cpp @@ -17,6 +17,7 @@ */ #include #include +#include using namespace chip::app::Clusters; using namespace chip::app::Clusters::RvcRunMode; @@ -40,14 +41,24 @@ void RvcRunModeDelegate::HandleChangeToMode(uint8_t NewMode, ModeBase::Commands: { uint8_t currentMode = mInstance->GetCurrentMode(); - // Our business logic states that we can only switch into the mapping state from the idle state. - if (NewMode == RvcRunMode::ModeMapping && currentMode != RvcRunMode::ModeIdle) + // Our business logic states that we can only switch into a running mode from the idle state. + if (NewMode != RvcRunMode::ModeIdle && currentMode != RvcRunMode::ModeIdle) { response.status = to_underlying(ModeBase::StatusCode::kInvalidInMode); - response.statusText.SetValue(chip::CharSpan::fromCharString("Change to the mapping mode is only allowed from idle")); + response.statusText.SetValue(chip::CharSpan::fromCharString("Change to a running mode is only allowed from idle")); return; } + auto rvcOpStateInstance = RvcOperationalState::GetRvcOperationalStateInstance(); + if (NewMode == RvcRunMode::ModeIdle) + { + rvcOpStateInstance->SetOperationalState(to_underlying(OperationalState::OperationalStateEnum::kStopped)); + } + else + { + rvcOpStateInstance->SetOperationalState(to_underlying(OperationalState::OperationalStateEnum::kRunning)); + } + response.status = to_underlying(ModeBase::StatusCode::kSuccess); } diff --git a/src/app/tests/suites/certification/PICS.yaml b/src/app/tests/suites/certification/PICS.yaml index 93cfe963c6bc13..09d55dff5881b3 100644 --- a/src/app/tests/suites/certification/PICS.yaml +++ b/src/app/tests/suites/certification/PICS.yaml @@ -9497,6 +9497,9 @@ PICS: - label: "Does the device implement receiving the Resume command?" id: RVCOPSTATE.S.C03.Rsp + - label: "Does the device implement receiving the GoHome command?" + id: RVCOPSTATE.S.C128.Rsp + #Commands generated - label: "Does the device implement generating the OperationalCommandResponse diff --git a/src/app/tests/suites/certification/ci-pics-values b/src/app/tests/suites/certification/ci-pics-values index 4c4df4cef22a9a..907b0024709c4c 100644 --- a/src/app/tests/suites/certification/ci-pics-values +++ b/src/app/tests/suites/certification/ci-pics-values @@ -2457,26 +2457,27 @@ RVCOPSTATE.S=1 RVCOPSTATE.C=1 #ManuallyControlled +# These are the PICS supported by the all-clusters-app RVCOPSTATE.S.M.ST_STOPPED=1 RVCOPSTATE.S.M.ST_RUNNING=1 RVCOPSTATE.S.M.ST_PAUSED=1 -RVCOPSTATE.S.M.ST_ERROR=1 -RVCOPSTATE.S.M.ST_SEEKING_CHARGER=1 -RVCOPSTATE.S.M.ST_CHARGING=1 -RVCOPSTATE.S.M.ST_DOCKED=1 +RVCOPSTATE.S.M.ST_ERROR=0 +RVCOPSTATE.S.M.ST_SEEKING_CHARGER=0 +RVCOPSTATE.S.M.ST_CHARGING=0 +RVCOPSTATE.S.M.ST_DOCKED=0 RVCOPSTATE.S.M.ERR_NO_ERROR=1 -RVCOPSTATE.S.M.ERR_UNABLE_TO_START_OR_RESUME=1 -RVCOPSTATE.S.M.ERR_UNABLE_TO_COMPLETE_OPERATION=1 -RVCOPSTATE.S.M.ERR_COMMAND_INVALID_IN_STATE=1 -RVCOPSTATE.S.M.ERR_FAILED_TO_FIND_CHARGING_DOCK=1 -RVCOPSTATE.S.M.ERR_STUCK=1 -RVCOPSTATE.S.M.ERR_DUST_BIN_MISSING=1 -RVCOPSTATE.S.M.ERR_DUST_BIN_FULL=1 -RVCOPSTATE.S.M.ERR_WATER_TANK_EMPTY=1 -RVCOPSTATE.S.M.ERR_WATER_TANK_MISSING=1 -RVCOPSTATE.S.M.ERR_WATER_TANK_LID_OPEN=1 -RVCOPSTATE.S.M.ERR_MOP_CLEANING_PAD_MISSING=1 +RVCOPSTATE.S.M.ERR_UNABLE_TO_START_OR_RESUME=0 +RVCOPSTATE.S.M.ERR_UNABLE_TO_COMPLETE_OPERATION=0 +RVCOPSTATE.S.M.ERR_COMMAND_INVALID_IN_STATE=0 +RVCOPSTATE.S.M.ERR_FAILED_TO_FIND_CHARGING_DOCK=0 +RVCOPSTATE.S.M.ERR_STUCK=0 +RVCOPSTATE.S.M.ERR_DUST_BIN_MISSING=0 +RVCOPSTATE.S.M.ERR_DUST_BIN_FULL=0 +RVCOPSTATE.S.M.ERR_WATER_TANK_EMPTY=0 +RVCOPSTATE.S.M.ERR_WATER_TANK_MISSING=0 +RVCOPSTATE.S.M.ERR_WATER_TANK_LID_OPEN=0 +RVCOPSTATE.S.M.ERR_MOP_CLEANING_PAD_MISSING=0 #Events RVCOPSTATE.S.E00=1 @@ -2496,6 +2497,7 @@ RVCOPSTATE.S.C01.Rsp=0 RVCOPSTATE.S.C02.Rsp=0 RVCOPSTATE.S.C03.Rsp=1 RVCOPSTATE.S.C04.Tx=1 +RVCOPSTATE.S.C128.Rsp=1 RVCOPSTATE.C.C00.Tx=1 RVCOPSTATE.C.C01.Tx=1 RVCOPSTATE.C.C02.Tx=1 diff --git a/src/python_testing/TC_RVCOPSTATE_2_1.py b/src/python_testing/TC_RVCOPSTATE_2_1.py index 8ca7a00ab2c134..a74a27616b7b09 100644 --- a/src/python_testing/TC_RVCOPSTATE_2_1.py +++ b/src/python_testing/TC_RVCOPSTATE_2_1.py @@ -22,12 +22,11 @@ from matter_testing_support import MatterBaseTest, async_test_body, default_matter_test_main from mobly import asserts -# This test requires several additional command line arguments -# run with -# --int-arg PIXIT_ENDPOINT: - class TC_RVCOPSTATE_2_1(MatterBaseTest): + def __init__(self, *args): + super().__init__(*args) + self.endpoint = None async def read_mod_attribute_expect_success(self, endpoint, attribute): cluster = Clusters.Objects.RvcOperationalState @@ -54,12 +53,8 @@ def TC_RVCOPSTATE_2_1(self) -> list[str]: @async_test_body async def test_TC_RVCOPSTATE_2_1(self): - - asserts.assert_true('PIXIT_ENDPOINT' in self.matter_test_config.global_test_params, - "PIXIT_ENDPOINT must be included on the command line in " - "the --int-arg flag as PIXIT_ENDPOINT:") - - self.endpoint = self.matter_test_config.global_test_params['PIXIT_ENDPOINT'] + self.endpoint = self.matter_test_config.endpoint + asserts.assert_false(self.endpoint is None, "--endpoint must be included on the command line in.") attributes = Clusters.RvcOperationalState.Attributes @@ -108,8 +103,7 @@ async def test_TC_RVCOPSTATE_2_1(self): defined_states = [state.value for state in Clusters.OperationalState.Enums.OperationalStateEnum if state is not Clusters.OperationalState.Enums.OperationalStateEnum.kUnknownEnumValue] - defined_states.extend(state.value for state in Clusters.RvcOperationalState.Enums.OperationalStateEnum - if state is not Clusters.RvcOperationalState.Enums.OperationalStateEnum.kUnknownEnumValue) + defined_states.extend(state.value for state in Clusters.RvcOperationalState.Enums.OperationalStateEnum) for state in operational_state_list: in_range = (0x80 <= state.operationalStateID <= 0xBF) @@ -172,8 +166,7 @@ async def test_TC_RVCOPSTATE_2_1(self): # Defined Errors defined_errors = [error.value for error in Clusters.OperationalState.Enums.ErrorStateEnum if error is not Clusters.OperationalState.Enums.ErrorStateEnum.kUnknownEnumValue] - defined_errors.extend(error.value for error in Clusters.RvcOperationalState.Enums.ErrorStateEnum - if error is not Clusters.RvcOperationalState.Enums.ErrorStateEnum.kUnknownEnumValue) + defined_errors.extend(error.value for error in Clusters.RvcOperationalState.Enums.ErrorStateEnum) in_range = (0x80 <= operational_error.errorStateID <= 0xBF) asserts.assert_true(operational_error.errorStateID in defined_errors diff --git a/src/python_testing/TC_RVCOPSTATE_2_3.py b/src/python_testing/TC_RVCOPSTATE_2_3.py index 8303905482b3f9..da3f1522d74976 100644 --- a/src/python_testing/TC_RVCOPSTATE_2_3.py +++ b/src/python_testing/TC_RVCOPSTATE_2_3.py @@ -23,10 +23,6 @@ from matter_testing_support import MatterBaseTest, async_test_body, default_matter_test_main, type_matches from mobly import asserts -# This test requires several additional command line arguments -# run with -# --int-arg PIXIT_ENDPOINT: - # Takes an OpState or RvcOpState state enum and returns a string representation def state_enum_to_text(state_enum): @@ -82,20 +78,20 @@ def pics_TC_RVCOPSTATE_2_3(self) -> list[str]: class TC_RVCOPSTATE_2_3(MatterBaseTest): def __init__(self, *args): - super().__init__(args) - self.endpoint = 0 + super().__init__(*args) + self.endpoint = None async def read_mod_attribute_expect_success(self, endpoint, attribute): cluster = Clusters.Objects.RvcOperationalState return await self.read_single_attribute_check_success(endpoint=endpoint, cluster=cluster, attribute=attribute) - async def send_pause_cmd(self) -> Clusters.Objects.RvcOperationalState.Commands.Pause: + async def send_pause_cmd(self) -> Clusters.Objects.RvcOperationalState.Commands.OperationalCommandResponse: ret = await self.send_single_cmd(cmd=Clusters.Objects.RvcOperationalState.Commands.Pause(), endpoint=self.endpoint) asserts.assert_true(type_matches(ret, Clusters.Objects.RvcOperationalState.Commands.OperationalCommandResponse), "Unexpected return type for Pause") return ret - async def send_resume_cmd(self) -> Clusters.Objects.RvcOperationalState.Commands.Resume: + async def send_resume_cmd(self) -> Clusters.Objects.RvcOperationalState.Commands.OperationalCommandResponse: ret = await self.send_single_cmd(cmd=Clusters.Objects.RvcOperationalState.Commands.Resume(), endpoint=self.endpoint) asserts.assert_true(type_matches(ret, Clusters.Objects.RvcOperationalState.Commands.OperationalCommandResponse), "Unexpected return type for Resume") @@ -108,23 +104,23 @@ async def read_operational_state_with_check(self, step_number, expected_state): endpoint=self.endpoint, attribute=Clusters.RvcOperationalState.Attributes.OperationalState) logging.info("OperationalState: %s" % operational_state) asserts.assert_equal(operational_state, expected_state, - "OperationalState(%s) should be %s" % operational_state, state_enum_to_text(expected_state)) + "OperationalState(%s) should be %s" % (operational_state, state_enum_to_text(expected_state))) # Sends the Pause command and checks that the returned error matches the expected_error async def send_pause_cmd_with_check(self, step_number, expected_error): self.print_step(step_number, "Send Pause command") - ret = self.send_pause_cmd() + ret = await self.send_pause_cmd() asserts.assert_equal(ret.commandResponseState.errorStateID, expected_error, - "errorStateID(%s) should be %s" % ret.commandResponseState.errorStateID, - error_enum_to_text(expected_error)) + "errorStateID(%s) should be %s" % (ret.commandResponseState.errorStateID, + error_enum_to_text(expected_error))) # Sends the Resume command and checks that the returned error matches the expected_error async def send_resume_cmd_with_check(self, step_number, expected_error): self.print_step(step_number, "Send Pause command") - ret = self.send_resume_cmd() + ret = await self.send_resume_cmd() asserts.assert_equal(ret.commandResponseState.errorStateID, expected_error, - "errorStateID(%s) should be %s" % ret.commandResponseState.errorStateID, - error_enum_to_text(expected_error)) + "errorStateID(%s) should be %s" % (ret.commandResponseState.errorStateID, + error_enum_to_text(expected_error))) # Prints the instruction and waits for a user input to continue def print_instruction(self, step_number, instruction): @@ -134,18 +130,15 @@ def print_instruction(self, step_number, instruction): @async_test_body async def test_TC_RVCOPSTATE_2_3(self): - asserts.assert_true('PIXIT_ENDPOINT' in self.matter_test_config.global_test_params, - "PIXIT_ENDPOINT must be included on the command line in " - "the --int-arg flag as PIXIT_ENDPOINT:") - - self.endpoint = self.matter_test_config.global_test_params['PIXIT_ENDPOINT'] + self.endpoint = self.matter_test_config.endpoint + asserts.assert_false(self.endpoint is None, "--endpoint must be included on the command line in.") asserts.assert_true(self.check_pics("RVCOPSTATE.S.A0003"), "RVCOPSTATE.S.A0003 must be supported") asserts.assert_true(self.check_pics("RVCOPSTATE.S.A0004"), "RVCOPSTATE.S.A0004 must be supported") asserts.assert_true(self.check_pics("RVCOPSTATE.S.C00.Rsp"), "RVCOPSTATE.S.C00.Rsp must be supported") asserts.assert_true(self.check_pics("RVCOPSTATE.S.C03.Rsp"), "RVCOPSTATE.S.C03.Rsp must be supported") # This command SHALL be supported by an implementation if any of the other commands are supported (6.5) - asserts.assert_true(self.check_pics("RVCOPSTATE.S.C04.Rsp"), "RVCOPSTATE.S.C04.Rsp must be supported") + asserts.assert_true(self.check_pics("RVCOPSTATE.S.C04.Tx"), "RVCOPSTATE.S.C04.Tx must be supported") attributes = Clusters.RvcOperationalState.Attributes op_states = Clusters.OperationalState.Enums.OperationalStateEnum @@ -208,7 +201,7 @@ async def test_TC_RVCOPSTATE_2_3(self): attribute=attributes.OperationalState) logging.info("OperationalState: %s" % operational_state) asserts.assert_equal(operational_state, old_opstate_dut, - "OperationalState(%s) should be the state before pause (%s)" % operational_state, old_opstate_dut) + "OperationalState(%s) should be the state before pause (%s)" % (operational_state, old_opstate_dut)) await self.send_resume_cmd_with_check(13, op_errors.kNoError) diff --git a/src/python_testing/TC_RVCOPSTATE_2_4.py b/src/python_testing/TC_RVCOPSTATE_2_4.py index 41de4cbbdaa4ef..ddcb134ed96d77 100644 --- a/src/python_testing/TC_RVCOPSTATE_2_4.py +++ b/src/python_testing/TC_RVCOPSTATE_2_4.py @@ -21,10 +21,6 @@ from matter_testing_support import MatterBaseTest, async_test_body, default_matter_test_main, type_matches from mobly import asserts -# This test requires several additional command line arguments -# run with -# --int-arg PIXIT_ENDPOINT: - # Takes an OpState or RvcOpState state enum and returns a string representation def state_enum_to_text(state_enum): @@ -79,14 +75,14 @@ def pics_TC_RVCOPSTATE_2_4(self) -> list[str]: class TC_RVCOPSTATE_2_4(MatterBaseTest): def __init__(self, *args): - super().__init__(args) - self.endpoint = self.matter_test_config.global_test_params['PIXIT_ENDPOINT'] + super().__init__(*args) + self.endpoint = None async def read_mod_attribute_expect_success(self, endpoint, attribute): cluster = Clusters.Objects.RvcOperationalState return await self.read_single_attribute_check_success(endpoint=endpoint, cluster=cluster, attribute=attribute) - async def send_go_home_cmd(self) -> Clusters.Objects.RvcOperationalState.Commands.GoHome: + async def send_go_home_cmd(self) -> Clusters.Objects.RvcOperationalState.Commands.OperationalCommandResponse: ret = await self.send_single_cmd(cmd=Clusters.Objects.RvcOperationalState.Commands.GoHome(), endpoint=self.endpoint) asserts.assert_true(type_matches(ret, Clusters.Objects.RvcOperationalState.Commands.OperationalCommandResponse), "Unexpected return type for GoHome") @@ -95,10 +91,10 @@ async def send_go_home_cmd(self) -> Clusters.Objects.RvcOperationalState.Command # Sends the GoHome command and checks that the returned error matches the expected_error async def send_go_home_cmd_with_check(self, step_number, expected_error): self.print_step(step_number, "Send GoHome command") - ret = self.send_go_home_cmd() + ret = await self.send_go_home_cmd() asserts.assert_equal(ret.commandResponseState.errorStateID, expected_error, - "errorStateID(%s) should be %s" % ret.commandResponseState.errorStateID, - error_enum_to_text(expected_error)) + "errorStateID(%s) should be %s" % (ret.commandResponseState.errorStateID, + error_enum_to_text(expected_error))) # Prints the step number, reads the operational state attribute and checks if it matches with expected_state async def read_operational_state_with_check(self, step_number, expected_state): @@ -107,7 +103,7 @@ async def read_operational_state_with_check(self, step_number, expected_state): endpoint=self.endpoint, attribute=Clusters.RvcOperationalState.Attributes.OperationalState) logging.info("OperationalState: %s" % operational_state) asserts.assert_equal(operational_state, expected_state, - "OperationalState(%s) should be %s" % operational_state, state_enum_to_text(expected_state)) + "OperationalState(%s) should be %s" % (operational_state, state_enum_to_text(expected_state))) # Prints the instruction and waits for a user input to continue def print_instruction(self, step_number, instruction): @@ -116,13 +112,11 @@ def print_instruction(self, step_number, instruction): @async_test_body async def test_TC_RVCOPSTATE_2_4(self): - - asserts.assert_true('PIXIT_ENDPOINT' in self.matter_test_config.global_test_params, - "PIXIT_ENDPOINT must be included on the command line in " - "the --int-arg flag as PIXIT_ENDPOINT:") + self.endpoint = self.matter_test_config.endpoint + asserts.assert_false(self.endpoint is None, "--endpoint must be included on the command line in.") asserts.assert_true(self.check_pics("RVCOPSTATE.S.A0004"), "RVCOPSTATE.S.A0004 must be supported") - asserts.assert_true(self.check_pics("RVCOPSTATE.S.C04.Rsp"), "RVCOPSTATE.S.C04.Rsp must be supported") + asserts.assert_true(self.check_pics("RVCOPSTATE.S.C04.Tx"), "RVCOPSTATE.S.C04.Tx must be supported") asserts.assert_true(self.check_pics("RVCOPSTATE.S.C128.Rsp"), "RVCOPSTATE.S.C128.Rsp must be supported") op_states = Clusters.OperationalState.Enums.OperationalStateEnum From cd3e498e0705b7139ae1293a1bccae8e3b88c3bb Mon Sep 17 00:00:00 2001 From: Lazar Kovacic Date: Wed, 31 Jan 2024 12:59:02 -0800 Subject: [PATCH 16/16] TV Matter Media: Updated existing cluster to sync it with latest spec change (#31782) * Update message cluster to align with new spec. changes * ZAP tool correction --- .../zcl/data-model/chip/messages-cluster.xml | 8 +- .../data_model/controller-clusters.matter | 8 +- .../chip/devicecontroller/ChipClusters.java | 36 ++++- .../devicecontroller/ClusterIDMapping.java | 2 +- .../devicecontroller/ClusterInfoMapping.java | 34 ++++- .../cluster/clusters/MessagesCluster.kt | 38 ++++- .../python/chip/clusters/CHIPClusters.py | 8 +- .../python/chip/clusters/Objects.py | 16 +- .../zap-generated/MTRCommandPayloadsObjc.h | 14 +- .../zap-generated/MTRCommandPayloadsObjc.mm | 139 ++++++++++-------- .../zap-generated/cluster-objects.cpp | 36 ++++- .../zap-generated/cluster-objects.h | 24 ++- .../zap-generated/cluster/Commands.h | 15 +- .../zap-generated/cluster/Commands.h | 111 ++++++++------ 14 files changed, 348 insertions(+), 141 deletions(-) diff --git a/src/app/zap-templates/zcl/data-model/chip/messages-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/messages-cluster.xml index 0029e1066f96f0..28b3eb975594a0 100644 --- a/src/app/zap-templates/zcl/data-model/chip/messages-cluster.xml +++ b/src/app/zap-templates/zcl/data-model/chip/messages-cluster.xml @@ -84,7 +84,13 @@ limitations under the License. Command for requesting messages be presented - + + + + + + + diff --git a/src/controller/data_model/controller-clusters.matter b/src/controller/data_model/controller-clusters.matter index dacc1008177ad9..dbad9659e2f85f 100644 --- a/src/controller/data_model/controller-clusters.matter +++ b/src/controller/data_model/controller-clusters.matter @@ -4440,7 +4440,13 @@ cluster Messages = 151 { readonly attribute int16u clusterRevision = 65533; request struct PresentMessagesRequestRequest { - MessageStruct messages[] = 0; + octet_string<16> messageID = 0; + MessagePriorityEnum priority = 1; + MessageControlBitmap messageControl = 2; + nullable epoch_s startTime = 3; + nullable int16u duration = 4; + char_string<256> messageText = 5; + optional MessageResponseOptionStruct responses[] = 6; } request struct CancelMessagesRequestRequest { diff --git a/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java b/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java index 05034b2792c9e7..262059e5f3b85f 100644 --- a/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java +++ b/src/controller/java/generated/java/chip/devicecontroller/ChipClusters.java @@ -29078,17 +29078,41 @@ public long initWithDevice(long devicePtr, int endpointId) { return 0L; } - public void presentMessagesRequest(DefaultClusterCallback callback, ArrayList messages) { - presentMessagesRequest(callback, messages, 0); + public void presentMessagesRequest(DefaultClusterCallback callback, byte[] messageID, Integer priority, Integer messageControl, @Nullable Long startTime, @Nullable Integer duration, String messageText, Optional> responses) { + presentMessagesRequest(callback, messageID, priority, messageControl, startTime, duration, messageText, responses, 0); } - public void presentMessagesRequest(DefaultClusterCallback callback, ArrayList messages, int timedInvokeTimeoutMs) { + public void presentMessagesRequest(DefaultClusterCallback callback, byte[] messageID, Integer priority, Integer messageControl, @Nullable Long startTime, @Nullable Integer duration, String messageText, Optional> responses, int timedInvokeTimeoutMs) { final long commandId = 0L; ArrayList elements = new ArrayList<>(); - final long messagesFieldID = 0L; - BaseTLVType messagestlvValue = ArrayType.generateArrayType(messages, (elementmessages) -> elementmessages.encodeTlv()); - elements.add(new StructElement(messagesFieldID, messagestlvValue)); + final long messageIDFieldID = 0L; + BaseTLVType messageIDtlvValue = new ByteArrayType(messageID); + elements.add(new StructElement(messageIDFieldID, messageIDtlvValue)); + + final long priorityFieldID = 1L; + BaseTLVType prioritytlvValue = new UIntType(priority); + elements.add(new StructElement(priorityFieldID, prioritytlvValue)); + + final long messageControlFieldID = 2L; + BaseTLVType messageControltlvValue = new UIntType(messageControl); + elements.add(new StructElement(messageControlFieldID, messageControltlvValue)); + + final long startTimeFieldID = 3L; + BaseTLVType startTimetlvValue = startTime != null ? new UIntType(startTime) : new NullType(); + elements.add(new StructElement(startTimeFieldID, startTimetlvValue)); + + final long durationFieldID = 4L; + BaseTLVType durationtlvValue = duration != null ? new UIntType(duration) : new NullType(); + elements.add(new StructElement(durationFieldID, durationtlvValue)); + + final long messageTextFieldID = 5L; + BaseTLVType messageTexttlvValue = new StringType(messageText); + elements.add(new StructElement(messageTextFieldID, messageTexttlvValue)); + + final long responsesFieldID = 6L; + BaseTLVType responsestlvValue = responses.map((nonOptionalresponses) -> ArrayType.generateArrayType(nonOptionalresponses, (elementnonOptionalresponses) -> elementnonOptionalresponses.encodeTlv())).orElse(new EmptyType()); + elements.add(new StructElement(responsesFieldID, responsestlvValue)); StructType value = new StructType(elements); invoke(new InvokeCallbackImpl(callback) { diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java index 31a6462aa17d1e..43e246a70b6d81 100644 --- a/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java +++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterIDMapping.java @@ -9385,7 +9385,7 @@ public static Command value(long id) throws NoSuchFieldError { } throw new NoSuchFieldError(); } - }public enum PresentMessagesRequestCommandField {Messages(0),; + }public enum PresentMessagesRequestCommandField {MessageID(0),Priority(1),MessageControl(2),StartTime(3),Duration(4),MessageText(5),Responses(6),; private final int id; PresentMessagesRequestCommandField(int id) { this.id = id; diff --git a/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java b/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java index ab150d36e3925d..837e6e72bd193c 100644 --- a/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java +++ b/src/controller/java/generated/java/chip/devicecontroller/ClusterInfoMapping.java @@ -23659,12 +23659,42 @@ public Map> getCommandMap() { Map messagespresentMessagesRequestCommandParams = new LinkedHashMap(); + CommandParameterInfo messagespresentMessagesRequestmessageIDCommandParameterInfo = new CommandParameterInfo("messageID", byte[].class, byte[].class); + messagespresentMessagesRequestCommandParams.put("messageID",messagespresentMessagesRequestmessageIDCommandParameterInfo); + + CommandParameterInfo messagespresentMessagesRequestpriorityCommandParameterInfo = new CommandParameterInfo("priority", Integer.class, Integer.class); + messagespresentMessagesRequestCommandParams.put("priority",messagespresentMessagesRequestpriorityCommandParameterInfo); + + CommandParameterInfo messagespresentMessagesRequestmessageControlCommandParameterInfo = new CommandParameterInfo("messageControl", Integer.class, Integer.class); + messagespresentMessagesRequestCommandParams.put("messageControl",messagespresentMessagesRequestmessageControlCommandParameterInfo); + + CommandParameterInfo messagespresentMessagesRequeststartTimeCommandParameterInfo = new CommandParameterInfo("startTime", Long.class, Long.class); + messagespresentMessagesRequestCommandParams.put("startTime",messagespresentMessagesRequeststartTimeCommandParameterInfo); + + CommandParameterInfo messagespresentMessagesRequestdurationCommandParameterInfo = new CommandParameterInfo("duration", Integer.class, Integer.class); + messagespresentMessagesRequestCommandParams.put("duration",messagespresentMessagesRequestdurationCommandParameterInfo); + + CommandParameterInfo messagespresentMessagesRequestmessageTextCommandParameterInfo = new CommandParameterInfo("messageText", String.class, String.class); + messagespresentMessagesRequestCommandParams.put("messageText",messagespresentMessagesRequestmessageTextCommandParameterInfo); + InteractionInfo messagespresentMessagesRequestInteractionInfo = new InteractionInfo( (cluster, callback, commandArguments) -> { ((ChipClusters.MessagesCluster) cluster) .presentMessagesRequest((DefaultClusterCallback) callback - , (ArrayList) - commandArguments.get("messages") + , (byte[]) + commandArguments.get("messageID") + , (Integer) + commandArguments.get("priority") + , (Integer) + commandArguments.get("messageControl") + , (Long) + commandArguments.get("startTime") + , (Integer) + commandArguments.get("duration") + , (String) + commandArguments.get("messageText") + , (Optional>) + commandArguments.get("responses") ); }, () -> new DelegatedDefaultClusterCallback(), diff --git a/src/controller/java/generated/java/matter/controller/cluster/clusters/MessagesCluster.kt b/src/controller/java/generated/java/matter/controller/cluster/clusters/MessagesCluster.kt index 7793725b8d9cce..5ce55e2e0dd21b 100644 --- a/src/controller/java/generated/java/matter/controller/cluster/clusters/MessagesCluster.kt +++ b/src/controller/java/generated/java/matter/controller/cluster/clusters/MessagesCluster.kt @@ -102,7 +102,13 @@ class MessagesCluster(private val controller: MatterController, private val endp } suspend fun presentMessagesRequest( - messages: List, + messageID: ByteArray, + priority: UByte, + messageControl: UByte, + startTime: UInt?, + duration: UShort?, + messageText: String, + responses: List?, timedInvokeTimeout: Duration? = null ) { val commandId: UInt = 0u @@ -110,12 +116,32 @@ class MessagesCluster(private val controller: MatterController, private val endp val tlvWriter = TlvWriter() tlvWriter.startStructure(AnonymousTag) - val TAG_MESSAGES_REQ: Int = 0 - tlvWriter.startArray(ContextSpecificTag(TAG_MESSAGES_REQ)) - for (item in messages.iterator()) { - item.toTlv(AnonymousTag, tlvWriter) + val TAG_MESSAGE_I_D_REQ: Int = 0 + tlvWriter.put(ContextSpecificTag(TAG_MESSAGE_I_D_REQ), messageID) + + val TAG_PRIORITY_REQ: Int = 1 + tlvWriter.put(ContextSpecificTag(TAG_PRIORITY_REQ), priority) + + val TAG_MESSAGE_CONTROL_REQ: Int = 2 + tlvWriter.put(ContextSpecificTag(TAG_MESSAGE_CONTROL_REQ), messageControl) + + val TAG_START_TIME_REQ: Int = 3 + startTime?.let { tlvWriter.put(ContextSpecificTag(TAG_START_TIME_REQ), startTime) } + + val TAG_DURATION_REQ: Int = 4 + duration?.let { tlvWriter.put(ContextSpecificTag(TAG_DURATION_REQ), duration) } + + val TAG_MESSAGE_TEXT_REQ: Int = 5 + tlvWriter.put(ContextSpecificTag(TAG_MESSAGE_TEXT_REQ), messageText) + + val TAG_RESPONSES_REQ: Int = 6 + responses?.let { + tlvWriter.startArray(ContextSpecificTag(TAG_RESPONSES_REQ)) + for (item in responses.iterator()) { + item.toTlv(AnonymousTag, tlvWriter) + } + tlvWriter.endArray() } - tlvWriter.endArray() tlvWriter.endStructure() val request: InvokeRequest = diff --git a/src/controller/python/chip/clusters/CHIPClusters.py b/src/controller/python/chip/clusters/CHIPClusters.py index b039925f2c21e0..56486a09e15a42 100644 --- a/src/controller/python/chip/clusters/CHIPClusters.py +++ b/src/controller/python/chip/clusters/CHIPClusters.py @@ -6542,7 +6542,13 @@ class ChipClusters: "commandId": 0x00000000, "commandName": "PresentMessagesRequest", "args": { - "messages": "MessageStruct", + "messageID": "bytes", + "priority": "int", + "messageControl": "int", + "startTime": "int", + "duration": "int", + "messageText": "str", + "responses": "MessageResponseOptionStruct", }, }, 0x00000001: { diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py index da92192016b089..38a40194feff0a 100644 --- a/src/controller/python/chip/clusters/Objects.py +++ b/src/controller/python/chip/clusters/Objects.py @@ -23207,10 +23207,22 @@ class PresentMessagesRequest(ClusterCommand): def descriptor(cls) -> ClusterObjectDescriptor: return ClusterObjectDescriptor( Fields=[ - ClusterObjectFieldDescriptor(Label="messages", Tag=0, Type=typing.List[Messages.Structs.MessageStruct]), + ClusterObjectFieldDescriptor(Label="messageID", Tag=0, Type=bytes), + ClusterObjectFieldDescriptor(Label="priority", Tag=1, Type=Messages.Enums.MessagePriorityEnum), + ClusterObjectFieldDescriptor(Label="messageControl", Tag=2, Type=uint), + ClusterObjectFieldDescriptor(Label="startTime", Tag=3, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="duration", Tag=4, Type=typing.Union[Nullable, uint]), + ClusterObjectFieldDescriptor(Label="messageText", Tag=5, Type=str), + ClusterObjectFieldDescriptor(Label="responses", Tag=6, Type=typing.Optional[typing.List[Messages.Structs.MessageResponseOptionStruct]]), ]) - messages: 'typing.List[Messages.Structs.MessageStruct]' = field(default_factory=lambda: []) + messageID: 'bytes' = b"" + priority: 'Messages.Enums.MessagePriorityEnum' = 0 + messageControl: 'uint' = 0 + startTime: 'typing.Union[Nullable, uint]' = NullValue + duration: 'typing.Union[Nullable, uint]' = NullValue + messageText: 'str' = "" + responses: 'typing.Optional[typing.List[Messages.Structs.MessageResponseOptionStruct]]' = None @dataclass class CancelMessagesRequest(ClusterCommand): diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h index 0c66bc8d9af6ce..b2159626d29866 100644 --- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h +++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.h @@ -5458,7 +5458,19 @@ MTR_PROVISIONALLY_AVAILABLE MTR_PROVISIONALLY_AVAILABLE @interface MTRMessagesClusterPresentMessagesRequestParams : NSObject -@property (nonatomic, copy) NSArray * _Nonnull messages MTR_PROVISIONALLY_AVAILABLE; +@property (nonatomic, copy) NSData * _Nonnull messageID MTR_PROVISIONALLY_AVAILABLE; + +@property (nonatomic, copy) NSNumber * _Nonnull priority MTR_PROVISIONALLY_AVAILABLE; + +@property (nonatomic, copy) NSNumber * _Nonnull messageControl MTR_PROVISIONALLY_AVAILABLE; + +@property (nonatomic, copy) NSNumber * _Nullable startTime MTR_PROVISIONALLY_AVAILABLE; + +@property (nonatomic, copy) NSNumber * _Nullable duration MTR_PROVISIONALLY_AVAILABLE; + +@property (nonatomic, copy) NSString * _Nonnull messageText MTR_PROVISIONALLY_AVAILABLE; + +@property (nonatomic, copy) NSArray * _Nullable responses MTR_PROVISIONALLY_AVAILABLE; /** * Controls whether the command is a timed command (using Timed Invoke). * diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm index 2fcecf401135e7..6e7f500929877d 100644 --- a/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm +++ b/src/darwin/Framework/CHIP/zap-generated/MTRCommandPayloadsObjc.mm @@ -15274,7 +15274,19 @@ - (instancetype)init { if (self = [super init]) { - _messages = [NSArray array]; + _messageID = [NSData data]; + + _priority = @(0); + + _messageControl = @(0); + + _startTime = nil; + + _duration = nil; + + _messageText = @""; + + _responses = nil; _timedInvokeTimeoutMs = nil; _serverSideProcessingTimeout = nil; } @@ -15285,7 +15297,13 @@ - (id)copyWithZone:(NSZone * _Nullable)zone; { auto other = [[MTRMessagesClusterPresentMessagesRequestParams alloc] init]; - other.messages = self.messages; + other.messageID = self.messageID; + other.priority = self.priority; + other.messageControl = self.messageControl; + other.startTime = self.startTime; + other.duration = self.duration; + other.messageText = self.messageText; + other.responses = self.responses; other.timedInvokeTimeoutMs = self.timedInvokeTimeoutMs; other.serverSideProcessingTimeout = self.serverSideProcessingTimeout; @@ -15294,7 +15312,7 @@ - (id)copyWithZone:(NSZone * _Nullable)zone; - (NSString *)description { - NSString * descriptionString = [NSString stringWithFormat:@"<%@: messages:%@; >", NSStringFromClass([self class]), _messages]; + NSString * descriptionString = [NSString stringWithFormat:@"<%@: messageID:%@; priority:%@; messageControl:%@; startTime:%@; duration:%@; messageText:%@; responses:%@; >", NSStringFromClass([self class]), [_messageID base64EncodedStringWithOptions:0], _priority, _messageControl, _startTime, _duration, _messageText, _responses]; return descriptionString; } @@ -15307,73 +15325,64 @@ - (CHIP_ERROR)_encodeToTLVReader:(chip::System::PacketBufferTLVReader &)reader chip::app::Clusters::Messages::Commands::PresentMessagesRequest::Type encodableStruct; ListFreer listFreer; { - { - using ListType_0 = std::remove_reference_t; - using ListMemberType_0 = ListMemberTypeGetter::Type; - if (self.messages.count != 0) { - auto * listHolder_0 = new ListHolder(self.messages.count); - if (listHolder_0 == nullptr || listHolder_0->mList == nullptr) { - return CHIP_ERROR_INVALID_ARGUMENT; - } - listFreer.add(listHolder_0); - for (size_t i_0 = 0; i_0 < self.messages.count; ++i_0) { - if (![self.messages[i_0] isKindOfClass:[MTRMessagesClusterMessageStruct class]]) { - // Wrong kind of value. + encodableStruct.messageID = AsByteSpan(self.messageID); + } + { + encodableStruct.priority = static_cast>(self.priority.unsignedCharValue); + } + { + encodableStruct.messageControl = static_cast>(self.messageControl.unsignedCharValue); + } + { + if (self.startTime == nil) { + encodableStruct.startTime.SetNull(); + } else { + auto & nonNullValue_0 = encodableStruct.startTime.SetNonNull(); + nonNullValue_0 = self.startTime.unsignedIntValue; + } + } + { + if (self.duration == nil) { + encodableStruct.duration.SetNull(); + } else { + auto & nonNullValue_0 = encodableStruct.duration.SetNonNull(); + nonNullValue_0 = self.duration.unsignedShortValue; + } + } + { + encodableStruct.messageText = AsCharSpan(self.messageText); + } + { + if (self.responses != nil) { + auto & definedValue_0 = encodableStruct.responses.Emplace(); + { + using ListType_1 = std::remove_reference_t; + using ListMemberType_1 = ListMemberTypeGetter::Type; + if (self.responses.count != 0) { + auto * listHolder_1 = new ListHolder(self.responses.count); + if (listHolder_1 == nullptr || listHolder_1->mList == nullptr) { return CHIP_ERROR_INVALID_ARGUMENT; } - auto element_0 = (MTRMessagesClusterMessageStruct *) self.messages[i_0]; - listHolder_0->mList[i_0].messageID = AsByteSpan(element_0.messageID); - listHolder_0->mList[i_0].priority = static_castmList[i_0].priority)>>(element_0.priority.unsignedCharValue); - listHolder_0->mList[i_0].messageControl = static_castmList[i_0].messageControl)>>(element_0.messageControl.unsignedCharValue); - if (element_0.startTime == nil) { - listHolder_0->mList[i_0].startTime.SetNull(); - } else { - auto & nonNullValue_2 = listHolder_0->mList[i_0].startTime.SetNonNull(); - nonNullValue_2 = element_0.startTime.unsignedIntValue; - } - if (element_0.duration == nil) { - listHolder_0->mList[i_0].duration.SetNull(); - } else { - auto & nonNullValue_2 = listHolder_0->mList[i_0].duration.SetNonNull(); - nonNullValue_2 = element_0.duration.unsignedShortValue; - } - listHolder_0->mList[i_0].messageText = AsCharSpan(element_0.messageText); - if (element_0.responses != nil) { - auto & definedValue_2 = listHolder_0->mList[i_0].responses.Emplace(); - { - using ListType_3 = std::remove_reference_t; - using ListMemberType_3 = ListMemberTypeGetter::Type; - if (element_0.responses.count != 0) { - auto * listHolder_3 = new ListHolder(element_0.responses.count); - if (listHolder_3 == nullptr || listHolder_3->mList == nullptr) { - return CHIP_ERROR_INVALID_ARGUMENT; - } - listFreer.add(listHolder_3); - for (size_t i_3 = 0; i_3 < element_0.responses.count; ++i_3) { - if (![element_0.responses[i_3] isKindOfClass:[MTRMessagesClusterMessageResponseOptionStruct class]]) { - // Wrong kind of value. - return CHIP_ERROR_INVALID_ARGUMENT; - } - auto element_3 = (MTRMessagesClusterMessageResponseOptionStruct *) element_0.responses[i_3]; - if (element_3.messageResponseID != nil) { - auto & definedValue_5 = listHolder_3->mList[i_3].messageResponseID.Emplace(); - definedValue_5 = element_3.messageResponseID.unsignedIntValue; - } - if (element_3.label != nil) { - auto & definedValue_5 = listHolder_3->mList[i_3].label.Emplace(); - definedValue_5 = AsCharSpan(element_3.label); - } - } - definedValue_2 = ListType_3(listHolder_3->mList, element_0.responses.count); - } else { - definedValue_2 = ListType_3(); - } + listFreer.add(listHolder_1); + for (size_t i_1 = 0; i_1 < self.responses.count; ++i_1) { + if (![self.responses[i_1] isKindOfClass:[MTRMessagesClusterMessageResponseOptionStruct class]]) { + // Wrong kind of value. + return CHIP_ERROR_INVALID_ARGUMENT; + } + auto element_1 = (MTRMessagesClusterMessageResponseOptionStruct *) self.responses[i_1]; + if (element_1.messageResponseID != nil) { + auto & definedValue_3 = listHolder_1->mList[i_1].messageResponseID.Emplace(); + definedValue_3 = element_1.messageResponseID.unsignedIntValue; + } + if (element_1.label != nil) { + auto & definedValue_3 = listHolder_1->mList[i_1].label.Emplace(); + definedValue_3 = AsCharSpan(element_1.label); } } + definedValue_0 = ListType_1(listHolder_1->mList, self.responses.count); + } else { + definedValue_0 = ListType_1(); } - encodableStruct.messages = ListType_0(listHolder_0->mList, self.messages.count); - } else { - encodableStruct.messages = ListType_0(); } } } diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp index 77288b75a82c3d..c19ff038dfffbf 100644 --- a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp +++ b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.cpp @@ -14919,7 +14919,13 @@ namespace PresentMessagesRequest { CHIP_ERROR Type::Encode(TLV::TLVWriter & aWriter, TLV::Tag aTag) const { DataModel::WrappedStructEncoder encoder{ aWriter, aTag }; - encoder.Encode(to_underlying(Fields::kMessages), messages); + encoder.Encode(to_underlying(Fields::kMessageID), messageID); + encoder.Encode(to_underlying(Fields::kPriority), priority); + encoder.Encode(to_underlying(Fields::kMessageControl), messageControl); + encoder.Encode(to_underlying(Fields::kStartTime), startTime); + encoder.Encode(to_underlying(Fields::kDuration), duration); + encoder.Encode(to_underlying(Fields::kMessageText), messageText); + encoder.Encode(to_underlying(Fields::kResponses), responses); return encoder.Finalize(); } @@ -14937,9 +14943,33 @@ CHIP_ERROR DecodableType::Decode(TLV::TLVReader & reader) CHIP_ERROR err = CHIP_NO_ERROR; const uint8_t __context_tag = std::get(__element); - if (__context_tag == to_underlying(Fields::kMessages)) + if (__context_tag == to_underlying(Fields::kMessageID)) { - err = DataModel::Decode(reader, messages); + err = DataModel::Decode(reader, messageID); + } + else if (__context_tag == to_underlying(Fields::kPriority)) + { + err = DataModel::Decode(reader, priority); + } + else if (__context_tag == to_underlying(Fields::kMessageControl)) + { + err = DataModel::Decode(reader, messageControl); + } + else if (__context_tag == to_underlying(Fields::kStartTime)) + { + err = DataModel::Decode(reader, startTime); + } + else if (__context_tag == to_underlying(Fields::kDuration)) + { + err = DataModel::Decode(reader, duration); + } + else if (__context_tag == to_underlying(Fields::kMessageText)) + { + err = DataModel::Decode(reader, messageText); + } + else if (__context_tag == to_underlying(Fields::kResponses)) + { + err = DataModel::Decode(reader, responses); } else { diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h index 934de47159426b..84960c16a477f2 100644 --- a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h +++ b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h @@ -21005,7 +21005,13 @@ namespace Commands { namespace PresentMessagesRequest { enum class Fields : uint8_t { - kMessages = 0, + kMessageID = 0, + kPriority = 1, + kMessageControl = 2, + kStartTime = 3, + kDuration = 4, + kMessageText = 5, + kResponses = 6, }; struct Type @@ -21015,7 +21021,13 @@ struct Type static constexpr CommandId GetCommandId() { return Commands::PresentMessagesRequest::Id; } static constexpr ClusterId GetClusterId() { return Clusters::Messages::Id; } - DataModel::List messages; + chip::ByteSpan messageID; + MessagePriorityEnum priority = static_cast(0); + chip::BitMask messageControl = static_cast>(0); + DataModel::Nullable startTime; + DataModel::Nullable duration; + chip::CharSpan messageText; + Optional> responses; CHIP_ERROR Encode(TLV::TLVWriter & aWriter, TLV::Tag aTag) const; @@ -21030,7 +21042,13 @@ struct DecodableType static constexpr CommandId GetCommandId() { return Commands::PresentMessagesRequest::Id; } static constexpr ClusterId GetClusterId() { return Clusters::Messages::Id; } - DataModel::DecodableList messages; + chip::ByteSpan messageID; + MessagePriorityEnum priority = static_cast(0); + chip::BitMask messageControl = static_cast>(0); + DataModel::Nullable startTime; + DataModel::Nullable duration; + chip::CharSpan messageText; + Optional> responses; CHIP_ERROR Decode(TLV::TLVReader & reader); }; }; // namespace PresentMessagesRequest diff --git a/zzz_generated/chip-tool/zap-generated/cluster/Commands.h b/zzz_generated/chip-tool/zap-generated/cluster/Commands.h index bf96cf25bf46dd..eb333b055a0469 100644 --- a/zzz_generated/chip-tool/zap-generated/cluster/Commands.h +++ b/zzz_generated/chip-tool/zap-generated/cluster/Commands.h @@ -6751,9 +6751,15 @@ class MessagesPresentMessagesRequest : public ClusterCommand { public: MessagesPresentMessagesRequest(CredentialIssuerCommands * credsIssuerConfig) : - ClusterCommand("present-messages-request", credsIssuerConfig), mComplex_Messages(&mRequest.messages) + ClusterCommand("present-messages-request", credsIssuerConfig), mComplex_Responses(&mRequest.responses) { - AddArgument("Messages", &mComplex_Messages); + AddArgument("MessageID", &mRequest.messageID); + AddArgument("Priority", 0, UINT8_MAX, &mRequest.priority); + AddArgument("MessageControl", 0, UINT8_MAX, &mRequest.messageControl); + AddArgument("StartTime", 0, UINT32_MAX, &mRequest.startTime); + AddArgument("Duration", 0, UINT16_MAX, &mRequest.duration); + AddArgument("MessageText", &mRequest.messageText); + AddArgument("Responses", &mComplex_Responses, "", Argument::kOptional); ClusterCommand::AddArguments(); } @@ -6780,8 +6786,9 @@ class MessagesPresentMessagesRequest : public ClusterCommand private: chip::app::Clusters::Messages::Commands::PresentMessagesRequest::Type mRequest; - TypedComplexArgument> - mComplex_Messages; + TypedComplexArgument< + chip::Optional>> + mComplex_Responses; }; /* diff --git a/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h b/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h index 8266f153ec5a30..3a487ec7d0ddeb 100644 --- a/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h +++ b/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h @@ -78705,10 +78705,28 @@ class MessagesPresentMessagesRequest : public ClusterCommand { public: MessagesPresentMessagesRequest() : ClusterCommand("present-messages-request") - , mComplex_Messages(&mRequest.messages) + , mComplex_Responses(&mRequest.responses) { #if MTR_ENABLE_PROVISIONAL - AddArgument("Messages", &mComplex_Messages); + AddArgument("MessageID", &mRequest.messageID); +#endif // MTR_ENABLE_PROVISIONAL +#if MTR_ENABLE_PROVISIONAL + AddArgument("Priority", 0, UINT8_MAX, &mRequest.priority); +#endif // MTR_ENABLE_PROVISIONAL +#if MTR_ENABLE_PROVISIONAL + AddArgument("MessageControl", 0, UINT8_MAX, &mRequest.messageControl); +#endif // MTR_ENABLE_PROVISIONAL +#if MTR_ENABLE_PROVISIONAL + AddArgument("StartTime", 0, UINT32_MAX, &mRequest.startTime); +#endif // MTR_ENABLE_PROVISIONAL +#if MTR_ENABLE_PROVISIONAL + AddArgument("Duration", 0, UINT16_MAX, &mRequest.duration); +#endif // MTR_ENABLE_PROVISIONAL +#if MTR_ENABLE_PROVISIONAL + AddArgument("MessageText", &mRequest.messageText); +#endif // MTR_ENABLE_PROVISIONAL +#if MTR_ENABLE_PROVISIONAL + AddArgument("Responses", &mComplex_Responses); #endif // MTR_ENABLE_PROVISIONAL ClusterCommand::AddArguments(); } @@ -78725,51 +78743,54 @@ class MessagesPresentMessagesRequest : public ClusterCommand { __auto_type * params = [[MTRMessagesClusterPresentMessagesRequestParams alloc] init]; params.timedInvokeTimeoutMs = mTimedInteractionTimeoutMs.HasValue() ? [NSNumber numberWithUnsignedShort:mTimedInteractionTimeoutMs.Value()] : nil; #if MTR_ENABLE_PROVISIONAL - { // Scope for our temporary variables - auto * array_0 = [NSMutableArray new]; - for (auto & entry_0 : mRequest.messages) { - MTRMessagesClusterMessageStruct * newElement_0; - newElement_0 = [MTRMessagesClusterMessageStruct new]; - newElement_0.messageID = [NSData dataWithBytes:entry_0.messageID.data() length:entry_0.messageID.size()]; - newElement_0.priority = [NSNumber numberWithUnsignedChar:chip::to_underlying(entry_0.priority)]; - newElement_0.messageControl = [NSNumber numberWithUnsignedChar:entry_0.messageControl.Raw()]; - if (entry_0.startTime.IsNull()) { - newElement_0.startTime = nil; - } else { - newElement_0.startTime = [NSNumber numberWithUnsignedInt:entry_0.startTime.Value()]; - } - if (entry_0.duration.IsNull()) { - newElement_0.duration = nil; - } else { - newElement_0.duration = [NSNumber numberWithUnsignedShort:entry_0.duration.Value()]; - } - newElement_0.messageText = [[NSString alloc] initWithBytes:entry_0.messageText.data() length:entry_0.messageText.size() encoding:NSUTF8StringEncoding]; - if (entry_0.responses.HasValue()) { - { // Scope for our temporary variables - auto * array_3 = [NSMutableArray new]; - for (auto & entry_3 : entry_0.responses.Value()) { - MTRMessagesClusterMessageResponseOptionStruct * newElement_3; - newElement_3 = [MTRMessagesClusterMessageResponseOptionStruct new]; - if (entry_3.messageResponseID.HasValue()) { - newElement_3.messageResponseID = [NSNumber numberWithUnsignedInt:entry_3.messageResponseID.Value()]; - } else { - newElement_3.messageResponseID = nil; - } - if (entry_3.label.HasValue()) { - newElement_3.label = [[NSString alloc] initWithBytes:entry_3.label.Value().data() length:entry_3.label.Value().size() encoding:NSUTF8StringEncoding]; - } else { - newElement_3.label = nil; - } - [array_3 addObject:newElement_3]; - } - newElement_0.responses = array_3; + params.messageID = [NSData dataWithBytes:mRequest.messageID.data() length:mRequest.messageID.size()]; +#endif // MTR_ENABLE_PROVISIONAL +#if MTR_ENABLE_PROVISIONAL + params.priority = [NSNumber numberWithUnsignedChar:chip::to_underlying(mRequest.priority)]; +#endif // MTR_ENABLE_PROVISIONAL +#if MTR_ENABLE_PROVISIONAL + params.messageControl = [NSNumber numberWithUnsignedChar:mRequest.messageControl.Raw()]; +#endif // MTR_ENABLE_PROVISIONAL +#if MTR_ENABLE_PROVISIONAL + if (mRequest.startTime.IsNull()) { + params.startTime = nil; + } else { + params.startTime = [NSNumber numberWithUnsignedInt:mRequest.startTime.Value()]; + } +#endif // MTR_ENABLE_PROVISIONAL +#if MTR_ENABLE_PROVISIONAL + if (mRequest.duration.IsNull()) { + params.duration = nil; + } else { + params.duration = [NSNumber numberWithUnsignedShort:mRequest.duration.Value()]; + } +#endif // MTR_ENABLE_PROVISIONAL +#if MTR_ENABLE_PROVISIONAL + params.messageText = [[NSString alloc] initWithBytes:mRequest.messageText.data() length:mRequest.messageText.size() encoding:NSUTF8StringEncoding]; +#endif // MTR_ENABLE_PROVISIONAL +#if MTR_ENABLE_PROVISIONAL + if (mRequest.responses.HasValue()) { + { // Scope for our temporary variables + auto * array_1 = [NSMutableArray new]; + for (auto & entry_1 : mRequest.responses.Value()) { + MTRMessagesClusterMessageResponseOptionStruct * newElement_1; + newElement_1 = [MTRMessagesClusterMessageResponseOptionStruct new]; + if (entry_1.messageResponseID.HasValue()) { + newElement_1.messageResponseID = [NSNumber numberWithUnsignedInt:entry_1.messageResponseID.Value()]; + } else { + newElement_1.messageResponseID = nil; } - } else { - newElement_0.responses = nil; + if (entry_1.label.HasValue()) { + newElement_1.label = [[NSString alloc] initWithBytes:entry_1.label.Value().data() length:entry_1.label.Value().size() encoding:NSUTF8StringEncoding]; + } else { + newElement_1.label = nil; + } + [array_1 addObject:newElement_1]; } - [array_0 addObject:newElement_0]; + params.responses = array_1; } - params.messages = array_0; + } else { + params.responses = nil; } #endif // MTR_ENABLE_PROVISIONAL uint16_t repeatCount = mRepeatCount.ValueOr(1); @@ -78793,7 +78814,7 @@ class MessagesPresentMessagesRequest : public ClusterCommand { private: chip::app::Clusters::Messages::Commands::PresentMessagesRequest::Type mRequest; - TypedComplexArgument> mComplex_Messages; + TypedComplexArgument>> mComplex_Responses; }; #endif // MTR_ENABLE_PROVISIONAL