forked from project-chip/connectedhomeip-doc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcode_generation.html
969 lines (806 loc) · 71.1 KB
/
code_generation.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Code generation — Matter documentation</title>
<script data-cfasync="false">
document.documentElement.dataset.mode = localStorage.getItem("mode") || "";
document.documentElement.dataset.theme = localStorage.getItem("theme") || "light";
</script>
<!-- Loaded before other Sphinx assets -->
<link href="_static/styles/theme.css?digest=12da95d707ffb74b382d" rel="stylesheet" />
<link href="_static/styles/bootstrap.css?digest=12da95d707ffb74b382d" rel="stylesheet" />
<link href="_static/styles/pydata-sphinx-theme.css?digest=12da95d707ffb74b382d" rel="stylesheet" />
<link href="_static/vendor/fontawesome/6.1.2/css/all.min.css?digest=12da95d707ffb74b382d" rel="stylesheet" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="_static/vendor/fontawesome/6.1.2/webfonts/fa-solid-900.woff2" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="_static/vendor/fontawesome/6.1.2/webfonts/fa-brands-400.woff2" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="_static/vendor/fontawesome/6.1.2/webfonts/fa-regular-400.woff2" />
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" href="_static/styles/sphinx-book-theme.css?digest=14f4ca6b54d191a8c7657f6c759bf11a5fb86285" type="text/css" />
<!-- Pre-loaded scripts that we'll load fully later -->
<link rel="preload" as="script" href="_static/scripts/bootstrap.js?digest=12da95d707ffb74b382d" />
<link rel="preload" as="script" href="_static/scripts/pydata-sphinx-theme.js?digest=12da95d707ffb74b382d" />
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/scripts/sphinx-book-theme.js?digest=5a5c038af52cf7bc1a1ec88eea08e6366ee68824"></script>
<script>DOCUMENTATION_OPTIONS.pagename = 'code_generation';</script>
<link rel="shortcut icon" href="_static/favicon.ico"/>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Matter SDK CHIP_ERROR enums values" href="ERROR_CODES.html" />
<link rel="prev" title="Reporting bugs" href="BUG_REPORT.html" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="docsearch:language" content="en"/>
</head>
<body data-bs-spy="scroll" data-bs-target=".bd-toc-nav" data-offset="180" data-bs-root-margin="0px 0px -60%" data-default-mode="">
<a class="skip-link" href="#main-content">Skip to main content</a>
<input type="checkbox"
class="sidebar-toggle"
name="__primary"
id="__primary"/>
<label class="overlay overlay-primary" for="__primary"></label>
<input type="checkbox"
class="sidebar-toggle"
name="__secondary"
id="__secondary"/>
<label class="overlay overlay-secondary" for="__secondary"></label>
<div class="search-button__wrapper">
<div class="search-button__overlay"></div>
<div class="search-button__search-container">
<form class="bd-search d-flex align-items-center"
action="search.html"
method="get">
<i class="fa-solid fa-magnifying-glass"></i>
<input type="search"
class="form-control"
name="q"
id="search-input"
placeholder="Search..."
aria-label="Search..."
autocomplete="off"
autocorrect="off"
autocapitalize="off"
spellcheck="false"/>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd>K</kbd></span>
</form></div>
</div>
<nav class="bd-header navbar navbar-expand-lg bd-navbar">
</nav>
<div class="bd-container">
<div class="bd-container__inner bd-page-width">
<div class="bd-sidebar-primary bd-sidebar">
<div class="sidebar-header-items sidebar-primary__section">
</div>
<div class="sidebar-primary-items__start sidebar-primary__section">
<div class="sidebar-primary-item">
<a class="navbar-brand logo" href="index.html">
<img src="_static/logo.png" class="logo__image only-light" alt="Logo image"/>
<script>document.write(`<img src="_static/logo.png" class="logo__image only-dark" alt="Logo image"/>`);</script>
</a></div>
<div class="sidebar-primary-item"><ul class="navbar-icon-links navbar-nav"
aria-label="Icon Links">
<li class="nav-item">
<a href="https://github.com/project-chip/connectedhomeip" title="GitHub" class="nav-link" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><span><i class="fa-brands fa-square-github"></i></span>
<label class="sr-only">GitHub</label></a>
</li>
</ul></div>
<div class="sidebar-primary-item"><nav class="bd-links" id="bd-docs-nav" aria-label="Main">
<div class="bd-toc-item navbar-nav active">
<p aria-level="2" class="caption" role="heading"><span class="caption-text">Contents</span></p>
<ul class="current nav bd-sidenav">
<li class="toctree-l1"><a class="reference internal" href="QUICK_START.html">Quick Start</a></li>
<li class="toctree-l1"><a class="reference internal" href="PROJECT_FLOW.html">Matter Project Flow</a></li>
<li class="toctree-l1"><a class="reference internal" href="VSCODE_DEVELOPMENT.html">Visual Studio Code Development</a></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="api/index.html">API</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-1"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="api/device_runner.html">CHIP on-device testing</a></li>
<li class="toctree-l2"><a class="reference internal" href="api/device_runner_dispatch.html">CHIP on-device test dispatch</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="discussion/index.html">Discussion</a><input class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-2"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="discussion/lwip_ipv6.html">LwIP changes for Matter</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="guides/index.html">Guides</a><input class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-3"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="guides/BUILDING.html">Building Matter</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/README.html">Guides</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/access-control-guide.html">Access Control Guide</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/android_building.html">Building Android</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/chip_tool_guide.html">Working with the CHIP Tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/darwin.html">Testing with Apple Devices</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/infineon_psoc6_software_update.html">Matter Software Update with Infineon PSoC6 example applications</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/ip_commissioning.html">IP commissioning</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/matter-repl.html">Matter Python REPL</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/mbedos_add_new_target.html">Mbed-OS add new hardware target</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/mbedos_commissioning.html">Matter Arm Mbed OS provisioning guide</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/mbedos_platform_overview.html">Mbed-OS platform overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/nrfconnect_android_commissioning.html">Commissioning nRF Connect Accessory using Android CHIPTool</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/nrfconnect_examples_cli.html">Using CLI in nRF Connect examples</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/nrfconnect_examples_configuration.html">Configuring nRF Connect examples</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/nrfconnect_examples_software_update.html">Performing Device Firmware Upgrade in the nRF Connect examples</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/nrfconnect_factory_data_configuration.html">Configuring factory data for the nRF Connect examples</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/nrfconnect_platform_overview.html">nRF Connect platform overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/nxp_imx8m_linux_examples.html">Building and Running CHIP Linux Examples for i.MX 8M Mini EVK</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/nxp_k32w_android_commissioning.html">Commissioning NXP K32W using Android CHIPTool</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/openiotsdk_commissioning.html">Commissioning Open IoT SDK devices</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/openiotsdk_platform_overview.html">Open IoT SDK platform port</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/openthread_border_router_pi.html">Setup OpenThread Border Router on Raspberry Pi</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/openthread_rcp_nrf_dongle.html">Configuring OpenThread Radio Co-processor on nRF52840 Dongle</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/python_chip_controller_advanced_usage.html">Using Python CHIP Controller advanced features</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/python_chip_controller_building.html">Deprecation notice</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/silabs_efr32_building.html">Building Silicon Labs EFR32 examples</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/silabs_efr32_software_update.html">Matter Software Update with EFR32 example applications</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/simulated_device_linux.html">Simulated Device How-To (Linux)</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/ti_platform_overview.html">Texas Instruments platform overview</a></li>
<li class="toctree-l2"><a class="reference internal" href="guides/troubleshooting_avahi.html">Troubleshooting Avahi</a></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="guides/esp32/README.html">Espressif (ESP32) Getting Started Guide</a><input class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-4"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="guides/esp32/build_app_and_commission.html">ESP32 Application Usage Guide</a></li>
<li class="toctree-l3"><a class="reference internal" href="guides/esp32/factory_data.html">Using ESP32 Factory Data Provider</a></li>
<li class="toctree-l3"><a class="reference internal" href="guides/esp32/flash_nvs_encryption.html">Flash and NVS encryption</a></li>
<li class="toctree-l3"><a class="reference internal" href="guides/esp32/ota.html">Matter OTA</a></li>
<li class="toctree-l3"><a class="reference internal" href="guides/esp32/rpc_console.html">RPC Console and Device Tracing</a></li>
<li class="toctree-l3"><a class="reference internal" href="guides/esp32/setup_idf_chip.html">Setup ESP-IDF and Matter Environment</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="style/index.html">Style Guides</a><input class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-5"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="style/STYLE_MAKEFILES.html">CHIP Makefile Style Guide</a></li>
<li class="toctree-l2"><a class="reference internal" href="style/style_guide.html">Matter Documentation Style Guide</a></li>
</ul>
</li>
<li class="toctree-l1 has-children"><a class="reference internal" href="examples/index.html">Examples</a><input class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" type="checkbox"/><label class="toctree-toggle" for="toctree-checkbox-6"><i class="fa-solid fa-chevron-down"></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-app/ameba/README.html">CHIP Ameba All Clusters Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-app/cc13x2x7_26x2x7/README.html">Matter CC1352 CC2652 All-clusters Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-app/esp32/README.html">CHIP ESP32 All Clusters Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-app/infineon/psoc6/README.html">CHIP PSoC6 All Clusters Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-app/linux/README.html">Matter Linux/Mac All Clusters Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-app/mbed/README.html">Matter Arm Mbed OS All Clusters Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-app/nrfconnect/README.html">Matter nRF Connect All Clusters Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-app/nxp/mw320/README.html">Matter MW320 All Clusters Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-app/telink/Readme.html">Matter Telink All Clusters Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-minimal-app/ameba/README.html">CHIP Ameba All Clusters Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-minimal-app/cc13x2x7_26x2x7/README.html">Matter CC1352 CC2652 All-clusters Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-minimal-app/esp32/README.html">CHIP ESP32 All Clusters Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-minimal-app/infineon/psoc6/README.html">CHIP PSoC6 All Clusters Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-minimal-app/mbed/README.html">Matter Arm Mbed OS All Clusters Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-minimal-app/nrfconnect/README.html">Matter nRF Connect All Clusters Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/all-clusters-minimal-app/telink/Readme.html">Matter Telink All Clusters Minimal Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/bridge-app/esp32/README.html">CHIP ESP32 Bridge App Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/bridge-app/linux/README.html">CHIP Linux Bridge Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/contact-sensor-app/nxp/k32w/k32w0/README.html">CHIP K32W061 Contact Sensor Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/contact-sensor-app/telink/README.html">Matter Telink Contact Sensor Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/chef/README.html">MATTER CHEF APP</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/chef/README_DEVICE.html">Matter Shell - Device Layer module</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/chef/README_OTCLI.html">Matter Shell - OpenThread CLI pass-through</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/chef/README_SHELL.html">Matter Shell Reference</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/chef/nrfconnect/README.html">CHIP nRF Connect SDK Shell Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/chef/sample_app_util/README.html">Chef Build Conventions</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/chip-tool/README.html">Matter Client Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/darwin-framework-tool/README.html">Matter darwin-framework-tool</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/dynamic-bridge-app/linux/README.html">CHIP Linux Bridge Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/java-matter-controller/README.html">Matter Controller Java App Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/ameba/README.html">CHIP Ameba Lighting Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/beken/README.html">Matter BEKEN Lighting Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/bouffalolab/README.html"><code class="docutils literal notranslate"><span class="pre">Bouffalo</span> <span class="pre">Lab</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/esp32/README.html">Matter ESP32 Lighting Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/genio/README.html">Matter <code class="docutils literal notranslate"><span class="pre">Genio</span></code> Lighting Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/infineon/cyw30739/README.html">Matter CYW30739 Lighting Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/infineon/psoc6/README.html">CHIP PSoC6 Lighting Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/linux/README.html">CHIP Linux Lighting Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/mbed/README.html">Matter Arm Mbed OS Lighting Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/nrfconnect/README.html">Matter nRF Connect Lighting Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/nxp/k32w/k32w0/README.html">CHIP K32W061 Lighting Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/python/README.html">Python-based lighting example (bridge) device to DALI</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/qpg/README.html">Matter QPG6105 SDK</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/silabs/SiWx917/README.html">Matter SiWx917 Lighting Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/silabs/efr32/README.html">Matter EFR32 Lighting Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/telink/README.html">Matter Telink Lighting Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/tizen/README.html">CHIP Tizen Lighting Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lighting-app/qpg/APPLICATION.html">Matter QPG6105 Lighting Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/light-switch-app/ameba/README.html">CHIP Ameba Light Switch Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/light-switch-app/esp32/README.html">Matter ESP32 Light-switch Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/light-switch-app/genio/README.html">Matter <code class="docutils literal notranslate"><span class="pre">Genio</span></code> Light Switch Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/light-switch-app/nrfconnect/README.html">Matter nRF Connect Light Switch Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/light-switch-app/silabs/SiWx917/README.html">Matter SiWx917 Light Switch Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/light-switch-app/silabs/efr32/README.html">Matter EFR32 Light Switch Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/light-switch-app/telink/README.html">Matter Telink Light Switch Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/cc13x2x7_26x2x7/README.html">Matter CC1352 CC2652 Lock Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/cc32xx/README.html">Matter <code class="docutils literal notranslate"><span class="pre">CC32XXSF</span></code> Lock Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/esp32/README.html">Matter ESP32 Lock Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/genio/README.html">Matter <code class="docutils literal notranslate"><span class="pre">Genio</span></code> Lock Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/infineon/cyw30739/README.html">Matter CYW30739 Lock Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/infineon/psoc6/README.html">Matter PSoC6 Lock Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/linux/README.html">Lock Application for Linux</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/mbed/README.html">Matter Arm Mbed OS Lock Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/nrfconnect/README.html">Matter nRF Connect Lock Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/nxp/k32w/k32w0/README.html">CHIP K32W061 Lock Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/openiotsdk/README.html">Matter Open IoT SDK Lock-App Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/qpg/README.html">Matter QPG6105 SDK</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/silabs/SiWx917/README.html">Matter SiWx917 Lock Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/silabs/efr32/README.html">Matter EFR32 Lock Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/telink/README.html">Matter Telink Lock Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/lock-app/qpg/APPLICATION.html">Matter QPG6105 Lock Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/log-source-app/linux/README.html">log-source-app</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/minimal-mdns/README.html">Minimal mDNS example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/openiotsdk_examples.html">Matter Open IoT SDK Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/ota-provider-app/esp32/README.html">CHIP ESP32 OTA Provider Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/ota-provider-app/linux/README.html">ota-provider-app</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/ota-requestor-app/ameba/README.html">CHIP Ameba OTA Requestor Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/ota-requestor-app/esp32/README.html">CHIP ESP32 OTA Requestor Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/ota-requestor-app/genio/README.html">Matter <code class="docutils literal notranslate"><span class="pre">Genio</span></code> Lighting Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/ota-requestor-app/infineon/cyw30739/README.html">Matter CYW30739 OTA Requestor Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/ota-requestor-app/linux/README.html">ota-requestor-app (Linux)</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/ota-requestor-app/mbed/README.html">Matter Arm Mbed OS Lock Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/ota-requestor-app/telink/Readme.html">Build and flash</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/persistent-storage/cc13x2x7_26x2x7/README.html">Matter CC1352 CC2652 Persistent Storage Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/persistent-storage/esp32/README.html">CHIP ESP32 Persistent Storage Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/persistent-storage/infineon/psoc6/README.html">CHIP PSoC6 Persistent Storage Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/persistent-storage/linux/README.html">CHIP Linux Persistent Storage Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/persistent-storage/qpg/README.html">Matter QPG6105 SDK</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/persistent-storage/qpg/APPLICATION.html">CHIP QPG6105 Persistent Storage Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/pigweed-app/ameba/README.html">CHIP Ameba Pigweed Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/pigweed-app/esp32/README.html">CHIP ESP32 Pigweed Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/pigweed-app/mbed/README.html">Matter Arm Mbed OS Pigweed Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/pigweed-app/nrfconnect/README.html">Matter nRF Connect Pigweed Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/pump-app/cc13x2x7_26x2x7/README.html">Matter CC1352 CC2652 Pump Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/pump-app/nrfconnect/README.html">Matter nRF Connect Pump Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/pump-app/telink/README.html">Matter Telink Pump Controller Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/pump-app/cc13x2x7_26x2x7/doc/programming-ccs.html">Programming and Debugging with CCS</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/pump-app/cc13x2x7_26x2x7/doc/programming-uniflash.html">Programming with UniFlash</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/pump-controller-app/cc13x2x7_26x2x7/README.html">Matter CC1352 CC2652 Pump Controller Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/pump-controller-app/nrfconnect/README.html">Matter nRF Connect Pump Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/pump-controller-app/telink/README.html">Matter Telink Pump Controller Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/pump-controller-app/cc13x2x7_26x2x7/doc/programming-ccs.html">Programming and Debugging with CCS</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/pump-controller-app/cc13x2x7_26x2x7/doc/programming-uniflash.html">Programming with UniFlash</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/shell/README.html">Matter Shell Reference</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/shell/README_DEVICE.html">Matter Shell - Device Layer module</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/shell/README_OTCLI.html">Matter Shell - OpenThread CLI pass-through</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/shell/README_SERVER.html">Matter Shell - App Server module</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/shell/cc13x2x7_26x2x7/README.html">Matter CC1352 CC2652 Shell Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/shell/mbed/README.html">Matter Arm Mbed OS Shell Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/shell/nrfconnect/README.html">Matter nRF Connect SDK Shell Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/shell/nxp/k32w/k32w0/README.html">CHIP NXP K32W Shell Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/shell/openiotsdk/README.html">Matter Open IoT SDK Shell Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/temperature-measurement-app/esp32/README.html">Matter ESP32 Temperature Sensor Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/temperature-measurement-app/telink/README.html">Matter Telink Temperature Measurement Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/thermostat/genio/README.html">Matter <code class="docutils literal notranslate"><span class="pre">Genio</span></code> Thermostat Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/thermostat/silabs/efr32/README.html">Matter EFR32 Thermostat Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/thermostat/telink/Readme.html">Matter Telink Thermostat Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/tv-app/linux/README.html">CHIP TV Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/tv-casting-app/android/README.html">Matter TV Casting Android App Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/tv-casting-app/darwin/TvCasting/README.html">Matter TV Casting iOS App Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/tv-casting-app/linux/README.html">CHIP TV Casting App Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/window-app/nrfconnect/README.html">Matter nRF Connect Window Covering Example Application</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/window-app/silabs/SiWx917/README.html">Matter SiWx917 Window Covering Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/window-app/silabs/efr32/README.html">Matter EFR32 Window Covering Example</a></li>
<li class="toctree-l2"><a class="reference internal" href="examples/window-app/telink/README.html">Matter Telink Window Example Application</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="BUG_REPORT.html">Reporting bugs</a></li>
<li class="toctree-l1 current active"><a class="current reference internal" href="#">Code generation</a></li>
<li class="toctree-l1"><a class="reference internal" href="ERROR_CODES.html">Matter SDK <code class="docutils literal notranslate"><span class="pre">CHIP_ERROR</span></code> enums values</a></li>
</ul>
</div>
</nav></div>
</div>
<div class="sidebar-primary-items__end sidebar-primary__section">
</div>
<div id="rtd-footer-container"></div>
</div>
<main id="main-content" class="bd-main">
<div class="sbt-scroll-pixel-helper"></div>
<div class="bd-content">
<div class="bd-article-container">
<div class="bd-header-article">
<div class="header-article-items header-article__inner">
<div class="header-article-items__start">
<div class="header-article-item"><label class="sidebar-toggle primary-toggle btn btn-sm" for="__primary" title="Toggle primary sidebar" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="fa-solid fa-bars"></span>
</label></div>
</div>
<div class="header-article-items__end">
<div class="header-article-item">
<div class="article-header-buttons">
<a href="https://github.com/project-chip/connectedhomeip/edit/master/docs/code_generation.md" target="_blank"
class="btn btn-sm btn-source-edit-button"
title="Suggest edit"
data-bs-placement="bottom" data-bs-toggle="tooltip"
>
<span class="btn__icon-container">
<i class="fas fa-pencil-alt"></i>
</span>
</a>
<div class="dropdown dropdown-download-buttons">
<button class="btn dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false" aria-label="Download this page">
<i class="fas fa-download"></i>
</button>
<ul class="dropdown-menu">
<li><a href="_sources/code_generation.md" target="_blank"
class="btn btn-sm btn-download-source-button dropdown-item"
title="Download source file"
data-bs-placement="left" data-bs-toggle="tooltip"
>
<span class="btn__icon-container">
<i class="fas fa-file"></i>
</span>
<span class="btn__text-container">.md</span>
</a>
</li>
<li>
<button onclick="window.print()"
class="btn btn-sm btn-download-pdf-button dropdown-item"
title="Print to PDF"
data-bs-placement="left" data-bs-toggle="tooltip"
>
<span class="btn__icon-container">
<i class="fas fa-file-pdf"></i>
</span>
<span class="btn__text-container">.pdf</span>
</button>
</li>
</ul>
</div>
<button onclick="toggleFullScreen()"
class="btn btn-sm btn-fullscreen-button"
title="Fullscreen mode"
data-bs-placement="bottom" data-bs-toggle="tooltip"
>
<span class="btn__icon-container">
<i class="fas fa-expand"></i>
</span>
</button>
<script>
document.write(`
<button class="theme-switch-button btn btn-sm btn-outline-primary navbar-btn rounded-circle" title="light/dark" aria-label="light/dark" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="theme-switch" data-mode="light"><i class="fa-solid fa-sun"></i></span>
<span class="theme-switch" data-mode="dark"><i class="fa-solid fa-moon"></i></span>
<span class="theme-switch" data-mode="auto"><i class="fa-solid fa-circle-half-stroke"></i></span>
</button>
`);
</script>
<script>
document.write(`
<button class="btn btn-sm navbar-btn search-button search-button__button" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass"></i>
</button>
`);
</script>
<label class="sidebar-toggle secondary-toggle btn btn-sm" for="__secondary"title="Toggle secondary sidebar" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="fa-solid fa-list"></span>
</label>
</div></div>
</div>
</div>
</div>
<div id="jb-print-docs-body" class="onlyprint">
<h1>Code generation</h1>
<!-- Table of contents -->
<div id="print-main-content">
<div id="jb-print-toc">
<div>
<h2> Contents </h2>
</div>
<nav aria-label="Page">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#code-generation-inputs-zap-files">Code generation inputs (<code class="docutils literal notranslate"><span class="pre">*.zap</span></code> files)</a><ul class="nav section-nav flex-column">
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#installing-zap-and-environment-variables">Installing zap and environment variables</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#using-a-ui-to-edit-zap-files">Using a UI to edit <code class="docutils literal notranslate"><span class="pre">.zap</span></code> files</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#human-readable-code-generation-inputs-matter">Human-readable code generation inputs (<code class="docutils literal notranslate"><span class="pre">*.matter</span></code>)</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#matter-parsing-and-codegen"><code class="docutils literal notranslate"><span class="pre">*.matter</span></code> parsing and codegen</a></li>
</ul>
</li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#code-generation-outputs-and-templates">Code generation outputs and templates</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#running-codegen">Running codegen</a><ul class="nav section-nav flex-column">
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#zap-file-generation">ZAP file generation</a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#flow-for-updating-an-application-zap-file">Flow for updating an application zap file:</a></li>
</ul>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#compile-time-code-generation-pre-generated-code">Compile-time code generation / pre-generated code</a></li>
</ul>
</li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#pre-generation">Pre-generation</a><ul class="nav section-nav flex-column">
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#using-pre-generated-code">Using pre-generated code</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#code-generation-unit-testing">Code generation unit testing</a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#codegen-py-tests"><code class="docutils literal notranslate"><span class="pre">codegen.py</span></code> tests</a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#generate-py-tests"><code class="docutils literal notranslate"><span class="pre">generate.py</span></code> tests</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div id="searchbox"></div>
<article class="bd-article" role="main">
<section id="code-generation">
<h1>Code generation<a class="headerlink" href="#code-generation" title="Permalink to this heading">#</a></h1>
<section id="code-generation-inputs-zap-files">
<h2>Code generation inputs (<code class="docutils literal notranslate"><span class="pre">*.zap</span></code> files)<a class="headerlink" href="#code-generation-inputs-zap-files" title="Permalink to this heading">#</a></h2>
<p>Matter code relies on code generation for cluster-specific data types and
callbacks. Generally this is split into:</p>
<ul class="simple">
<li><p>Data serialization for structures/lists/commands. This applies to both
client-side and server-side structures and objects</p></li>
<li><p>Callback setup using the Ember-based framework. This generally applies to
server-side processing and the code generation defines what processing needs
to be done when a specific command is received or an attribute is read and
what memory should be allocated for storing cluster attributes</p></li>
</ul>
<p>Code generation depends on the clusters that are needed by an application. Every
application configures the specific set of endpoints and clusters it needs based
on the device type it supports. The selection of the supported clusters and
attributes (as optional attributes may be omitted to save memory) is generally
stored in <code class="docutils literal notranslate"><span class="pre">*.zap</span></code> files.</p>
<p>The selection of enabled clusters and files is done using
<a class="reference external" href="https://github.com/project-chip/zap">ZAP</a>. You can download a recent release of
zap from its <a class="reference external" href="https://github.com/project-chip/zap/releases">releases page</a>. It
is recommended to download a release that is in sync with the currently in use
version by the SDK (see <code class="docutils literal notranslate"><span class="pre">scripts/setup/zap.json</span></code> and
<code class="docutils literal notranslate"><span class="pre">scripts/tools/zap/zap_execution.py</span></code> for the minimum supported version).</p>
<p>Beyond basic zap file selection, there are also <code class="docutils literal notranslate"><span class="pre">.json</span></code> zap settings that define
additional cluster info: source XML files, sdk-access methods and data types.
There are only two such files currently in use:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">src/app/zap-templates/zcl/zcl.json</span></code> is the <strong>default</strong> one</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">src/app/zap-templates/zcl/zcl-with-test-extensions.json</span></code> is used by
<code class="docutils literal notranslate"><span class="pre">all-clusters-app</span></code> to show how a cluster extension may be configured with
minimal changes from <code class="docutils literal notranslate"><span class="pre">zcl.json</span></code> (but it is different)</p></li>
</ul>
<section id="installing-zap-and-environment-variables">
<h3>Installing zap and environment variables<a class="headerlink" href="#installing-zap-and-environment-variables" title="Permalink to this heading">#</a></h3>
<p>ZAP is generally installed as a third-party tool via CIPD during the build
environment bootstrap (see <code class="docutils literal notranslate"><span class="pre">scripts/setup/zap.json</span></code>), which makes <code class="docutils literal notranslate"><span class="pre">zap-cli</span></code>
available in <code class="docutils literal notranslate"><span class="pre">$PATH</span></code> when running in a build environment.</p>
<p><strong>NOTE</strong>: zap packages are currently NOT available for <code class="docutils literal notranslate"><span class="pre">arm64</span></code> (like when
compiling on Raspberry PI.). In these cases one should check out zap from source
and set <code class="docutils literal notranslate"><span class="pre">$ZAP_DEVELOPMENT_PATH</span></code> as described below.</p>
<p>When matter scripts need to invoke <code class="docutils literal notranslate"><span class="pre">zap-cli</span></code> (for code generation) or <code class="docutils literal notranslate"><span class="pre">zap</span></code> (to
start the UI tool), they make use of the following environment variables to
figure out where the zap tool is located (in order of precedence):</p>
<ul class="simple">
<li><p>if <code class="docutils literal notranslate"><span class="pre">$ZAP_DEVELOPMENT_PATH</span></code> is set, code assumes you are running zap from
source. Use this if you develop zap. Zap has to be bootstrapped (generally
<code class="docutils literal notranslate"><span class="pre">npm</span> <span class="pre">ci</span></code> but check zap documentation for this. Some scripts have a
<code class="docutils literal notranslate"><span class="pre">--run-bootstrap</span></code> command line argument to do this for you)</p></li>
<li><p>if <code class="docutils literal notranslate"><span class="pre">$ZAP_INSTALL_PATH</span></code> is set, code assumes that <code class="docutils literal notranslate"><span class="pre">zap</span></code> or <code class="docutils literal notranslate"><span class="pre">zap-cli</span></code> is
available in the given path. This is generally an unpacked release.</p></li>
<li><p>otherwise, scripts will assume <code class="docutils literal notranslate"><span class="pre">zap</span></code>/<code class="docutils literal notranslate"><span class="pre">zap-cli</span></code> is in <code class="docutils literal notranslate"><span class="pre">$PATH</span></code> (this is the
case when running in a bootstrapped environment)</p></li>
</ul>
</section>
<section id="using-a-ui-to-edit-zap-files">
<h3>Using a UI to edit <code class="docutils literal notranslate"><span class="pre">.zap</span></code> files<a class="headerlink" href="#using-a-ui-to-edit-zap-files" title="Permalink to this heading">#</a></h3>
<p>Generally you need to invoke zap with appropriate zcl and generate arguments.
Most of code generation is app specific, so you generally want something of the
form
<code class="docutils literal notranslate"><span class="pre">--gen</span> <span class="pre">src/app/zap-templates/app-templates.json</span> <span class="pre">--zcl</span> <span class="pre">$ZCL_JSON_FILE</span> <span class="pre">$ZAP_FILE_TO_EDIT</span></code></p>
<p>Since this is tedious to type, the SDK provides a
<code class="docutils literal notranslate"><span class="pre">scripts/tools/zap/run_zaptool.sh</span></code> script to automate this:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span><span class="c1"># Ensure zap is in $PATH or set $ZAP_INSTALL_PATH or $ZAP_DEVELOPMENT_PATH</span>
./scripts/tools/zap/run_zaptool.sh<span class="w"> </span>examples/lighting-app/lighting-common/lighting-app.zap
</pre></div>
</div>
</section>
<section id="human-readable-code-generation-inputs-matter">
<h3>Human-readable code generation inputs (<code class="docutils literal notranslate"><span class="pre">*.matter</span></code>)<a class="headerlink" href="#human-readable-code-generation-inputs-matter" title="Permalink to this heading">#</a></h3>
<p><code class="docutils literal notranslate"><span class="pre">.zap</span></code> files are large json files that are generally not human readable. As a
result, the Matter SDK also keeps an equivalent <code class="docutils literal notranslate"><span class="pre">*.matter</span></code> file along side
<code class="docutils literal notranslate"><span class="pre">.zap</span></code> files that contain the same data as <code class="docutils literal notranslate"><span class="pre">.zap</span></code> files, targeted specifically
for matter:</p>
<ul class="simple">
<li><p>They are designed to be human readable, looking like a IDL (think protobuf
or android <code class="docutils literal notranslate"><span class="pre">aidl</span></code>, thrift idl etc.)</p></li>
<li><p>We strive to make them contain only Matter-specific data (<code class="docutils literal notranslate"><span class="pre">.zap</span></code> files
contain more generic data and is designed to be ZigBee backwards compatible)</p></li>
</ul>
<p>Currently <code class="docutils literal notranslate"><span class="pre">.matter</span></code> files are generated from <code class="docutils literal notranslate"><span class="pre">.zap</span></code> files during the application
specific codegen.</p>
</section>
<section id="matter-parsing-and-codegen">
<h3><code class="docutils literal notranslate"><span class="pre">*.matter</span></code> parsing and codegen<a class="headerlink" href="#matter-parsing-and-codegen" title="Permalink to this heading">#</a></h3>
<p><code class="docutils literal notranslate"><span class="pre">*.matter</span></code> files are both human and machine readable. Code that can process
these files is available at <code class="docutils literal notranslate"><span class="pre">scripts/py_matter_idl</span></code> and <code class="docutils literal notranslate"><span class="pre">scripts/codegen.py</span></code>.
You can read the
<a class="reference external" href="https://github.com/project-chip/connectedhomeip/blob/master/scripts/py_matter_idl/matter_idl/README.md">scripts/py_matter_idl/matter_idl/README.md</a>
for details of how things work.</p>
<p><code class="docutils literal notranslate"><span class="pre">scripts/codegen.py</span></code> can generate various outputs based on an input <code class="docutils literal notranslate"><span class="pre">*.matter</span></code>
file.</p>
<p>The split between <code class="docutils literal notranslate"><span class="pre">.zap</span></code> and <code class="docutils literal notranslate"><span class="pre">.matter</span></code> currently exists as an experiment of code
generation technologies. Currently <code class="docutils literal notranslate"><span class="pre">.matter</span></code>-based Python code generation:</p>
<ul class="simple">
<li><p>has fewer third party dependencies than <code class="docutils literal notranslate"><span class="pre">zap</span></code>, which installs a significant
number of <code class="docutils literal notranslate"><span class="pre">npm</span></code> packages.</p></li>
<li><p>runs significantly faster than zap</p></li>
<li><p>offers more flexible code generation (can generate multiple files per
cluster for example, without which some compiles would run out of RAM on
large compilations)</p></li>
<li><p>has a more flexible templating language</p></li>
<li><p>has human readable (and potentially editable) input</p></li>
<li><p>is more easily provable deterministic (<code class="docutils literal notranslate"><span class="pre">zap</span></code> uses an underlying sqlite
database and some legacy assumptions from zigbee have historically caused
non-determinism)</p></li>
<li><p>uses a synchronous processing model which is potentially easier to develop
for</p></li>
<li><p>has lower complexity, is unit tested and uses typing extensively</p></li>
</ul>
<p>Ideally, the project would be to have a single code generation method in the
long term that has all the benefits and none of the drawbacks. We are not there
yet, however we likely want:</p>
<ul class="simple">
<li><p>Flexible codegen (we will need to split output by clusters or other rules)</p></li>
<li><p>Human-readable inputs that enable code reviews and audits</p></li>
<li><p>Rules that a script can validate based on CSA data model (ensure mandatory
attribute settings are followed, ensure proper device type adherence, ensure
correct cluster and data type definitions)</p></li>
<li><p>Easy to maintain and develop for chosen languages/templates/codegen in
general</p></li>
</ul>
</section>
</section>
<section id="code-generation-outputs-and-templates">
<h2>Code generation outputs and templates<a class="headerlink" href="#code-generation-outputs-and-templates" title="Permalink to this heading">#</a></h2>
<p>Code that is generated:</p>
<ul>
<li><p><strong>Application-specific</strong>:</p>
<ul class="simple">
<li><p>ZAP generation is based on <code class="docutils literal notranslate"><span class="pre">.zap</span></code> files in <code class="docutils literal notranslate"><span class="pre">examples/</span></code> and generates
server-side processing data: what cluster callbacks to set up, what RAM
to reserve for attribute storage etc.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Codegen.py</span></code> will also generate a subset of application-specific files</p></li>
</ul>
</li>
<li><p><strong>Automated tests</strong>: embedded client-side tools (<code class="docutils literal notranslate"><span class="pre">chip-tool</span></code> and
<code class="docutils literal notranslate"><span class="pre">darwin-framework-tool</span></code>) generate test-definition data. Each use their own
<code class="docutils literal notranslate"><span class="pre">examples/${TOOL}/templates/tests/templates.json</span></code> to drive what gets
generated.</p></li>
<li><p><strong>Controller clusters</strong> target: the file
<code class="docutils literal notranslate"><span class="pre">src/controller/data_model/controller-clusters.zap</span></code> contains a set of
cluster selections to which all applications would potentially have access.
These are generally used as <code class="docutils literal notranslate"><span class="pre">all</span> <span class="pre">clusters</span> <span class="pre">selection</span></code> and the intent is to
allow any application to access any cluster as a <code class="docutils literal notranslate"><span class="pre">client</span> <span class="pre">side</span></code>.</p>
<p>Client/controllers will codegen based on this, like <strong>tools</strong>, <strong>tests</strong>,
<strong>java</strong>, <strong>python</strong> etc.</p>
</li>
</ul>
</section>
<section id="running-codegen">
<h2>Running codegen<a class="headerlink" href="#running-codegen" title="Permalink to this heading">#</a></h2>
<section id="zap-file-generation">
<h3>ZAP file generation<a class="headerlink" href="#zap-file-generation" title="Permalink to this heading">#</a></h3>
<p>Generating all possible code (all categories above) using zap tool can be done
via:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./scripts/tools/zap_regen_all.py
</pre></div>
</div>
<p>This can be slow (several minutes). The regen tool allows selection of only
tests so that yaml test development goes faster.</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>./scripts/tools/zap_regen_all.py<span class="w"> </span>--type<span class="w"> </span>tests
./scripts/tools/zap_regen_all.py<span class="w"> </span>--type<span class="w"> </span>tests<span class="w"> </span>--tests<span class="w"> </span>chip-tool
</pre></div>
</div>
<p>Additionally, individual code regeneration can be done using
<code class="docutils literal notranslate"><span class="pre">./scripts/tools/zap/generate.py</span></code>:</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>/scripts/tools/zap/generate.py<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>examples/bridge-app/bridge-common/bridge-app.zap
</pre></div>
</div>
<p>The above will just generate a <code class="docutils literal notranslate"><span class="pre"><app>.matter</span></code> file along side the <code class="docutils literal notranslate"><span class="pre">.zap</span></code> file,
as this is the only file that requires updates for applications. You can code
generate other things by passing in the <code class="docutils literal notranslate"><span class="pre">-t/--templates</span></code> argument to
generate.py. In those cases, you may also need to specify an output directory
via <code class="docutils literal notranslate"><span class="pre">-o/--output-dir</span></code>.</p>
<section id="flow-for-updating-an-application-zap-file">
<h4>Flow for updating an application zap file:<a class="headerlink" href="#flow-for-updating-an-application-zap-file" title="Permalink to this heading">#</a></h4>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span># use zap UI to edit the file (or edit zap file in any other way)
./scripts/tools/zap/run_zaptool.sh $PATH_TO_ZAP_FILE
# re-generate .matter file. Note that for .matter file generation, output
# directory is NOT used
./scripts/tools/zap/generate.py $PATH_TO_ZAP_FILE
</pre></div>
</div>
</section>
</section>
<section id="compile-time-code-generation-pre-generated-code">
<h3>Compile-time code generation / pre-generated code<a class="headerlink" href="#compile-time-code-generation-pre-generated-code" title="Permalink to this heading">#</a></h3>
<p>A subset of code generation (both <code class="docutils literal notranslate"><span class="pre">codegen.py</span></code> and <code class="docutils literal notranslate"><span class="pre">zap-cli</span></code>) is done at compile
time or can use pre-generated output (based on gn/cmake arguments)</p>
<p>Rules for how <code class="docutils literal notranslate"><span class="pre">generate.py</span></code>/<code class="docutils literal notranslate"><span class="pre">codegen.py</span></code> is invoked at compile time are defined
at:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">src/app/chip_data_model.cmake</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">src/app/chip_data_model.gni</span></code></p></li>
</ul>
<p>Additionally, <code class="docutils literal notranslate"><span class="pre">build/chip/esp32/esp32_codegen.cmake</span></code> adds processing support for
the 2-pass cmake builds used by the Espressif <code class="docutils literal notranslate"><span class="pre">idf.py</span></code> build system.</p>
</section>
</section>
<section id="pre-generation">
<h2>Pre-generation<a class="headerlink" href="#pre-generation" title="Permalink to this heading">#</a></h2>
<p>Code pre-generation can be used:</p>
<ul class="simple">
<li><p>when compile-time code generation is not desirable. This may be for
importing into build systems that do not have the pre-requisites to run code
generation at build time or to save the code generation time at the expense
of running code generation for every possible zap/generation type</p></li>
<li><p>To check changes in generated code across versions, beyond the comparisons
of golden image tests in <code class="docutils literal notranslate"><span class="pre">scripts/py_matter_idl/matter_idl/tests</span></code></p></li>
</ul>
<p>The script to trigger code pre-generation is <code class="docutils literal notranslate"><span class="pre">scripts/codepregen.py</span></code> and
requires the pre-generation output directory as an argument</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>scripts/codepregen.py<span class="w"> </span><span class="si">${</span><span class="nv">OUTPUT_DIRECTORY</span><span class="k">:-</span><span class="p">./zzz_pregenerated/</span><span class="si">}</span>
<span class="c1"># To generate a single output you can use `--input-glob`:</span>
scripts/codepregen.py<span class="w"> </span>--input-glob<span class="w"> </span><span class="s2">"*all-clusters*"</span><span class="w"> </span><span class="si">${</span><span class="nv">OUTPUT_DIRECTORY</span><span class="k">:-</span><span class="p">./zzz_pregenerated/</span><span class="si">}</span>
</pre></div>
</div>
<section id="using-pre-generated-code">
<h3>Using pre-generated code<a class="headerlink" href="#using-pre-generated-code" title="Permalink to this heading">#</a></h3>
<p>Instead of generating code at compile time, the chip build system accepts usage
of a pre-generated folder. It assumes the structure that <code class="docutils literal notranslate"><span class="pre">codepregen.py</span></code>
creates. To invoke use:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">build_examples.py</span></code> builds accept <code class="docutils literal notranslate"><span class="pre">--pregen-dir</span></code> as an argument, such as:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>./scripts/build/build_examples.py<span class="w"> </span>--target<span class="w"> </span><span class="nv">$TARGET</span><span class="w"> </span>--pregen-dir<span class="w"> </span><span class="nv">$PREGEN_DIR</span><span class="w"> </span>build
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">gn</span></code> builds allow setting <code class="docutils literal notranslate"><span class="pre">chip_code_pre_generated_directory</span></code> as an
argument, such as:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>gn<span class="w"> </span>gen<span class="w"> </span>--check<span class="w"> </span>--fail-on-unused-args<span class="w"> </span>--args<span class="o">=</span><span class="s1">'chip_code_pre_generated_directory="/some/pregen/dir"'</span>
</pre></div>
</div>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">cmake</span></code> builds allow setting <code class="docutils literal notranslate"><span class="pre">CHIP_CODEGEN_PREGEN_DIR</span></code> variable (which will
get propagated to the underlying <code class="docutils literal notranslate"><span class="pre">gn</span></code> builds as needed), such as:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>west<span class="w"> </span>build<span class="w"> </span>--cmake-only<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-d<span class="w"> </span>/workspace/out/nrf-nrf5340dk-light<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-b<span class="w"> </span>nrf5340dk_nrf5340_cpuapp<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>/workspace/examples/lighting-app/nrfconnect
<span class="w"> </span>--<span class="w"> </span>-DCHIP_CODEGEN_PREGEN_DIR<span class="o">=</span>/some/pregen/dir
idf.py<span class="w"> </span>-C<span class="w"> </span>examples/all-clusters-app/esp32<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-B<span class="w"> </span>/workspace/out/esp32-m5stack-all-clusters<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-DCHIP_CODEGEN_PREGEN_DIR<span class="o">=</span>/some/pregen/dir<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>reconfigure
cmake<span class="w"> </span>-S<span class="w"> </span>/workspace/examples/lighting-app/mbed<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-B<span class="w"> </span>/workspace/out/mbed-cy8cproto_062_4343w-light<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-GNinja<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-DMBED_OS_PATH<span class="o">=</span>/workspace/third_party/mbed-os/repo<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-DMBED_OS_PATH<span class="o">=</span>/workspace/third_party/mbed-os/repo<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-DMBED_OS_POSIX_SOCKET_PATH<span class="o">=</span>/workspace/third_party/mbed-os-posix-socket/repo<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>-DCHIP_CODEGEN_PREGEN_DIR<span class="o">=</span>/some/pregen/dir
</pre></div>
</div>
</li>
</ul>
</section>
<section id="code-generation-unit-testing">
<h3>Code generation unit testing<a class="headerlink" href="#code-generation-unit-testing" title="Permalink to this heading">#</a></h3>
<p>Code generation is assumed stable between builds and the build system aims to
detect changes in code gen using golden image tests.</p>
<section id="codegen-py-tests">
<h4><code class="docutils literal notranslate"><span class="pre">codegen.py</span></code> tests<a class="headerlink" href="#codegen-py-tests" title="Permalink to this heading">#</a></h4>
<p>These tests run against golden inputs/outputs from <code class="docutils literal notranslate"><span class="pre">scripts/idl/tests</span></code>.</p>
<p><code class="docutils literal notranslate"><span class="pre">available_tests.yaml</span></code> contains the full list of expected generators and outputs
and the test is run via <code class="docutils literal notranslate"><span class="pre">test_generators.py</span></code>. Use the environment variable
<code class="docutils literal notranslate"><span class="pre">IDL_GOLDEN_REGENERATE</span></code> to force golden image replacement during running of
<code class="docutils literal notranslate"><span class="pre">ninja</span> <span class="pre">check</span></code>:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="nv">IDL_GOLDEN_REGENERATE</span><span class="o">=</span><span class="m">1</span><span class="w"> </span>ninja<span class="w"> </span>check
</pre></div>
</div>
</section>
<section id="generate-py-tests">
<h4><code class="docutils literal notranslate"><span class="pre">generate.py</span></code> tests<a class="headerlink" href="#generate-py-tests" title="Permalink to this heading">#</a></h4>
<p>These tests run against golden inputs/outputs from <code class="docutils literal notranslate"><span class="pre">scripts/tools/zap/tests</span></code>.</p>
<p><code class="docutils literal notranslate"><span class="pre">available_tests.yaml</span></code> contains the full list of expected generators and outputs
and the test is run via <code class="docutils literal notranslate"><span class="pre">scripts/tools/zap/test_generate.py</span></code>. Use the
environment variable <code class="docutils literal notranslate"><span class="pre">ZAP_GENERATE_GOLDEN_REGENERATE</span></code> to force golden image
replacement during running of <code class="docutils literal notranslate"><span class="pre">ninja</span> <span class="pre">check</span></code>.</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="nv">ZAP_GENERATE_GOLDEN_REGENERATE</span><span class="o">=</span><span class="m">1</span><span class="w"> </span>ninja<span class="w"> </span>check
</pre></div>
</div>
<p>Alternatively, the golden image can also be re-generated by running the
stand-alone test in a bootstrapped environment:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>./scripts/tools/zap/test_generate.py<span class="w"> </span>--output<span class="w"> </span>out/gen<span class="w"> </span>--regenerate
</pre></div>
</div>
</section>
</section>
</section>
</section>
</article>
<footer class="bd-footer-article">
<!-- Previous / next buttons -->
<div class="prev-next-area">
<a class="left-prev"
href="BUG_REPORT.html"
title="previous page">
<i class="fa-solid fa-angle-left"></i>
<div class="prev-next-info">
<p class="prev-next-subtitle">previous</p>
<p class="prev-next-title">Reporting bugs</p>
</div>
</a>
<a class="right-next"
href="ERROR_CODES.html"
title="next page">
<div class="prev-next-info">
<p class="prev-next-subtitle">next</p>
<p class="prev-next-title">Matter SDK <code class="docutils literal notranslate"><span class="pre">CHIP_ERROR</span></code> enums values</p>
</div>
<i class="fa-solid fa-angle-right"></i>
</a>
</div>
</footer>
</div>
<div class="bd-sidebar-secondary bd-toc"><div class="sidebar-secondary-items sidebar-secondary__inner">
<div class="sidebar-secondary-item">
<div class="page-toc tocsection onthispage">
<i class="fa-solid fa-list"></i> Contents
</div>
<nav class="bd-toc-nav page-toc">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#code-generation-inputs-zap-files">Code generation inputs (<code class="docutils literal notranslate"><span class="pre">*.zap</span></code> files)</a><ul class="nav section-nav flex-column">
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#installing-zap-and-environment-variables">Installing zap and environment variables</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#using-a-ui-to-edit-zap-files">Using a UI to edit <code class="docutils literal notranslate"><span class="pre">.zap</span></code> files</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#human-readable-code-generation-inputs-matter">Human-readable code generation inputs (<code class="docutils literal notranslate"><span class="pre">*.matter</span></code>)</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#matter-parsing-and-codegen"><code class="docutils literal notranslate"><span class="pre">*.matter</span></code> parsing and codegen</a></li>
</ul>
</li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#code-generation-outputs-and-templates">Code generation outputs and templates</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#running-codegen">Running codegen</a><ul class="nav section-nav flex-column">
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#zap-file-generation">ZAP file generation</a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#flow-for-updating-an-application-zap-file">Flow for updating an application zap file:</a></li>
</ul>
</li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#compile-time-code-generation-pre-generated-code">Compile-time code generation / pre-generated code</a></li>
</ul>
</li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#pre-generation">Pre-generation</a><ul class="nav section-nav flex-column">
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#using-pre-generated-code">Using pre-generated code</a></li>
<li class="toc-h3 nav-item toc-entry"><a class="reference internal nav-link" href="#code-generation-unit-testing">Code generation unit testing</a><ul class="nav section-nav flex-column">
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#codegen-py-tests"><code class="docutils literal notranslate"><span class="pre">codegen.py</span></code> tests</a></li>
<li class="toc-h4 nav-item toc-entry"><a class="reference internal nav-link" href="#generate-py-tests"><code class="docutils literal notranslate"><span class="pre">generate.py</span></code> tests</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</nav></div>
</div></div>
</div>
<footer class="bd-footer-content">
<div class="bd-footer-content__inner">
<div class="bd-footer-content__inner container">
<div class="footer-item">
<p class="component-author">
By Matter Contributors
</p>
</div>
<div class="footer-item">
<p class="copyright">
© Copyright 2020-2023, Matter Contributors.
<br/>
</p>
</div>
<div class="footer-item">
</div>
<div class="footer-item">
</div>
</div></div>
</footer>
</main>
</div>
</div>
<!-- Scripts loaded after <body> so the DOM is not blocked -->
<script src="_static/scripts/bootstrap.js?digest=12da95d707ffb74b382d"></script>
<script src="_static/scripts/pydata-sphinx-theme.js?digest=12da95d707ffb74b382d"></script>
<footer class="bd-footer">
</footer>
</body>
</html>