Skip to content

Commit 28430f1

Browse files
andy31415andreilitvinbzbarsky-apple
authored
implement 'ReadAttribute' inside the codegen-data-model IM/DM split (#33877)
* Initial copy with a clean history * make linter happy * Restyle * Fix typo * Add nolint: assert will return before we use the underlying value * 2 more fixes regarding unchecked access * Switch some asserts to expects, for better test logic * Start implementing a read ... wip while I switch to a few other tests * More implementation and we seem to need privilege check as well * More mock ember functions implemented, to make it at least link for now * A bit of work on AAI support. Still need to split out global attribute readers * Split out global AAI...for now * Add global attribute access interface as part of ember data model definitions ... they seem needed * Drop RequiredPrivilegeStubs ... those are odd and if you use mock ember you may as well mock these out as well * Restyle * Added sufficient overrides for things to compile ... this is a MESS * Some more changes to compile * Things link now ... but boy do we have many workarounds... * Remove double return * Restyle * Full ember handling * Comment updates and slight restyle * remove commented out code * Remove read-state from arguments - attributevalueencoder maintains its own state, so we should not duplicate things at this time * more comments and some logic cleanup on alternatives ... code should be less broken now * clean one more comment that seemed odd * Fix off by one bug for long strin processing * More generics * Split out io storage and type conversion as shared functions for ember-compatibility * Restyle * Added more comments * Fix lint errors ... these files are not in libraries since they depend on metadata * Restyle * Fix the access denied error logic ... the translation to UnsupportedAccess is to be done by the caller at a later time, since caller may skip * Shorter code is better * Some comments, cleaner code * Fix auto-include * add some TODO because access control is needed * Model renames * Add renamed files * Add some attribute iteration hint * Make use of the attribute cache * Restyle * Add a cluster iteration hint * Add a few more hints. Ember code still contains loops though, so this may not be ideal still * Add some TODO items for using faster iterations for data. Ember index vs value duality still needs some work * Add a cluster type cache as well. This relies on ember being reasonably static * Add global attribute handling * Fix typing u16 vs unsigned * Unit test preparation: make ACL pass and have an ACL test as well * Some progress in testability. No mock reads, however at least some progress * Make some unit tests pass with ember overrides * Restyle * Attempt to decode data. It does NOT work yet * Validation actually passes * Start splitting into unrelated files ...this is painful * Restyle * Better test namespacing - be consistent * Re-organize a bit ... boilerplate still seems A LOT * Minor comments to start organizing the code better - I NEED more readable things * Restyle and re-organize for readability * More code changes to support testing strings ... however this FAILS right now * Restyle * Fix a typo ... still broken though * one more typo fix ... test passes * Long octet string test as well * Restyle * Fix comment and change the size of the string * Add several ember-specific tests * unit tests and working with nullable values * Fix up the tests * Restyle * AAI unit test for read * Slight comment updates * Restyle * Use StringBuilderAdapters to format chip_error nicely * Format * More unit tests for lists ... test overflow as well * Add test support for partially encoded lists * add missing file * Fix name shadowing * Fix auto-added include names * Test global attribute read via AAI * More unit test coverage * Test nullable string reads * One more test for error pahs * More failure cases on failure path * Restyle * Remove back the initialization and make the comment more obvious * Undo odd include that got auto-added * Place files back past renames * A bit more renaming * Fix includes * More updates to the latest code * Fix unit test merging * Resolve data model ambiguity * Restyle * Do not try to compile ember tests on zephyr as it is not compatible with single large executable * Update placement and comment for including codegen test into one large binary * Restyle * Add static cast for ember calls for span sizes ... we know we are less than 65K * Fix clang-tidy error report * Restyle * Do not try to translate UnsupportedRead * Typo fixes * Code review feedback: correct the return code for global attribute missing the cluster * Some spelling updates and format * ChipDie if internal logic for read fails * Fix typo * Add unit test for invalid global attribute read * Code review feedback: comment about internal flags and implement path expansion logic for skipping data encoding * Restyle and unit test for expansion * Another unit test for AAI this time for unsupported read * Restyle * Update src/app/codegen-data-model/tests/TestAttributeReportIBsEncoding.cpp Co-authored-by: Boris Zbarsky <bzbarsky@apple.com> * Rename files to not have a Test prefix when not containing tests * Add comment as per review comment * Use macros for error returns * Fix typo * Add a macro for dynamic global IM status codes in chip_error * Reference issue in comment * Fix comment a bit * Undo module updates ... this time for real --------- Co-authored-by: Andrei Litvin <andreilitvin@google.com> Co-authored-by: Boris Zbarsky <bzbarsky@apple.com>
1 parent f62d3bf commit 28430f1

17 files changed

+2038
-37
lines changed

examples/chef/chef.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -878,7 +878,7 @@ def main() -> int:
878878
"""))
879879
if options.do_clean:
880880
shell.run_cmd("rm -rf out")
881-
shell.run_cmd("gn gen out")
881+
shell.run_cmd("gn gen --export-compile-commands out")
882882
shell.run_cmd("ninja -C out")
883883

884884
#

src/BUILD.gn

+8-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ if (chip_build_tests) {
5050
chip_test_group("tests") {
5151
deps = []
5252
tests = [
53-
"${chip_root}/src/app/codegen-data-model/tests",
5453
"${chip_root}/src/app/data-model-interface/tests",
5554
"${chip_root}/src/access/tests",
5655
"${chip_root}/src/crypto/tests",
@@ -82,7 +81,15 @@ if (chip_build_tests) {
8281

8382
if (current_os != "zephyr" && current_os != "mbed" &&
8483
chip_device_platform != "efr32") {
84+
# Avoid these items from "one single binary" test executions. Once tests
85+
# are split, we can re-visit this (and likely many others)
86+
#
87+
# In particular:
88+
# "app/codegen-data-model/tests" contains symbols for ember mocks which
89+
# are used by other tests
90+
8591
tests += [
92+
"${chip_root}/src/app/codegen-data-model/tests",
8693
"${chip_root}/src/setup_payload/tests",
8794
"${chip_root}/src/transport/raw/tests",
8895
]

src/app/codegen-data-model/BUILD.gn

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import("//build_overrides/chip.gni")
2020
#
2121
# Use `model.gni` to get access to:
2222
# CodegenDataModel.cpp
23+
# CodegenDataModel_Read.cpp
2324
# CodegenDataModel.h
2425
#
2526
# The above list of files exists to satisfy the "dependency linter"

src/app/codegen-data-model/CodegenDataModel.cpp

-7
Original file line numberDiff line numberDiff line change
@@ -231,13 +231,6 @@ bool CodegenDataModel::EmberCommandListIterator::Exists(const CommandId * list,
231231
return (*mCurrentHint == toCheck);
232232
}
233233

234-
CHIP_ERROR CodegenDataModel::ReadAttribute(const InteractionModel::ReadAttributeRequest & request,
235-
InteractionModel::ReadState & state, AttributeValueEncoder & encoder)
236-
{
237-
// TODO: this needs an implementation
238-
return CHIP_ERROR_NOT_IMPLEMENTED;
239-
}
240-
241234
CHIP_ERROR CodegenDataModel::WriteAttribute(const InteractionModel::WriteAttributeRequest & request,
242235
AttributeValueDecoder & decoder)
243236
{

src/app/codegen-data-model/CodegenDataModel.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ class CodegenDataModel : public chip::app::InteractionModel::DataModel
6868
/// Generic model implementations
6969
CHIP_ERROR Shutdown() override { return CHIP_NO_ERROR; }
7070

71-
CHIP_ERROR ReadAttribute(const InteractionModel::ReadAttributeRequest & request, InteractionModel::ReadState & state,
72-
AttributeValueEncoder & encoder) override;
71+
CHIP_ERROR ReadAttribute(const InteractionModel::ReadAttributeRequest & request, AttributeValueEncoder & encoder) override;
7372
CHIP_ERROR WriteAttribute(const InteractionModel::WriteAttributeRequest & request, AttributeValueDecoder & decoder) override;
7473
CHIP_ERROR Invoke(const InteractionModel::InvokeRequest & request, chip::TLV::TLVReader & input_arguments,
7574
InteractionModel::InvokeReply & reply) override;

0 commit comments

Comments
 (0)