Skip to content

Commit

Permalink
implement 'ReadAttribute' inside the codegen-data-model IM/DM split (
Browse files Browse the repository at this point in the history
…#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>
  • Loading branch information
3 people authored Jun 28, 2024
1 parent f62d3bf commit 28430f1
Show file tree
Hide file tree
Showing 17 changed files with 2,038 additions and 37 deletions.
2 changes: 1 addition & 1 deletion examples/chef/chef.py
Original file line number Diff line number Diff line change
Expand Up @@ -878,7 +878,7 @@ def main() -> int:
"""))
if options.do_clean:
shell.run_cmd("rm -rf out")
shell.run_cmd("gn gen out")
shell.run_cmd("gn gen --export-compile-commands out")
shell.run_cmd("ninja -C out")

#
Expand Down
9 changes: 8 additions & 1 deletion src/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ if (chip_build_tests) {
chip_test_group("tests") {
deps = []
tests = [
"${chip_root}/src/app/codegen-data-model/tests",
"${chip_root}/src/app/data-model-interface/tests",
"${chip_root}/src/access/tests",
"${chip_root}/src/crypto/tests",
Expand Down Expand Up @@ -82,7 +81,15 @@ if (chip_build_tests) {

if (current_os != "zephyr" && current_os != "mbed" &&
chip_device_platform != "efr32") {
# Avoid these items from "one single binary" test executions. Once tests
# are split, we can re-visit this (and likely many others)
#
# In particular:
# "app/codegen-data-model/tests" contains symbols for ember mocks which
# are used by other tests

tests += [
"${chip_root}/src/app/codegen-data-model/tests",
"${chip_root}/src/setup_payload/tests",
"${chip_root}/src/transport/raw/tests",
]
Expand Down
1 change: 1 addition & 0 deletions src/app/codegen-data-model/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import("//build_overrides/chip.gni")
#
# Use `model.gni` to get access to:
# CodegenDataModel.cpp
# CodegenDataModel_Read.cpp
# CodegenDataModel.h
#
# The above list of files exists to satisfy the "dependency linter"
Expand Down
7 changes: 0 additions & 7 deletions src/app/codegen-data-model/CodegenDataModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -231,13 +231,6 @@ bool CodegenDataModel::EmberCommandListIterator::Exists(const CommandId * list,
return (*mCurrentHint == toCheck);
}

CHIP_ERROR CodegenDataModel::ReadAttribute(const InteractionModel::ReadAttributeRequest & request,
InteractionModel::ReadState & state, AttributeValueEncoder & encoder)
{
// TODO: this needs an implementation
return CHIP_ERROR_NOT_IMPLEMENTED;
}

CHIP_ERROR CodegenDataModel::WriteAttribute(const InteractionModel::WriteAttributeRequest & request,
AttributeValueDecoder & decoder)
{
Expand Down
3 changes: 1 addition & 2 deletions src/app/codegen-data-model/CodegenDataModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,7 @@ class CodegenDataModel : public chip::app::InteractionModel::DataModel
/// Generic model implementations
CHIP_ERROR Shutdown() override { return CHIP_NO_ERROR; }

CHIP_ERROR ReadAttribute(const InteractionModel::ReadAttributeRequest & request, InteractionModel::ReadState & state,
AttributeValueEncoder & encoder) override;
CHIP_ERROR ReadAttribute(const InteractionModel::ReadAttributeRequest & request, AttributeValueEncoder & encoder) override;
CHIP_ERROR WriteAttribute(const InteractionModel::WriteAttributeRequest & request, AttributeValueDecoder & decoder) override;
CHIP_ERROR Invoke(const InteractionModel::InvokeRequest & request, chip::TLV::TLVReader & input_arguments,
InteractionModel::InvokeReply & reply) override;
Expand Down
Loading

0 comments on commit 28430f1

Please sign in to comment.