1616 */
1717
1818#include " general-commissioning-cluster.h"
19+ #include " platform/ConfigurationManager.h"
1920
2021#include < app/AppConfig.h>
2122#include < app/reporting/reporting.h>
3233#include < transport/SecureSession.h>
3334
3435#if CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
35- #include < app/server/TermsAndConditionsManager.h> // nogncheck
36- #include < app/server/TermsAndConditionsProvider.h> // nogncheck
37- #endif
36+ #include < app/server/TermsAndConditionsManager.h> // nogncheck
37+ #endif // CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
3838
3939using namespace chip ;
4040using namespace chip ::app;
@@ -57,10 +57,11 @@ namespace {
5757 } \
5858 } while (false )
5959
60- CHIP_ERROR ReadIfSupported (CHIP_ERROR (ConfigurationManager::*getter)(uint8_t &), AttributeValueEncoder & aEncoder)
60+ CHIP_ERROR ReadIfSupported (ConfigurationManager & mgr, CHIP_ERROR (ConfigurationManager::*getter)(uint8_t &),
61+ AttributeValueEncoder & aEncoder)
6162{
6263 uint8_t data = 0 ;
63- CHIP_ERROR err = (DeviceLayer::ConfigurationMgr () .*getter)(data);
64+ CHIP_ERROR err = (mgr .*getter)(data);
6465 if (err == CHIP_ERROR_UNSUPPORTED_CHIP_FEATURE)
6566 {
6667 data = 0 ;
@@ -139,18 +140,20 @@ void NotifyTermsAndConditionsAttributeChangeIfRequired(const TermsAndConditionsS
139140}
140141#endif // CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
141142
142- void OnPlatformEventHandler (const DeviceLayer::ChipDeviceEvent * event, intptr_t self )
143+ void OnPlatformEventHandler (const DeviceLayer::ChipDeviceEvent * event, intptr_t arg )
143144{
144145 if (event->Type == DeviceLayer::DeviceEventType::kFailSafeTimerExpired )
145146 {
147+ auto self = reinterpret_cast <GeneralCommissioningCluster *>(arg);
148+
146149 // Spec says to reset Breadcrumb attribute to 0.
147- reinterpret_cast <GeneralCommissioningCluster *>( self) ->SetBreadCrumb (0 );
150+ self->SetBreadCrumb (0 );
148151
149152#if CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
150153 if (event->FailSafeTimerExpired .updateTermsAndConditionsHasBeenInvoked )
151154 {
152155 // Clear terms and conditions acceptance on failsafe timer expiration
153- TermsAndConditionsProvider & tcProvider = TermsAndConditionsManager::GetInstance () ;
156+ TermsAndConditionsProvider & tcProvider = self-> ClusterContext (). termsAndConditionsProvider ;
154157 TermsAndConditionsState initialState, updatedState;
155158 VerifyOrReturn (CHIP_NO_ERROR == GetTermsAndConditionsAttributeState (tcProvider, initialState));
156159 VerifyOrReturn (CHIP_NO_ERROR == tcProvider.RevertAcceptance ());
@@ -190,56 +193,44 @@ DataModel::ActionReturnStatus GeneralCommissioningCluster::ReadAttribute(const D
190193 return encoder.Encode (info);
191194 }
192195 case RegulatoryConfig::Id:
193- return ReadIfSupported (&ConfigurationManager::GetRegulatoryLocation, encoder);
196+ return ReadIfSupported (mClusterContext . configurationManager , &ConfigurationManager::GetRegulatoryLocation, encoder);
194197 case LocationCapability::Id:
195- return ReadIfSupported (&ConfigurationManager::GetLocationCapability, encoder);
198+ return ReadIfSupported (mClusterContext . configurationManager , &ConfigurationManager::GetLocationCapability, encoder);
196199 case SupportsConcurrentConnection::Id:
197200 return encoder.Encode (CHIP_DEVICE_CONFIG_SUPPORTS_CONCURRENT_CONNECTION != 0 );
198201
199202#if CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
200203 case TCAcceptedVersion::Id: {
201- TermsAndConditionsProvider & tcProvider = TermsAndConditionsManager::GetInstance ();
202204 Optional<TermsAndConditions> outTermsAndConditions;
203-
204- ReturnErrorOnFailure (tcProvider.GetAcceptance (outTermsAndConditions));
205-
205+ ReturnErrorOnFailure (mClusterContext .termsAndConditionsProvider .GetAcceptance (outTermsAndConditions));
206206 return encoder.Encode (outTermsAndConditions.ValueOr (TermsAndConditions (0 , 0 )).GetVersion ());
207207 }
208208 case TCMinRequiredVersion::Id: {
209- TermsAndConditionsProvider & tcProvider = TermsAndConditionsManager::GetInstance ();
210209 Optional<TermsAndConditions> outTermsAndConditions;
211210
212- ReturnErrorOnFailure (tcProvider.GetRequirements (outTermsAndConditions));
213-
211+ ReturnErrorOnFailure (mClusterContext .termsAndConditionsProvider .GetRequirements (outTermsAndConditions));
214212 return encoder.Encode (outTermsAndConditions.ValueOr (TermsAndConditions (0 , 0 )).GetVersion ());
215213 }
216214 case TCAcknowledgements::Id: {
217- TermsAndConditionsProvider & tcProvider = TermsAndConditionsManager::GetInstance ();
218215 Optional<TermsAndConditions> outTermsAndConditions;
219216
220- ReturnErrorOnFailure (tcProvider.GetAcceptance (outTermsAndConditions));
221-
217+ ReturnErrorOnFailure (mClusterContext .termsAndConditionsProvider .GetAcceptance (outTermsAndConditions));
222218 return encoder.Encode (outTermsAndConditions.ValueOr (TermsAndConditions (0 , 0 )).GetValue ());
223219 }
224220 case TCAcknowledgementsRequired::Id: {
225- TermsAndConditionsProvider & tcProvider = TermsAndConditionsManager::GetInstance ();
226221 bool acknowledgementsRequired;
227-
228- ReturnErrorOnFailure (tcProvider.GetAcknowledgementsRequired (acknowledgementsRequired));
229-
222+ ReturnErrorOnFailure (mClusterContext .termsAndConditionsProvider .GetAcknowledgementsRequired (acknowledgementsRequired));
230223 return encoder.Encode (acknowledgementsRequired);
231224 }
232225 case TCUpdateDeadline::Id: {
233- TermsAndConditionsProvider & tcProvider = TermsAndConditionsManager::GetInstance ();
234226 Optional<uint32_t > outUpdateAcceptanceDeadline;
227+ ReturnErrorOnFailure (mClusterContext .termsAndConditionsProvider .GetUpdateAcceptanceDeadline (outUpdateAcceptanceDeadline));
235228
236- ReturnErrorOnFailure (tcProvider.GetUpdateAcceptanceDeadline (outUpdateAcceptanceDeadline));
237-
229+ // NOTE: encoding an optional as a Nullable (they are not fully compatible)
238230 if (!outUpdateAcceptanceDeadline.HasValue ())
239231 {
240232 return encoder.EncodeNull ();
241233 }
242-
243234 return encoder.Encode (outUpdateAcceptanceDeadline.Value ());
244235 }
245236#endif
@@ -372,12 +363,12 @@ void GeneralCommissioningCluster::OnFabricRemoved(const FabricTable & fabricTabl
372363#if CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
373364 // If the FabricIndex matches the last remaining entry in the Fabrics list, then the device SHALL delete all Matter
374365 // related data on the node which was created since it was commissioned.
375- if (Server::GetInstance (). GetFabricTable () .FabricCount () == 0 )
366+ if (fabricTable .FabricCount () == 0 )
376367 {
377368 ChipLogProgress (Zcl, " general-commissioning-server: Last Fabric index 0x%x was removed" ,
378369 static_cast <unsigned >(fabricIndex));
379370
380- TermsAndConditionsProvider & tcProvider = TermsAndConditionsManager::GetInstance () ;
371+ TermsAndConditionsProvider & tcProvider = mClusterContext . termsAndConditionsProvider ;
381372 TermsAndConditionsState initialState, updatedState;
382373 VerifyOrReturn (CHIP_NO_ERROR == GetTermsAndConditionsAttributeState (tcProvider, initialState));
383374 VerifyOrReturn (CHIP_NO_ERROR == tcProvider.ResetAcceptance ());
@@ -397,15 +388,15 @@ void GeneralCommissioningCluster::SetBreadCrumb(uint64_t value)
397388CHIP_ERROR GeneralCommissioningCluster::Startup (ServerClusterContext & context)
398389{
399390 ReturnErrorOnFailure (DefaultServerCluster::Startup (context));
400- PlatformMgrImpl () .AddEventHandler (OnPlatformEventHandler, reinterpret_cast <intptr_t >(this ));
401- Server::GetInstance (). GetFabricTable () .AddFabricDelegate (this );
391+ mClusterContext . platformManager .AddEventHandler (OnPlatformEventHandler, reinterpret_cast <intptr_t >(this ));
392+ mClusterContext . fabricTable .AddFabricDelegate (this );
402393 return CHIP_NO_ERROR;
403394}
404395
405396void GeneralCommissioningCluster::Shutdown ()
406397{
407- PlatformMgrImpl () .RemoveEventHandler (OnPlatformEventHandler, reinterpret_cast <intptr_t >(this ));
408- Server::GetInstance (). GetFabricTable () .RemoveFabricDelegate (this );
398+ mClusterContext . platformManager .RemoveEventHandler (OnPlatformEventHandler, reinterpret_cast <intptr_t >(this ));
399+ mClusterContext . fabricTable .RemoveFabricDelegate (this );
409400 DefaultServerCluster::Shutdown ();
410401}
411402
@@ -414,7 +405,7 @@ GeneralCommissioningCluster::HandleArmFailSafe(const DataModel::InvokeRequest &
414405 const GeneralCommissioning::Commands::ArmFailSafe::DecodableType & commandData)
415406{
416407 MATTER_TRACE_SCOPE (" ArmFailSafe" , " GeneralCommissioning" );
417- auto & failSafeContext = Server::GetInstance (). GetFailSafeContext () ;
408+ auto & failSafeContext = mClusterContext . failsafeContext ;
418409 Commands::ArmFailSafeResponse::Type response;
419410
420411 ChipLogProgress (FailSafe, " GeneralCommissioning: Received ArmFailSafe (%us)" ,
@@ -435,8 +426,7 @@ GeneralCommissioningCluster::HandleArmFailSafe(const DataModel::InvokeRequest &
435426 {
436427 // We do not allow CASE connections to arm the failsafe for the first time while the commissioning window is open in order
437428 // to allow commissioners the opportunity to obtain this failsafe for the purpose of commissioning
438- if (!failSafeContext.IsFailSafeArmed () &&
439- Server::GetInstance ().GetCommissioningWindowManager ().IsCommissioningWindowOpen () &&
429+ if (!failSafeContext.IsFailSafeArmed () && mClusterContext .commissioningWindowManager .IsCommissioningWindowOpen () &&
440430 request.subjectDescriptor ->authMode == Access::AuthMode::kCase )
441431 {
442432 response.errorCode = CommissioningErrorEnum::kBusyWithOtherAdmin ;
@@ -472,9 +462,7 @@ GeneralCommissioningCluster::HandleCommissioningComplete(const DataModel::Invoke
472462{
473463 MATTER_TRACE_SCOPE (" CommissioningComplete" , " GeneralCommissioning" );
474464
475- DeviceControlServer * devCtrl = &DeviceLayer::DeviceControlServer::DeviceControlSvr ();
476- auto & failSafe = Server::GetInstance ().GetFailSafeContext ();
477- auto & fabricTable = Server::GetInstance ().GetFabricTable ();
465+ auto & failSafe = mClusterContext .failsafeContext ;
478466
479467 ChipLogProgress (FailSafe, " GeneralCommissioning: Received CommissioningComplete" );
480468
@@ -490,7 +478,7 @@ GeneralCommissioningCluster::HandleCommissioningComplete(const DataModel::Invoke
490478 }
491479
492480#if CHIP_CONFIG_TERMS_AND_CONDITIONS_REQUIRED
493- TermsAndConditionsProvider & tcProvider = TermsAndConditionsManager::GetInstance () ;
481+ TermsAndConditionsProvider & tcProvider = mClusterContext . termsAndConditionsProvider ;
494482
495483 // Ensure required terms and conditions have been accepted, then attempt to commit
496484 Optional<TermsAndConditions> requiredTermsAndConditionsMaybe;
@@ -559,7 +547,7 @@ GeneralCommissioningCluster::HandleCommissioningComplete(const DataModel::Invoke
559547 // Handle NOC commands
560548 if (failSafe.NocCommandHasBeenInvoked ())
561549 {
562- err = fabricTable.CommitPendingFabricData ();
550+ err = mClusterContext . fabricTable .CommitPendingFabricData ();
563551 if (err != CHIP_NO_ERROR)
564552 {
565553 ChipLogError (FailSafe, " GeneralCommissioning: Failed to commit pending fabric data: %" CHIP_ERROR_FORMAT, err.Format ());
@@ -574,7 +562,8 @@ GeneralCommissioningCluster::HandleCommissioningComplete(const DataModel::Invoke
574562
575563 // Disarm the fail-safe and notify the DeviceControlServer
576564 failSafe.DisarmFailSafe ();
577- err = devCtrl->PostCommissioningCompleteEvent (handle->AsSecureSession ()->GetPeerNodeId (), handle->GetFabricIndex ());
565+ err = mClusterContext .deviceControlServer .PostCommissioningCompleteEvent (handle->AsSecureSession ()->GetPeerNodeId (),
566+ handle->GetFabricIndex ());
578567 CheckSuccess (err, Failure);
579568
580569 SetBreadCrumb (0 );
@@ -588,7 +577,6 @@ GeneralCommissioningCluster::HandleSetRegulatoryConfig(const DataModel::InvokeRe
588577 const Commands::SetRegulatoryConfig::DecodableType & commandData)
589578{
590579 MATTER_TRACE_SCOPE (" SetRegulatoryConfig" , " GeneralCommissioning" );
591- DeviceControlServer * server = &DeviceLayer::DeviceControlServer::DeviceControlSvr ();
592580 Commands::SetRegulatoryConfigResponse::Type response;
593581 auto & countryCode = commandData.countryCode ;
594582
@@ -606,7 +594,7 @@ GeneralCommissioningCluster::HandleSetRegulatoryConfig(const DataModel::InvokeRe
606594 }
607595
608596 uint8_t locationCapability;
609- if (ConfigurationMgr () .GetLocationCapability (locationCapability) != CHIP_NO_ERROR)
597+ if (mClusterContext . configurationManager .GetLocationCapability (locationCapability) != CHIP_NO_ERROR)
610598 {
611599 return Protocols::InteractionModel::Status::Failure;
612600 }
@@ -622,7 +610,7 @@ GeneralCommissioningCluster::HandleSetRegulatoryConfig(const DataModel::InvokeRe
622610 return std::nullopt ;
623611 }
624612
625- CheckSuccess (server-> SetRegulatoryConfig (location, countryCode), Failure);
613+ CheckSuccess (mClusterContext . deviceControlServer . SetRegulatoryConfig (location, countryCode), Failure);
626614 SetBreadCrumb (commandData.breadcrumb );
627615 response.errorCode = CommissioningErrorEnum::kOk ;
628616 handler->AddResponse (request.path , response);
@@ -636,8 +624,8 @@ GeneralCommissioningCluster::HandleSetTCAcknowledgements(const DataModel::Invoke
636624{
637625 MATTER_TRACE_SCOPE (" SetTCAcknowledgements" , " GeneralCommissioning" );
638626
639- auto & failSafeContext = Server::GetInstance (). GetFailSafeContext () ;
640- TermsAndConditionsProvider & tcProvider = TermsAndConditionsManager::GetInstance () ;
627+ auto & failSafeContext = mClusterContext . failsafeContext ;
628+ TermsAndConditionsProvider & tcProvider = mClusterContext . termsAndConditionsProvider ;
641629
642630 Optional<TermsAndConditions> requiredTermsAndConditionsMaybe;
643631 Optional<TermsAndConditions> previousAcceptedTermsAndConditionsMaybe;
0 commit comments