Skip to content

Commit cc231d0

Browse files
Merge branch 'master' into idm-4.2-troubleshoot
2 parents 42085e9 + 8786012 commit cc231d0

File tree

191 files changed

+3618
-8817
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

191 files changed

+3618
-8817
lines changed

.github/workflows/build.yaml

+6-1
Original file line numberDiff line numberDiff line change
@@ -204,11 +204,13 @@ jobs:
204204
run: |
205205
./scripts/run_in_build_env.sh "./scripts/run_codegen_targets.sh out/sanitizers"
206206
- name: Clang-tidy validation
207+
# NOTE: clang-tidy crashes on CodegenDataModel_Write due to Nullable/std::optional check.
208+
# See https://github.com/llvm/llvm-project/issues/97426
207209
run: |
208210
./scripts/run_in_build_env.sh \
209211
"./scripts/run-clang-tidy-on-compile-commands.py \
210212
--compile-database out/sanitizers/compile_commands.json \
211-
--file-exclude-regex '/(repo|zzz_generated|lwip/standalone)/|-ReadImpl|-InvokeSubscribeImpl' \
213+
--file-exclude-regex '/(repo|zzz_generated|lwip/standalone)/|-ReadImpl|-InvokeSubscribeImpl|CodegenDataModel_Write' \
212214
check \
213215
"
214216
- name: Clean output
@@ -422,10 +424,13 @@ jobs:
422424
run: |
423425
./scripts/run_in_build_env.sh "./scripts/run_codegen_targets.sh out/default"
424426
- name: Clang-tidy validation
427+
# NOTE: clang-tidy crashes on CodegenDataModel_Write due to Nullable/std::optional check.
428+
# See https://github.com/llvm/llvm-project/issues/97426
425429
run: |
426430
./scripts/run_in_build_env.sh \
427431
"./scripts/run-clang-tidy-on-compile-commands.py \
428432
--compile-database out/default/compile_commands.json \
433+
--file-exclude-regex '/(repo|zzz_generated|lwip/standalone)/|CodegenDataModel_Write' \
429434
check \
430435
"
431436
- name: Uploading diagnostic logs

.github/workflows/lint.yml

+11-1
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,17 @@ jobs:
288288
type-safe setters
289289
if: always()
290290
run: |
291-
git grep -I -n 'emberAfWriteAttribute' -- './*' ':(exclude).github/workflows/lint.yml' ':(exclude)zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp' ':(exclude)src/app/zap-templates/templates/app/attributes/Accessors-src.zapt' ':(exclude)src/app/util/attribute-table.cpp' ':(exclude)examples/common/pigweed/rpc_services/Attributes.h' ':(exclude)src/app/util/attribute-table.h' ':(exclude)src/app/util/ember-compatibility-functions.cpp' && exit 1 || exit 0
291+
git grep -I -n 'emberAfWriteAttribute' -- './*' \
292+
':(exclude).github/workflows/lint.yml' \
293+
':(exclude)examples/common/pigweed/rpc_services/Attributes.h' \
294+
':(exclude)src/app/codegen-data-model/CodegenDataModel_Write.cpp' \
295+
':(exclude)src/app/codegen-data-model/tests/EmberReadWriteOverride.cpp' \
296+
':(exclude)src/app/util/attribute-table.cpp' \
297+
':(exclude)src/app/util/attribute-table.h' \
298+
':(exclude)src/app/util/ember-compatibility-functions.cpp' \
299+
':(exclude)src/app/zap-templates/templates/app/attributes/Accessors-src.zapt' \
300+
':(exclude)zzz_generated/app-common/app-common/zap-generated/attributes/Accessors.cpp' \
301+
&& exit 1 || exit 0
292302
293303
# Run ruff python linter
294304
- name: Check for errors using ruff Python linter

.github/workflows/tests.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,7 @@ jobs:
549549
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --load-from-env /tmp/test_env.yaml --script src/python_testing/TC_TestEventTrigger.py'
550550
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --load-from-env /tmp/test_env.yaml --script src/python_testing/TestBatchInvoke.py'
551551
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --load-from-env /tmp/test_env.yaml --script src/python_testing/TestGroupTableReports.py'
552+
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --load-from-env /tmp/test_env.yaml --script src/python_testing/TC_OPCREDS_3_1.py'
552553
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --load-from-env /tmp/test_env.yaml --script src/python_testing/TC_OPCREDS_3_2.py'
553554
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --load-from-env /tmp/test_env.yaml --script src/python_testing/TC_OPSTATE_2_1.py'
554555
scripts/run_in_python_env.sh out/venv './scripts/tests/run_python_test.py --load-from-env /tmp/test_env.yaml --script src/python_testing/TC_OPSTATE_2_2.py'

