/* * * 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 #include #include #include namespace chip { namespace app { namespace Clusters { namespace ThreadBorderRouterManagement { constexpr size_t kBorderRouterNameMaxLength = 63; constexpr size_t kBorderAgentIdLength = 16; class Delegate { public: Delegate() = default; virtual ~Delegate() = default; class ActivateDatasetCallback { public: ActivateDatasetCallback() = default; virtual ~ActivateDatasetCallback() = default; // If the dataset is set successfully, OnActivateDatasetComplete should be called with CHIP_NO_ERROR when the // Border Router is attached to the Thread network. // If an error occurs while setting the active dataset, this callback should be called with the error. // The error input of this function could be SDK-range error for CHIP error or OpenThread-range error for Thread error. virtual void OnActivateDatasetComplete(uint32_t sequenceNum, CHIP_ERROR error) = 0; }; class AttributeChangeCallback { public: AttributeChangeCallback() = default; virtual ~AttributeChangeCallback() = default; // If the attributes of the Thread Border Router Management is changed, ReportAttributeChanged should be called. virtual void ReportAttributeChanged(AttributeId attributeId) = 0; }; enum class DatasetType : uint8_t { kActive, kPending, }; virtual CHIP_ERROR Init(AttributeChangeCallback * attributeChangeCallback) = 0; // Get whether PanChange feature is supported for the Thread BR. virtual bool GetPanChangeSupported() = 0; // Get the BorderRouterName of the Thread BR, which will also be the service name of Thread BR's MeshCOP service. virtual void GetBorderRouterName(MutableCharSpan & borderRouterName) = 0; // Get the BorderAgentId of the Thread BR. // @return // -IncorrectState When Thread stack is not initialized. // -InvalidArgument When the size of borderAgentId is not 16 bytes. // -ThreadErrors When failing to get BorderAgentId. virtual CHIP_ERROR GetBorderAgentId(MutableByteSpan & borderAgentId) = 0; // Get the Thread version which matches the value mapping defined in the "Version TLV" section of the Thread specification. virtual uint16_t GetThreadVersion() = 0; // Get whether the associated IEEE 802.15.4 Thread interface is enabled or disabled. virtual bool GetInterfaceEnabled() = 0; // Get the active dataset or the pending dataset. // @return // -IncorrectState When Thread stack is not initialized. // -NotFound when failing to get the dataset. virtual CHIP_ERROR GetDataset(Thread::OperationalDataset & dataset, DatasetType type) = 0; // There should be no active dataset configured when calling this API, otherwise we should use SetPendingDataset. // The Delegate implementation must store the sequence number and pass it to OnActivateDatasetComplete. virtual void SetActiveDataset(const Thread::OperationalDataset & activeDataset, uint32_t sequenceNum, ActivateDatasetCallback * callback) = 0; // This function will check save whether there is active dataset configured. virtual CHIP_ERROR CommitActiveDataset() = 0; // The function is called when Failsafe timer is triggered or when the Border Router reboots with a previous Failsafe timer // started but not disarmed before reboot. The delegate implementation should check whether there is a previous SetActiveDataset // request and revert the active dataset set by the previous SetActiveDataset. Since there should be no configured dataset when // calling SetActiveDataset, this function will clear the active dataset to allow trying again a new SetActiveDataset operation. // The delegate is allowed to call OnActivateDatasetComplete for the previous SetActiveDataset request even after this function // is called as the sequence number passed to OnActivateDatasetComplete will be different. virtual CHIP_ERROR RevertActiveDataset() = 0; virtual CHIP_ERROR SetPendingDataset(const Thread::OperationalDataset & pendingDataset) = 0; }; } // namespace ThreadBorderRouterManagement } // namespace Clusters } // namespace app } // namespace chip