| /* |
| * |
| * Copyright (c) 2022 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 "MTRAsyncCallbackWorkQueue.h" |
| #import "MTRBaseClusterUtils.h" |
| #import "MTRBaseDevice_Internal.h" |
| #import "MTRCallbackBridge.h" |
| #import "MTRClusterConstants.h" |
| #import "MTRCluster_Internal.h" |
| #import "MTRClusters_Internal.h" |
| #import "MTRCommandPayloadsObjc.h" |
| #import "MTRDevice_Internal.h" |
| #import "MTRLogging_Internal.h" |
| #import "MTRStructsObjc.h" |
| |
| #include <lib/support/CHIPListUtils.h> |
| #include <platform/CHIPDeviceLayer.h> |
| #include <type_traits> |
| |
| using chip::Callback::Callback; |
| using chip::Callback::Cancelable; |
| using namespace chip::app::Clusters; |
| using chip::Optional; |
| using chip::SessionHandle; |
| using chip::Messaging::ExchangeManager; |
| using chip::System::Clock::Seconds16; |
| using chip::System::Clock::Timeout; |
| |
| static void MTRClustersLogEnqueue(NSString * logPrefix, MTRAsyncCallbackWorkQueue * workQueue) |
| { |
| MTR_LOG_INFO("%@ enqueueWorkItem %@", logPrefix, workQueue); |
| } |
| |
| static void MTRClustersLogDequeue(NSString * logPrefix, MTRAsyncCallbackWorkQueue * workQueue) |
| { |
| MTR_LOG_INFO("%@ dequeueWorkItem %@", logPrefix, workQueue); |
| } |
| |
| static void MTRClustersLogCompletion(NSString * logPrefix, id value, NSError * error) |
| { |
| MTR_LOG_INFO("%@ completion value %@ error %@ endWork", logPrefix, value, error); |
| } |
| |
| // NOLINTBEGIN(clang-analyzer-cplusplus.NewDeleteLeaks): Linter is unable to locate the delete on these objects. |
| @implementation MTRClusterIdentify |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)identifyWithParams:(MTRIdentifyClusterIdentifyParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeIdentifyID, (unsigned int) MTRCommandIDTypeClusterIdentifyCommandIdentifyID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Identify::Commands::Identify::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.identifyTime = params.identifyTime.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)triggerEffectWithParams:(MTRIdentifyClusterTriggerEffectParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeIdentifyID, (unsigned int) MTRCommandIDTypeClusterIdentifyCommandTriggerEffectID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Identify::Commands::TriggerEffect::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.effectIdentifier = static_cast<std::remove_reference_t<decltype(request.effectIdentifier)>>( |
| params.effectIdentifier.unsignedCharValue); |
| request.effectVariant |
| = static_cast<std::remove_reference_t<decltype(request.effectVariant)>>(params.effectVariant.unsignedCharValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeIdentifyTimeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIdentifyID) |
| attributeID:@(MTRAttributeIDTypeClusterIdentifyAttributeIdentifyTimeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeIdentifyTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeIdentifyTimeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeIdentifyTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIdentifyID) |
| attributeID:@(MTRAttributeIDTypeClusterIdentifyAttributeIdentifyTimeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeIdentifyTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIdentifyID) |
| attributeID:@(MTRAttributeIDTypeClusterIdentifyAttributeIdentifyTypeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIdentifyID) |
| attributeID:@(MTRAttributeIDTypeClusterIdentifyAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIdentifyID) |
| attributeID:@(MTRAttributeIDTypeClusterIdentifyAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIdentifyID) |
| attributeID:@(MTRAttributeIDTypeClusterIdentifyAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIdentifyID) |
| attributeID:@(MTRAttributeIDTypeClusterIdentifyAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIdentifyID) |
| attributeID:@(MTRAttributeIDTypeClusterIdentifyAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterIdentify (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)identifyWithParams:(MTRIdentifyClusterIdentifyParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self identifyWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)triggerEffectWithParams:(MTRIdentifyClusterTriggerEffectParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self triggerEffectWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterGroups |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)addGroupWithParams:(MTRGroupsClusterAddGroupParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRGroupsClusterAddGroupResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeGroupsID, (unsigned int) MTRCommandIDTypeClusterGroupsCommandAddGroupID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRGroupsClusterAddGroupResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, GroupsClusterAddGroupResponseCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRGroupsClusterAddGroupResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Groups::Commands::AddGroup::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupID = params.groupID.unsignedShortValue; |
| request.groupName = [self asCharSpan:params.groupName]; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)viewGroupWithParams:(MTRGroupsClusterViewGroupParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRGroupsClusterViewGroupResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeGroupsID, (unsigned int) MTRCommandIDTypeClusterGroupsCommandViewGroupID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRGroupsClusterViewGroupResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| GroupsClusterViewGroupResponseCallbackType successCb, MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRGroupsClusterViewGroupResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Groups::Commands::ViewGroup::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupID = params.groupID.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)getGroupMembershipWithParams:(MTRGroupsClusterGetGroupMembershipParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRGroupsClusterGetGroupMembershipResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeGroupsID, (unsigned int) MTRCommandIDTypeClusterGroupsCommandGetGroupMembershipID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRGroupsClusterGetGroupMembershipResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| GroupsClusterGetGroupMembershipResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRGroupsClusterGetGroupMembershipResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Groups::Commands::GetGroupMembership::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| { |
| using ListType_0 = std::remove_reference_t<decltype(request.groupList)>; |
| using ListMemberType_0 = ListMemberTypeGetter<ListType_0>::Type; |
| if (params.groupList.count != 0) { |
| auto * listHolder_0 = new ListHolder<ListMemberType_0>(params.groupList.count); |
| if (listHolder_0 == nullptr || listHolder_0->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_0); |
| for (size_t i_0 = 0; i_0 < params.groupList.count; ++i_0) { |
| if (![params.groupList[i_0] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_0 = (NSNumber *) params.groupList[i_0]; |
| listHolder_0->mList[i_0] = element_0.unsignedShortValue; |
| } |
| request.groupList = ListType_0(listHolder_0->mList, params.groupList.count); |
| } else { |
| request.groupList = ListType_0(); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)removeGroupWithParams:(MTRGroupsClusterRemoveGroupParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRGroupsClusterRemoveGroupResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeGroupsID, (unsigned int) MTRCommandIDTypeClusterGroupsCommandRemoveGroupID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRGroupsClusterRemoveGroupResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| GroupsClusterRemoveGroupResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRGroupsClusterRemoveGroupResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Groups::Commands::RemoveGroup::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupID = params.groupID.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)removeAllGroupsWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self removeAllGroupsWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)removeAllGroupsWithParams:(MTRGroupsClusterRemoveAllGroupsParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeGroupsID, (unsigned int) MTRCommandIDTypeClusterGroupsCommandRemoveAllGroupsID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Groups::Commands::RemoveAllGroups::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)addGroupIfIdentifyingWithParams:(MTRGroupsClusterAddGroupIfIdentifyingParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeGroupsID, |
| (unsigned int) MTRCommandIDTypeClusterGroupsCommandAddGroupIfIdentifyingID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Groups::Commands::AddGroupIfIdentifying::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupID = params.groupID.unsignedShortValue; |
| request.groupName = [self asCharSpan:params.groupName]; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNameSupportWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupsID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupsAttributeNameSupportID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupsID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupsAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupsID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupsAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupsID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupsAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupsID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupsAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupsID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupsAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterGroups (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)addGroupWithParams:(MTRGroupsClusterAddGroupParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRGroupsClusterAddGroupResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self addGroupWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRGroupsClusterAddGroupResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRGroupsClusterAddGroupResponseParams *>(data), error); |
| }]; |
| } |
| - (void)viewGroupWithParams:(MTRGroupsClusterViewGroupParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRGroupsClusterViewGroupResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self viewGroupWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRGroupsClusterViewGroupResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRGroupsClusterViewGroupResponseParams *>(data), error); |
| }]; |
| } |
| - (void)getGroupMembershipWithParams:(MTRGroupsClusterGetGroupMembershipParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRGroupsClusterGetGroupMembershipResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self getGroupMembershipWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRGroupsClusterGetGroupMembershipResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRGroupsClusterGetGroupMembershipResponseParams *>(data), error); |
| }]; |
| } |
| - (void)removeGroupWithParams:(MTRGroupsClusterRemoveGroupParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRGroupsClusterRemoveGroupResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self removeGroupWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRGroupsClusterRemoveGroupResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRGroupsClusterRemoveGroupResponseParams *>(data), error); |
| }]; |
| } |
| - (void)removeAllGroupsWithParams:(MTRGroupsClusterRemoveAllGroupsParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self removeAllGroupsWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)removeAllGroupsWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self removeAllGroupsWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)addGroupIfIdentifyingWithParams:(MTRGroupsClusterAddGroupIfIdentifyingParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self addGroupIfIdentifyingWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterScenes |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)addSceneWithParams:(MTRScenesClusterAddSceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRScenesClusterAddSceneResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeScenesID, (unsigned int) MTRCommandIDTypeClusterScenesCommandAddSceneID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRScenesClusterAddSceneResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, ScenesClusterAddSceneResponseCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRScenesClusterAddSceneResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Scenes::Commands::AddScene::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupID = params.groupID.unsignedShortValue; |
| request.sceneID = params.sceneID.unsignedCharValue; |
| request.transitionTime = params.transitionTime.unsignedShortValue; |
| request.sceneName = [self asCharSpan:params.sceneName]; |
| { |
| using ListType_0 = std::remove_reference_t<decltype(request.extensionFieldSets)>; |
| using ListMemberType_0 = ListMemberTypeGetter<ListType_0>::Type; |
| if (params.extensionFieldSets.count != 0) { |
| auto * listHolder_0 = new ListHolder<ListMemberType_0>(params.extensionFieldSets.count); |
| if (listHolder_0 == nullptr || listHolder_0->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_0); |
| for (size_t i_0 = 0; i_0 < params.extensionFieldSets.count; ++i_0) { |
| if (![params.extensionFieldSets[i_0] isKindOfClass:[MTRScenesClusterExtensionFieldSet class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_0 = (MTRScenesClusterExtensionFieldSet *) params.extensionFieldSets[i_0]; |
| listHolder_0->mList[i_0].clusterID = element_0.clusterID.unsignedIntValue; |
| { |
| using ListType_2 = std::remove_reference_t<decltype(listHolder_0->mList[i_0].attributeValueList)>; |
| using ListMemberType_2 = ListMemberTypeGetter<ListType_2>::Type; |
| if (element_0.attributeValueList.count != 0) { |
| auto * listHolder_2 = new ListHolder<ListMemberType_2>(element_0.attributeValueList.count); |
| if (listHolder_2 == nullptr || listHolder_2->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_2); |
| for (size_t i_2 = 0; i_2 < element_0.attributeValueList.count; ++i_2) { |
| if (![element_0.attributeValueList[i_2] |
| isKindOfClass:[MTRScenesClusterAttributeValuePair class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_2 = (MTRScenesClusterAttributeValuePair *) element_0.attributeValueList[i_2]; |
| if (element_2.attributeID != nil) { |
| auto & definedValue_4 = listHolder_2->mList[i_2].attributeID.Emplace(); |
| definedValue_4 = element_2.attributeID.unsignedIntValue; |
| } |
| { |
| using ListType_4 |
| = std::remove_reference_t<decltype(listHolder_2->mList[i_2].attributeValue)>; |
| using ListMemberType_4 = ListMemberTypeGetter<ListType_4>::Type; |
| if (element_2.attributeValue.count != 0) { |
| auto * listHolder_4 |
| = new ListHolder<ListMemberType_4>(element_2.attributeValue.count); |
| if (listHolder_4 == nullptr || listHolder_4->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_4); |
| for (size_t i_4 = 0; i_4 < element_2.attributeValue.count; ++i_4) { |
| if (![element_2.attributeValue[i_4] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_4 = (NSNumber *) element_2.attributeValue[i_4]; |
| listHolder_4->mList[i_4] = element_4.unsignedCharValue; |
| } |
| listHolder_2->mList[i_2].attributeValue |
| = ListType_4(listHolder_4->mList, element_2.attributeValue.count); |
| } else { |
| listHolder_2->mList[i_2].attributeValue = ListType_4(); |
| } |
| } |
| } |
| listHolder_0->mList[i_0].attributeValueList |
| = ListType_2(listHolder_2->mList, element_0.attributeValueList.count); |
| } else { |
| listHolder_0->mList[i_0].attributeValueList = ListType_2(); |
| } |
| } |
| } |
| request.extensionFieldSets = ListType_0(listHolder_0->mList, params.extensionFieldSets.count); |
| } else { |
| request.extensionFieldSets = ListType_0(); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)viewSceneWithParams:(MTRScenesClusterViewSceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRScenesClusterViewSceneResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeScenesID, (unsigned int) MTRCommandIDTypeClusterScenesCommandViewSceneID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRScenesClusterViewSceneResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| ScenesClusterViewSceneResponseCallbackType successCb, MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRScenesClusterViewSceneResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Scenes::Commands::ViewScene::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupID = params.groupID.unsignedShortValue; |
| request.sceneID = params.sceneID.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)removeSceneWithParams:(MTRScenesClusterRemoveSceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRScenesClusterRemoveSceneResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeScenesID, (unsigned int) MTRCommandIDTypeClusterScenesCommandRemoveSceneID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRScenesClusterRemoveSceneResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| ScenesClusterRemoveSceneResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRScenesClusterRemoveSceneResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Scenes::Commands::RemoveScene::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupID = params.groupID.unsignedShortValue; |
| request.sceneID = params.sceneID.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)removeAllScenesWithParams:(MTRScenesClusterRemoveAllScenesParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRScenesClusterRemoveAllScenesResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeScenesID, (unsigned int) MTRCommandIDTypeClusterScenesCommandRemoveAllScenesID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRScenesClusterRemoveAllScenesResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| ScenesClusterRemoveAllScenesResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRScenesClusterRemoveAllScenesResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Scenes::Commands::RemoveAllScenes::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupID = params.groupID.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)storeSceneWithParams:(MTRScenesClusterStoreSceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRScenesClusterStoreSceneResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeScenesID, (unsigned int) MTRCommandIDTypeClusterScenesCommandStoreSceneID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRScenesClusterStoreSceneResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| ScenesClusterStoreSceneResponseCallbackType successCb, MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRScenesClusterStoreSceneResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Scenes::Commands::StoreScene::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupID = params.groupID.unsignedShortValue; |
| request.sceneID = params.sceneID.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)recallSceneWithParams:(MTRScenesClusterRecallSceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeScenesID, (unsigned int) MTRCommandIDTypeClusterScenesCommandRecallSceneID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Scenes::Commands::RecallScene::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupID = params.groupID.unsignedShortValue; |
| request.sceneID = params.sceneID.unsignedCharValue; |
| if (params.transitionTime != nil) { |
| auto & definedValue_0 = request.transitionTime.Emplace(); |
| if (params.transitionTime == nil) { |
| definedValue_0.SetNull(); |
| } else { |
| auto & nonNullValue_1 = definedValue_0.SetNonNull(); |
| nonNullValue_1 = params.transitionTime.unsignedShortValue; |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)getSceneMembershipWithParams:(MTRScenesClusterGetSceneMembershipParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRScenesClusterGetSceneMembershipResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeScenesID, (unsigned int) MTRCommandIDTypeClusterScenesCommandGetSceneMembershipID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRScenesClusterGetSceneMembershipResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| ScenesClusterGetSceneMembershipResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRScenesClusterGetSceneMembershipResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Scenes::Commands::GetSceneMembership::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupID = params.groupID.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)enhancedAddSceneWithParams:(MTRScenesClusterEnhancedAddSceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRScenesClusterEnhancedAddSceneResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeScenesID, (unsigned int) MTRCommandIDTypeClusterScenesCommandEnhancedAddSceneID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRScenesClusterEnhancedAddSceneResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| ScenesClusterEnhancedAddSceneResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRScenesClusterEnhancedAddSceneResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Scenes::Commands::EnhancedAddScene::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupID = params.groupID.unsignedShortValue; |
| request.sceneID = params.sceneID.unsignedCharValue; |
| request.transitionTime = params.transitionTime.unsignedShortValue; |
| request.sceneName = [self asCharSpan:params.sceneName]; |
| { |
| using ListType_0 = std::remove_reference_t<decltype(request.extensionFieldSets)>; |
| using ListMemberType_0 = ListMemberTypeGetter<ListType_0>::Type; |
| if (params.extensionFieldSets.count != 0) { |
| auto * listHolder_0 = new ListHolder<ListMemberType_0>(params.extensionFieldSets.count); |
| if (listHolder_0 == nullptr || listHolder_0->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_0); |
| for (size_t i_0 = 0; i_0 < params.extensionFieldSets.count; ++i_0) { |
| if (![params.extensionFieldSets[i_0] isKindOfClass:[MTRScenesClusterExtensionFieldSet class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_0 = (MTRScenesClusterExtensionFieldSet *) params.extensionFieldSets[i_0]; |
| listHolder_0->mList[i_0].clusterID = element_0.clusterID.unsignedIntValue; |
| { |
| using ListType_2 = std::remove_reference_t<decltype(listHolder_0->mList[i_0].attributeValueList)>; |
| using ListMemberType_2 = ListMemberTypeGetter<ListType_2>::Type; |
| if (element_0.attributeValueList.count != 0) { |
| auto * listHolder_2 = new ListHolder<ListMemberType_2>(element_0.attributeValueList.count); |
| if (listHolder_2 == nullptr || listHolder_2->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_2); |
| for (size_t i_2 = 0; i_2 < element_0.attributeValueList.count; ++i_2) { |
| if (![element_0.attributeValueList[i_2] |
| isKindOfClass:[MTRScenesClusterAttributeValuePair class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_2 = (MTRScenesClusterAttributeValuePair *) element_0.attributeValueList[i_2]; |
| if (element_2.attributeID != nil) { |
| auto & definedValue_4 = listHolder_2->mList[i_2].attributeID.Emplace(); |
| definedValue_4 = element_2.attributeID.unsignedIntValue; |
| } |
| { |
| using ListType_4 |
| = std::remove_reference_t<decltype(listHolder_2->mList[i_2].attributeValue)>; |
| using ListMemberType_4 = ListMemberTypeGetter<ListType_4>::Type; |
| if (element_2.attributeValue.count != 0) { |
| auto * listHolder_4 |
| = new ListHolder<ListMemberType_4>(element_2.attributeValue.count); |
| if (listHolder_4 == nullptr || listHolder_4->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_4); |
| for (size_t i_4 = 0; i_4 < element_2.attributeValue.count; ++i_4) { |
| if (![element_2.attributeValue[i_4] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_4 = (NSNumber *) element_2.attributeValue[i_4]; |
| listHolder_4->mList[i_4] = element_4.unsignedCharValue; |
| } |
| listHolder_2->mList[i_2].attributeValue |
| = ListType_4(listHolder_4->mList, element_2.attributeValue.count); |
| } else { |
| listHolder_2->mList[i_2].attributeValue = ListType_4(); |
| } |
| } |
| } |
| listHolder_0->mList[i_0].attributeValueList |
| = ListType_2(listHolder_2->mList, element_0.attributeValueList.count); |
| } else { |
| listHolder_0->mList[i_0].attributeValueList = ListType_2(); |
| } |
| } |
| } |
| request.extensionFieldSets = ListType_0(listHolder_0->mList, params.extensionFieldSets.count); |
| } else { |
| request.extensionFieldSets = ListType_0(); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)enhancedViewSceneWithParams:(MTRScenesClusterEnhancedViewSceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRScenesClusterEnhancedViewSceneResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeScenesID, (unsigned int) MTRCommandIDTypeClusterScenesCommandEnhancedViewSceneID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRScenesClusterEnhancedViewSceneResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| ScenesClusterEnhancedViewSceneResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRScenesClusterEnhancedViewSceneResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Scenes::Commands::EnhancedViewScene::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupID = params.groupID.unsignedShortValue; |
| request.sceneID = params.sceneID.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)copySceneWithParams:(MTRScenesClusterCopySceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRScenesClusterCopySceneResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeScenesID, (unsigned int) MTRCommandIDTypeClusterScenesCommandCopySceneID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRScenesClusterCopySceneResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| ScenesClusterCopySceneResponseCallbackType successCb, MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRScenesClusterCopySceneResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Scenes::Commands::CopyScene::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.mode = static_cast<std::remove_reference_t<decltype(request.mode)>>(params.mode.unsignedCharValue); |
| request.groupIdentifierFrom = params.groupIdentifierFrom.unsignedShortValue; |
| request.sceneIdentifierFrom = params.sceneIdentifierFrom.unsignedCharValue; |
| request.groupIdentifierTo = params.groupIdentifierTo.unsignedShortValue; |
| request.sceneIdentifierTo = params.sceneIdentifierTo.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSceneCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeScenesID) |
| attributeID:@(MTRAttributeIDTypeClusterScenesAttributeSceneCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentSceneWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeScenesID) |
| attributeID:@(MTRAttributeIDTypeClusterScenesAttributeCurrentSceneID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentGroupWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeScenesID) |
| attributeID:@(MTRAttributeIDTypeClusterScenesAttributeCurrentGroupID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSceneValidWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeScenesID) |
| attributeID:@(MTRAttributeIDTypeClusterScenesAttributeSceneValidID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNameSupportWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeScenesID) |
| attributeID:@(MTRAttributeIDTypeClusterScenesAttributeNameSupportID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLastConfiguredByWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeScenesID) |
| attributeID:@(MTRAttributeIDTypeClusterScenesAttributeLastConfiguredByID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeScenesID) |
| attributeID:@(MTRAttributeIDTypeClusterScenesAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeScenesID) |
| attributeID:@(MTRAttributeIDTypeClusterScenesAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeScenesID) |
| attributeID:@(MTRAttributeIDTypeClusterScenesAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeScenesID) |
| attributeID:@(MTRAttributeIDTypeClusterScenesAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeScenesID) |
| attributeID:@(MTRAttributeIDTypeClusterScenesAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterScenes (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)addSceneWithParams:(MTRScenesClusterAddSceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRScenesClusterAddSceneResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self addSceneWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRScenesClusterAddSceneResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRScenesClusterAddSceneResponseParams *>(data), error); |
| }]; |
| } |
| - (void)viewSceneWithParams:(MTRScenesClusterViewSceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRScenesClusterViewSceneResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self viewSceneWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRScenesClusterViewSceneResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRScenesClusterViewSceneResponseParams *>(data), error); |
| }]; |
| } |
| - (void)removeSceneWithParams:(MTRScenesClusterRemoveSceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRScenesClusterRemoveSceneResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self removeSceneWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRScenesClusterRemoveSceneResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRScenesClusterRemoveSceneResponseParams *>(data), error); |
| }]; |
| } |
| - (void)removeAllScenesWithParams:(MTRScenesClusterRemoveAllScenesParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRScenesClusterRemoveAllScenesResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self removeAllScenesWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRScenesClusterRemoveAllScenesResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRScenesClusterRemoveAllScenesResponseParams *>(data), error); |
| }]; |
| } |
| - (void)storeSceneWithParams:(MTRScenesClusterStoreSceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRScenesClusterStoreSceneResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self storeSceneWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRScenesClusterStoreSceneResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRScenesClusterStoreSceneResponseParams *>(data), error); |
| }]; |
| } |
| - (void)recallSceneWithParams:(MTRScenesClusterRecallSceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self recallSceneWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)getSceneMembershipWithParams:(MTRScenesClusterGetSceneMembershipParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRScenesClusterGetSceneMembershipResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self getSceneMembershipWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRScenesClusterGetSceneMembershipResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRScenesClusterGetSceneMembershipResponseParams *>(data), error); |
| }]; |
| } |
| - (void)enhancedAddSceneWithParams:(MTRScenesClusterEnhancedAddSceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRScenesClusterEnhancedAddSceneResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self enhancedAddSceneWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRScenesClusterEnhancedAddSceneResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRScenesClusterEnhancedAddSceneResponseParams *>(data), error); |
| }]; |
| } |
| - (void)enhancedViewSceneWithParams:(MTRScenesClusterEnhancedViewSceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRScenesClusterEnhancedViewSceneResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self |
| enhancedViewSceneWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRScenesClusterEnhancedViewSceneResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRScenesClusterEnhancedViewSceneResponseParams *>(data), error); |
| }]; |
| } |
| - (void)copySceneWithParams:(MTRScenesClusterCopySceneParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRScenesClusterCopySceneResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self copySceneWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRScenesClusterCopySceneResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRScenesClusterCopySceneResponseParams *>(data), error); |
| }]; |
| } |
| @end |
| |
| @implementation MTRClusterOnOff |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)offWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self offWithParams:nil expectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs completion:completion]; |
| } |
| - (void)offWithParams:(MTROnOffClusterOffParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeOnOffID, (unsigned int) MTRCommandIDTypeClusterOnOffCommandOffID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OnOff::Commands::Off::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)onWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self onWithParams:nil expectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs completion:completion]; |
| } |
| - (void)onWithParams:(MTROnOffClusterOnParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeOnOffID, (unsigned int) MTRCommandIDTypeClusterOnOffCommandOnID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OnOff::Commands::On::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)toggleWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self toggleWithParams:nil expectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs completion:completion]; |
| } |
| - (void)toggleWithParams:(MTROnOffClusterToggleParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeOnOffID, (unsigned int) MTRCommandIDTypeClusterOnOffCommandToggleID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OnOff::Commands::Toggle::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)offWithEffectWithParams:(MTROnOffClusterOffWithEffectParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeOnOffID, (unsigned int) MTRCommandIDTypeClusterOnOffCommandOffWithEffectID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OnOff::Commands::OffWithEffect::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.effectIdentifier = static_cast<std::remove_reference_t<decltype(request.effectIdentifier)>>( |
| params.effectIdentifier.unsignedCharValue); |
| request.effectVariant |
| = static_cast<std::remove_reference_t<decltype(request.effectVariant)>>(params.effectVariant.unsignedCharValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)onWithRecallGlobalSceneWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self onWithRecallGlobalSceneWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)onWithRecallGlobalSceneWithParams:(MTROnOffClusterOnWithRecallGlobalSceneParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeOnOffID, |
| (unsigned int) MTRCommandIDTypeClusterOnOffCommandOnWithRecallGlobalSceneID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OnOff::Commands::OnWithRecallGlobalScene::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)onWithTimedOffWithParams:(MTROnOffClusterOnWithTimedOffParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeOnOffID, (unsigned int) MTRCommandIDTypeClusterOnOffCommandOnWithTimedOffID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OnOff::Commands::OnWithTimedOff::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.onOffControl |
| = static_cast<std::remove_reference_t<decltype(request.onOffControl)>>(params.onOffControl.unsignedCharValue); |
| request.onTime = params.onTime.unsignedShortValue; |
| request.offWaitTime = params.offWaitTime.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOnOffWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffAttributeOnOffID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGlobalSceneControlWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffAttributeGlobalSceneControlID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOnTimeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffAttributeOnTimeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOnTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOnTimeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOnTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffAttributeOnTimeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOffWaitTimeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffAttributeOffWaitTimeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOffWaitTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOffWaitTimeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOffWaitTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffAttributeOffWaitTimeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeStartUpOnOffWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffAttributeStartUpOnOffID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeStartUpOnOffWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeStartUpOnOffWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeStartUpOnOffWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffAttributeStartUpOnOffID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterOnOff (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)offWithParams:(MTROnOffClusterOffParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self offWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)offWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self offWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)onWithParams:(MTROnOffClusterOnParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self onWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)onWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self onWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)toggleWithParams:(MTROnOffClusterToggleParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self toggleWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)toggleWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self toggleWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)offWithEffectWithParams:(MTROnOffClusterOffWithEffectParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self offWithEffectWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)onWithRecallGlobalSceneWithParams:(MTROnOffClusterOnWithRecallGlobalSceneParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self onWithRecallGlobalSceneWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)onWithRecallGlobalSceneWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self onWithRecallGlobalSceneWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)onWithTimedOffWithParams:(MTROnOffClusterOnWithTimedOffParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self onWithTimedOffWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterOnOffSwitchConfiguration |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSwitchTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffSwitchConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffSwitchConfigurationAttributeSwitchTypeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSwitchActionsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffSwitchConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffSwitchConfigurationAttributeSwitchActionsID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeSwitchActionsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeSwitchActionsWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeSwitchActionsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffSwitchConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffSwitchConfigurationAttributeSwitchActionsID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffSwitchConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffSwitchConfigurationAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffSwitchConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffSwitchConfigurationAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffSwitchConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffSwitchConfigurationAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffSwitchConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffSwitchConfigurationAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOnOffSwitchConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterOnOffSwitchConfigurationAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterOnOffSwitchConfiguration (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterLevelControl |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)moveToLevelWithParams:(MTRLevelControlClusterMoveToLevelParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeLevelControlID, |
| (unsigned int) MTRCommandIDTypeClusterLevelControlCommandMoveToLevelID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| LevelControl::Commands::MoveToLevel::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.level = params.level.unsignedCharValue; |
| if (params.transitionTime == nil) { |
| request.transitionTime.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.transitionTime.SetNonNull(); |
| nonNullValue_0 = params.transitionTime.unsignedShortValue; |
| } |
| request.optionsMask |
| = static_cast<std::remove_reference_t<decltype(request.optionsMask)>>(params.optionsMask.unsignedCharValue); |
| request.optionsOverride = static_cast<std::remove_reference_t<decltype(request.optionsOverride)>>( |
| params.optionsOverride.unsignedCharValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)moveWithParams:(MTRLevelControlClusterMoveParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeLevelControlID, (unsigned int) MTRCommandIDTypeClusterLevelControlCommandMoveID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| LevelControl::Commands::Move::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.moveMode |
| = static_cast<std::remove_reference_t<decltype(request.moveMode)>>(params.moveMode.unsignedCharValue); |
| if (params.rate == nil) { |
| request.rate.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.rate.SetNonNull(); |
| nonNullValue_0 = params.rate.unsignedCharValue; |
| } |
| request.optionsMask |
| = static_cast<std::remove_reference_t<decltype(request.optionsMask)>>(params.optionsMask.unsignedCharValue); |
| request.optionsOverride = static_cast<std::remove_reference_t<decltype(request.optionsOverride)>>( |
| params.optionsOverride.unsignedCharValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)stepWithParams:(MTRLevelControlClusterStepParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeLevelControlID, (unsigned int) MTRCommandIDTypeClusterLevelControlCommandStepID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| LevelControl::Commands::Step::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.stepMode |
| = static_cast<std::remove_reference_t<decltype(request.stepMode)>>(params.stepMode.unsignedCharValue); |
| request.stepSize = params.stepSize.unsignedCharValue; |
| if (params.transitionTime == nil) { |
| request.transitionTime.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.transitionTime.SetNonNull(); |
| nonNullValue_0 = params.transitionTime.unsignedShortValue; |
| } |
| request.optionsMask |
| = static_cast<std::remove_reference_t<decltype(request.optionsMask)>>(params.optionsMask.unsignedCharValue); |
| request.optionsOverride = static_cast<std::remove_reference_t<decltype(request.optionsOverride)>>( |
| params.optionsOverride.unsignedCharValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)stopWithParams:(MTRLevelControlClusterStopParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeLevelControlID, (unsigned int) MTRCommandIDTypeClusterLevelControlCommandStopID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| LevelControl::Commands::Stop::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.optionsMask |
| = static_cast<std::remove_reference_t<decltype(request.optionsMask)>>(params.optionsMask.unsignedCharValue); |
| request.optionsOverride = static_cast<std::remove_reference_t<decltype(request.optionsOverride)>>( |
| params.optionsOverride.unsignedCharValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)moveToLevelWithOnOffWithParams:(MTRLevelControlClusterMoveToLevelWithOnOffParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeLevelControlID, |
| (unsigned int) MTRCommandIDTypeClusterLevelControlCommandMoveToLevelWithOnOffID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| LevelControl::Commands::MoveToLevelWithOnOff::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.level = params.level.unsignedCharValue; |
| if (params.transitionTime == nil) { |
| request.transitionTime.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.transitionTime.SetNonNull(); |
| nonNullValue_0 = params.transitionTime.unsignedShortValue; |
| } |
| request.optionsMask |
| = static_cast<std::remove_reference_t<decltype(request.optionsMask)>>(params.optionsMask.unsignedCharValue); |
| request.optionsOverride = static_cast<std::remove_reference_t<decltype(request.optionsOverride)>>( |
| params.optionsOverride.unsignedCharValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)moveWithOnOffWithParams:(MTRLevelControlClusterMoveWithOnOffParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeLevelControlID, |
| (unsigned int) MTRCommandIDTypeClusterLevelControlCommandMoveWithOnOffID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| LevelControl::Commands::MoveWithOnOff::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.moveMode |
| = static_cast<std::remove_reference_t<decltype(request.moveMode)>>(params.moveMode.unsignedCharValue); |
| if (params.rate == nil) { |
| request.rate.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.rate.SetNonNull(); |
| nonNullValue_0 = params.rate.unsignedCharValue; |
| } |
| request.optionsMask |
| = static_cast<std::remove_reference_t<decltype(request.optionsMask)>>(params.optionsMask.unsignedCharValue); |
| request.optionsOverride = static_cast<std::remove_reference_t<decltype(request.optionsOverride)>>( |
| params.optionsOverride.unsignedCharValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)stepWithOnOffWithParams:(MTRLevelControlClusterStepWithOnOffParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeLevelControlID, |
| (unsigned int) MTRCommandIDTypeClusterLevelControlCommandStepWithOnOffID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| LevelControl::Commands::StepWithOnOff::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.stepMode |
| = static_cast<std::remove_reference_t<decltype(request.stepMode)>>(params.stepMode.unsignedCharValue); |
| request.stepSize = params.stepSize.unsignedCharValue; |
| if (params.transitionTime == nil) { |
| request.transitionTime.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.transitionTime.SetNonNull(); |
| nonNullValue_0 = params.transitionTime.unsignedShortValue; |
| } |
| request.optionsMask |
| = static_cast<std::remove_reference_t<decltype(request.optionsMask)>>(params.optionsMask.unsignedCharValue); |
| request.optionsOverride = static_cast<std::remove_reference_t<decltype(request.optionsOverride)>>( |
| params.optionsOverride.unsignedCharValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)stopWithOnOffWithParams:(MTRLevelControlClusterStopWithOnOffParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeLevelControlID, |
| (unsigned int) MTRCommandIDTypeClusterLevelControlCommandStopWithOnOffID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| LevelControl::Commands::StopWithOnOff::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.optionsMask |
| = static_cast<std::remove_reference_t<decltype(request.optionsMask)>>(params.optionsMask.unsignedCharValue); |
| request.optionsOverride = static_cast<std::remove_reference_t<decltype(request.optionsOverride)>>( |
| params.optionsOverride.unsignedCharValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)moveToClosestFrequencyWithParams:(MTRLevelControlClusterMoveToClosestFrequencyParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeLevelControlID, |
| (unsigned int) MTRCommandIDTypeClusterLevelControlCommandMoveToClosestFrequencyID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| LevelControl::Commands::MoveToClosestFrequency::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.frequency = params.frequency.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentLevelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeCurrentLevelID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRemainingTimeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeRemainingTimeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinLevelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeMinLevelID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxLevelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeMaxLevelID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentFrequencyWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeCurrentFrequencyID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinFrequencyWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeMinFrequencyID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxFrequencyWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeMaxFrequencyID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOptionsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeOptionsID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOptionsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOptionsWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOptionsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeOptionsID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOnOffTransitionTimeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeOnOffTransitionTimeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOnOffTransitionTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOnOffTransitionTimeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOnOffTransitionTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeOnOffTransitionTimeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOnLevelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeOnLevelID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOnLevelWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOnLevelWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOnLevelWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeOnLevelID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOnTransitionTimeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeOnTransitionTimeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOnTransitionTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOnTransitionTimeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOnTransitionTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeOnTransitionTimeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOffTransitionTimeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeOffTransitionTimeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOffTransitionTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOffTransitionTimeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOffTransitionTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeOffTransitionTimeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDefaultMoveRateWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeDefaultMoveRateID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeDefaultMoveRateWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeDefaultMoveRateWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeDefaultMoveRateWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeDefaultMoveRateID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeStartUpCurrentLevelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeStartUpCurrentLevelID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeStartUpCurrentLevelWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeStartUpCurrentLevelWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeStartUpCurrentLevelWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeStartUpCurrentLevelID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLevelControlID) |
| attributeID:@(MTRAttributeIDTypeClusterLevelControlAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterLevelControl (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)moveToLevelWithParams:(MTRLevelControlClusterMoveToLevelParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self moveToLevelWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)moveWithParams:(MTRLevelControlClusterMoveParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self moveWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)stepWithParams:(MTRLevelControlClusterStepParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self stepWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)stopWithParams:(MTRLevelControlClusterStopParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self stopWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)moveToLevelWithOnOffWithParams:(MTRLevelControlClusterMoveToLevelWithOnOffParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self moveToLevelWithOnOffWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)moveWithOnOffWithParams:(MTRLevelControlClusterMoveWithOnOffParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self moveWithOnOffWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)stepWithOnOffWithParams:(MTRLevelControlClusterStepWithOnOffParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self stepWithOnOffWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)stopWithOnOffWithParams:(MTRLevelControlClusterStopWithOnOffParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self stopWithOnOffWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)moveToClosestFrequencyWithParams:(MTRLevelControlClusterMoveToClosestFrequencyParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self moveToClosestFrequencyWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterBinaryInputBasic |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActiveTextWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeActiveTextID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeActiveTextWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeActiveTextWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeActiveTextWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeActiveTextID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDescriptionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeDescriptionID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeDescriptionWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeDescriptionWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeDescriptionWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeDescriptionID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInactiveTextWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeInactiveTextID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInactiveTextWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInactiveTextWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInactiveTextWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeInactiveTextID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOutOfServiceWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeOutOfServiceID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOutOfServiceWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOutOfServiceWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOutOfServiceWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeOutOfServiceID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePolarityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributePolarityID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePresentValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributePresentValueID) |
| params:params]; |
| } |
| |
| - (void)writeAttributePresentValueWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributePresentValueWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributePresentValueWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributePresentValueID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeReliabilityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeReliabilityID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeReliabilityWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeReliabilityWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeReliabilityWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeReliabilityID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeStatusFlagsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeStatusFlagsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeApplicationTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeApplicationTypeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBinaryInputBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterBinaryInputBasicAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterBinaryInputBasic (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterDescriptor |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDeviceTypeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDescriptorID) |
| attributeID:@(MTRAttributeIDTypeClusterDescriptorAttributeDeviceTypeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeServerListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDescriptorID) |
| attributeID:@(MTRAttributeIDTypeClusterDescriptorAttributeServerListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClientListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDescriptorID) |
| attributeID:@(MTRAttributeIDTypeClusterDescriptorAttributeClientListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePartsListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDescriptorID) |
| attributeID:@(MTRAttributeIDTypeClusterDescriptorAttributePartsListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDescriptorID) |
| attributeID:@(MTRAttributeIDTypeClusterDescriptorAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDescriptorID) |
| attributeID:@(MTRAttributeIDTypeClusterDescriptorAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDescriptorID) |
| attributeID:@(MTRAttributeIDTypeClusterDescriptorAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDescriptorID) |
| attributeID:@(MTRAttributeIDTypeClusterDescriptorAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDescriptorID) |
| attributeID:@(MTRAttributeIDTypeClusterDescriptorAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterDescriptor (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDeviceListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self readAttributeDeviceTypeListWithParams:params]; |
| } |
| @end |
| |
| @implementation MTRClusterBinding |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBindingWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBindingID) |
| attributeID:@(MTRAttributeIDTypeClusterBindingAttributeBindingID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeBindingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeBindingWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeBindingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBindingID) |
| attributeID:@(MTRAttributeIDTypeClusterBindingAttributeBindingID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBindingID) |
| attributeID:@(MTRAttributeIDTypeClusterBindingAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBindingID) |
| attributeID:@(MTRAttributeIDTypeClusterBindingAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBindingID) |
| attributeID:@(MTRAttributeIDTypeClusterBindingAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBindingID) |
| attributeID:@(MTRAttributeIDTypeClusterBindingAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBindingID) |
| attributeID:@(MTRAttributeIDTypeClusterBindingAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterBinding (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterAccessControl |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeACLWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccessControlID) |
| attributeID:@(MTRAttributeIDTypeClusterAccessControlAttributeACLID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeACLWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeACLWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeACLWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccessControlID) |
| attributeID:@(MTRAttributeIDTypeClusterAccessControlAttributeACLID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeExtensionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccessControlID) |
| attributeID:@(MTRAttributeIDTypeClusterAccessControlAttributeExtensionID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeExtensionWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeExtensionWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeExtensionWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccessControlID) |
| attributeID:@(MTRAttributeIDTypeClusterAccessControlAttributeExtensionID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSubjectsPerAccessControlEntryWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccessControlID) |
| attributeID:@(MTRAttributeIDTypeClusterAccessControlAttributeSubjectsPerAccessControlEntryID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTargetsPerAccessControlEntryWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccessControlID) |
| attributeID:@(MTRAttributeIDTypeClusterAccessControlAttributeTargetsPerAccessControlEntryID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAccessControlEntriesPerFabricWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccessControlID) |
| attributeID:@(MTRAttributeIDTypeClusterAccessControlAttributeAccessControlEntriesPerFabricID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccessControlID) |
| attributeID:@(MTRAttributeIDTypeClusterAccessControlAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccessControlID) |
| attributeID:@(MTRAttributeIDTypeClusterAccessControlAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccessControlID) |
| attributeID:@(MTRAttributeIDTypeClusterAccessControlAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccessControlID) |
| attributeID:@(MTRAttributeIDTypeClusterAccessControlAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccessControlID) |
| attributeID:@(MTRAttributeIDTypeClusterAccessControlAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterAccessControl (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAclWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self readAttributeACLWithParams:params]; |
| } |
| - (void)writeAttributeAclWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeACLWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs]; |
| } |
| - (void)writeAttributeAclWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| [self writeAttributeACLWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:params]; |
| } |
| @end |
| |
| @implementation MTRClusterActions |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)instantActionWithParams:(MTRActionsClusterInstantActionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeActionsID, (unsigned int) MTRCommandIDTypeClusterActionsCommandInstantActionID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Actions::Commands::InstantAction::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.actionID = params.actionID.unsignedShortValue; |
| if (params.invokeID != nil) { |
| auto & definedValue_0 = request.invokeID.Emplace(); |
| definedValue_0 = params.invokeID.unsignedIntValue; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)instantActionWithTransitionWithParams:(MTRActionsClusterInstantActionWithTransitionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeActionsID, |
| (unsigned int) MTRCommandIDTypeClusterActionsCommandInstantActionWithTransitionID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Actions::Commands::InstantActionWithTransition::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.actionID = params.actionID.unsignedShortValue; |
| if (params.invokeID != nil) { |
| auto & definedValue_0 = request.invokeID.Emplace(); |
| definedValue_0 = params.invokeID.unsignedIntValue; |
| } |
| request.transitionTime = params.transitionTime.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)startActionWithParams:(MTRActionsClusterStartActionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeActionsID, (unsigned int) MTRCommandIDTypeClusterActionsCommandStartActionID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Actions::Commands::StartAction::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.actionID = params.actionID.unsignedShortValue; |
| if (params.invokeID != nil) { |
| auto & definedValue_0 = request.invokeID.Emplace(); |
| definedValue_0 = params.invokeID.unsignedIntValue; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)startActionWithDurationWithParams:(MTRActionsClusterStartActionWithDurationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeActionsID, |
| (unsigned int) MTRCommandIDTypeClusterActionsCommandStartActionWithDurationID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Actions::Commands::StartActionWithDuration::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.actionID = params.actionID.unsignedShortValue; |
| if (params.invokeID != nil) { |
| auto & definedValue_0 = request.invokeID.Emplace(); |
| definedValue_0 = params.invokeID.unsignedIntValue; |
| } |
| request.duration = params.duration.unsignedIntValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)stopActionWithParams:(MTRActionsClusterStopActionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeActionsID, (unsigned int) MTRCommandIDTypeClusterActionsCommandStopActionID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Actions::Commands::StopAction::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.actionID = params.actionID.unsignedShortValue; |
| if (params.invokeID != nil) { |
| auto & definedValue_0 = request.invokeID.Emplace(); |
| definedValue_0 = params.invokeID.unsignedIntValue; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)pauseActionWithParams:(MTRActionsClusterPauseActionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeActionsID, (unsigned int) MTRCommandIDTypeClusterActionsCommandPauseActionID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Actions::Commands::PauseAction::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.actionID = params.actionID.unsignedShortValue; |
| if (params.invokeID != nil) { |
| auto & definedValue_0 = request.invokeID.Emplace(); |
| definedValue_0 = params.invokeID.unsignedIntValue; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)pauseActionWithDurationWithParams:(MTRActionsClusterPauseActionWithDurationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeActionsID, |
| (unsigned int) MTRCommandIDTypeClusterActionsCommandPauseActionWithDurationID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Actions::Commands::PauseActionWithDuration::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.actionID = params.actionID.unsignedShortValue; |
| if (params.invokeID != nil) { |
| auto & definedValue_0 = request.invokeID.Emplace(); |
| definedValue_0 = params.invokeID.unsignedIntValue; |
| } |
| request.duration = params.duration.unsignedIntValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)resumeActionWithParams:(MTRActionsClusterResumeActionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeActionsID, (unsigned int) MTRCommandIDTypeClusterActionsCommandResumeActionID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Actions::Commands::ResumeAction::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.actionID = params.actionID.unsignedShortValue; |
| if (params.invokeID != nil) { |
| auto & definedValue_0 = request.invokeID.Emplace(); |
| definedValue_0 = params.invokeID.unsignedIntValue; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)enableActionWithParams:(MTRActionsClusterEnableActionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeActionsID, (unsigned int) MTRCommandIDTypeClusterActionsCommandEnableActionID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Actions::Commands::EnableAction::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.actionID = params.actionID.unsignedShortValue; |
| if (params.invokeID != nil) { |
| auto & definedValue_0 = request.invokeID.Emplace(); |
| definedValue_0 = params.invokeID.unsignedIntValue; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)enableActionWithDurationWithParams:(MTRActionsClusterEnableActionWithDurationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeActionsID, |
| (unsigned int) MTRCommandIDTypeClusterActionsCommandEnableActionWithDurationID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Actions::Commands::EnableActionWithDuration::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.actionID = params.actionID.unsignedShortValue; |
| if (params.invokeID != nil) { |
| auto & definedValue_0 = request.invokeID.Emplace(); |
| definedValue_0 = params.invokeID.unsignedIntValue; |
| } |
| request.duration = params.duration.unsignedIntValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)disableActionWithParams:(MTRActionsClusterDisableActionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeActionsID, (unsigned int) MTRCommandIDTypeClusterActionsCommandDisableActionID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Actions::Commands::DisableAction::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.actionID = params.actionID.unsignedShortValue; |
| if (params.invokeID != nil) { |
| auto & definedValue_0 = request.invokeID.Emplace(); |
| definedValue_0 = params.invokeID.unsignedIntValue; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)disableActionWithDurationWithParams:(MTRActionsClusterDisableActionWithDurationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeActionsID, |
| (unsigned int) MTRCommandIDTypeClusterActionsCommandDisableActionWithDurationID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Actions::Commands::DisableActionWithDuration::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.actionID = params.actionID.unsignedShortValue; |
| if (params.invokeID != nil) { |
| auto & definedValue_0 = request.invokeID.Emplace(); |
| definedValue_0 = params.invokeID.unsignedIntValue; |
| } |
| request.duration = params.duration.unsignedIntValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActionListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeActionsID) |
| attributeID:@(MTRAttributeIDTypeClusterActionsAttributeActionListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEndpointListsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeActionsID) |
| attributeID:@(MTRAttributeIDTypeClusterActionsAttributeEndpointListsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSetupURLWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeActionsID) |
| attributeID:@(MTRAttributeIDTypeClusterActionsAttributeSetupURLID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeActionsID) |
| attributeID:@(MTRAttributeIDTypeClusterActionsAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeActionsID) |
| attributeID:@(MTRAttributeIDTypeClusterActionsAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeActionsID) |
| attributeID:@(MTRAttributeIDTypeClusterActionsAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeActionsID) |
| attributeID:@(MTRAttributeIDTypeClusterActionsAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeActionsID) |
| attributeID:@(MTRAttributeIDTypeClusterActionsAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterActions (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)instantActionWithParams:(MTRActionsClusterInstantActionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self instantActionWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)instantActionWithTransitionWithParams:(MTRActionsClusterInstantActionWithTransitionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self instantActionWithTransitionWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)startActionWithParams:(MTRActionsClusterStartActionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self startActionWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)startActionWithDurationWithParams:(MTRActionsClusterStartActionWithDurationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self startActionWithDurationWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)stopActionWithParams:(MTRActionsClusterStopActionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self stopActionWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)pauseActionWithParams:(MTRActionsClusterPauseActionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self pauseActionWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)pauseActionWithDurationWithParams:(MTRActionsClusterPauseActionWithDurationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self pauseActionWithDurationWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)resumeActionWithParams:(MTRActionsClusterResumeActionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self resumeActionWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)enableActionWithParams:(MTRActionsClusterEnableActionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self enableActionWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)enableActionWithDurationWithParams:(MTRActionsClusterEnableActionWithDurationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self enableActionWithDurationWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)disableActionWithParams:(MTRActionsClusterDisableActionParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self disableActionWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)disableActionWithDurationWithParams:(MTRActionsClusterDisableActionWithDurationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self disableActionWithDurationWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterBasicInformation |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)mfgSpecificPingWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self mfgSpecificPingWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)mfgSpecificPingWithParams:(MTRBasicClusterMfgSpecificPingParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) 0x00000028, (unsigned int) 0x10020000]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| BasicInformation::Commands::MfgSpecificPing::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDataModelRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeDataModelRevisionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeVendorNameWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeVendorNameID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeVendorIDWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeVendorIDID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeProductNameWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeProductNameID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeProductIDWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeProductIDID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNodeLabelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeNodeLabelID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNodeLabelWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNodeLabelWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNodeLabelWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeNodeLabelID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLocationWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeLocationID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLocationWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLocationWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeLocationWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeLocationID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeHardwareVersionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeHardwareVersionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeHardwareVersionStringWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeHardwareVersionStringID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSoftwareVersionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeSoftwareVersionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSoftwareVersionStringWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeSoftwareVersionStringID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeManufacturingDateWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeManufacturingDateID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePartNumberWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributePartNumberID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeProductURLWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeProductURLID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeProductLabelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeProductLabelID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSerialNumberWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeSerialNumberID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLocalConfigDisabledWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeLocalConfigDisabledID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLocalConfigDisabledWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLocalConfigDisabledWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeLocalConfigDisabledWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeLocalConfigDisabledID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeReachableWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeReachableID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUniqueIDWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeUniqueIDID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCapabilityMinimaWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeCapabilityMinimaID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBasicInformationAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| @implementation MTRClusterBasic |
| @end |
| |
| @implementation MTRClusterBasic (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)mfgSpecificPingWithParams:(MTRBasicClusterMfgSpecificPingParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self mfgSpecificPingWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)mfgSpecificPingWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self mfgSpecificPingWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterOTASoftwareUpdateProvider |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)queryImageWithParams:(MTROTASoftwareUpdateProviderClusterQueryImageParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTROTASoftwareUpdateProviderClusterQueryImageResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeOTASoftwareUpdateProviderID, |
| (unsigned int) MTRCommandIDTypeClusterOTASoftwareUpdateProviderCommandQueryImageID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTROTASoftwareUpdateProviderClusterQueryImageResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| OTASoftwareUpdateProviderClusterQueryImageResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTROTASoftwareUpdateProviderClusterQueryImageResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OtaSoftwareUpdateProvider::Commands::QueryImage::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.vendorID |
| = static_cast<std::remove_reference_t<decltype(request.vendorID)>>(params.vendorID.unsignedShortValue); |
| request.productID = params.productID.unsignedShortValue; |
| request.softwareVersion = params.softwareVersion.unsignedIntValue; |
| { |
| using ListType_0 = std::remove_reference_t<decltype(request.protocolsSupported)>; |
| using ListMemberType_0 = ListMemberTypeGetter<ListType_0>::Type; |
| if (params.protocolsSupported.count != 0) { |
| auto * listHolder_0 = new ListHolder<ListMemberType_0>(params.protocolsSupported.count); |
| if (listHolder_0 == nullptr || listHolder_0->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_0); |
| for (size_t i_0 = 0; i_0 < params.protocolsSupported.count; ++i_0) { |
| if (![params.protocolsSupported[i_0] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_0 = (NSNumber *) params.protocolsSupported[i_0]; |
| listHolder_0->mList[i_0] = static_cast<std::remove_reference_t<decltype(listHolder_0->mList[i_0])>>( |
| element_0.unsignedCharValue); |
| } |
| request.protocolsSupported = ListType_0(listHolder_0->mList, params.protocolsSupported.count); |
| } else { |
| request.protocolsSupported = ListType_0(); |
| } |
| } |
| if (params.hardwareVersion != nil) { |
| auto & definedValue_0 = request.hardwareVersion.Emplace(); |
| definedValue_0 = params.hardwareVersion.unsignedShortValue; |
| } |
| if (params.location != nil) { |
| auto & definedValue_0 = request.location.Emplace(); |
| definedValue_0 = [self asCharSpan:params.location]; |
| } |
| if (params.requestorCanConsent != nil) { |
| auto & definedValue_0 = request.requestorCanConsent.Emplace(); |
| definedValue_0 = params.requestorCanConsent.boolValue; |
| } |
| if (params.metadataForProvider != nil) { |
| auto & definedValue_0 = request.metadataForProvider.Emplace(); |
| definedValue_0 = [self asByteSpan:params.metadataForProvider]; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)applyUpdateRequestWithParams:(MTROTASoftwareUpdateProviderClusterApplyUpdateRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTROTASoftwareUpdateProviderClusterApplyUpdateResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeOTASoftwareUpdateProviderID, |
| (unsigned int) MTRCommandIDTypeClusterOTASoftwareUpdateProviderCommandApplyUpdateRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTROTASoftwareUpdateProviderClusterApplyUpdateResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| OTASoftwareUpdateProviderClusterApplyUpdateResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTROTASoftwareUpdateProviderClusterApplyUpdateResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OtaSoftwareUpdateProvider::Commands::ApplyUpdateRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.updateToken = [self asByteSpan:params.updateToken]; |
| request.newVersion = params.newVersion.unsignedIntValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)notifyUpdateAppliedWithParams:(MTROTASoftwareUpdateProviderClusterNotifyUpdateAppliedParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeOTASoftwareUpdateProviderID, |
| (unsigned int) MTRCommandIDTypeClusterOTASoftwareUpdateProviderCommandNotifyUpdateAppliedID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OtaSoftwareUpdateProvider::Commands::NotifyUpdateApplied::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.updateToken = [self asByteSpan:params.updateToken]; |
| request.softwareVersion = params.softwareVersion.unsignedIntValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOTASoftwareUpdateProviderID) |
| attributeID:@(MTRAttributeIDTypeClusterOTASoftwareUpdateProviderAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOTASoftwareUpdateProviderID) |
| attributeID:@(MTRAttributeIDTypeClusterOTASoftwareUpdateProviderAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOTASoftwareUpdateProviderID) |
| attributeID:@(MTRAttributeIDTypeClusterOTASoftwareUpdateProviderAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOTASoftwareUpdateProviderID) |
| attributeID:@(MTRAttributeIDTypeClusterOTASoftwareUpdateProviderAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOTASoftwareUpdateProviderID) |
| attributeID:@(MTRAttributeIDTypeClusterOTASoftwareUpdateProviderAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| @implementation MTRClusterOtaSoftwareUpdateProvider |
| @end |
| |
| @implementation MTRClusterOtaSoftwareUpdateProvider (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)queryImageWithParams:(MTROtaSoftwareUpdateProviderClusterQueryImageParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTROtaSoftwareUpdateProviderClusterQueryImageResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self queryImageWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTROTASoftwareUpdateProviderClusterQueryImageResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTROtaSoftwareUpdateProviderClusterQueryImageResponseParams *>(data), error); |
| }]; |
| } |
| - (void)applyUpdateRequestWithParams:(MTROtaSoftwareUpdateProviderClusterApplyUpdateRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTROtaSoftwareUpdateProviderClusterApplyUpdateResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self applyUpdateRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTROTASoftwareUpdateProviderClusterApplyUpdateResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTROtaSoftwareUpdateProviderClusterApplyUpdateResponseParams *>(data), error); |
| }]; |
| } |
| - (void)notifyUpdateAppliedWithParams:(MTROtaSoftwareUpdateProviderClusterNotifyUpdateAppliedParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self notifyUpdateAppliedWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterOTASoftwareUpdateRequestor |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)announceOTAProviderWithParams:(MTROTASoftwareUpdateRequestorClusterAnnounceOTAProviderParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeOTASoftwareUpdateRequestorID, |
| (unsigned int) MTRCommandIDTypeClusterOTASoftwareUpdateRequestorCommandAnnounceOTAProviderID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OtaSoftwareUpdateRequestor::Commands::AnnounceOTAProvider::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.providerNodeID = params.providerNodeID.unsignedLongLongValue; |
| request.vendorID |
| = static_cast<std::remove_reference_t<decltype(request.vendorID)>>(params.vendorID.unsignedShortValue); |
| request.announcementReason = static_cast<std::remove_reference_t<decltype(request.announcementReason)>>( |
| params.announcementReason.unsignedCharValue); |
| if (params.metadataForNode != nil) { |
| auto & definedValue_0 = request.metadataForNode.Emplace(); |
| definedValue_0 = [self asByteSpan:params.metadataForNode]; |
| } |
| request.endpoint = params.endpoint.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDefaultOTAProvidersWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOTASoftwareUpdateRequestorID) |
| attributeID:@(MTRAttributeIDTypeClusterOTASoftwareUpdateRequestorAttributeDefaultOTAProvidersID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeDefaultOTAProvidersWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeDefaultOTAProvidersWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeDefaultOTAProvidersWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOTASoftwareUpdateRequestorID) |
| attributeID:@(MTRAttributeIDTypeClusterOTASoftwareUpdateRequestorAttributeDefaultOTAProvidersID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUpdatePossibleWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOTASoftwareUpdateRequestorID) |
| attributeID:@(MTRAttributeIDTypeClusterOTASoftwareUpdateRequestorAttributeUpdatePossibleID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUpdateStateWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOTASoftwareUpdateRequestorID) |
| attributeID:@(MTRAttributeIDTypeClusterOTASoftwareUpdateRequestorAttributeUpdateStateID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUpdateStateProgressWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOTASoftwareUpdateRequestorID) |
| attributeID:@(MTRAttributeIDTypeClusterOTASoftwareUpdateRequestorAttributeUpdateStateProgressID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOTASoftwareUpdateRequestorID) |
| attributeID:@(MTRAttributeIDTypeClusterOTASoftwareUpdateRequestorAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOTASoftwareUpdateRequestorID) |
| attributeID:@(MTRAttributeIDTypeClusterOTASoftwareUpdateRequestorAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOTASoftwareUpdateRequestorID) |
| attributeID:@(MTRAttributeIDTypeClusterOTASoftwareUpdateRequestorAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOTASoftwareUpdateRequestorID) |
| attributeID:@(MTRAttributeIDTypeClusterOTASoftwareUpdateRequestorAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOTASoftwareUpdateRequestorID) |
| attributeID:@(MTRAttributeIDTypeClusterOTASoftwareUpdateRequestorAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| @implementation MTRClusterOtaSoftwareUpdateRequestor |
| @end |
| |
| @implementation MTRClusterOtaSoftwareUpdateRequestor (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)announceOtaProviderWithParams:(MTROtaSoftwareUpdateRequestorClusterAnnounceOtaProviderParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self announceOTAProviderWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (NSDictionary<NSString *, id> *)readAttributeDefaultOtaProvidersWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self readAttributeDefaultOTAProvidersWithParams:params]; |
| } |
| - (void)writeAttributeDefaultOtaProvidersWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeDefaultOTAProvidersWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs]; |
| } |
| - (void)writeAttributeDefaultOtaProvidersWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| [self writeAttributeDefaultOTAProvidersWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:params]; |
| } |
| @end |
| |
| @implementation MTRClusterLocalizationConfiguration |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActiveLocaleWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLocalizationConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterLocalizationConfigurationAttributeActiveLocaleID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeActiveLocaleWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeActiveLocaleWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeActiveLocaleWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLocalizationConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterLocalizationConfigurationAttributeActiveLocaleID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSupportedLocalesWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLocalizationConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterLocalizationConfigurationAttributeSupportedLocalesID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLocalizationConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterLocalizationConfigurationAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLocalizationConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterLocalizationConfigurationAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLocalizationConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterLocalizationConfigurationAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLocalizationConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterLocalizationConfigurationAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLocalizationConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterLocalizationConfigurationAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterLocalizationConfiguration (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterTimeFormatLocalization |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeHourFormatWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTimeFormatLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterTimeFormatLocalizationAttributeHourFormatID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeHourFormatWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeHourFormatWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeHourFormatWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTimeFormatLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterTimeFormatLocalizationAttributeHourFormatID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActiveCalendarTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTimeFormatLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterTimeFormatLocalizationAttributeActiveCalendarTypeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeActiveCalendarTypeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeActiveCalendarTypeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeActiveCalendarTypeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTimeFormatLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterTimeFormatLocalizationAttributeActiveCalendarTypeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSupportedCalendarTypesWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTimeFormatLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterTimeFormatLocalizationAttributeSupportedCalendarTypesID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTimeFormatLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterTimeFormatLocalizationAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTimeFormatLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterTimeFormatLocalizationAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTimeFormatLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterTimeFormatLocalizationAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTimeFormatLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterTimeFormatLocalizationAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTimeFormatLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterTimeFormatLocalizationAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterTimeFormatLocalization (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterUnitLocalization |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTemperatureUnitWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitLocalizationAttributeTemperatureUnitID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeTemperatureUnitWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeTemperatureUnitWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeTemperatureUnitWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitLocalizationAttributeTemperatureUnitID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitLocalizationAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitLocalizationAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitLocalizationAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitLocalizationAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitLocalizationID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitLocalizationAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterUnitLocalization (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterPowerSourceConfiguration |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSourcesWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceConfigurationAttributeSourcesID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceConfigurationAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceConfigurationAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceConfigurationAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceConfigurationAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceConfigurationAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterPowerSourceConfiguration (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterPowerSource |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeStatusWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeStatusID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOrderWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeOrderID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDescriptionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeDescriptionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWiredAssessedInputVoltageWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeWiredAssessedInputVoltageID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWiredAssessedInputFrequencyWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeWiredAssessedInputFrequencyID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWiredCurrentTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeWiredCurrentTypeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWiredAssessedCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeWiredAssessedCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWiredNominalVoltageWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeWiredNominalVoltageID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWiredMaximumCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeWiredMaximumCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWiredPresentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeWiredPresentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActiveWiredFaultsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeActiveWiredFaultsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatVoltageWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatVoltageID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatPercentRemainingWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatPercentRemainingID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatTimeRemainingWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatTimeRemainingID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatChargeLevelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatChargeLevelID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatReplacementNeededWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatReplacementNeededID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatReplaceabilityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatReplaceabilityID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatPresentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatPresentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActiveBatFaultsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeActiveBatFaultsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatReplacementDescriptionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatReplacementDescriptionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatCommonDesignationWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatCommonDesignationID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatANSIDesignationWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatANSIDesignationID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatIECDesignationWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatIECDesignationID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatApprovedChemistryWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatApprovedChemistryID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatCapacityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatCapacityID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatQuantityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatQuantityID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatChargeStateWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatChargeStateID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatTimeToFullChargeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatTimeToFullChargeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatFunctionalWhileChargingWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatFunctionalWhileChargingID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBatChargingCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeBatChargingCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActiveBatChargeFaultsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeActiveBatChargeFaultsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePowerSourceID) |
| attributeID:@(MTRAttributeIDTypeClusterPowerSourceAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterPowerSource (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterGeneralCommissioning |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)armFailSafeWithParams:(MTRGeneralCommissioningClusterArmFailSafeParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRGeneralCommissioningClusterArmFailSafeResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeGeneralCommissioningID, |
| (unsigned int) MTRCommandIDTypeClusterGeneralCommissioningCommandArmFailSafeID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRGeneralCommissioningClusterArmFailSafeResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| GeneralCommissioningClusterArmFailSafeResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRGeneralCommissioningClusterArmFailSafeResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| GeneralCommissioning::Commands::ArmFailSafe::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.expiryLengthSeconds = params.expiryLengthSeconds.unsignedShortValue; |
| request.breadcrumb = params.breadcrumb.unsignedLongLongValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)setRegulatoryConfigWithParams:(MTRGeneralCommissioningClusterSetRegulatoryConfigParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRGeneralCommissioningClusterSetRegulatoryConfigResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeGeneralCommissioningID, |
| (unsigned int) MTRCommandIDTypeClusterGeneralCommissioningCommandSetRegulatoryConfigID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRGeneralCommissioningClusterSetRegulatoryConfigResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| GeneralCommissioningClusterSetRegulatoryConfigResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRGeneralCommissioningClusterSetRegulatoryConfigResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| GeneralCommissioning::Commands::SetRegulatoryConfig::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.newRegulatoryConfig = static_cast<std::remove_reference_t<decltype(request.newRegulatoryConfig)>>( |
| params.newRegulatoryConfig.unsignedCharValue); |
| request.countryCode = [self asCharSpan:params.countryCode]; |
| request.breadcrumb = params.breadcrumb.unsignedLongLongValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)commissioningCompleteWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)( |
| MTRGeneralCommissioningClusterCommissioningCompleteResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| [self commissioningCompleteWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)commissioningCompleteWithParams:(MTRGeneralCommissioningClusterCommissioningCompleteParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRGeneralCommissioningClusterCommissioningCompleteResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeGeneralCommissioningID, |
| (unsigned int) MTRCommandIDTypeClusterGeneralCommissioningCommandCommissioningCompleteID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRGeneralCommissioningClusterCommissioningCompleteResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| GeneralCommissioningClusterCommissioningCompleteResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge |
| = static_cast<MTRGeneralCommissioningClusterCommissioningCompleteResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| GeneralCommissioning::Commands::CommissioningComplete::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBreadcrumbWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralCommissioningAttributeBreadcrumbID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeBreadcrumbWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeBreadcrumbWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeBreadcrumbWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralCommissioningAttributeBreadcrumbID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBasicCommissioningInfoWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralCommissioningAttributeBasicCommissioningInfoID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRegulatoryConfigWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralCommissioningAttributeRegulatoryConfigID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLocationCapabilityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralCommissioningAttributeLocationCapabilityID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSupportsConcurrentConnectionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralCommissioningAttributeSupportsConcurrentConnectionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralCommissioningAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralCommissioningAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralCommissioningAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralCommissioningAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralCommissioningAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterGeneralCommissioning (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)armFailSafeWithParams:(MTRGeneralCommissioningClusterArmFailSafeParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRGeneralCommissioningClusterArmFailSafeResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self armFailSafeWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRGeneralCommissioningClusterArmFailSafeResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRGeneralCommissioningClusterArmFailSafeResponseParams *>(data), error); |
| }]; |
| } |
| - (void)setRegulatoryConfigWithParams:(MTRGeneralCommissioningClusterSetRegulatoryConfigParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRGeneralCommissioningClusterSetRegulatoryConfigResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self setRegulatoryConfigWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRGeneralCommissioningClusterSetRegulatoryConfigResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTRGeneralCommissioningClusterSetRegulatoryConfigResponseParams *>(data), error); |
| }]; |
| } |
| - (void)commissioningCompleteWithParams:(MTRGeneralCommissioningClusterCommissioningCompleteParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRGeneralCommissioningClusterCommissioningCompleteResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self |
| commissioningCompleteWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRGeneralCommissioningClusterCommissioningCompleteResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTRGeneralCommissioningClusterCommissioningCompleteResponseParams *>(data), error); |
| }]; |
| } |
| - (void)commissioningCompleteWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRGeneralCommissioningClusterCommissioningCompleteResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self commissioningCompleteWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterNetworkCommissioning |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)scanNetworksWithParams:(MTRNetworkCommissioningClusterScanNetworksParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRNetworkCommissioningClusterScanNetworksResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeNetworkCommissioningID, |
| (unsigned int) MTRCommandIDTypeClusterNetworkCommissioningCommandScanNetworksID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRNetworkCommissioningClusterScanNetworksResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| NetworkCommissioningClusterScanNetworksResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRNetworkCommissioningClusterScanNetworksResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| NetworkCommissioning::Commands::ScanNetworks::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (params != nil) { |
| if (params.ssid != nil) { |
| auto & definedValue_0 = request.ssid.Emplace(); |
| if (params.ssid == nil) { |
| definedValue_0.SetNull(); |
| } else { |
| auto & nonNullValue_1 = definedValue_0.SetNonNull(); |
| nonNullValue_1 = [self asByteSpan:params.ssid]; |
| } |
| } |
| if (params.breadcrumb != nil) { |
| auto & definedValue_0 = request.breadcrumb.Emplace(); |
| definedValue_0 = params.breadcrumb.unsignedLongLongValue; |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)addOrUpdateWiFiNetworkWithParams:(MTRNetworkCommissioningClusterAddOrUpdateWiFiNetworkParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRNetworkCommissioningClusterNetworkConfigResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeNetworkCommissioningID, |
| (unsigned int) MTRCommandIDTypeClusterNetworkCommissioningCommandAddOrUpdateWiFiNetworkID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRNetworkCommissioningClusterNetworkConfigResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| NetworkCommissioningClusterNetworkConfigResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRNetworkCommissioningClusterNetworkConfigResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| NetworkCommissioning::Commands::AddOrUpdateWiFiNetwork::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.ssid = [self asByteSpan:params.ssid]; |
| request.credentials = [self asByteSpan:params.credentials]; |
| if (params.breadcrumb != nil) { |
| auto & definedValue_0 = request.breadcrumb.Emplace(); |
| definedValue_0 = params.breadcrumb.unsignedLongLongValue; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)addOrUpdateThreadNetworkWithParams:(MTRNetworkCommissioningClusterAddOrUpdateThreadNetworkParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRNetworkCommissioningClusterNetworkConfigResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeNetworkCommissioningID, |
| (unsigned int) MTRCommandIDTypeClusterNetworkCommissioningCommandAddOrUpdateThreadNetworkID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRNetworkCommissioningClusterNetworkConfigResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| NetworkCommissioningClusterNetworkConfigResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRNetworkCommissioningClusterNetworkConfigResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| NetworkCommissioning::Commands::AddOrUpdateThreadNetwork::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.operationalDataset = [self asByteSpan:params.operationalDataset]; |
| if (params.breadcrumb != nil) { |
| auto & definedValue_0 = request.breadcrumb.Emplace(); |
| definedValue_0 = params.breadcrumb.unsignedLongLongValue; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)removeNetworkWithParams:(MTRNetworkCommissioningClusterRemoveNetworkParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRNetworkCommissioningClusterNetworkConfigResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeNetworkCommissioningID, |
| (unsigned int) MTRCommandIDTypeClusterNetworkCommissioningCommandRemoveNetworkID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRNetworkCommissioningClusterNetworkConfigResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| NetworkCommissioningClusterNetworkConfigResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRNetworkCommissioningClusterNetworkConfigResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| NetworkCommissioning::Commands::RemoveNetwork::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.networkID = [self asByteSpan:params.networkID]; |
| if (params.breadcrumb != nil) { |
| auto & definedValue_0 = request.breadcrumb.Emplace(); |
| definedValue_0 = params.breadcrumb.unsignedLongLongValue; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)connectNetworkWithParams:(MTRNetworkCommissioningClusterConnectNetworkParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRNetworkCommissioningClusterConnectNetworkResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeNetworkCommissioningID, |
| (unsigned int) MTRCommandIDTypeClusterNetworkCommissioningCommandConnectNetworkID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRNetworkCommissioningClusterConnectNetworkResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| NetworkCommissioningClusterConnectNetworkResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRNetworkCommissioningClusterConnectNetworkResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| NetworkCommissioning::Commands::ConnectNetwork::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.networkID = [self asByteSpan:params.networkID]; |
| if (params.breadcrumb != nil) { |
| auto & definedValue_0 = request.breadcrumb.Emplace(); |
| definedValue_0 = params.breadcrumb.unsignedLongLongValue; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)reorderNetworkWithParams:(MTRNetworkCommissioningClusterReorderNetworkParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRNetworkCommissioningClusterNetworkConfigResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeNetworkCommissioningID, |
| (unsigned int) MTRCommandIDTypeClusterNetworkCommissioningCommandReorderNetworkID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRNetworkCommissioningClusterNetworkConfigResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| NetworkCommissioningClusterNetworkConfigResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRNetworkCommissioningClusterNetworkConfigResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| NetworkCommissioning::Commands::ReorderNetwork::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.networkID = [self asByteSpan:params.networkID]; |
| request.networkIndex = params.networkIndex.unsignedCharValue; |
| if (params.breadcrumb != nil) { |
| auto & definedValue_0 = request.breadcrumb.Emplace(); |
| definedValue_0 = params.breadcrumb.unsignedLongLongValue; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxNetworksWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeNetworkCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterNetworkCommissioningAttributeMaxNetworksID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNetworksWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeNetworkCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterNetworkCommissioningAttributeNetworksID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeScanMaxTimeSecondsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeNetworkCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterNetworkCommissioningAttributeScanMaxTimeSecondsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeConnectMaxTimeSecondsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeNetworkCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterNetworkCommissioningAttributeConnectMaxTimeSecondsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInterfaceEnabledWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeNetworkCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterNetworkCommissioningAttributeInterfaceEnabledID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInterfaceEnabledWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInterfaceEnabledWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInterfaceEnabledWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeNetworkCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterNetworkCommissioningAttributeInterfaceEnabledID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLastNetworkingStatusWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeNetworkCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterNetworkCommissioningAttributeLastNetworkingStatusID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLastNetworkIDWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeNetworkCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterNetworkCommissioningAttributeLastNetworkIDID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLastConnectErrorValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeNetworkCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterNetworkCommissioningAttributeLastConnectErrorValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeNetworkCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterNetworkCommissioningAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeNetworkCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterNetworkCommissioningAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeNetworkCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterNetworkCommissioningAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeNetworkCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterNetworkCommissioningAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeNetworkCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterNetworkCommissioningAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterNetworkCommissioning (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)scanNetworksWithParams:(MTRNetworkCommissioningClusterScanNetworksParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRNetworkCommissioningClusterScanNetworksResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self scanNetworksWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRNetworkCommissioningClusterScanNetworksResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRNetworkCommissioningClusterScanNetworksResponseParams *>(data), error); |
| }]; |
| } |
| - (void)addOrUpdateWiFiNetworkWithParams:(MTRNetworkCommissioningClusterAddOrUpdateWiFiNetworkParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRNetworkCommissioningClusterNetworkConfigResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self addOrUpdateWiFiNetworkWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRNetworkCommissioningClusterNetworkConfigResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTRNetworkCommissioningClusterNetworkConfigResponseParams *>(data), error); |
| }]; |
| } |
| - (void)addOrUpdateThreadNetworkWithParams:(MTRNetworkCommissioningClusterAddOrUpdateThreadNetworkParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRNetworkCommissioningClusterNetworkConfigResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self addOrUpdateThreadNetworkWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRNetworkCommissioningClusterNetworkConfigResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTRNetworkCommissioningClusterNetworkConfigResponseParams *>(data), error); |
| }]; |
| } |
| - (void)removeNetworkWithParams:(MTRNetworkCommissioningClusterRemoveNetworkParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRNetworkCommissioningClusterNetworkConfigResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self removeNetworkWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRNetworkCommissioningClusterNetworkConfigResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRNetworkCommissioningClusterNetworkConfigResponseParams *>(data), error); |
| }]; |
| } |
| - (void)connectNetworkWithParams:(MTRNetworkCommissioningClusterConnectNetworkParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRNetworkCommissioningClusterConnectNetworkResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self |
| connectNetworkWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRNetworkCommissioningClusterConnectNetworkResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRNetworkCommissioningClusterConnectNetworkResponseParams *>(data), error); |
| }]; |
| } |
| - (void)reorderNetworkWithParams:(MTRNetworkCommissioningClusterReorderNetworkParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRNetworkCommissioningClusterNetworkConfigResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self |
| reorderNetworkWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRNetworkCommissioningClusterNetworkConfigResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRNetworkCommissioningClusterNetworkConfigResponseParams *>(data), error); |
| }]; |
| } |
| @end |
| |
| @implementation MTRClusterDiagnosticLogs |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)retrieveLogsRequestWithParams:(MTRDiagnosticLogsClusterRetrieveLogsRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRDiagnosticLogsClusterRetrieveLogsResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeDiagnosticLogsID, |
| (unsigned int) MTRCommandIDTypeClusterDiagnosticLogsCommandRetrieveLogsRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRDiagnosticLogsClusterRetrieveLogsResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| DiagnosticLogsClusterRetrieveLogsResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRDiagnosticLogsClusterRetrieveLogsResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DiagnosticLogs::Commands::RetrieveLogsRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.intent = static_cast<std::remove_reference_t<decltype(request.intent)>>(params.intent.unsignedCharValue); |
| request.requestedProtocol = static_cast<std::remove_reference_t<decltype(request.requestedProtocol)>>( |
| params.requestedProtocol.unsignedCharValue); |
| request.transferFileDesignator = [self asByteSpan:params.transferFileDesignator]; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDiagnosticLogsID) |
| attributeID:@(MTRAttributeIDTypeClusterDiagnosticLogsAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDiagnosticLogsID) |
| attributeID:@(MTRAttributeIDTypeClusterDiagnosticLogsAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDiagnosticLogsID) |
| attributeID:@(MTRAttributeIDTypeClusterDiagnosticLogsAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDiagnosticLogsID) |
| attributeID:@(MTRAttributeIDTypeClusterDiagnosticLogsAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDiagnosticLogsID) |
| attributeID:@(MTRAttributeIDTypeClusterDiagnosticLogsAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterDiagnosticLogs (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)retrieveLogsRequestWithParams:(MTRDiagnosticLogsClusterRetrieveLogsRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRDiagnosticLogsClusterRetrieveLogsResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self retrieveLogsRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRDiagnosticLogsClusterRetrieveLogsResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRDiagnosticLogsClusterRetrieveLogsResponseParams *>(data), error); |
| }]; |
| } |
| @end |
| |
| @implementation MTRClusterGeneralDiagnostics |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)testEventTriggerWithParams:(MTRGeneralDiagnosticsClusterTestEventTriggerParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeGeneralDiagnosticsID, |
| (unsigned int) MTRCommandIDTypeClusterGeneralDiagnosticsCommandTestEventTriggerID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| GeneralDiagnostics::Commands::TestEventTrigger::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.enableKey = [self asByteSpan:params.enableKey]; |
| request.eventTrigger = params.eventTrigger.unsignedLongLongValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNetworkInterfacesWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralDiagnosticsAttributeNetworkInterfacesID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRebootCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralDiagnosticsAttributeRebootCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUpTimeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralDiagnosticsAttributeUpTimeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTotalOperationalHoursWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralDiagnosticsAttributeTotalOperationalHoursID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBootReasonWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralDiagnosticsAttributeBootReasonID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActiveHardwareFaultsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralDiagnosticsAttributeActiveHardwareFaultsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActiveRadioFaultsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralDiagnosticsAttributeActiveRadioFaultsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActiveNetworkFaultsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralDiagnosticsAttributeActiveNetworkFaultsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTestEventTriggersEnabledWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralDiagnosticsAttributeTestEventTriggersEnabledID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralDiagnosticsAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralDiagnosticsAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralDiagnosticsAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralDiagnosticsAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGeneralDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterGeneralDiagnosticsAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterGeneralDiagnostics (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)testEventTriggerWithParams:(MTRGeneralDiagnosticsClusterTestEventTriggerParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self testEventTriggerWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (NSDictionary<NSString *, id> *)readAttributeBootReasonsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self readAttributeBootReasonWithParams:params]; |
| } |
| @end |
| |
| @implementation MTRClusterSoftwareDiagnostics |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)resetWatermarksWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self resetWatermarksWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)resetWatermarksWithParams:(MTRSoftwareDiagnosticsClusterResetWatermarksParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeSoftwareDiagnosticsID, |
| (unsigned int) MTRCommandIDTypeClusterSoftwareDiagnosticsCommandResetWatermarksID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| SoftwareDiagnostics::Commands::ResetWatermarks::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeThreadMetricsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSoftwareDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterSoftwareDiagnosticsAttributeThreadMetricsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentHeapFreeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSoftwareDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterSoftwareDiagnosticsAttributeCurrentHeapFreeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentHeapUsedWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSoftwareDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterSoftwareDiagnosticsAttributeCurrentHeapUsedID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentHeapHighWatermarkWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSoftwareDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterSoftwareDiagnosticsAttributeCurrentHeapHighWatermarkID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSoftwareDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterSoftwareDiagnosticsAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSoftwareDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterSoftwareDiagnosticsAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSoftwareDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterSoftwareDiagnosticsAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSoftwareDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterSoftwareDiagnosticsAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSoftwareDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterSoftwareDiagnosticsAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterSoftwareDiagnostics (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)resetWatermarksWithParams:(MTRSoftwareDiagnosticsClusterResetWatermarksParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self resetWatermarksWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)resetWatermarksWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self resetWatermarksWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterThreadNetworkDiagnostics |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)resetCountsWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self resetCountsWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)resetCountsWithParams:(MTRThreadNetworkDiagnosticsClusterResetCountsParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeThreadNetworkDiagnosticsID, |
| (unsigned int) MTRCommandIDTypeClusterThreadNetworkDiagnosticsCommandResetCountsID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ThreadNetworkDiagnostics::Commands::ResetCounts::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeChannelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeChannelID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRoutingRoleWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRoutingRoleID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNetworkNameWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeNetworkNameID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePanIdWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributePanIdID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeExtendedPanIdWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeExtendedPanIdID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeshLocalPrefixWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeMeshLocalPrefixID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOverrunCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeOverrunCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNeighborTableWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeNeighborTableID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRouteTableWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRouteTableID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePartitionIdWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributePartitionIdID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWeightingWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeWeightingID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDataVersionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeDataVersionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeStableDataVersionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeStableDataVersionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLeaderRouterIdWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeLeaderRouterIdID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDetachedRoleCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeDetachedRoleCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeChildRoleCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeChildRoleCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRouterRoleCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRouterRoleCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLeaderRoleCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeLeaderRoleCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttachAttemptCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeAttachAttemptCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePartitionIdChangeCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributePartitionIdChangeCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBetterPartitionAttachAttemptCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeBetterPartitionAttachAttemptCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeParentChangeCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeParentChangeCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxTotalCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxTotalCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxUnicastCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxUnicastCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxBroadcastCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxBroadcastCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxAckRequestedCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxAckRequestedCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxAckedCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxAckedCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxNoAckRequestedCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxNoAckRequestedCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxDataCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxDataCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxDataPollCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxDataPollCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxBeaconCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxBeaconCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxBeaconRequestCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxBeaconRequestCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxOtherCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxOtherCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxRetryCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxRetryCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxDirectMaxRetryExpiryCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxDirectMaxRetryExpiryCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxIndirectMaxRetryExpiryCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxIndirectMaxRetryExpiryCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxErrCcaCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxErrCcaCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxErrAbortCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxErrAbortCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxErrBusyChannelCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeTxErrBusyChannelCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxTotalCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxTotalCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxUnicastCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxUnicastCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxBroadcastCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxBroadcastCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxDataCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxDataCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxDataPollCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxDataPollCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxBeaconCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxBeaconCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxBeaconRequestCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxBeaconRequestCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxOtherCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxOtherCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxAddressFilteredCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxAddressFilteredCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxDestAddrFilteredCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxDestAddrFilteredCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxDuplicatedCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxDuplicatedCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxErrNoFrameCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxErrNoFrameCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxErrUnknownNeighborCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxErrUnknownNeighborCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxErrInvalidSrcAddrCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxErrInvalidSrcAddrCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxErrSecCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxErrSecCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxErrFcsCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxErrFcsCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRxErrOtherCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeRxErrOtherCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActiveTimestampWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeActiveTimestampID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePendingTimestampWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributePendingTimestampID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDelayWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeDelayID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSecurityPolicyWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeSecurityPolicyID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeChannelPage0MaskWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeChannelPage0MaskID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOperationalDatasetComponentsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeOperationalDatasetComponentsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActiveNetworkFaultsListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeActiveNetworkFaultsListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThreadNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterThreadNetworkDiagnosticsAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterThreadNetworkDiagnostics (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)resetCountsWithParams:(MTRThreadNetworkDiagnosticsClusterResetCountsParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self resetCountsWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)resetCountsWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self resetCountsWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (NSDictionary<NSString *, id> *)readAttributeNeighborTableListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self readAttributeNeighborTableWithParams:params]; |
| } |
| - (NSDictionary<NSString *, id> *)readAttributeRouteTableListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self readAttributeRouteTableWithParams:params]; |
| } |
| @end |
| |
| @implementation MTRClusterWiFiNetworkDiagnostics |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)resetCountsWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self resetCountsWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)resetCountsWithParams:(MTRWiFiNetworkDiagnosticsClusterResetCountsParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeWiFiNetworkDiagnosticsID, |
| (unsigned int) MTRCommandIDTypeClusterWiFiNetworkDiagnosticsCommandResetCountsID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| WiFiNetworkDiagnostics::Commands::ResetCounts::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBSSIDWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributeBSSIDID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSecurityTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributeSecurityTypeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWiFiVersionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributeWiFiVersionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeChannelNumberWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributeChannelNumberID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRSSIWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributeRSSIID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBeaconLostCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributeBeaconLostCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBeaconRxCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributeBeaconRxCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePacketMulticastRxCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributePacketMulticastRxCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePacketMulticastTxCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributePacketMulticastTxCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePacketUnicastRxCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributePacketUnicastRxCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePacketUnicastTxCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributePacketUnicastTxCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentMaxRateWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributeCurrentMaxRateID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOverrunCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributeOverrunCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWiFiNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterWiFiNetworkDiagnosticsAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterWiFiNetworkDiagnostics (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)resetCountsWithParams:(MTRWiFiNetworkDiagnosticsClusterResetCountsParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self resetCountsWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)resetCountsWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self resetCountsWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (NSDictionary<NSString *, id> *)readAttributeBssidWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self readAttributeBSSIDWithParams:params]; |
| } |
| - (NSDictionary<NSString *, id> *)readAttributeRssiWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self readAttributeRSSIWithParams:params]; |
| } |
| @end |
| |
| @implementation MTRClusterEthernetNetworkDiagnostics |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)resetCountsWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self resetCountsWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)resetCountsWithParams:(MTREthernetNetworkDiagnosticsClusterResetCountsParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeEthernetNetworkDiagnosticsID, |
| (unsigned int) MTRCommandIDTypeClusterEthernetNetworkDiagnosticsCommandResetCountsID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| EthernetNetworkDiagnostics::Commands::ResetCounts::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePHYRateWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeEthernetNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterEthernetNetworkDiagnosticsAttributePHYRateID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFullDuplexWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeEthernetNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterEthernetNetworkDiagnosticsAttributeFullDuplexID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePacketRxCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeEthernetNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterEthernetNetworkDiagnosticsAttributePacketRxCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePacketTxCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeEthernetNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterEthernetNetworkDiagnosticsAttributePacketTxCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTxErrCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeEthernetNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterEthernetNetworkDiagnosticsAttributeTxErrCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCollisionCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeEthernetNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterEthernetNetworkDiagnosticsAttributeCollisionCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOverrunCountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeEthernetNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterEthernetNetworkDiagnosticsAttributeOverrunCountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCarrierDetectWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeEthernetNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterEthernetNetworkDiagnosticsAttributeCarrierDetectID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTimeSinceResetWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeEthernetNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterEthernetNetworkDiagnosticsAttributeTimeSinceResetID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeEthernetNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterEthernetNetworkDiagnosticsAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeEthernetNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterEthernetNetworkDiagnosticsAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeEthernetNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterEthernetNetworkDiagnosticsAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeEthernetNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterEthernetNetworkDiagnosticsAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeEthernetNetworkDiagnosticsID) |
| attributeID:@(MTRAttributeIDTypeClusterEthernetNetworkDiagnosticsAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterEthernetNetworkDiagnostics (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)resetCountsWithParams:(MTREthernetNetworkDiagnosticsClusterResetCountsParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self resetCountsWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)resetCountsWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self resetCountsWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterBridgedDeviceBasicInformation |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeVendorNameWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeVendorNameID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeVendorIDWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeVendorIDID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeProductNameWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeProductNameID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNodeLabelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeNodeLabelID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNodeLabelWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNodeLabelWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNodeLabelWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeNodeLabelID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeHardwareVersionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeHardwareVersionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeHardwareVersionStringWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeHardwareVersionStringID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSoftwareVersionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeSoftwareVersionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSoftwareVersionStringWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeSoftwareVersionStringID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeManufacturingDateWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeManufacturingDateID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePartNumberWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributePartNumberID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeProductURLWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeProductURLID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeProductLabelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeProductLabelID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSerialNumberWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeSerialNumberID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeReachableWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeReachableID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUniqueIDWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeUniqueIDID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBridgedDeviceBasicInformationID) |
| attributeID:@(MTRAttributeIDTypeClusterBridgedDeviceBasicInformationAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| @implementation MTRClusterBridgedDeviceBasic |
| @end |
| |
| @implementation MTRClusterBridgedDeviceBasic (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterSwitch |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNumberOfPositionsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSwitchID) |
| attributeID:@(MTRAttributeIDTypeClusterSwitchAttributeNumberOfPositionsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentPositionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSwitchID) |
| attributeID:@(MTRAttributeIDTypeClusterSwitchAttributeCurrentPositionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMultiPressMaxWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSwitchID) |
| attributeID:@(MTRAttributeIDTypeClusterSwitchAttributeMultiPressMaxID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSwitchID) |
| attributeID:@(MTRAttributeIDTypeClusterSwitchAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSwitchID) |
| attributeID:@(MTRAttributeIDTypeClusterSwitchAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSwitchID) |
| attributeID:@(MTRAttributeIDTypeClusterSwitchAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSwitchID) |
| attributeID:@(MTRAttributeIDTypeClusterSwitchAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeSwitchID) |
| attributeID:@(MTRAttributeIDTypeClusterSwitchAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterSwitch (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterAdministratorCommissioning |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)openCommissioningWindowWithParams:(MTRAdministratorCommissioningClusterOpenCommissioningWindowParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeAdministratorCommissioningID, |
| (unsigned int) MTRCommandIDTypeClusterAdministratorCommissioningCommandOpenCommissioningWindowID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| AdministratorCommissioning::Commands::OpenCommissioningWindow::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (!timedInvokeTimeoutMs.HasValue()) { |
| timedInvokeTimeoutMs.SetValue(10000); |
| } |
| request.commissioningTimeout = params.commissioningTimeout.unsignedShortValue; |
| request.PAKEPasscodeVerifier = [self asByteSpan:params.pakePasscodeVerifier]; |
| request.discriminator = params.discriminator.unsignedShortValue; |
| request.iterations = params.iterations.unsignedIntValue; |
| request.salt = [self asByteSpan:params.salt]; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)openBasicCommissioningWindowWithParams:(MTRAdministratorCommissioningClusterOpenBasicCommissioningWindowParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeAdministratorCommissioningID, |
| (unsigned int) MTRCommandIDTypeClusterAdministratorCommissioningCommandOpenBasicCommissioningWindowID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| AdministratorCommissioning::Commands::OpenBasicCommissioningWindow::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (!timedInvokeTimeoutMs.HasValue()) { |
| timedInvokeTimeoutMs.SetValue(10000); |
| } |
| request.commissioningTimeout = params.commissioningTimeout.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)revokeCommissioningWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self revokeCommissioningWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)revokeCommissioningWithParams:(MTRAdministratorCommissioningClusterRevokeCommissioningParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeAdministratorCommissioningID, |
| (unsigned int) MTRCommandIDTypeClusterAdministratorCommissioningCommandRevokeCommissioningID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| AdministratorCommissioning::Commands::RevokeCommissioning::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (!timedInvokeTimeoutMs.HasValue()) { |
| timedInvokeTimeoutMs.SetValue(10000); |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWindowStatusWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAdministratorCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterAdministratorCommissioningAttributeWindowStatusID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAdminFabricIndexWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAdministratorCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterAdministratorCommissioningAttributeAdminFabricIndexID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAdminVendorIdWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAdministratorCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterAdministratorCommissioningAttributeAdminVendorIdID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAdministratorCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterAdministratorCommissioningAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAdministratorCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterAdministratorCommissioningAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAdministratorCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterAdministratorCommissioningAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAdministratorCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterAdministratorCommissioningAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAdministratorCommissioningID) |
| attributeID:@(MTRAttributeIDTypeClusterAdministratorCommissioningAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterAdministratorCommissioning (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)openCommissioningWindowWithParams:(MTRAdministratorCommissioningClusterOpenCommissioningWindowParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self openCommissioningWindowWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)openBasicCommissioningWindowWithParams:(MTRAdministratorCommissioningClusterOpenBasicCommissioningWindowParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self openBasicCommissioningWindowWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)revokeCommissioningWithParams:(MTRAdministratorCommissioningClusterRevokeCommissioningParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self revokeCommissioningWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)revokeCommissioningWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self revokeCommissioningWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterOperationalCredentials |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)attestationRequestWithParams:(MTROperationalCredentialsClusterAttestationRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTROperationalCredentialsClusterAttestationResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeOperationalCredentialsID, |
| (unsigned int) MTRCommandIDTypeClusterOperationalCredentialsCommandAttestationRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTROperationalCredentialsClusterAttestationResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| OperationalCredentialsClusterAttestationResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTROperationalCredentialsClusterAttestationResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OperationalCredentials::Commands::AttestationRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.attestationNonce = [self asByteSpan:params.attestationNonce]; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)certificateChainRequestWithParams:(MTROperationalCredentialsClusterCertificateChainRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTROperationalCredentialsClusterCertificateChainResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeOperationalCredentialsID, |
| (unsigned int) MTRCommandIDTypeClusterOperationalCredentialsCommandCertificateChainRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTROperationalCredentialsClusterCertificateChainResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| OperationalCredentialsClusterCertificateChainResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTROperationalCredentialsClusterCertificateChainResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OperationalCredentials::Commands::CertificateChainRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.certificateType = static_cast<std::remove_reference_t<decltype(request.certificateType)>>( |
| params.certificateType.unsignedCharValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)CSRRequestWithParams:(MTROperationalCredentialsClusterCSRRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTROperationalCredentialsClusterCSRResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeOperationalCredentialsID, |
| (unsigned int) MTRCommandIDTypeClusterOperationalCredentialsCommandCSRRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTROperationalCredentialsClusterCSRResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| OperationalCredentialsClusterCSRResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTROperationalCredentialsClusterCSRResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OperationalCredentials::Commands::CSRRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.CSRNonce = [self asByteSpan:params.csrNonce]; |
| if (params.isForUpdateNOC != nil) { |
| auto & definedValue_0 = request.isForUpdateNOC.Emplace(); |
| definedValue_0 = params.isForUpdateNOC.boolValue; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)addNOCWithParams:(MTROperationalCredentialsClusterAddNOCParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTROperationalCredentialsClusterNOCResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeOperationalCredentialsID, |
| (unsigned int) MTRCommandIDTypeClusterOperationalCredentialsCommandAddNOCID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTROperationalCredentialsClusterNOCResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| OperationalCredentialsClusterNOCResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTROperationalCredentialsClusterNOCResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OperationalCredentials::Commands::AddNOC::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.NOCValue = [self asByteSpan:params.nocValue]; |
| if (params.icacValue != nil) { |
| auto & definedValue_0 = request.ICACValue.Emplace(); |
| definedValue_0 = [self asByteSpan:params.icacValue]; |
| } |
| request.IPKValue = [self asByteSpan:params.ipkValue]; |
| request.caseAdminSubject = params.caseAdminSubject.unsignedLongLongValue; |
| request.adminVendorId = static_cast<std::remove_reference_t<decltype(request.adminVendorId)>>( |
| params.adminVendorId.unsignedShortValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)updateNOCWithParams:(MTROperationalCredentialsClusterUpdateNOCParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTROperationalCredentialsClusterNOCResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeOperationalCredentialsID, |
| (unsigned int) MTRCommandIDTypeClusterOperationalCredentialsCommandUpdateNOCID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTROperationalCredentialsClusterNOCResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| OperationalCredentialsClusterNOCResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTROperationalCredentialsClusterNOCResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OperationalCredentials::Commands::UpdateNOC::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.NOCValue = [self asByteSpan:params.nocValue]; |
| if (params.icacValue != nil) { |
| auto & definedValue_0 = request.ICACValue.Emplace(); |
| definedValue_0 = [self asByteSpan:params.icacValue]; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)updateFabricLabelWithParams:(MTROperationalCredentialsClusterUpdateFabricLabelParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTROperationalCredentialsClusterNOCResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeOperationalCredentialsID, |
| (unsigned int) MTRCommandIDTypeClusterOperationalCredentialsCommandUpdateFabricLabelID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTROperationalCredentialsClusterNOCResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| OperationalCredentialsClusterNOCResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTROperationalCredentialsClusterNOCResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OperationalCredentials::Commands::UpdateFabricLabel::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.label = [self asCharSpan:params.label]; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)removeFabricWithParams:(MTROperationalCredentialsClusterRemoveFabricParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTROperationalCredentialsClusterNOCResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeOperationalCredentialsID, |
| (unsigned int) MTRCommandIDTypeClusterOperationalCredentialsCommandRemoveFabricID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTROperationalCredentialsClusterNOCResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| OperationalCredentialsClusterNOCResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTROperationalCredentialsClusterNOCResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OperationalCredentials::Commands::RemoveFabric::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.fabricIndex = params.fabricIndex.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)addTrustedRootCertificateWithParams:(MTROperationalCredentialsClusterAddTrustedRootCertificateParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeOperationalCredentialsID, |
| (unsigned int) MTRCommandIDTypeClusterOperationalCredentialsCommandAddTrustedRootCertificateID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| OperationalCredentials::Commands::AddTrustedRootCertificate::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.rootCACertificate = [self asByteSpan:params.rootCACertificate]; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNOCsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOperationalCredentialsID) |
| attributeID:@(MTRAttributeIDTypeClusterOperationalCredentialsAttributeNOCsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFabricsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOperationalCredentialsID) |
| attributeID:@(MTRAttributeIDTypeClusterOperationalCredentialsAttributeFabricsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSupportedFabricsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOperationalCredentialsID) |
| attributeID:@(MTRAttributeIDTypeClusterOperationalCredentialsAttributeSupportedFabricsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCommissionedFabricsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOperationalCredentialsID) |
| attributeID:@(MTRAttributeIDTypeClusterOperationalCredentialsAttributeCommissionedFabricsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTrustedRootCertificatesWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOperationalCredentialsID) |
| attributeID:@(MTRAttributeIDTypeClusterOperationalCredentialsAttributeTrustedRootCertificatesID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentFabricIndexWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOperationalCredentialsID) |
| attributeID:@(MTRAttributeIDTypeClusterOperationalCredentialsAttributeCurrentFabricIndexID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOperationalCredentialsID) |
| attributeID:@(MTRAttributeIDTypeClusterOperationalCredentialsAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOperationalCredentialsID) |
| attributeID:@(MTRAttributeIDTypeClusterOperationalCredentialsAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOperationalCredentialsID) |
| attributeID:@(MTRAttributeIDTypeClusterOperationalCredentialsAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOperationalCredentialsID) |
| attributeID:@(MTRAttributeIDTypeClusterOperationalCredentialsAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOperationalCredentialsID) |
| attributeID:@(MTRAttributeIDTypeClusterOperationalCredentialsAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterOperationalCredentials (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)attestationRequestWithParams:(MTROperationalCredentialsClusterAttestationRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTROperationalCredentialsClusterAttestationResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self attestationRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTROperationalCredentialsClusterAttestationResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTROperationalCredentialsClusterAttestationResponseParams *>(data), error); |
| }]; |
| } |
| - (void)certificateChainRequestWithParams:(MTROperationalCredentialsClusterCertificateChainRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTROperationalCredentialsClusterCertificateChainResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self |
| certificateChainRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTROperationalCredentialsClusterCertificateChainResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTROperationalCredentialsClusterCertificateChainResponseParams *>(data), error); |
| }]; |
| } |
| - (void)CSRRequestWithParams:(MTROperationalCredentialsClusterCSRRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTROperationalCredentialsClusterCSRResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self CSRRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTROperationalCredentialsClusterCSRResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTROperationalCredentialsClusterCSRResponseParams *>(data), error); |
| }]; |
| } |
| - (void)addNOCWithParams:(MTROperationalCredentialsClusterAddNOCParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTROperationalCredentialsClusterNOCResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self addNOCWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTROperationalCredentialsClusterNOCResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTROperationalCredentialsClusterNOCResponseParams *>(data), error); |
| }]; |
| } |
| - (void)updateNOCWithParams:(MTROperationalCredentialsClusterUpdateNOCParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTROperationalCredentialsClusterNOCResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self updateNOCWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTROperationalCredentialsClusterNOCResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTROperationalCredentialsClusterNOCResponseParams *>(data), error); |
| }]; |
| } |
| - (void)updateFabricLabelWithParams:(MTROperationalCredentialsClusterUpdateFabricLabelParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTROperationalCredentialsClusterNOCResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self updateFabricLabelWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTROperationalCredentialsClusterNOCResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTROperationalCredentialsClusterNOCResponseParams *>(data), error); |
| }]; |
| } |
| - (void)removeFabricWithParams:(MTROperationalCredentialsClusterRemoveFabricParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTROperationalCredentialsClusterNOCResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self removeFabricWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTROperationalCredentialsClusterNOCResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTROperationalCredentialsClusterNOCResponseParams *>(data), error); |
| }]; |
| } |
| - (void)addTrustedRootCertificateWithParams:(MTROperationalCredentialsClusterAddTrustedRootCertificateParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self addTrustedRootCertificateWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterGroupKeyManagement |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)keySetWriteWithParams:(MTRGroupKeyManagementClusterKeySetWriteParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeGroupKeyManagementID, |
| (unsigned int) MTRCommandIDTypeClusterGroupKeyManagementCommandKeySetWriteID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| GroupKeyManagement::Commands::KeySetWrite::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupKeySet.groupKeySetID = params.groupKeySet.groupKeySetID.unsignedShortValue; |
| request.groupKeySet.groupKeySecurityPolicy |
| = static_cast<std::remove_reference_t<decltype(request.groupKeySet.groupKeySecurityPolicy)>>( |
| params.groupKeySet.groupKeySecurityPolicy.unsignedCharValue); |
| if (params.groupKeySet.epochKey0 == nil) { |
| request.groupKeySet.epochKey0.SetNull(); |
| } else { |
| auto & nonNullValue_1 = request.groupKeySet.epochKey0.SetNonNull(); |
| nonNullValue_1 = [self asByteSpan:params.groupKeySet.epochKey0]; |
| } |
| if (params.groupKeySet.epochStartTime0 == nil) { |
| request.groupKeySet.epochStartTime0.SetNull(); |
| } else { |
| auto & nonNullValue_1 = request.groupKeySet.epochStartTime0.SetNonNull(); |
| nonNullValue_1 = params.groupKeySet.epochStartTime0.unsignedLongLongValue; |
| } |
| if (params.groupKeySet.epochKey1 == nil) { |
| request.groupKeySet.epochKey1.SetNull(); |
| } else { |
| auto & nonNullValue_1 = request.groupKeySet.epochKey1.SetNonNull(); |
| nonNullValue_1 = [self asByteSpan:params.groupKeySet.epochKey1]; |
| } |
| if (params.groupKeySet.epochStartTime1 == nil) { |
| request.groupKeySet.epochStartTime1.SetNull(); |
| } else { |
| auto & nonNullValue_1 = request.groupKeySet.epochStartTime1.SetNonNull(); |
| nonNullValue_1 = params.groupKeySet.epochStartTime1.unsignedLongLongValue; |
| } |
| if (params.groupKeySet.epochKey2 == nil) { |
| request.groupKeySet.epochKey2.SetNull(); |
| } else { |
| auto & nonNullValue_1 = request.groupKeySet.epochKey2.SetNonNull(); |
| nonNullValue_1 = [self asByteSpan:params.groupKeySet.epochKey2]; |
| } |
| if (params.groupKeySet.epochStartTime2 == nil) { |
| request.groupKeySet.epochStartTime2.SetNull(); |
| } else { |
| auto & nonNullValue_1 = request.groupKeySet.epochStartTime2.SetNonNull(); |
| nonNullValue_1 = params.groupKeySet.epochStartTime2.unsignedLongLongValue; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)keySetReadWithParams:(MTRGroupKeyManagementClusterKeySetReadParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRGroupKeyManagementClusterKeySetReadResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeGroupKeyManagementID, |
| (unsigned int) MTRCommandIDTypeClusterGroupKeyManagementCommandKeySetReadID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRGroupKeyManagementClusterKeySetReadResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| GroupKeyManagementClusterKeySetReadResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRGroupKeyManagementClusterKeySetReadResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| GroupKeyManagement::Commands::KeySetRead::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupKeySetID = params.groupKeySetID.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)keySetRemoveWithParams:(MTRGroupKeyManagementClusterKeySetRemoveParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeGroupKeyManagementID, |
| (unsigned int) MTRCommandIDTypeClusterGroupKeyManagementCommandKeySetRemoveID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| GroupKeyManagement::Commands::KeySetRemove::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.groupKeySetID = params.groupKeySetID.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)keySetReadAllIndicesWithParams:(MTRGroupKeyManagementClusterKeySetReadAllIndicesParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRGroupKeyManagementClusterKeySetReadAllIndicesResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeGroupKeyManagementID, |
| (unsigned int) MTRCommandIDTypeClusterGroupKeyManagementCommandKeySetReadAllIndicesID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRGroupKeyManagementClusterKeySetReadAllIndicesResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| GroupKeyManagementClusterKeySetReadAllIndicesResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRGroupKeyManagementClusterKeySetReadAllIndicesResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| GroupKeyManagement::Commands::KeySetReadAllIndices::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| { |
| using ListType_0 = std::remove_reference_t<decltype(request.groupKeySetIDs)>; |
| using ListMemberType_0 = ListMemberTypeGetter<ListType_0>::Type; |
| if (params.groupKeySetIDs.count != 0) { |
| auto * listHolder_0 = new ListHolder<ListMemberType_0>(params.groupKeySetIDs.count); |
| if (listHolder_0 == nullptr || listHolder_0->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_0); |
| for (size_t i_0 = 0; i_0 < params.groupKeySetIDs.count; ++i_0) { |
| if (![params.groupKeySetIDs[i_0] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_0 = (NSNumber *) params.groupKeySetIDs[i_0]; |
| listHolder_0->mList[i_0] = element_0.unsignedShortValue; |
| } |
| request.groupKeySetIDs = ListType_0(listHolder_0->mList, params.groupKeySetIDs.count); |
| } else { |
| request.groupKeySetIDs = ListType_0(); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGroupKeyMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupKeyManagementID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupKeyManagementAttributeGroupKeyMapID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeGroupKeyMapWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeGroupKeyMapWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeGroupKeyMapWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupKeyManagementID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupKeyManagementAttributeGroupKeyMapID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGroupTableWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupKeyManagementID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupKeyManagementAttributeGroupTableID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxGroupsPerFabricWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupKeyManagementID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupKeyManagementAttributeMaxGroupsPerFabricID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxGroupKeysPerFabricWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupKeyManagementID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupKeyManagementAttributeMaxGroupKeysPerFabricID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupKeyManagementID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupKeyManagementAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupKeyManagementID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupKeyManagementAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupKeyManagementID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupKeyManagementAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupKeyManagementID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupKeyManagementAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeGroupKeyManagementID) |
| attributeID:@(MTRAttributeIDTypeClusterGroupKeyManagementAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterGroupKeyManagement (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)keySetWriteWithParams:(MTRGroupKeyManagementClusterKeySetWriteParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self keySetWriteWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)keySetReadWithParams:(MTRGroupKeyManagementClusterKeySetReadParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRGroupKeyManagementClusterKeySetReadResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self keySetReadWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRGroupKeyManagementClusterKeySetReadResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRGroupKeyManagementClusterKeySetReadResponseParams *>(data), error); |
| }]; |
| } |
| - (void)keySetRemoveWithParams:(MTRGroupKeyManagementClusterKeySetRemoveParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self keySetRemoveWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)keySetReadAllIndicesWithParams:(MTRGroupKeyManagementClusterKeySetReadAllIndicesParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRGroupKeyManagementClusterKeySetReadAllIndicesResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self keySetReadAllIndicesWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRGroupKeyManagementClusterKeySetReadAllIndicesResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTRGroupKeyManagementClusterKeySetReadAllIndicesResponseParams *>(data), error); |
| }]; |
| } |
| @end |
| |
| @implementation MTRClusterFixedLabel |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLabelListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFixedLabelID) |
| attributeID:@(MTRAttributeIDTypeClusterFixedLabelAttributeLabelListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFixedLabelID) |
| attributeID:@(MTRAttributeIDTypeClusterFixedLabelAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFixedLabelID) |
| attributeID:@(MTRAttributeIDTypeClusterFixedLabelAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFixedLabelID) |
| attributeID:@(MTRAttributeIDTypeClusterFixedLabelAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFixedLabelID) |
| attributeID:@(MTRAttributeIDTypeClusterFixedLabelAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFixedLabelID) |
| attributeID:@(MTRAttributeIDTypeClusterFixedLabelAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterFixedLabel (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterUserLabel |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLabelListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUserLabelID) |
| attributeID:@(MTRAttributeIDTypeClusterUserLabelAttributeLabelListID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLabelListWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLabelListWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeLabelListWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUserLabelID) |
| attributeID:@(MTRAttributeIDTypeClusterUserLabelAttributeLabelListID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUserLabelID) |
| attributeID:@(MTRAttributeIDTypeClusterUserLabelAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUserLabelID) |
| attributeID:@(MTRAttributeIDTypeClusterUserLabelAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUserLabelID) |
| attributeID:@(MTRAttributeIDTypeClusterUserLabelAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUserLabelID) |
| attributeID:@(MTRAttributeIDTypeClusterUserLabelAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUserLabelID) |
| attributeID:@(MTRAttributeIDTypeClusterUserLabelAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterUserLabel (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterBooleanState |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeStateValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBooleanStateID) |
| attributeID:@(MTRAttributeIDTypeClusterBooleanStateAttributeStateValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBooleanStateID) |
| attributeID:@(MTRAttributeIDTypeClusterBooleanStateAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBooleanStateID) |
| attributeID:@(MTRAttributeIDTypeClusterBooleanStateAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBooleanStateID) |
| attributeID:@(MTRAttributeIDTypeClusterBooleanStateAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBooleanStateID) |
| attributeID:@(MTRAttributeIDTypeClusterBooleanStateAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBooleanStateID) |
| attributeID:@(MTRAttributeIDTypeClusterBooleanStateAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterBooleanState (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterModeSelect |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)changeToModeWithParams:(MTRModeSelectClusterChangeToModeParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeModeSelectID, |
| (unsigned int) MTRCommandIDTypeClusterModeSelectCommandChangeToModeID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ModeSelect::Commands::ChangeToMode::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.newMode = params.newMode.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDescriptionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeModeSelectID) |
| attributeID:@(MTRAttributeIDTypeClusterModeSelectAttributeDescriptionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeStandardNamespaceWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeModeSelectID) |
| attributeID:@(MTRAttributeIDTypeClusterModeSelectAttributeStandardNamespaceID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSupportedModesWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeModeSelectID) |
| attributeID:@(MTRAttributeIDTypeClusterModeSelectAttributeSupportedModesID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeModeSelectID) |
| attributeID:@(MTRAttributeIDTypeClusterModeSelectAttributeCurrentModeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeStartUpModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeModeSelectID) |
| attributeID:@(MTRAttributeIDTypeClusterModeSelectAttributeStartUpModeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeStartUpModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeStartUpModeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeStartUpModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeModeSelectID) |
| attributeID:@(MTRAttributeIDTypeClusterModeSelectAttributeStartUpModeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOnModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeModeSelectID) |
| attributeID:@(MTRAttributeIDTypeClusterModeSelectAttributeOnModeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOnModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOnModeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOnModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeModeSelectID) |
| attributeID:@(MTRAttributeIDTypeClusterModeSelectAttributeOnModeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeModeSelectID) |
| attributeID:@(MTRAttributeIDTypeClusterModeSelectAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeModeSelectID) |
| attributeID:@(MTRAttributeIDTypeClusterModeSelectAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeModeSelectID) |
| attributeID:@(MTRAttributeIDTypeClusterModeSelectAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeModeSelectID) |
| attributeID:@(MTRAttributeIDTypeClusterModeSelectAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeModeSelectID) |
| attributeID:@(MTRAttributeIDTypeClusterModeSelectAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterModeSelect (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)changeToModeWithParams:(MTRModeSelectClusterChangeToModeParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self changeToModeWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterDoorLock |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)lockDoorWithParams:(MTRDoorLockClusterLockDoorParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeDoorLockID, (unsigned int) MTRCommandIDTypeClusterDoorLockCommandLockDoorID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::LockDoor::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (!timedInvokeTimeoutMs.HasValue()) { |
| timedInvokeTimeoutMs.SetValue(10000); |
| } |
| if (params != nil) { |
| if (params.pinCode != nil) { |
| auto & definedValue_0 = request.PINCode.Emplace(); |
| definedValue_0 = [self asByteSpan:params.pinCode]; |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)unlockDoorWithParams:(MTRDoorLockClusterUnlockDoorParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeDoorLockID, (unsigned int) MTRCommandIDTypeClusterDoorLockCommandUnlockDoorID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::UnlockDoor::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (!timedInvokeTimeoutMs.HasValue()) { |
| timedInvokeTimeoutMs.SetValue(10000); |
| } |
| if (params != nil) { |
| if (params.pinCode != nil) { |
| auto & definedValue_0 = request.PINCode.Emplace(); |
| definedValue_0 = [self asByteSpan:params.pinCode]; |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)unlockWithTimeoutWithParams:(MTRDoorLockClusterUnlockWithTimeoutParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeDoorLockID, |
| (unsigned int) MTRCommandIDTypeClusterDoorLockCommandUnlockWithTimeoutID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::UnlockWithTimeout::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (!timedInvokeTimeoutMs.HasValue()) { |
| timedInvokeTimeoutMs.SetValue(10000); |
| } |
| request.timeout = params.timeout.unsignedShortValue; |
| if (params.pinCode != nil) { |
| auto & definedValue_0 = request.PINCode.Emplace(); |
| definedValue_0 = [self asByteSpan:params.pinCode]; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)setWeekDayScheduleWithParams:(MTRDoorLockClusterSetWeekDayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeDoorLockID, |
| (unsigned int) MTRCommandIDTypeClusterDoorLockCommandSetWeekDayScheduleID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::SetWeekDaySchedule::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.weekDayIndex = params.weekDayIndex.unsignedCharValue; |
| request.userIndex = params.userIndex.unsignedShortValue; |
| request.daysMask |
| = static_cast<std::remove_reference_t<decltype(request.daysMask)>>(params.daysMask.unsignedCharValue); |
| request.startHour = params.startHour.unsignedCharValue; |
| request.startMinute = params.startMinute.unsignedCharValue; |
| request.endHour = params.endHour.unsignedCharValue; |
| request.endMinute = params.endMinute.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)getWeekDayScheduleWithParams:(MTRDoorLockClusterGetWeekDayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRDoorLockClusterGetWeekDayScheduleResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeDoorLockID, |
| (unsigned int) MTRCommandIDTypeClusterDoorLockCommandGetWeekDayScheduleID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRDoorLockClusterGetWeekDayScheduleResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| DoorLockClusterGetWeekDayScheduleResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRDoorLockClusterGetWeekDayScheduleResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::GetWeekDaySchedule::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.weekDayIndex = params.weekDayIndex.unsignedCharValue; |
| request.userIndex = params.userIndex.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)clearWeekDayScheduleWithParams:(MTRDoorLockClusterClearWeekDayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeDoorLockID, |
| (unsigned int) MTRCommandIDTypeClusterDoorLockCommandClearWeekDayScheduleID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::ClearWeekDaySchedule::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.weekDayIndex = params.weekDayIndex.unsignedCharValue; |
| request.userIndex = params.userIndex.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)setYearDayScheduleWithParams:(MTRDoorLockClusterSetYearDayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeDoorLockID, |
| (unsigned int) MTRCommandIDTypeClusterDoorLockCommandSetYearDayScheduleID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::SetYearDaySchedule::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.yearDayIndex = params.yearDayIndex.unsignedCharValue; |
| request.userIndex = params.userIndex.unsignedShortValue; |
| request.localStartTime = params.localStartTime.unsignedIntValue; |
| request.localEndTime = params.localEndTime.unsignedIntValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)getYearDayScheduleWithParams:(MTRDoorLockClusterGetYearDayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRDoorLockClusterGetYearDayScheduleResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeDoorLockID, |
| (unsigned int) MTRCommandIDTypeClusterDoorLockCommandGetYearDayScheduleID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRDoorLockClusterGetYearDayScheduleResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| DoorLockClusterGetYearDayScheduleResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRDoorLockClusterGetYearDayScheduleResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::GetYearDaySchedule::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.yearDayIndex = params.yearDayIndex.unsignedCharValue; |
| request.userIndex = params.userIndex.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)clearYearDayScheduleWithParams:(MTRDoorLockClusterClearYearDayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeDoorLockID, |
| (unsigned int) MTRCommandIDTypeClusterDoorLockCommandClearYearDayScheduleID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::ClearYearDaySchedule::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.yearDayIndex = params.yearDayIndex.unsignedCharValue; |
| request.userIndex = params.userIndex.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)setHolidayScheduleWithParams:(MTRDoorLockClusterSetHolidayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeDoorLockID, |
| (unsigned int) MTRCommandIDTypeClusterDoorLockCommandSetHolidayScheduleID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::SetHolidaySchedule::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.holidayIndex = params.holidayIndex.unsignedCharValue; |
| request.localStartTime = params.localStartTime.unsignedIntValue; |
| request.localEndTime = params.localEndTime.unsignedIntValue; |
| request.operatingMode |
| = static_cast<std::remove_reference_t<decltype(request.operatingMode)>>(params.operatingMode.unsignedCharValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)getHolidayScheduleWithParams:(MTRDoorLockClusterGetHolidayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRDoorLockClusterGetHolidayScheduleResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeDoorLockID, |
| (unsigned int) MTRCommandIDTypeClusterDoorLockCommandGetHolidayScheduleID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRDoorLockClusterGetHolidayScheduleResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| DoorLockClusterGetHolidayScheduleResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRDoorLockClusterGetHolidayScheduleResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::GetHolidaySchedule::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.holidayIndex = params.holidayIndex.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)clearHolidayScheduleWithParams:(MTRDoorLockClusterClearHolidayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeDoorLockID, |
| (unsigned int) MTRCommandIDTypeClusterDoorLockCommandClearHolidayScheduleID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::ClearHolidaySchedule::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.holidayIndex = params.holidayIndex.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)setUserWithParams:(MTRDoorLockClusterSetUserParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeDoorLockID, (unsigned int) MTRCommandIDTypeClusterDoorLockCommandSetUserID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::SetUser::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (!timedInvokeTimeoutMs.HasValue()) { |
| timedInvokeTimeoutMs.SetValue(10000); |
| } |
| request.operationType |
| = static_cast<std::remove_reference_t<decltype(request.operationType)>>(params.operationType.unsignedCharValue); |
| request.userIndex = params.userIndex.unsignedShortValue; |
| if (params.userName == nil) { |
| request.userName.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.userName.SetNonNull(); |
| nonNullValue_0 = [self asCharSpan:params.userName]; |
| } |
| if (params.userUniqueID == nil) { |
| request.userUniqueID.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.userUniqueID.SetNonNull(); |
| nonNullValue_0 = params.userUniqueID.unsignedIntValue; |
| } |
| if (params.userStatus == nil) { |
| request.userStatus.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.userStatus.SetNonNull(); |
| nonNullValue_0 |
| = static_cast<std::remove_reference_t<decltype(nonNullValue_0)>>(params.userStatus.unsignedCharValue); |
| } |
| if (params.userType == nil) { |
| request.userType.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.userType.SetNonNull(); |
| nonNullValue_0 |
| = static_cast<std::remove_reference_t<decltype(nonNullValue_0)>>(params.userType.unsignedCharValue); |
| } |
| if (params.credentialRule == nil) { |
| request.credentialRule.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.credentialRule.SetNonNull(); |
| nonNullValue_0 |
| = static_cast<std::remove_reference_t<decltype(nonNullValue_0)>>(params.credentialRule.unsignedCharValue); |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)getUserWithParams:(MTRDoorLockClusterGetUserParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRDoorLockClusterGetUserResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeDoorLockID, (unsigned int) MTRCommandIDTypeClusterDoorLockCommandGetUserID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRDoorLockClusterGetUserResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| DoorLockClusterGetUserResponseCallbackType successCb, MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRDoorLockClusterGetUserResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::GetUser::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.userIndex = params.userIndex.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)clearUserWithParams:(MTRDoorLockClusterClearUserParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeDoorLockID, (unsigned int) MTRCommandIDTypeClusterDoorLockCommandClearUserID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::ClearUser::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (!timedInvokeTimeoutMs.HasValue()) { |
| timedInvokeTimeoutMs.SetValue(10000); |
| } |
| request.userIndex = params.userIndex.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)setCredentialWithParams:(MTRDoorLockClusterSetCredentialParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRDoorLockClusterSetCredentialResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeDoorLockID, (unsigned int) MTRCommandIDTypeClusterDoorLockCommandSetCredentialID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRDoorLockClusterSetCredentialResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| DoorLockClusterSetCredentialResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRDoorLockClusterSetCredentialResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::SetCredential::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (!timedInvokeTimeoutMs.HasValue()) { |
| timedInvokeTimeoutMs.SetValue(10000); |
| } |
| request.operationType |
| = static_cast<std::remove_reference_t<decltype(request.operationType)>>(params.operationType.unsignedCharValue); |
| request.credential.credentialType |
| = static_cast<std::remove_reference_t<decltype(request.credential.credentialType)>>( |
| params.credential.credentialType.unsignedCharValue); |
| request.credential.credentialIndex = params.credential.credentialIndex.unsignedShortValue; |
| request.credentialData = [self asByteSpan:params.credentialData]; |
| if (params.userIndex == nil) { |
| request.userIndex.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.userIndex.SetNonNull(); |
| nonNullValue_0 = params.userIndex.unsignedShortValue; |
| } |
| if (params.userStatus == nil) { |
| request.userStatus.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.userStatus.SetNonNull(); |
| nonNullValue_0 |
| = static_cast<std::remove_reference_t<decltype(nonNullValue_0)>>(params.userStatus.unsignedCharValue); |
| } |
| if (params.userType == nil) { |
| request.userType.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.userType.SetNonNull(); |
| nonNullValue_0 |
| = static_cast<std::remove_reference_t<decltype(nonNullValue_0)>>(params.userType.unsignedCharValue); |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)getCredentialStatusWithParams:(MTRDoorLockClusterGetCredentialStatusParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeDoorLockID, |
| (unsigned int) MTRCommandIDTypeClusterDoorLockCommandGetCredentialStatusID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRDoorLockClusterGetCredentialStatusResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| DoorLockClusterGetCredentialStatusResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRDoorLockClusterGetCredentialStatusResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::GetCredentialStatus::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.credential.credentialType |
| = static_cast<std::remove_reference_t<decltype(request.credential.credentialType)>>( |
| params.credential.credentialType.unsignedCharValue); |
| request.credential.credentialIndex = params.credential.credentialIndex.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)clearCredentialWithParams:(MTRDoorLockClusterClearCredentialParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeDoorLockID, |
| (unsigned int) MTRCommandIDTypeClusterDoorLockCommandClearCredentialID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| DoorLock::Commands::ClearCredential::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (!timedInvokeTimeoutMs.HasValue()) { |
| timedInvokeTimeoutMs.SetValue(10000); |
| } |
| if (params.credential == nil) { |
| request.credential.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.credential.SetNonNull(); |
| nonNullValue_0.credentialType = static_cast<std::remove_reference_t<decltype(nonNullValue_0.credentialType)>>( |
| params.credential.credentialType.unsignedCharValue); |
| nonNullValue_0.credentialIndex = params.credential.credentialIndex.unsignedShortValue; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLockStateWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeLockStateID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLockTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeLockTypeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActuatorEnabledWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeActuatorEnabledID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDoorStateWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeDoorStateID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDoorOpenEventsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeDoorOpenEventsID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeDoorOpenEventsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeDoorOpenEventsWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeDoorOpenEventsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeDoorOpenEventsID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDoorClosedEventsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeDoorClosedEventsID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeDoorClosedEventsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeDoorClosedEventsWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeDoorClosedEventsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeDoorClosedEventsID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOpenPeriodWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeOpenPeriodID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOpenPeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOpenPeriodWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOpenPeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeOpenPeriodID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNumberOfTotalUsersSupportedWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeNumberOfTotalUsersSupportedID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNumberOfPINUsersSupportedWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeNumberOfPINUsersSupportedID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNumberOfRFIDUsersSupportedWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeNumberOfRFIDUsersSupportedID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNumberOfWeekDaySchedulesSupportedPerUserWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeNumberOfWeekDaySchedulesSupportedPerUserID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNumberOfYearDaySchedulesSupportedPerUserWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeNumberOfYearDaySchedulesSupportedPerUserID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNumberOfHolidaySchedulesSupportedWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeNumberOfHolidaySchedulesSupportedID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxPINCodeLengthWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeMaxPINCodeLengthID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinPINCodeLengthWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeMinPINCodeLengthID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxRFIDCodeLengthWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeMaxRFIDCodeLengthID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinRFIDCodeLengthWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeMinRFIDCodeLengthID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCredentialRulesSupportWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeCredentialRulesSupportID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNumberOfCredentialsSupportedPerUserWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeNumberOfCredentialsSupportedPerUserID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLanguageWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeLanguageID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLanguageWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLanguageWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeLanguageWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeLanguageID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLEDSettingsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeLEDSettingsID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLEDSettingsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLEDSettingsWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeLEDSettingsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeLEDSettingsID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAutoRelockTimeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeAutoRelockTimeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeAutoRelockTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeAutoRelockTimeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeAutoRelockTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeAutoRelockTimeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSoundVolumeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeSoundVolumeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeSoundVolumeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeSoundVolumeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeSoundVolumeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeSoundVolumeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOperatingModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeOperatingModeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOperatingModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOperatingModeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOperatingModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeOperatingModeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSupportedOperatingModesWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeSupportedOperatingModesID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDefaultConfigurationRegisterWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeDefaultConfigurationRegisterID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEnableLocalProgrammingWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeEnableLocalProgrammingID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeEnableLocalProgrammingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeEnableLocalProgrammingWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeEnableLocalProgrammingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeEnableLocalProgrammingID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEnableOneTouchLockingWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeEnableOneTouchLockingID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeEnableOneTouchLockingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeEnableOneTouchLockingWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeEnableOneTouchLockingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeEnableOneTouchLockingID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEnableInsideStatusLEDWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeEnableInsideStatusLEDID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeEnableInsideStatusLEDWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeEnableInsideStatusLEDWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeEnableInsideStatusLEDWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeEnableInsideStatusLEDID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEnablePrivacyModeButtonWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeEnablePrivacyModeButtonID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeEnablePrivacyModeButtonWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeEnablePrivacyModeButtonWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeEnablePrivacyModeButtonWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeEnablePrivacyModeButtonID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLocalProgrammingFeaturesWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeLocalProgrammingFeaturesID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLocalProgrammingFeaturesWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLocalProgrammingFeaturesWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeLocalProgrammingFeaturesWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeLocalProgrammingFeaturesID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWrongCodeEntryLimitWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeWrongCodeEntryLimitID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeWrongCodeEntryLimitWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeWrongCodeEntryLimitWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeWrongCodeEntryLimitWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeWrongCodeEntryLimitID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUserCodeTemporaryDisableTimeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeUserCodeTemporaryDisableTimeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeUserCodeTemporaryDisableTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeUserCodeTemporaryDisableTimeWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeUserCodeTemporaryDisableTimeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeUserCodeTemporaryDisableTimeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSendPINOverTheAirWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeSendPINOverTheAirID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeSendPINOverTheAirWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeSendPINOverTheAirWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeSendPINOverTheAirWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeSendPINOverTheAirID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRequirePINforRemoteOperationWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeRequirePINforRemoteOperationID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeRequirePINforRemoteOperationWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeRequirePINforRemoteOperationWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeRequirePINforRemoteOperationWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeRequirePINforRemoteOperationID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeExpiringUserTimeoutWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeExpiringUserTimeoutID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeExpiringUserTimeoutWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeExpiringUserTimeoutWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeExpiringUserTimeoutWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeExpiringUserTimeoutID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeDoorLockID) |
| attributeID:@(MTRAttributeIDTypeClusterDoorLockAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterDoorLock (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)lockDoorWithParams:(MTRDoorLockClusterLockDoorParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self lockDoorWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)unlockDoorWithParams:(MTRDoorLockClusterUnlockDoorParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self unlockDoorWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)unlockWithTimeoutWithParams:(MTRDoorLockClusterUnlockWithTimeoutParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self unlockWithTimeoutWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)setWeekDayScheduleWithParams:(MTRDoorLockClusterSetWeekDayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self setWeekDayScheduleWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)getWeekDayScheduleWithParams:(MTRDoorLockClusterGetWeekDayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRDoorLockClusterGetWeekDayScheduleResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self getWeekDayScheduleWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRDoorLockClusterGetWeekDayScheduleResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRDoorLockClusterGetWeekDayScheduleResponseParams *>(data), error); |
| }]; |
| } |
| - (void)clearWeekDayScheduleWithParams:(MTRDoorLockClusterClearWeekDayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self clearWeekDayScheduleWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)setYearDayScheduleWithParams:(MTRDoorLockClusterSetYearDayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self setYearDayScheduleWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)getYearDayScheduleWithParams:(MTRDoorLockClusterGetYearDayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRDoorLockClusterGetYearDayScheduleResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self getYearDayScheduleWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRDoorLockClusterGetYearDayScheduleResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRDoorLockClusterGetYearDayScheduleResponseParams *>(data), error); |
| }]; |
| } |
| - (void)clearYearDayScheduleWithParams:(MTRDoorLockClusterClearYearDayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self clearYearDayScheduleWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)setHolidayScheduleWithParams:(MTRDoorLockClusterSetHolidayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self setHolidayScheduleWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)getHolidayScheduleWithParams:(MTRDoorLockClusterGetHolidayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRDoorLockClusterGetHolidayScheduleResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self getHolidayScheduleWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRDoorLockClusterGetHolidayScheduleResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRDoorLockClusterGetHolidayScheduleResponseParams *>(data), error); |
| }]; |
| } |
| - (void)clearHolidayScheduleWithParams:(MTRDoorLockClusterClearHolidayScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self clearHolidayScheduleWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)setUserWithParams:(MTRDoorLockClusterSetUserParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self setUserWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)getUserWithParams:(MTRDoorLockClusterGetUserParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRDoorLockClusterGetUserResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self getUserWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRDoorLockClusterGetUserResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRDoorLockClusterGetUserResponseParams *>(data), error); |
| }]; |
| } |
| - (void)clearUserWithParams:(MTRDoorLockClusterClearUserParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self clearUserWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)setCredentialWithParams:(MTRDoorLockClusterSetCredentialParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRDoorLockClusterSetCredentialResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self setCredentialWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRDoorLockClusterSetCredentialResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRDoorLockClusterSetCredentialResponseParams *>(data), error); |
| }]; |
| } |
| - (void)getCredentialStatusWithParams:(MTRDoorLockClusterGetCredentialStatusParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self getCredentialStatusWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRDoorLockClusterGetCredentialStatusResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRDoorLockClusterGetCredentialStatusResponseParams *>(data), error); |
| }]; |
| } |
| - (void)clearCredentialWithParams:(MTRDoorLockClusterClearCredentialParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self clearCredentialWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterWindowCovering |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)upOrOpenWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self upOrOpenWithParams:nil expectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs completion:completion]; |
| } |
| - (void)upOrOpenWithParams:(MTRWindowCoveringClusterUpOrOpenParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeWindowCoveringID, |
| (unsigned int) MTRCommandIDTypeClusterWindowCoveringCommandUpOrOpenID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| WindowCovering::Commands::UpOrOpen::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)downOrCloseWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self downOrCloseWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)downOrCloseWithParams:(MTRWindowCoveringClusterDownOrCloseParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeWindowCoveringID, |
| (unsigned int) MTRCommandIDTypeClusterWindowCoveringCommandDownOrCloseID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| WindowCovering::Commands::DownOrClose::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)stopMotionWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self stopMotionWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)stopMotionWithParams:(MTRWindowCoveringClusterStopMotionParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeWindowCoveringID, |
| (unsigned int) MTRCommandIDTypeClusterWindowCoveringCommandStopMotionID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| WindowCovering::Commands::StopMotion::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)goToLiftValueWithParams:(MTRWindowCoveringClusterGoToLiftValueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeWindowCoveringID, |
| (unsigned int) MTRCommandIDTypeClusterWindowCoveringCommandGoToLiftValueID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| WindowCovering::Commands::GoToLiftValue::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.liftValue = params.liftValue.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)goToLiftPercentageWithParams:(MTRWindowCoveringClusterGoToLiftPercentageParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeWindowCoveringID, |
| (unsigned int) MTRCommandIDTypeClusterWindowCoveringCommandGoToLiftPercentageID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| WindowCovering::Commands::GoToLiftPercentage::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.liftPercent100thsValue = params.liftPercent100thsValue.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)goToTiltValueWithParams:(MTRWindowCoveringClusterGoToTiltValueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeWindowCoveringID, |
| (unsigned int) MTRCommandIDTypeClusterWindowCoveringCommandGoToTiltValueID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| WindowCovering::Commands::GoToTiltValue::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.tiltValue = params.tiltValue.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)goToTiltPercentageWithParams:(MTRWindowCoveringClusterGoToTiltPercentageParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeWindowCoveringID, |
| (unsigned int) MTRCommandIDTypeClusterWindowCoveringCommandGoToTiltPercentageID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| WindowCovering::Commands::GoToTiltPercentage::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.tiltPercent100thsValue = params.tiltPercent100thsValue.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeTypeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePhysicalClosedLimitLiftWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributePhysicalClosedLimitLiftID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePhysicalClosedLimitTiltWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributePhysicalClosedLimitTiltID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentPositionLiftWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeCurrentPositionLiftID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentPositionTiltWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeCurrentPositionTiltID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNumberOfActuationsLiftWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeNumberOfActuationsLiftID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNumberOfActuationsTiltWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeNumberOfActuationsTiltID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeConfigStatusWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeConfigStatusID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentPositionLiftPercentageWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeCurrentPositionLiftPercentageID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentPositionTiltPercentageWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeCurrentPositionTiltPercentageID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOperationalStatusWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeOperationalStatusID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTargetPositionLiftPercent100thsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeTargetPositionLiftPercent100thsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTargetPositionTiltPercent100thsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeTargetPositionTiltPercent100thsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEndProductTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeEndProductTypeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentPositionLiftPercent100thsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeCurrentPositionLiftPercent100thsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentPositionTiltPercent100thsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeCurrentPositionTiltPercent100thsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInstalledOpenLimitLiftWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeInstalledOpenLimitLiftID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInstalledClosedLimitLiftWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeInstalledClosedLimitLiftID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInstalledOpenLimitTiltWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeInstalledOpenLimitTiltID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInstalledClosedLimitTiltWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeInstalledClosedLimitTiltID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeModeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeModeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeModeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSafetyStatusWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeSafetyStatusID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWindowCoveringID) |
| attributeID:@(MTRAttributeIDTypeClusterWindowCoveringAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterWindowCovering (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)upOrOpenWithParams:(MTRWindowCoveringClusterUpOrOpenParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self upOrOpenWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)upOrOpenWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self upOrOpenWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)downOrCloseWithParams:(MTRWindowCoveringClusterDownOrCloseParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self downOrCloseWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)downOrCloseWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self downOrCloseWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)stopMotionWithParams:(MTRWindowCoveringClusterStopMotionParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self stopMotionWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)stopMotionWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self stopMotionWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)goToLiftValueWithParams:(MTRWindowCoveringClusterGoToLiftValueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self goToLiftValueWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)goToLiftPercentageWithParams:(MTRWindowCoveringClusterGoToLiftPercentageParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self goToLiftPercentageWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)goToTiltValueWithParams:(MTRWindowCoveringClusterGoToTiltValueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self goToTiltValueWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)goToTiltPercentageWithParams:(MTRWindowCoveringClusterGoToTiltPercentageParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self goToTiltPercentageWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterBarrierControl |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)barrierControlGoToPercentWithParams:(MTRBarrierControlClusterBarrierControlGoToPercentParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeBarrierControlID, |
| (unsigned int) MTRCommandIDTypeClusterBarrierControlCommandBarrierControlGoToPercentID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| BarrierControl::Commands::BarrierControlGoToPercent::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.percentOpen = params.percentOpen.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)barrierControlStopWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self barrierControlStopWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)barrierControlStopWithParams:(MTRBarrierControlClusterBarrierControlStopParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeBarrierControlID, |
| (unsigned int) MTRCommandIDTypeClusterBarrierControlCommandBarrierControlStopID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| BarrierControl::Commands::BarrierControlStop::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBarrierMovingStateWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierMovingStateID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBarrierSafetyStatusWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierSafetyStatusID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBarrierCapabilitiesWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierCapabilitiesID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBarrierOpenEventsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierOpenEventsID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeBarrierOpenEventsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeBarrierOpenEventsWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeBarrierOpenEventsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierOpenEventsID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBarrierCloseEventsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierCloseEventsID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeBarrierCloseEventsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeBarrierCloseEventsWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeBarrierCloseEventsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierCloseEventsID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBarrierCommandOpenEventsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierCommandOpenEventsID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeBarrierCommandOpenEventsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeBarrierCommandOpenEventsWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeBarrierCommandOpenEventsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierCommandOpenEventsID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBarrierCommandCloseEventsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierCommandCloseEventsID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeBarrierCommandCloseEventsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeBarrierCommandCloseEventsWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeBarrierCommandCloseEventsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierCommandCloseEventsID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBarrierOpenPeriodWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierOpenPeriodID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeBarrierOpenPeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeBarrierOpenPeriodWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeBarrierOpenPeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierOpenPeriodID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBarrierClosePeriodWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierClosePeriodID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeBarrierClosePeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeBarrierClosePeriodWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeBarrierClosePeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierClosePeriodID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBarrierPositionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeBarrierPositionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBarrierControlID) |
| attributeID:@(MTRAttributeIDTypeClusterBarrierControlAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterBarrierControl (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)barrierControlGoToPercentWithParams:(MTRBarrierControlClusterBarrierControlGoToPercentParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self barrierControlGoToPercentWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)barrierControlStopWithParams:(MTRBarrierControlClusterBarrierControlStopParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self barrierControlStopWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)barrierControlStopWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self barrierControlStopWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterPumpConfigurationAndControl |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxPressureWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeMaxPressureID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxSpeedWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeMaxSpeedID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxFlowWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeMaxFlowID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinConstPressureWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeMinConstPressureID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxConstPressureWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeMaxConstPressureID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinCompPressureWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeMinCompPressureID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxCompPressureWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeMaxCompPressureID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinConstSpeedWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeMinConstSpeedID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxConstSpeedWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeMaxConstSpeedID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinConstFlowWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeMinConstFlowID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxConstFlowWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeMaxConstFlowID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinConstTempWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeMinConstTempID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxConstTempWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeMaxConstTempID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePumpStatusWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributePumpStatusID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEffectiveOperationModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeEffectiveOperationModeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEffectiveControlModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeEffectiveControlModeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCapacityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeCapacityID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSpeedWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeSpeedID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLifetimeRunningHoursWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeLifetimeRunningHoursID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLifetimeRunningHoursWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLifetimeRunningHoursWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeLifetimeRunningHoursWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeLifetimeRunningHoursID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePowerWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributePowerID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLifetimeEnergyConsumedWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeLifetimeEnergyConsumedID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLifetimeEnergyConsumedWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLifetimeEnergyConsumedWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeLifetimeEnergyConsumedWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device |
| writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeLifetimeEnergyConsumedID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOperationModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeOperationModeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOperationModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOperationModeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOperationModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeOperationModeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeControlModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeControlModeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeControlModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeControlModeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeControlModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeControlModeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePumpConfigurationAndControlID) |
| attributeID:@(MTRAttributeIDTypeClusterPumpConfigurationAndControlAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterPumpConfigurationAndControl (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterThermostat |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)setpointRaiseLowerWithParams:(MTRThermostatClusterSetpointRaiseLowerParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeThermostatID, |
| (unsigned int) MTRCommandIDTypeClusterThermostatCommandSetpointRaiseLowerID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Thermostat::Commands::SetpointRaiseLower::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.mode = static_cast<std::remove_reference_t<decltype(request.mode)>>(params.mode.unsignedCharValue); |
| request.amount = params.amount.charValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)setWeeklyScheduleWithParams:(MTRThermostatClusterSetWeeklyScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeThermostatID, |
| (unsigned int) MTRCommandIDTypeClusterThermostatCommandSetWeeklyScheduleID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Thermostat::Commands::SetWeeklySchedule::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.numberOfTransitionsForSequence = params.numberOfTransitionsForSequence.unsignedCharValue; |
| request.dayOfWeekForSequence = static_cast<std::remove_reference_t<decltype(request.dayOfWeekForSequence)>>( |
| params.dayOfWeekForSequence.unsignedCharValue); |
| request.modeForSequence = static_cast<std::remove_reference_t<decltype(request.modeForSequence)>>( |
| params.modeForSequence.unsignedCharValue); |
| { |
| using ListType_0 = std::remove_reference_t<decltype(request.transitions)>; |
| using ListMemberType_0 = ListMemberTypeGetter<ListType_0>::Type; |
| if (params.transitions.count != 0) { |
| auto * listHolder_0 = new ListHolder<ListMemberType_0>(params.transitions.count); |
| if (listHolder_0 == nullptr || listHolder_0->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_0); |
| for (size_t i_0 = 0; i_0 < params.transitions.count; ++i_0) { |
| if (![params.transitions[i_0] isKindOfClass:[MTRThermostatClusterThermostatScheduleTransition class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_0 = (MTRThermostatClusterThermostatScheduleTransition *) params.transitions[i_0]; |
| listHolder_0->mList[i_0].transitionTime = element_0.transitionTime.unsignedShortValue; |
| if (element_0.heatSetpoint == nil) { |
| listHolder_0->mList[i_0].heatSetpoint.SetNull(); |
| } else { |
| auto & nonNullValue_2 = listHolder_0->mList[i_0].heatSetpoint.SetNonNull(); |
| nonNullValue_2 = element_0.heatSetpoint.shortValue; |
| } |
| if (element_0.coolSetpoint == nil) { |
| listHolder_0->mList[i_0].coolSetpoint.SetNull(); |
| } else { |
| auto & nonNullValue_2 = listHolder_0->mList[i_0].coolSetpoint.SetNonNull(); |
| nonNullValue_2 = element_0.coolSetpoint.shortValue; |
| } |
| } |
| request.transitions = ListType_0(listHolder_0->mList, params.transitions.count); |
| } else { |
| request.transitions = ListType_0(); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)getWeeklyScheduleWithParams:(MTRThermostatClusterGetWeeklyScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRThermostatClusterGetWeeklyScheduleResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeThermostatID, |
| (unsigned int) MTRCommandIDTypeClusterThermostatCommandGetWeeklyScheduleID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRThermostatClusterGetWeeklyScheduleResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| ThermostatClusterGetWeeklyScheduleResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRThermostatClusterGetWeeklyScheduleResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Thermostat::Commands::GetWeeklySchedule::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.daysToReturn |
| = static_cast<std::remove_reference_t<decltype(request.daysToReturn)>>(params.daysToReturn.unsignedCharValue); |
| request.modeToReturn |
| = static_cast<std::remove_reference_t<decltype(request.modeToReturn)>>(params.modeToReturn.unsignedCharValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)clearWeeklyScheduleWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self clearWeeklyScheduleWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)clearWeeklyScheduleWithParams:(MTRThermostatClusterClearWeeklyScheduleParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeThermostatID, |
| (unsigned int) MTRCommandIDTypeClusterThermostatCommandClearWeeklyScheduleID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Thermostat::Commands::ClearWeeklySchedule::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLocalTemperatureWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeLocalTemperatureID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOutdoorTemperatureWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeOutdoorTemperatureID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOccupancyWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeOccupancyID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAbsMinHeatSetpointLimitWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeAbsMinHeatSetpointLimitID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAbsMaxHeatSetpointLimitWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeAbsMaxHeatSetpointLimitID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAbsMinCoolSetpointLimitWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeAbsMinCoolSetpointLimitID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAbsMaxCoolSetpointLimitWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeAbsMaxCoolSetpointLimitID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePICoolingDemandWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributePICoolingDemandID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePIHeatingDemandWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributePIHeatingDemandID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeHVACSystemTypeConfigurationWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeHVACSystemTypeConfigurationID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeHVACSystemTypeConfigurationWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeHVACSystemTypeConfigurationWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeHVACSystemTypeConfigurationWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeHVACSystemTypeConfigurationID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLocalTemperatureCalibrationWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeLocalTemperatureCalibrationID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLocalTemperatureCalibrationWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLocalTemperatureCalibrationWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeLocalTemperatureCalibrationWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeLocalTemperatureCalibrationID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOccupiedCoolingSetpointWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeOccupiedCoolingSetpointID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOccupiedCoolingSetpointWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOccupiedCoolingSetpointWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeOccupiedCoolingSetpointWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeOccupiedCoolingSetpointID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOccupiedHeatingSetpointWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeOccupiedHeatingSetpointID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOccupiedHeatingSetpointWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOccupiedHeatingSetpointWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeOccupiedHeatingSetpointWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeOccupiedHeatingSetpointID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUnoccupiedCoolingSetpointWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeUnoccupiedCoolingSetpointID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeUnoccupiedCoolingSetpointWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeUnoccupiedCoolingSetpointWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeUnoccupiedCoolingSetpointWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeUnoccupiedCoolingSetpointID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUnoccupiedHeatingSetpointWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeUnoccupiedHeatingSetpointID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeUnoccupiedHeatingSetpointWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeUnoccupiedHeatingSetpointWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeUnoccupiedHeatingSetpointWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeUnoccupiedHeatingSetpointID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinHeatSetpointLimitWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeMinHeatSetpointLimitID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeMinHeatSetpointLimitWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeMinHeatSetpointLimitWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeMinHeatSetpointLimitWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeMinHeatSetpointLimitID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxHeatSetpointLimitWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeMaxHeatSetpointLimitID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeMaxHeatSetpointLimitWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeMaxHeatSetpointLimitWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeMaxHeatSetpointLimitWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeMaxHeatSetpointLimitID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinCoolSetpointLimitWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeMinCoolSetpointLimitID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeMinCoolSetpointLimitWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeMinCoolSetpointLimitWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeMinCoolSetpointLimitWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeMinCoolSetpointLimitID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxCoolSetpointLimitWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeMaxCoolSetpointLimitID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeMaxCoolSetpointLimitWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeMaxCoolSetpointLimitWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeMaxCoolSetpointLimitWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeMaxCoolSetpointLimitID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinSetpointDeadBandWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeMinSetpointDeadBandID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeMinSetpointDeadBandWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeMinSetpointDeadBandWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeMinSetpointDeadBandWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeMinSetpointDeadBandID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRemoteSensingWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeRemoteSensingID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeRemoteSensingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeRemoteSensingWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeRemoteSensingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeRemoteSensingID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeControlSequenceOfOperationWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeControlSequenceOfOperationID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeControlSequenceOfOperationWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeControlSequenceOfOperationWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeControlSequenceOfOperationWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeControlSequenceOfOperationID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSystemModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeSystemModeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeSystemModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeSystemModeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeSystemModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeSystemModeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeThermostatRunningModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeThermostatRunningModeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeStartOfWeekWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeStartOfWeekID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNumberOfWeeklyTransitionsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeNumberOfWeeklyTransitionsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNumberOfDailyTransitionsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeNumberOfDailyTransitionsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTemperatureSetpointHoldWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeTemperatureSetpointHoldID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeTemperatureSetpointHoldWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeTemperatureSetpointHoldWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeTemperatureSetpointHoldWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeTemperatureSetpointHoldID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTemperatureSetpointHoldDurationWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeTemperatureSetpointHoldDurationID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeTemperatureSetpointHoldDurationWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeTemperatureSetpointHoldDurationWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeTemperatureSetpointHoldDurationWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeTemperatureSetpointHoldDurationID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeThermostatProgrammingOperationModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeThermostatProgrammingOperationModeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeThermostatProgrammingOperationModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeThermostatProgrammingOperationModeWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeThermostatProgrammingOperationModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeThermostatProgrammingOperationModeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeThermostatRunningStateWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeThermostatRunningStateID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSetpointChangeSourceWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeSetpointChangeSourceID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSetpointChangeAmountWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeSetpointChangeAmountID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSetpointChangeSourceTimestampWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeSetpointChangeSourceTimestampID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOccupiedSetbackWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeOccupiedSetbackID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOccupiedSetbackWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOccupiedSetbackWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOccupiedSetbackWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeOccupiedSetbackID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOccupiedSetbackMinWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeOccupiedSetbackMinID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOccupiedSetbackMaxWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeOccupiedSetbackMaxID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUnoccupiedSetbackWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeUnoccupiedSetbackID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeUnoccupiedSetbackWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeUnoccupiedSetbackWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeUnoccupiedSetbackWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeUnoccupiedSetbackID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUnoccupiedSetbackMinWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeUnoccupiedSetbackMinID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUnoccupiedSetbackMaxWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeUnoccupiedSetbackMaxID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEmergencyHeatDeltaWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeEmergencyHeatDeltaID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeEmergencyHeatDeltaWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeEmergencyHeatDeltaWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeEmergencyHeatDeltaWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeEmergencyHeatDeltaID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeACTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeACTypeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeACTypeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeACTypeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeACTypeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeACTypeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeACCapacityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeACCapacityID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeACCapacityWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeACCapacityWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeACCapacityWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeACCapacityID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeACRefrigerantTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeACRefrigerantTypeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeACRefrigerantTypeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeACRefrigerantTypeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeACRefrigerantTypeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeACRefrigerantTypeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeACCompressorTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeACCompressorTypeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeACCompressorTypeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeACCompressorTypeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeACCompressorTypeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeACCompressorTypeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeACErrorCodeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeACErrorCodeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeACErrorCodeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeACErrorCodeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeACErrorCodeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeACErrorCodeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeACLouverPositionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeACLouverPositionID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeACLouverPositionWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeACLouverPositionWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeACLouverPositionWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeACLouverPositionID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeACCoilTemperatureWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeACCoilTemperatureID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeACCapacityformatWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeACCapacityformatID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeACCapacityformatWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeACCapacityformatWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeACCapacityformatWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeACCapacityformatID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterThermostat (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)setpointRaiseLowerWithParams:(MTRThermostatClusterSetpointRaiseLowerParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self setpointRaiseLowerWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)setWeeklyScheduleWithParams:(MTRThermostatClusterSetWeeklyScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self setWeeklyScheduleWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)getWeeklyScheduleWithParams:(MTRThermostatClusterGetWeeklyScheduleParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRThermostatClusterGetWeeklyScheduleResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self getWeeklyScheduleWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRThermostatClusterGetWeeklyScheduleResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRThermostatClusterGetWeeklyScheduleResponseParams *>(data), error); |
| }]; |
| } |
| - (void)clearWeeklyScheduleWithParams:(MTRThermostatClusterClearWeeklyScheduleParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self clearWeeklyScheduleWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)clearWeeklyScheduleWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self clearWeeklyScheduleWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterFanControl |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFanModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeFanModeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeFanModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeFanModeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeFanModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeFanModeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFanModeSequenceWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeFanModeSequenceID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeFanModeSequenceWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeFanModeSequenceWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeFanModeSequenceWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeFanModeSequenceID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePercentSettingWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributePercentSettingID) |
| params:params]; |
| } |
| |
| - (void)writeAttributePercentSettingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributePercentSettingWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributePercentSettingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributePercentSettingID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePercentCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributePercentCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSpeedMaxWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeSpeedMaxID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSpeedSettingWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeSpeedSettingID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeSpeedSettingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeSpeedSettingWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeSpeedSettingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeSpeedSettingID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSpeedCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeSpeedCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRockSupportWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeRockSupportID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRockSettingWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeRockSettingID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeRockSettingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeRockSettingWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeRockSettingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeRockSettingID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWindSupportWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeWindSupportID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWindSettingWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeWindSettingID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeWindSettingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeWindSettingWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeWindSettingWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeWindSettingID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFanControlID) |
| attributeID:@(MTRAttributeIDTypeClusterFanControlAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterFanControl (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterThermostatUserInterfaceConfiguration |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTemperatureDisplayModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatUserInterfaceConfigurationID) |
| attributeID: |
| @(MTRAttributeIDTypeClusterThermostatUserInterfaceConfigurationAttributeTemperatureDisplayModeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeTemperatureDisplayModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeTemperatureDisplayModeWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeTemperatureDisplayModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device |
| writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatUserInterfaceConfigurationID) |
| attributeID: |
| @(MTRAttributeIDTypeClusterThermostatUserInterfaceConfigurationAttributeTemperatureDisplayModeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeKeypadLockoutWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatUserInterfaceConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatUserInterfaceConfigurationAttributeKeypadLockoutID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeKeypadLockoutWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeKeypadLockoutWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeKeypadLockoutWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device |
| writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatUserInterfaceConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatUserInterfaceConfigurationAttributeKeypadLockoutID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeScheduleProgrammingVisibilityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatUserInterfaceConfigurationID) |
| attributeID: |
| @(MTRAttributeIDTypeClusterThermostatUserInterfaceConfigurationAttributeScheduleProgrammingVisibilityID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeScheduleProgrammingVisibilityWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeScheduleProgrammingVisibilityWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeScheduleProgrammingVisibilityWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device |
| writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatUserInterfaceConfigurationID) |
| attributeID: |
| @(MTRAttributeIDTypeClusterThermostatUserInterfaceConfigurationAttributeScheduleProgrammingVisibilityID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatUserInterfaceConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatUserInterfaceConfigurationAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatUserInterfaceConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatUserInterfaceConfigurationAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatUserInterfaceConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatUserInterfaceConfigurationAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatUserInterfaceConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatUserInterfaceConfigurationAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeThermostatUserInterfaceConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterThermostatUserInterfaceConfigurationAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterThermostatUserInterfaceConfiguration (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterColorControl |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)moveToHueWithParams:(MTRColorControlClusterMoveToHueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandMoveToHueID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::MoveToHue::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.hue = params.hue.unsignedCharValue; |
| request.direction |
| = static_cast<std::remove_reference_t<decltype(request.direction)>>(params.direction.unsignedCharValue); |
| request.transitionTime = params.transitionTime.unsignedShortValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)moveHueWithParams:(MTRColorControlClusterMoveHueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandMoveHueID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::MoveHue::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.moveMode |
| = static_cast<std::remove_reference_t<decltype(request.moveMode)>>(params.moveMode.unsignedCharValue); |
| request.rate = params.rate.unsignedCharValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)stepHueWithParams:(MTRColorControlClusterStepHueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandStepHueID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::StepHue::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.stepMode |
| = static_cast<std::remove_reference_t<decltype(request.stepMode)>>(params.stepMode.unsignedCharValue); |
| request.stepSize = params.stepSize.unsignedCharValue; |
| request.transitionTime = params.transitionTime.unsignedCharValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)moveToSaturationWithParams:(MTRColorControlClusterMoveToSaturationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandMoveToSaturationID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::MoveToSaturation::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.saturation = params.saturation.unsignedCharValue; |
| request.transitionTime = params.transitionTime.unsignedShortValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)moveSaturationWithParams:(MTRColorControlClusterMoveSaturationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandMoveSaturationID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::MoveSaturation::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.moveMode |
| = static_cast<std::remove_reference_t<decltype(request.moveMode)>>(params.moveMode.unsignedCharValue); |
| request.rate = params.rate.unsignedCharValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)stepSaturationWithParams:(MTRColorControlClusterStepSaturationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandStepSaturationID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::StepSaturation::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.stepMode |
| = static_cast<std::remove_reference_t<decltype(request.stepMode)>>(params.stepMode.unsignedCharValue); |
| request.stepSize = params.stepSize.unsignedCharValue; |
| request.transitionTime = params.transitionTime.unsignedCharValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)moveToHueAndSaturationWithParams:(MTRColorControlClusterMoveToHueAndSaturationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandMoveToHueAndSaturationID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::MoveToHueAndSaturation::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.hue = params.hue.unsignedCharValue; |
| request.saturation = params.saturation.unsignedCharValue; |
| request.transitionTime = params.transitionTime.unsignedShortValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)moveToColorWithParams:(MTRColorControlClusterMoveToColorParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandMoveToColorID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::MoveToColor::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.colorX = params.colorX.unsignedShortValue; |
| request.colorY = params.colorY.unsignedShortValue; |
| request.transitionTime = params.transitionTime.unsignedShortValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)moveColorWithParams:(MTRColorControlClusterMoveColorParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandMoveColorID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::MoveColor::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.rateX = params.rateX.shortValue; |
| request.rateY = params.rateY.shortValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)stepColorWithParams:(MTRColorControlClusterStepColorParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandStepColorID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::StepColor::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.stepX = params.stepX.shortValue; |
| request.stepY = params.stepY.shortValue; |
| request.transitionTime = params.transitionTime.unsignedShortValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)moveToColorTemperatureWithParams:(MTRColorControlClusterMoveToColorTemperatureParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandMoveToColorTemperatureID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::MoveToColorTemperature::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.colorTemperatureMireds = params.colorTemperatureMireds.unsignedShortValue; |
| request.transitionTime = params.transitionTime.unsignedShortValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)enhancedMoveToHueWithParams:(MTRColorControlClusterEnhancedMoveToHueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandEnhancedMoveToHueID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::EnhancedMoveToHue::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.enhancedHue = params.enhancedHue.unsignedShortValue; |
| request.direction |
| = static_cast<std::remove_reference_t<decltype(request.direction)>>(params.direction.unsignedCharValue); |
| request.transitionTime = params.transitionTime.unsignedShortValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)enhancedMoveHueWithParams:(MTRColorControlClusterEnhancedMoveHueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandEnhancedMoveHueID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::EnhancedMoveHue::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.moveMode |
| = static_cast<std::remove_reference_t<decltype(request.moveMode)>>(params.moveMode.unsignedCharValue); |
| request.rate = params.rate.unsignedShortValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)enhancedStepHueWithParams:(MTRColorControlClusterEnhancedStepHueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandEnhancedStepHueID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::EnhancedStepHue::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.stepMode |
| = static_cast<std::remove_reference_t<decltype(request.stepMode)>>(params.stepMode.unsignedCharValue); |
| request.stepSize = params.stepSize.unsignedShortValue; |
| request.transitionTime = params.transitionTime.unsignedShortValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)enhancedMoveToHueAndSaturationWithParams:(MTRColorControlClusterEnhancedMoveToHueAndSaturationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandEnhancedMoveToHueAndSaturationID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::EnhancedMoveToHueAndSaturation::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.enhancedHue = params.enhancedHue.unsignedShortValue; |
| request.saturation = params.saturation.unsignedCharValue; |
| request.transitionTime = params.transitionTime.unsignedShortValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)colorLoopSetWithParams:(MTRColorControlClusterColorLoopSetParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandColorLoopSetID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::ColorLoopSet::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.updateFlags |
| = static_cast<std::remove_reference_t<decltype(request.updateFlags)>>(params.updateFlags.unsignedCharValue); |
| request.action = static_cast<std::remove_reference_t<decltype(request.action)>>(params.action.unsignedCharValue); |
| request.direction |
| = static_cast<std::remove_reference_t<decltype(request.direction)>>(params.direction.unsignedCharValue); |
| request.time = params.time.unsignedShortValue; |
| request.startHue = params.startHue.unsignedShortValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)stopMoveStepWithParams:(MTRColorControlClusterStopMoveStepParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandStopMoveStepID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::StopMoveStep::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)moveColorTemperatureWithParams:(MTRColorControlClusterMoveColorTemperatureParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandMoveColorTemperatureID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::MoveColorTemperature::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.moveMode |
| = static_cast<std::remove_reference_t<decltype(request.moveMode)>>(params.moveMode.unsignedCharValue); |
| request.rate = params.rate.unsignedShortValue; |
| request.colorTemperatureMinimumMireds = params.colorTemperatureMinimumMireds.unsignedShortValue; |
| request.colorTemperatureMaximumMireds = params.colorTemperatureMaximumMireds.unsignedShortValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)stepColorTemperatureWithParams:(MTRColorControlClusterStepColorTemperatureParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeColorControlID, |
| (unsigned int) MTRCommandIDTypeClusterColorControlCommandStepColorTemperatureID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ColorControl::Commands::StepColorTemperature::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.stepMode |
| = static_cast<std::remove_reference_t<decltype(request.stepMode)>>(params.stepMode.unsignedCharValue); |
| request.stepSize = params.stepSize.unsignedShortValue; |
| request.transitionTime = params.transitionTime.unsignedShortValue; |
| request.colorTemperatureMinimumMireds = params.colorTemperatureMinimumMireds.unsignedShortValue; |
| request.colorTemperatureMaximumMireds = params.colorTemperatureMaximumMireds.unsignedShortValue; |
| request.optionsMask = params.optionsMask.unsignedCharValue; |
| request.optionsOverride = params.optionsOverride.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentHueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeCurrentHueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentSaturationWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeCurrentSaturationID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRemainingTimeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeRemainingTimeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentXWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeCurrentXID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentYWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeCurrentYID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDriftCompensationWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeDriftCompensationID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCompensationTextWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeCompensationTextID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorTemperatureMiredsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorTemperatureMiredsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorModeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOptionsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeOptionsID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOptionsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOptionsWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOptionsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeOptionsID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNumberOfPrimariesWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeNumberOfPrimariesID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary1XWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary1XID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary1YWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary1YID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary1IntensityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary1IntensityID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary2XWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary2XID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary2YWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary2YID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary2IntensityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary2IntensityID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary3XWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary3XID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary3YWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary3YID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary3IntensityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary3IntensityID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary4XWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary4XID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary4YWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary4YID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary4IntensityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary4IntensityID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary5XWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary5XID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary5YWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary5YID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary5IntensityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary5IntensityID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary6XWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary6XID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary6YWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary6YID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePrimary6IntensityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributePrimary6IntensityID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWhitePointXWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeWhitePointXID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeWhitePointXWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeWhitePointXWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeWhitePointXWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeWhitePointXID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWhitePointYWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeWhitePointYID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeWhitePointYWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeWhitePointYWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeWhitePointYWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeWhitePointYID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorPointRXWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointRXID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeColorPointRXWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeColorPointRXWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeColorPointRXWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointRXID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorPointRYWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointRYID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeColorPointRYWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeColorPointRYWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeColorPointRYWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointRYID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorPointRIntensityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointRIntensityID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeColorPointRIntensityWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeColorPointRIntensityWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeColorPointRIntensityWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointRIntensityID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorPointGXWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointGXID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeColorPointGXWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeColorPointGXWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeColorPointGXWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointGXID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorPointGYWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointGYID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeColorPointGYWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeColorPointGYWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeColorPointGYWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointGYID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorPointGIntensityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointGIntensityID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeColorPointGIntensityWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeColorPointGIntensityWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeColorPointGIntensityWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointGIntensityID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorPointBXWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointBXID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeColorPointBXWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeColorPointBXWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeColorPointBXWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointBXID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorPointBYWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointBYID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeColorPointBYWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeColorPointBYWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeColorPointBYWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointBYID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorPointBIntensityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointBIntensityID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeColorPointBIntensityWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeColorPointBIntensityWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeColorPointBIntensityWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorPointBIntensityID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEnhancedCurrentHueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeEnhancedCurrentHueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEnhancedColorModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeEnhancedColorModeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorLoopActiveWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorLoopActiveID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorLoopDirectionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorLoopDirectionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorLoopTimeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorLoopTimeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorLoopStartEnhancedHueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorLoopStartEnhancedHueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorLoopStoredEnhancedHueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorLoopStoredEnhancedHueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorCapabilitiesWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorCapabilitiesID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorTempPhysicalMinMiredsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorTempPhysicalMinMiredsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeColorTempPhysicalMaxMiredsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeColorTempPhysicalMaxMiredsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCoupleColorTempToLevelMinMiredsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeCoupleColorTempToLevelMinMiredsID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeStartUpColorTemperatureMiredsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeStartUpColorTemperatureMiredsID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeStartUpColorTemperatureMiredsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeStartUpColorTemperatureMiredsWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeStartUpColorTemperatureMiredsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeStartUpColorTemperatureMiredsID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeColorControlID) |
| attributeID:@(MTRAttributeIDTypeClusterColorControlAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterColorControl (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)moveToHueWithParams:(MTRColorControlClusterMoveToHueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self moveToHueWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)moveHueWithParams:(MTRColorControlClusterMoveHueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self moveHueWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)stepHueWithParams:(MTRColorControlClusterStepHueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self stepHueWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)moveToSaturationWithParams:(MTRColorControlClusterMoveToSaturationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self moveToSaturationWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)moveSaturationWithParams:(MTRColorControlClusterMoveSaturationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self moveSaturationWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)stepSaturationWithParams:(MTRColorControlClusterStepSaturationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self stepSaturationWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)moveToHueAndSaturationWithParams:(MTRColorControlClusterMoveToHueAndSaturationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self moveToHueAndSaturationWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)moveToColorWithParams:(MTRColorControlClusterMoveToColorParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self moveToColorWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)moveColorWithParams:(MTRColorControlClusterMoveColorParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self moveColorWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)stepColorWithParams:(MTRColorControlClusterStepColorParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self stepColorWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)moveToColorTemperatureWithParams:(MTRColorControlClusterMoveToColorTemperatureParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self moveToColorTemperatureWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)enhancedMoveToHueWithParams:(MTRColorControlClusterEnhancedMoveToHueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self enhancedMoveToHueWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)enhancedMoveHueWithParams:(MTRColorControlClusterEnhancedMoveHueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self enhancedMoveHueWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)enhancedStepHueWithParams:(MTRColorControlClusterEnhancedStepHueParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self enhancedStepHueWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)enhancedMoveToHueAndSaturationWithParams:(MTRColorControlClusterEnhancedMoveToHueAndSaturationParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self enhancedMoveToHueAndSaturationWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)colorLoopSetWithParams:(MTRColorControlClusterColorLoopSetParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self colorLoopSetWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)stopMoveStepWithParams:(MTRColorControlClusterStopMoveStepParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self stopMoveStepWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)moveColorTemperatureWithParams:(MTRColorControlClusterMoveColorTemperatureParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self moveColorTemperatureWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)stepColorTemperatureWithParams:(MTRColorControlClusterStepColorTemperatureParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self stepColorTemperatureWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterBallastConfiguration |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePhysicalMinLevelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributePhysicalMinLevelID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePhysicalMaxLevelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributePhysicalMaxLevelID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBallastStatusWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeBallastStatusID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinLevelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeMinLevelID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeMinLevelWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeMinLevelWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeMinLevelWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeMinLevelID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxLevelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeMaxLevelID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeMaxLevelWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeMaxLevelWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeMaxLevelWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeMaxLevelID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeIntrinsicBallastFactorWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeIntrinsicBallastFactorID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeIntrinsicBallastFactorWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeIntrinsicBallastFactorWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeIntrinsicBallastFactorWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeIntrinsicBallastFactorID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBallastFactorAdjustmentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeBallastFactorAdjustmentID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeBallastFactorAdjustmentWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeBallastFactorAdjustmentWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeBallastFactorAdjustmentWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeBallastFactorAdjustmentID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLampQuantityWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeLampQuantityID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLampTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeLampTypeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLampTypeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLampTypeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeLampTypeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeLampTypeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLampManufacturerWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeLampManufacturerID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLampManufacturerWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLampManufacturerWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeLampManufacturerWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeLampManufacturerID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLampRatedHoursWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeLampRatedHoursID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLampRatedHoursWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLampRatedHoursWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeLampRatedHoursWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeLampRatedHoursID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLampBurnHoursWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeLampBurnHoursID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLampBurnHoursWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLampBurnHoursWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeLampBurnHoursWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeLampBurnHoursID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLampAlarmModeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeLampAlarmModeID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLampAlarmModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLampAlarmModeWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeLampAlarmModeWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeLampAlarmModeID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLampBurnHoursTripPointWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeLampBurnHoursTripPointID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLampBurnHoursTripPointWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLampBurnHoursTripPointWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeLampBurnHoursTripPointWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeLampBurnHoursTripPointID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeBallastConfigurationID) |
| attributeID:@(MTRAttributeIDTypeClusterBallastConfigurationAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterBallastConfiguration (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeIntrinsicBalanceFactorWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self readAttributeIntrinsicBallastFactorWithParams:params]; |
| } |
| - (void)writeAttributeIntrinsicBalanceFactorWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeIntrinsicBallastFactorWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs]; |
| } |
| - (void)writeAttributeIntrinsicBalanceFactorWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| [self writeAttributeIntrinsicBallastFactorWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:params]; |
| } |
| @end |
| |
| @implementation MTRClusterIlluminanceMeasurement |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasuredValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIlluminanceMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterIlluminanceMeasurementAttributeMeasuredValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinMeasuredValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIlluminanceMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterIlluminanceMeasurementAttributeMinMeasuredValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxMeasuredValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIlluminanceMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterIlluminanceMeasurementAttributeMaxMeasuredValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeToleranceWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIlluminanceMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterIlluminanceMeasurementAttributeToleranceID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLightSensorTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIlluminanceMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterIlluminanceMeasurementAttributeLightSensorTypeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIlluminanceMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterIlluminanceMeasurementAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIlluminanceMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterIlluminanceMeasurementAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIlluminanceMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterIlluminanceMeasurementAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIlluminanceMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterIlluminanceMeasurementAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeIlluminanceMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterIlluminanceMeasurementAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterIlluminanceMeasurement (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterTemperatureMeasurement |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasuredValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTemperatureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterTemperatureMeasurementAttributeMeasuredValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinMeasuredValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTemperatureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterTemperatureMeasurementAttributeMinMeasuredValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxMeasuredValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTemperatureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterTemperatureMeasurementAttributeMaxMeasuredValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeToleranceWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTemperatureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterTemperatureMeasurementAttributeToleranceID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTemperatureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterTemperatureMeasurementAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTemperatureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterTemperatureMeasurementAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTemperatureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterTemperatureMeasurementAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTemperatureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterTemperatureMeasurementAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTemperatureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterTemperatureMeasurementAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterTemperatureMeasurement (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterPressureMeasurement |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasuredValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePressureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterPressureMeasurementAttributeMeasuredValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinMeasuredValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePressureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterPressureMeasurementAttributeMinMeasuredValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxMeasuredValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePressureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterPressureMeasurementAttributeMaxMeasuredValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeToleranceWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePressureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterPressureMeasurementAttributeToleranceID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeScaledValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePressureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterPressureMeasurementAttributeScaledValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinScaledValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePressureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterPressureMeasurementAttributeMinScaledValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxScaledValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePressureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterPressureMeasurementAttributeMaxScaledValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeScaledToleranceWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePressureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterPressureMeasurementAttributeScaledToleranceID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeScaleWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePressureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterPressureMeasurementAttributeScaleID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePressureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterPressureMeasurementAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePressureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterPressureMeasurementAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePressureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterPressureMeasurementAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePressureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterPressureMeasurementAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypePressureMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterPressureMeasurementAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterPressureMeasurement (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterFlowMeasurement |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasuredValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFlowMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterFlowMeasurementAttributeMeasuredValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinMeasuredValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFlowMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterFlowMeasurementAttributeMinMeasuredValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxMeasuredValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFlowMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterFlowMeasurementAttributeMaxMeasuredValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeToleranceWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFlowMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterFlowMeasurementAttributeToleranceID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFlowMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterFlowMeasurementAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFlowMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterFlowMeasurementAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFlowMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterFlowMeasurementAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFlowMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterFlowMeasurementAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeFlowMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterFlowMeasurementAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterFlowMeasurement (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterRelativeHumidityMeasurement |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasuredValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeRelativeHumidityMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterRelativeHumidityMeasurementAttributeMeasuredValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMinMeasuredValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeRelativeHumidityMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterRelativeHumidityMeasurementAttributeMinMeasuredValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMaxMeasuredValueWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeRelativeHumidityMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterRelativeHumidityMeasurementAttributeMaxMeasuredValueID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeToleranceWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeRelativeHumidityMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterRelativeHumidityMeasurementAttributeToleranceID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeRelativeHumidityMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterRelativeHumidityMeasurementAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeRelativeHumidityMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterRelativeHumidityMeasurementAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeRelativeHumidityMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterRelativeHumidityMeasurementAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeRelativeHumidityMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterRelativeHumidityMeasurementAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeRelativeHumidityMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterRelativeHumidityMeasurementAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterRelativeHumidityMeasurement (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterOccupancySensing |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOccupancyWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributeOccupancyID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOccupancySensorTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributeOccupancySensorTypeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOccupancySensorTypeBitmapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributeOccupancySensorTypeBitmapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePIROccupiedToUnoccupiedDelayWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributePIROccupiedToUnoccupiedDelayID) |
| params:params]; |
| } |
| |
| - (void)writeAttributePIROccupiedToUnoccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributePIROccupiedToUnoccupiedDelayWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributePIROccupiedToUnoccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributePIROccupiedToUnoccupiedDelayID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePIRUnoccupiedToOccupiedDelayWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributePIRUnoccupiedToOccupiedDelayID) |
| params:params]; |
| } |
| |
| - (void)writeAttributePIRUnoccupiedToOccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributePIRUnoccupiedToOccupiedDelayWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributePIRUnoccupiedToOccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributePIRUnoccupiedToOccupiedDelayID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePIRUnoccupiedToOccupiedThresholdWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributePIRUnoccupiedToOccupiedThresholdID) |
| params:params]; |
| } |
| |
| - (void)writeAttributePIRUnoccupiedToOccupiedThresholdWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributePIRUnoccupiedToOccupiedThresholdWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributePIRUnoccupiedToOccupiedThresholdWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device |
| writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributePIRUnoccupiedToOccupiedThresholdID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUltrasonicOccupiedToUnoccupiedDelayWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributeUltrasonicOccupiedToUnoccupiedDelayID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeUltrasonicOccupiedToUnoccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeUltrasonicOccupiedToUnoccupiedDelayWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeUltrasonicOccupiedToUnoccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device |
| writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributeUltrasonicOccupiedToUnoccupiedDelayID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUltrasonicUnoccupiedToOccupiedDelayWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributeUltrasonicUnoccupiedToOccupiedDelayID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeUltrasonicUnoccupiedToOccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeUltrasonicUnoccupiedToOccupiedDelayWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeUltrasonicUnoccupiedToOccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device |
| writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributeUltrasonicUnoccupiedToOccupiedDelayID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUltrasonicUnoccupiedToOccupiedThresholdWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributeUltrasonicUnoccupiedToOccupiedThresholdID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeUltrasonicUnoccupiedToOccupiedThresholdWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeUltrasonicUnoccupiedToOccupiedThresholdWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeUltrasonicUnoccupiedToOccupiedThresholdWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device |
| writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributeUltrasonicUnoccupiedToOccupiedThresholdID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePhysicalContactOccupiedToUnoccupiedDelayWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributePhysicalContactOccupiedToUnoccupiedDelayID) |
| params:params]; |
| } |
| |
| - (void)writeAttributePhysicalContactOccupiedToUnoccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributePhysicalContactOccupiedToUnoccupiedDelayWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributePhysicalContactOccupiedToUnoccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device |
| writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributePhysicalContactOccupiedToUnoccupiedDelayID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePhysicalContactUnoccupiedToOccupiedDelayWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributePhysicalContactUnoccupiedToOccupiedDelayID) |
| params:params]; |
| } |
| |
| - (void)writeAttributePhysicalContactUnoccupiedToOccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributePhysicalContactUnoccupiedToOccupiedDelayWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributePhysicalContactUnoccupiedToOccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device |
| writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributePhysicalContactUnoccupiedToOccupiedDelayID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePhysicalContactUnoccupiedToOccupiedThresholdWithParams: |
| (MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID: |
| @(MTRAttributeIDTypeClusterOccupancySensingAttributePhysicalContactUnoccupiedToOccupiedThresholdID) |
| params:params]; |
| } |
| |
| - (void)writeAttributePhysicalContactUnoccupiedToOccupiedThresholdWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributePhysicalContactUnoccupiedToOccupiedThresholdWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributePhysicalContactUnoccupiedToOccupiedThresholdWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device |
| writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID: |
| @(MTRAttributeIDTypeClusterOccupancySensingAttributePhysicalContactUnoccupiedToOccupiedThresholdID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeOccupancySensingID) |
| attributeID:@(MTRAttributeIDTypeClusterOccupancySensingAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterOccupancySensing (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePirOccupiedToUnoccupiedDelayWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self readAttributePIROccupiedToUnoccupiedDelayWithParams:params]; |
| } |
| - (void)writeAttributePirOccupiedToUnoccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributePIROccupiedToUnoccupiedDelayWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs]; |
| } |
| - (void)writeAttributePirOccupiedToUnoccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| [self writeAttributePIROccupiedToUnoccupiedDelayWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:params]; |
| } |
| - (NSDictionary<NSString *, id> *)readAttributePirUnoccupiedToOccupiedDelayWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self readAttributePIRUnoccupiedToOccupiedDelayWithParams:params]; |
| } |
| - (void)writeAttributePirUnoccupiedToOccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributePIRUnoccupiedToOccupiedDelayWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs]; |
| } |
| - (void)writeAttributePirUnoccupiedToOccupiedDelayWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| [self writeAttributePIRUnoccupiedToOccupiedDelayWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:params]; |
| } |
| - (NSDictionary<NSString *, id> *)readAttributePirUnoccupiedToOccupiedThresholdWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self readAttributePIRUnoccupiedToOccupiedThresholdWithParams:params]; |
| } |
| - (void)writeAttributePirUnoccupiedToOccupiedThresholdWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributePIRUnoccupiedToOccupiedThresholdWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs]; |
| } |
| - (void)writeAttributePirUnoccupiedToOccupiedThresholdWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| [self writeAttributePIRUnoccupiedToOccupiedThresholdWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:params]; |
| } |
| @end |
| |
| @implementation MTRClusterWakeOnLAN |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMACAddressWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWakeOnLANID) |
| attributeID:@(MTRAttributeIDTypeClusterWakeOnLANAttributeMACAddressID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWakeOnLANID) |
| attributeID:@(MTRAttributeIDTypeClusterWakeOnLANAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWakeOnLANID) |
| attributeID:@(MTRAttributeIDTypeClusterWakeOnLANAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWakeOnLANID) |
| attributeID:@(MTRAttributeIDTypeClusterWakeOnLANAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWakeOnLANID) |
| attributeID:@(MTRAttributeIDTypeClusterWakeOnLANAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeWakeOnLANID) |
| attributeID:@(MTRAttributeIDTypeClusterWakeOnLANAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| @implementation MTRClusterWakeOnLan |
| @end |
| |
| @implementation MTRClusterWakeOnLan (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterChannel |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)changeChannelWithParams:(MTRChannelClusterChangeChannelParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRChannelClusterChangeChannelResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeChannelID, (unsigned int) MTRCommandIDTypeClusterChannelCommandChangeChannelID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRChannelClusterChangeChannelResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| ChannelClusterChangeChannelResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRChannelClusterChangeChannelResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Channel::Commands::ChangeChannel::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.match = [self asCharSpan:params.match]; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)changeChannelByNumberWithParams:(MTRChannelClusterChangeChannelByNumberParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeChannelID, |
| (unsigned int) MTRCommandIDTypeClusterChannelCommandChangeChannelByNumberID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Channel::Commands::ChangeChannelByNumber::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.majorNumber = params.majorNumber.unsignedShortValue; |
| request.minorNumber = params.minorNumber.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)skipChannelWithParams:(MTRChannelClusterSkipChannelParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeChannelID, (unsigned int) MTRCommandIDTypeClusterChannelCommandSkipChannelID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| Channel::Commands::SkipChannel::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.count = params.count.unsignedShortValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeChannelListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeChannelID) |
| attributeID:@(MTRAttributeIDTypeClusterChannelAttributeChannelListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLineupWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeChannelID) |
| attributeID:@(MTRAttributeIDTypeClusterChannelAttributeLineupID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentChannelWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeChannelID) |
| attributeID:@(MTRAttributeIDTypeClusterChannelAttributeCurrentChannelID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeChannelID) |
| attributeID:@(MTRAttributeIDTypeClusterChannelAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeChannelID) |
| attributeID:@(MTRAttributeIDTypeClusterChannelAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeChannelID) |
| attributeID:@(MTRAttributeIDTypeClusterChannelAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeChannelID) |
| attributeID:@(MTRAttributeIDTypeClusterChannelAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeChannelID) |
| attributeID:@(MTRAttributeIDTypeClusterChannelAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterChannel (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)changeChannelWithParams:(MTRChannelClusterChangeChannelParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRChannelClusterChangeChannelResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self changeChannelWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRChannelClusterChangeChannelResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRChannelClusterChangeChannelResponseParams *>(data), error); |
| }]; |
| } |
| - (void)changeChannelByNumberWithParams:(MTRChannelClusterChangeChannelByNumberParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self changeChannelByNumberWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)skipChannelWithParams:(MTRChannelClusterSkipChannelParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self skipChannelWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterTargetNavigator |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)navigateTargetWithParams:(MTRTargetNavigatorClusterNavigateTargetParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRTargetNavigatorClusterNavigateTargetResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeTargetNavigatorID, |
| (unsigned int) MTRCommandIDTypeClusterTargetNavigatorCommandNavigateTargetID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRTargetNavigatorClusterNavigateTargetResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| TargetNavigatorClusterNavigateTargetResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRTargetNavigatorClusterNavigateTargetResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| TargetNavigator::Commands::NavigateTarget::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.target = params.target.unsignedCharValue; |
| if (params.data != nil) { |
| auto & definedValue_0 = request.data.Emplace(); |
| definedValue_0 = [self asCharSpan:params.data]; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTargetListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTargetNavigatorID) |
| attributeID:@(MTRAttributeIDTypeClusterTargetNavigatorAttributeTargetListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentTargetWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTargetNavigatorID) |
| attributeID:@(MTRAttributeIDTypeClusterTargetNavigatorAttributeCurrentTargetID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTargetNavigatorID) |
| attributeID:@(MTRAttributeIDTypeClusterTargetNavigatorAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTargetNavigatorID) |
| attributeID:@(MTRAttributeIDTypeClusterTargetNavigatorAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTargetNavigatorID) |
| attributeID:@(MTRAttributeIDTypeClusterTargetNavigatorAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTargetNavigatorID) |
| attributeID:@(MTRAttributeIDTypeClusterTargetNavigatorAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeTargetNavigatorID) |
| attributeID:@(MTRAttributeIDTypeClusterTargetNavigatorAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterTargetNavigator (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)navigateTargetWithParams:(MTRTargetNavigatorClusterNavigateTargetParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTargetNavigatorClusterNavigateTargetResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self navigateTargetWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRTargetNavigatorClusterNavigateTargetResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRTargetNavigatorClusterNavigateTargetResponseParams *>(data), error); |
| }]; |
| } |
| @end |
| |
| @implementation MTRClusterMediaPlayback |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)playWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| [self playWithParams:nil expectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs completion:completion]; |
| } |
| - (void)playWithParams:(MTRMediaPlaybackClusterPlayParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeMediaPlaybackID, (unsigned int) MTRCommandIDTypeClusterMediaPlaybackCommandPlayID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRMediaPlaybackClusterPlaybackResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| MediaPlaybackClusterPlaybackResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRMediaPlaybackClusterPlaybackResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| MediaPlayback::Commands::Play::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)pauseWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| [self pauseWithParams:nil expectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs completion:completion]; |
| } |
| - (void)pauseWithParams:(MTRMediaPlaybackClusterPauseParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeMediaPlaybackID, |
| (unsigned int) MTRCommandIDTypeClusterMediaPlaybackCommandPauseID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRMediaPlaybackClusterPlaybackResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| MediaPlaybackClusterPlaybackResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRMediaPlaybackClusterPlaybackResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| MediaPlayback::Commands::Pause::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)stopWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| [self stopWithParams:nil expectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs completion:completion]; |
| } |
| - (void)stopWithParams:(MTRMediaPlaybackClusterStopParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeMediaPlaybackID, (unsigned int) MTRCommandIDTypeClusterMediaPlaybackCommandStopID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRMediaPlaybackClusterPlaybackResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| MediaPlaybackClusterPlaybackResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRMediaPlaybackClusterPlaybackResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| MediaPlayback::Commands::Stop::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)startOverWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| [self startOverWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)startOverWithParams:(MTRMediaPlaybackClusterStartOverParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeMediaPlaybackID, |
| (unsigned int) MTRCommandIDTypeClusterMediaPlaybackCommandStartOverID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRMediaPlaybackClusterPlaybackResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| MediaPlaybackClusterPlaybackResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRMediaPlaybackClusterPlaybackResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| MediaPlayback::Commands::StartOver::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)previousWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| [self previousWithParams:nil expectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs completion:completion]; |
| } |
| - (void)previousWithParams:(MTRMediaPlaybackClusterPreviousParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeMediaPlaybackID, |
| (unsigned int) MTRCommandIDTypeClusterMediaPlaybackCommandPreviousID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRMediaPlaybackClusterPlaybackResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| MediaPlaybackClusterPlaybackResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRMediaPlaybackClusterPlaybackResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| MediaPlayback::Commands::Previous::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)nextWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| [self nextWithParams:nil expectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs completion:completion]; |
| } |
| - (void)nextWithParams:(MTRMediaPlaybackClusterNextParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeMediaPlaybackID, (unsigned int) MTRCommandIDTypeClusterMediaPlaybackCommandNextID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRMediaPlaybackClusterPlaybackResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| MediaPlaybackClusterPlaybackResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRMediaPlaybackClusterPlaybackResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| MediaPlayback::Commands::Next::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)rewindWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| [self rewindWithParams:nil expectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs completion:completion]; |
| } |
| - (void)rewindWithParams:(MTRMediaPlaybackClusterRewindParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeMediaPlaybackID, |
| (unsigned int) MTRCommandIDTypeClusterMediaPlaybackCommandRewindID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRMediaPlaybackClusterPlaybackResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| MediaPlaybackClusterPlaybackResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRMediaPlaybackClusterPlaybackResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| MediaPlayback::Commands::Rewind::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)fastForwardWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| [self fastForwardWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)fastForwardWithParams:(MTRMediaPlaybackClusterFastForwardParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeMediaPlaybackID, |
| (unsigned int) MTRCommandIDTypeClusterMediaPlaybackCommandFastForwardID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRMediaPlaybackClusterPlaybackResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| MediaPlaybackClusterPlaybackResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRMediaPlaybackClusterPlaybackResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| MediaPlayback::Commands::FastForward::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)skipForwardWithParams:(MTRMediaPlaybackClusterSkipForwardParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeMediaPlaybackID, |
| (unsigned int) MTRCommandIDTypeClusterMediaPlaybackCommandSkipForwardID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRMediaPlaybackClusterPlaybackResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| MediaPlaybackClusterPlaybackResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRMediaPlaybackClusterPlaybackResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| MediaPlayback::Commands::SkipForward::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.deltaPositionMilliseconds = params.deltaPositionMilliseconds.unsignedLongLongValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)skipBackwardWithParams:(MTRMediaPlaybackClusterSkipBackwardParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeMediaPlaybackID, |
| (unsigned int) MTRCommandIDTypeClusterMediaPlaybackCommandSkipBackwardID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRMediaPlaybackClusterPlaybackResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| MediaPlaybackClusterPlaybackResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRMediaPlaybackClusterPlaybackResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| MediaPlayback::Commands::SkipBackward::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.deltaPositionMilliseconds = params.deltaPositionMilliseconds.unsignedLongLongValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)seekWithParams:(MTRMediaPlaybackClusterSeekParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeMediaPlaybackID, (unsigned int) MTRCommandIDTypeClusterMediaPlaybackCommandSeekID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRMediaPlaybackClusterPlaybackResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| MediaPlaybackClusterPlaybackResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRMediaPlaybackClusterPlaybackResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| MediaPlayback::Commands::Seek::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.position = params.position.unsignedLongLongValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentStateWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaPlaybackID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaPlaybackAttributeCurrentStateID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeStartTimeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaPlaybackID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaPlaybackAttributeStartTimeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDurationWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaPlaybackID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaPlaybackAttributeDurationID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSampledPositionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaPlaybackID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaPlaybackAttributeSampledPositionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePlaybackSpeedWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaPlaybackID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaPlaybackAttributePlaybackSpeedID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSeekRangeEndWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaPlaybackID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaPlaybackAttributeSeekRangeEndID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSeekRangeStartWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaPlaybackID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaPlaybackAttributeSeekRangeStartID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaPlaybackID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaPlaybackAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaPlaybackID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaPlaybackAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaPlaybackID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaPlaybackAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaPlaybackID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaPlaybackAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaPlaybackID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaPlaybackAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterMediaPlayback (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)playWithParams:(MTRMediaPlaybackClusterPlayParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self playWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRMediaPlaybackClusterPlaybackResponseParams *>(data), error); |
| }]; |
| } |
| - (void)playWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self playWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)pauseWithParams:(MTRMediaPlaybackClusterPauseParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self pauseWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRMediaPlaybackClusterPlaybackResponseParams *>(data), error); |
| }]; |
| } |
| - (void)pauseWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self pauseWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)stopPlaybackWithParams:(MTRMediaPlaybackClusterStopPlaybackParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self stopWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRMediaPlaybackClusterPlaybackResponseParams *>(data), error); |
| }]; |
| } |
| - (void)stopPlaybackWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self stopPlaybackWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)startOverWithParams:(MTRMediaPlaybackClusterStartOverParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self startOverWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRMediaPlaybackClusterPlaybackResponseParams *>(data), error); |
| }]; |
| } |
| - (void)startOverWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self startOverWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)previousWithParams:(MTRMediaPlaybackClusterPreviousParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self previousWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRMediaPlaybackClusterPlaybackResponseParams *>(data), error); |
| }]; |
| } |
| - (void)previousWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self previousWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)nextWithParams:(MTRMediaPlaybackClusterNextParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self nextWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRMediaPlaybackClusterPlaybackResponseParams *>(data), error); |
| }]; |
| } |
| - (void)nextWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self nextWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)rewindWithParams:(MTRMediaPlaybackClusterRewindParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self rewindWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRMediaPlaybackClusterPlaybackResponseParams *>(data), error); |
| }]; |
| } |
| - (void)rewindWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self rewindWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)fastForwardWithParams:(MTRMediaPlaybackClusterFastForwardParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self fastForwardWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRMediaPlaybackClusterPlaybackResponseParams *>(data), error); |
| }]; |
| } |
| - (void)fastForwardWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self fastForwardWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)skipForwardWithParams:(MTRMediaPlaybackClusterSkipForwardParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self skipForwardWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRMediaPlaybackClusterPlaybackResponseParams *>(data), error); |
| }]; |
| } |
| - (void)skipBackwardWithParams:(MTRMediaPlaybackClusterSkipBackwardParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self skipBackwardWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRMediaPlaybackClusterPlaybackResponseParams *>(data), error); |
| }]; |
| } |
| - (void)seekWithParams:(MTRMediaPlaybackClusterSeekParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self seekWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRMediaPlaybackClusterPlaybackResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRMediaPlaybackClusterPlaybackResponseParams *>(data), error); |
| }]; |
| } |
| @end |
| |
| @implementation MTRClusterMediaInput |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)selectInputWithParams:(MTRMediaInputClusterSelectInputParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeMediaInputID, |
| (unsigned int) MTRCommandIDTypeClusterMediaInputCommandSelectInputID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| MediaInput::Commands::SelectInput::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.index = params.index.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)showInputStatusWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self showInputStatusWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)showInputStatusWithParams:(MTRMediaInputClusterShowInputStatusParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeMediaInputID, |
| (unsigned int) MTRCommandIDTypeClusterMediaInputCommandShowInputStatusID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| MediaInput::Commands::ShowInputStatus::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)hideInputStatusWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self hideInputStatusWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)hideInputStatusWithParams:(MTRMediaInputClusterHideInputStatusParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeMediaInputID, |
| (unsigned int) MTRCommandIDTypeClusterMediaInputCommandHideInputStatusID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| MediaInput::Commands::HideInputStatus::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)renameInputWithParams:(MTRMediaInputClusterRenameInputParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeMediaInputID, |
| (unsigned int) MTRCommandIDTypeClusterMediaInputCommandRenameInputID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| MediaInput::Commands::RenameInput::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.index = params.index.unsignedCharValue; |
| request.name = [self asCharSpan:params.name]; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInputListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaInputID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaInputAttributeInputListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentInputWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaInputID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaInputAttributeCurrentInputID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaInputID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaInputAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaInputID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaInputAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaInputID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaInputAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaInputID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaInputAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeMediaInputID) |
| attributeID:@(MTRAttributeIDTypeClusterMediaInputAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterMediaInput (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)selectInputWithParams:(MTRMediaInputClusterSelectInputParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self selectInputWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)showInputStatusWithParams:(MTRMediaInputClusterShowInputStatusParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self showInputStatusWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)showInputStatusWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self showInputStatusWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)hideInputStatusWithParams:(MTRMediaInputClusterHideInputStatusParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self hideInputStatusWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)hideInputStatusWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self hideInputStatusWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)renameInputWithParams:(MTRMediaInputClusterRenameInputParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self renameInputWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterLowPower |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)sleepWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self sleepWithParams:nil expectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs completion:completion]; |
| } |
| - (void)sleepWithParams:(MTRLowPowerClusterSleepParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeLowPowerID, (unsigned int) MTRCommandIDTypeClusterLowPowerCommandSleepID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| LowPower::Commands::Sleep::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLowPowerID) |
| attributeID:@(MTRAttributeIDTypeClusterLowPowerAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLowPowerID) |
| attributeID:@(MTRAttributeIDTypeClusterLowPowerAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLowPowerID) |
| attributeID:@(MTRAttributeIDTypeClusterLowPowerAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLowPowerID) |
| attributeID:@(MTRAttributeIDTypeClusterLowPowerAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeLowPowerID) |
| attributeID:@(MTRAttributeIDTypeClusterLowPowerAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterLowPower (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)sleepWithParams:(MTRLowPowerClusterSleepParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self sleepWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)sleepWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self sleepWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterKeypadInput |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)sendKeyWithParams:(MTRKeypadInputClusterSendKeyParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRKeypadInputClusterSendKeyResponseParams * _Nullable data, NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeKeypadInputID, (unsigned int) MTRCommandIDTypeClusterKeypadInputCommandSendKeyID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRKeypadInputClusterSendKeyResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| KeypadInputClusterSendKeyResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRKeypadInputClusterSendKeyResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| KeypadInput::Commands::SendKey::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.keyCode = static_cast<std::remove_reference_t<decltype(request.keyCode)>>(params.keyCode.unsignedCharValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeKeypadInputID) |
| attributeID:@(MTRAttributeIDTypeClusterKeypadInputAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeKeypadInputID) |
| attributeID:@(MTRAttributeIDTypeClusterKeypadInputAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeKeypadInputID) |
| attributeID:@(MTRAttributeIDTypeClusterKeypadInputAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeKeypadInputID) |
| attributeID:@(MTRAttributeIDTypeClusterKeypadInputAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeKeypadInputID) |
| attributeID:@(MTRAttributeIDTypeClusterKeypadInputAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterKeypadInput (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)sendKeyWithParams:(MTRKeypadInputClusterSendKeyParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRKeypadInputClusterSendKeyResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self sendKeyWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRKeypadInputClusterSendKeyResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRKeypadInputClusterSendKeyResponseParams *>(data), error); |
| }]; |
| } |
| @end |
| |
| @implementation MTRClusterContentLauncher |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)launchContentWithParams:(MTRContentLauncherClusterLaunchContentParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRContentLauncherClusterLauncherResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeContentLauncherID, |
| (unsigned int) MTRCommandIDTypeClusterContentLauncherCommandLaunchContentID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRContentLauncherClusterLauncherResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| ContentLauncherClusterLauncherResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRContentLauncherClusterLauncherResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ContentLauncher::Commands::LaunchContent::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| { |
| using ListType_1 = std::remove_reference_t<decltype(request.search.parameterList)>; |
| using ListMemberType_1 = ListMemberTypeGetter<ListType_1>::Type; |
| if (params.search.parameterList.count != 0) { |
| auto * listHolder_1 = new ListHolder<ListMemberType_1>(params.search.parameterList.count); |
| if (listHolder_1 == nullptr || listHolder_1->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_1); |
| for (size_t i_1 = 0; i_1 < params.search.parameterList.count; ++i_1) { |
| if (![params.search.parameterList[i_1] |
| isKindOfClass:[MTRContentLauncherClusterParameterStruct class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_1 = (MTRContentLauncherClusterParameterStruct *) params.search.parameterList[i_1]; |
| listHolder_1->mList[i_1].type |
| = static_cast<std::remove_reference_t<decltype(listHolder_1->mList[i_1].type)>>( |
| element_1.type.unsignedCharValue); |
| listHolder_1->mList[i_1].value = [self asCharSpan:element_1.value]; |
| if (element_1.externalIDList != nil) { |
| auto & definedValue_3 = listHolder_1->mList[i_1].externalIDList.Emplace(); |
| { |
| using ListType_4 = std::remove_reference_t<decltype(definedValue_3)>; |
| using ListMemberType_4 = ListMemberTypeGetter<ListType_4>::Type; |
| if (element_1.externalIDList.count != 0) { |
| auto * listHolder_4 = new ListHolder<ListMemberType_4>(element_1.externalIDList.count); |
| if (listHolder_4 == nullptr || listHolder_4->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_4); |
| for (size_t i_4 = 0; i_4 < element_1.externalIDList.count; ++i_4) { |
| if (![element_1.externalIDList[i_4] |
| isKindOfClass:[MTRContentLauncherClusterAdditionalInfoStruct class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_4 |
| = (MTRContentLauncherClusterAdditionalInfoStruct *) element_1.externalIDList[i_4]; |
| listHolder_4->mList[i_4].name = [self asCharSpan:element_4.name]; |
| listHolder_4->mList[i_4].value = [self asCharSpan:element_4.value]; |
| } |
| definedValue_3 = ListType_4(listHolder_4->mList, element_1.externalIDList.count); |
| } else { |
| definedValue_3 = ListType_4(); |
| } |
| } |
| } |
| } |
| request.search.parameterList = ListType_1(listHolder_1->mList, params.search.parameterList.count); |
| } else { |
| request.search.parameterList = ListType_1(); |
| } |
| } |
| request.autoPlay = params.autoPlay.boolValue; |
| if (params.data != nil) { |
| auto & definedValue_0 = request.data.Emplace(); |
| definedValue_0 = [self asCharSpan:params.data]; |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)launchURLWithParams:(MTRContentLauncherClusterLaunchURLParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRContentLauncherClusterLauncherResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeContentLauncherID, |
| (unsigned int) MTRCommandIDTypeClusterContentLauncherCommandLaunchURLID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRContentLauncherClusterLauncherResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| ContentLauncherClusterLauncherResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRContentLauncherClusterLauncherResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ContentLauncher::Commands::LaunchURL::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.contentURL = [self asCharSpan:params.contentURL]; |
| if (params.displayString != nil) { |
| auto & definedValue_0 = request.displayString.Emplace(); |
| definedValue_0 = [self asCharSpan:params.displayString]; |
| } |
| if (params.brandingInformation != nil) { |
| auto & definedValue_0 = request.brandingInformation.Emplace(); |
| definedValue_0.providerName = [self asCharSpan:params.brandingInformation.providerName]; |
| if (params.brandingInformation.background != nil) { |
| auto & definedValue_2 = definedValue_0.background.Emplace(); |
| if (params.brandingInformation.background.imageURL != nil) { |
| auto & definedValue_4 = definedValue_2.imageURL.Emplace(); |
| definedValue_4 = [self asCharSpan:params.brandingInformation.background.imageURL]; |
| } |
| if (params.brandingInformation.background.color != nil) { |
| auto & definedValue_4 = definedValue_2.color.Emplace(); |
| definedValue_4 = [self asCharSpan:params.brandingInformation.background.color]; |
| } |
| if (params.brandingInformation.background.size != nil) { |
| auto & definedValue_4 = definedValue_2.size.Emplace(); |
| definedValue_4.width = params.brandingInformation.background.size.width.doubleValue; |
| definedValue_4.height = params.brandingInformation.background.size.height.doubleValue; |
| definedValue_4.metric = static_cast<std::remove_reference_t<decltype(definedValue_4.metric)>>( |
| params.brandingInformation.background.size.metric.unsignedCharValue); |
| } |
| } |
| if (params.brandingInformation.logo != nil) { |
| auto & definedValue_2 = definedValue_0.logo.Emplace(); |
| if (params.brandingInformation.logo.imageURL != nil) { |
| auto & definedValue_4 = definedValue_2.imageURL.Emplace(); |
| definedValue_4 = [self asCharSpan:params.brandingInformation.logo.imageURL]; |
| } |
| if (params.brandingInformation.logo.color != nil) { |
| auto & definedValue_4 = definedValue_2.color.Emplace(); |
| definedValue_4 = [self asCharSpan:params.brandingInformation.logo.color]; |
| } |
| if (params.brandingInformation.logo.size != nil) { |
| auto & definedValue_4 = definedValue_2.size.Emplace(); |
| definedValue_4.width = params.brandingInformation.logo.size.width.doubleValue; |
| definedValue_4.height = params.brandingInformation.logo.size.height.doubleValue; |
| definedValue_4.metric = static_cast<std::remove_reference_t<decltype(definedValue_4.metric)>>( |
| params.brandingInformation.logo.size.metric.unsignedCharValue); |
| } |
| } |
| if (params.brandingInformation.progressBar != nil) { |
| auto & definedValue_2 = definedValue_0.progressBar.Emplace(); |
| if (params.brandingInformation.progressBar.imageURL != nil) { |
| auto & definedValue_4 = definedValue_2.imageURL.Emplace(); |
| definedValue_4 = [self asCharSpan:params.brandingInformation.progressBar.imageURL]; |
| } |
| if (params.brandingInformation.progressBar.color != nil) { |
| auto & definedValue_4 = definedValue_2.color.Emplace(); |
| definedValue_4 = [self asCharSpan:params.brandingInformation.progressBar.color]; |
| } |
| if (params.brandingInformation.progressBar.size != nil) { |
| auto & definedValue_4 = definedValue_2.size.Emplace(); |
| definedValue_4.width = params.brandingInformation.progressBar.size.width.doubleValue; |
| definedValue_4.height = params.brandingInformation.progressBar.size.height.doubleValue; |
| definedValue_4.metric = static_cast<std::remove_reference_t<decltype(definedValue_4.metric)>>( |
| params.brandingInformation.progressBar.size.metric.unsignedCharValue); |
| } |
| } |
| if (params.brandingInformation.splash != nil) { |
| auto & definedValue_2 = definedValue_0.splash.Emplace(); |
| if (params.brandingInformation.splash.imageURL != nil) { |
| auto & definedValue_4 = definedValue_2.imageURL.Emplace(); |
| definedValue_4 = [self asCharSpan:params.brandingInformation.splash.imageURL]; |
| } |
| if (params.brandingInformation.splash.color != nil) { |
| auto & definedValue_4 = definedValue_2.color.Emplace(); |
| definedValue_4 = [self asCharSpan:params.brandingInformation.splash.color]; |
| } |
| if (params.brandingInformation.splash.size != nil) { |
| auto & definedValue_4 = definedValue_2.size.Emplace(); |
| definedValue_4.width = params.brandingInformation.splash.size.width.doubleValue; |
| definedValue_4.height = params.brandingInformation.splash.size.height.doubleValue; |
| definedValue_4.metric = static_cast<std::remove_reference_t<decltype(definedValue_4.metric)>>( |
| params.brandingInformation.splash.size.metric.unsignedCharValue); |
| } |
| } |
| if (params.brandingInformation.waterMark != nil) { |
| auto & definedValue_2 = definedValue_0.waterMark.Emplace(); |
| if (params.brandingInformation.waterMark.imageURL != nil) { |
| auto & definedValue_4 = definedValue_2.imageURL.Emplace(); |
| definedValue_4 = [self asCharSpan:params.brandingInformation.waterMark.imageURL]; |
| } |
| if (params.brandingInformation.waterMark.color != nil) { |
| auto & definedValue_4 = definedValue_2.color.Emplace(); |
| definedValue_4 = [self asCharSpan:params.brandingInformation.waterMark.color]; |
| } |
| if (params.brandingInformation.waterMark.size != nil) { |
| auto & definedValue_4 = definedValue_2.size.Emplace(); |
| definedValue_4.width = params.brandingInformation.waterMark.size.width.doubleValue; |
| definedValue_4.height = params.brandingInformation.waterMark.size.height.doubleValue; |
| definedValue_4.metric = static_cast<std::remove_reference_t<decltype(definedValue_4.metric)>>( |
| params.brandingInformation.waterMark.size.metric.unsignedCharValue); |
| } |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptHeaderWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeContentLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterContentLauncherAttributeAcceptHeaderID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeSupportedStreamingProtocolsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeContentLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterContentLauncherAttributeSupportedStreamingProtocolsID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeSupportedStreamingProtocolsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeSupportedStreamingProtocolsWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeSupportedStreamingProtocolsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeContentLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterContentLauncherAttributeSupportedStreamingProtocolsID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeContentLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterContentLauncherAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeContentLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterContentLauncherAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeContentLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterContentLauncherAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeContentLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterContentLauncherAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeContentLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterContentLauncherAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterContentLauncher (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)launchContentWithParams:(MTRContentLauncherClusterLaunchContentParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRContentLauncherClusterLaunchResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self launchContentWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRContentLauncherClusterLauncherResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRContentLauncherClusterLaunchResponseParams *>(data), error); |
| }]; |
| } |
| - (void)launchURLWithParams:(MTRContentLauncherClusterLaunchURLParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRContentLauncherClusterLaunchResponseParams * _Nullable data, NSError * _Nullable error))completionHandler |
| { |
| [self launchURLWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRContentLauncherClusterLauncherResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRContentLauncherClusterLaunchResponseParams *>(data), error); |
| }]; |
| } |
| @end |
| |
| @implementation MTRClusterAudioOutput |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)selectOutputWithParams:(MTRAudioOutputClusterSelectOutputParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeAudioOutputID, |
| (unsigned int) MTRCommandIDTypeClusterAudioOutputCommandSelectOutputID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| AudioOutput::Commands::SelectOutput::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.index = params.index.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)renameOutputWithParams:(MTRAudioOutputClusterRenameOutputParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeAudioOutputID, |
| (unsigned int) MTRCommandIDTypeClusterAudioOutputCommandRenameOutputID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| AudioOutput::Commands::RenameOutput::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.index = params.index.unsignedCharValue; |
| request.name = [self asCharSpan:params.name]; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOutputListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAudioOutputID) |
| attributeID:@(MTRAttributeIDTypeClusterAudioOutputAttributeOutputListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentOutputWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAudioOutputID) |
| attributeID:@(MTRAttributeIDTypeClusterAudioOutputAttributeCurrentOutputID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAudioOutputID) |
| attributeID:@(MTRAttributeIDTypeClusterAudioOutputAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAudioOutputID) |
| attributeID:@(MTRAttributeIDTypeClusterAudioOutputAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAudioOutputID) |
| attributeID:@(MTRAttributeIDTypeClusterAudioOutputAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAudioOutputID) |
| attributeID:@(MTRAttributeIDTypeClusterAudioOutputAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAudioOutputID) |
| attributeID:@(MTRAttributeIDTypeClusterAudioOutputAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterAudioOutput (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)selectOutputWithParams:(MTRAudioOutputClusterSelectOutputParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self selectOutputWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)renameOutputWithParams:(MTRAudioOutputClusterRenameOutputParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self renameOutputWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterApplicationLauncher |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)launchAppWithParams:(MTRApplicationLauncherClusterLaunchAppParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRApplicationLauncherClusterLauncherResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeApplicationLauncherID, |
| (unsigned int) MTRCommandIDTypeClusterApplicationLauncherCommandLaunchAppID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRApplicationLauncherClusterLauncherResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| ApplicationLauncherClusterLauncherResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRApplicationLauncherClusterLauncherResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ApplicationLauncher::Commands::LaunchApp::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (params != nil) { |
| if (params.application != nil) { |
| auto & definedValue_0 = request.application.Emplace(); |
| definedValue_0.catalogVendorID = params.application.catalogVendorID.unsignedShortValue; |
| definedValue_0.applicationID = [self asCharSpan:params.application.applicationID]; |
| } |
| if (params.data != nil) { |
| auto & definedValue_0 = request.data.Emplace(); |
| definedValue_0 = [self asByteSpan:params.data]; |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)stopAppWithParams:(MTRApplicationLauncherClusterStopAppParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRApplicationLauncherClusterLauncherResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeApplicationLauncherID, |
| (unsigned int) MTRCommandIDTypeClusterApplicationLauncherCommandStopAppID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRApplicationLauncherClusterLauncherResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| ApplicationLauncherClusterLauncherResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRApplicationLauncherClusterLauncherResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ApplicationLauncher::Commands::StopApp::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (params != nil) { |
| if (params.application != nil) { |
| auto & definedValue_0 = request.application.Emplace(); |
| definedValue_0.catalogVendorID = params.application.catalogVendorID.unsignedShortValue; |
| definedValue_0.applicationID = [self asCharSpan:params.application.applicationID]; |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)hideAppWithParams:(MTRApplicationLauncherClusterHideAppParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRApplicationLauncherClusterLauncherResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeApplicationLauncherID, |
| (unsigned int) MTRCommandIDTypeClusterApplicationLauncherCommandHideAppID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRApplicationLauncherClusterLauncherResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| ApplicationLauncherClusterLauncherResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRApplicationLauncherClusterLauncherResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ApplicationLauncher::Commands::HideApp::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (params != nil) { |
| if (params.application != nil) { |
| auto & definedValue_0 = request.application.Emplace(); |
| definedValue_0.catalogVendorID = params.application.catalogVendorID.unsignedShortValue; |
| definedValue_0.applicationID = [self asCharSpan:params.application.applicationID]; |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCatalogListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationLauncherAttributeCatalogListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentAppWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationLauncherAttributeCurrentAppID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeCurrentAppWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeCurrentAppWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeCurrentAppWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationLauncherAttributeCurrentAppID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationLauncherAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationLauncherAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationLauncherAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationLauncherAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationLauncherID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationLauncherAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterApplicationLauncher (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)launchAppWithParams:(MTRApplicationLauncherClusterLaunchAppParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRApplicationLauncherClusterLauncherResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self launchAppWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRApplicationLauncherClusterLauncherResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRApplicationLauncherClusterLauncherResponseParams *>(data), error); |
| }]; |
| } |
| - (void)stopAppWithParams:(MTRApplicationLauncherClusterStopAppParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRApplicationLauncherClusterLauncherResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self stopAppWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRApplicationLauncherClusterLauncherResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRApplicationLauncherClusterLauncherResponseParams *>(data), error); |
| }]; |
| } |
| - (void)hideAppWithParams:(MTRApplicationLauncherClusterHideAppParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRApplicationLauncherClusterLauncherResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self hideAppWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRApplicationLauncherClusterLauncherResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRApplicationLauncherClusterLauncherResponseParams *>(data), error); |
| }]; |
| } |
| @end |
| |
| @implementation MTRClusterApplicationBasic |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeVendorNameWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationBasicAttributeVendorNameID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeVendorIDWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationBasicAttributeVendorIDID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeApplicationNameWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationBasicAttributeApplicationNameID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeProductIDWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationBasicAttributeProductIDID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeApplicationWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationBasicAttributeApplicationID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeStatusWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationBasicAttributeStatusID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeApplicationVersionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationBasicAttributeApplicationVersionID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAllowedVendorListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationBasicAttributeAllowedVendorListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationBasicAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationBasicAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationBasicAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationBasicAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeApplicationBasicID) |
| attributeID:@(MTRAttributeIDTypeClusterApplicationBasicAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterApplicationBasic (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterAccountLogin |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)getSetupPINWithParams:(MTRAccountLoginClusterGetSetupPINParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRAccountLoginClusterGetSetupPINResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeAccountLoginID, |
| (unsigned int) MTRCommandIDTypeClusterAccountLoginCommandGetSetupPINID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRAccountLoginClusterGetSetupPINResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| AccountLoginClusterGetSetupPINResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRAccountLoginClusterGetSetupPINResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| AccountLogin::Commands::GetSetupPIN::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (!timedInvokeTimeoutMs.HasValue()) { |
| timedInvokeTimeoutMs.SetValue(10000); |
| } |
| request.tempAccountIdentifier = [self asCharSpan:params.tempAccountIdentifier]; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)loginWithParams:(MTRAccountLoginClusterLoginParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeAccountLoginID, (unsigned int) MTRCommandIDTypeClusterAccountLoginCommandLoginID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| AccountLogin::Commands::Login::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (!timedInvokeTimeoutMs.HasValue()) { |
| timedInvokeTimeoutMs.SetValue(10000); |
| } |
| request.tempAccountIdentifier = [self asCharSpan:params.tempAccountIdentifier]; |
| request.setupPIN = [self asCharSpan:params.setupPIN]; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)logoutWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self logoutWithParams:nil expectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs completion:completion]; |
| } |
| - (void)logoutWithParams:(MTRAccountLoginClusterLogoutParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeAccountLoginID, (unsigned int) MTRCommandIDTypeClusterAccountLoginCommandLogoutID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| AccountLogin::Commands::Logout::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (!timedInvokeTimeoutMs.HasValue()) { |
| timedInvokeTimeoutMs.SetValue(10000); |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccountLoginID) |
| attributeID:@(MTRAttributeIDTypeClusterAccountLoginAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccountLoginID) |
| attributeID:@(MTRAttributeIDTypeClusterAccountLoginAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccountLoginID) |
| attributeID:@(MTRAttributeIDTypeClusterAccountLoginAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccountLoginID) |
| attributeID:@(MTRAttributeIDTypeClusterAccountLoginAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeAccountLoginID) |
| attributeID:@(MTRAttributeIDTypeClusterAccountLoginAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterAccountLogin (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)getSetupPINWithParams:(MTRAccountLoginClusterGetSetupPINParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRAccountLoginClusterGetSetupPINResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self getSetupPINWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRAccountLoginClusterGetSetupPINResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRAccountLoginClusterGetSetupPINResponseParams *>(data), error); |
| }]; |
| } |
| - (void)loginWithParams:(MTRAccountLoginClusterLoginParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self loginWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)logoutWithParams:(MTRAccountLoginClusterLogoutParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self logoutWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)logoutWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self logoutWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterElectricalMeasurement |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)getProfileInfoCommandWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self getProfileInfoCommandWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)getProfileInfoCommandWithParams:(MTRElectricalMeasurementClusterGetProfileInfoCommandParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeElectricalMeasurementID, |
| (unsigned int) MTRCommandIDTypeClusterElectricalMeasurementCommandGetProfileInfoCommandID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ElectricalMeasurement::Commands::GetProfileInfoCommand::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)getMeasurementProfileCommandWithParams:(MTRElectricalMeasurementClusterGetMeasurementProfileCommandParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeElectricalMeasurementID, |
| (unsigned int) MTRCommandIDTypeClusterElectricalMeasurementCommandGetMeasurementProfileCommandID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| ElectricalMeasurement::Commands::GetMeasurementProfileCommand::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.attributeId = params.attributeId.unsignedShortValue; |
| request.startTime = params.startTime.unsignedIntValue; |
| request.numberOfIntervals = params.numberOfIntervals.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasurementTypeWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeMeasurementTypeID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDcVoltageWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeDcVoltageID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDcVoltageMinWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeDcVoltageMinID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDcVoltageMaxWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeDcVoltageMaxID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDcCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeDcCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDcCurrentMinWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeDcCurrentMinID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDcCurrentMaxWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeDcCurrentMaxID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDcPowerWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeDcPowerID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDcPowerMinWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeDcPowerMinID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDcPowerMaxWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeDcPowerMaxID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDcVoltageMultiplierWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeDcVoltageMultiplierID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDcVoltageDivisorWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeDcVoltageDivisorID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDcCurrentMultiplierWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeDcCurrentMultiplierID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDcCurrentDivisorWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeDcCurrentDivisorID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDcPowerMultiplierWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeDcPowerMultiplierID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeDcPowerDivisorWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeDcPowerDivisorID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcFrequencyWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcFrequencyID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcFrequencyMinWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcFrequencyMinID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcFrequencyMaxWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcFrequencyMaxID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNeutralCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeNeutralCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTotalActivePowerWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeTotalActivePowerID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTotalReactivePowerWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeTotalReactivePowerID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTotalApparentPowerWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeTotalApparentPowerID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasured1stHarmonicCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeMeasured1stHarmonicCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasured3rdHarmonicCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeMeasured3rdHarmonicCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasured5thHarmonicCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeMeasured5thHarmonicCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasured7thHarmonicCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeMeasured7thHarmonicCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasured9thHarmonicCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeMeasured9thHarmonicCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasured11thHarmonicCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeMeasured11thHarmonicCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasuredPhase1stHarmonicCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeMeasuredPhase1stHarmonicCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasuredPhase3rdHarmonicCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeMeasuredPhase3rdHarmonicCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasuredPhase5thHarmonicCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeMeasuredPhase5thHarmonicCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasuredPhase7thHarmonicCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeMeasuredPhase7thHarmonicCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasuredPhase9thHarmonicCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeMeasuredPhase9thHarmonicCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeMeasuredPhase11thHarmonicCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeMeasuredPhase11thHarmonicCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcFrequencyMultiplierWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcFrequencyMultiplierID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcFrequencyDivisorWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcFrequencyDivisorID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePowerMultiplierWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributePowerMultiplierID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePowerDivisorWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributePowerDivisorID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeHarmonicCurrentMultiplierWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeHarmonicCurrentMultiplierID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePhaseHarmonicCurrentMultiplierWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributePhaseHarmonicCurrentMultiplierID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInstantaneousVoltageWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeInstantaneousVoltageID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInstantaneousLineCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeInstantaneousLineCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInstantaneousActiveCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeInstantaneousActiveCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInstantaneousReactiveCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeInstantaneousReactiveCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInstantaneousPowerWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeInstantaneousPowerID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltageWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltageMinWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageMinID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltageMaxWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageMaxID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsCurrentWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsCurrentID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsCurrentMinWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsCurrentMinID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsCurrentMaxWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsCurrentMaxID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActivePowerWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeActivePowerID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActivePowerMinWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeActivePowerMinID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActivePowerMaxWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeActivePowerMaxID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeReactivePowerWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeReactivePowerID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeApparentPowerWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeApparentPowerID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePowerFactorWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributePowerFactorID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAverageRmsVoltageMeasurementPeriodWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAverageRmsVoltageMeasurementPeriodID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeAverageRmsVoltageMeasurementPeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeAverageRmsVoltageMeasurementPeriodWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeAverageRmsVoltageMeasurementPeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device |
| writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAverageRmsVoltageMeasurementPeriodID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAverageRmsUnderVoltageCounterWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAverageRmsUnderVoltageCounterID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeAverageRmsUnderVoltageCounterWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeAverageRmsUnderVoltageCounterWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeAverageRmsUnderVoltageCounterWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device |
| writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAverageRmsUnderVoltageCounterID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsExtremeOverVoltagePeriodWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsExtremeOverVoltagePeriodID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeRmsExtremeOverVoltagePeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeRmsExtremeOverVoltagePeriodWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeRmsExtremeOverVoltagePeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device |
| writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsExtremeOverVoltagePeriodID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsExtremeUnderVoltagePeriodWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsExtremeUnderVoltagePeriodID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeRmsExtremeUnderVoltagePeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeRmsExtremeUnderVoltagePeriodWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeRmsExtremeUnderVoltagePeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device |
| writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsExtremeUnderVoltagePeriodID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltageSagPeriodWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageSagPeriodID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeRmsVoltageSagPeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeRmsVoltageSagPeriodWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeRmsVoltageSagPeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageSagPeriodID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltageSwellPeriodWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageSwellPeriodID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeRmsVoltageSwellPeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeRmsVoltageSwellPeriodWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeRmsVoltageSwellPeriodWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageSwellPeriodID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcVoltageMultiplierWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcVoltageMultiplierID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcVoltageDivisorWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcVoltageDivisorID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcCurrentMultiplierWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcCurrentMultiplierID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcCurrentDivisorWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcCurrentDivisorID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcPowerMultiplierWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcPowerMultiplierID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcPowerDivisorWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcPowerDivisorID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOverloadAlarmsMaskWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeOverloadAlarmsMaskID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOverloadAlarmsMaskWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOverloadAlarmsMaskWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOverloadAlarmsMaskWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeOverloadAlarmsMaskID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeVoltageOverloadWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeVoltageOverloadID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCurrentOverloadWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeCurrentOverloadID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcOverloadAlarmsMaskWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcOverloadAlarmsMaskID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeAcOverloadAlarmsMaskWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeAcOverloadAlarmsMaskWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeAcOverloadAlarmsMaskWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcOverloadAlarmsMaskID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcVoltageOverloadWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcVoltageOverloadID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcCurrentOverloadWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcCurrentOverloadID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcActivePowerOverloadWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcActivePowerOverloadID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcReactivePowerOverloadWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcReactivePowerOverloadID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAverageRmsOverVoltageWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAverageRmsOverVoltageID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAverageRmsUnderVoltageWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAverageRmsUnderVoltageID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsExtremeOverVoltageWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsExtremeOverVoltageID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsExtremeUnderVoltageWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsExtremeUnderVoltageID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltageSagWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageSagID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltageSwellWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageSwellID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLineCurrentPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeLineCurrentPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActiveCurrentPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeActiveCurrentPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeReactiveCurrentPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeReactiveCurrentPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltagePhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltagePhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltageMinPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageMinPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltageMaxPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageMaxPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsCurrentPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsCurrentPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsCurrentMinPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsCurrentMinPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsCurrentMaxPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsCurrentMaxPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActivePowerPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeActivePowerPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActivePowerMinPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeActivePowerMinPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActivePowerMaxPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeActivePowerMaxPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeReactivePowerPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeReactivePowerPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeApparentPowerPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeApparentPowerPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePowerFactorPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributePowerFactorPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAverageRmsVoltageMeasurementPeriodPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID: |
| @(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAverageRmsVoltageMeasurementPeriodPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAverageRmsOverVoltageCounterPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAverageRmsOverVoltageCounterPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAverageRmsUnderVoltageCounterPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAverageRmsUnderVoltageCounterPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsExtremeOverVoltagePeriodPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsExtremeOverVoltagePeriodPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsExtremeUnderVoltagePeriodPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsExtremeUnderVoltagePeriodPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltageSagPeriodPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageSagPeriodPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltageSwellPeriodPhaseBWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageSwellPeriodPhaseBID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLineCurrentPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeLineCurrentPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActiveCurrentPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeActiveCurrentPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeReactiveCurrentPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeReactiveCurrentPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltagePhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltagePhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltageMinPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageMinPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltageMaxPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageMaxPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsCurrentPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsCurrentPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsCurrentMinPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsCurrentMinPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsCurrentMaxPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsCurrentMaxPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActivePowerPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeActivePowerPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActivePowerMinPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeActivePowerMinPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeActivePowerMaxPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeActivePowerMaxPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeReactivePowerPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeReactivePowerPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeApparentPowerPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeApparentPowerPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributePowerFactorPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributePowerFactorPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAverageRmsVoltageMeasurementPeriodPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID: |
| @(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAverageRmsVoltageMeasurementPeriodPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAverageRmsOverVoltageCounterPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAverageRmsOverVoltageCounterPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAverageRmsUnderVoltageCounterPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAverageRmsUnderVoltageCounterPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsExtremeOverVoltagePeriodPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsExtremeOverVoltagePeriodPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsExtremeUnderVoltagePeriodPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsExtremeUnderVoltagePeriodPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltageSagPeriodPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageSagPeriodPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRmsVoltageSwellPeriodPhaseCWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device |
| readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeRmsVoltageSwellPeriodPhaseCID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeElectricalMeasurementID) |
| attributeID:@(MTRAttributeIDTypeClusterElectricalMeasurementAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| |
| @implementation MTRClusterElectricalMeasurement (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)getProfileInfoCommandWithParams:(MTRElectricalMeasurementClusterGetProfileInfoCommandParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self getProfileInfoCommandWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)getProfileInfoCommandWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self getProfileInfoCommandWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)getMeasurementProfileCommandWithParams:(MTRElectricalMeasurementClusterGetMeasurementProfileCommandParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self getMeasurementProfileCommandWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| @end |
| |
| @implementation MTRClusterUnitTesting |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpointID:(NSNumber *)endpointID queue:(dispatch_queue_t)queue |
| { |
| if (self = [super initWithQueue:queue]) { |
| if (device == nil) { |
| return nil; |
| } |
| |
| _endpoint = [endpointID unsignedShortValue]; |
| _device = device; |
| } |
| return self; |
| } |
| |
| - (void)testWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self testWithParams:nil expectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs completion:completion]; |
| } |
| - (void)testWithParams:(MTRUnitTestingClusterTestParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeUnitTestingID, (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::Test::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testNotHandledWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self testNotHandledWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)testNotHandledWithParams:(MTRUnitTestingClusterTestNotHandledParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestNotHandledID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestNotHandled::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testSpecificWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRUnitTestingClusterTestSpecificResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| [self testSpecificWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)testSpecificWithParams:(MTRUnitTestingClusterTestSpecificParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRUnitTestingClusterTestSpecificResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestSpecificID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterTestSpecificResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterTestSpecificResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterTestSpecificResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestSpecific::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testUnknownCommandWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self testUnknownCommandWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)testUnknownCommandWithParams:(MTRUnitTestingClusterTestUnknownCommandParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestUnknownCommandID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestUnknownCommand::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testAddArgumentsWithParams:(MTRUnitTestingClusterTestAddArgumentsParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRUnitTestingClusterTestAddArgumentsResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestAddArgumentsID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterTestAddArgumentsResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterTestAddArgumentsResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterTestAddArgumentsResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestAddArguments::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.arg1 = params.arg1.unsignedCharValue; |
| request.arg2 = params.arg2.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testSimpleArgumentRequestWithParams:(MTRUnitTestingClusterTestSimpleArgumentRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRUnitTestingClusterTestSimpleArgumentResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestSimpleArgumentRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterTestSimpleArgumentResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterTestSimpleArgumentResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterTestSimpleArgumentResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestSimpleArgumentRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.arg1 = params.arg1.boolValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testStructArrayArgumentRequestWithParams:(MTRUnitTestingClusterTestStructArrayArgumentRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)(MTRUnitTestingClusterTestStructArrayArgumentResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestStructArrayArgumentRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterTestStructArrayArgumentResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterTestStructArrayArgumentResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterTestStructArrayArgumentResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestStructArrayArgumentRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| { |
| using ListType_0 = std::remove_reference_t<decltype(request.arg1)>; |
| using ListMemberType_0 = ListMemberTypeGetter<ListType_0>::Type; |
| if (params.arg1.count != 0) { |
| auto * listHolder_0 = new ListHolder<ListMemberType_0>(params.arg1.count); |
| if (listHolder_0 == nullptr || listHolder_0->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_0); |
| for (size_t i_0 = 0; i_0 < params.arg1.count; ++i_0) { |
| if (![params.arg1[i_0] isKindOfClass:[MTRUnitTestingClusterNestedStructList class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_0 = (MTRUnitTestingClusterNestedStructList *) params.arg1[i_0]; |
| listHolder_0->mList[i_0].a = element_0.a.unsignedCharValue; |
| listHolder_0->mList[i_0].b = element_0.b.boolValue; |
| listHolder_0->mList[i_0].c.a = element_0.c.a.unsignedCharValue; |
| listHolder_0->mList[i_0].c.b = element_0.c.b.boolValue; |
| listHolder_0->mList[i_0].c.c |
| = static_cast<std::remove_reference_t<decltype(listHolder_0->mList[i_0].c.c)>>( |
| element_0.c.c.unsignedCharValue); |
| listHolder_0->mList[i_0].c.d = [self asByteSpan:element_0.c.d]; |
| listHolder_0->mList[i_0].c.e = [self asCharSpan:element_0.c.e]; |
| listHolder_0->mList[i_0].c.f |
| = static_cast<std::remove_reference_t<decltype(listHolder_0->mList[i_0].c.f)>>( |
| element_0.c.f.unsignedCharValue); |
| listHolder_0->mList[i_0].c.g = element_0.c.g.floatValue; |
| listHolder_0->mList[i_0].c.h = element_0.c.h.doubleValue; |
| { |
| using ListType_2 = std::remove_reference_t<decltype(listHolder_0->mList[i_0].d)>; |
| using ListMemberType_2 = ListMemberTypeGetter<ListType_2>::Type; |
| if (element_0.d.count != 0) { |
| auto * listHolder_2 = new ListHolder<ListMemberType_2>(element_0.d.count); |
| if (listHolder_2 == nullptr || listHolder_2->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_2); |
| for (size_t i_2 = 0; i_2 < element_0.d.count; ++i_2) { |
| if (![element_0.d[i_2] isKindOfClass:[MTRUnitTestingClusterSimpleStruct class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_2 = (MTRUnitTestingClusterSimpleStruct *) element_0.d[i_2]; |
| listHolder_2->mList[i_2].a = element_2.a.unsignedCharValue; |
| listHolder_2->mList[i_2].b = element_2.b.boolValue; |
| listHolder_2->mList[i_2].c |
| = static_cast<std::remove_reference_t<decltype(listHolder_2->mList[i_2].c)>>( |
| element_2.c.unsignedCharValue); |
| listHolder_2->mList[i_2].d = [self asByteSpan:element_2.d]; |
| listHolder_2->mList[i_2].e = [self asCharSpan:element_2.e]; |
| listHolder_2->mList[i_2].f |
| = static_cast<std::remove_reference_t<decltype(listHolder_2->mList[i_2].f)>>( |
| element_2.f.unsignedCharValue); |
| listHolder_2->mList[i_2].g = element_2.g.floatValue; |
| listHolder_2->mList[i_2].h = element_2.h.doubleValue; |
| } |
| listHolder_0->mList[i_0].d = ListType_2(listHolder_2->mList, element_0.d.count); |
| } else { |
| listHolder_0->mList[i_0].d = ListType_2(); |
| } |
| } |
| { |
| using ListType_2 = std::remove_reference_t<decltype(listHolder_0->mList[i_0].e)>; |
| using ListMemberType_2 = ListMemberTypeGetter<ListType_2>::Type; |
| if (element_0.e.count != 0) { |
| auto * listHolder_2 = new ListHolder<ListMemberType_2>(element_0.e.count); |
| if (listHolder_2 == nullptr || listHolder_2->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_2); |
| for (size_t i_2 = 0; i_2 < element_0.e.count; ++i_2) { |
| if (![element_0.e[i_2] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_2 = (NSNumber *) element_0.e[i_2]; |
| listHolder_2->mList[i_2] = element_2.unsignedIntValue; |
| } |
| listHolder_0->mList[i_0].e = ListType_2(listHolder_2->mList, element_0.e.count); |
| } else { |
| listHolder_0->mList[i_0].e = ListType_2(); |
| } |
| } |
| { |
| using ListType_2 = std::remove_reference_t<decltype(listHolder_0->mList[i_0].f)>; |
| using ListMemberType_2 = ListMemberTypeGetter<ListType_2>::Type; |
| if (element_0.f.count != 0) { |
| auto * listHolder_2 = new ListHolder<ListMemberType_2>(element_0.f.count); |
| if (listHolder_2 == nullptr || listHolder_2->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_2); |
| for (size_t i_2 = 0; i_2 < element_0.f.count; ++i_2) { |
| if (![element_0.f[i_2] isKindOfClass:[NSData class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_2 = (NSData *) element_0.f[i_2]; |
| listHolder_2->mList[i_2] = [self asByteSpan:element_2]; |
| } |
| listHolder_0->mList[i_0].f = ListType_2(listHolder_2->mList, element_0.f.count); |
| } else { |
| listHolder_0->mList[i_0].f = ListType_2(); |
| } |
| } |
| { |
| using ListType_2 = std::remove_reference_t<decltype(listHolder_0->mList[i_0].g)>; |
| using ListMemberType_2 = ListMemberTypeGetter<ListType_2>::Type; |
| if (element_0.g.count != 0) { |
| auto * listHolder_2 = new ListHolder<ListMemberType_2>(element_0.g.count); |
| if (listHolder_2 == nullptr || listHolder_2->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_2); |
| for (size_t i_2 = 0; i_2 < element_0.g.count; ++i_2) { |
| if (![element_0.g[i_2] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_2 = (NSNumber *) element_0.g[i_2]; |
| listHolder_2->mList[i_2] = element_2.unsignedCharValue; |
| } |
| listHolder_0->mList[i_0].g = ListType_2(listHolder_2->mList, element_0.g.count); |
| } else { |
| listHolder_0->mList[i_0].g = ListType_2(); |
| } |
| } |
| } |
| request.arg1 = ListType_0(listHolder_0->mList, params.arg1.count); |
| } else { |
| request.arg1 = ListType_0(); |
| } |
| } |
| { |
| using ListType_0 = std::remove_reference_t<decltype(request.arg2)>; |
| using ListMemberType_0 = ListMemberTypeGetter<ListType_0>::Type; |
| if (params.arg2.count != 0) { |
| auto * listHolder_0 = new ListHolder<ListMemberType_0>(params.arg2.count); |
| if (listHolder_0 == nullptr || listHolder_0->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_0); |
| for (size_t i_0 = 0; i_0 < params.arg2.count; ++i_0) { |
| if (![params.arg2[i_0] isKindOfClass:[MTRUnitTestingClusterSimpleStruct class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_0 = (MTRUnitTestingClusterSimpleStruct *) params.arg2[i_0]; |
| listHolder_0->mList[i_0].a = element_0.a.unsignedCharValue; |
| listHolder_0->mList[i_0].b = element_0.b.boolValue; |
| listHolder_0->mList[i_0].c = static_cast<std::remove_reference_t<decltype(listHolder_0->mList[i_0].c)>>( |
| element_0.c.unsignedCharValue); |
| listHolder_0->mList[i_0].d = [self asByteSpan:element_0.d]; |
| listHolder_0->mList[i_0].e = [self asCharSpan:element_0.e]; |
| listHolder_0->mList[i_0].f = static_cast<std::remove_reference_t<decltype(listHolder_0->mList[i_0].f)>>( |
| element_0.f.unsignedCharValue); |
| listHolder_0->mList[i_0].g = element_0.g.floatValue; |
| listHolder_0->mList[i_0].h = element_0.h.doubleValue; |
| } |
| request.arg2 = ListType_0(listHolder_0->mList, params.arg2.count); |
| } else { |
| request.arg2 = ListType_0(); |
| } |
| } |
| { |
| using ListType_0 = std::remove_reference_t<decltype(request.arg3)>; |
| using ListMemberType_0 = ListMemberTypeGetter<ListType_0>::Type; |
| if (params.arg3.count != 0) { |
| auto * listHolder_0 = new ListHolder<ListMemberType_0>(params.arg3.count); |
| if (listHolder_0 == nullptr || listHolder_0->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_0); |
| for (size_t i_0 = 0; i_0 < params.arg3.count; ++i_0) { |
| if (![params.arg3[i_0] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_0 = (NSNumber *) params.arg3[i_0]; |
| listHolder_0->mList[i_0] = static_cast<std::remove_reference_t<decltype(listHolder_0->mList[i_0])>>( |
| element_0.unsignedCharValue); |
| } |
| request.arg3 = ListType_0(listHolder_0->mList, params.arg3.count); |
| } else { |
| request.arg3 = ListType_0(); |
| } |
| } |
| { |
| using ListType_0 = std::remove_reference_t<decltype(request.arg4)>; |
| using ListMemberType_0 = ListMemberTypeGetter<ListType_0>::Type; |
| if (params.arg4.count != 0) { |
| auto * listHolder_0 = new ListHolder<ListMemberType_0>(params.arg4.count); |
| if (listHolder_0 == nullptr || listHolder_0->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_0); |
| for (size_t i_0 = 0; i_0 < params.arg4.count; ++i_0) { |
| if (![params.arg4[i_0] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_0 = (NSNumber *) params.arg4[i_0]; |
| listHolder_0->mList[i_0] = element_0.boolValue; |
| } |
| request.arg4 = ListType_0(listHolder_0->mList, params.arg4.count); |
| } else { |
| request.arg4 = ListType_0(); |
| } |
| } |
| request.arg5 = static_cast<std::remove_reference_t<decltype(request.arg5)>>(params.arg5.unsignedCharValue); |
| request.arg6 = params.arg6.boolValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testStructArgumentRequestWithParams:(MTRUnitTestingClusterTestStructArgumentRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRUnitTestingClusterBooleanResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestStructArgumentRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterBooleanResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterBooleanResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterBooleanResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestStructArgumentRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.arg1.a = params.arg1.a.unsignedCharValue; |
| request.arg1.b = params.arg1.b.boolValue; |
| request.arg1.c = static_cast<std::remove_reference_t<decltype(request.arg1.c)>>(params.arg1.c.unsignedCharValue); |
| request.arg1.d = [self asByteSpan:params.arg1.d]; |
| request.arg1.e = [self asCharSpan:params.arg1.e]; |
| request.arg1.f = static_cast<std::remove_reference_t<decltype(request.arg1.f)>>(params.arg1.f.unsignedCharValue); |
| request.arg1.g = params.arg1.g.floatValue; |
| request.arg1.h = params.arg1.h.doubleValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testNestedStructArgumentRequestWithParams:(MTRUnitTestingClusterTestNestedStructArgumentRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRUnitTestingClusterBooleanResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestNestedStructArgumentRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterBooleanResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterBooleanResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterBooleanResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestNestedStructArgumentRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.arg1.a = params.arg1.a.unsignedCharValue; |
| request.arg1.b = params.arg1.b.boolValue; |
| request.arg1.c.a = params.arg1.c.a.unsignedCharValue; |
| request.arg1.c.b = params.arg1.c.b.boolValue; |
| request.arg1.c.c |
| = static_cast<std::remove_reference_t<decltype(request.arg1.c.c)>>(params.arg1.c.c.unsignedCharValue); |
| request.arg1.c.d = [self asByteSpan:params.arg1.c.d]; |
| request.arg1.c.e = [self asCharSpan:params.arg1.c.e]; |
| request.arg1.c.f |
| = static_cast<std::remove_reference_t<decltype(request.arg1.c.f)>>(params.arg1.c.f.unsignedCharValue); |
| request.arg1.c.g = params.arg1.c.g.floatValue; |
| request.arg1.c.h = params.arg1.c.h.doubleValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testListStructArgumentRequestWithParams:(MTRUnitTestingClusterTestListStructArgumentRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRUnitTestingClusterBooleanResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestListStructArgumentRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterBooleanResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterBooleanResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterBooleanResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestListStructArgumentRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| { |
| using ListType_0 = std::remove_reference_t<decltype(request.arg1)>; |
| using ListMemberType_0 = ListMemberTypeGetter<ListType_0>::Type; |
| if (params.arg1.count != 0) { |
| auto * listHolder_0 = new ListHolder<ListMemberType_0>(params.arg1.count); |
| if (listHolder_0 == nullptr || listHolder_0->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_0); |
| for (size_t i_0 = 0; i_0 < params.arg1.count; ++i_0) { |
| if (![params.arg1[i_0] isKindOfClass:[MTRUnitTestingClusterSimpleStruct class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_0 = (MTRUnitTestingClusterSimpleStruct *) params.arg1[i_0]; |
| listHolder_0->mList[i_0].a = element_0.a.unsignedCharValue; |
| listHolder_0->mList[i_0].b = element_0.b.boolValue; |
| listHolder_0->mList[i_0].c = static_cast<std::remove_reference_t<decltype(listHolder_0->mList[i_0].c)>>( |
| element_0.c.unsignedCharValue); |
| listHolder_0->mList[i_0].d = [self asByteSpan:element_0.d]; |
| listHolder_0->mList[i_0].e = [self asCharSpan:element_0.e]; |
| listHolder_0->mList[i_0].f = static_cast<std::remove_reference_t<decltype(listHolder_0->mList[i_0].f)>>( |
| element_0.f.unsignedCharValue); |
| listHolder_0->mList[i_0].g = element_0.g.floatValue; |
| listHolder_0->mList[i_0].h = element_0.h.doubleValue; |
| } |
| request.arg1 = ListType_0(listHolder_0->mList, params.arg1.count); |
| } else { |
| request.arg1 = ListType_0(); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testListInt8UArgumentRequestWithParams:(MTRUnitTestingClusterTestListInt8UArgumentRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRUnitTestingClusterBooleanResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestListInt8UArgumentRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterBooleanResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterBooleanResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterBooleanResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestListInt8UArgumentRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| { |
| using ListType_0 = std::remove_reference_t<decltype(request.arg1)>; |
| using ListMemberType_0 = ListMemberTypeGetter<ListType_0>::Type; |
| if (params.arg1.count != 0) { |
| auto * listHolder_0 = new ListHolder<ListMemberType_0>(params.arg1.count); |
| if (listHolder_0 == nullptr || listHolder_0->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_0); |
| for (size_t i_0 = 0; i_0 < params.arg1.count; ++i_0) { |
| if (![params.arg1[i_0] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_0 = (NSNumber *) params.arg1[i_0]; |
| listHolder_0->mList[i_0] = element_0.unsignedCharValue; |
| } |
| request.arg1 = ListType_0(listHolder_0->mList, params.arg1.count); |
| } else { |
| request.arg1 = ListType_0(); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testNestedStructListArgumentRequestWithParams:(MTRUnitTestingClusterTestNestedStructListArgumentRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRUnitTestingClusterBooleanResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestNestedStructListArgumentRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterBooleanResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterBooleanResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterBooleanResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestNestedStructListArgumentRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.arg1.a = params.arg1.a.unsignedCharValue; |
| request.arg1.b = params.arg1.b.boolValue; |
| request.arg1.c.a = params.arg1.c.a.unsignedCharValue; |
| request.arg1.c.b = params.arg1.c.b.boolValue; |
| request.arg1.c.c |
| = static_cast<std::remove_reference_t<decltype(request.arg1.c.c)>>(params.arg1.c.c.unsignedCharValue); |
| request.arg1.c.d = [self asByteSpan:params.arg1.c.d]; |
| request.arg1.c.e = [self asCharSpan:params.arg1.c.e]; |
| request.arg1.c.f |
| = static_cast<std::remove_reference_t<decltype(request.arg1.c.f)>>(params.arg1.c.f.unsignedCharValue); |
| request.arg1.c.g = params.arg1.c.g.floatValue; |
| request.arg1.c.h = params.arg1.c.h.doubleValue; |
| { |
| using ListType_1 = std::remove_reference_t<decltype(request.arg1.d)>; |
| using ListMemberType_1 = ListMemberTypeGetter<ListType_1>::Type; |
| if (params.arg1.d.count != 0) { |
| auto * listHolder_1 = new ListHolder<ListMemberType_1>(params.arg1.d.count); |
| if (listHolder_1 == nullptr || listHolder_1->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_1); |
| for (size_t i_1 = 0; i_1 < params.arg1.d.count; ++i_1) { |
| if (![params.arg1.d[i_1] isKindOfClass:[MTRUnitTestingClusterSimpleStruct class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_1 = (MTRUnitTestingClusterSimpleStruct *) params.arg1.d[i_1]; |
| listHolder_1->mList[i_1].a = element_1.a.unsignedCharValue; |
| listHolder_1->mList[i_1].b = element_1.b.boolValue; |
| listHolder_1->mList[i_1].c = static_cast<std::remove_reference_t<decltype(listHolder_1->mList[i_1].c)>>( |
| element_1.c.unsignedCharValue); |
| listHolder_1->mList[i_1].d = [self asByteSpan:element_1.d]; |
| listHolder_1->mList[i_1].e = [self asCharSpan:element_1.e]; |
| listHolder_1->mList[i_1].f = static_cast<std::remove_reference_t<decltype(listHolder_1->mList[i_1].f)>>( |
| element_1.f.unsignedCharValue); |
| listHolder_1->mList[i_1].g = element_1.g.floatValue; |
| listHolder_1->mList[i_1].h = element_1.h.doubleValue; |
| } |
| request.arg1.d = ListType_1(listHolder_1->mList, params.arg1.d.count); |
| } else { |
| request.arg1.d = ListType_1(); |
| } |
| } |
| { |
| using ListType_1 = std::remove_reference_t<decltype(request.arg1.e)>; |
| using ListMemberType_1 = ListMemberTypeGetter<ListType_1>::Type; |
| if (params.arg1.e.count != 0) { |
| auto * listHolder_1 = new ListHolder<ListMemberType_1>(params.arg1.e.count); |
| if (listHolder_1 == nullptr || listHolder_1->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_1); |
| for (size_t i_1 = 0; i_1 < params.arg1.e.count; ++i_1) { |
| if (![params.arg1.e[i_1] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_1 = (NSNumber *) params.arg1.e[i_1]; |
| listHolder_1->mList[i_1] = element_1.unsignedIntValue; |
| } |
| request.arg1.e = ListType_1(listHolder_1->mList, params.arg1.e.count); |
| } else { |
| request.arg1.e = ListType_1(); |
| } |
| } |
| { |
| using ListType_1 = std::remove_reference_t<decltype(request.arg1.f)>; |
| using ListMemberType_1 = ListMemberTypeGetter<ListType_1>::Type; |
| if (params.arg1.f.count != 0) { |
| auto * listHolder_1 = new ListHolder<ListMemberType_1>(params.arg1.f.count); |
| if (listHolder_1 == nullptr || listHolder_1->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_1); |
| for (size_t i_1 = 0; i_1 < params.arg1.f.count; ++i_1) { |
| if (![params.arg1.f[i_1] isKindOfClass:[NSData class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_1 = (NSData *) params.arg1.f[i_1]; |
| listHolder_1->mList[i_1] = [self asByteSpan:element_1]; |
| } |
| request.arg1.f = ListType_1(listHolder_1->mList, params.arg1.f.count); |
| } else { |
| request.arg1.f = ListType_1(); |
| } |
| } |
| { |
| using ListType_1 = std::remove_reference_t<decltype(request.arg1.g)>; |
| using ListMemberType_1 = ListMemberTypeGetter<ListType_1>::Type; |
| if (params.arg1.g.count != 0) { |
| auto * listHolder_1 = new ListHolder<ListMemberType_1>(params.arg1.g.count); |
| if (listHolder_1 == nullptr || listHolder_1->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_1); |
| for (size_t i_1 = 0; i_1 < params.arg1.g.count; ++i_1) { |
| if (![params.arg1.g[i_1] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_1 = (NSNumber *) params.arg1.g[i_1]; |
| listHolder_1->mList[i_1] = element_1.unsignedCharValue; |
| } |
| request.arg1.g = ListType_1(listHolder_1->mList, params.arg1.g.count); |
| } else { |
| request.arg1.g = ListType_1(); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testListNestedStructListArgumentRequestWithParams: |
| (MTRUnitTestingClusterTestListNestedStructListArgumentRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRUnitTestingClusterBooleanResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestListNestedStructListArgumentRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterBooleanResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterBooleanResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterBooleanResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestListNestedStructListArgumentRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| { |
| using ListType_0 = std::remove_reference_t<decltype(request.arg1)>; |
| using ListMemberType_0 = ListMemberTypeGetter<ListType_0>::Type; |
| if (params.arg1.count != 0) { |
| auto * listHolder_0 = new ListHolder<ListMemberType_0>(params.arg1.count); |
| if (listHolder_0 == nullptr || listHolder_0->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_0); |
| for (size_t i_0 = 0; i_0 < params.arg1.count; ++i_0) { |
| if (![params.arg1[i_0] isKindOfClass:[MTRUnitTestingClusterNestedStructList class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_0 = (MTRUnitTestingClusterNestedStructList *) params.arg1[i_0]; |
| listHolder_0->mList[i_0].a = element_0.a.unsignedCharValue; |
| listHolder_0->mList[i_0].b = element_0.b.boolValue; |
| listHolder_0->mList[i_0].c.a = element_0.c.a.unsignedCharValue; |
| listHolder_0->mList[i_0].c.b = element_0.c.b.boolValue; |
| listHolder_0->mList[i_0].c.c |
| = static_cast<std::remove_reference_t<decltype(listHolder_0->mList[i_0].c.c)>>( |
| element_0.c.c.unsignedCharValue); |
| listHolder_0->mList[i_0].c.d = [self asByteSpan:element_0.c.d]; |
| listHolder_0->mList[i_0].c.e = [self asCharSpan:element_0.c.e]; |
| listHolder_0->mList[i_0].c.f |
| = static_cast<std::remove_reference_t<decltype(listHolder_0->mList[i_0].c.f)>>( |
| element_0.c.f.unsignedCharValue); |
| listHolder_0->mList[i_0].c.g = element_0.c.g.floatValue; |
| listHolder_0->mList[i_0].c.h = element_0.c.h.doubleValue; |
| { |
| using ListType_2 = std::remove_reference_t<decltype(listHolder_0->mList[i_0].d)>; |
| using ListMemberType_2 = ListMemberTypeGetter<ListType_2>::Type; |
| if (element_0.d.count != 0) { |
| auto * listHolder_2 = new ListHolder<ListMemberType_2>(element_0.d.count); |
| if (listHolder_2 == nullptr || listHolder_2->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_2); |
| for (size_t i_2 = 0; i_2 < element_0.d.count; ++i_2) { |
| if (![element_0.d[i_2] isKindOfClass:[MTRUnitTestingClusterSimpleStruct class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_2 = (MTRUnitTestingClusterSimpleStruct *) element_0.d[i_2]; |
| listHolder_2->mList[i_2].a = element_2.a.unsignedCharValue; |
| listHolder_2->mList[i_2].b = element_2.b.boolValue; |
| listHolder_2->mList[i_2].c |
| = static_cast<std::remove_reference_t<decltype(listHolder_2->mList[i_2].c)>>( |
| element_2.c.unsignedCharValue); |
| listHolder_2->mList[i_2].d = [self asByteSpan:element_2.d]; |
| listHolder_2->mList[i_2].e = [self asCharSpan:element_2.e]; |
| listHolder_2->mList[i_2].f |
| = static_cast<std::remove_reference_t<decltype(listHolder_2->mList[i_2].f)>>( |
| element_2.f.unsignedCharValue); |
| listHolder_2->mList[i_2].g = element_2.g.floatValue; |
| listHolder_2->mList[i_2].h = element_2.h.doubleValue; |
| } |
| listHolder_0->mList[i_0].d = ListType_2(listHolder_2->mList, element_0.d.count); |
| } else { |
| listHolder_0->mList[i_0].d = ListType_2(); |
| } |
| } |
| { |
| using ListType_2 = std::remove_reference_t<decltype(listHolder_0->mList[i_0].e)>; |
| using ListMemberType_2 = ListMemberTypeGetter<ListType_2>::Type; |
| if (element_0.e.count != 0) { |
| auto * listHolder_2 = new ListHolder<ListMemberType_2>(element_0.e.count); |
| if (listHolder_2 == nullptr || listHolder_2->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_2); |
| for (size_t i_2 = 0; i_2 < element_0.e.count; ++i_2) { |
| if (![element_0.e[i_2] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_2 = (NSNumber *) element_0.e[i_2]; |
| listHolder_2->mList[i_2] = element_2.unsignedIntValue; |
| } |
| listHolder_0->mList[i_0].e = ListType_2(listHolder_2->mList, element_0.e.count); |
| } else { |
| listHolder_0->mList[i_0].e = ListType_2(); |
| } |
| } |
| { |
| using ListType_2 = std::remove_reference_t<decltype(listHolder_0->mList[i_0].f)>; |
| using ListMemberType_2 = ListMemberTypeGetter<ListType_2>::Type; |
| if (element_0.f.count != 0) { |
| auto * listHolder_2 = new ListHolder<ListMemberType_2>(element_0.f.count); |
| if (listHolder_2 == nullptr || listHolder_2->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_2); |
| for (size_t i_2 = 0; i_2 < element_0.f.count; ++i_2) { |
| if (![element_0.f[i_2] isKindOfClass:[NSData class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_2 = (NSData *) element_0.f[i_2]; |
| listHolder_2->mList[i_2] = [self asByteSpan:element_2]; |
| } |
| listHolder_0->mList[i_0].f = ListType_2(listHolder_2->mList, element_0.f.count); |
| } else { |
| listHolder_0->mList[i_0].f = ListType_2(); |
| } |
| } |
| { |
| using ListType_2 = std::remove_reference_t<decltype(listHolder_0->mList[i_0].g)>; |
| using ListMemberType_2 = ListMemberTypeGetter<ListType_2>::Type; |
| if (element_0.g.count != 0) { |
| auto * listHolder_2 = new ListHolder<ListMemberType_2>(element_0.g.count); |
| if (listHolder_2 == nullptr || listHolder_2->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_2); |
| for (size_t i_2 = 0; i_2 < element_0.g.count; ++i_2) { |
| if (![element_0.g[i_2] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_2 = (NSNumber *) element_0.g[i_2]; |
| listHolder_2->mList[i_2] = element_2.unsignedCharValue; |
| } |
| listHolder_0->mList[i_0].g = ListType_2(listHolder_2->mList, element_0.g.count); |
| } else { |
| listHolder_0->mList[i_0].g = ListType_2(); |
| } |
| } |
| } |
| request.arg1 = ListType_0(listHolder_0->mList, params.arg1.count); |
| } else { |
| request.arg1 = ListType_0(); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testListInt8UReverseRequestWithParams:(MTRUnitTestingClusterTestListInt8UReverseRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRUnitTestingClusterTestListInt8UReverseResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestListInt8UReverseRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterTestListInt8UReverseResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterTestListInt8UReverseResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterTestListInt8UReverseResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestListInt8UReverseRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| { |
| using ListType_0 = std::remove_reference_t<decltype(request.arg1)>; |
| using ListMemberType_0 = ListMemberTypeGetter<ListType_0>::Type; |
| if (params.arg1.count != 0) { |
| auto * listHolder_0 = new ListHolder<ListMemberType_0>(params.arg1.count); |
| if (listHolder_0 == nullptr || listHolder_0->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_0); |
| for (size_t i_0 = 0; i_0 < params.arg1.count; ++i_0) { |
| if (![params.arg1[i_0] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_0 = (NSNumber *) params.arg1[i_0]; |
| listHolder_0->mList[i_0] = element_0.unsignedCharValue; |
| } |
| request.arg1 = ListType_0(listHolder_0->mList, params.arg1.count); |
| } else { |
| request.arg1 = ListType_0(); |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testEnumsRequestWithParams:(MTRUnitTestingClusterTestEnumsRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRUnitTestingClusterTestEnumsResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestEnumsRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterTestEnumsResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterTestEnumsResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterTestEnumsResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestEnumsRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.arg1 = static_cast<std::remove_reference_t<decltype(request.arg1)>>(params.arg1.unsignedShortValue); |
| request.arg2 = static_cast<std::remove_reference_t<decltype(request.arg2)>>(params.arg2.unsignedCharValue); |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testNullableOptionalRequestWithParams:(MTRUnitTestingClusterTestNullableOptionalRequestParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRUnitTestingClusterTestNullableOptionalResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestNullableOptionalRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterTestNullableOptionalResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterTestNullableOptionalResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterTestNullableOptionalResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestNullableOptionalRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (params != nil) { |
| if (params.arg1 != nil) { |
| auto & definedValue_0 = request.arg1.Emplace(); |
| if (params.arg1 == nil) { |
| definedValue_0.SetNull(); |
| } else { |
| auto & nonNullValue_1 = definedValue_0.SetNonNull(); |
| nonNullValue_1 = params.arg1.unsignedCharValue; |
| } |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testComplexNullableOptionalRequestWithParams:(MTRUnitTestingClusterTestComplexNullableOptionalRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)( |
| MTRUnitTestingClusterTestComplexNullableOptionalResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestComplexNullableOptionalRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterTestComplexNullableOptionalResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterTestComplexNullableOptionalResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterTestComplexNullableOptionalResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestComplexNullableOptionalRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (params.nullableInt == nil) { |
| request.nullableInt.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.nullableInt.SetNonNull(); |
| nonNullValue_0 = params.nullableInt.unsignedShortValue; |
| } |
| if (params.optionalInt != nil) { |
| auto & definedValue_0 = request.optionalInt.Emplace(); |
| definedValue_0 = params.optionalInt.unsignedShortValue; |
| } |
| if (params.nullableOptionalInt != nil) { |
| auto & definedValue_0 = request.nullableOptionalInt.Emplace(); |
| if (params.nullableOptionalInt == nil) { |
| definedValue_0.SetNull(); |
| } else { |
| auto & nonNullValue_1 = definedValue_0.SetNonNull(); |
| nonNullValue_1 = params.nullableOptionalInt.unsignedShortValue; |
| } |
| } |
| if (params.nullableString == nil) { |
| request.nullableString.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.nullableString.SetNonNull(); |
| nonNullValue_0 = [self asCharSpan:params.nullableString]; |
| } |
| if (params.optionalString != nil) { |
| auto & definedValue_0 = request.optionalString.Emplace(); |
| definedValue_0 = [self asCharSpan:params.optionalString]; |
| } |
| if (params.nullableOptionalString != nil) { |
| auto & definedValue_0 = request.nullableOptionalString.Emplace(); |
| if (params.nullableOptionalString == nil) { |
| definedValue_0.SetNull(); |
| } else { |
| auto & nonNullValue_1 = definedValue_0.SetNonNull(); |
| nonNullValue_1 = [self asCharSpan:params.nullableOptionalString]; |
| } |
| } |
| if (params.nullableStruct == nil) { |
| request.nullableStruct.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.nullableStruct.SetNonNull(); |
| nonNullValue_0.a = params.nullableStruct.a.unsignedCharValue; |
| nonNullValue_0.b = params.nullableStruct.b.boolValue; |
| nonNullValue_0.c = static_cast<std::remove_reference_t<decltype(nonNullValue_0.c)>>( |
| params.nullableStruct.c.unsignedCharValue); |
| nonNullValue_0.d = [self asByteSpan:params.nullableStruct.d]; |
| nonNullValue_0.e = [self asCharSpan:params.nullableStruct.e]; |
| nonNullValue_0.f = static_cast<std::remove_reference_t<decltype(nonNullValue_0.f)>>( |
| params.nullableStruct.f.unsignedCharValue); |
| nonNullValue_0.g = params.nullableStruct.g.floatValue; |
| nonNullValue_0.h = params.nullableStruct.h.doubleValue; |
| } |
| if (params.optionalStruct != nil) { |
| auto & definedValue_0 = request.optionalStruct.Emplace(); |
| definedValue_0.a = params.optionalStruct.a.unsignedCharValue; |
| definedValue_0.b = params.optionalStruct.b.boolValue; |
| definedValue_0.c = static_cast<std::remove_reference_t<decltype(definedValue_0.c)>>( |
| params.optionalStruct.c.unsignedCharValue); |
| definedValue_0.d = [self asByteSpan:params.optionalStruct.d]; |
| definedValue_0.e = [self asCharSpan:params.optionalStruct.e]; |
| definedValue_0.f = static_cast<std::remove_reference_t<decltype(definedValue_0.f)>>( |
| params.optionalStruct.f.unsignedCharValue); |
| definedValue_0.g = params.optionalStruct.g.floatValue; |
| definedValue_0.h = params.optionalStruct.h.doubleValue; |
| } |
| if (params.nullableOptionalStruct != nil) { |
| auto & definedValue_0 = request.nullableOptionalStruct.Emplace(); |
| if (params.nullableOptionalStruct == nil) { |
| definedValue_0.SetNull(); |
| } else { |
| auto & nonNullValue_1 = definedValue_0.SetNonNull(); |
| nonNullValue_1.a = params.nullableOptionalStruct.a.unsignedCharValue; |
| nonNullValue_1.b = params.nullableOptionalStruct.b.boolValue; |
| nonNullValue_1.c = static_cast<std::remove_reference_t<decltype(nonNullValue_1.c)>>( |
| params.nullableOptionalStruct.c.unsignedCharValue); |
| nonNullValue_1.d = [self asByteSpan:params.nullableOptionalStruct.d]; |
| nonNullValue_1.e = [self asCharSpan:params.nullableOptionalStruct.e]; |
| nonNullValue_1.f = static_cast<std::remove_reference_t<decltype(nonNullValue_1.f)>>( |
| params.nullableOptionalStruct.f.unsignedCharValue); |
| nonNullValue_1.g = params.nullableOptionalStruct.g.floatValue; |
| nonNullValue_1.h = params.nullableOptionalStruct.h.doubleValue; |
| } |
| } |
| if (params.nullableList == nil) { |
| request.nullableList.SetNull(); |
| } else { |
| auto & nonNullValue_0 = request.nullableList.SetNonNull(); |
| { |
| using ListType_1 = std::remove_reference_t<decltype(nonNullValue_0)>; |
| using ListMemberType_1 = ListMemberTypeGetter<ListType_1>::Type; |
| if (params.nullableList.count != 0) { |
| auto * listHolder_1 = new ListHolder<ListMemberType_1>(params.nullableList.count); |
| if (listHolder_1 == nullptr || listHolder_1->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_1); |
| for (size_t i_1 = 0; i_1 < params.nullableList.count; ++i_1) { |
| if (![params.nullableList[i_1] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_1 = (NSNumber *) params.nullableList[i_1]; |
| listHolder_1->mList[i_1] = static_cast<std::remove_reference_t<decltype(listHolder_1->mList[i_1])>>( |
| element_1.unsignedCharValue); |
| } |
| nonNullValue_0 = ListType_1(listHolder_1->mList, params.nullableList.count); |
| } else { |
| nonNullValue_0 = ListType_1(); |
| } |
| } |
| } |
| if (params.optionalList != nil) { |
| auto & definedValue_0 = request.optionalList.Emplace(); |
| { |
| using ListType_1 = std::remove_reference_t<decltype(definedValue_0)>; |
| using ListMemberType_1 = ListMemberTypeGetter<ListType_1>::Type; |
| if (params.optionalList.count != 0) { |
| auto * listHolder_1 = new ListHolder<ListMemberType_1>(params.optionalList.count); |
| if (listHolder_1 == nullptr || listHolder_1->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_1); |
| for (size_t i_1 = 0; i_1 < params.optionalList.count; ++i_1) { |
| if (![params.optionalList[i_1] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_1 = (NSNumber *) params.optionalList[i_1]; |
| listHolder_1->mList[i_1] = static_cast<std::remove_reference_t<decltype(listHolder_1->mList[i_1])>>( |
| element_1.unsignedCharValue); |
| } |
| definedValue_0 = ListType_1(listHolder_1->mList, params.optionalList.count); |
| } else { |
| definedValue_0 = ListType_1(); |
| } |
| } |
| } |
| if (params.nullableOptionalList != nil) { |
| auto & definedValue_0 = request.nullableOptionalList.Emplace(); |
| if (params.nullableOptionalList == nil) { |
| definedValue_0.SetNull(); |
| } else { |
| auto & nonNullValue_1 = definedValue_0.SetNonNull(); |
| { |
| using ListType_2 = std::remove_reference_t<decltype(nonNullValue_1)>; |
| using ListMemberType_2 = ListMemberTypeGetter<ListType_2>::Type; |
| if (params.nullableOptionalList.count != 0) { |
| auto * listHolder_2 = new ListHolder<ListMemberType_2>(params.nullableOptionalList.count); |
| if (listHolder_2 == nullptr || listHolder_2->mList == nullptr) { |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| listFreer.add(listHolder_2); |
| for (size_t i_2 = 0; i_2 < params.nullableOptionalList.count; ++i_2) { |
| if (![params.nullableOptionalList[i_2] isKindOfClass:[NSNumber class]]) { |
| // Wrong kind of value. |
| return CHIP_ERROR_INVALID_ARGUMENT; |
| } |
| auto element_2 = (NSNumber *) params.nullableOptionalList[i_2]; |
| listHolder_2->mList[i_2] |
| = static_cast<std::remove_reference_t<decltype(listHolder_2->mList[i_2])>>( |
| element_2.unsignedCharValue); |
| } |
| nonNullValue_1 = ListType_2(listHolder_2->mList, params.nullableOptionalList.count); |
| } else { |
| nonNullValue_1 = ListType_2(); |
| } |
| } |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)simpleStructEchoRequestWithParams:(MTRUnitTestingClusterSimpleStructEchoRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRUnitTestingClusterSimpleStructResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandSimpleStructEchoRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterSimpleStructResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterSimpleStructResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterSimpleStructResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::SimpleStructEchoRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.arg1.a = params.arg1.a.unsignedCharValue; |
| request.arg1.b = params.arg1.b.boolValue; |
| request.arg1.c = static_cast<std::remove_reference_t<decltype(request.arg1.c)>>(params.arg1.c.unsignedCharValue); |
| request.arg1.d = [self asByteSpan:params.arg1.d]; |
| request.arg1.e = [self asCharSpan:params.arg1.e]; |
| request.arg1.f = static_cast<std::remove_reference_t<decltype(request.arg1.f)>>(params.arg1.f.unsignedCharValue); |
| request.arg1.g = params.arg1.g.floatValue; |
| request.arg1.h = params.arg1.h.doubleValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)timedInvokeRequestWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| [self timedInvokeRequestWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completion]; |
| } |
| - (void)timedInvokeRequestWithParams:(MTRUnitTestingClusterTimedInvokeRequestParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTimedInvokeRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TimedInvokeRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (!timedInvokeTimeoutMs.HasValue()) { |
| timedInvokeTimeoutMs.SetValue(10000); |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testSimpleOptionalArgumentRequestWithParams:(MTRUnitTestingClusterTestSimpleOptionalArgumentRequestParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(MTRStatusCompletion)completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestSimpleOptionalArgumentRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRCommandSuccessCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, CommandSuccessCallbackType successCb, |
| MTRErrorCallback failureCb, MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRCommandSuccessCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestSimpleOptionalArgumentRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| if (params != nil) { |
| if (params.arg1 != nil) { |
| auto & definedValue_0 = request.arg1.Emplace(); |
| definedValue_0 = params.arg1.boolValue; |
| } |
| } |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void)testEmitTestEventRequestWithParams:(MTRUnitTestingClusterTestEmitTestEventRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion:(void (^)(MTRUnitTestingClusterTestEmitTestEventResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, |
| _endpoint, (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestEmitTestEventRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterTestEmitTestEventResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterTestEmitTestEventResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge = static_cast<MTRUnitTestingClusterTestEmitTestEventResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestEmitTestEventRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.arg1 = params.arg1.unsignedCharValue; |
| request.arg2 = static_cast<std::remove_reference_t<decltype(request.arg2)>>(params.arg2.unsignedCharValue); |
| request.arg3 = params.arg3.boolValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (void) |
| testEmitTestFabricScopedEventRequestWithParams:(MTRUnitTestingClusterTestEmitTestFabricScopedEventRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completion: |
| (void (^)( |
| MTRUnitTestingClusterTestEmitTestFabricScopedEventResponseParams * _Nullable data, |
| NSError * _Nullable error))completion |
| { |
| NSString * logPrefix = |
| [NSString stringWithFormat:@"MTRDevice command %u %u %u %u", self.device.deviceController.fabricIndex, _endpoint, |
| (unsigned int) MTRClusterIDTypeUnitTestingID, |
| (unsigned int) MTRCommandIDTypeClusterUnitTestingCommandTestEmitTestFabricScopedEventRequestID]; |
| // Make a copy of params before we go async. |
| params = [params copy]; |
| NSNumber * timedInvokeTimeoutMsParam = params.timedInvokeTimeoutMs; |
| if (timedInvokeTimeoutMsParam) { |
| timedInvokeTimeoutMsParam = MTRClampedNumber(timedInvokeTimeoutMsParam, @(1), @(UINT16_MAX)); |
| } |
| MTRAsyncCallbackQueueWorkItem * workItem = [[MTRAsyncCallbackQueueWorkItem alloc] initWithQueue:self.device.queue]; |
| MTRAsyncCallbackReadyHandler readyHandler = ^(MTRDevice * device, NSUInteger retryCount) { |
| MTRClustersLogDequeue(logPrefix, self.device.asyncCallbackWorkQueue); |
| MTRBaseDevice * baseDevice = [[MTRBaseDevice alloc] initWithNodeID:self.device.nodeID |
| controller:self.device.deviceController]; |
| auto * bridge = new MTRUnitTestingClusterTestEmitTestFabricScopedEventResponseCallbackBridge( |
| self.device.queue, |
| ^(id _Nullable value, NSError * _Nullable error) { |
| MTRClustersLogCompletion(logPrefix, value, error); |
| dispatch_async(self.callbackQueue, ^{ |
| completion(value, error); |
| }); |
| [workItem endWork]; |
| }, |
| ^(ExchangeManager & exchangeManager, const SessionHandle & session, |
| UnitTestingClusterTestEmitTestFabricScopedEventResponseCallbackType successCb, MTRErrorCallback failureCb, |
| MTRCallbackBridgeBase * bridge) { |
| auto * typedBridge |
| = static_cast<MTRUnitTestingClusterTestEmitTestFabricScopedEventResponseCallbackBridge *>(bridge); |
| Optional<uint16_t> timedInvokeTimeoutMs; |
| Optional<Timeout> invokeTimeout; |
| ListFreer listFreer; |
| UnitTesting::Commands::TestEmitTestFabricScopedEventRequest::Type request; |
| if (timedInvokeTimeoutMsParam != nil) { |
| timedInvokeTimeoutMs.SetValue(timedInvokeTimeoutMsParam.unsignedShortValue); |
| } |
| if (params != nil) { |
| if (params.serverSideProcessingTimeout != nil) { |
| // Clamp to a number of seconds that will not overflow 32-bit |
| // int when converted to ms. |
| auto * serverSideProcessingTimeout |
| = MTRClampedNumber(params.serverSideProcessingTimeout, @(0), @(UINT16_MAX)); |
| invokeTimeout.SetValue(Seconds16(serverSideProcessingTimeout.unsignedShortValue)); |
| } |
| } |
| request.arg1 = params.arg1.unsignedCharValue; |
| |
| return MTRStartInvokeInteraction(typedBridge, request, exchangeManager, session, successCb, failureCb, |
| self->_endpoint, timedInvokeTimeoutMs, invokeTimeout); |
| }); |
| std::move(*bridge).DispatchAction(baseDevice); |
| }; |
| workItem.readyHandler = readyHandler; |
| MTRClustersLogEnqueue(logPrefix, self.device.asyncCallbackWorkQueue); |
| [self.device.asyncCallbackWorkQueue enqueueWorkItem:workItem]; |
| |
| if (!expectedValueIntervalMs || ([expectedValueIntervalMs compare:@(0)] == NSOrderedAscending)) { |
| expectedValues = nil; |
| } else { |
| expectedValueIntervalMs = MTRClampedNumber(expectedValueIntervalMs, @(1), @(UINT32_MAX)); |
| } |
| if (expectedValues) { |
| [self.device setExpectedValues:expectedValues expectedValueInterval:expectedValueIntervalMs]; |
| } |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBooleanWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeBooleanID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeBooleanWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeBooleanWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeBooleanWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeBooleanID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBitmap8WithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeBitmap8ID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeBitmap8WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeBitmap8WithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeBitmap8WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeBitmap8ID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBitmap16WithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeBitmap16ID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeBitmap16WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeBitmap16WithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeBitmap16WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeBitmap16ID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBitmap32WithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeBitmap32ID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeBitmap32WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeBitmap32WithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeBitmap32WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeBitmap32ID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeBitmap64WithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeBitmap64ID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeBitmap64WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeBitmap64WithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeBitmap64WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeBitmap64ID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt8uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt8uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt8uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt8uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt8uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt8uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt16uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt16uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt16uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt16uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt16uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt16uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt24uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt24uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt24uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt24uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt24uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt24uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt32uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt32uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt32uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt32uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt32uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt32uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt40uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt40uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt40uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt40uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt40uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt40uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt48uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt48uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt48uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt48uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt48uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt48uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt56uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt56uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt56uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt56uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt56uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt56uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt64uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt64uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt64uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt64uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt64uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt64uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt8sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt8sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt8sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt8sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt8sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt8sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt16sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt16sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt16sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt16sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt16sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt16sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt24sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt24sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt24sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt24sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt24sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt24sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt32sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt32sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt32sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt32sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt32sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt32sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt40sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt40sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt40sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt40sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt40sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt40sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt48sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt48sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt48sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt48sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt48sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt48sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt56sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt56sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt56sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt56sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt56sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt56sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeInt64sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt64sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeInt64sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeInt64sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeInt64sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeInt64sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEnum8WithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeEnum8ID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeEnum8WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeEnum8WithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeEnum8WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeEnum8ID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEnum16WithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeEnum16ID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeEnum16WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeEnum16WithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeEnum16WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeEnum16ID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFloatSingleWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeFloatSingleID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeFloatSingleWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeFloatSingleWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeFloatSingleWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeFloatSingleID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFloatDoubleWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeFloatDoubleID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeFloatDoubleWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeFloatDoubleWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeFloatDoubleWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeFloatDoubleID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeOctetStringWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeOctetStringID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeOctetStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeOctetStringWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeOctetStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeOctetStringID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeListInt8uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeListInt8uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeListInt8uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeListInt8uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeListInt8uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeListInt8uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeListOctetStringWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeListOctetStringID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeListOctetStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeListOctetStringWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeListOctetStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeListOctetStringID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeListStructOctetStringWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeListStructOctetStringID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeListStructOctetStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeListStructOctetStringWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeListStructOctetStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeListStructOctetStringID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLongOctetStringWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeLongOctetStringID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLongOctetStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLongOctetStringWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeLongOctetStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeLongOctetStringID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeCharStringWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeCharStringID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeCharStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeCharStringWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeCharStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeCharStringID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeLongCharStringWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeLongCharStringID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeLongCharStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeLongCharStringWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeLongCharStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeLongCharStringID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEpochUsWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeEpochUsID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeEpochUsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeEpochUsWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeEpochUsWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeEpochUsID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEpochSWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeEpochSID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeEpochSWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeEpochSWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeEpochSWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeEpochSID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeVendorIdWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeVendorIdID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeVendorIdWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeVendorIdWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeVendorIdWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeVendorIdID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeListNullablesAndOptionalsStructWithParams:(MTRReadParams * _Nullable)params |
| { |
| return |
| [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeListNullablesAndOptionalsStructID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeListNullablesAndOptionalsStructWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeListNullablesAndOptionalsStructWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeListNullablesAndOptionalsStructWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeListNullablesAndOptionalsStructID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeEnumAttrWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeEnumAttrID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeEnumAttrWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeEnumAttrWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeEnumAttrWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeEnumAttrID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeStructAttrWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeStructAttrID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeStructAttrWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeStructAttrWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeStructAttrWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeStructAttrID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRangeRestrictedInt8uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeRangeRestrictedInt8uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeRangeRestrictedInt8uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeRangeRestrictedInt8uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeRangeRestrictedInt8uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeRangeRestrictedInt8uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRangeRestrictedInt8sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeRangeRestrictedInt8sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeRangeRestrictedInt8sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeRangeRestrictedInt8sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeRangeRestrictedInt8sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeRangeRestrictedInt8sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRangeRestrictedInt16uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeRangeRestrictedInt16uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeRangeRestrictedInt16uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeRangeRestrictedInt16uWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeRangeRestrictedInt16uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeRangeRestrictedInt16uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeRangeRestrictedInt16sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeRangeRestrictedInt16sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeRangeRestrictedInt16sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeRangeRestrictedInt16sWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeRangeRestrictedInt16sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeRangeRestrictedInt16sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeListLongOctetStringWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeListLongOctetStringID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeListLongOctetStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeListLongOctetStringWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeListLongOctetStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeListLongOctetStringID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeListFabricScopedWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeListFabricScopedID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeListFabricScopedWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeListFabricScopedWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeListFabricScopedWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeListFabricScopedID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeTimedWriteBooleanWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeTimedWriteBooleanID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeTimedWriteBooleanWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeTimedWriteBooleanWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeTimedWriteBooleanWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeTimedWriteBooleanID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneralErrorBooleanWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeGeneralErrorBooleanID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeGeneralErrorBooleanWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeGeneralErrorBooleanWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeGeneralErrorBooleanWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeGeneralErrorBooleanID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterErrorBooleanWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeClusterErrorBooleanID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeClusterErrorBooleanWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeClusterErrorBooleanWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeClusterErrorBooleanWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeClusterErrorBooleanID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeUnsupportedWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeUnsupportedID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeUnsupportedWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeUnsupportedWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeUnsupportedWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeUnsupportedID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableBooleanWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableBooleanID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableBooleanWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableBooleanWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableBooleanWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableBooleanID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableBitmap8WithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableBitmap8ID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableBitmap8WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableBitmap8WithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableBitmap8WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableBitmap8ID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableBitmap16WithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableBitmap16ID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableBitmap16WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableBitmap16WithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableBitmap16WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableBitmap16ID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableBitmap32WithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableBitmap32ID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableBitmap32WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableBitmap32WithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableBitmap32WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableBitmap32ID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableBitmap64WithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableBitmap64ID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableBitmap64WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableBitmap64WithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableBitmap64WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableBitmap64ID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt8uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt8uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt8uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt8uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt8uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt8uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt16uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt16uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt16uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt16uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt16uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt16uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt24uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt24uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt24uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt24uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt24uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt24uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt32uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt32uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt32uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt32uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt32uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt32uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt40uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt40uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt40uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt40uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt40uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt40uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt48uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt48uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt48uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt48uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt48uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt48uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt56uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt56uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt56uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt56uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt56uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt56uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt64uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt64uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt64uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt64uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt64uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt64uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt8sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt8sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt8sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt8sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt8sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt8sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt16sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt16sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt16sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt16sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt16sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt16sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt24sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt24sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt24sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt24sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt24sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt24sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt32sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt32sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt32sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt32sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt32sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt32sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt40sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt40sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt40sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt40sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt40sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt40sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt48sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt48sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt48sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt48sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt48sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt48sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt56sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt56sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt56sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt56sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt56sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt56sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableInt64sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt64sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableInt64sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableInt64sWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableInt64sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableInt64sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableEnum8WithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableEnum8ID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableEnum8WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableEnum8WithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableEnum8WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableEnum8ID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableEnum16WithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableEnum16ID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableEnum16WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableEnum16WithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableEnum16WithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableEnum16ID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableFloatSingleWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableFloatSingleID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableFloatSingleWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableFloatSingleWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableFloatSingleWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableFloatSingleID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableFloatDoubleWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableFloatDoubleID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableFloatDoubleWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableFloatDoubleWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableFloatDoubleWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableFloatDoubleID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableOctetStringWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableOctetStringID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableOctetStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableOctetStringWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableOctetStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableOctetStringID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableCharStringWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableCharStringID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableCharStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableCharStringWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableCharStringWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableCharStringID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableEnumAttrWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableEnumAttrID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableEnumAttrWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableEnumAttrWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableEnumAttrWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableEnumAttrID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableStructWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableStructID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableStructWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableStructWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeNullableStructWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableStructID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableRangeRestrictedInt8uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableRangeRestrictedInt8uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableRangeRestrictedInt8uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableRangeRestrictedInt8uWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeNullableRangeRestrictedInt8uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableRangeRestrictedInt8uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableRangeRestrictedInt8sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableRangeRestrictedInt8sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableRangeRestrictedInt8sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableRangeRestrictedInt8sWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeNullableRangeRestrictedInt8sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableRangeRestrictedInt8sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableRangeRestrictedInt16uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableRangeRestrictedInt16uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableRangeRestrictedInt16uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableRangeRestrictedInt16uWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeNullableRangeRestrictedInt16uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableRangeRestrictedInt16uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeNullableRangeRestrictedInt16sWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableRangeRestrictedInt16sID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeNullableRangeRestrictedInt16sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeNullableRangeRestrictedInt16sWithValue:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| params:nil]; |
| } |
| - (void)writeAttributeNullableRangeRestrictedInt16sWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeNullableRangeRestrictedInt16sID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeWriteOnlyInt8uWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeWriteOnlyInt8uID) |
| params:params]; |
| } |
| |
| - (void)writeAttributeWriteOnlyInt8uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| { |
| [self writeAttributeWriteOnlyInt8uWithValue:dataValueDictionary expectedValueInterval:expectedValueIntervalMs params:nil]; |
| } |
| - (void)writeAttributeWriteOnlyInt8uWithValue:(NSDictionary<NSString *, id> *)dataValueDictionary |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| params:(MTRWriteParams * _Nullable)params |
| { |
| NSNumber * timedWriteTimeout = params.timedWriteTimeout; |
| |
| [self.device writeAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeWriteOnlyInt8uID) |
| value:dataValueDictionary |
| expectedValueInterval:expectedValueIntervalMs |
| timedWriteTimeout:timedWriteTimeout]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeGeneratedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeGeneratedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAcceptedCommandListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeAcceptedCommandListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeAttributeListWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeAttributeListID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeFeatureMapWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeFeatureMapID) |
| params:params]; |
| } |
| |
| - (NSDictionary<NSString *, id> *)readAttributeClusterRevisionWithParams:(MTRReadParams * _Nullable)params |
| { |
| return [self.device readAttributeWithEndpointID:@(_endpoint) |
| clusterID:@(MTRClusterIDTypeUnitTestingID) |
| attributeID:@(MTRAttributeIDTypeClusterUnitTestingAttributeClusterRevisionID) |
| params:params]; |
| } |
| |
| @end |
| @implementation MTRClusterTestCluster |
| @end |
| |
| @implementation MTRClusterTestCluster (Deprecated) |
| |
| - (instancetype)initWithDevice:(MTRDevice *)device endpoint:(uint16_t)endpoint queue:(dispatch_queue_t)queue |
| { |
| return [self initWithDevice:device endpointID:@(endpoint) queue:queue]; |
| } |
| |
| - (void)testWithParams:(MTRTestClusterClusterTestParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self testWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)testWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self testWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)testNotHandledWithParams:(MTRTestClusterClusterTestNotHandledParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self testNotHandledWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)testNotHandledWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self testNotHandledWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)testSpecificWithParams:(MTRTestClusterClusterTestSpecificParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTestClusterClusterTestSpecificResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self testSpecificWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRUnitTestingClusterTestSpecificResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRTestClusterClusterTestSpecificResponseParams *>(data), error); |
| }]; |
| } |
| - (void)testSpecificWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTestClusterClusterTestSpecificResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self testSpecificWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)testUnknownCommandWithParams:(MTRTestClusterClusterTestUnknownCommandParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self testUnknownCommandWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)testUnknownCommandWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self testUnknownCommandWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)testAddArgumentsWithParams:(MTRTestClusterClusterTestAddArgumentsParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTestClusterClusterTestAddArgumentsResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self testAddArgumentsWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRUnitTestingClusterTestAddArgumentsResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRTestClusterClusterTestAddArgumentsResponseParams *>(data), error); |
| }]; |
| } |
| - (void)testSimpleArgumentRequestWithParams:(MTRTestClusterClusterTestSimpleArgumentRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTestClusterClusterTestSimpleArgumentResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self testSimpleArgumentRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRUnitTestingClusterTestSimpleArgumentResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTRTestClusterClusterTestSimpleArgumentResponseParams *>(data), error); |
| }]; |
| } |
| - (void)testStructArrayArgumentRequestWithParams:(MTRTestClusterClusterTestStructArrayArgumentRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRTestClusterClusterTestStructArrayArgumentResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self testStructArrayArgumentRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRUnitTestingClusterTestStructArrayArgumentResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTRTestClusterClusterTestStructArrayArgumentResponseParams *>(data), |
| error); |
| }]; |
| } |
| - (void)testStructArgumentRequestWithParams:(MTRTestClusterClusterTestStructArgumentRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTestClusterClusterBooleanResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self testStructArgumentRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRUnitTestingClusterBooleanResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRTestClusterClusterBooleanResponseParams *>(data), error); |
| }]; |
| } |
| - (void)testNestedStructArgumentRequestWithParams:(MTRTestClusterClusterTestNestedStructArgumentRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTestClusterClusterBooleanResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self testNestedStructArgumentRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRUnitTestingClusterBooleanResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTRTestClusterClusterBooleanResponseParams *>(data), error); |
| }]; |
| } |
| - (void)testListStructArgumentRequestWithParams:(MTRTestClusterClusterTestListStructArgumentRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTestClusterClusterBooleanResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self |
| testListStructArgumentRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRUnitTestingClusterBooleanResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRTestClusterClusterBooleanResponseParams *>(data), error); |
| }]; |
| } |
| - (void)testListInt8UArgumentRequestWithParams:(MTRTestClusterClusterTestListInt8UArgumentRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTestClusterClusterBooleanResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self testListInt8UArgumentRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRUnitTestingClusterBooleanResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRTestClusterClusterBooleanResponseParams *>(data), error); |
| }]; |
| } |
| - (void)testNestedStructListArgumentRequestWithParams:(MTRTestClusterClusterTestNestedStructListArgumentRequestParams *)params |
| expectedValues: |
| (NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTestClusterClusterBooleanResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self testNestedStructListArgumentRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRUnitTestingClusterBooleanResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTRTestClusterClusterBooleanResponseParams *>(data), error); |
| }]; |
| } |
| - (void)testListNestedStructListArgumentRequestWithParams: |
| (MTRTestClusterClusterTestListNestedStructListArgumentRequestParams *)params |
| expectedValues: |
| (NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTestClusterClusterBooleanResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self testListNestedStructListArgumentRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRUnitTestingClusterBooleanResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTRTestClusterClusterBooleanResponseParams *>(data), error); |
| }]; |
| } |
| - (void)testListInt8UReverseRequestWithParams:(MTRTestClusterClusterTestListInt8UReverseRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTestClusterClusterTestListInt8UReverseResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self testListInt8UReverseRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRUnitTestingClusterTestListInt8UReverseResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTRTestClusterClusterTestListInt8UReverseResponseParams *>(data), error); |
| }]; |
| } |
| - (void)testEnumsRequestWithParams:(MTRTestClusterClusterTestEnumsRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTestClusterClusterTestEnumsResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self testEnumsRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRUnitTestingClusterTestEnumsResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRTestClusterClusterTestEnumsResponseParams *>(data), error); |
| }]; |
| } |
| - (void)testNullableOptionalRequestWithParams:(MTRTestClusterClusterTestNullableOptionalRequestParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTestClusterClusterTestNullableOptionalResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self testNullableOptionalRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRUnitTestingClusterTestNullableOptionalResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTRTestClusterClusterTestNullableOptionalResponseParams *>(data), error); |
| }]; |
| } |
| - (void)testComplexNullableOptionalRequestWithParams:(MTRTestClusterClusterTestComplexNullableOptionalRequestParams *)params |
| expectedValues: |
| (NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)(MTRTestClusterClusterTestComplexNullableOptionalResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self testComplexNullableOptionalRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRUnitTestingClusterTestComplexNullableOptionalResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTRTestClusterClusterTestComplexNullableOptionalResponseParams *>( |
| data), |
| error); |
| }]; |
| } |
| - (void)simpleStructEchoRequestWithParams:(MTRTestClusterClusterSimpleStructEchoRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTestClusterClusterSimpleStructResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self simpleStructEchoRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRUnitTestingClusterSimpleStructResponseParams * _Nullable data, NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler(static_cast<MTRTestClusterClusterSimpleStructResponseParams *>(data), error); |
| }]; |
| } |
| - (void)timedInvokeRequestWithParams:(MTRTestClusterClusterTimedInvokeRequestParams * _Nullable)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self timedInvokeRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)timedInvokeRequestWithExpectedValues:(NSArray<NSDictionary<NSString *, id> *> *)expectedValues |
| expectedValueInterval:(NSNumber *)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self timedInvokeRequestWithParams:nil |
| expectedValues:expectedValues |
| expectedValueInterval:expectedValueIntervalMs |
| completionHandler:completionHandler]; |
| } |
| - (void)testSimpleOptionalArgumentRequestWithParams:(MTRTestClusterClusterTestSimpleOptionalArgumentRequestParams * _Nullable)params |
| expectedValues: |
| (NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(MTRStatusCompletion)completionHandler |
| { |
| [self testSimpleOptionalArgumentRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:completionHandler]; |
| } |
| - (void)testEmitTestEventRequestWithParams:(MTRTestClusterClusterTestEmitTestEventRequestParams *)params |
| expectedValues:(NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler:(void (^)(MTRTestClusterClusterTestEmitTestEventResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self testEmitTestEventRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^(MTRUnitTestingClusterTestEmitTestEventResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTRTestClusterClusterTestEmitTestEventResponseParams *>(data), error); |
| }]; |
| } |
| - (void)testEmitTestFabricScopedEventRequestWithParams:(MTRTestClusterClusterTestEmitTestFabricScopedEventRequestParams *)params |
| expectedValues: |
| (NSArray<NSDictionary<NSString *, id> *> * _Nullable)expectedDataValueDictionaries |
| expectedValueInterval:(NSNumber * _Nullable)expectedValueIntervalMs |
| completionHandler: |
| (void (^)( |
| MTRTestClusterClusterTestEmitTestFabricScopedEventResponseParams * _Nullable data, |
| NSError * _Nullable error))completionHandler |
| { |
| [self |
| testEmitTestFabricScopedEventRequestWithParams:params |
| expectedValues:expectedDataValueDictionaries |
| expectedValueInterval:expectedValueIntervalMs |
| completion:^( |
| MTRUnitTestingClusterTestEmitTestFabricScopedEventResponseParams * _Nullable data, |
| NSError * _Nullable error) { |
| // Cast is safe because subclass does not add any selectors. |
| completionHandler( |
| static_cast<MTRTestClusterClusterTestEmitTestFabricScopedEventResponseParams *>( |
| data), |
| error); |
| }]; |
| } |
| @end |
| |
| // NOLINTEND(clang-analyzer-cplusplus.NewDeleteLeaks) |