.gitmodules

+5
Original file line numberDiff line numberDiff line change
@@ -321,3 +321,8 @@
321321
url = https://github.com/Infineon/optiga-trust-m.git
322322
branch = matter_support
323323
platforms = infineon
324+
[submodule "third_party/nxp/nxp_matter_support"]
325+
path = third_party/nxp/nxp_matter_support
326+
url = https://github.com/NXP/nxp_matter_support.git
327+
branch = master
328+
platforms = nxp

build_overrides/nxp_sdk.gni

+5-1
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,9 @@
1414

1515
declare_args() {
1616
# Root directory for NXP SDKs.
17-
nxp_sdk_build_root = "//third_party/nxp"
17+
nxp_sdk_matter_support_root = "//third_party/nxp/nxp_matter_support"
18+
}
19+
20+
declare_args() {
21+
nxp_sdk_build_root = "${nxp_sdk_matter_support_root}/gn_build"
1822
}

config/esp32/components/chip/Kconfig

+3-1
Original file line numberDiff line numberDiff line change
@@ -330,9 +330,11 @@ menu "CHIP Device Layer"
330330
config MAX_EVENT_QUEUE_SIZE
331331
int "Max Event Queue Size"
332332
range 0 65535
333-
default 25
333+
default 40
334334
help
335335
The maximum number of events that can be held in the CHIP Platform event queue.
336+
Should be set greater than CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM. For SoCs other than
337+
ESP32-C2, where the Wi-Fi buffer number is 8, recommended to use the default value.
336338

337339
config ENABLE_EXTENDED_DISCOVERY
338340
bool "Enable Extended discovery Support"

data_model/1.3/clusters/Scenes.xml

