86769dea3883f7c73d3120b2d76e446a7bf3a3ac
[platform/upstream/connectedhomeip.git] / examples / temperature-measurement-app / esp32 / main / gen / CHIPClustersObjc.mm
1 /*
2  *
3  *    Copyright (c) 2021 Project CHIP Authors
4  *
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
8  *
9  *        http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  */
17
18 // THIS FILE IS GENERATED BY ZAP
19
20 #import <Foundation/Foundation.h>
21
22 #import "CHIPDevice.h"
23 #import "CHIPDevice_Internal.h"
24 #import "ChipError.h"
25 #import "gen/CHIPClientCallbacks.h"
26 #import "gen/CHIPClustersObjc.h"
27
28 #include <controller/CHIPClusters.h>
29 #include <lib/support/Span.h>
30
31 using namespace ::chip;
32
33 class CHIPDefaultSuccessCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
34 public:
35     CHIPDefaultSuccessCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
36         : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
37         , mHandler(handler)
38         , mQueue(queue)
39     {
40     }
41
42     ~CHIPDefaultSuccessCallbackBridge() {};
43
44     static void CallbackFn(void * context)
45     {
46         CHIPDefaultSuccessCallbackBridge * callback = reinterpret_cast<CHIPDefaultSuccessCallbackBridge *>(context);
47         if (callback && callback->mQueue) {
48             dispatch_async(callback->mQueue, ^{
49                 callback->mHandler(nil, nil);
50                 callback->Cancel();
51                 delete callback;
52             });
53         }
54     };
55
56 private:
57     ResponseHandler mHandler;
58     dispatch_queue_t mQueue;
59 };
60
61 class CHIPDefaultFailureCallbackBridge : public Callback::Callback<DefaultFailureCallback> {
62 public:
63     CHIPDefaultFailureCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
64         : Callback::Callback<DefaultFailureCallback>(CallbackFn, this)
65         , mHandler(handler)
66         , mQueue(queue)
67     {
68     }
69
70     ~CHIPDefaultFailureCallbackBridge() {};
71
72     static void CallbackFn(void * context, uint8_t status)
73     {
74         CHIPDefaultFailureCallbackBridge * callback = reinterpret_cast<CHIPDefaultFailureCallbackBridge *>(context);
75         if (callback && callback->mQueue) {
76             dispatch_async(callback->mQueue, ^{
77                 NSError * error = [NSError errorWithDomain:CHIPErrorDomain
78                                                       code:status
79                                                   userInfo:@ { NSLocalizedDescriptionKey : @"" }];
80                 callback->mHandler(error, nil);
81                 callback->Cancel();
82                 delete callback;
83             });
84         }
85     };
86
87 private:
88     ResponseHandler mHandler;
89     dispatch_queue_t mQueue;
90 };
91
92 class CHIPUnsupportedAttributeCallbackBridge : public Callback::Callback<DefaultSuccessCallback> {
93 public:
94     CHIPUnsupportedAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue)
95         : Callback::Callback<DefaultSuccessCallback>(CallbackFn, this)
96     {
97     }
98
99     ~CHIPUnsupportedAttributeCallbackBridge() {};
100
101     static void CallbackFn(void * context)
102     {
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);
110                 callback->Cancel();
111                 delete callback;
112             });
113         }
114     };
115
116 private:
117     ResponseHandler mHandler;
118     dispatch_queue_t mQueue;
119 };
120
121 class CHIPBooleanAttributeCallbackBridge : public Callback::Callback<BooleanAttributeCallback> {
122 public:
123     CHIPBooleanAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
124         : Callback::Callback<BooleanAttributeCallback>(CallbackFn, this)
125         , mHandler(handler)
126         , mQueue(queue)
127         , mKeepAlive(keepAlive)
128     {
129     }
130
131     ~CHIPBooleanAttributeCallbackBridge() {};
132
133     static void CallbackFn(void * context, bool value)
134     {
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) {
140                     callback->Cancel();
141                     delete callback;
142                 }
143             });
144         }
145     };
146
147 private:
148     ResponseHandler mHandler;
149     dispatch_queue_t mQueue;
150     bool mKeepAlive;
151 };
152
153 class CHIPInt8uAttributeCallbackBridge : public Callback::Callback<Int8uAttributeCallback> {
154 public:
155     CHIPInt8uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
156         : Callback::Callback<Int8uAttributeCallback>(CallbackFn, this)
157         , mHandler(handler)
158         , mQueue(queue)
159         , mKeepAlive(keepAlive)
160     {
161     }
162
163     ~CHIPInt8uAttributeCallbackBridge() {};
164
165     static void CallbackFn(void * context, uint8_t value)
166     {
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) {
172                     callback->Cancel();
173                     delete callback;
174                 }
175             });
176         }
177     };
178
179 private:
180     ResponseHandler mHandler;
181     dispatch_queue_t mQueue;
182     bool mKeepAlive;
183 };
184
185 class CHIPInt8sAttributeCallbackBridge : public Callback::Callback<Int8sAttributeCallback> {
186 public:
187     CHIPInt8sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
188         : Callback::Callback<Int8sAttributeCallback>(CallbackFn, this)
189         , mHandler(handler)
190         , mQueue(queue)
191         , mKeepAlive(keepAlive)
192     {
193     }
194
195     ~CHIPInt8sAttributeCallbackBridge() {};
196
197     static void CallbackFn(void * context, int8_t value)
198     {
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) {
204                     callback->Cancel();
205                     delete callback;
206                 }
207             });
208         }
209     };
210
211 private:
212     ResponseHandler mHandler;
213     dispatch_queue_t mQueue;
214     bool mKeepAlive;
215 };
216
217 class CHIPInt16uAttributeCallbackBridge : public Callback::Callback<Int16uAttributeCallback> {
218 public:
219     CHIPInt16uAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
220         : Callback::Callback<Int16uAttributeCallback>(CallbackFn, this)
221         , mHandler(handler)
222         , mQueue(queue)
223         , mKeepAlive(keepAlive)
224     {
225     }
226
227     ~CHIPInt16uAttributeCallbackBridge() {};
228
229     static void CallbackFn(void * context, uint16_t value)
230     {
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) {
236                     callback->Cancel();
237                     delete callback;
238                 }
239             });
240         }
241     };
242
243 private:
244     ResponseHandler mHandler;
245     dispatch_queue_t mQueue;
246     bool mKeepAlive;
247 };
248
249 class CHIPInt16sAttributeCallbackBridge : public Callback::Callback<Int16sAttributeCallback> {
250 public:
251     CHIPInt16sAttributeCallbackBridge(ResponseHandler handler, dispatch_queue_t queue, bool keepAlive = false)
252         : Callback::Callback<Int16sAttributeCallback>(CallbackFn, this)
253         , mHandler(handler)
254         , mQueue(queue)
255         , mKeepAlive(keepAlive)
256     {
257     }
258
259     ~CHIPInt16sAttributeCallbackBridge() {};
260
261     static void CallbackFn(void * context, int16_t value)
262     {
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) {
268                     callback->Cancel();
269                     delete callback;
270                 }
271             });
272         }
273     };
274
275 private:
276     ResponseHandler mHandler;
277     dispatch_queue_t mQueue;
278     bool mKeepAlive;
279 };
280
281 @interface CHIPCluster ()
282 @property (readonly, nonatomic) dispatch_queue_t callbackQueue;
283 - (Controller::ClusterBase *)getCluster;
284 @end
285
286 @implementation CHIPCluster
287 - (instancetype)initWithDevice:(CHIPDevice *)device endpoint:(EndpointId)endpoint queue:(dispatch_queue_t)queue
288 {
289     if (self = [super init]) {
290         Controller::ClusterBase * cppCluster = [self getCluster];
291         if (cppCluster == nullptr) {
292             return nil;
293         }
294
295         CHIP_ERROR err = cppCluster->Associate([device internalDevice], endpoint);
296         if (err != CHIP_NO_ERROR) {
297             return nil;
298         }
299
300         _callbackQueue = queue;
301     }
302     return self;
303 }
304
305 - (Controller::ClusterBase *)getCluster
306 {
307     return nullptr;
308 }
309 @end
310
311 @interface CHIPBasic ()
312 @property (readonly) Controller::BasicCluster cppCluster;
313 @end
314
315 @implementation CHIPBasic
316
317 - (Controller::ClusterBase *)getCluster
318 {
319     return &_cppCluster;
320 }
321
322 - (void)resetToFactoryDefaults:(ResponseHandler)completionHandler
323 {
324     CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, [self callbackQueue]);
325     if (!onSuccess) {
326         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
327         return;
328     }
329
330     CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
331     if (!onFailure) {
332         delete onSuccess;
333         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
334         return;
335     }
336
337     CHIP_ERROR err = self.cppCluster.ResetToFactoryDefaults(onSuccess->Cancel(), onFailure->Cancel());
338     if (err != CHIP_NO_ERROR) {
339         delete onSuccess;
340         delete onFailure;
341         completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
342     }
343 }
344
345 - (void)readAttributeZclVersion:(ResponseHandler)completionHandler
346 {
347     CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, [self callbackQueue]);
348     if (!onSuccess) {
349         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
350         return;
351     }
352
353     CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
354     if (!onFailure) {
355         delete onSuccess;
356         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
357         return;
358     }
359
360     CHIP_ERROR err = self.cppCluster.ReadAttributeZclVersion(onSuccess->Cancel(), onFailure->Cancel());
361     if (err != CHIP_NO_ERROR) {
362         delete onSuccess;
363         delete onFailure;
364         completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
365     }
366 }
367
368 - (void)readAttributePowerSource:(ResponseHandler)completionHandler
369 {
370     CHIPInt8uAttributeCallbackBridge * onSuccess = new CHIPInt8uAttributeCallbackBridge(completionHandler, [self callbackQueue]);
371     if (!onSuccess) {
372         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
373         return;
374     }
375
376     CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
377     if (!onFailure) {
378         delete onSuccess;
379         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
380         return;
381     }
382
383     CHIP_ERROR err = self.cppCluster.ReadAttributePowerSource(onSuccess->Cancel(), onFailure->Cancel());
384     if (err != CHIP_NO_ERROR) {
385         delete onSuccess;
386         delete onFailure;
387         completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
388     }
389 }
390
391 - (void)readAttributeClusterRevision:(ResponseHandler)completionHandler
392 {
393     CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, [self callbackQueue]);
394     if (!onSuccess) {
395         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
396         return;
397     }
398
399     CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
400     if (!onFailure) {
401         delete onSuccess;
402         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
403         return;
404     }
405
406     CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
407     if (err != CHIP_NO_ERROR) {
408         delete onSuccess;
409         delete onFailure;
410         completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
411     }
412 }
413
414 @end
415
416 @interface CHIPTemperatureMeasurement ()
417 @property (readonly) Controller::TemperatureMeasurementCluster cppCluster;
418 @end
419
420 @implementation CHIPTemperatureMeasurement
421
422 - (Controller::ClusterBase *)getCluster
423 {
424     return &_cppCluster;
425 }
426
427 - (void)readAttributeMeasuredValue:(ResponseHandler)completionHandler
428 {
429     CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, [self callbackQueue]);
430     if (!onSuccess) {
431         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
432         return;
433     }
434
435     CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
436     if (!onFailure) {
437         delete onSuccess;
438         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
439         return;
440     }
441
442     CHIP_ERROR err = self.cppCluster.ReadAttributeMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
443     if (err != CHIP_NO_ERROR) {
444         delete onSuccess;
445         delete onFailure;
446         completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
447     }
448 }
449
450 - (void)configureAttributeMeasuredValue:(uint16_t)minInterval
451                             maxInterval:(uint16_t)maxInterval
452                                  change:(int16_t)change
453                       completionHandler:(ResponseHandler)completionHandler
454 {
455     CHIPDefaultSuccessCallbackBridge * onSuccess = new CHIPDefaultSuccessCallbackBridge(completionHandler, [self callbackQueue]);
456     if (!onSuccess) {
457         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
458         return;
459     }
460
461     CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
462     if (!onFailure) {
463         delete onSuccess;
464         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
465         return;
466     }
467
468     CHIP_ERROR err = self.cppCluster.ConfigureAttributeMeasuredValue(
469         onSuccess->Cancel(), onFailure->Cancel(), minInterval, maxInterval, change);
470     if (err != CHIP_NO_ERROR) {
471         delete onSuccess;
472         delete onFailure;
473         completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
474     }
475 }
476
477 - (void)reportAttributeMeasuredValue:(ResponseHandler)reportHandler
478 {
479     CHIPInt16sAttributeCallbackBridge * onReport = new CHIPInt16sAttributeCallbackBridge(reportHandler, [self callbackQueue], true);
480     if (!onReport) {
481         reportHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
482         return;
483     }
484
485     CHIP_ERROR err = self.cppCluster.ReportAttributeMeasuredValue(onReport->Cancel());
486     if (err != CHIP_NO_ERROR) {
487         delete onReport;
488         reportHandler([CHIPError errorForCHIPErrorCode:err], nil);
489     }
490 }
491
492 - (void)readAttributeMinMeasuredValue:(ResponseHandler)completionHandler
493 {
494     CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, [self callbackQueue]);
495     if (!onSuccess) {
496         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
497         return;
498     }
499
500     CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
501     if (!onFailure) {
502         delete onSuccess;
503         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
504         return;
505     }
506
507     CHIP_ERROR err = self.cppCluster.ReadAttributeMinMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
508     if (err != CHIP_NO_ERROR) {
509         delete onSuccess;
510         delete onFailure;
511         completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
512     }
513 }
514
515 - (void)readAttributeMaxMeasuredValue:(ResponseHandler)completionHandler
516 {
517     CHIPInt16sAttributeCallbackBridge * onSuccess = new CHIPInt16sAttributeCallbackBridge(completionHandler, [self callbackQueue]);
518     if (!onSuccess) {
519         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
520         return;
521     }
522
523     CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
524     if (!onFailure) {
525         delete onSuccess;
526         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
527         return;
528     }
529
530     CHIP_ERROR err = self.cppCluster.ReadAttributeMaxMeasuredValue(onSuccess->Cancel(), onFailure->Cancel());
531     if (err != CHIP_NO_ERROR) {
532         delete onSuccess;
533         delete onFailure;
534         completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
535     }
536 }
537
538 - (void)readAttributeClusterRevision:(ResponseHandler)completionHandler
539 {
540     CHIPInt16uAttributeCallbackBridge * onSuccess = new CHIPInt16uAttributeCallbackBridge(completionHandler, [self callbackQueue]);
541     if (!onSuccess) {
542         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
543         return;
544     }
545
546     CHIPDefaultFailureCallbackBridge * onFailure = new CHIPDefaultFailureCallbackBridge(completionHandler, [self callbackQueue]);
547     if (!onFailure) {
548         delete onSuccess;
549         completionHandler([CHIPError errorForCHIPErrorCode:CHIP_ERROR_INCORRECT_STATE], nil);
550         return;
551     }
552
553     CHIP_ERROR err = self.cppCluster.ReadAttributeClusterRevision(onSuccess->Cancel(), onFailure->Cancel());
554     if (err != CHIP_NO_ERROR) {
555         delete onSuccess;
556         delete onFailure;
557         completionHandler([CHIPError errorForCHIPErrorCode:err], nil);
558     }
559 }
560
561 @end