Skip to content

Commit

Permalink
Merge branch 'master' into indirect_crl
Browse files Browse the repository at this point in the history
  • Loading branch information
bh3000 authored Nov 14, 2024
2 parents 0edc3ce + 355a2a6 commit 83e687e
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 2 deletions.
1 change: 1 addition & 0 deletions examples/fabric-sync/shell/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ source_set("shell") {
"AddBridgeCommand.h",
"AddDeviceCommand.cpp",
"AddDeviceCommand.h",
"CommandRegistry.cpp",
"CommandRegistry.h",
"RemoveBridgeCommand.cpp",
"RemoveBridgeCommand.h",
Expand Down
48 changes: 48 additions & 0 deletions examples/fabric-sync/shell/CommandRegistry.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
* 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.
*
*/

#include "CommandRegistry.h"

#include <system/SystemLayer.h>

using namespace ::chip;

namespace commands {

void CommandRegistry::SetActiveCommand(std::unique_ptr<Command> command, uint32_t timeoutSeconds)
{
mActiveCommand = std::move(command);

// Cancel any previous timer to avoid multiple timers running simultaneously
DeviceLayer::SystemLayer().CancelTimer(OnTimeout, this);

// Start a new timer for the specified timeout
CHIP_ERROR err = DeviceLayer::SystemLayer().StartTimer(System::Clock::Milliseconds32(timeoutSeconds * 1000), OnTimeout, this);
if (err != CHIP_NO_ERROR)
{
ResetActiveCommand();
}
}

void CommandRegistry::ResetActiveCommand()
{
DeviceLayer::SystemLayer().CancelTimer(OnTimeout, this);
mActiveCommand.reset();
}

} // namespace commands
11 changes: 9 additions & 2 deletions examples/fabric-sync/shell/CommandRegistry.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,23 @@ class CommandRegistry
return instance;
}

void SetActiveCommand(std::unique_ptr<Command> command) { mActiveCommand = std::move(command); }
void SetActiveCommand(std::unique_ptr<Command> command, uint32_t timeoutSeconds = 30);

Command * GetActiveCommand() { return mActiveCommand.get(); }

void ResetActiveCommand() { mActiveCommand.reset(); }
void ResetActiveCommand();

bool IsCommandActive() const { return mActiveCommand != nullptr; }

private:
CommandRegistry() = default;

static void OnTimeout(chip::System::Layer * layer, void * appState)
{
// Callback function to reset the command when the timer expires
static_cast<CommandRegistry *>(appState)->ResetActiveCommand();
}

std::unique_ptr<Command> mActiveCommand;
};

Expand Down

0 comments on commit 83e687e

Please sign in to comment.