+58-58
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,61 @@
11
<?xml version="1.0"?>
2-
<!--
3-
Copyright (C) Connectivity Standards Alliance (2021). All rights reserved.
4-
The information within this document is the property of the Connectivity
5-
Standards Alliance and its use and disclosure are restricted, except as
6-
expressly set forth herein.
7-
8-
Connectivity Standards Alliance hereby grants you a fully-paid, non-exclusive,
9-
nontransferable, worldwide, limited and revocable license (without the right to
10-
sublicense), under Connectivity Standards Alliance's applicable copyright
11-
rights, to view, download, save, reproduce and use the document solely for your
12-
own internal purposes and in accordance with the terms of the license set forth
13-
herein. This license does not authorize you to, and you expressly warrant that
14-
you shall not: (a) permit others (outside your organization) to use this
15-
document; (b) post or publish this document; (c) modify, adapt, translate, or
16-
otherwise change this document in any manner or create any derivative work
17-
based on this document; (d) remove or modify any notice or label on this
18-
document, including this Copyright Notice, License and Disclaimer. The
19-
Connectivity Standards Alliance does not grant you any license hereunder other
20-
than as expressly stated herein.
21-
22-
Elements of this document may be subject to third party intellectual property
23-
rights, including without limitation, patent, copyright or trademark rights,
24-
and any such third party may or may not be a member of the Connectivity
25-
Standards Alliance. Connectivity Standards Alliance members grant other
26-
Connectivity Standards Alliance members certain intellectual property rights as
27-
set forth in the Connectivity Standards Alliance IPR Policy. Connectivity
28-
Standards Alliance members do not grant you any rights under this license. The
29-
Connectivity Standards Alliance is not responsible for, and shall not be held
30-
responsible in any manner for, identifying or failing to identify any or all
31-
such third party intellectual property rights. Please visit www.csa-iot.org for
32-
more information on how to become a member of the Connectivity Standards
33-
Alliance.
34-
35-
This document and the information contained herein are provided on an “AS IS”
36-
basis and the Connectivity Standards Alliance DISCLAIMS ALL WARRANTIES EXPRESS
37-
OR IMPLIED, INCLUDING BUT NOT LIMITED TO (A) ANY WARRANTY THAT THE USE OF THE
38-
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OF THIRD PARTIES (INCLUDING
39-
WITHOUT LIMITATION ANY INTELLECTUAL PROPERTY RIGHTS INCLUDING PATENT, COPYRIGHT
40-
OR TRADEMARK RIGHTS); OR (B) ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
41-
FOR A PARTICULAR PURPOSE, TITLE OR NONINFRINGEMENT. IN NO EVENT WILL THE
42-
CONNECTIVITY STANDARDS ALLIANCE BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF
43-
BUSINESS, LOSS OF USE OF DATA, INTERRUPTION OF BUSINESS, OR FOR ANY OTHER
44-
DIRECT, INDIRECT, SPECIAL OR EXEMPLARY, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
45-
DAMAGES OF ANY KIND, IN CONTRACT OR IN TORT, IN CONNECTION WITH THIS DOCUMENT
46-
OR THE INFORMATION CONTAINED HEREIN, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
47-
LOSS OR DAMAGE.
48-
49-
All company, brand and product names in this document may be trademarks that
50-
are the sole property of their respective owners.
51-
52-
This notice and disclaimer must be included on all copies of this document.
53-
54-
Connectivity Standards Alliance
55-
508 Second Street, Suite 206
56-
Davis, CA 95616, USA
57-
58-
:xrefstyle: basic
2+
<!--
3+
Copyright (C) Connectivity Standards Alliance (2021). All rights reserved.
4+
The information within this document is the property of the Connectivity
5+
Standards Alliance and its use and disclosure are restricted, except as
6+
expressly set forth herein.
7+
8+
Connectivity Standards Alliance hereby grants you a fully-paid, non-exclusive,
9+
nontransferable, worldwide, limited and revocable license (without the right to
10+
sublicense), under Connectivity Standards Alliance's applicable copyright
11+
rights, to view, download, save, reproduce and use the document solely for your
12+
own internal purposes and in accordance with the terms of the license set forth
13+
herein. This license does not authorize you to, and you expressly warrant that
14+
you shall not: (a) permit others (outside your organization) to use this
15+
document; (b) post or publish this document; (c) modify, adapt, translate, or
16+
otherwise change this document in any manner or create any derivative work
17+
based on this document; (d) remove or modify any notice or label on this
18+
document, including this Copyright Notice, License and Disclaimer. The
19+
Connectivity Standards Alliance does not grant you any license hereunder other
20+
than as expressly stated herein.
21+
22+
Elements of this document may be subject to third party intellectual property
23+
rights, including without limitation, patent, copyright or trademark rights,
24+
and any such third party may or may not be a member of the Connectivity
25+
Standards Alliance. Connectivity Standards Alliance members grant other
26+
Connectivity Standards Alliance members certain intellectual property rights as
27+
set forth in the Connectivity Standards Alliance IPR Policy. Connectivity
28+
Standards Alliance members do not grant you any rights under this license. The
29+
Connectivity Standards Alliance is not responsible for, and shall not be held
30+
responsible in any manner for, identifying or failing to identify any or all
31+
such third party intellectual property rights. Please visit www.csa-iot.org for
32+
more information on how to become a member of the Connectivity Standards
33+
Alliance.
34+
35+
This document and the information contained herein are provided on an “AS IS”
36+
basis and the Connectivity Standards Alliance DISCLAIMS ALL WARRANTIES EXPRESS
37+
OR IMPLIED, INCLUDING BUT NOT LIMITED TO (A) ANY WARRANTY THAT THE USE OF THE
38+
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OF THIRD PARTIES (INCLUDING
39+
WITHOUT LIMITATION ANY INTELLECTUAL PROPERTY RIGHTS INCLUDING PATENT, COPYRIGHT
40+
OR TRADEMARK RIGHTS); OR (B) ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
41+
FOR A PARTICULAR PURPOSE, TITLE OR NONINFRINGEMENT. IN NO EVENT WILL THE
42+
CONNECTIVITY STANDARDS ALLIANCE BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF
43+
BUSINESS, LOSS OF USE OF DATA, INTERRUPTION OF BUSINESS, OR FOR ANY OTHER
44+
DIRECT, INDIRECT, SPECIAL OR EXEMPLARY, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL
45+
DAMAGES OF ANY KIND, IN CONTRACT OR IN TORT, IN CONNECTION WITH THIS DOCUMENT
46+
OR THE INFORMATION CONTAINED HEREIN, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
47+
LOSS OR DAMAGE.
48+
49+
All company, brand and product names in this document may be trademarks that
50+
are the sole property of their respective owners.
51+
52+
This notice and disclaimer must be included on all copies of this document.
53+
54+
Connectivity Standards Alliance
55+
508 Second Street, Suite 206
56+
Davis, CA 95616, USA
57+
58+
:xrefstyle: basic
5959
-->
6060
<cluster xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="types types.xsd cluster cluster.xsd" id="0x0062" name="Scenes Management Cluster" revision="1">
6161
<revisionHistory>
@@ -398,4 +398,4 @@ Davis, CA 95616, USA
398398
</field>
399399
</command>
400400
</commands>
401-
</cluster>
401+
</cluster>

