From 4a77455e7ee1556335d9879cd02092ab5ceb483f Mon Sep 17 00:00:00 2001 From: chrisdecenzo Date: Tue, 17 May 2022 10:17:06 -0700 Subject: [PATCH 1/4] 4224 Rotating ID issues --- .../tv-casting-common/include/CastingServer.h | 2 +- .../tv-casting-common/src/CastingServer.cpp | 13 +++++++++++++ .../CommissionerDiscoveryController.cpp | 10 ++++++++-- src/include/platform/ConfigurationManager.h | 1 + .../internal/GenericConfigurationManagerImpl.h | 2 ++ .../GenericConfigurationManagerImpl.ipp | 18 ++++++++++++------ 6 files changed, 37 insertions(+), 9 deletions(-) diff --git a/examples/tv-casting-app/tv-casting-common/include/CastingServer.h b/examples/tv-casting-app/tv-casting-common/include/CastingServer.h index 15128a1a92ae4c..b9df701bbd9f34 100644 --- a/examples/tv-casting-app/tv-casting-common/include/CastingServer.h +++ b/examples/tv-casting-app/tv-casting-common/include/CastingServer.h @@ -74,7 +74,7 @@ class CastingServer private: static CastingServer * castingServer_; - CastingServer() {} + CastingServer(); bool mInited = false; TargetVideoPlayerInfo mTargetVideoPlayerInfo; diff --git a/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp b/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp index ef93551675ebec..a84a4f22235835 100644 --- a/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp +++ b/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp @@ -25,6 +25,19 @@ using namespace chip::app::Clusters::ContentLauncher::Commands; CastingServer * CastingServer::castingServer_ = nullptr; +CastingServer::CastingServer() +{ + // generate and set a random uniqueId for generating rotatingId + uint8_t rotatingDeviceIdUniqueId[chip::DeviceLayer::ConfigurationManager::kRotatingDeviceIDUniqueIDLength]; + for (size_t i = 0; i < sizeof(rotatingDeviceIdUniqueId); i++) + { + rotatingDeviceIdUniqueId[i] = chip::Crypto::GetRandU8(); + } + + MutableByteSpan rotatingDeviceIdUniqueIdSpan(rotatingDeviceIdUniqueId); + chip::DeviceLayer::ConfigurationMgr().SetRotatingDeviceIdUniqueId(rotatingDeviceIdUniqueIdSpan); +} + CastingServer * CastingServer::GetInstance() { if (castingServer_ == nullptr) diff --git a/src/controller/CommissionerDiscoveryController.cpp b/src/controller/CommissionerDiscoveryController.cpp index 92755051e90909..a93d0f4cf8121b 100644 --- a/src/controller/CommissionerDiscoveryController.cpp +++ b/src/controller/CommissionerDiscoveryController.cpp @@ -27,6 +27,7 @@ */ #include #include +#include #if CHIP_DEVICE_CONFIG_ENABLE_COMMISSIONER_DISCOVERY @@ -52,11 +53,16 @@ void CommissionerDiscoveryController::OnUserDirectedCommissioningRequest(UDCClie mReady = false; strncpy(mCurrentInstance, state.GetInstanceName(), sizeof(mCurrentInstance)); mPendingConsent = true; + // TODO: print rotating ID + char rotatingDeviceIdHexBuffer[RotatingDeviceId::kHexMaxLength]; + Encoding::BytesToUppercaseHexString(state.GetRotatingId(), state.GetRotatingIdLength(), rotatingDeviceIdHexBuffer, + RotatingDeviceId::kHexMaxLength); + ChipLogDetail(Controller, "------PROMPT USER: %s is requesting permission to cast to this TV, approve? [" ChipLogFormatMEI - "," ChipLogFormatMEI ",%s]", + "," ChipLogFormatMEI ",%s,%s]", state.GetDeviceName(), ChipLogValueMEI(state.GetVendorId()), ChipLogValueMEI(state.GetProductId()), - state.GetInstanceName()); + state.GetInstanceName(), rotatingDeviceIdHexBuffer); if (mUserPrompter != nullptr) { mUserPrompter->PromptForCommissionOKPermission(state.GetVendorId(), state.GetProductId(), state.GetDeviceName()); diff --git a/src/include/platform/ConfigurationManager.h b/src/include/platform/ConfigurationManager.h index 7816b80ff6ea86..f9e01b37000cae 100644 --- a/src/include/platform/ConfigurationManager.h +++ b/src/include/platform/ConfigurationManager.h @@ -105,6 +105,7 @@ class ConfigurationManager // Unique ID is identifier utilized for the rotating device ID calculation purpose as an input key. It is separate identifier // from the Basic cluster unique ID. virtual CHIP_ERROR GetRotatingDeviceIdUniqueId(MutableByteSpan & uniqueIdSpan) = 0; + virtual CHIP_ERROR SetRotatingDeviceIdUniqueId(MutableByteSpan & uniqueIdSpan) = 0; #endif virtual CHIP_ERROR GetRegulatoryLocation(uint8_t & location) = 0; virtual CHIP_ERROR GetCountryCode(char * buf, size_t bufSize, size_t & codeLen) = 0; diff --git a/src/include/platform/internal/GenericConfigurationManagerImpl.h b/src/include/platform/internal/GenericConfigurationManagerImpl.h index 27d9a8d918bbc7..5ec5aa11f99348 100644 --- a/src/include/platform/internal/GenericConfigurationManagerImpl.h +++ b/src/include/platform/internal/GenericConfigurationManagerImpl.h @@ -80,6 +80,7 @@ class GenericConfigurationManagerImpl : public ConfigurationManager CHIP_ERROR GetLifetimeCounter(uint16_t & lifetimeCounter) override; CHIP_ERROR IncrementLifetimeCounter() override; CHIP_ERROR GetRotatingDeviceIdUniqueId(MutableByteSpan & uniqueIdSpan) override; + CHIP_ERROR SetRotatingDeviceIdUniqueId(MutableByteSpan & uniqueIdSpan) override; #endif CHIP_ERROR GetFailSafeArmed(bool & val) override; CHIP_ERROR SetFailSafeArmed(bool val) override; @@ -123,6 +124,7 @@ class GenericConfigurationManagerImpl : public ConfigurationManager protected: #if CHIP_ENABLE_ROTATING_DEVICE_ID && defined(CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID) chip::LifetimePersistedCounter mLifetimePersistedCounter; + uint8_t mRotatingDeviceIdUniqueId[kRotatingDeviceIDUniqueIDLength] = CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID; #endif #if CHIP_USE_TRANSITIONAL_COMMISSIONABLE_DATA_PROVIDER diff --git a/src/include/platform/internal/GenericConfigurationManagerImpl.ipp b/src/include/platform/internal/GenericConfigurationManagerImpl.ipp index 11b368dbd81f3c..0fec026b0412ff 100644 --- a/src/include/platform/internal/GenericConfigurationManagerImpl.ipp +++ b/src/include/platform/internal/GenericConfigurationManagerImpl.ipp @@ -638,17 +638,23 @@ CHIP_ERROR GenericConfigurationManagerImpl::IncrementLifetimeCounte return mLifetimePersistedCounter.Advance(); } +template +CHIP_ERROR GenericConfigurationManagerImpl::SetRotatingDeviceIdUniqueId(MutableByteSpan & uniqueIdSpan) +{ + ReturnErrorCodeIf(uniqueIdSpan.size() != kRotatingDeviceIDUniqueIDLength, CHIP_ERROR_BUFFER_TOO_SMALL); + memcpy(mRotatingDeviceIdUniqueId, uniqueIdSpan.data(), kRotatingDeviceIDUniqueIDLength); + return CHIP_NO_ERROR; +} + template CHIP_ERROR GenericConfigurationManagerImpl::GetRotatingDeviceIdUniqueId(MutableByteSpan & uniqueIdSpan) { static_assert(kRotatingDeviceIDUniqueIDLength >= kMinRotatingDeviceIDUniqueIDLength, "Length of unique ID for rotating device ID is smaller than minimum."); - constexpr uint8_t uniqueId[] = CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID; - - ReturnErrorCodeIf(sizeof(uniqueId) > uniqueIdSpan.size(), CHIP_ERROR_BUFFER_TOO_SMALL); - ReturnErrorCodeIf(sizeof(uniqueId) != kRotatingDeviceIDUniqueIDLength, CHIP_ERROR_BUFFER_TOO_SMALL); - memcpy(uniqueIdSpan.data(), uniqueId, sizeof(uniqueId)); - uniqueIdSpan = uniqueIdSpan.SubSpan(0, sizeof(uniqueId)); + ReturnErrorCodeIf(sizeof(mRotatingDeviceIdUniqueId) > uniqueIdSpan.size(), CHIP_ERROR_BUFFER_TOO_SMALL); + ReturnErrorCodeIf(sizeof(mRotatingDeviceIdUniqueId) != kRotatingDeviceIDUniqueIDLength, CHIP_ERROR_BUFFER_TOO_SMALL); + memcpy(uniqueIdSpan.data(), mRotatingDeviceIdUniqueId, sizeof(mRotatingDeviceIdUniqueId)); + uniqueIdSpan = uniqueIdSpan.SubSpan(0, sizeof(mRotatingDeviceIdUniqueId)); return CHIP_NO_ERROR; } #endif // CHIP_ENABLE_ROTATING_DEVICE_ID From a8e79d1e0830505fce71cec2c5553ba286e9e134 Mon Sep 17 00:00:00 2001 From: chrisdecenzo Date: Tue, 17 May 2022 11:10:43 -0700 Subject: [PATCH 2/4] fix CI build when rotating id disabled --- examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp b/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp index a84a4f22235835..0dd6482cf8be17 100644 --- a/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp +++ b/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp @@ -27,6 +27,7 @@ CastingServer * CastingServer::castingServer_ = nullptr; CastingServer::CastingServer() { +#if CHIP_ENABLE_ROTATING_DEVICE_ID && defined(CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID) // generate and set a random uniqueId for generating rotatingId uint8_t rotatingDeviceIdUniqueId[chip::DeviceLayer::ConfigurationManager::kRotatingDeviceIDUniqueIDLength]; for (size_t i = 0; i < sizeof(rotatingDeviceIdUniqueId); i++) @@ -36,6 +37,7 @@ CastingServer::CastingServer() MutableByteSpan rotatingDeviceIdUniqueIdSpan(rotatingDeviceIdUniqueId); chip::DeviceLayer::ConfigurationMgr().SetRotatingDeviceIdUniqueId(rotatingDeviceIdUniqueIdSpan); +#endif // CHIP_ENABLE_ROTATING_DEVICE_ID && defined(CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID) } CastingServer * CastingServer::GetInstance() From 661c7bdc59571109811818da52776f0116b5d602 Mon Sep 17 00:00:00 2001 From: chrisdecenzo Date: Tue, 17 May 2022 12:55:32 -0700 Subject: [PATCH 3/4] missed comment cleanup --- src/controller/CommissionerDiscoveryController.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/controller/CommissionerDiscoveryController.cpp b/src/controller/CommissionerDiscoveryController.cpp index a93d0f4cf8121b..50ce140ecd2a9f 100644 --- a/src/controller/CommissionerDiscoveryController.cpp +++ b/src/controller/CommissionerDiscoveryController.cpp @@ -53,7 +53,6 @@ void CommissionerDiscoveryController::OnUserDirectedCommissioningRequest(UDCClie mReady = false; strncpy(mCurrentInstance, state.GetInstanceName(), sizeof(mCurrentInstance)); mPendingConsent = true; - // TODO: print rotating ID char rotatingDeviceIdHexBuffer[RotatingDeviceId::kHexMaxLength]; Encoding::BytesToUppercaseHexString(state.GetRotatingId(), state.GetRotatingIdLength(), rotatingDeviceIdHexBuffer, RotatingDeviceId::kHexMaxLength); From a87d575478f2fbbda2909d835c35d6abbd64ef8e Mon Sep 17 00:00:00 2001 From: chrisdecenzo Date: Wed, 18 May 2022 06:21:41 -0700 Subject: [PATCH 4/4] incorporate feedback --- examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp | 2 +- src/include/platform/ConfigurationManager.h | 2 +- src/include/platform/internal/GenericConfigurationManagerImpl.h | 2 +- .../platform/internal/GenericConfigurationManagerImpl.ipp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp b/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp index 0dd6482cf8be17..0b0870517c4df9 100644 --- a/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp +++ b/examples/tv-casting-app/tv-casting-common/src/CastingServer.cpp @@ -35,7 +35,7 @@ CastingServer::CastingServer() rotatingDeviceIdUniqueId[i] = chip::Crypto::GetRandU8(); } - MutableByteSpan rotatingDeviceIdUniqueIdSpan(rotatingDeviceIdUniqueId); + ByteSpan rotatingDeviceIdUniqueIdSpan(rotatingDeviceIdUniqueId); chip::DeviceLayer::ConfigurationMgr().SetRotatingDeviceIdUniqueId(rotatingDeviceIdUniqueIdSpan); #endif // CHIP_ENABLE_ROTATING_DEVICE_ID && defined(CHIP_DEVICE_CONFIG_ROTATING_DEVICE_ID_UNIQUE_ID) } diff --git a/src/include/platform/ConfigurationManager.h b/src/include/platform/ConfigurationManager.h index f9e01b37000cae..027e0a547d2311 100644 --- a/src/include/platform/ConfigurationManager.h +++ b/src/include/platform/ConfigurationManager.h @@ -105,7 +105,7 @@ class ConfigurationManager // Unique ID is identifier utilized for the rotating device ID calculation purpose as an input key. It is separate identifier // from the Basic cluster unique ID. virtual CHIP_ERROR GetRotatingDeviceIdUniqueId(MutableByteSpan & uniqueIdSpan) = 0; - virtual CHIP_ERROR SetRotatingDeviceIdUniqueId(MutableByteSpan & uniqueIdSpan) = 0; + virtual CHIP_ERROR SetRotatingDeviceIdUniqueId(const ByteSpan & uniqueIdSpan) = 0; #endif virtual CHIP_ERROR GetRegulatoryLocation(uint8_t & location) = 0; virtual CHIP_ERROR GetCountryCode(char * buf, size_t bufSize, size_t & codeLen) = 0; diff --git a/src/include/platform/internal/GenericConfigurationManagerImpl.h b/src/include/platform/internal/GenericConfigurationManagerImpl.h index 5ec5aa11f99348..e42386d28f48bd 100644 --- a/src/include/platform/internal/GenericConfigurationManagerImpl.h +++ b/src/include/platform/internal/GenericConfigurationManagerImpl.h @@ -80,7 +80,7 @@ class GenericConfigurationManagerImpl : public ConfigurationManager CHIP_ERROR GetLifetimeCounter(uint16_t & lifetimeCounter) override; CHIP_ERROR IncrementLifetimeCounter() override; CHIP_ERROR GetRotatingDeviceIdUniqueId(MutableByteSpan & uniqueIdSpan) override; - CHIP_ERROR SetRotatingDeviceIdUniqueId(MutableByteSpan & uniqueIdSpan) override; + CHIP_ERROR SetRotatingDeviceIdUniqueId(const ByteSpan & uniqueIdSpan) override; #endif CHIP_ERROR GetFailSafeArmed(bool & val) override; CHIP_ERROR SetFailSafeArmed(bool val) override; diff --git a/src/include/platform/internal/GenericConfigurationManagerImpl.ipp b/src/include/platform/internal/GenericConfigurationManagerImpl.ipp index 0fec026b0412ff..eb10c2a46d46ea 100644 --- a/src/include/platform/internal/GenericConfigurationManagerImpl.ipp +++ b/src/include/platform/internal/GenericConfigurationManagerImpl.ipp @@ -639,7 +639,7 @@ CHIP_ERROR GenericConfigurationManagerImpl::IncrementLifetimeCounte } template -CHIP_ERROR GenericConfigurationManagerImpl::SetRotatingDeviceIdUniqueId(MutableByteSpan & uniqueIdSpan) +CHIP_ERROR GenericConfigurationManagerImpl::SetRotatingDeviceIdUniqueId(const ByteSpan & uniqueIdSpan) { ReturnErrorCodeIf(uniqueIdSpan.size() != kRotatingDeviceIDUniqueIDLength, CHIP_ERROR_BUFFER_TOO_SMALL); memcpy(mRotatingDeviceIdUniqueId, uniqueIdSpan.data(), kRotatingDeviceIDUniqueIDLength);