Commissioning (#348)
* Add FailSafeManager class
This class instance will be by the "Device" once a Failsafe context is opened (armFailsafe) and will then be used to coordinate all Failsafe relevant topics. It maintains the Failsafe timer and handles expiry logic, it contains the "FabricBuilder" instance of the Fabric to build (or update), it will store relevant data to restore if the failsafe timer expires and such.
The commit also includes tests for general logic of the class. The Fabric and commission related tests are covered by chip tool tests (but could be replicated here later too, added todo)
* FabricManager adjustments
The commit removes the FabricBuilder from the FabricManager because is now managed by the FailSafeManager. Furthermore we use a Map to store fabrics for easier access.
* Adjust how we calculate next Fabric Index
Adds correct determination of the next FabricIndex
* Add update/revoke FabricIndex
Methods no longer needed are removed.
Add method to update a Fabric and also to "revoke" a fabric. The latter is used when during commissioning the fabric was already added but then the failsafe timer expired or other error cases occurred. Then the fabric is removed and if the fabric index was the last one generated we also reset the counter because the index was never officially used.
* Allow multiple remove callbacks per Fabric
There is special commissioning logic that relies on "if a fabric got removed during an action", so allow multiple removal callbacks
* Adjust FabricBuilder
The FabricBuilder needs to expose some more information and adding the fabricIndex is moved to the build method instead of already at constructor time.
The fabric builder can now also be initialized from an existing fabric to handle updating this fabric (mainly certs).
* StatusReport adjustments
This commit renames one StatusCode to be like in the Specs and makes "sendError" usable more generic also for other error cases.
* Allow to send CloseSession
To formally close a session send a StatusReport of special type but without expecting any ack.
* Fix session closure on Fabric remove
Because session is removing itself on close the original code was not working correct.
* Add testing for the session closure fix
* Adjust MatterController for FabricBuilder changes
* Enhance Pase Server
When a Pase session is opened the actions over it needs to be finished within a certain timeframe. Additionally the session should close after a defined amount of errors. This is implemented now.
* Enhance Pase Responder
Refactor the SecureChannel handling to dynamically add and remove a PaseResponder and not having one always statically. This fits more with the specs.
The commit also includes the require error handling based on the specs.
* Refactor MatterDevice for commissioning
This PR adds the whole new Process for commissioning. It dynamically configures PaseServer as needed, adjusts how the commissioning window/announcements are handled and faisafe is checked. It also provides several "helper methods" to be used as "session context" methods by the cluster servers.
Where relevant it contains infos from the specs and also some TODOs.
Most of this will be tested via chip tool tests!
* Adjust CommissioningServer to the MatterDevice changes
* Adjust tests to the MatterDevice changes
* Implement CLuster Server Handlers according to specs
This PR implements AdministratorCommissioning, GeneralCommissioning and OperationalCredentials cluster server handlers as define dby specs. Where applicable infos from Specs are added as comments and some TODOs are still in.
* Add option for AttributeServer to also update values without having a session.
* ALso keep track of Pase sessions in Channel Manager
* Add closing callbacks to the message-channels
* Enhance Sessions
The PR enhances session classes with needed changes used by former commits and adds a ways to "prepare a session for deletion". This deletion is processed at the end of an Interaction.
* Leftover: close messenger in case of subscription error
* Handle incoming CloseSession messages
* Leftover: Send correct error code now
* Leftover: Code cleanup
* Announce all devices that do not have an active subscription (even if they have an open session)
* Announce device whenever ba session gets closed (assuming controller likes to reconnect)
* The minimum commissioning timeout is 180, woould error now
* Correctly implement Errors fpr Dummy Wi-Fi cluster
* Leftover from other PR: Also allow to configure waitFor timeout from queue on level above
* Add all automated commissioning related tests and new feature for long running test execution
* Readme adjustments
* Changelog
* fix chip tests gha
* fix tests
* fix chip test gha
* address review feedback
* address review feedback
* address review feedback
* Move Dummy Wifi cluster into own File
* Add some docs
* We need to initialize the cluster logic later to make sure to have the restored data already initialized
* Add missing GeneralCommissioningServer testcase and related fixes
* last fix
* fix tests
* fix tests