diff --git a/examples/lighting-app/nrfconnect/main/AppTask.cpp b/examples/lighting-app/nrfconnect/main/AppTask.cpp index a108dc1b4bf89b..3e4b71b1068d07 100644 --- a/examples/lighting-app/nrfconnect/main/AppTask.cpp +++ b/examples/lighting-app/nrfconnect/main/AppTask.cpp @@ -59,7 +59,6 @@ namespace { constexpr int kFactoryResetTriggerTimeout = 3000; constexpr int kFactoryResetCancelWindowTimeout = 3000; -constexpr int kExtDiscoveryTimeoutSecs = 20; constexpr int kAppEventQueueSize = 10; constexpr uint8_t kButtonPushEvent = 1; constexpr uint8_t kButtonReleaseEvent = 0; @@ -170,7 +169,6 @@ CHIP_ERROR AppTask::Init() // Initialize CHIP server SetDeviceAttestationCredentialsProvider(Examples::GetExampleDACProvider()); - chip::app::DnssdServer::Instance().SetExtendedDiscoveryTimeoutSecs(kExtDiscoveryTimeoutSecs); static chip::CommonCaseDeviceServerInitParams initParams; (void) initParams.InitializeStaticResourcesBeforeServerInit(); diff --git a/examples/lock-app/nrfconnect/main/AppTask.cpp b/examples/lock-app/nrfconnect/main/AppTask.cpp index 5917cfe34a8d95..6975dea5e6a65c 100644 --- a/examples/lock-app/nrfconnect/main/AppTask.cpp +++ b/examples/lock-app/nrfconnect/main/AppTask.cpp @@ -168,6 +168,9 @@ CHIP_ERROR AppTask::Init() // between the main and the CHIP threads. PlatformMgr().AddEventHandler(ChipEventHandler, 0); + // Disable auto-relock time feature. + DoorLockServer::Instance().SetAutoRelockTime(kLockEndpointId, 0); + err = PlatformMgr().StartEventLoopTask(); if (err != CHIP_NO_ERROR) { @@ -533,27 +536,38 @@ void AppTask::DispatchEvent(AppEvent * aEvent) void AppTask::UpdateClusterState(BoltLockManager::State state, BoltLockManager::OperationSource source) { - DlLockState lockState; + DlLockState newLockState; switch (state) { case BoltLockManager::State::kLockingCompleted: - lockState = DlLockState::kLocked; + newLockState = DlLockState::kLocked; break; case BoltLockManager::State::kUnlockingCompleted: - lockState = DlLockState::kUnlocked; + newLockState = DlLockState::kUnlocked; break; default: - lockState = DlLockState::kNotFullyLocked; + newLockState = DlLockState::kNotFullyLocked; break; } - SystemLayer().ScheduleLambda([lockState, source] { - LOG_INF("Updating LockState attribute"); + SystemLayer().ScheduleLambda([newLockState, source] { + chip::app::DataModel::Nullable currentLockState; + chip::app::Clusters::DoorLock::Attributes::LockState::Get(kLockEndpointId, currentLockState); - if (!DoorLockServer::Instance().SetLockState(kLockEndpointId, lockState, source)) + if (currentLockState.IsNull()) + { + // Initialize lock state with start value, but not invoke lock/unlock. + chip::app::Clusters::DoorLock::Attributes::LockState::Set(kLockEndpointId, newLockState); + } + else { - LOG_ERR("Failed to update LockState attribute"); + LOG_INF("Updating LockState attribute"); + + if (!DoorLockServer::Instance().SetLockState(kLockEndpointId, newLockState, source)) + { + LOG_ERR("Failed to update LockState attribute"); + } } }); }