blob: bff714d127201a6ce2159edc67da2b387b3c35f5 [file] [log] [blame]
/**
* 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.
*/
#import <Foundation/Foundation.h>
#import <Matter/MTRAccessGrant.h>
#import <Matter/MTRDefines.h>
#import <Matter/MTRDeviceTypeRevision.h>
#import <Matter/MTRServerCluster.h>
NS_ASSUME_NONNULL_BEGIN
/**
* A representation of an endpoint implemented by an MTRDeviceController.
*/
NS_SWIFT_SENDABLE
MTR_AVAILABLE(ios(17.6), macos(14.6), watchos(10.6), tvos(17.6))
@interface MTRServerEndpoint : NSObject
- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)new NS_UNAVAILABLE;
/**
* The provided endpointID must be in the range 1-65535. The list of device
* types provided must be nonempty (but may include vendor-specific device
* types).
*/
- (nullable instancetype)initWithEndpointID:(NSNumber *)endpointID deviceTypes:(NSArray<MTRDeviceTypeRevision *> *)deviceTypes;
/**
* Add an access grant to the endpoint. If the same access grant is added
* multiple times, it will be treated as if it were added once (and removing
* it once will remove it).
*/
- (void)addAccessGrant:(MTRAccessGrant *)accessGrant;
/**
* Remove an access grant from the endpoint.
*/
- (void)removeAccessGrant:(MTRAccessGrant *)accessGrant;
/**
* Add a server cluster to the endpoint. This can only be done before the
* endpoint has been added to a controller.
*
* The cluster must not have the same cluster ID as another cluster on
* this endpoint.
*
* The cluster must not already be added to another endpoint.
*/
- (BOOL)addServerCluster:(MTRServerCluster *)serverCluster;
@property (nonatomic, copy, readonly) NSNumber * endpointID;
@property (nonatomic, copy, readonly) NSArray<MTRDeviceTypeRevision *> * deviceTypes;
/**
* The list of entities that are allowed to access all clusters on this
* endpoint. If more fine-grained access control is desired, access grants
* should be defined on individual clusters.
*
* Defaults to empty list, which means no access granted.
*/
@property (nonatomic, copy, readonly) NSArray<MTRAccessGrant *> * accessGrants;
/**
* A list of server clusters supported on this endpoint. The Descriptor cluster
* does not need to be included unless a TagList attribute is desired on it or
* it has a non-empty PartsList, or it needs to have cluster-specific access
* grants. If not included, the Descriptor cluster will be generated
* automatically.
*/
@property (nonatomic, copy, readonly) NSArray<MTRServerCluster *> * serverClusters;
@end
NS_ASSUME_NONNULL_END