3 * Copyright (c) 2021 Project CHIP Authors
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
18 // THIS FILE IS GENERATED BY ZAP
20 #import <Foundation/Foundation.h>
22 #import "CHIPDevice.h"
23 #import "CHIPDevice_Internal.h"
25 #import "gen/CHIPClientCallbacks.h"
26 #import "gen/CHIPClustersObjc.h"
28 #include <controller/CHIPClusters.h>
29 #include <lib/support/Span.h>
31 using namespace ::chip;
33 class CHIPDefaultSuccessCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
35 CHIPDefaultSuccessCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
36 : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
42 ~CHIPDefaultSuccessCallbackBridge() {};
44 static void CallbackFn(void * context)
46 CHIPDefaultSuccessCallbackBridge * callback = reinterpret_cast<CHIPDefaultSuccessCallbackBridge *>(context);
47 if (callback && callback->mQueue) {
48 dispatch_async(callback->mQueue, ^{
49 callback->mHandler(nil, nil);
57 ResponseHandler mHandler;
58 dispatch_queue_t mQueue;
61 class CHIPDefaultFailureCallbackBridge : public Callback::Callback<DefaultFailureCallback> {
63 CHIPDefaultFailureCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
64 : Callback::Callback<DefaultFailureCallback>(CallbackFn, this)
70 ~CHIPDefaultFailureCallbackBridge() {};
72 static void CallbackFn(void * context, uint8_t status)
74 CHIPDefaultFailureCallbackBridge * callback = reinterpret_cast<CHIPDefaultFailureCallbackBridge *>(context);
75 if (callback && callback->mQueue) {
76 dispatch_async(callback->mQueue, ^{
77 NSError * error = [NSError errorWithDomain:CHIPErrorDomain
79 userInfo:@ { NSLocalizedDescriptionKey : @"" }];
80 callback->mHandler(error, nil);
88 ResponseHandler mHandler;
89 dispatch_queue_t mQueue;
92 class CHIPUnsupportedAttributeCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
94 CHIPUnsupportedAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
95 : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
99 ~CHIPUnsupportedAttributeCallbackBridge() {};
101 static void CallbackFn(void * context)
103 CHIPUnsupportedAttributeCallbackBridge * callback = reinterpret_cast<CHIPUnsupportedAttributeCallbackBridge *>(context);
104 if (callback && callback->mQueue) {
105 dispatch_async(callback->mQueue, ^{
106 NSError * error = [NSError errorWithDomain:CHIPErrorDomain
107 code:CHIPErrorCodeUndefinedError
108 userInfo:@ { NSLocalizedDescriptionKey : @"Unsupported attribute type" }];
109 callback->mHandler(error, nil);
117 ResponseHandler mHandler;
118 dispatch_queue_t mQueue;
121 class CHIPBooleanAttributeCallbackBridge : public Callback::Callback<BooleanAttributeCallback> {
123 CHIPBooleanAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
124 : Callback::Callback<BooleanAttributeCallback>(CallbackFn, this)
127 , mKeepAlive(keepAlive)
131 ~CHIPBooleanAttributeCallbackBridge() {};
133 static void CallbackFn(void * context, bool value)
135 CHIPBooleanAttributeCallbackBridge * callback = reinterpret_cast<CHIPBooleanAttributeCallbackBridge *>(context);
136 if (callback && callback->mQueue) {
137 dispatch_async(callback->mQueue, ^{
138 callback->mHandler(nil, @ { @"value" : [NSNumber numberWithBool:value] });
139 if (!callback->mKeepAlive) {
148 ResponseHandler mHandler;
149 dispatch_queue_t mQueue;
153 class CHIPInt8uAttributeCallbackBridge : public Callback::Callback<Int8uAttributeCallback> {
155 CHIPInt8uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
156 : Callback::Callback<Int8uAttributeCallback>(CallbackFn, this)
159 , mKeepAlive(keepAlive)
163 ~CHIPInt8uAttributeCallbackBridge() {};
165 static void CallbackFn(void * context, uint8_t value)
167 CHIPInt8uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8uAttributeCallbackBridge *>(context);
168 if (callback && callback->mQueue) {
169 dispatch_async(callback->mQueue, ^{
170 callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedChar:value] });
171 if (!callback->mKeepAlive) {
180 ResponseHandler mHandler;
181 dispatch_queue_t mQueue;
185 class CHIPInt8sAttributeCallbackBridge : public Callback::Callback<Int8sAttributeCallback> {
187 CHIPInt8sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
188 : Callback::Callback<Int8sAttributeCallback>(CallbackFn, this)
191 , mKeepAlive(keepAlive)
195 ~CHIPInt8sAttributeCallbackBridge() {};
197 static void CallbackFn(void * context, int8_t value)
199 CHIPInt8sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt8sAttributeCallbackBridge *>(context);
200 if (callback && callback->mQueue) {
201 dispatch_async(callback->mQueue, ^{
202 callback->mHandler(nil, @ { @"value" : [NSNumber numberWithChar:value] });
203 if (!callback->mKeepAlive) {
212 ResponseHandler mHandler;
213 dispatch_queue_t mQueue;
217 class CHIPInt16uAttributeCallbackBridge : public Callback::Callback<Int16uAttributeCallback> {
219 CHIPInt16uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
220 : Callback::Callback<Int16uAttributeCallback>(CallbackFn, this)
223 , mKeepAlive(keepAlive)
227 ~CHIPInt16uAttributeCallbackBridge() {};
229 static void CallbackFn(void * context, uint16_t value)
231 CHIPInt16uAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16uAttributeCallbackBridge *>(context);
232 if (callback && callback->mQueue) {
233 dispatch_async(callback->mQueue, ^{
234 callback->mHandler(nil, @ { @"value" : [NSNumber numberWithUnsignedShort:value] });
235 if (!callback->mKeepAlive) {
244 ResponseHandler mHandler;
245 dispatch_queue_t mQueue;
249 class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
251 CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
252 : Callback::Callback<Int16sAttributeCallback>(CallbackFn, this)
255 , mKeepAlive(keepAlive)
259 ~CHIPInt16sAttributeCallbackBridge() {};
261 static void CallbackFn(void * context, int16_t value)
263 CHIPInt16sAttributeCallbackBridge * callback = reinterpret_cast<CHIPInt16sAttributeCallbackBridge *>(context);
264 if (callback && callback->mQueue) {
265 dispatch_async(callback->mQueue, ^{
266 callback->mHandler(nil, @ { @"value" : [NSNumber numberWithShort:value] });
267 if (!callback->mKeepAlive) {
276 ResponseHandler mHandler;
277 dispatch_queue_t mQueue;
281 @interface CHIPCluster ()
282 @property (readonly, nonatomic) dispatch_queue_t callbackQueue;
283 - (Controller::ClusterBase *)getCluster;
286 @implementation CHIPCluster
287 - (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
289 if (self = [super init]) {
290 Controller::ClusterBase * cppCluster = [self getCluster];
291 if (cppCluster == nullptr) {
295 CHIP_ERROR err = cppCluster->Associate([device internalDevice], endpoint);
296 if (err != CHIP_NO_ERROR) {
300 _callbackQueue = queue;
305 - (Controller::ClusterBase *)getCluster
311 @interface CHIPBasic ()
312 @property (readonly) Controller::BasicCluster cppCluster;
315 @implementation CHIPBasic
317 - (Controller::ClusterBase *)getCluster
322 - (void)resetToFactoryDefaults:(ResponseHandler)completionHandler
324 CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, [self callbackQueue]);
326 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
330 CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
333 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
337 CHIP_ERROR err = self.cppCluster.ResetToFactoryDefaults(onSuccess->Cancel(), onFailure->Cancel());
338 if (err != CHIP_NO_ERROR) {
341 completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
345 - (void)readAttributeZclVersion:(ResponseHandler)completionHandler
347 CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, [self callbackQueue]);
349 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
353 CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
356 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
360 CHIP_ERROR err = self.cppCluster.ReadAttributeZclVersion(onSuccess->Cancel(), onFailure->Cancel());
361 if (err != CHIP_NO_ERROR) {
364 completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
368 - (void)readAttributePowerSource:(ResponseHandler)completionHandler
370 CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, [self callbackQueue]);
372 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
376 CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
379 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
383 CHIP_ERROR err = self.cppCluster.ReadAttributePowerSource(onSuccess->Cancel(), onFailure->Cancel());
384 if (err != CHIP_NO_ERROR) {
387 completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
391 - (void)readAttributeClusterRevision:(ResponseHandler)completionHandler
393 CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, [self callbackQueue]);
395 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
399 CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
402 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
406 CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
407 if (err != CHIP_NO_ERROR) {
410 completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
416 @interface CHIPTemperatureMeasurement ()
417 @property (readonly) Controller::TemperatureMeasurementCluster cppCluster;
420 @implementation CHIPTemperatureMeasurement
422 - (Controller::ClusterBase *)getCluster
427 - (void)readAttributeMeasuredValue:(ResponseHandler)completionHandler
429 CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, [self callbackQueue]);
431 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
435 CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
438 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
442 CHIP_ERROR err = self.cppCluster.ReadAttributeMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
443 if (err != CHIP_NO_ERROR) {
446 completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
450 - (void)configureAttributeMeasuredValue:(uint16_t)minInterval
451 maxInterval:(uint16_t)maxInterval
452 change:(int16_t)change
453 completionHandler:(ResponseHandler)completionHandler
455 CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, [self callbackQueue]);
457 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
461 CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
464 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
468 CHIP_ERROR err = self.cppCluster.ConfigureAttributeMeasuredValue(
469 onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
470 if (err != CHIP_NO_ERROR) {
473 completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
477 - (void)reportAttributeMeasuredValue:(ResponseHandler)reportHandler
479 CHIPInt16sAttributeCallbackBridge * onReport = new CHIPInt16sAttributeCallbackBridge(reportHandler, [self callbackQueue], true);
481 reportHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
485 CHIP_ERROR err = self.cppCluster.ReportAttributeMeasuredValue(onReport->Cancel());
486 if (err != CHIP_NO_ERROR) {
488 reportHandler([CHIPError errorForCHIPErrorCode:err], nil);
492 - (void)readAttributeMinMeasuredValue:(ResponseHandler)completionHandler
494 CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, [self callbackQueue]);
496 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
500 CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
503 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
507 CHIP_ERROR err = self.cppCluster.ReadAttributeMinMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
508 if (err != CHIP_NO_ERROR) {
511 completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
515 - (void)readAttributeMaxMeasuredValue:(ResponseHandler)completionHandler
517 CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, [self callbackQueue]);
519 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
523 CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
526 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
530 CHIP_ERROR err = self.cppCluster.ReadAttributeMaxMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
531 if (err != CHIP_NO_ERROR) {
534 completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
538 - (void)readAttributeClusterRevision:(ResponseHandler)completionHandler
540 CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, [self callbackQueue]);
542 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
546 CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
549 completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
553 CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
554 if (err != CHIP_NO_ERROR) {
557 completionHandler([CHIPError errorForCHIPErrorCode:err], nil);