Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Decode TLV payload data and present it in a human readable format #27638

Merged
merged 167 commits into from
Jul 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
167 commits
Select commit Hold shift + click to select a range
b84751f
Start with a flat tree library for a human TLV format
andreilitvin Jun 8, 2023
d599e7e
Merge branch 'master' into human_format
andreilitvin Jun 16, 2023
105c441
Temp change for test
andreilitvin Jun 16, 2023
c0ec2ab
Merge branch 'master' into human_format
andreilitvin Jun 16, 2023
dea784d
Switch to a flat list and more flexible finding ... expect I want to …
andreilitvin Jun 16, 2023
498b01b
Clang-format
andreilitvin Jun 16, 2023
60d4aae
Add tests for searching by name in a flat tree
andreilitvin Jun 16, 2023
cf4f34e
Provide non-array find-entry
andreilitvin Jun 16, 2023
8715dcd
Merge branch 'master' into human_format
andreilitvin Jun 16, 2023
7108568
Have a good tree position that works for navigating and descend/ascend
andreilitvin Jun 16, 2023
ab676bb
Added more documentation
andreilitvin Jun 16, 2023
30f1215
Add more unit tests
andreilitvin Jun 16, 2023
4326861
Fix naming
andreilitvin Jun 16, 2023
1f72ad9
Merge branch 'master' into human_format
andy31415 Jun 21, 2023
681258e
Merge branch 'master' into human_format
andy31415 Jun 21, 2023
58ab1a9
Merge branch 'master' into human_format
andy31415 Jun 26, 2023
fe25db0
Merge branch 'master' into human_format
andy31415 Jun 26, 2023
5f92f17
Merge branch 'master' into human_format
andy31415 Jun 27, 2023
f7df7c7
Support current path for flat tree positions
andy31415 Jun 27, 2023
9a4174e
Restyle
andy31415 Jun 27, 2023
4e63bb3
Add IM message encoding, to have pretty-print of data once available
andy31415 Jun 27, 2023
4b01cfd
Added secure channel message formats
andy31415 Jun 27, 2023
13691a8
Add UDC defintions
andy31415 Jun 27, 2023
295ac04
Rename things
andy31415 Jun 27, 2023
47a9967
make the matter file parseable
andy31415 Jun 27, 2023
cfd9815
Merge branch 'master' into human_format
andy31415 Jun 28, 2023
7931549
Attempt to start a codegen for tlv meta mapping
andy31415 Jun 28, 2023
d8837a2
Restyle
andy31415 Jun 28, 2023
ff6fa93
Add missing files
andy31415 Jun 28, 2023
fb9c183
Restyle
andy31415 Jun 28, 2023
0b7e54f
Have some codegen working, start defining types and names
andy31415 Jun 28, 2023
9f9430b
Start implementing a bit of a table generation. not done, but tables …
andy31415 Jun 28, 2023
f0517d4
Support events for tables
andy31415 Jun 28, 2023
60595ef
Add support for commands (untested though)
andy31415 Jun 28, 2023
0856a75
More work, all except lists and constants are code-generated
andy31415 Jun 28, 2023
e6b201c
Restyle
andy31415 Jun 28, 2023
10814f1
List support and better tag support including anonymous support
andy31415 Jun 28, 2023
27cefb1
Merge branch 'master' into human_format
andy31415 Jun 28, 2023
2f34201
Merge branch 'master' into human_format
andy31415 Jun 29, 2023
d76c1a0
Make tags specific: many tags are NOT context tags currently
andy31415 Jun 29, 2023
7f64d24
Restyle
andy31415 Jun 29, 2023
9e7ed90
Add some test data for development tests
andy31415 Jun 29, 2023
9edb213
Start adding some test support ... to be removed later
andy31415 Jun 29, 2023
efdcb11
Code compiles
andy31415 Jun 29, 2023
489df89
Add a unit test that compiles and runs
andy31415 Jun 29, 2023
972096a
Starting some decoding support. Still very much broken
andy31415 Jun 29, 2023
2e93bbf
A bit more decoding, this time we handle lists. TLV interface is VERY…
andy31415 Jun 29, 2023
c10bb4c
Better decoding, we now show data
andy31415 Jun 29, 2023
4baf5eb
Add some item information, to prepare for enum and bitmap decoding
andy31415 Jun 29, 2023
7d19d10
Restyle
andy31415 Jun 29, 2023
815989b
Add error messages on usage of command line
andy31415 Jun 29, 2023
138956e
remove a non yes/no argument
andy31415 Jun 29, 2023
99efe83
Update error syntax for 2 more arguments
andy31415 Jun 29, 2023
7ebf658
update the help. using both true/false and yes/no is a mess
andy31415 Jun 29, 2023
b31fffd
Merge branch 'master' into human_format
andy31415 Jun 29, 2023
84f517f
Update logic for decoding
andy31415 Jun 29, 2023
12e7e98
Do not allow restyle
andy31415 Jun 29, 2023
bf7456a
Better StringBuilder formatting
andy31415 Jun 29, 2023
f79ffa3
Test adjustment
andy31415 Jun 29, 2023
74ccf0a
Naming update
andy31415 Jun 29, 2023
bdc70b0
Merge branch 'master' into human_format
andreilitvin Jun 30, 2023
4711da2
Restyle
andreilitvin Jun 30, 2023
587c455
Add Format option for buffer writers and string builders
andreilitvin Jun 30, 2023
bab79ac
Update comments
andreilitvin Jun 30, 2023
b357b8e
Updated to only have printf inside stringbuilder and NOT bufferwriter
andreilitvin Jun 30, 2023
6c597c7
Restyle
andreilitvin Jun 30, 2023
31ec3c0
Add missing file
andreilitvin Jun 30, 2023
f226ea6
remove cpp file comments
andreilitvin Jun 30, 2023
2077d6b
Fix cast to make clang happy
andreilitvin Jun 30, 2023
9a2465d
Merge branch 'better_messages_for_py' into human_format
andreilitvin Jun 30, 2023
a08928b
Merge branch 'format_in_string_builder' into human_format
andreilitvin Jun 30, 2023
a08f4af
Much better formatting and make the compile clang-friendly
andreilitvin Jun 30, 2023
693cf42
minor const correctness change. TLVReader has non-const getters
andreilitvin Jun 30, 2023
9be0898
Add special tags for payloads of things
andreilitvin Jun 30, 2023
7860376
Added logic for binary data and payloads, to process things
andreilitvin Jun 30, 2023
2d80412
Start adding clusters metadata, make everything const-correct
andreilitvin Jun 30, 2023
3072b4e
Minor update
andreilitvin Jun 30, 2023
4258a92
Start updating formats
andreilitvin Jun 30, 2023
3685791
Never pass null pointer in vsnprintf, since our size available is nev…
andreilitvin Jun 30, 2023
c362567
Merge branch 'format_in_string_builder' into human_format
andreilitvin Jun 30, 2023
70ef135
Restyle
andreilitvin Jun 30, 2023
e84e25f
Restyle
andreilitvin Jun 30, 2023
50043f3
Merge branch 'format_in_string_builder' into human_format
andreilitvin Jun 30, 2023
5ae59fc
Better decoding
andreilitvin Jun 30, 2023
e61354d
Clean up some printfs
andreilitvin Jun 30, 2023
968708f
Iterator decoding seems to work, including getting sub-data types
andreilitvin Jun 30, 2023
34eb7ab
Better organization of code ... protocols decoder is actually a class…
andreilitvin Jun 30, 2023
838e2f7
Allow passing in decode trees for protocol understanding
andreilitvin Jun 30, 2023
9a1fd84
Better arg parsing - was able to test for invalid data
andreilitvin Jun 30, 2023
e1c20dd
Restyle
andreilitvin Jun 30, 2023
0ba547b
Merge branch 'master' into human_format
andreilitvin Jul 4, 2023
2894854
Add back reset call to stringbuilder
andreilitvin Jul 4, 2023
90bd2b1
Restyle and make protocol decoding actually work
andreilitvin Jul 4, 2023
7185c52
Unformatted protocols/cluster meta
andreilitvin Jul 4, 2023
ae9b7fc
Add more trace data for testing, fix SEGFAULT in decoder
andreilitvin Jul 4, 2023
6751e89
Support non-struct list entries
andreilitvin Jul 4, 2023
2cbd658
Switch list decoding logic to be inside generated metadata
andreilitvin Jul 4, 2023
9440a1c
Restyle
andreilitvin Jul 4, 2023
5f5ff9e
Fix compilation and generation
andreilitvin Jul 4, 2023
3c5ad4c
Start having codegen support for protocols metadata
andreilitvin Jul 4, 2023
306d579
Move clusters meta to compile time codegen as well
andreilitvin Jul 4, 2023
b5d7798
Restyle
andreilitvin Jul 4, 2023
a2e98f2
Cleanup dependencies a bit
andreilitvin Jul 4, 2023
f707edc
Start making TestDecoding be actual unit tests
andreilitvin Jul 4, 2023
ad5c652
more unit tests, without protocol decoding
andreilitvin Jul 4, 2023
5d67de2
Slightly better formatting
andreilitvin Jul 4, 2023
07c82d9
More unit tests ... although invalid data looks odd
andreilitvin Jul 4, 2023
9f42d9b
Better formatting of unknown attributes
andreilitvin Jul 4, 2023
112ea83
Updated tests
andreilitvin Jul 4, 2023
d72901b
Restyle
andreilitvin Jul 4, 2023
b8defb4
Better messaging, test overflows
andreilitvin Jul 4, 2023
f532594
Removed unused file
andreilitvin Jul 4, 2023
0f39f2c
Undo submodule update
andreilitvin Jul 4, 2023
e59b2d0
Add some tests for invoke. Command list is NOT complete
andreilitvin Jul 4, 2023
eab5f3d
Restyle
andreilitvin Jul 4, 2023
4da021f
Yield commands that have no request structure
andreilitvin Jul 4, 2023
54cf2ac
Fix comment
andreilitvin Jul 4, 2023
7df7a08
Start adding some unit tests for cpp-tlvmeta codegen
andreilitvin Jul 4, 2023
a9e2b95
Add tests for real
andreilitvin Jul 4, 2023
aa6dec3
Allow both hex and json at the same time for output
andy31415 Jul 5, 2023
c2df855
Rename log_json to just json
andy31415 Jul 5, 2023
1518838
Add file output option for json tracing
andy31415 Jul 5, 2023
d8e12e9
make the output look like a json array when outputing to file
andy31415 Jul 5, 2023
5c00f59
Restyle
andy31415 Jul 5, 2023
10b11aa
Fix support of "json:log"
andy31415 Jul 5, 2023
399d15a
Fix support of "json:log"
andy31415 Jul 5, 2023
39a1af3
Merge branch 'make_json_tracing_generic' into human_format
andy31415 Jul 5, 2023
95db0f0
make things compile
andy31415 Jul 5, 2023
8ee64a4
Rename open/close to openfile/closefile to avoid override errors
andy31415 Jul 5, 2023
90ec08f
Merge branch 'make_json_tracing_generic' into human_format
andy31415 Jul 5, 2023
5966484
Restyle
andy31415 Jul 5, 2023
092a44b
Merge branch 'make_json_tracing_generic' into human_format
andy31415 Jul 5, 2023
116e572
StartsWith should be available now globally as it is always used
andy31415 Jul 5, 2023
7b686f1
StartsWith should be available now globally as it is always used
andy31415 Jul 5, 2023
7f911e2
Forward declare json to make arm cross compile pass
andy31415 Jul 5, 2023
febf3bd
Forward declare json to make arm cross compile pass
andy31415 Jul 5, 2023
5ef52a3
Merge branch 'make_json_tracing_generic' into human_format
andy31415 Jul 5, 2023
371adb6
Restyle
andy31415 Jul 5, 2023
a3e4e7d
Merge branch 'make_json_tracing_generic' into human_format
andy31415 Jul 5, 2023
4e4588d
Add some support for formatting enums and bitmaps
andy31415 Jul 5, 2023
69b57ba
Restyle
andy31415 Jul 5, 2023
3c0c0f6
Add json_tracing exceptions for includes checks
andy31415 Jul 5, 2023
ce09c71
Merge branch 'make_json_tracing_generic' into human_format
andy31415 Jul 5, 2023
0b2d088
Proper bitmap support with tests, status codes are bitmaps now
andy31415 Jul 5, 2023
8106fb9
Restyle
andy31415 Jul 5, 2023
4a29aba
Update test for overflow to have more unique values
andy31415 Jul 5, 2023
9f0e436
Restyle
andy31415 Jul 5, 2023
b90f5c0
Fix decoding of command inputs and names
andy31415 Jul 5, 2023
582b197
Add a fuzz test for payload decoder
andy31415 Jul 5, 2023
739374f
Handle invalid TLV
andy31415 Jul 5, 2023
f962210
Add more error handling. Fuzzing runs longer now
andy31415 Jul 5, 2023
aaabc59
Merge branch 'master' into make_json_tracing_generic
andy31415 Jul 5, 2023
50451a6
Merge branch 'make_json_tracing_generic' into human_format
andy31415 Jul 5, 2023
dc542ce
Restyle
andy31415 Jul 5, 2023
3170085
Make clang happy
andy31415 Jul 5, 2023
29a5a6d
Fix efr32 unit test compilation
andy31415 Jul 5, 2023
9e936bc
Fix python lint
andy31415 Jul 5, 2023
9c4e87a
Restyle
andy31415 Jul 5, 2023
93856d5
Fix typo and restyle
andy31415 Jul 5, 2023
73eabc6
Restyle
andy31415 Jul 5, 2023
930fd62
Add dependencies to flat-tree for generated code: they are needed
andreilitvin Jul 6, 2023
122f164
Merge branch 'master' into human_format
andreilitvin Jul 6, 2023
8b7d834
make tests use uppercase for unknown tags as this is the code update …
andreilitvin Jul 6, 2023
4a94492
Undo submodule update
andreilitvin Jul 6, 2023
73117ce
Make clang-tidy happy
andreilitvin Jul 6, 2023
df64905
Fix subscribe response message indexing to match spec
andreilitvin Jul 6, 2023
9f95ab8
Merge branch 'master' into human_format
andy31415 Jul 7, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ if (current_toolchain != "${dir_pw_toolchain}/default:default") {
"${chip_root}/src/credentials/tests:fuzz-chip-cert",
"${chip_root}/src/lib/core/tests:fuzz-tlv-reader",
"${chip_root}/src/lib/dnssd/minimal_mdns/tests:fuzz-minmdns-packet-parsing",
"${chip_root}/src/lib/format/tests:fuzz-payload-decoder",
]
}
}
Expand Down
15 changes: 14 additions & 1 deletion build/chip/chip_codegen.gni
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,19 @@ template("_chip_build_time_codegen") {
rebase_path(target_gen_dir, root_build_dir),
"--expected-outputs",
rebase_path(_expected_outputs, root_build_dir),
rebase_path(_idl_file, root_build_dir),
]

