blob: 20474bea76057cec2b79bf657a27fbb9acc6f2a7 [file] [log] [blame] [view]
# Matter NXP Contact Sensor Example Application
This reference application implements a Contact Sensor device type. It uses
board buttons or `matter-cli` for user input and LEDs for state feedback. You
can use this example as a reference for creating your own application.
The example is based on:
- [Matter](https://github.com/project-chip/connectedhomeip)
- [NXP github SDK](https://github.com/nxp-mcuxpresso/mcux-sdk)
- [Matter NXP Contact Sensor Example Application](#matter-nxp-contact-sensor-example-application)
- [Supported devices](#supported-devices)
- [Introduction](#introduction)
- [Device UI](#device-ui)
- [Prerequisites for building](#prerequisites-for-building)
- [Building](#building)
- [Data model](#data-model)
- [Manufacturing data](#manufacturing-data)
- [Long Idle Time ICD Support](#long-idle-time-icd-support)
- [Low power](#low-power)
- [Flashing and debugging](#flashing-and-debugging)
## Supported devices
- [k32w1](k32w1/README.md)
- [mcxw71](mcxw71/README.md)
## Introduction
The application showcases a contact sensor that communicates with clients over a
low-power, 802.15.4 Thread network.
It can be commissioned into an existing Matter network using a controller such
as `chip-tool`.
This example implements a `User-Intent Commissioning Flow`, meaning the user has
to press a button in order for the device to be ready for commissioning. The
initial commissioning is done through `ble-thread` pairing method.
The Thread network dataset will be transferred on the device using a secure
session over Bluetooth LE. In order to start the commissioning process, the user
must enable BLE advertising on the device manually. To pair successfully, the
commissioner must know the commissioning information corresponding to the
device: setup passcode and discriminator. This data is usually encoded within a
QR code or printed to the UART console.
## Device UI
The example application provides a simple UI that depicts the state of the
device and offers basic user control. This UI is implemented via the
general-purpose LEDs and buttons built in the evaluation boards. Please see each
supported device readme file for details.
## Prerequisites for building
In order to build the example, it is recommended to use a Linux distribution.
Please visit the supported Operating Systems list in
[BUILDING.md](../../../docs/guides/BUILDING.md#prerequisites).
- Make sure that below prerequisites are correctly installed (as described in
[BUILDING.md](../../../docs/guides/BUILDING.md#prerequisites))
```
sudo apt-get install git gcc g++ pkg-config libssl-dev libdbus-1-dev libglib2.0-dev libavahi-client-dev ninja-build python3-venv python3-dev python3-pip unzip libgirepository1.0-dev libcairo2-dev libreadline-dev
```
- Step 1: checkout NXP specific submodules only
```
user@ubuntu:~/Desktop/git/connectedhomeip$ scripts/checkout_submodules.py --shallow --platform nxp --recursive
```
- Step 2: activate local environment
```
user@ubuntu:~/Desktop/git/connectedhomeip$ source scripts/activate.sh
```
If the script says the environment is out of date, you can update it by
running the following command:
```
user@ubuntu:~/Desktop/git/connectedhomeip$ source scripts/bootstrap.sh
```
- Step 3: Init NXP SDK(s)
```
user@ubuntu:~/Desktop/git/connectedhomeip$ third_party/nxp/nxp_matter_support/scripts/update_nxp_sdk.py --platform common
```
Note: By default, `update_nxp_sdk.py` will try to initialize all NXP SDKs.
Please run the script with arg `--help` to view all available options.
## Building
There are two options for building this reference app:
- Using `build_examples.py` framework.
- Manually generating `ninja` files using `gn`.
For manual generation and building, please see the specific readme file for your
device.
A list of all available contact sensor targets can be viewed in the following
table:
| target name | description |
| ---------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| nxp-device-freertos-contact-sensor-low-power | Default low-power contact sensor |
| nxp-device-freertos-contact-sensor-low-power-factory | Default low-power contact sensor with factory data |
| nxp-device-freertos-contact-sensor-low-power-lit | Low-power contact sensor as LIT ICD |
| nxp-device-freertos-contact-sensor-low-power-sw-v2 | Low-power contact sensor with software version 2 (can be used to test OTA) |
| nxp-device-freertos-contact-sensor-low-power-factory-sw-v2 | Low-power contact sensor with factory data and software version 2 (can be used to test OTA) |
where `device` can be one of the [Supported devices](#supported-devices).
### Data model
There are two available data models that can be used by the application:
| path | description |
| -------------------------------- | ------------------------------ |
| `zap-lit/contact-sensor-app.zap` | Data model for LIT ICD support |
| `zap-sit/contact-sensor-app.zap` | Data model for SIT ICD support |
The selection is done automatically by the build system based on the ICD
configuration.
The data model can be changed by simply replacing the gn `deps` statement
corresponding to data model target.
### Manufacturing data
Use `chip_with_factory_data=1` in the gn build command to enable factory data.
For a full guide on manufacturing flow, please see
[Guide for writing manufacturing data on NXP devices](../../../docs/guides/nxp/nxp_manufacturing_flow.md).
### Long Idle Time ICD Support
By default, the application is compiled as a SIT ICD (Short Idle Time
Intermittently Connected Device).
This is a list of ICD configuration gn args.
| gn arg | default value | description |
| ------------------------------------------------------------------------------ | ------------- | ---------------------------------------------------------------------------------------------------------- |
| nxp_ot_idle_interval_ms | 2000 (ms) | OT Idle Interval duration |
| nxp_ot_active_interval_ms | 500 (ms) | OT Active Interval duration |
| nxp_idle_mode_duration_s | 600 (s) | Idle Mode Interval duration |
| nxp_active_mode_duration_ms | 10000 (ms) | Active Mode Interval duration |
| nxp_active_mode_threshold_ms | 1000 (ms) | Active Mode Threshold value |
| nxp_icd_supported_clients_per_fabric | 2 | Registration slots per fabric |
| chip_enable_icd_lit | false | Enable LIT ICD support |
| chip_enable_icd_dsls | false | Enable LIT ICD DSLS support |
| chip_persist_subscriptions | true | Try once to re-establish subscriptions from the server side after reboot. May be disabled for LIT use case |
| chip_subscription_timeout_resumption | true | Same as above, but try to re-establish timeout out subscriptions |
| using `Fibonacci Backoff` for retries pacing. May be disabled for LIT use case |
If LIT ICD support is needed then `chip_enable_icd_lit=true` must be specified
as gn argument and the above parameters must be modified to comply with LIT
requirements (e.g.: LIT devices must configure
`chip_ot_idle_interval_ms > 15000`). Example LIT configuration:
```
nxp_ot_idle_interval_ms = 15000 # 15s Idle Intervals
nxp_ot_active_interval_ms = 500 # 500ms Active Intervals
nxp_idle_mode_duration_s = 3600 # 60min Idle Mode Interval
nxp_active_mode_duration_ms = 0 # 0 Active Mode Interval
nxp_active_mode_threshold_ms = 30000 # 30s Active Mode Threshold
```
### Low power
The example also offers the possibility to run in low power mode. This means
that the board will go in deep sleep most of the time and the power consumption
will be very low.
In order to build with low power support, the following gn args must be used:
```
chip_with_low_power = 1
chip_openthread_ftd = false
chip_with_ot_cli = 0
chip_logging = false
```
In order to maintain a low power consumption, the UI LEDs are disabled. Console
logs can be used instead, but it might affect low power timings. Also, please
note that once the board is flashed with MCUXpresso the debugger disconnects
because the board enters low power.
## Flashing and debugging
Please see the device specific readme file.