docs/guides/openiotsdk_unit_tests.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,14 @@ The list of currently supported Matter's component tests:
2020

2121
```
2222
accesstest
23+
AppDataModelTests
2324
AppTests
2425
ASN1Tests
2526
BDXTests
2627
ChipCryptoTests
28+
ControllerDataModelTests
2729
CoreTests
2830
CredentialsTest
29-
DataModelTests
3031
ICDServerTests
3132
InetLayerTests
3233
MdnsTests

examples/all-clusters-app/all-clusters-common/all-clusters-app.matter

+11-4
Original file line numberDiff line numberDiff line change
@@ -3513,14 +3513,21 @@ provisional cluster ScenesManagement = 98 {
35133513
kSceneNames = 0x1;
35143514
}
35153515

3516-
struct AttributeValuePair {
3516+
struct AttributeValuePairStruct {
35173517
attrib_id attributeID = 0;
3518-
int32u attributeValue = 1;
3518+
optional int8u valueUnsigned8 = 1;
3519+
optional int8s valueSigned8 = 2;
3520+
optional int16u valueUnsigned16 = 3;
3521+
optional int16s valueSigned16 = 4;
3522+
optional int32u valueUnsigned32 = 5;
3523+
optional int32s valueSigned32 = 6;
3524+
optional int64u valueUnsigned64 = 7;
3525+
optional int64s valueSigned64 = 8;
35193526
}
35203527

35213528
struct ExtensionFieldSet {
35223529
cluster_id clusterID = 0;
3523-
AttributeValuePair attributeValueList[] = 1;
3530+
AttributeValuePairStruct attributeValueList[] = 1;
35243531
}
35253532

35263533
fabric_scoped struct SceneInfoStruct {
@@ -3632,7 +3639,7 @@ provisional cluster ScenesManagement = 98 {
36323639
int8u sceneIdentifierFrom = 2;
36333640
}
36343641

3635-
/** Add a scene to the scene table. Extension field sets are supported, and are inputed as '{"ClusterID": VALUE, "AttributeValueList":[{"AttributeId": VALUE, "AttributeValue": VALUE}]}' */
3642+
/** Add a scene to the scene table. Extension field sets are supported, and are inputed as '{"ClusterID": VALUE, "AttributeValueList":[{"AttributeID": VALUE, "Value*": VALUE}]}' */
36363643
fabric command access(invoke: manage) AddScene(AddSceneRequest): AddSceneResponse = 0;
36373644
/** Retrieves the requested scene entry from its Scene table. */
36383645
fabric command ViewScene(ViewSceneRequest): ViewSceneResponse = 1;

examples/all-clusters-app/esp32/sdkconfig.defaults.esp32c2

+3
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,6 @@ CONFIG_BT_NIMBLE_ROLE_OBSERVER=n
1717
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=4
1818
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=8
1919
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=16
20+
21+
# Event Queue Size
22+
CONFIG_MAX_EVENT_QUEUE_SIZE=25

examples/all-clusters-app/nxp/rt/rw61x/BUILD.gn

+2-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ declare_args() {
4949
setup_discriminator = 3840
5050
}
5151

52-
example_platform_dir = "${chip_root}/examples/platform/nxp/${nxp_platform}"
52+
example_platform_dir =
53+
"${nxp_sdk_matter_support_root}/examples/platform/${nxp_platform}"
5354
common_example_dir = "${chip_root}/examples/platform/nxp/common"
5455

5556
if (tcp_download == true && wifi_connect == true) {

examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter

+11-4
Original file line numberDiff line numberDiff line change
@@ -2425,14 +2425,21 @@ provisional cluster ScenesManagement = 98 {
24252425
kSceneNames = 0x1;
24262426
}
24272427

2428-
struct AttributeValuePair {
2428+
struct AttributeValuePairStruct {
24292429
attrib_id attributeID = 0;
2430-
int32u attributeValue = 1;
2430+
optional int8u valueUnsigned8 = 1;
2431+
optional int8s valueSigned8 = 2;
2432+
optional int16u valueUnsigned16 = 3;
2433+
optional int16s valueSigned16 = 4;
2434+
optional int32u valueUnsigned32 = 5;
2435+
optional int32s valueSigned32 = 6;
2436+
optional int64u valueUnsigned64 = 7;
2437+
optional int64s valueSigned64 = 8;
24312438
}
24322439

24332440
struct ExtensionFieldSet {
24342441
cluster_id clusterID = 0;
2435-
AttributeValuePair attributeValueList[] = 1;
2442+
AttributeValuePairStruct attributeValueList[] = 1;
24362443
}
24372444

24382445
fabric_scoped struct SceneInfoStruct {
@@ -2544,7 +2551,7 @@ provisional cluster ScenesManagement = 98 {
25442551
int8u sceneIdentifierFrom = 2;
25452552
}
25462553

2547-
/** Add a scene to the scene table. Extension field sets are supported, and are inputed as '{"ClusterID": VALUE, "AttributeValueList":[{"AttributeId": VALUE, "AttributeValue": VALUE}]}' */
2554+
/** Add a scene to the scene table. Extension field sets are supported, and are inputed as '{"ClusterID": VALUE, "AttributeValueList":[{"AttributeID": VALUE, "Value*": VALUE}]}' */
25482555
fabric command access(invoke: manage) AddScene(AddSceneRequest): AddSceneResponse = 0;
25492556
/** Retrieves the requested scene entry from its Scene table. */
25502557
fabric command ViewScene(ViewSceneRequest): ViewSceneResponse = 1;

examples/all-clusters-minimal-app/esp32/sdkconfig.defaults.esp32c2

+3
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,6 @@ CONFIG_BT_NIMBLE_ROLE_OBSERVER=n
1717
CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM=4
1818
CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM=8
1919
CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM=16
20+
21+
# Event Queue Size
22+
CONFIG_MAX_EVENT_QUEUE_SIZE=25

examples/android/CHIPTest/BUILD.gn

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ shared_library("jni") {
3737
"${chip_root}/src/platform",
3838
"${chip_root}/src/platform/android",
3939
"${chip_root}/src/platform/android:java",
40-
"${chip_root}/src/platform/logging:android",
40+
"${chip_root}/src/platform/android:logging",
4141
"${chip_root}/src/platform/tests:tests",
4242
"${chip_root}/third_party/inipp",
4343
"${chip_root}/third_party/nlfaultinjection:nlfaultinjection",

examples/build_overrides/nxp_sdk.gni

+6-1
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,10 @@
1414

1515
declare_args() {
1616
# Root directory for NXP SDKs.
17-
nxp_sdk_build_root = "//third_party/connectedhomeip/third_party/nxp"
17+
nxp_sdk_matter_support_root =
18+
"//third_party/connectedhomeip/third_party/nxp/nxp_matter_support"
19+
}
20+
21+
declare_args() {
22+
nxp_sdk_build_root = "${nxp_sdk_matter_support_root}/gn_build"
1823
}

examples/chef/devices/rootnode_dimmablepluginunit_f8a9a0b9d4.matter

+11-4
Original file line numberDiff line numberDiff line change
@@ -1515,14 +1515,21 @@ provisional cluster ScenesManagement = 98 {
15151515
kSceneNames = 0x1;
15161516
}
15171517

1518-
struct AttributeValuePair {
1518+
struct AttributeValuePairStruct {
15191519
attrib_id attributeID = 0;
1520-
int32u attributeValue = 1;
1520+
optional int8u valueUnsigned8 = 1;
1521+
optional int8s valueSigned8 = 2;
1522+
optional int16u valueUnsigned16 = 3;
1523+
optional int16s valueSigned16 = 4;
1524+
optional int32u valueUnsigned32 = 5;
1525+
optional int32s valueSigned32 = 6;
1526+
optional int64u valueUnsigned64 = 7;
1527+
optional int64s valueSigned64 = 8;
15211528
}
15221529

15231530
struct ExtensionFieldSet {
15241531
cluster_id clusterID = 0;
1525-
AttributeValuePair attributeValueList[] = 1;
1532+
AttributeValuePairStruct attributeValueList[] = 1;
15261533
}
15271534

15281535
fabric_scoped struct SceneInfoStruct {
@@ -1634,7 +1641,7 @@ provisional cluster ScenesManagement = 98 {
16341641
int8u sceneIdentifierFrom = 2;
16351642
}
16361643

1637-
/** Add a scene to the scene table. Extension field sets are supported, and are inputed as '{"ClusterID": VALUE, "AttributeValueList":[{"AttributeId": VALUE, "AttributeValue": VALUE}]}' */
1644+
/** Add a scene to the scene table. Extension field sets are supported, and are inputed as '{"ClusterID": VALUE, "AttributeValueList":[{"AttributeID": VALUE, "Value*": VALUE}]}' */
16381645
fabric command access(invoke: manage) AddScene(AddSceneRequest): AddSceneResponse = 0;
16391646
/** Retrieves the requested scene entry from its Scene table. */
16401647
fabric command ViewScene(ViewSceneRequest): ViewSceneResponse = 1;

0 commit comments

Comments
 (0)