if (defined(invoker.options)) {
foreach(option, invoker.options) {
args += [
"--option",
option,
]
}
}

args += [ rebase_path(_idl_file, root_build_dir) ]

inputs = [
_idl_file,
_expected_outputs,
Expand Down Expand Up @@ -313,12 +323,15 @@ template("chip_codegen") {
"generator",
"input",
"outputs",
"options",
"public_configs",
])
}
} else {
_name = target_name

not_needed(invoker, [ "options" ])

# This constructs a path like:
# FROM all-clusters-app.matter (inside examples/all-clusters-app/all-clusters-common/)
# USING "cpp-app" for generator:
Expand Down
3 changes: 3 additions & 0 deletions examples/chip-tool/args.gni
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,6 @@ matter_enable_tracing_support = true

# Perfetto requires C++17
cpp_standard = "gnu++17"

matter_log_json_payload_hex = true
matter_log_json_payload_decode_full = true
5 changes: 4 additions & 1 deletion scripts/pregenerate/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
from typing import Iterator, List, Optional

from .types import IdlFileType, InputIdlFile
from .using_codegen import CodegenCppAppPregenerator, CodegenJavaClassPregenerator, CodegenJavaJNIPregenerator
from .using_codegen import (CodegenCppAppPregenerator, CodegenCppClustersTLVMetaPregenerator,
CodegenCppProtocolsTLVMetaPregenerator, CodegenJavaClassPregenerator, CodegenJavaJNIPregenerator)
from .using_zap import ZapApplicationPregenerator


Expand Down Expand Up @@ -94,6 +95,8 @@ def FindPregenerationTargets(sdk_root: str, external_roots: Optional[List[str]],
CodegenJavaJNIPregenerator(sdk_root),
CodegenJavaClassPregenerator(sdk_root),
CodegenCppAppPregenerator(sdk_root),
CodegenCppClustersTLVMetaPregenerator(sdk_root),
CodegenCppProtocolsTLVMetaPregenerator(sdk_root),

# ZAP codegen
ZapApplicationPregenerator(sdk_root),
Expand Down
38 changes: 36 additions & 2 deletions scripts/pregenerate/using_codegen.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,12 @@
class CodegenTarget:
"""A target that uses `scripts/codegen.py` to generate files."""

def __init__(self, idl: InputIdlFile, generator: str, sdk_root: str, runner):
def __init__(self, idl: InputIdlFile, generator: str, sdk_root: str, runner, options=[]):
self.idl = idl
self.generator = generator
self.sdk_root = sdk_root
self.runner = runner
self.options = options

if idl.file_type != IdlFileType.MATTER:
raise Exception(
Expand All @@ -51,8 +52,12 @@ def Generate(self, output_root: str):
'--log-level', 'fatal',
'--generator', self.generator,
'--output-dir', output_dir,
self.idl.full_path
]
for option in self.options:
cmd.append("--option")
cmd.append(option)

cmd.append(self.idl.full_path)

logging.debug(f"Executing {cmd}")
self.runner.run(cmd)
Expand Down Expand Up @@ -97,6 +102,9 @@ def Accept(self, idl: InputIdlFile):
if idl.file_type != IdlFileType.MATTER:
return False

if '/lib/format/' in idl.relative_path:
return False

# we should not be checked for these, but verify just in case
if '/tests/' in idl.relative_path:
return False
Expand All @@ -105,3 +113,29 @@ def Accept(self, idl: InputIdlFile):

def CreateTarget(self, idl: InputIdlFile, runner):
return CodegenTarget(sdk_root=self.sdk_root, idl=idl, generator="cpp-app", runner=runner)


class CodegenCppProtocolsTLVMetaPregenerator:
"""Pregeneration logic for "cpp-app" codegen.py outputs"""

def __init__(self, sdk_root):
self.sdk_root = sdk_root

def Accept(self, idl: InputIdlFile):
return (idl.file_type == IdlFileType.MATTER) and idl.relative_path.endswith('/protocol_messages.matter')

def CreateTarget(self, idl: InputIdlFile, runner):
return CodegenTarget(sdk_root=self.sdk_root, idl=idl, generator="cpp-tlvmeta", options=["table_name:protocols_meta"], runner=runner)


class CodegenCppClustersTLVMetaPregenerator:
"""Pregeneration logic for "cpp-app" codegen.py outputs"""

def __init__(self, sdk_root):
self.sdk_root = sdk_root

def Accept(self, idl: InputIdlFile):
return (idl.file_type == IdlFileType.MATTER) and idl.relative_path.endswith('/controller-clusters.matter')

def CreateTarget(self, idl: InputIdlFile, runner):
return CodegenTarget(sdk_root=self.sdk_root, idl=idl, generator="cpp-tlvmeta", options=["table_name:clusters_meta"], runner=runner)
20 changes: 17 additions & 3 deletions scripts/py_matter_idl/files.gni
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,38 @@ import("//build_overrides/chip.gni")

# Templates used for generation
matter_idl_generator_templates = [
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/cpp/application/CallbackStubSource.jinja",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/cpp/application/PluginApplicationCallbacksHeader.jinja",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/cpp/tlvmeta/TLVMetaData_cpp.jinja",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/cpp/tlvmeta/TLVMetaData_h.jinja",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/java/CHIPCallbackTypes.jinja",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/java/ChipClustersCpp.jinja",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/java/ChipClustersRead.jinja",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/java/ClusterWriteMapping.jinja",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/java/CHIPGlobalCallbacks_cpp.jinja",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/java/CHIPReadCallbacks_h.jinja",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/java/ClusterIDMapping.jinja",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/cpp/application/CallbackStubSource.jinja",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/cpp/application/PluginApplicationCallbacksHeader.jinja",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/java/ClusterReadMapping.jinja",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/java/ClusterWriteMapping.jinja",
]

matter_idl_generator_sources = [
"${chip_root}/scripts/py_matter_idl/matter_idl/__init__.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/__init__.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/cpp/__init__.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/cpp/application/__init__.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/cpp/tlvmeta/__init__.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/filters.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/java/__init__.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/registry.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/generators/types.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/lint/__init__.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/lint/lint_rules_parser.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/lint/types.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/matter_idl_parser.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/matter_idl_types.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/test_generators.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/test_matter_idl_parser.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/test_xml_parser.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/xml_parser.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/zapxml/__init__.py",
"${chip_root}/scripts/py_matter_idl/matter_idl/zapxml/handlers/__init__.py",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#include <tlv/meta/{{table_name}}.h>

namespace chip {
namespace TLVMeta {
namespace {

using namespace chip::FlatTree;
using namespace chip::TLV;

{%- for table in sub_tables %}

const Entry<ItemInfo> _{{table.full_name}}[] = {
{%- for entry in table.entries %}
{ { {{entry.code}}, "{{entry.name}}", ItemType::{{entry.item_type}} }, {{entry.reference | indexInTable(sub_tables)}} }, // {{entry.real_type}}
{%- endfor %}
};
{%- endfor %}

const Entry<ItemInfo> _all_clusters[] = {
{%- for cluster in clusters | sort(attribute='code') %}
{ { ClusterTag({{"0x%02X" | format(cluster.code)}}), "{{cluster.name}}", ItemType::kDefault }, {{cluster.name | indexInTable(sub_tables)}} },
{%- endfor %}

};

// For any non-structure list like u64[] or similar.
const Entry<ItemInfo> _primitive_type_list[] = {
{ { AnonymousTag(), "[]", ItemType::kDefault }, kInvalidNodeIndex },
};

} // namespace

#define _ENTRY(n) { sizeof(n) / sizeof(n[0]), n}

const std::array<const Node<ItemInfo>, {{ sub_tables | length }} + 2> {{table_name}} = { {
_ENTRY(_all_clusters), // 0
_ENTRY(_primitive_type_list), // 1
{%- for table in sub_tables %}
_ENTRY(_{{table.full_name}}), // {{loop.index + 1}}
{%- endfor %}
} };

} // namespace TLVMeta
} // namespace chip
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#include <lib/format/tlv_meta.h>
#include <lib/format/FlatTree.h>

#include <array>

namespace chip {
namespace TLVMeta {

extern const std::array<const FlatTree::Node<ItemInfo>, {{ sub_tables | length }} + 2> {{table_name}};

} // namespace TLVMeta
} // namespace chip
Loading