blob: 963cb54e020e208bfcb26f7052d620b9597fe9ef [file] [log] [blame]
/*
*
* Copyright (c) 2025 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 <functional>
#include <nfc/NFCTag.h>
#if CHIP_DEVICE_CONFIG_ENABLE_NFC_BASED_COMMISSIONING
namespace chip {
namespace Nfc {
/**
* Defines interface for delegate that receives updates on request to find NFC tags
*/
class DLL_EXPORT NFCReaderTransportDelegate
{
public:
virtual ~NFCReaderTransportDelegate() {}
/**
* Invoked when a tag is discovered by the NFC reader
*
* @param tagIdentifier Specifies identifier for the tag that was discovered
*/
virtual void OnTagDiscovered(const NFCTag::Identifier & tagIdentifier) = 0;
/**
* Invoked when request to find tag fails.
*
* @param error The error code describing reason for failure to discover the tag
*/
virtual void OnTagDiscoveryFailed(CHIP_ERROR error) = 0;
};
/**
* Defines the interface that supports reading NFC tags
*/
class DLL_EXPORT NFCReaderTransport
{
public:
virtual ~NFCReaderTransport() {}
/*
* Set/Reset the delegate to receive tag discovery updates
*
* @param delegate If not nullptr, the delegate to receive updates. The lifetime of the delegate
* is assumed to be managed by the caller of this method.
*/
virtual void SetDelegate(NFCReaderTransportDelegate * delegate) = 0;
/**
* Starts discovering NFC tags matching specified identifier
*
* @param tagIdentifier Specifies identifier of the tag to discover
*
* @return The error code specifying the status of the request.
*/
virtual CHIP_ERROR StartDiscoveringTagMatchingAddress(const NFCTag::Identifier & tagIdentifier) = 0;
/**
* Stop discovering all NFC tags.
*
* @return The error code specifying the status of the request.
*/
virtual CHIP_ERROR StopDiscoveringTags() = 0;
/**
* Query if a specified tag has been discovered from an earlier scan
*
* @param tagIdentifier Specifies identifier of the tag to discover
*
* @return true if the tag was previously detected and is still present, false otherwise.
*/
virtual bool FindTagMatchingIdentifier(const NFCTag::Identifier & tagIdentifier) = 0;
/**
* Sends an NFC message to the tag
*
* @param message The NFC message to send to the tag.
* @param tagIdentifier The identifier of the tag that is the destination of the message
* @param callback Callback function to be invoked providing status on the send request. The callback must be
* invoked in the context of the Matter Stack
*
* @return The error code specifying the status of the request.
*/
virtual CHIP_ERROR SendMessage(System::PacketBufferHandle && message, const NFCTag::Identifier & tagIdentifier,
std::function<void(System::PacketBufferHandle &&, CHIP_ERROR)> callback) = 0;
};
} // namespace Nfc
} // namespace chip
#endif // CHIP_DEVICE_CONFIG_ENABLE_NFC_BASED_COMMISSIONING