From 5db311f44d6665d80b9338df19a3c7159e53fee8 Mon Sep 17 00:00:00 2001
From: Nerivec <62446222+Nerivec@users.noreply.github.com>
Date: Tue, 29 Oct 2024 09:04:14 +0100
Subject: [PATCH] Reset to nabucasa, with reconfigured manifests. (#8)
---
.github/workflows/build.yaml | 20 +-
Dockerfile | 17 +-
README.md | 30 +-
.../aeotec/aeotec_zga008_openthread_rcp.yaml | 33 +
.../aeotec/aeotec_zga008_zigbee_ncp.yaml | 50 +
.../easyiot_zb-gw04-1v1_openthread_rcp.yaml | 36 +
.../easyiot_zb-gw04-1v1_zigbee_ncp.yaml | 51 +
.../easyiot_zb-gw04-1v2_openthread_rcp.yaml | 33 +
.../easyiot_zb-gw04-1v2_zigbee_ncp.yaml | 50 +
.../easyiot/easyiot_zb-gw04_bootloader.yaml | 33 +
...ml => nabucasa_skyconnect_bootloader.yaml} | 2 +-
...> nabucasa_skyconnect_openthread_rcp.yaml} | 11 +-
...ml => nabucasa_skyconnect_zigbee_ncp.yaml} | 33 +-
...r.yaml => nabucasa_yellow_bootloader.yaml} | 2 +-
...ml => nabucasa_yellow_openthread_rcp.yaml} | 11 +-
...p.yaml => nabucasa_yellow_zigbee_ncp.yaml} | 33 +-
...e_stick.yaml => nabucasa_zwave_stick.yaml} | 2 +-
.../smlight_slzb06m_opentread_rcp.yaml | 36 +
.../smlight/smlight_slzb06m_zigbee_ncp.yaml | 51 +
.../smlight_slzb07Mg24_bootloader.yaml | 33 +
.../smlight_slzb07Mg24_opentread_rcp.yaml | 33 +
.../smlight_slzb07Mg24_zigbee_ncp.yaml | 51 +
.../smlight/smlight_slzb07_bootloader.yaml | 33 +
.../smlight/smlight_slzb07_opentread_rcp.yaml | 33 +
.../smlight/smlight_slzb07_zigbee_ncp.yaml | 50 +
.../sonoff_zbdonglee_openthread_rcp.yaml | 36 +
.../sonoff/sonoff_zbdonglee_zigbee_ncp.yaml | 51 +
.../sonoff_zbdonglee_zigbee_router.yaml | 100 +
.../sparkfun/sparkfun_mgm240p_bootloader.yaml | 33 +
.../sparkfun_mgm240p_openthread_rcp.yaml | 36 +
.../sparkfun/sparkfun_mgm240p_zigbee_ncp.yaml | 51 +
.../tubeszb/tubeszb-mgm24-openthread_rcp.yaml | 33 +
.../tubeszb/tubeszb-mgm24-zigbee_ncp.yaml | 51 +
.../tubeszb-mgm24PB-openthread_rcp.yaml | 33 +
.../tubeszb/tubeszb-mgm24PB-zigbee_ncp.yaml | 51 +
.../tubeszb/tubeszb_MGM240PB_bootloader.yaml | 33 +
src/openthread_rcp/app.c | 86 +-
src/openthread_rcp/app.h | 37 +-
src/openthread_rcp/main.c | 75 +-
src/openthread_rcp/openthread_rcp.slcp | 6 +-
src/openthread_rcp/reset_util.h | 4 +-
src/zigbee_ncp/app.c | 401 +-
src/zigbee_ncp/config/xncp_config.h | 20 -
src/zigbee_ncp/main.c | 2 +-
src/zigbee_ncp/zigbee_ncp.slcp | 25 +-
src/zigbee_router/app.c | 250 ++
src/zigbee_router/config/zcl/zcl_config.zap | 3777 +++++++++++++++++
src/zigbee_router/main.c | 74 +
src/zigbee_router/zigbee_router.slcp | 123 +
tools/build_project.py | 134 +-
tools/create_gbl.py | 30 +-
51 files changed, 5731 insertions(+), 588 deletions(-)
create mode 100644 manifests/aeotec/aeotec_zga008_openthread_rcp.yaml
create mode 100644 manifests/aeotec/aeotec_zga008_zigbee_ncp.yaml
create mode 100644 manifests/easyiot/easyiot_zb-gw04-1v1_openthread_rcp.yaml
create mode 100644 manifests/easyiot/easyiot_zb-gw04-1v1_zigbee_ncp.yaml
create mode 100644 manifests/easyiot/easyiot_zb-gw04-1v2_openthread_rcp.yaml
create mode 100644 manifests/easyiot/easyiot_zb-gw04-1v2_zigbee_ncp.yaml
create mode 100644 manifests/easyiot/easyiot_zb-gw04_bootloader.yaml
rename manifests/nabucasa/{skyconnect_bootloader.yaml => nabucasa_skyconnect_bootloader.yaml} (95%)
rename manifests/nabucasa/{skyconnect_openthread_rcp.yaml => nabucasa_skyconnect_openthread_rcp.yaml} (78%)
rename manifests/nabucasa/{skyconnect_zigbee_ncp.yaml => nabucasa_skyconnect_zigbee_ncp.yaml} (58%)
rename manifests/nabucasa/{yellow_bootloader.yaml => nabucasa_yellow_bootloader.yaml} (95%)
rename manifests/nabucasa/{yellow_openthread_rcp.yaml => nabucasa_yellow_openthread_rcp.yaml} (80%)
rename manifests/nabucasa/{yellow_zigbee_ncp.yaml => nabucasa_yellow_zigbee_ncp.yaml} (60%)
rename manifests/nabucasa/{zwave_stick.yaml => nabucasa_zwave_stick.yaml} (97%)
create mode 100644 manifests/smlight/smlight_slzb06m_opentread_rcp.yaml
create mode 100644 manifests/smlight/smlight_slzb06m_zigbee_ncp.yaml
create mode 100644 manifests/smlight/smlight_slzb07Mg24_bootloader.yaml
create mode 100644 manifests/smlight/smlight_slzb07Mg24_opentread_rcp.yaml
create mode 100644 manifests/smlight/smlight_slzb07Mg24_zigbee_ncp.yaml
create mode 100644 manifests/smlight/smlight_slzb07_bootloader.yaml
create mode 100644 manifests/smlight/smlight_slzb07_opentread_rcp.yaml
create mode 100644 manifests/smlight/smlight_slzb07_zigbee_ncp.yaml
create mode 100644 manifests/sonoff/sonoff_zbdonglee_openthread_rcp.yaml
create mode 100644 manifests/sonoff/sonoff_zbdonglee_zigbee_ncp.yaml
create mode 100644 manifests/sonoff/sonoff_zbdonglee_zigbee_router.yaml
create mode 100644 manifests/sparkfun/sparkfun_mgm240p_bootloader.yaml
create mode 100644 manifests/sparkfun/sparkfun_mgm240p_openthread_rcp.yaml
create mode 100644 manifests/sparkfun/sparkfun_mgm240p_zigbee_ncp.yaml
create mode 100644 manifests/tubeszb/tubeszb-mgm24-openthread_rcp.yaml
create mode 100644 manifests/tubeszb/tubeszb-mgm24-zigbee_ncp.yaml
create mode 100644 manifests/tubeszb/tubeszb-mgm24PB-openthread_rcp.yaml
create mode 100644 manifests/tubeszb/tubeszb-mgm24PB-zigbee_ncp.yaml
create mode 100644 manifests/tubeszb/tubeszb_MGM240PB_bootloader.yaml
delete mode 100644 src/zigbee_ncp/config/xncp_config.h
create mode 100644 src/zigbee_router/app.c
create mode 100644 src/zigbee_router/config/zcl/zcl_config.zap
create mode 100644 src/zigbee_router/main.c
create mode 100644 src/zigbee_router/zigbee_router.slcp
diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index edfcfd74..aa706f1e 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -21,8 +21,8 @@ jobs:
name: Run pre-commit
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-python@v3
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
- name: Install pre-commit
run: |
pip install pre-commit
@@ -37,9 +37,9 @@ jobs:
permissions:
packages: write
steps:
- - uses: actions/checkout@v4.1.4
+ - uses: actions/checkout@v4
- name: Log in to the GitHub container registry
- uses: docker/login-action@v3.1.0
+ uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.repository_owner }}
@@ -85,10 +85,10 @@ jobs:
echo "image_name=$image_name" >> $GITHUB_OUTPUT
echo "container_name=${{ env.REGISTRY }}/$image_name:$tag_name" >> $GITHUB_OUTPUT
- name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3.3.0
+ uses: docker/setup-buildx-action@v3
if: steps.read-repo-info.outputs.build_image == 'true'
- name: Build and Push
- uses: docker/build-push-action@v5.3.0
+ uses: docker/build-push-action@v6
if: steps.read-repo-info.outputs.build_image == 'true'
with:
context: .
@@ -109,7 +109,7 @@ jobs:
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- - uses: actions/checkout@v4.1.4
+ - uses: actions/checkout@v4
- id: set-matrix
run: |
echo "matrix=$(find manifests -type f \( -name "*.yaml" -o -name "*.yml" \) -print | sort | jq -R -s -c 'split("\n")[:-1]')" >> $GITHUB_OUTPUT
@@ -125,7 +125,7 @@ jobs:
matrix:
manifest: ${{ fromJson(needs.list-manifests.outputs.matrix) }}
steps:
- - uses: actions/checkout@v4.1.4
+ - uses: actions/checkout@v4
- name: Install SDK extensions
run: |
@@ -181,7 +181,7 @@ jobs:
apt-get install -y nodejs
- name: Upload artifact
- uses: actions/upload-artifact@v4.3.3
+ uses: actions/upload-artifact@v4
with:
name: firmware-build-${{ steps.build-firmware.outputs.output_basename }}
path: outputs/*
@@ -204,6 +204,6 @@ jobs:
pattern: firmware-build-*
- name: Upload artifacts
- uses: softprops/action-gh-release@v1
+ uses: softprops/action-gh-release@v2
with:
files: artifacts/*.gbl
diff --git a/Dockerfile b/Dockerfile
index c8cedaa4..5fdb844f 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -39,7 +39,7 @@ RUN \
ENV PATH="$PATH:/opt/slc_cli"
-# GCC Embedded Toolchain 12.2.rel1 (for Gecko SDK 4.4.0+)
+# GCC Embedded Toolchain 12.2.rel1 (for Simplicity SDK)
RUN \
curl -O https://armkeil.blob.core.windows.net/developer/Files/downloads/gnu/12.2.rel1/binrel/arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi.tar.xz \
&& tar -C /opt -xf arm-gnu-toolchain-12.2.rel1-x86_64-arm-none-eabi.tar.xz \
@@ -51,18 +51,11 @@ RUN \
&& unzip -q -d simplicity_sdk_2024.6.2 simplicity_sdk_2024.6.2.zip \
&& rm simplicity_sdk_2024.6.2.zip
-# Gecko SDK 4.4.4
+# ZCL Advanced Platform (ZAP) v2024.10.24
RUN \
- curl -o gecko_sdk_4.4.4.zip -L https://github.com/SiliconLabs/gecko_sdk/releases/download/v4.4.4/gecko-sdk.zip \
- && unzip -q -d gecko_sdk_4.4.4 gecko_sdk_4.4.4.zip \
- && rm gecko_sdk_4.4.4.zip
-
-# ZCL Advanced Platform (ZAP) v2024.09.27
-RUN \
- curl -o zap_2024.09.27.zip -L https://github.com/project-chip/zap/releases/download/v2024.09.27/zap-linux-x64.zip \
- && unzip -q -d /opt/zap zap_2024.09.27.zip \
- && rm zap_2024.09.27.zip
-
+ curl -o zap_2024.10.24.zip -L https://github.com/project-chip/zap/releases/download/v2024.10.24/zap-linux-x64.zip \
+ && unzip -q -d /opt/zap zap_2024.10.24.zip \
+ && rm zap_2024.10.24.zip
ENV STUDIO_ADAPTER_PACK_PATH="/opt/zap"
ARG USERNAME=builder
diff --git a/README.md b/README.md
index e3aaf22a..a0b50e22 100644
--- a/README.md
+++ b/README.md
@@ -4,8 +4,8 @@ ZBT-1/SkyConnect and the Home Assistant Yellow's IEEE 802.15.4 radio. The firmwa
manifests are entirely generic, however, and are intended to be written easily for any
Silicon Labs EFR32 device.
-It uses the Silicon Labs Gecko SDK and proprietary Silicon Labs tools such as the
-Silicon Labs Configurator (slc) and the Simplicity Commander standalone utility.
+It uses the Silicon Labs Gecko/Simplicity SDK and proprietary Silicon Labs tools such as
+the Silicon Labs Configurator (slc) and the Simplicity Commander standalone utility.
## Background
The project templates in this repository are configured and built for specific boards
@@ -14,34 +14,32 @@ manifest file configures the Zigbee firmware for the SkyConnect/Connect ZBT-1.
## Setting up Simplicity Studio (for development)
If you are going to be developing using Simplicity Studio, note that each project can
-potentially use a different Gecko SDK release. It is recommended to forego the typical
+potentially use a different Simplicity SDK release. It is recommended to forego the typical
Simplicity Studio SDK management workflow and manually manage SDKs:
-1. Clone a specific version of the Gecko SDK:
+1. Clone a specific version of the Simplicity SDK:
```bash
# For macOS
- mkdir ~/SimplicityStudio/SDKs/gecko_sdk_4.4.2
- cd ~/SimplicityStudio/SDKs/gecko_sdk_4.4.2
+ mkdir ~/SimplicityStudio/SDKs/simplicity_sdk_2024.6.2
+ cd ~/SimplicityStudio/SDKs/simplicity_sdk_2024.6.2
- git clone -b v4.4.2 https://github.com/SiliconLabs/gecko_sdk .
+ git clone -b v2024.6.2 https://github.com/SiliconLabs/simplicity_sdk .
git checkout -b branch_tag
```
2. Open preferences, navigate to **Simplicity Studio > SDKs**, click the `Add SDK...` button, and browse to the above location.
-3. Once the SDK is added, select its entry and click `Add Extension...`.
-4. In this repo, add the extensions under `gecko_sdk_extensions`.
Repeat this process for every necessary SDK version.
> [!TIP]
> If you have build issues after switching commits, make sure to delete any
-> `gecko_sdk_*` and `template` folders from the Simplicity working tree.
+> `simplicity_sdk_*`, `gecko_sdk_*`, and `template` folders from the project working tree.
## Building with a firmware manifest (for building device firmware)
Command line building requires:
- [`slc-cli`](https://docs.silabs.com/simplicity-studio-5-users-guide/latest/ss-5-users-guide-tools-slc-cli/02-installation)
- [Simplicity Commander](https://www.silabs.com/developers/mcu-programming-options) (`commander`)
-- The exact Gecko SDK version required by the project. Note that this doesn't have to be a Git working tree, you can use [a GitHub release](https://github.com/SiliconLabs/gecko_sdk/releases).
+- The exact Simplicity SDK version required by the project. Note that this doesn't have to be a Git working tree, you can use [a GitHub release](https://github.com/SiliconLabs/gecko_sdk/releases).
- A compatible toolchain. Take a look at the `Dockerfile` for the necessary toolchains.
> [!TIP]
@@ -57,8 +55,8 @@ Command line building requires:
SDK extensions for every SDK you plan to use:
```bash
-slc signature trust --sdk ~/SimplicityStudio/SDKs/gecko_sdk_4.4.2
-slc signature trust --sdk ~/SimplicityStudio/SDKs/gecko_sdk_4.4.2 --extension-path ~/SimplicityStudio/SDKs/gecko_sdk_4.4.2/extension/nc_efr32_watchdog_extension
+slc signature trust --sdk ~/SimplicityStudio/SDKs/simplicity_sdk_2024.6.2
+slc signature trust --sdk ~/SimplicityStudio/SDKs/simplicity_sdk_2024.6.2 --extension-path ~/SimplicityStudio/SDKs/simplicity_sdk_2024.6.2/extension/nc_efr32_watchdog_extension
```
`tools/build_project.py` is the main entry point for building firmwares. Provide paths
@@ -73,9 +71,9 @@ tool will automatically determine which SDK and toolchain to use.
pip install ruamel.yaml # Only dependency
python tools/build_project.py \
- # The following SDK and toolchain flags can be omitted on macOS
- --sdk ~/SimplicityStudio/SDKs/gecko_sdk_4.4.0 \
- --sdk ~/SimplicityStudio/SDKs/gecko_sdk_4.4.2 \
+ # The following SDK and toolchain flags can be omitted on macOS, they are all autodetected
+ --sdk ~/SimplicityStudio/SDKs/gecko_sdk_4.4.4 \
+ --sdk ~/SimplicityStudio/SDKs/simplicity_sdk_2024.6.0 \
--toolchain '/Applications/Simplicity Studio.app/Contents/Eclipse/developer/toolchains/gnu_arm/10.3_2021.10' \
--toolchain '/Applications/Simplicity Studio.app/Contents/Eclipse/developer/toolchains/gnu_arm/12.2.rel1_2023.7' \
diff --git a/manifests/aeotec/aeotec_zga008_openthread_rcp.yaml b/manifests/aeotec/aeotec_zga008_openthread_rcp.yaml
new file mode 100644
index 00000000..ce8c12c7
--- /dev/null
+++ b/manifests/aeotec/aeotec_zga008_openthread_rcp.yaml
@@ -0,0 +1,33 @@
+name: ZGA008 OpenThread RCP
+device: EFR32MG21A020F1024IM32
+base_project: src/openthread_rcp
+filename: "{manifest_name}_{ot_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: openthread_rcp
+ ot_version: dynamic
+ baudrate: 460800
+
+c_defines:
+ SL_UARTDRV_USART_VCOM_PERIPHERAL: USART0
+ SL_UARTDRV_USART_VCOM_PERIPHERAL_NO: 0
+ SL_UARTDRV_USART_VCOM_BAUDRATE: 460800
+
+ SL_UARTDRV_USART_VCOM_TX_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_TX_PIN: 5
+
+ SL_UARTDRV_USART_VCOM_RX_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_RX_PIN: 6
+
+ SL_UARTDRV_USART_VCOM_CTS_PORT: gpioPortC
+ SL_UARTDRV_USART_VCOM_CTS_PIN: 1
+
+ SL_UARTDRV_USART_VCOM_RTS_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_RTS_PIN: 4
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 140
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/aeotec/aeotec_zga008_zigbee_ncp.yaml b/manifests/aeotec/aeotec_zga008_zigbee_ncp.yaml
new file mode 100644
index 00000000..a9cddb35
--- /dev/null
+++ b/manifests/aeotec/aeotec_zga008_zigbee_ncp.yaml
@@ -0,0 +1,50 @@
+name: ZGA008 Zigbee
+device: EFR32MG21A020F1024IM32
+base_project: src/zigbee_ncp
+filename: "{manifest_name}_{ezsp_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: zigbee_ncp
+ ezsp_version: dynamic
+ baudrate: 115200
+
+slcp_defines:
+ SL_ZIGBEE_ADDRESS_TABLE_SIZE: 32
+ SL_ZIGBEE_MULTICAST_TABLE_SIZE: 26
+ SL_ZIGBEE_ROUTE_TABLE_SIZE: 16
+ SL_ZIGBEE_DISCOVERY_TABLE_SIZE: 8
+
+c_defines:
+ SL_IOSTREAM_USART_VCOM_BAUDRATE: 115200
+ SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE: usartHwFlowControlCtsAndRts
+
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL: USART0
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL_NO: 0
+
+ SL_IOSTREAM_USART_VCOM_TX_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_TX_PIN: 5
+
+ SL_IOSTREAM_USART_VCOM_RX_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_RX_PIN: 6
+
+ SL_IOSTREAM_USART_VCOM_CTS_PORT: gpioPortC
+ SL_IOSTREAM_USART_VCOM_CTS_PIN: 1
+
+ SL_IOSTREAM_USART_VCOM_RTS_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_RTS_PIN: 4
+
+ SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE: 64
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 140
+
+ SL_ZIGBEE_APS_UNICAST_MESSAGE_COUNT: 64
+ SL_ZIGBEE_BROADCAST_TABLE_SIZE: 30
+ SL_ZIGBEE_NEIGHBOR_TABLE_SIZE: 26
+ SL_ZIGBEE_SOURCE_ROUTE_TABLE_SIZE: 254
+ SL_ZIGBEE_MAX_END_DEVICE_CHILDREN: 32
+ SL_ZIGBEE_BINDING_TABLE_SIZE: 64
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/easyiot/easyiot_zb-gw04-1v1_openthread_rcp.yaml b/manifests/easyiot/easyiot_zb-gw04-1v1_openthread_rcp.yaml
new file mode 100644
index 00000000..d1bd86c4
--- /dev/null
+++ b/manifests/easyiot/easyiot_zb-gw04-1v1_openthread_rcp.yaml
@@ -0,0 +1,36 @@
+name: ZB-GW04-1v1 OpenThread RCP
+device: EFR32MG21A020F768IM32
+base_project: src/openthread_rcp
+filename: "{manifest_name}_{ot_version}_{baudrate}_{fw_variant}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: openthread_rcp
+ ot_version: dynamic
+ baudrate: 230400
+ fw_variant: no_flow
+
+c_defines:
+ SL_UARTDRV_USART_VCOM_FLOW_CONTROL_TYPE: usartHwFlowControlNone
+
+ SL_UARTDRV_USART_VCOM_PERIPHERAL: USART0
+ SL_UARTDRV_USART_VCOM_PERIPHERAL_NO: 0
+ SL_UARTDRV_USART_VCOM_BAUDRATE: 230400
+
+ SL_UARTDRV_USART_VCOM_TX_PORT: gpioPortB
+ SL_UARTDRV_USART_VCOM_TX_PIN: 1
+
+ SL_UARTDRV_USART_VCOM_RX_PORT: gpioPortB
+ SL_UARTDRV_USART_VCOM_RX_PIN: 0
+
+ SL_UARTDRV_USART_VCOM_CTS_PORT: 0
+ SL_UARTDRV_USART_VCOM_CTS_PIN: 0
+
+ SL_UARTDRV_USART_VCOM_RTS_PORT: 0
+ SL_UARTDRV_USART_VCOM_RTS_PIN: 0
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 128
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/easyiot/easyiot_zb-gw04-1v1_zigbee_ncp.yaml b/manifests/easyiot/easyiot_zb-gw04-1v1_zigbee_ncp.yaml
new file mode 100644
index 00000000..5596d299
--- /dev/null
+++ b/manifests/easyiot/easyiot_zb-gw04-1v1_zigbee_ncp.yaml
@@ -0,0 +1,51 @@
+name: ZB-GW04-1v1 Zigbee
+device: EFR32MG21A020F768IM32
+base_project: src/zigbee_ncp
+filename: "{manifest_name}_{ezsp_version}_{baudrate}_{fw_variant}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: zigbee_ncp
+ ezsp_version: dynamic
+ baudrate: 115200
+ fw_variant: sw_flow
+
+slcp_defines:
+ SL_ZIGBEE_ADDRESS_TABLE_SIZE: 32
+ SL_ZIGBEE_MULTICAST_TABLE_SIZE: 26
+ SL_ZIGBEE_ROUTE_TABLE_SIZE: 16
+ SL_ZIGBEE_DISCOVERY_TABLE_SIZE: 8
+
+c_defines:
+ SL_IOSTREAM_USART_VCOM_BAUDRATE: 115200
+ SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE: uartFlowControlSoftware
+
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL: USART0
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL_NO: 0
+
+ SL_IOSTREAM_USART_VCOM_TX_PORT: gpioPortB
+ SL_IOSTREAM_USART_VCOM_TX_PIN: 1
+
+ SL_IOSTREAM_USART_VCOM_RX_PORT: gpioPortB
+ SL_IOSTREAM_USART_VCOM_RX_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_CTS_PORT: 0
+ SL_IOSTREAM_USART_VCOM_CTS_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_RTS_PORT: 0
+ SL_IOSTREAM_USART_VCOM_RTS_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE: 64
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 128
+
+ SL_ZIGBEE_APS_UNICAST_MESSAGE_COUNT: 64
+ SL_ZIGBEE_BROADCAST_TABLE_SIZE: 30
+ SL_ZIGBEE_NEIGHBOR_TABLE_SIZE: 26
+ SL_ZIGBEE_SOURCE_ROUTE_TABLE_SIZE: 200
+ SL_ZIGBEE_MAX_END_DEVICE_CHILDREN: 32
+ SL_ZIGBEE_BINDING_TABLE_SIZE: 64
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/easyiot/easyiot_zb-gw04-1v2_openthread_rcp.yaml b/manifests/easyiot/easyiot_zb-gw04-1v2_openthread_rcp.yaml
new file mode 100644
index 00000000..8d5e930b
--- /dev/null
+++ b/manifests/easyiot/easyiot_zb-gw04-1v2_openthread_rcp.yaml
@@ -0,0 +1,33 @@
+name: ZB-GW04-1v2 OpenThread RCP
+device: EFR32MG21A020F768IM32
+base_project: src/openthread_rcp
+filename: "{manifest_name}_{ot_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: openthread_rcp
+ ot_version: dynamic
+ baudrate: 230400
+
+c_defines:
+ SL_UARTDRV_USART_VCOM_PERIPHERAL: USART0
+ SL_UARTDRV_USART_VCOM_PERIPHERAL_NO: 0
+ SL_UARTDRV_USART_VCOM_BAUDRATE: 230400
+
+ SL_UARTDRV_USART_VCOM_TX_PORT: gpioPortB
+ SL_UARTDRV_USART_VCOM_TX_PIN: 1
+
+ SL_UARTDRV_USART_VCOM_RX_PORT: gpioPortB
+ SL_UARTDRV_USART_VCOM_RX_PIN: 0
+
+ SL_UARTDRV_USART_VCOM_CTS_PORT: gpioPortD
+ SL_UARTDRV_USART_VCOM_CTS_PIN: 3
+
+ SL_UARTDRV_USART_VCOM_RTS_PORT: gpioPortD
+ SL_UARTDRV_USART_VCOM_RTS_PIN: 4
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 128
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/easyiot/easyiot_zb-gw04-1v2_zigbee_ncp.yaml b/manifests/easyiot/easyiot_zb-gw04-1v2_zigbee_ncp.yaml
new file mode 100644
index 00000000..478664a5
--- /dev/null
+++ b/manifests/easyiot/easyiot_zb-gw04-1v2_zigbee_ncp.yaml
@@ -0,0 +1,50 @@
+name: ZB-GW04-1v2 Zigbee
+device: EFR32MG21A020F768IM32
+base_project: src/zigbee_ncp
+filename: "{manifest_name}_{ezsp_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: zigbee_ncp
+ ezsp_version: dynamic
+ baudrate: 115200
+
+slcp_defines:
+ SL_ZIGBEE_ADDRESS_TABLE_SIZE: 32
+ SL_ZIGBEE_MULTICAST_TABLE_SIZE: 26
+ SL_ZIGBEE_ROUTE_TABLE_SIZE: 16
+ SL_ZIGBEE_DISCOVERY_TABLE_SIZE: 8
+
+c_defines:
+ SL_IOSTREAM_USART_VCOM_BAUDRATE: 115200
+ SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE: usartHwFlowControlCtsAndRts
+
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL: USART0
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL_NO: 0
+
+ SL_IOSTREAM_USART_VCOM_TX_PORT: gpioPortB
+ SL_IOSTREAM_USART_VCOM_TX_PIN: 1
+
+ SL_IOSTREAM_USART_VCOM_RX_PORT: gpioPortB
+ SL_IOSTREAM_USART_VCOM_RX_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_CTS_PORT: gpioPortD
+ SL_IOSTREAM_USART_VCOM_CTS_PIN: 3
+
+ SL_IOSTREAM_USART_VCOM_RTS_PORT: gpioPortD
+ SL_IOSTREAM_USART_VCOM_RTS_PIN: 4
+
+ SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE: 64
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 128
+
+ SL_ZIGBEE_APS_UNICAST_MESSAGE_COUNT: 64
+ SL_ZIGBEE_BROADCAST_TABLE_SIZE: 30
+ SL_ZIGBEE_NEIGHBOR_TABLE_SIZE: 26
+ SL_ZIGBEE_SOURCE_ROUTE_TABLE_SIZE: 200
+ SL_ZIGBEE_MAX_END_DEVICE_CHILDREN: 32
+ SL_ZIGBEE_BINDING_TABLE_SIZE: 64
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/easyiot/easyiot_zb-gw04_bootloader.yaml b/manifests/easyiot/easyiot_zb-gw04_bootloader.yaml
new file mode 100644
index 00000000..68bf67c4
--- /dev/null
+++ b/manifests/easyiot/easyiot_zb-gw04_bootloader.yaml
@@ -0,0 +1,33 @@
+name: ZB-GW04 Bootloader
+device: EFR32MG21A020F768IM32
+base_project: src/bootloader
+filename: "{manifest_name}_{gecko_bootloader_version}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: gecko-bootloader
+ gecko_bootloader_version: dynamic
+ baudrate: 115200
+
+c_defines:
+ SL_SERIAL_UART_FLOW_CONTROL: 0
+
+ SL_SERIAL_UART_PERIPHERAL: USART0
+ SL_SERIAL_UART_PERIPHERAL_NO: 0
+
+ SL_SERIAL_UART_TX_PORT: gpioPortB
+ SL_SERIAL_UART_TX_PIN: 1
+
+ SL_SERIAL_UART_RX_PORT: gpioPortB
+ SL_SERIAL_UART_RX_PIN: 0
+
+ SL_SERIAL_UART_CTS_PORT: 0
+ SL_SERIAL_UART_CTS_PIN: 0
+
+ SL_SERIAL_UART_RTS_PORT: 0
+ SL_SERIAL_UART_RTS_PIN: 0
+
+ SL_GPIO_ACTIVATION_POLARITY: LOW
+ SL_BTL_BUTTON_PORT: gpioPortA
+ SL_BTL_BUTTON_PIN: 0
\ No newline at end of file
diff --git a/manifests/nabucasa/skyconnect_bootloader.yaml b/manifests/nabucasa/nabucasa_skyconnect_bootloader.yaml
similarity index 95%
rename from manifests/nabucasa/skyconnect_bootloader.yaml
rename to manifests/nabucasa/nabucasa_skyconnect_bootloader.yaml
index b6547fb9..e8cc478a 100644
--- a/manifests/nabucasa/skyconnect_bootloader.yaml
+++ b/manifests/nabucasa/nabucasa_skyconnect_bootloader.yaml
@@ -2,7 +2,7 @@ name: SkyConnect Bootloader
device: EFR32MG21A020F512IM32
base_project: src/bootloader
filename: "{manifest_name}_{gecko_bootloader_version}"
-sdk: "gecko_sdk:4.4.4"
+sdk: "simplicity_sdk:2024.6.2"
toolchain: "12.2.1.20221205"
gbl:
diff --git a/manifests/nabucasa/skyconnect_openthread_rcp.yaml b/manifests/nabucasa/nabucasa_skyconnect_openthread_rcp.yaml
similarity index 78%
rename from manifests/nabucasa/skyconnect_openthread_rcp.yaml
rename to manifests/nabucasa/nabucasa_skyconnect_openthread_rcp.yaml
index 284e2993..6f674a46 100644
--- a/manifests/nabucasa/skyconnect_openthread_rcp.yaml
+++ b/manifests/nabucasa/nabucasa_skyconnect_openthread_rcp.yaml
@@ -1,13 +1,13 @@
name: SkyConnect OpenThread RCP
device: EFR32MG21A020F512IM32
base_project: src/openthread_rcp
-filename: "{manifest_name}_{ot_rcp_version.split('/')[-1]}_gsdk_{sdk_version}"
-sdk: "gecko_sdk:4.4.4"
+filename: "{manifest_name}_{ot_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
toolchain: "12.2.1.20221205"
gbl:
fw_type: openthread_rcp
- ot_rcp_version: dynamic
+ ot_version: dynamic
baudrate: 460800
c_defines:
@@ -28,3 +28,8 @@ c_defines:
SL_UARTDRV_USART_VCOM_RTS_PIN: 0
SL_APPLICATION_PRODUCT_ID: '{0xE9, 0x92, 0x67, 0x94, 0xBB, 0x2C, 0x4E, 0xC8, 0x9F, 0x36, 0xD9, 0xC6, 0x79, 0x4A, 0x81, 0xFB}'
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 133
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/nabucasa/skyconnect_zigbee_ncp.yaml b/manifests/nabucasa/nabucasa_skyconnect_zigbee_ncp.yaml
similarity index 58%
rename from manifests/nabucasa/skyconnect_zigbee_ncp.yaml
rename to manifests/nabucasa/nabucasa_skyconnect_zigbee_ncp.yaml
index 44d707f1..d28f723d 100644
--- a/manifests/nabucasa/skyconnect_zigbee_ncp.yaml
+++ b/manifests/nabucasa/nabucasa_skyconnect_zigbee_ncp.yaml
@@ -1,8 +1,8 @@
name: SkyConnect Zigbee
device: EFR32MG21A020F512IM32
base_project: src/zigbee_ncp
-filename: "{manifest_name}_{ezsp_version}"
-sdk: "gecko_sdk:4.4.4"
+filename: "{manifest_name}_{ezsp_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
toolchain: "12.2.1.20221205"
gbl:
@@ -10,18 +10,13 @@ gbl:
ezsp_version: dynamic
baudrate: 115200
-configuration:
- EMBER_CHILD_TABLE_SIZE: 32
+slcp_defines:
+ SL_ZIGBEE_ADDRESS_TABLE_SIZE: 32
+ SL_ZIGBEE_MULTICAST_TABLE_SIZE: 26
+ SL_ZIGBEE_ROUTE_TABLE_SIZE: 16
+ SL_ZIGBEE_DISCOVERY_TABLE_SIZE: 8
c_defines:
- EMBER_APS_UNICAST_MESSAGE_COUNT: 32
- EMBER_BINDING_TABLE_SIZE: 32
- EMBER_BROADCAST_TABLE_SIZE: 64
- EMBER_KEY_TABLE_SIZE: 12
- EMBER_MAX_END_DEVICE_CHILDREN: 32
- EMBER_PACKET_BUFFER_COUNT: 255
- EMBER_SOURCE_ROUTE_TABLE_SIZE: 200
-
SL_IOSTREAM_USART_VCOM_BAUDRATE: 115200
SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE: usartHwFlowControlCtsAndRts
@@ -41,3 +36,17 @@ c_defines:
SL_IOSTREAM_USART_VCOM_RTS_PIN: 0
SL_APPLICATION_PRODUCT_ID: '{0xE9, 0x92, 0x67, 0x94, 0xBB, 0x2C, 0x4E, 0xC8, 0x9F, 0x36, 0xD9, 0xC6, 0x79, 0x4A, 0x81, 0xFB}'
+
+ SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE: 64
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 133
+
+ SL_ZIGBEE_APS_UNICAST_MESSAGE_COUNT: 64
+ SL_ZIGBEE_BROADCAST_TABLE_SIZE: 30
+ SL_ZIGBEE_NEIGHBOR_TABLE_SIZE: 26
+ SL_ZIGBEE_SOURCE_ROUTE_TABLE_SIZE: 200
+ SL_ZIGBEE_MAX_END_DEVICE_CHILDREN: 32
+ SL_ZIGBEE_BINDING_TABLE_SIZE: 64
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/nabucasa/yellow_bootloader.yaml b/manifests/nabucasa/nabucasa_yellow_bootloader.yaml
similarity index 95%
rename from manifests/nabucasa/yellow_bootloader.yaml
rename to manifests/nabucasa/nabucasa_yellow_bootloader.yaml
index 2859c852..6f9a1704 100644
--- a/manifests/nabucasa/yellow_bootloader.yaml
+++ b/manifests/nabucasa/nabucasa_yellow_bootloader.yaml
@@ -2,7 +2,7 @@ name: Yellow Bootloader
device: MGM210PA32JIA
base_project: src/bootloader
filename: "{manifest_name}_{gecko_bootloader_version}"
-sdk: "gecko_sdk:4.4.4"
+sdk: "simplicity_sdk:2024.6.2"
toolchain: "12.2.1.20221205"
gbl:
diff --git a/manifests/nabucasa/yellow_openthread_rcp.yaml b/manifests/nabucasa/nabucasa_yellow_openthread_rcp.yaml
similarity index 80%
rename from manifests/nabucasa/yellow_openthread_rcp.yaml
rename to manifests/nabucasa/nabucasa_yellow_openthread_rcp.yaml
index d0ee8200..569beaac 100644
--- a/manifests/nabucasa/yellow_openthread_rcp.yaml
+++ b/manifests/nabucasa/nabucasa_yellow_openthread_rcp.yaml
@@ -1,13 +1,13 @@
name: Yellow OpenThread RCP
device: MGM210PA32JIA
base_project: src/openthread_rcp
-filename: "{manifest_name}_{ot_rcp_version.split('/')[-1]}_gsdk_{sdk_version}"
-sdk: "gecko_sdk:4.4.4"
+filename: "{manifest_name}_{ot_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
toolchain: "12.2.1.20221205"
gbl:
fw_type: openthread_rcp
- ot_rcp_version: dynamic
+ ot_version: dynamic
baudrate: 460800
add_components:
@@ -34,3 +34,8 @@ c_defines:
SL_SIMPLE_LED_BOARD_ACTIVITY_POLARITY: SL_SIMPLE_LED_POLARITY_ACTIVE_LOW
SL_SIMPLE_LED_BOARD_ACTIVITY_PORT: gpioPortB
SL_SIMPLE_LED_BOARD_ACTIVITY_PIN: 1
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 133
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/nabucasa/yellow_zigbee_ncp.yaml b/manifests/nabucasa/nabucasa_yellow_zigbee_ncp.yaml
similarity index 60%
rename from manifests/nabucasa/yellow_zigbee_ncp.yaml
rename to manifests/nabucasa/nabucasa_yellow_zigbee_ncp.yaml
index 1cbdd0ae..2f5340c2 100644
--- a/manifests/nabucasa/yellow_zigbee_ncp.yaml
+++ b/manifests/nabucasa/nabucasa_yellow_zigbee_ncp.yaml
@@ -1,8 +1,8 @@
name: Yellow Zigbee
device: MGM210PA32JIA
base_project: src/zigbee_ncp
-filename: "{manifest_name}_{ezsp_version}"
-sdk: "gecko_sdk:4.4.4"
+filename: "{manifest_name}_{ezsp_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
toolchain: "12.2.1.20221205"
gbl:
@@ -14,18 +14,13 @@ add_components:
- id: simple_led
instance: [board_activity]
-configuration:
- EMBER_CHILD_TABLE_SIZE: 32
+slcp_defines:
+ SL_ZIGBEE_ADDRESS_TABLE_SIZE: 32
+ SL_ZIGBEE_MULTICAST_TABLE_SIZE: 26
+ SL_ZIGBEE_ROUTE_TABLE_SIZE: 16
+ SL_ZIGBEE_DISCOVERY_TABLE_SIZE: 8
c_defines:
- EMBER_APS_UNICAST_MESSAGE_COUNT: 32
- EMBER_BINDING_TABLE_SIZE: 32
- EMBER_BROADCAST_TABLE_SIZE: 64
- EMBER_KEY_TABLE_SIZE: 12
- EMBER_MAX_END_DEVICE_CHILDREN: 32
- EMBER_PACKET_BUFFER_COUNT: 255
- EMBER_SOURCE_ROUTE_TABLE_SIZE: 200
-
SL_IOSTREAM_USART_VCOM_BAUDRATE: 115200
SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE: usartHwFlowControlCtsAndRts
@@ -47,3 +42,17 @@ c_defines:
SL_SIMPLE_LED_BOARD_ACTIVITY_POLARITY: SL_SIMPLE_LED_POLARITY_ACTIVE_LOW
SL_SIMPLE_LED_BOARD_ACTIVITY_PORT: gpioPortB
SL_SIMPLE_LED_BOARD_ACTIVITY_PIN: 1
+
+ SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE: 64
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 133
+
+ SL_ZIGBEE_APS_UNICAST_MESSAGE_COUNT: 64
+ SL_ZIGBEE_BROADCAST_TABLE_SIZE: 30
+ SL_ZIGBEE_NEIGHBOR_TABLE_SIZE: 26
+ SL_ZIGBEE_SOURCE_ROUTE_TABLE_SIZE: 200
+ SL_ZIGBEE_MAX_END_DEVICE_CHILDREN: 32
+ SL_ZIGBEE_BINDING_TABLE_SIZE: 64
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/nabucasa/zwave_stick.yaml b/manifests/nabucasa/nabucasa_zwave_stick.yaml
similarity index 97%
rename from manifests/nabucasa/zwave_stick.yaml
rename to manifests/nabucasa/nabucasa_zwave_stick.yaml
index f48ffc2b..f9028e32 100644
--- a/manifests/nabucasa/zwave_stick.yaml
+++ b/manifests/nabucasa/nabucasa_zwave_stick.yaml
@@ -25,4 +25,4 @@ c_defines:
SERIAL_API_TX_PIN: 8
SERIAL_API_RX_PORT: gpioPortA
- SERIAL_API_RX_PIN: 9
\ No newline at end of file
+ SERIAL_API_RX_PIN: 9
diff --git a/manifests/smlight/smlight_slzb06m_opentread_rcp.yaml b/manifests/smlight/smlight_slzb06m_opentread_rcp.yaml
new file mode 100644
index 00000000..aaa44141
--- /dev/null
+++ b/manifests/smlight/smlight_slzb06m_opentread_rcp.yaml
@@ -0,0 +1,36 @@
+name: SLZB-06M OpenThread RCP
+device: EFR32MG21A020F768IM32
+base_project: src/openthread_rcp
+filename: "{manifest_name}_{ot_version}_{baudrate}_{fw_variant}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: openthread_rcp
+ ot_version: dynamic
+ baudrate: 460800
+ fw_variant: no_flow
+
+c_defines:
+ SL_UARTDRV_USART_VCOM_FLOW_CONTROL_TYPE: usartHwFlowControlNone
+
+ SL_UARTDRV_USART_VCOM_PERIPHERAL: USART0
+ SL_UARTDRV_USART_VCOM_PERIPHERAL_NO: 0
+ SL_UARTDRV_USART_VCOM_BAUDRATE: 460800
+
+ SL_UARTDRV_USART_VCOM_TX_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_TX_PIN: 6
+
+ SL_UARTDRV_USART_VCOM_RX_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_RX_PIN: 5
+
+ SL_UARTDRV_USART_VCOM_CTS_PORT: 0
+ SL_UARTDRV_USART_VCOM_CTS_PIN: 0
+
+ SL_UARTDRV_USART_VCOM_RTS_PORT: 0
+ SL_UARTDRV_USART_VCOM_RTS_PIN: 0
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 80
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/smlight/smlight_slzb06m_zigbee_ncp.yaml b/manifests/smlight/smlight_slzb06m_zigbee_ncp.yaml
new file mode 100644
index 00000000..78678e2a
--- /dev/null
+++ b/manifests/smlight/smlight_slzb06m_zigbee_ncp.yaml
@@ -0,0 +1,51 @@
+name: SLZB-06M Zigbee
+device: EFR32MG21A020F768IM32
+base_project: src/zigbee_ncp
+filename: "{manifest_name}_{ezsp_version}_{baudrate}_{fw_variant}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: zigbee_ncp
+ ezsp_version: dynamic
+ baudrate: 115200
+ fw_variant: sw_flow
+
+slcp_defines:
+ SL_ZIGBEE_ADDRESS_TABLE_SIZE: 32
+ SL_ZIGBEE_MULTICAST_TABLE_SIZE: 26
+ SL_ZIGBEE_ROUTE_TABLE_SIZE: 16
+ SL_ZIGBEE_DISCOVERY_TABLE_SIZE: 8
+
+c_defines:
+ SL_IOSTREAM_USART_VCOM_BAUDRATE: 115200
+ SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE: uartFlowControlSoftware
+
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL: USART0
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL_NO: 0
+
+ SL_IOSTREAM_USART_VCOM_TX_PORT: gpioPortB
+ SL_IOSTREAM_USART_VCOM_TX_PIN: 1
+
+ SL_IOSTREAM_USART_VCOM_RX_PORT: gpioPortB
+ SL_IOSTREAM_USART_VCOM_RX_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_CTS_PORT: 0
+ SL_IOSTREAM_USART_VCOM_CTS_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_RTS_PORT: 0
+ SL_IOSTREAM_USART_VCOM_RTS_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE: 64
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 80
+
+ SL_ZIGBEE_APS_UNICAST_MESSAGE_COUNT: 64
+ SL_ZIGBEE_BROADCAST_TABLE_SIZE: 30
+ SL_ZIGBEE_NEIGHBOR_TABLE_SIZE: 26
+ SL_ZIGBEE_SOURCE_ROUTE_TABLE_SIZE: 200
+ SL_ZIGBEE_MAX_END_DEVICE_CHILDREN: 32
+ SL_ZIGBEE_BINDING_TABLE_SIZE: 64
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/smlight/smlight_slzb07Mg24_bootloader.yaml b/manifests/smlight/smlight_slzb07Mg24_bootloader.yaml
new file mode 100644
index 00000000..f3ff1add
--- /dev/null
+++ b/manifests/smlight/smlight_slzb07Mg24_bootloader.yaml
@@ -0,0 +1,33 @@
+name: SLZB-07Mg24 Bootloader
+device: EFR32MG24A020F1024IM40
+base_project: src/bootloader
+filename: "{manifest_name}_{gecko_bootloader_version}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: gecko-bootloader
+ gecko_bootloader_version: dynamic
+ baudrate: 115200
+
+c_defines:
+ SL_SERIAL_UART_FLOW_CONTROL: 1
+
+ SL_SERIAL_UART_PERIPHERAL: USART0
+ SL_SERIAL_UART_PERIPHERAL_NO: 0
+
+ SL_SERIAL_UART_TX_PORT: gpioPortA
+ SL_SERIAL_UART_TX_PIN: 6
+
+ SL_SERIAL_UART_RX_PORT: gpioPortA
+ SL_SERIAL_UART_RX_PIN: 5
+
+ SL_SERIAL_UART_CTS_PORT: gpioPortB
+ SL_SERIAL_UART_CTS_PIN: 1
+
+ SL_SERIAL_UART_RTS_PORT: gpioPortB
+ SL_SERIAL_UART_RTS_PIN: 0
+
+ SL_GPIO_ACTIVATION_POLARITY: LOW
+ SL_BTL_BUTTON_PORT: gpioPortA
+ SL_BTL_BUTTON_PIN: 0
diff --git a/manifests/smlight/smlight_slzb07Mg24_opentread_rcp.yaml b/manifests/smlight/smlight_slzb07Mg24_opentread_rcp.yaml
new file mode 100644
index 00000000..f10d65c0
--- /dev/null
+++ b/manifests/smlight/smlight_slzb07Mg24_opentread_rcp.yaml
@@ -0,0 +1,33 @@
+name: SLZB-07Mg24 OpenThread RCP
+device: EFR32MG24A020F1024IM40
+base_project: src/openthread_rcp
+filename: "{manifest_name}_{ot_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: openthread_rcp
+ ot_version: dynamic
+ baudrate: 460800
+
+c_defines:
+ SL_UARTDRV_USART_VCOM_PERIPHERAL: USART0
+ SL_UARTDRV_USART_VCOM_PERIPHERAL_NO: 0
+ SL_UARTDRV_USART_VCOM_BAUDRATE: 460800
+
+ SL_UARTDRV_USART_VCOM_TX_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_TX_PIN: 6
+
+ SL_UARTDRV_USART_VCOM_RX_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_RX_PIN: 5
+
+ SL_UARTDRV_USART_VCOM_CTS_PORT: gpioPortB
+ SL_UARTDRV_USART_VCOM_CTS_PIN: 1
+
+ SL_UARTDRV_USART_VCOM_RTS_PORT: gpioPortB
+ SL_UARTDRV_USART_VCOM_RTS_PIN: 0
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 140
+
+ SL_RAIL_UTIL_RSSI_OFFSET: 0
diff --git a/manifests/smlight/smlight_slzb07Mg24_zigbee_ncp.yaml b/manifests/smlight/smlight_slzb07Mg24_zigbee_ncp.yaml
new file mode 100644
index 00000000..a89dc1ce
--- /dev/null
+++ b/manifests/smlight/smlight_slzb07Mg24_zigbee_ncp.yaml
@@ -0,0 +1,51 @@
+name: SLZB-07Mg24 Zigbee
+device: EFR32MG24A020F1024IM40
+base_project: src/zigbee_ncp
+filename: "{manifest_name}_{ezsp_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: zigbee_ncp
+ ezsp_version: dynamic
+ baudrate: 115200
+
+slcp_defines:
+ SL_ZIGBEE_ADDRESS_TABLE_SIZE: 64
+ SL_ZIGBEE_MULTICAST_TABLE_SIZE: 26
+ SL_ZIGBEE_ROUTE_TABLE_SIZE: 16
+ SL_ZIGBEE_DISCOVERY_TABLE_SIZE: 16
+
+c_defines:
+ SL_IOSTREAM_USART_VCOM_BAUDRATE: 115200
+ SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE: usartHwFlowControlCtsAndRts
+
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL: USART0
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL_NO: 0
+
+ SL_IOSTREAM_USART_VCOM_TX_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_TX_PIN: 6
+
+ SL_IOSTREAM_USART_VCOM_RX_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_RX_PIN: 5
+
+ SL_IOSTREAM_USART_VCOM_CTS_PORT: gpioPortB
+ SL_IOSTREAM_USART_VCOM_CTS_PIN: 1
+
+ SL_IOSTREAM_USART_VCOM_RTS_PORT: gpioPortB
+ SL_IOSTREAM_USART_VCOM_RTS_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE: 64
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 140
+
+ SL_ZIGBEE_APS_UNICAST_MESSAGE_COUNT: 128
+ SL_ZIGBEE_BROADCAST_TABLE_SIZE: 30
+ SL_ZIGBEE_NEIGHBOR_TABLE_SIZE: 26
+ SL_ZIGBEE_SOURCE_ROUTE_TABLE_SIZE: 254
+ SL_ZIGBEE_MAX_END_DEVICE_CHILDREN: 64
+ SL_ZIGBEE_BINDING_TABLE_SIZE: 64
+ SL_ZIGBEE_APS_DUPLICATE_REJECTION_MAX_ENTRIES: 64
+
+ SL_RAIL_UTIL_RSSI_OFFSET: 0
diff --git a/manifests/smlight/smlight_slzb07_bootloader.yaml b/manifests/smlight/smlight_slzb07_bootloader.yaml
new file mode 100644
index 00000000..6f57fcae
--- /dev/null
+++ b/manifests/smlight/smlight_slzb07_bootloader.yaml
@@ -0,0 +1,33 @@
+name: SLZB-07 Bootloader
+device: EFR32MG21A020F768IM32
+base_project: src/bootloader
+filename: "{manifest_name}_{gecko_bootloader_version}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: gecko-bootloader
+ gecko_bootloader_version: dynamic
+ baudrate: 115200
+
+c_defines:
+ SL_SERIAL_UART_FLOW_CONTROL: 1
+
+ SL_SERIAL_UART_PERIPHERAL: USART0
+ SL_SERIAL_UART_PERIPHERAL_NO: 0
+
+ SL_SERIAL_UART_TX_PORT: gpioPortA
+ SL_SERIAL_UART_TX_PIN: 6
+
+ SL_SERIAL_UART_RX_PORT: gpioPortA
+ SL_SERIAL_UART_RX_PIN: 5
+
+ SL_SERIAL_UART_CTS_PORT: gpioPortB
+ SL_SERIAL_UART_CTS_PIN: 1
+
+ SL_SERIAL_UART_RTS_PORT: gpioPortB
+ SL_SERIAL_UART_RTS_PIN: 0
+
+ SL_GPIO_ACTIVATION_POLARITY: LOW
+ SL_BTL_BUTTON_PORT: gpioPortA
+ SL_BTL_BUTTON_PIN: 0
diff --git a/manifests/smlight/smlight_slzb07_opentread_rcp.yaml b/manifests/smlight/smlight_slzb07_opentread_rcp.yaml
new file mode 100644
index 00000000..a4dfbd03
--- /dev/null
+++ b/manifests/smlight/smlight_slzb07_opentread_rcp.yaml
@@ -0,0 +1,33 @@
+name: SLZB-07 OpenThread RCP
+device: EFR32MG21A020F768IM32
+base_project: src/openthread_rcp
+filename: "{manifest_name}_{ot_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: openthread_rcp
+ ot_version: dynamic
+ baudrate: 460800
+
+c_defines:
+ SL_UARTDRV_USART_VCOM_PERIPHERAL: USART0
+ SL_UARTDRV_USART_VCOM_PERIPHERAL_NO: 0
+ SL_UARTDRV_USART_VCOM_BAUDRATE: 460800
+
+ SL_UARTDRV_USART_VCOM_TX_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_TX_PIN: 6
+
+ SL_UARTDRV_USART_VCOM_RX_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_RX_PIN: 5
+
+ SL_UARTDRV_USART_VCOM_CTS_PORT: gpioPortB
+ SL_UARTDRV_USART_VCOM_CTS_PIN: 1
+
+ SL_UARTDRV_USART_VCOM_RTS_PORT: gpioPortB
+ SL_UARTDRV_USART_VCOM_RTS_PIN: 0
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 140
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/smlight/smlight_slzb07_zigbee_ncp.yaml b/manifests/smlight/smlight_slzb07_zigbee_ncp.yaml
new file mode 100644
index 00000000..c271beca
--- /dev/null
+++ b/manifests/smlight/smlight_slzb07_zigbee_ncp.yaml
@@ -0,0 +1,50 @@
+name: SLZB-07 Zigbee
+device: EFR32MG21A020F768IM32
+base_project: src/zigbee_ncp
+filename: "{manifest_name}_{ezsp_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: zigbee_ncp
+ ezsp_version: dynamic
+ baudrate: 115200
+
+slcp_defines:
+ SL_ZIGBEE_ADDRESS_TABLE_SIZE: 32
+ SL_ZIGBEE_MULTICAST_TABLE_SIZE: 26
+ SL_ZIGBEE_ROUTE_TABLE_SIZE: 16
+ SL_ZIGBEE_DISCOVERY_TABLE_SIZE: 8
+
+c_defines:
+ SL_IOSTREAM_USART_VCOM_BAUDRATE: 115200
+ SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE: usartHwFlowControlCtsAndRts
+
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL: USART0
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL_NO: 0
+
+ SL_IOSTREAM_USART_VCOM_TX_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_TX_PIN: 6
+
+ SL_IOSTREAM_USART_VCOM_RX_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_RX_PIN: 5
+
+ SL_IOSTREAM_USART_VCOM_CTS_PORT: gpioPortB
+ SL_IOSTREAM_USART_VCOM_CTS_PIN: 1
+
+ SL_IOSTREAM_USART_VCOM_RTS_PORT: gpioPortB
+ SL_IOSTREAM_USART_VCOM_RTS_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE: 64
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 140
+
+ SL_ZIGBEE_APS_UNICAST_MESSAGE_COUNT: 64
+ SL_ZIGBEE_BROADCAST_TABLE_SIZE: 30
+ SL_ZIGBEE_NEIGHBOR_TABLE_SIZE: 26
+ SL_ZIGBEE_SOURCE_ROUTE_TABLE_SIZE: 200
+ SL_ZIGBEE_MAX_END_DEVICE_CHILDREN: 32
+ SL_ZIGBEE_BINDING_TABLE_SIZE: 64
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/sonoff/sonoff_zbdonglee_openthread_rcp.yaml b/manifests/sonoff/sonoff_zbdonglee_openthread_rcp.yaml
new file mode 100644
index 00000000..b77f0626
--- /dev/null
+++ b/manifests/sonoff/sonoff_zbdonglee_openthread_rcp.yaml
@@ -0,0 +1,36 @@
+name: ZBDongle-E OpenThread RCP
+device: EFR32MG21A020F768IM32
+base_project: src/openthread_rcp
+filename: "{manifest_name}_{ot_version}_{baudrate}_{fw_variant}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: openthread_rcp
+ ot_version: dynamic
+ baudrate: 460800
+ fw_variant: no_flow
+
+c_defines:
+ SL_UARTDRV_USART_VCOM_FLOW_CONTROL_TYPE: usartHwFlowControlNone
+
+ SL_UARTDRV_USART_VCOM_PERIPHERAL: USART0
+ SL_UARTDRV_USART_VCOM_PERIPHERAL_NO: 0
+ SL_UARTDRV_USART_VCOM_BAUDRATE: 460800
+
+ SL_UARTDRV_USART_VCOM_TX_PORT: gpioPortB
+ SL_UARTDRV_USART_VCOM_TX_PIN: 1
+
+ SL_UARTDRV_USART_VCOM_RX_PORT: gpioPortB
+ SL_UARTDRV_USART_VCOM_RX_PIN: 0
+
+ SL_UARTDRV_USART_VCOM_CTS_PORT: 0
+ SL_UARTDRV_USART_VCOM_CTS_PIN: 0
+
+ SL_UARTDRV_USART_VCOM_RTS_PORT: 0
+ SL_UARTDRV_USART_VCOM_RTS_PIN: 0
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 128
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/sonoff/sonoff_zbdonglee_zigbee_ncp.yaml b/manifests/sonoff/sonoff_zbdonglee_zigbee_ncp.yaml
new file mode 100644
index 00000000..54604065
--- /dev/null
+++ b/manifests/sonoff/sonoff_zbdonglee_zigbee_ncp.yaml
@@ -0,0 +1,51 @@
+name: ZBDongle-E Zigbee
+device: EFR32MG21A020F768IM32
+base_project: src/zigbee_ncp
+filename: "{manifest_name}_{ezsp_version}_{baudrate}_{fw_variant}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: zigbee_ncp
+ ezsp_version: dynamic
+ baudrate: 115200
+ fw_variant: sw_flow
+
+slcp_defines:
+ SL_ZIGBEE_ADDRESS_TABLE_SIZE: 32
+ SL_ZIGBEE_MULTICAST_TABLE_SIZE: 26
+ SL_ZIGBEE_ROUTE_TABLE_SIZE: 16
+ SL_ZIGBEE_DISCOVERY_TABLE_SIZE: 8
+
+c_defines:
+ SL_IOSTREAM_USART_VCOM_BAUDRATE: 115200
+ SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE: uartFlowControlSoftware
+
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL: USART0
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL_NO: 0
+
+ SL_IOSTREAM_USART_VCOM_TX_PORT: gpioPortB
+ SL_IOSTREAM_USART_VCOM_TX_PIN: 1
+
+ SL_IOSTREAM_USART_VCOM_RX_PORT: gpioPortB
+ SL_IOSTREAM_USART_VCOM_RX_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_CTS_PORT: 0
+ SL_IOSTREAM_USART_VCOM_CTS_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_RTS_PORT: 0
+ SL_IOSTREAM_USART_VCOM_RTS_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE: 64
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 128
+
+ SL_ZIGBEE_APS_UNICAST_MESSAGE_COUNT: 64
+ SL_ZIGBEE_BROADCAST_TABLE_SIZE: 30
+ SL_ZIGBEE_NEIGHBOR_TABLE_SIZE: 26
+ SL_ZIGBEE_SOURCE_ROUTE_TABLE_SIZE: 200
+ SL_ZIGBEE_MAX_END_DEVICE_CHILDREN: 32
+ SL_ZIGBEE_BINDING_TABLE_SIZE: 64
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
diff --git a/manifests/sonoff/sonoff_zbdonglee_zigbee_router.yaml b/manifests/sonoff/sonoff_zbdonglee_zigbee_router.yaml
new file mode 100644
index 00000000..9fc85034
--- /dev/null
+++ b/manifests/sonoff/sonoff_zbdonglee_zigbee_router.yaml
@@ -0,0 +1,100 @@
+name: ZBDongle-E Zigbee
+device: EFR32MG21A020F768IM32
+base_project: src/zigbee_router
+filename: "{manifest_name}_{ezsp_version}_{baudrate}_{fw_variant}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: zigbee_router
+ ezsp_version: dynamic
+ baudrate: 115200
+ fw_variant: sw_flow
+
+add_components:
+ # Status
+ - id: simple_led
+ instance:
+ - led0
+ # BOOT
+ - id: simple_button
+ instance:
+ - btn1
+
+slcp_defines:
+ SL_ZIGBEE_ADDRESS_TABLE_SIZE: 32
+ SL_ZIGBEE_MULTICAST_TABLE_SIZE: 26
+ SL_ZIGBEE_ROUTE_TABLE_SIZE: 16
+ SL_ZIGBEE_DISCOVERY_TABLE_SIZE: 8
+
+c_defines:
+ SL_IOSTREAM_USART_VCOM_BAUDRATE: 115200
+ SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE: uartFlowControlSoftware
+
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL: USART0
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL_NO: 0
+
+ SL_IOSTREAM_USART_VCOM_TX_PORT: gpioPortB
+ SL_IOSTREAM_USART_VCOM_TX_PIN: 1
+
+ SL_IOSTREAM_USART_VCOM_RX_PORT: gpioPortB
+ SL_IOSTREAM_USART_VCOM_RX_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_CTS_PORT: 0
+ SL_IOSTREAM_USART_VCOM_CTS_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_RTS_PORT: 0
+ SL_IOSTREAM_USART_VCOM_RTS_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE: 64
+
+ SL_SIMPLE_LED_LED0_POLARITY: SL_SIMPLE_LED_POLARITY_ACTIVE_LOW
+ SL_SIMPLE_LED_LED0_PORT: gpioPortC
+ SL_SIMPLE_LED_LED0_PIN: 0
+
+ SL_SIMPLE_BUTTON_BTN1_MODE: SL_SIMPLE_BUTTON_MODE_INTERRUPT
+ SL_SIMPLE_BUTTON_BTN1_PORT: gpioPortA
+ SL_SIMPLE_BUTTON_BTN1_PIN: 0
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 128
+
+ SL_ZIGBEE_APS_UNICAST_MESSAGE_COUNT: 64
+ SL_ZIGBEE_BROADCAST_TABLE_SIZE: 30
+ SL_ZIGBEE_NEIGHBOR_TABLE_SIZE: 26
+ SL_ZIGBEE_SOURCE_ROUTE_TABLE_SIZE: 200
+ SL_ZIGBEE_MAX_END_DEVICE_CHILDREN: 32
+ SL_ZIGBEE_BINDING_TABLE_SIZE: 64
+
+ SL_RAIL_UTIL_RSSI_OFFSET: -11
+
+ # all zigbee channels
+ SL_ZIGBEE_AF_PLUGIN_NETWORK_STEERING_CHANNEL_MASK: 0x07fff800
+ SL_ZIGBEE_AF_PLUGIN_NETWORK_STEERING_RADIO_TX_POWER: 20
+ # RST button behavior:
+ # whenever the dongle is already joined
+ # a click will allow permit join (with broadcast)
+ # a >5sec press will force the adapter to leave the network
+ # whenever the dongle is not joined
+ # a click will run a scan and try to join an open network
+ # a >5sec press will factory reset the adapter
+ SL_ZIGBEE_AF_PLUGIN_BUTTON_JOINING_PERMIT_JOIN_TIMEOUT: 60
+
+json_config:
+ - file: "config/zcl/zcl_config.zap"
+ jq: |
+ (.endpointTypes[].clusters[].attributes[] | select(.name == "model identifier")).defaultValue = "DONGLE-E_R"
+
+ - file: "config/zcl/zcl_config.zap"
+ jq: |
+ (.endpointTypes[].clusters[].attributes[] | select(.name == "manufacturer name")).defaultValue = "SONOFF"
+
+ # remove OTA cluster
+ - file: "config/zcl/zcl_config.zap"
+ jq: |
+ del(.endpointTypes[].clusters[] | select(.name == "Over the Air Bootloading"))
+
+ # remove Occupancy cluster
+ - file: "config/zcl/zcl_config.zap"
+ jq: |
+ del(.endpointTypes[].clusters[] | select(.name == "Occupancy Sensing"))
diff --git a/manifests/sparkfun/sparkfun_mgm240p_bootloader.yaml b/manifests/sparkfun/sparkfun_mgm240p_bootloader.yaml
new file mode 100644
index 00000000..8a37fa14
--- /dev/null
+++ b/manifests/sparkfun/sparkfun_mgm240p_bootloader.yaml
@@ -0,0 +1,33 @@
+name: MGM240P Bootloader
+device: MGM240PB32VNA
+base_project: src/bootloader
+filename: "{manifest_name}_{gecko_bootloader_version}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: gecko-bootloader
+ gecko_bootloader_version: dynamic
+ baudrate: 115200
+
+c_defines:
+ SL_SERIAL_UART_FLOW_CONTROL: 0
+
+ SL_SERIAL_UART_PERIPHERAL: USART0
+ SL_SERIAL_UART_PERIPHERAL_NO: 0
+
+ SL_SERIAL_UART_TX_PORT: gpioPortA
+ SL_SERIAL_UART_TX_PIN: 5
+
+ SL_SERIAL_UART_RX_PORT: gpioPortA
+ SL_SERIAL_UART_RX_PIN: 6
+
+ SL_SERIAL_UART_CTS_PORT: 0
+ SL_SERIAL_UART_CTS_PIN: 0
+
+ SL_SERIAL_UART_RTS_PORT: 0
+ SL_SERIAL_UART_RTS_PIN: 0
+
+ SL_GPIO_ACTIVATION_POLARITY: LOW
+ SL_BTL_BUTTON_PORT: gpioPortC
+ SL_BTL_BUTTON_PIN: 0
diff --git a/manifests/sparkfun/sparkfun_mgm240p_openthread_rcp.yaml b/manifests/sparkfun/sparkfun_mgm240p_openthread_rcp.yaml
new file mode 100644
index 00000000..1c5b1731
--- /dev/null
+++ b/manifests/sparkfun/sparkfun_mgm240p_openthread_rcp.yaml
@@ -0,0 +1,36 @@
+name: MGM240P OpenThread RCP
+device: MGM240PB32VNA
+base_project: src/openthread_rcp
+filename: "{manifest_name}_{ot_version}_{baudrate}_{fw_variant}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: openthread_rcp
+ ot_version: dynamic
+ baudrate: 460800
+ fw_variant: no_flow
+
+c_defines:
+ SL_UARTDRV_USART_VCOM_FLOW_CONTROL_TYPE: usartHwFlowControlNone
+
+ SL_UARTDRV_USART_VCOM_PERIPHERAL: USART0
+ SL_UARTDRV_USART_VCOM_PERIPHERAL_NO: 0
+ SL_UARTDRV_USART_VCOM_BAUDRATE: 460800
+
+ SL_UARTDRV_USART_VCOM_TX_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_TX_PIN: 5
+
+ SL_UARTDRV_USART_VCOM_RX_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_RX_PIN: 6
+
+ SL_UARTDRV_USART_VCOM_CTS_PORT: 0
+ SL_UARTDRV_USART_VCOM_CTS_PIN: 0
+
+ SL_UARTDRV_USART_VCOM_RTS_PORT: 0
+ SL_UARTDRV_USART_VCOM_RTS_PIN: 0
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 140
+
+ SL_RAIL_UTIL_RSSI_OFFSET: 0
diff --git a/manifests/sparkfun/sparkfun_mgm240p_zigbee_ncp.yaml b/manifests/sparkfun/sparkfun_mgm240p_zigbee_ncp.yaml
new file mode 100644
index 00000000..d3244499
--- /dev/null
+++ b/manifests/sparkfun/sparkfun_mgm240p_zigbee_ncp.yaml
@@ -0,0 +1,51 @@
+name: MGM240P Zigbee
+device: MGM240PB32VNA
+base_project: src/zigbee_ncp
+filename: "{manifest_name}_{ezsp_version}_{baudrate}_{fw_variant}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: zigbee_ncp
+ ezsp_version: dynamic
+ baudrate: 115200
+ fw_variant: sw_flow
+
+slcp_defines:
+ SL_ZIGBEE_ADDRESS_TABLE_SIZE: 32
+ SL_ZIGBEE_MULTICAST_TABLE_SIZE: 26
+ SL_ZIGBEE_ROUTE_TABLE_SIZE: 16
+ SL_ZIGBEE_DISCOVERY_TABLE_SIZE: 16
+
+c_defines:
+ SL_IOSTREAM_USART_VCOM_BAUDRATE: 115200
+ SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE: uartFlowControlSoftware
+
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL: USART0
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL_NO: 0
+
+ SL_IOSTREAM_USART_VCOM_TX_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_TX_PIN: 5
+
+ SL_IOSTREAM_USART_VCOM_RX_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_RX_PIN: 6
+
+ SL_IOSTREAM_USART_VCOM_CTS_PORT: 0
+ SL_IOSTREAM_USART_VCOM_CTS_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_RTS_PORT: 0
+ SL_IOSTREAM_USART_VCOM_RTS_PIN: 0
+
+ SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE: 64
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 140
+
+ SL_ZIGBEE_APS_UNICAST_MESSAGE_COUNT: 64
+ SL_ZIGBEE_BROADCAST_TABLE_SIZE: 30
+ SL_ZIGBEE_NEIGHBOR_TABLE_SIZE: 26
+ SL_ZIGBEE_SOURCE_ROUTE_TABLE_SIZE: 254
+ SL_ZIGBEE_MAX_END_DEVICE_CHILDREN: 32
+ SL_ZIGBEE_BINDING_TABLE_SIZE: 64
+
+ SL_RAIL_UTIL_RSSI_OFFSET: 0
diff --git a/manifests/tubeszb/tubeszb-mgm24-openthread_rcp.yaml b/manifests/tubeszb/tubeszb-mgm24-openthread_rcp.yaml
new file mode 100644
index 00000000..09e8c81b
--- /dev/null
+++ b/manifests/tubeszb/tubeszb-mgm24-openthread_rcp.yaml
@@ -0,0 +1,33 @@
+name: TubesZB MGM24 Zigbee
+device: MGM240PA32VNN
+base_project: src/openthread_rcp
+filename: "{manifest_name}_{ot_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: openthread_rcp
+ ot_version: dynamic
+ baudrate: 460800
+
+c_defines:
+ SL_UARTDRV_USART_VCOM_PERIPHERAL: USART0
+ SL_UARTDRV_USART_VCOM_PERIPHERAL_NO: 0
+ SL_UARTDRV_USART_VCOM_BAUDRATE: 460800
+
+ SL_UARTDRV_USART_VCOM_TX_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_TX_PIN: 6
+
+ SL_UARTDRV_USART_VCOM_RX_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_RX_PIN: 5
+
+ SL_UARTDRV_USART_VCOM_CTS_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_CTS_PIN: 7
+
+ SL_UARTDRV_USART_VCOM_RTS_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_RTS_PIN: 8
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 140
+
+ SL_RAIL_UTIL_RSSI_OFFSET: 0
diff --git a/manifests/tubeszb/tubeszb-mgm24-zigbee_ncp.yaml b/manifests/tubeszb/tubeszb-mgm24-zigbee_ncp.yaml
new file mode 100644
index 00000000..8a6d355f
--- /dev/null
+++ b/manifests/tubeszb/tubeszb-mgm24-zigbee_ncp.yaml
@@ -0,0 +1,51 @@
+name: TubesZB MGM24 Zigbee
+device: MGM240PA32VNN
+base_project: src/zigbee_ncp
+filename: "{manifest_name}_{ezsp_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: zigbee_ncp
+ ezsp_version: dynamic
+ baudrate: 115200
+
+slcp_defines:
+ SL_ZIGBEE_ADDRESS_TABLE_SIZE: 64
+ SL_ZIGBEE_MULTICAST_TABLE_SIZE: 26
+ SL_ZIGBEE_ROUTE_TABLE_SIZE: 16
+ SL_ZIGBEE_DISCOVERY_TABLE_SIZE: 16
+
+c_defines:
+ SL_IOSTREAM_USART_VCOM_BAUDRATE: 115200
+ SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE: usartHwFlowControlCtsAndRts
+
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL: USART0
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL_NO: 0
+
+ SL_IOSTREAM_USART_VCOM_TX_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_TX_PIN: 6
+
+ SL_IOSTREAM_USART_VCOM_RX_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_RX_PIN: 5
+
+ SL_IOSTREAM_USART_VCOM_CTS_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_CTS_PIN: 7
+
+ SL_IOSTREAM_USART_VCOM_RTS_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_RTS_PIN: 8
+
+ SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE: 128
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 140
+
+ SL_ZIGBEE_APS_UNICAST_MESSAGE_COUNT: 128
+ SL_ZIGBEE_BROADCAST_TABLE_SIZE: 30
+ SL_ZIGBEE_NEIGHBOR_TABLE_SIZE: 26
+ SL_ZIGBEE_SOURCE_ROUTE_TABLE_SIZE: 254
+ SL_ZIGBEE_MAX_END_DEVICE_CHILDREN: 64
+ SL_ZIGBEE_BINDING_TABLE_SIZE: 64
+ SL_ZIGBEE_APS_DUPLICATE_REJECTION_MAX_ENTRIES: 64
+
+ SL_RAIL_UTIL_RSSI_OFFSET: 0
diff --git a/manifests/tubeszb/tubeszb-mgm24PB-openthread_rcp.yaml b/manifests/tubeszb/tubeszb-mgm24PB-openthread_rcp.yaml
new file mode 100644
index 00000000..cd22181e
--- /dev/null
+++ b/manifests/tubeszb/tubeszb-mgm24PB-openthread_rcp.yaml
@@ -0,0 +1,33 @@
+name: TubesZB MGM24PB Zigbee
+device: MGM240PB32VNN
+base_project: src/openthread_rcp
+filename: "{manifest_name}_{ot_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: openthread_rcp
+ ot_version: dynamic
+ baudrate: 460800
+
+c_defines:
+ SL_UARTDRV_USART_VCOM_PERIPHERAL: USART0
+ SL_UARTDRV_USART_VCOM_PERIPHERAL_NO: 0
+ SL_UARTDRV_USART_VCOM_BAUDRATE: 460800
+
+ SL_UARTDRV_USART_VCOM_TX_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_TX_PIN: 6
+
+ SL_UARTDRV_USART_VCOM_RX_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_RX_PIN: 5
+
+ SL_UARTDRV_USART_VCOM_CTS_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_CTS_PIN: 7
+
+ SL_UARTDRV_USART_VCOM_RTS_PORT: gpioPortA
+ SL_UARTDRV_USART_VCOM_RTS_PIN: 8
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 140
+
+ SL_RAIL_UTIL_RSSI_OFFSET: 0
diff --git a/manifests/tubeszb/tubeszb-mgm24PB-zigbee_ncp.yaml b/manifests/tubeszb/tubeszb-mgm24PB-zigbee_ncp.yaml
new file mode 100644
index 00000000..495cac33
--- /dev/null
+++ b/manifests/tubeszb/tubeszb-mgm24PB-zigbee_ncp.yaml
@@ -0,0 +1,51 @@
+name: TubesZB MGM24PB Zigbee
+device: MGM240PB32VNN
+base_project: src/zigbee_ncp
+filename: "{manifest_name}_{ezsp_version}_{baudrate}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: zigbee_ncp
+ ezsp_version: dynamic
+ baudrate: 115200
+
+slcp_defines:
+ SL_ZIGBEE_ADDRESS_TABLE_SIZE: 64
+ SL_ZIGBEE_MULTICAST_TABLE_SIZE: 26
+ SL_ZIGBEE_ROUTE_TABLE_SIZE: 16
+ SL_ZIGBEE_DISCOVERY_TABLE_SIZE: 16
+
+c_defines:
+ SL_IOSTREAM_USART_VCOM_BAUDRATE: 115200
+ SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE: usartHwFlowControlCtsAndRts
+
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL: USART0
+ SL_IOSTREAM_USART_VCOM_PERIPHERAL_NO: 0
+
+ SL_IOSTREAM_USART_VCOM_TX_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_TX_PIN: 6
+
+ SL_IOSTREAM_USART_VCOM_RX_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_RX_PIN: 5
+
+ SL_IOSTREAM_USART_VCOM_CTS_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_CTS_PIN: 7
+
+ SL_IOSTREAM_USART_VCOM_RTS_PORT: gpioPortA
+ SL_IOSTREAM_USART_VCOM_RTS_PIN: 8
+
+ SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE: 128
+
+ SL_CLOCK_MANAGER_HFXO_EN: 1
+ SL_CLOCK_MANAGER_HFXO_CTUNE: 140
+
+ SL_ZIGBEE_APS_UNICAST_MESSAGE_COUNT: 128
+ SL_ZIGBEE_BROADCAST_TABLE_SIZE: 30
+ SL_ZIGBEE_NEIGHBOR_TABLE_SIZE: 26
+ SL_ZIGBEE_SOURCE_ROUTE_TABLE_SIZE: 254
+ SL_ZIGBEE_MAX_END_DEVICE_CHILDREN: 64
+ SL_ZIGBEE_BINDING_TABLE_SIZE: 64
+ SL_ZIGBEE_APS_DUPLICATE_REJECTION_MAX_ENTRIES: 64
+
+ SL_RAIL_UTIL_RSSI_OFFSET: 0
diff --git a/manifests/tubeszb/tubeszb_MGM240PB_bootloader.yaml b/manifests/tubeszb/tubeszb_MGM240PB_bootloader.yaml
new file mode 100644
index 00000000..6a18cbf4
--- /dev/null
+++ b/manifests/tubeszb/tubeszb_MGM240PB_bootloader.yaml
@@ -0,0 +1,33 @@
+name: Yellow Bootloader
+device: MGM240PB32VNN
+base_project: src/bootloader
+filename: "{manifest_name}_{gecko_bootloader_version}"
+sdk: "simplicity_sdk:2024.6.2"
+toolchain: "12.2.1.20221205"
+
+gbl:
+ fw_type: gecko-bootloader
+ gecko_bootloader_version: dynamic
+ baudrate: 115200
+
+c_defines:
+ SL_SERIAL_UART_FLOW_CONTROL: 1
+
+ SL_SERIAL_UART_PERIPHERAL: USART0
+ SL_SERIAL_UART_PERIPHERAL_NO: 0
+
+ SL_SERIAL_UART_TX_PORT: gpioPortA
+ SL_SERIAL_UART_TX_PIN: 6
+
+ SL_SERIAL_UART_RX_PORT: gpioPortA
+ SL_SERIAL_UART_RX_PIN: 5
+
+ SL_SERIAL_UART_CTS_PORT: gpioPortA
+ SL_SERIAL_UART_CTS_PIN: 7
+
+ SL_SERIAL_UART_RTS_PORT: gpioPortA
+ SL_SERIAL_UART_RTS_PIN: 8
+
+ SL_GPIO_ACTIVATION_POLARITY: LOW
+ SL_BTL_BUTTON_PORT: gpioPortA
+ SL_BTL_BUTTON_PIN: 0
diff --git a/src/openthread_rcp/app.c b/src/openthread_rcp/app.c
index b3af0528..ca5d42a7 100755
--- a/src/openthread_rcp/app.c
+++ b/src/openthread_rcp/app.c
@@ -1,41 +1,72 @@
-/***************************************************************************//**
+/*******************************************************************************
* @file
* @brief Core application logic.
*******************************************************************************
* # License
- * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ * Copyright 2024 Silicon Laboratories Inc. www.silabs.com
*******************************************************************************
*
- * The licensor of this software is Silicon Laboratories Inc. Your use of this
- * software is governed by the terms of Silicon Labs Master Software License
- * Agreement (MSLA) available at
- * www.silabs.com/about-us/legal/master-software-license-agreement. This
- * software is distributed to you in Source Code format and is governed by the
- * sections of the MSLA applicable to Source Code.
+ * SPDX-License-Identifier: Zlib
+ *
+ * The licensor of this software is Silicon Laboratories Inc.
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
*
******************************************************************************/
+
#include
#include
#include
-#include
#include
+#include
#include
-#include "openthread-system.h"
#include "app.h"
+#include "openthread-system.h"
#include "reset_util.h"
+#include "sl_component_catalog.h"
+#include "sl_memory_manager.h"
+
+#if OPENTHREAD_CONFIG_MULTIPAN_RCP_ENABLE
+#if OPENTHREAD_CONFIG_MULTIPLE_STATIC_INSTANCE_ENABLE == 0
+#error "Support for multiple OpenThread static instance is disabled."
+#endif
+otInstance *sInstances[OPENTHREAD_CONFIG_MULTIPLE_INSTANCE_NUM] = {NULL};
+#endif // OPENTHREAD_CONFIG_MULTIPAN_RCP_ENABLE
+
/**
* This function initializes the NCP app.
*
* @param[in] aInstance The OpenThread instance structure.
*
*/
+#if OPENTHREAD_CONFIG_MULTIPAN_RCP_ENABLE
+extern void otAppNcpInitMulti(otInstance **aInstances, uint8_t aCount);
+#else
extern void otAppNcpInit(otInstance *aInstance);
+#endif
-static otInstance* sInstance = NULL;
+#if OPENTHREAD_CONFIG_MULTIPLE_INSTANCE_ENABLE && !OPENTHREAD_CONFIG_MULTIPAN_RCP_ENABLE
+static uint8_t *sOtInstanceBuffer = NULL;
+#endif
+static otInstance *sInstance = NULL;
otInstance *otGetInstance(void)
{
@@ -44,19 +75,26 @@ otInstance *otGetInstance(void)
void sl_ot_create_instance(void)
{
-#if OPENTHREAD_CONFIG_MULTIPLE_INSTANCE_ENABLE
- size_t otInstanceBufferLength = 0;
- uint8_t *otInstanceBuffer = NULL;
+#if OPENTHREAD_CONFIG_MULTIPAN_RCP_ENABLE
+ for (int i = 0; i < OPENTHREAD_CONFIG_MULTIPLE_INSTANCE_NUM; i++)
+ {
+ sInstances[i] = otInstanceInitMultiple(i);
+
+ assert(sInstances[i]);
+ }
+ sInstance = sInstances[0];
+#elif OPENTHREAD_CONFIG_MULTIPLE_INSTANCE_ENABLE && !OPENTHREAD_CONFIG_MULTIPAN_RCP_ENABLE
+ size_t otInstanceBufferLength = 0;
// Call to query the buffer size
(void)otInstanceInit(NULL, &otInstanceBufferLength);
// Call to allocate the buffer
- otInstanceBuffer = (uint8_t *)malloc(otInstanceBufferLength);
- assert(otInstanceBuffer);
+ sOtInstanceBuffer = (uint8_t *)sl_malloc(otInstanceBufferLength);
+ assert(sOtInstanceBuffer);
// Initialize OpenThread with the buffer
- sInstance = otInstanceInit(otInstanceBuffer, &otInstanceBufferLength);
+ sInstance = otInstanceInit(sOtInstanceBuffer, &otInstanceBufferLength);
#else
sInstance = otInstanceInitSingle();
#endif
@@ -65,10 +103,14 @@ void sl_ot_create_instance(void)
void sl_ot_ncp_init(void)
{
+#if OPENTHREAD_CONFIG_MULTIPAN_RCP_ENABLE
+ otAppNcpInitMulti(sInstances, OPENTHREAD_CONFIG_MULTIPLE_INSTANCE_NUM);
+#else
otAppNcpInit(sInstance);
+#endif
}
-/**************************************************************************//**
+/******************************************************************************
* Application Init.
*****************************************************************************/
@@ -77,7 +119,7 @@ void app_init(void)
OT_SETUP_RESET_JUMP(argv);
}
-/**************************************************************************//**
+/******************************************************************************
* Application Process Action.
*****************************************************************************/
void app_process_action(void)
@@ -86,14 +128,14 @@ void app_process_action(void)
otSysProcessDrivers(sInstance);
}
-/**************************************************************************//**
+/******************************************************************************
* Application Exit.
*****************************************************************************/
void app_exit(void)
{
otInstanceFinalize(sInstance);
-#if OPENTHREAD_CONFIG_MULTIPLE_INSTANCE_ENABLE
- free(otInstanceBuffer);
+#if OPENTHREAD_CONFIG_MULTIPLE_INSTANCE_ENABLE && !OPENTHREAD_CONFIG_MULTIPAN_RCP_ENABLE
+ sl_free(sOtInstanceBuffer);
#endif
// TO DO : pseudo reset?
}
diff --git a/src/openthread_rcp/app.h b/src/openthread_rcp/app.h
index 4a8493a9..ac672d5f 100755
--- a/src/openthread_rcp/app.h
+++ b/src/openthread_rcp/app.h
@@ -1,36 +1,49 @@
-/***************************************************************************//**
+/*******************************************************************************
* @file
* @brief Application interface provided to main().
*******************************************************************************
* # License
- * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ * Copyright 2024 Silicon Laboratories Inc. www.silabs.com
*******************************************************************************
*
- * The licensor of this software is Silicon Laboratories Inc. Your use of this
- * software is governed by the terms of Silicon Labs Master Software License
- * Agreement (MSLA) available at
- * www.silabs.com/about-us/legal/master-software-license-agreement. This
- * software is distributed to you in Source Code format and is governed by the
- * sections of the MSLA applicable to Source Code.
+ * SPDX-License-Identifier: Zlib
+ *
+ * The licensor of this software is Silicon Laboratories Inc.
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
*
******************************************************************************/
#ifndef APP_H
#define APP_H
-/**************************************************************************//**
+/******************************************************************************
* Application Init.
*****************************************************************************/
void app_init(void);
-/**************************************************************************//**
+/******************************************************************************
* Application Exit.
*****************************************************************************/
void app_exit(void);
-/**************************************************************************//**
+/******************************************************************************
* Application Process Action.
*****************************************************************************/
void app_process_action(void);
-#endif
\ No newline at end of file
+#endif
diff --git a/src/openthread_rcp/main.c b/src/openthread_rcp/main.c
index 143e4cdf..81a37f0b 100644
--- a/src/openthread_rcp/main.c
+++ b/src/openthread_rcp/main.c
@@ -1,22 +1,36 @@
-/***************************************************************************//**
+/*******************************************************************************
* @file
* @brief main() function.
*******************************************************************************
* # License
- * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ * Copyright 2024 Silicon Laboratories Inc. www.silabs.com
*******************************************************************************
*
- * The licensor of this software is Silicon Laboratories Inc. Your use of this
- * software is governed by the terms of Silicon Labs Master Software License
- * Agreement (MSLA) available at
- * www.silabs.com/about-us/legal/master-software-license-agreement. This
- * software is distributed to you in Source Code format and is governed by the
- * sections of the MSLA applicable to Source Code.
+ * SPDX-License-Identifier: Zlib
+ *
+ * The licensor of this software is Silicon Laboratories Inc.
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty. In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ * claim that you wrote the original software. If you use this software
+ * in a product, an acknowledgment in the product documentation would be
+ * appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ * misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
*
******************************************************************************/
+
+#include "app.h"
#include "sl_component_catalog.h"
#include "sl_system_init.h"
-#include "app.h"
#if defined(SL_CATALOG_POWER_MANAGER_PRESENT)
#include "sl_power_manager.h"
#endif // SL_CATALOG_POWER_MANAGER_PRESENT
@@ -28,33 +42,34 @@
int main(void)
{
- // Initialize Silicon Labs device, system, service(s) and protocol stack(s).
- // Note that if the kernel is present, processing task(s) will be created by
- // this call.
- sl_system_init();
+ // Initialize Silicon Labs device, system, service(s) and protocol stack(s).
+ // Note that if the kernel is present, processing task(s) will be created by
+ // this call.
+ sl_system_init();
- // Initialize the application. For example, create periodic timer(s) or
- // task(s) if the kernel is present.
- app_init();
+ // Initialize the application. For example, create periodic timer(s) or
+ // task(s) if the kernel is present.
+ app_init();
#if defined(SL_CATALOG_KERNEL_PRESENT)
- // Start the kernel. Task(s) created in app_init() will start running.
- sl_system_kernel_start();
+ // Start the kernel. Task(s) created in app_init() will start running.
+ sl_system_kernel_start();
#else // SL_CATALOG_KERNEL_PRESENT
- while (1) {
- // Do not remove this call: Silicon Labs components process action routine
- // must be called from the super loop.
- sl_system_process_action();
+ while (1)
+ {
+ // Do not remove this call: Silicon Labs components process action routine
+ // must be called from the super loop.
+ sl_system_process_action();
- // Application process.
- app_process_action();
+ // Application process.
+ app_process_action();
#if defined(SL_CATALOG_POWER_MANAGER_PRESENT)
- // Let the CPU go to sleep if the system allows it.
- sl_power_manager_sleep();
+ // Let the CPU go to sleep if the system allows it.
+ sl_power_manager_sleep();
#endif
- }
- // Clean-up when exiting the application.
- app_exit();
+ }
+ // Clean-up when exiting the application.
+ app_exit();
#endif // SL_CATALOG_KERNEL_PRESENT
-}
\ No newline at end of file
+}
diff --git a/src/openthread_rcp/openthread_rcp.slcp b/src/openthread_rcp/openthread_rcp.slcp
index 3294e605..a74faa41 100644
--- a/src/openthread_rcp/openthread_rcp.slcp
+++ b/src/openthread_rcp/openthread_rcp.slcp
@@ -14,6 +14,7 @@ component:
- vcom
- id: rail_util_pti
- id: bootloader_interface
+ - id: clock_manager
include:
- path: .
@@ -40,12 +41,11 @@ configuration:
- name: BUFFER_SIZE_UP
value: 768
condition: [ot_rtt_log]
- - name: BUFFER_SIZE_UP
- value: 128
- condition: [ot_rtt_log, device_family_efr32mg1]
- name: BUFFER_SIZE_DOWN
value: 0
condition: [ot_rtt_log]
+ - name: CIRCULAR_QUEUE_LEN_MAX
+ value: 16
filter:
- name: "Wireless Technology"
diff --git a/src/openthread_rcp/reset_util.h b/src/openthread_rcp/reset_util.h
index 52f56813..56e75da9 100644
--- a/src/openthread_rcp/reset_util.h
+++ b/src/openthread_rcp/reset_util.h
@@ -32,8 +32,8 @@
#if defined(OPENTHREAD_ENABLE_COVERAGE) && OPENTHREAD_ENABLE_COVERAGE && defined(__GNUC__)
#if __GNUC__ >= 11 || (defined(__clang__) && (defined(__APPLE__) && (__clang_major__ >= 13)) || \
(!defined(__APPLE__) && (__clang_major__ >= 12)))
-void __gcov_dump();
-void __gcov_reset();
+void __gcov_dump(void);
+void __gcov_reset(void);
static void flush_gcov(void)
{
diff --git a/src/zigbee_ncp/app.c b/src/zigbee_ncp/app.c
index 6725bfc6..0cc620ad 100644
--- a/src/zigbee_ncp/app.c
+++ b/src/zigbee_ncp/app.c
@@ -16,136 +16,16 @@
******************************************************************************/
#include PLATFORM_HEADER
-#include "ember.h"
-#include "ember-types.h"
-#include "ezsp-enum.h"
-#include "random.h"
-#include "mac-flat-header.h"
-
-#include "stack/include/message.h"
-#include "app/ncp/plugin/xncp/xncp.h"
-#include "em_usart.h"
-
-#include "config/xncp_config.h"
-#include "config/sl_iostream_usart_vcom_config.h"
-
-
-#define BUILD_UINT16(low, high) (((uint16_t)(low) << 0) | ((uint16_t)(high) << 8))
-
-#define FEATURE_MEMBER_OF_ALL_GROUPS (0b00000000000000000000000000000001)
-#define FEATURE_MANUAL_SOURCE_ROUTE (0b00000000000000000000000000000010)
-#define FEATURE_MFG_TOKEN_OVERRIDES (0b00000000000000000000000000000100)
-#define FEATURE_BUILD_STRING (0b00000000000000000000000000001000)
-#define FEATURE_FLOW_CONTROL_TYPE (0b00000000000000000000000000010000)
-
-#define SUPPORTED_FEATURES ( \
- FEATURE_MEMBER_OF_ALL_GROUPS \
- | FEATURE_MANUAL_SOURCE_ROUTE \
- | FEATURE_MFG_TOKEN_OVERRIDES \
- | FEATURE_BUILD_STRING \
- | FEATURE_FLOW_CONTROL_TYPE \
-)
-
-extern sli_zigbee_route_table_entry_t sli_zigbee_route_table[];
-extern uint8_t sli_zigbee_route_table_size;
-
-/*
- * Indicates whether this entry is active (0), being
- * discovered (1), unused (3), or validating (4).
- */
-typedef enum {
- EMBER_ROUTE_ACTIVE = 0,
- EMBER_ROUTE_BEING_DISCOVERED = 1,
- EMBER_ROUTE_UNUSED = 3,
- EMBER_ROUTE_VALIDATING = 4
-} EmberRouteStatus;
-
-
-typedef enum {
- XNCP_FLOW_CONTROL_TYPE_SOFTWARE = 0x00,
- XNCP_FLOW_CONTROL_TYPE_HARDWARE = 0x01,
-} XncpFlowControlType;
-
-typedef enum {
- XNCP_CMD_GET_SUPPORTED_FEATURES_REQ = 0x0000,
- XNCP_CMD_SET_SOURCE_ROUTE_REQ = 0x0001,
- XNCP_CMD_GET_MFG_TOKEN_OVERRIDE_REQ = 0x0002,
- XNCP_CMD_GET_BUILD_STRING_REQ = 0x0003,
- XNCP_CMD_GET_FLOW_CONTROL_TYPE_REQ = 0x0004,
-
- XNCP_CMD_GET_SUPPORTED_FEATURES_RSP = XNCP_CMD_GET_SUPPORTED_FEATURES_REQ | 0x8000,
- XNCP_CMD_SET_SOURCE_ROUTE_RSP = XNCP_CMD_SET_SOURCE_ROUTE_REQ | 0x8000,
- XNCP_CMD_GET_MFG_TOKEN_OVERRIDE_RSP = XNCP_CMD_GET_MFG_TOKEN_OVERRIDE_REQ | 0x8000,
- XNCP_CMD_GET_BUILD_STRING_RSP = XNCP_CMD_GET_BUILD_STRING_REQ | 0x8000,
- XNCP_CMD_GET_FLOW_CONTROL_TYPE_RSP = XNCP_CMD_GET_FLOW_CONTROL_TYPE_REQ | 0x8000,
-
- XNCP_CMD_UNKNOWN = 0xFFFF
-} XncpCommand;
-
-typedef struct ManualSourceRoute {
- bool active;
- uint16_t destination;
- uint8_t num_relays;
- uint16_t relays[EMBER_MAX_SOURCE_ROUTE_RELAY_COUNT];
-} ManualSourceRoute;
-
-ManualSourceRoute manual_source_routes[XNCP_MANUAL_SOURCE_ROUTE_TABLE_SIZE];
-
-
-ManualSourceRoute* get_manual_source_route(EmberNodeId destination)
-{
- uint8_t index = 0xFF;
-
- for (uint8_t i = 0; i < XNCP_MANUAL_SOURCE_ROUTE_TABLE_SIZE; i++) {
- if (manual_source_routes[i].active && (manual_source_routes[i].destination == destination)) {
- index = i;
- break;
- }
- }
-
- if (index == 0xFF) {
- return NULL;
- }
-
- return &manual_source_routes[index];
-}
-
-
-sli_zigbee_route_table_entry_t* find_free_routing_table_entry(EmberNodeId destination) {
- uint8_t index = 0xFF;
-
- sli_zigbee_route_table_entry_t *route_table_entry = NULL;
-
- for (uint8_t i = 0; i < sli_zigbee_route_table_size; i++) {
- route_table_entry = &sli_zigbee_route_table[i];
-
- if (route_table_entry->destination == destination) {
- // Perfer a route to the destination, if one exists
- return route_table_entry;
- } else if (route_table_entry->status == EMBER_ROUTE_UNUSED) {
- // Otherwise, keep track of the most recent unused route
- index = i;
- continue;
- }
- }
-
- // If we have no free route slots, we still need to insert somewhere. Pick at random.
- if (index == 0xFF) {
- index = emberGetPseudoRandomNumber() % sli_zigbee_route_table_size;
- }
-
- return &sli_zigbee_route_table[index];
-}
-
+#include "sl_zigbee.h"
//----------------------
// Implemented Callbacks
/** @brief
*
- * Application framework equivalent of ::emberRadioNeedsCalibratingHandler
+ * Application framework equivalent of ::sl_zigbee_radio_needs_calibrating_handler
*/
-void emberAfRadioNeedsCalibratingCallback(void)
+void sl_zigbee_af_radio_needs_calibrating_cb(void)
{
sl_mac_calibrate_current_channel();
}
@@ -153,279 +33,6 @@ void emberAfRadioNeedsCalibratingCallback(void)
/** @brief Init
* Application init function
*/
-void emberAfMainInitCallback(void)
-{
- for (uint8_t i = 0; i < XNCP_MANUAL_SOURCE_ROUTE_TABLE_SIZE; i++) {
- manual_source_routes[i].active = false;
- }
-}
-
-/** @brief Incoming packet filter callback
- *
- * Filters and/or mutates incoming packets. Currently used only for wildcard multicast
- * group membership.
- */
-EmberPacketAction sli_zigbee_af_packet_handoff_incoming_callback(EmberZigbeePacketType packetType,
- EmberMessageBuffer packetBuffer,
- uint8_t index,
- void *data)
-{
- if (packetType != EMBER_ZIGBEE_PACKET_TYPE_APS_DATA) {
- return EMBER_ACCEPT_PACKET;
- }
-
- uint8_t* packetData = emberMessageBufferContents(packetBuffer);
- uint16_t packetSize = emberMessageBufferLength(packetBuffer);
-
- // Skip over the 802.15.4 header to the payload
- uint8_t payload_offset = sl_mac_flat_field_offset(packetData, true, EMBER_PH_FIELD_MAC_PAYLOAD);
- packetData += payload_offset;
- packetSize -= payload_offset;
-
- if (packetSize < 3) {
- return EMBER_ACCEPT_PACKET;
- }
-
- uint8_t deliveryMode = (packetData[0] & 0b00001100) >> 2;
-
- // Only look at multicast packets
- if (deliveryMode != 0x03) {
- return EMBER_ACCEPT_PACKET;
- }
-
- // Take ownership over the first entry and continuously rewrite it
- EmberMulticastTableEntry *tableEntry = &(sl_zigbee_get_multicast_table()[0]);
-
- tableEntry->endpoint = 1;
- tableEntry->multicastId = BUILD_UINT16(packetData[1], packetData[2]);
- tableEntry->networkIndex = 0;
-
- return EMBER_ACCEPT_PACKET;
-}
-
-
-/** @brief Outgoing packet filter callback
- *
- * Filters and/or mutates outgoing packets.
- */
-EmberPacketAction sli_zigbee_af_packet_handoff_outgoing_callback(EmberZigbeePacketType packetType,
- EmberMessageBuffer packetBuffer,
- uint8_t index,
- void *data)
+void sl_zigbee_af_main_init_cb(void)
{
- return EMBER_ACCEPT_PACKET;
-}
-
-
-void nc_zigbee_override_append_source_route(EmberNodeId destination,
- EmberMessageBuffer *header,
- bool *consumed)
-{
- ManualSourceRoute *route = get_manual_source_route(destination);
-
- if (route == NULL) {
- *consumed = false;
- return;
- }
-
- *consumed = true;
-
- // Empty source routes are invalid according to the spec
- if (route->num_relays == 0) {
- // Add a fake route to the routing table to help EmberZNet just send the packet
- sli_zigbee_route_table_entry_t *route_table_entry = find_free_routing_table_entry(route->destination);
- route_table_entry->destination = route->destination;
- route_table_entry->nextHop = route->destination;
- route_table_entry->status = EMBER_ROUTE_ACTIVE;
- route_table_entry->cost = 0;
- route_table_entry->networkIndex = 0;
-
- return;
- }
-
- uint8_t relay_index = route->num_relays - 1;
-
- route->active = false; // Disable the route after a single use
-
- emberAppendToLinkedBuffers(*header, &route->num_relays, 1);
- emberAppendToLinkedBuffers(*header, &relay_index, 1);
-
- for (uint8_t i = 0; i < route->num_relays; i++) {
- emberAppendToLinkedBuffers(*header, (uint8_t*)&route->relays[route->num_relays - i - 1], 2);
- }
-
- return;
-}
-
-
-EmberStatus emberAfPluginXncpIncomingCustomFrameCallback(uint8_t messageLength,
- uint8_t *messagePayload,
- uint8_t *replyPayloadLength,
- uint8_t *replyPayload) {
- uint8_t rsp_status = EMBER_SUCCESS;
- uint16_t rsp_command_id = XNCP_CMD_UNKNOWN;
-
- if (messageLength < 3) {
- rsp_status = EMBER_BAD_ARGUMENT;
-
- replyPayload[0] = (uint8_t)((rsp_command_id >> 0) & 0xFF);
- replyPayload[1] = (uint8_t)((rsp_command_id >> 8) & 0xFF);
- replyPayload[2] = rsp_status;
- return EMBER_SUCCESS;
- }
-
- uint16_t req_command_id = BUILD_UINT16(messagePayload[0], messagePayload[1]);
- uint8_t req_status = messagePayload[2];
- (void)req_status;
-
- // Strip the packet header to simplify command parsing below
- messagePayload += 3;
- messageLength -= 3;
-
- // Leave space for the reply packet header
- *replyPayloadLength = 0;
- *replyPayloadLength += 2; // Space for the response command ID
- *replyPayloadLength += 1; // Space for the status
-
- switch (req_command_id) {
- case XNCP_CMD_GET_SUPPORTED_FEATURES_REQ: {
- rsp_command_id = XNCP_CMD_GET_SUPPORTED_FEATURES_RSP;
- rsp_status = EMBER_SUCCESS;
-
- replyPayload[(*replyPayloadLength)++] = (uint8_t)((SUPPORTED_FEATURES >> 0) & 0xFF);
- replyPayload[(*replyPayloadLength)++] = (uint8_t)((SUPPORTED_FEATURES >> 8) & 0xFF);
- replyPayload[(*replyPayloadLength)++] = (uint8_t)((SUPPORTED_FEATURES >> 16) & 0xFF);
- replyPayload[(*replyPayloadLength)++] = (uint8_t)((SUPPORTED_FEATURES >> 24) & 0xFF);
- break;
- }
-
- case XNCP_CMD_SET_SOURCE_ROUTE_REQ: {
- rsp_command_id = XNCP_CMD_SET_SOURCE_ROUTE_RSP;
- rsp_status = EMBER_SUCCESS;
-
- if ((messageLength < 2) || (messageLength % 2 != 0)) {
- rsp_status = EMBER_BAD_ARGUMENT;
- break;
- }
-
- uint8_t num_relays = (messageLength - 2) / 2;
-
- if (num_relays > EMBER_MAX_SOURCE_ROUTE_RELAY_COUNT + 1) {
- rsp_status = EMBER_BAD_ARGUMENT;
- break;
- }
-
- // If we don't find a better index, pick one at random to replace
- uint8_t insertion_index = emberGetPseudoRandomNumber() % XNCP_MANUAL_SOURCE_ROUTE_TABLE_SIZE;
- uint16_t node_id = BUILD_UINT16(messagePayload[0], messagePayload[1]);
-
- for (uint8_t i = 0; i < XNCP_MANUAL_SOURCE_ROUTE_TABLE_SIZE; i++) {
- ManualSourceRoute *route = &manual_source_routes[i];
-
- if (route->active == false) {
- insertion_index = i;
- } else if (route->destination == node_id) {
- insertion_index = i;
- break;
- }
- }
-
- ManualSourceRoute *route = &manual_source_routes[insertion_index];
-
- for (uint8_t i = 0; i < num_relays; i++) {
- uint16_t relay = BUILD_UINT16(messagePayload[2 + 2 * i + 0], messagePayload[2 + 2 * i + 1]);
- route->relays[i] = relay;
- }
-
- route->destination = node_id;
- route->num_relays = num_relays;
- route->active = true;
-
- break;
- }
-
- case XNCP_CMD_GET_MFG_TOKEN_OVERRIDE_REQ: {
- rsp_command_id = XNCP_CMD_GET_MFG_TOKEN_OVERRIDE_RSP;
- rsp_status = EMBER_SUCCESS;
-
- if (messageLength != 1) {
- rsp_status = EMBER_BAD_ARGUMENT;
- break;
- }
-
- uint8_t token_id = messagePayload[0];
- char *override_value;
-
- switch (token_id) {
- case EZSP_MFG_STRING: {
- override_value = XNCP_MFG_MANUF_NAME;
- break;
- }
-
- case EZSP_MFG_BOARD_NAME: {
- override_value = XNCP_MFG_BOARD_NAME;
- break;
- }
-
- default: {
- rsp_status = EMBER_NOT_FOUND;
- override_value = "";
- break;
- }
- }
-
- uint8_t value_length = strlen(override_value);
- memcpy(replyPayload + *replyPayloadLength, override_value, value_length);
- *replyPayloadLength += value_length;
- break;
- }
-
- case XNCP_CMD_GET_BUILD_STRING_REQ: {
- rsp_command_id = XNCP_CMD_GET_BUILD_STRING_RSP;
- rsp_status = EMBER_SUCCESS;
-
- uint8_t value_length = strlen(XNCP_BUILD_STRING);
- memcpy(replyPayload + *replyPayloadLength, XNCP_BUILD_STRING, value_length);
- *replyPayloadLength += value_length;
- break;
- }
-
- case XNCP_CMD_GET_FLOW_CONTROL_TYPE_REQ: {
- rsp_command_id = XNCP_CMD_GET_FLOW_CONTROL_TYPE_RSP;
- rsp_status = EMBER_SUCCESS;
-
- XncpFlowControlType flow_control_type;
-
- switch (SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE) {
- case usartHwFlowControlCtsAndRts: {
- flow_control_type = XNCP_FLOW_CONTROL_TYPE_HARDWARE;
- break;
- }
-
- case usartHwFlowControlNone: {
- flow_control_type = XNCP_FLOW_CONTROL_TYPE_SOFTWARE;
- break;
- }
-
- default: {
- flow_control_type = XNCP_FLOW_CONTROL_TYPE_SOFTWARE;
- break;
- }
- }
-
- replyPayload[(*replyPayloadLength)++] = (uint8_t)(flow_control_type & 0xFF);
- break;
- }
-
- default: {
- rsp_status = EMBER_NOT_FOUND;
- break;
- }
- }
-
- replyPayload[0] = (uint8_t)((rsp_command_id >> 0) & 0xFF);
- replyPayload[1] = (uint8_t)((rsp_command_id >> 8) & 0xFF);
- replyPayload[2] = rsp_status;
-
- return EMBER_SUCCESS;
}
diff --git a/src/zigbee_ncp/config/xncp_config.h b/src/zigbee_ncp/config/xncp_config.h
deleted file mode 100644
index fd85149b..00000000
--- a/src/zigbee_ncp/config/xncp_config.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef CONFIG_XNCP_CONFIG_H_
-#define CONFIG_XNCP_CONFIG_H_
-
-// Table entries are ephemeral and are expected to be populated before a request is sent.
-// This is not the size of any source route table! Rather, this controls how many unique
-// destinations can be concurrently contacted with source routing enabled.
-#define XNCP_MANUAL_SOURCE_ROUTE_TABLE_SIZE (20)
-
-
-// Some manufacturers do not write a board or manufacturer name to the NCP.
-// Rather than writing the manufacturing tokens within the application, you can instead
-// supply overrides that will be preferred to the manufacturing token values.
-#define XNCP_MFG_MANUF_NAME ("")
-#define XNCP_MFG_BOARD_NAME ("")
-
-
-// Specify a build string that can be read by the host, augmenting its version info
-#define XNCP_BUILD_STRING ("")
-
-#endif /* CONFIG_XNCP_CONFIG_H_ */
diff --git a/src/zigbee_ncp/main.c b/src/zigbee_ncp/main.c
index 996b1e0b..f07f4b28 100644
--- a/src/zigbee_ncp/main.c
+++ b/src/zigbee_ncp/main.c
@@ -28,7 +28,7 @@
#include "sl_system_process_action.h"
#endif // SL_CATALOG_KERNEL_PRESENT
-#ifdef EMBER_TEST
+#ifdef SL_ZIGBEE_TEST
#define main nodeMain
#endif
diff --git a/src/zigbee_ncp/zigbee_ncp.slcp b/src/zigbee_ncp/zigbee_ncp.slcp
index 5ac2ad92..aac754e4 100644
--- a/src/zigbee_ncp/zigbee_ncp.slcp
+++ b/src/zigbee_ncp/zigbee_ncp.slcp
@@ -21,30 +21,28 @@ component:
- id: zigbee_r22_support
- id: zigbee_security_link_keys
- id: zigbee_zll
- - id: zigbee_app_framework_common
+ - id: zigbee_system_common
- id: zigbee_ncp_uart_hardware
- id: zigbee_debug_basic
- id: zigbee_debug_extended
- - id: zigbee_xncp
- id: rail_util_rssi
+ - id: clock_manager
define:
- name: EMBER_CUSTOM_MAC_FILTER_TABLE_SIZE
value: 15
configuration:
- - name: SL_CLI_MAX_INPUT_ARGUMENTS
- value: 16
- name: SL_BOARD_ENABLE_VCOM
value: 1
- name: SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE
value: usartHwFlowControlCtsAndRts
+ - name: SL_CLI_MAX_INPUT_ARGUMENTS
+ value: 16
+ - name: SL_ZIGBEE_PACKET_BUFFER_HEAP_SIZE
+ value: SL_ZIGBEE_LARGE_PACKET_BUFFER_HEAP
- name: SL_CLI_EXAMPLE_IOSTREAM_HANDLE
value: sl_iostream_vuart_handle
- - name: NVM3_DEFAULT_NVM_SIZE
- value: 36864
- condition:
- - device_series_1
- name: NVM3_DEFAULT_NVM_SIZE
value: 32768
condition:
@@ -58,22 +56,11 @@ configuration:
value: 0
- name: SL_PSA_ITS_SUPPORT_V3_DRIVER
value: 1
- - name: EMBER_AF_PLUGIN_PACKET_HANDOFF_ALLOW_ALL_PACKETS
- value: 1
source:
- path: main.c
- path: app.c
-config_file:
- - path: config/xncp_config.h
- file_id: xncp_config
-
-template_contribution:
-- name: zigbee_stack_callback
- priority: -9999
- value: {callback_type: override_append_source_route, function_name: nc_zigbee_override_append_source_route}
-
filter:
- name: Wireless Technology
value: [Zigbee]
diff --git a/src/zigbee_router/app.c b/src/zigbee_router/app.c
new file mode 100644
index 00000000..a1a0c107
--- /dev/null
+++ b/src/zigbee_router/app.c
@@ -0,0 +1,250 @@
+/***************************************************************************//**
+ * @file app.c
+ * @brief Callbacks implementation and application specific code.
+ *******************************************************************************
+ * # License
+ * Copyright 2021 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * The licensor of this software is Silicon Laboratories Inc. Your use of this
+ * software is governed by the terms of Silicon Labs Master Software License
+ * Agreement (MSLA) available at
+ * www.silabs.com/about-us/legal/master-software-license-agreement. This
+ * software is distributed to you in Source Code format and is governed by the
+ * sections of the MSLA applicable to Source Code.
+ *
+ ******************************************************************************/
+
+#include "app/framework/include/af.h"
+#ifdef SL_COMPONENT_CATALOG_PRESENT
+#include "sl_component_catalog.h"
+#endif
+
+#ifdef SL_CATALOG_ZIGBEE_NETWORK_TEST_PRESENT
+#include "network_test_config.h"
+#endif //SL_CATALOG_ZIGBEE_NETWORK_TEST_PRESENT
+
+#if (LARGE_NETWORK_TESTING == 0)
+#ifndef EZSP_HOST
+
+#include "zigbee_sleep_config.h"
+#endif
+
+#include "network-steering.h"
+
+#ifdef SL_CATALOG_ZIGBEE_ZLL_COMMISSIONING_COMMON_PRESENT
+#include "zll-commissioning.h"
+#endif //SL_CATALOG_ZIGBEE_ZLL_COMMISSIONING_COMMON_PRESENT
+
+#if defined(SL_CATALOG_LED0_PRESENT)
+#include "sl_led.h"
+#include "sl_simple_led_instances.h"
+#define led_turn_on(led) sl_led_turn_on(led)
+#define led_turn_off(led) sl_led_turn_off(led)
+#define led_toggle(led) sl_led_toggle(led)
+#define COMMISSIONING_STATUS_LED (&sl_led_led0)
+#define ON_OFF_LIGHT_LED (&sl_led_led0)
+#else // !SL_CATALOG_LED0_PRESENT
+#define led_turn_on(led)
+#define led_turn_off(led)
+#define led_toggle(led)
+#endif // SL_CATALOG_LED0_PRESENT
+
+#define NWK_STEERING_COOLDOWN_MS 10000
+
+static sl_zigbee_af_event_t commissioning_led_event;
+
+//---------------
+// Event handlers
+
+static void commissioning_led_event_handler(sl_zigbee_af_event_t *event)
+{
+ led_turn_on(COMMISSIONING_STATUS_LED);
+
+ if (sl_zigbee_af_network_state() != SL_ZIGBEE_JOINED_NETWORK) {
+ sl_status_t status = sl_zigbee_af_network_steering_start();
+ sl_zigbee_app_debug_println("%s network %s: 0x%X", "Join", "start", status);
+ }
+}
+
+//----------------------
+// Implemented Callbacks
+
+/** @brief Stack Status
+ *
+ * This function is called by the application framework from the stack status
+ * handler. This callbacks provides applications an opportunity to be notified
+ * of changes to the stack status and take appropriate action. The framework
+ * will always process the stack status after the callback returns.
+ */
+void sl_zigbee_af_stack_status_cb(sl_status_t status)
+{
+ // Note, the ZLL state is automatically updated by the stack and the plugin.
+ if (status == SL_STATUS_NETWORK_DOWN) {
+ led_turn_off(COMMISSIONING_STATUS_LED);
+ sl_zigbee_af_event_set_delay_ms(&commissioning_led_event, NWK_STEERING_COOLDOWN_MS);
+ } else if (status == SL_STATUS_NETWORK_UP) {
+ led_turn_on(COMMISSIONING_STATUS_LED);
+ }
+}
+
+/** @brief Init
+ * Application init function
+ */
+void sl_zigbee_af_main_init_cb(void)
+{
+ sl_zigbee_af_event_init(&commissioning_led_event, commissioning_led_event_handler);
+
+ sl_zigbee_af_event_set_active(&commissioning_led_event);
+}
+
+/** @brief Complete network steering.
+ *
+ * This callback is fired when the Network Steering plugin is complete.
+ *
+ * @param status On success this will be set to SL_STATUS_OK to indicate a
+ * network was joined successfully. On failure this will be the status code of
+ * the last join or scan attempt.
+ *
+ * @param totalBeacons The total number of 802.15.4 beacons that were heard,
+ * including beacons from different devices with the same PAN ID.
+ *
+ * @param joinAttempts The number of join attempts that were made to get onto
+ * an open Zigbee network.
+ *
+ * @param finalState The finishing state of the network steering process. From
+ * this, one is able to tell on which channel mask and with which key the
+ * process was complete.
+ */
+void sl_zigbee_af_network_steering_complete_cb(sl_status_t status,
+ uint8_t totalBeacons,
+ uint8_t joinAttempts,
+ uint8_t finalState)
+{
+ sl_zigbee_app_debug_println("Join network complete: 0x%X", status);
+
+ if (status != SL_STATUS_OK) {
+ led_turn_off(COMMISSIONING_STATUS_LED);
+#ifdef SL_CATALOG_ZIGBEE_ZLL_COMMISSIONING_COMMON_PRESENT
+ // Initialize our ZLL security now so that we are ready to be a touchlink
+ // target at any point.
+ status = sl_zigbee_af_zll_set_initial_security_state();
+ if (status != SL_STATUS_OK) {
+ sl_zigbee_app_debug_println("Error: cannot initialize ZLL security: 0x%X", status);
+ }
+#endif //SL_CATALOG_ZIGBEE_ZLL_COMMISSIONING_COMMON_PRESENT
+ sl_zigbee_af_event_set_delay_ms(&commissioning_led_event, NWK_STEERING_COOLDOWN_MS);
+ }
+}
+
+/** @brief Post Attribute Change
+ *
+ * This function is called by the application framework after it changes an
+ * attribute value. The value passed into this callback is the value to which
+ * the attribute was set by the framework.
+ */
+void sl_zigbee_af_post_attribute_change_cb(uint8_t endpoint,
+ sl_zigbee_af_cluster_id_t clusterId,
+ sl_zigbee_af_attribute_id_t attributeId,
+ uint8_t mask,
+ uint16_t manufacturerCode,
+ uint8_t type,
+ uint8_t size,
+ uint8_t* value)
+{
+ if (clusterId == ZCL_ON_OFF_CLUSTER_ID
+ && attributeId == ZCL_ON_OFF_ATTRIBUTE_ID
+ && mask == CLUSTER_MASK_SERVER) {
+ bool onOff;
+ if (sl_zigbee_af_read_server_attribute(endpoint,
+ ZCL_ON_OFF_CLUSTER_ID,
+ ZCL_ON_OFF_ATTRIBUTE_ID,
+ (uint8_t *)&onOff,
+ sizeof(onOff))
+ == SL_ZIGBEE_ZCL_STATUS_SUCCESS) {
+ if (onOff) {
+ led_turn_on(ON_OFF_LIGHT_LED);
+ } else {
+ led_turn_off(ON_OFF_LIGHT_LED);
+ }
+ }
+ }
+}
+
+/** @brief On/off Cluster Server Post Init
+ *
+ * Following resolution of the On/Off state at startup for this endpoint, perform any
+ * additional initialization needed; e.g., synchronize hardware state.
+ *
+ * @param endpoint Endpoint that is being initialized
+ */
+void sl_zigbee_af_on_off_cluster_server_post_init_cb(uint8_t endpoint)
+{
+ // At startup, trigger a read of the attribute and possibly a toggle of the
+ // LED to make sure they are always in sync.
+ sl_zigbee_af_post_attribute_change_cb(endpoint,
+ ZCL_ON_OFF_CLUSTER_ID,
+ ZCL_ON_OFF_ATTRIBUTE_ID,
+ CLUSTER_MASK_SERVER,
+ 0,
+ 0,
+ 0,
+ NULL);
+}
+
+/** @brief
+ *
+ * Application framework equivalent of ::sl_zigbee_radio_needs_calibrating_handler
+ */
+void sl_zigbee_af_radio_needs_calibrating_cb(void)
+{
+ #ifndef EZSP_HOST
+ sl_mac_calibrate_current_channel();
+ #endif
+}
+
+#if defined(SL_CATALOG_SIMPLE_BUTTON_PRESENT) && (SL_ZIGBEE_APP_FRAMEWORK_USE_BUTTON_TO_STAY_AWAKE == 0)
+#include "sl_simple_button.h"
+#include "sl_simple_button_instances.h"
+#ifdef SL_CATALOG_ZIGBEE_FORCE_SLEEP_AND_WAKEUP_PRESENT
+#include "force-sleep-wakeup.h"
+#endif //SL_CATALOG_ZIGBEE_FORCE_SLEEP_AND_WAKEUP_PRESENT
+/***************************************************************************//**
+ * A callback called in interrupt context whenever a button changes its state.
+ *
+ * @remark Can be implemented by the application if required. This function
+ * can contain the functionality to be executed in response to changes of state
+ * in each of the buttons, or callbacks to appropriate functionality.
+ *
+ * @note The button state should not be updated in this function, it is updated
+ * by specific button driver prior to arriving here
+ *
+ @param[out] handle Pointer to button instance
+ ******************************************************************************/
+void sl_button_on_change(const sl_button_t *handle)
+{
+ if (sl_button_get_state(handle) == SL_SIMPLE_BUTTON_RELEASED) {
+ #ifdef SL_CATALOG_ZIGBEE_FORCE_SLEEP_AND_WAKEUP_PRESENT
+ sl_zigbee_app_framework_force_wakeup();
+ #endif //SL_CATALOG_ZIGBEE_FORCE_SLEEP_AND_WAKEUP_PRESENT
+ }
+}
+#endif // SL_CATALOG_SIMPLE_BUTTON_PRESENT && SL_ZIGBEE_APP_FRAMEWORK_USE_BUTTON_TO_STAY_AWAKE == 0
+
+//Internal testing stuff
+#if defined(SL_ZIGBEE_TEST)
+void sl_zigbee_af_hal_button_isr_cb(uint8_t button, uint8_t state)
+{
+ if (state == BUTTON_RELEASED) {
+ }
+}
+#endif // SL_ZIGBEE_TEST
+
+#ifdef SL_CATALOG_ZIGBEE_FORCE_SLEEP_AND_WAKEUP_PRESENT
+void sli_zigbee_app_framework_force_sleep_callback(void)
+{
+ // Do other things like turn off LEDs etc
+ sl_led_turn_off(&sl_led_led0);
+}
+#endif // SL_CATALOG_ZIGBEE_FORCE_SLEEP_AND_WAKEUP_PRESENT
+#endif //#if (LARGE_NETWORK_TESTING == 0)
diff --git a/src/zigbee_router/config/zcl/zcl_config.zap b/src/zigbee_router/config/zcl/zcl_config.zap
new file mode 100644
index 00000000..87abb552
--- /dev/null
+++ b/src/zigbee_router/config/zcl/zcl_config.zap
@@ -0,0 +1,3777 @@
+{
+ "fileFormat": 2,
+ "featureLevel": 104,
+ "creator": "zap",
+ "keyValuePairs": [
+ {
+ "key": "commandDiscovery",
+ "value": "1"
+ },
+ {
+ "key": "defaultResponsePolicy",
+ "value": "always"
+ },
+ {
+ "key": "manufacturerCodes",
+ "value": "0x1002"
+ }
+ ],
+ "package": [
+ {
+ "pathRelativity": "relativeToZap",
+ "path": "../../../../../../../../../app/zcl/zcl-zap.json",
+ "type": "zcl-properties",
+ "category": "zigbee",
+ "version": 1,
+ "description": "Zigbee Silabs ZCL data"
+ },
+ {
+ "pathRelativity": "relativeToZap",
+ "path": "../../../../../gen-template/gen-templates.json",
+ "type": "gen-templates-json",
+ "category": "zigbee",
+ "version": "zigbee-v0"
+ }
+ ],
+ "endpointTypes": [
+ {
+ "id": 1,
+ "name": "Centralized",
+ "deviceTypeRef": {
+ "code": 257,
+ "profileId": 260,
+ "label": "LO-dimmablelight",
+ "name": "LO-dimmablelight"
+ },
+ "deviceTypes": [
+ {
+ "code": 257,
+ "profileId": 260,
+ "label": "LO-dimmablelight",
+ "name": "LO-dimmablelight"
+ }
+ ],
+ "deviceVersions": [
+ 1
+ ],
+ "deviceIdentifiers": [
+ 257
+ ],
+ "deviceTypeName": "LO-dimmablelight",
+ "deviceTypeCode": 257,
+ "deviceTypeProfileId": 260,
+ "clusters": [
+ {
+ "name": "Basic",
+ "code": 0,
+ "mfgCode": null,
+ "define": "BASIC_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ResetToFactoryDefaults",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "ZCL version",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "8",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "application version",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "stack version",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "hardware version",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "manufacturer name",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "model identifier",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "date code",
+ "code": 6,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "power source",
+ "code": 7,
+ "mfgCode": null,
+ "side": "server",
+ "type": "enum8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "generic device class",
+ "code": 8,
+ "mfgCode": null,
+ "side": "server",
+ "type": "enum8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "255",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "generic device type",
+ "code": 9,
+ "mfgCode": null,
+ "side": "server",
+ "type": "enum8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "255",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "product code",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "octet_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "product url",
+ "code": 11,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "sw build id",
+ "code": 16384,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Identify",
+ "code": 3,
+ "mfgCode": null,
+ "define": "IDENTIFY_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "Identify",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "IdentifyQueryResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "IdentifyQuery",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "TriggerEffect",
+ "code": 64,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "identify time",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Groups",
+ "code": 4,
+ "mfgCode": null,
+ "define": "GROUPS_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "AddGroup",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "AddGroupResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "ViewGroup",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ViewGroupResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetGroupMembership",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetGroupMembershipResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveGroup",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveGroupResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveAllGroups",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "AddGroupIfIdentifying",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "name support",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Scenes",
+ "code": 5,
+ "mfgCode": null,
+ "define": "SCENES_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "AddScene",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "AddSceneResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "ViewScene",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ViewSceneResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveScene",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveSceneResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveAllScenes",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveAllScenesResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "StoreScene",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "StoreSceneResponse",
+ "code": 4,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "RecallScene",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetSceneMembership",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetSceneMembershipResponse",
+ "code": 6,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "EnhancedAddScene",
+ "code": 64,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "EnhancedViewScene",
+ "code": 65,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "CopyScene",
+ "code": 66,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "scene count",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "current scene",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "current group",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "scene valid",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "name support",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "On/off",
+ "code": 6,
+ "mfgCode": null,
+ "define": "ON_OFF_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "Off",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "On",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "Toggle",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "OffWithEffect",
+ "code": 64,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "OnWithRecallGlobalScene",
+ "code": 65,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "OnWithTimedOff",
+ "code": 66,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "on/off",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "NVM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "global scene control",
+ "code": 16384,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "on time",
+ "code": 16385,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "off wait time",
+ "code": 16386,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "start up on off",
+ "code": 16387,
+ "mfgCode": null,
+ "side": "server",
+ "type": "enum8",
+ "included": 1,
+ "storageOption": "NVM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "255",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Level Control",
+ "code": 8,
+ "mfgCode": null,
+ "define": "LEVEL_CONTROL_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "MoveToLevel",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "Move",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "Step",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "Stop",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "MoveToLevelWithOnOff",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "MoveWithOnOff",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "StepWithOnOff",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "StopWithOnOff",
+ "code": 7,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "current level",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "NVM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "remaining time",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "options",
+ "code": 15,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "on off transition time",
+ "code": 16,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "on level",
+ "code": 17,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "254",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "default move rate",
+ "code": 20,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "start up current level",
+ "code": 16384,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "NVM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "51",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Over the Air Bootloading",
+ "code": 25,
+ "mfgCode": null,
+ "define": "OTA_BOOTLOAD_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "QueryNextImageRequest",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "ImageBlockRequest",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "UpgradeEndRequest",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 0,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "OTA Upgrade Server ID",
+ "code": 0,
+ "mfgCode": null,
+ "side": "client",
+ "type": "ieee_address",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0xffffffffffffffff",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "Offset (address) into the file",
+ "code": 1,
+ "mfgCode": null,
+ "side": "client",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0xffffffff",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "OTA Upgrade Status",
+ "code": 6,
+ "mfgCode": null,
+ "side": "client",
+ "type": "enum8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Occupancy Sensing",
+ "code": 1030,
+ "mfgCode": null,
+ "define": "OCCUPANCY_SENSING_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "ZLL Commissioning",
+ "code": 4096,
+ "mfgCode": null,
+ "define": "ZLL_COMMISSIONING_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ScanRequest",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ScanResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "DeviceInformationRequest",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "DeviceInformationResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "IdentifyRequest",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ResetToFactoryNewRequest",
+ "code": 7,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkStartRequest",
+ "code": 16,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkStartResponse",
+ "code": 17,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkJoinRouterRequest",
+ "code": 18,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkJoinRouterResponse",
+ "code": 19,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkJoinEndDeviceRequest",
+ "code": 20,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkJoinEndDeviceResponse",
+ "code": 21,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkUpdateRequest",
+ "code": 22,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "EndpointInformation",
+ "code": 64,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetGroupIdentifiersRequest",
+ "code": 65,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetGroupIdentifiersResponse",
+ "code": 65,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetEndpointListRequest",
+ "code": 66,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetEndpointListResponse",
+ "code": 66,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": 2,
+ "name": "Touchlink",
+ "deviceTypeRef": {
+ "code": 269,
+ "profileId": 260,
+ "label": "LO-extendedcolorlight",
+ "name": "LO-extendedcolorlight"
+ },
+ "deviceTypes": [
+ {
+ "code": 269,
+ "profileId": 260,
+ "label": "LO-extendedcolorlight",
+ "name": "LO-extendedcolorlight"
+ }
+ ],
+ "deviceVersions": [
+ 1
+ ],
+ "deviceIdentifiers": [
+ 269
+ ],
+ "deviceTypeName": "LO-extendedcolorlight",
+ "deviceTypeCode": 269,
+ "deviceTypeProfileId": 260,
+ "clusters": [
+ {
+ "name": "Basic",
+ "code": 0,
+ "mfgCode": null,
+ "define": "BASIC_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ResetToFactoryDefaults",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "ZCL version",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "8",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "application version",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "stack version",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "hardware version",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "manufacturer name",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "model identifier",
+ "code": 5,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "date code",
+ "code": 6,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "power source",
+ "code": 7,
+ "mfgCode": null,
+ "side": "server",
+ "type": "enum8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "generic device class",
+ "code": 8,
+ "mfgCode": null,
+ "side": "server",
+ "type": "enum8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "255",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "generic device type",
+ "code": 9,
+ "mfgCode": null,
+ "side": "server",
+ "type": "enum8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "255",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "product code",
+ "code": 10,
+ "mfgCode": null,
+ "side": "server",
+ "type": "octet_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "product url",
+ "code": 11,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "sw build id",
+ "code": 16384,
+ "mfgCode": null,
+ "side": "server",
+ "type": "char_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 1,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Identify",
+ "code": 3,
+ "mfgCode": null,
+ "define": "IDENTIFY_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "Identify",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "IdentifyQueryResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "IdentifyQuery",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "TriggerEffect",
+ "code": 64,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "identify time",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Groups",
+ "code": 4,
+ "mfgCode": null,
+ "define": "GROUPS_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "AddGroup",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "AddGroupResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "ViewGroup",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ViewGroupResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetGroupMembership",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetGroupMembershipResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveGroup",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveGroupResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveAllGroups",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "AddGroupIfIdentifying",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "name support",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Scenes",
+ "code": 5,
+ "mfgCode": null,
+ "define": "SCENES_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "AddScene",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "AddSceneResponse",
+ "code": 0,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "ViewScene",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ViewSceneResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveScene",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveSceneResponse",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveAllScenes",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "RemoveAllScenesResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "StoreScene",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "StoreSceneResponse",
+ "code": 4,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "RecallScene",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetSceneMembership",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetSceneMembershipResponse",
+ "code": 6,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "EnhancedAddScene",
+ "code": 64,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "EnhancedViewScene",
+ "code": 65,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "CopyScene",
+ "code": 66,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "scene count",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "current scene",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "current group",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "scene valid",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "name support",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "On/off",
+ "code": 6,
+ "mfgCode": null,
+ "define": "ON_OFF_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "Off",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "On",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "Toggle",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "OffWithEffect",
+ "code": 64,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "OnWithRecallGlobalScene",
+ "code": 65,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "OnWithTimedOff",
+ "code": 66,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "on/off",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "NVM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "global scene control",
+ "code": 16384,
+ "mfgCode": null,
+ "side": "server",
+ "type": "boolean",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "on time",
+ "code": 16385,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "off wait time",
+ "code": 16386,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "start up on off",
+ "code": 16387,
+ "mfgCode": null,
+ "side": "server",
+ "type": "enum8",
+ "included": 1,
+ "storageOption": "NVM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "255",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Level Control",
+ "code": 8,
+ "mfgCode": null,
+ "define": "LEVEL_CONTROL_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "MoveToLevel",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "Move",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "Step",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "Stop",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "MoveToLevelWithOnOff",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "MoveWithOnOff",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "StepWithOnOff",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "StopWithOnOff",
+ "code": 7,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "current level",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "NVM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "remaining time",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "options",
+ "code": 15,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "on off transition time",
+ "code": 16,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "on level",
+ "code": 17,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "254",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "default move rate",
+ "code": 20,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "start up current level",
+ "code": 16384,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "NVM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "51",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Over the Air Bootloading",
+ "code": 25,
+ "mfgCode": null,
+ "define": "OTA_BOOTLOAD_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "QueryNextImageRequest",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "ImageBlockRequest",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "UpgradeEndRequest",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 0,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "OTA Upgrade Server ID",
+ "code": 0,
+ "mfgCode": null,
+ "side": "client",
+ "type": "ieee_address",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0xffffffffffffffff",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "Offset (address) into the file",
+ "code": 1,
+ "mfgCode": null,
+ "side": "client",
+ "type": "int32u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0xffffffff",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "OTA Upgrade Status",
+ "code": 6,
+ "mfgCode": null,
+ "side": "client",
+ "type": "enum8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "0",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "Color Control",
+ "code": 768,
+ "mfgCode": null,
+ "define": "COLOR_CONTROL_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "MoveToHue",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "MoveHue",
+ "code": 1,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "StepHue",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "MoveToSaturation",
+ "code": 3,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "MoveSaturation",
+ "code": 4,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "StepSaturation",
+ "code": 5,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "MoveToHueAndSaturation",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "MoveToColor",
+ "code": 7,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "MoveColor",
+ "code": 8,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "StepColor",
+ "code": 9,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "MoveToColorTemperature",
+ "code": 10,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "EnhancedMoveToHue",
+ "code": 64,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "EnhancedMoveHue",
+ "code": 65,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "EnhancedStepHue",
+ "code": 66,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "EnhancedMoveToHueAndSaturation",
+ "code": 67,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ColorLoopSet",
+ "code": 68,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "StopMoveStep",
+ "code": 71,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "MoveColorTemperature",
+ "code": 75,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "StepColorTemperature",
+ "code": 76,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "current hue",
+ "code": 0,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "current saturation",
+ "code": 1,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "remaining time",
+ "code": 2,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "current x",
+ "code": 3,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x616B",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "current y",
+ "code": 4,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x607D",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "color temperature",
+ "code": 7,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "NVM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00FA",
+ "reportable": 1,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "color mode",
+ "code": 8,
+ "mfgCode": null,
+ "side": "server",
+ "type": "enum8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x01",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "color control options",
+ "code": 15,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "number of primaries",
+ "code": 16,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 1 x",
+ "code": 17,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 1 y",
+ "code": 18,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 1 intensity",
+ "code": 19,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 2 x",
+ "code": 21,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 2 y",
+ "code": 22,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 2 intensity",
+ "code": 23,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 3 x",
+ "code": 25,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 3 y",
+ "code": 26,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 3 intensity",
+ "code": 27,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 4 x",
+ "code": 32,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 4 y",
+ "code": 33,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 4 intensity",
+ "code": 34,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 5 x",
+ "code": 36,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 5 y",
+ "code": 37,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 5 intensity",
+ "code": 38,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 6 x",
+ "code": 40,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 6 y",
+ "code": 41,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "primary 6 intensity",
+ "code": 42,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "enhanced current hue",
+ "code": 16384,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "enhanced color mode",
+ "code": 16385,
+ "mfgCode": null,
+ "side": "server",
+ "type": "enum8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x01",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "color loop active",
+ "code": 16386,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "color loop direction",
+ "code": 16387,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "color loop time",
+ "code": 16388,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0019",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "color loop start enhanced hue",
+ "code": 16389,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x2300",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "color loop stored enhanced hue",
+ "code": 16390,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "color capabilities",
+ "code": 16394,
+ "mfgCode": null,
+ "side": "server",
+ "type": "bitmap16",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "color temp physical min",
+ "code": 16395,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0000",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "color temp physical max",
+ "code": 16396,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0xFEFF",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "couple color temp to level min-mireds",
+ "code": 16397,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "start up color temperature mireds",
+ "code": 16400,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "NVM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x4444",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ },
+ {
+ "name": "ZLL Commissioning",
+ "code": 4096,
+ "mfgCode": null,
+ "define": "ZLL_COMMISSIONING_CLUSTER",
+ "side": "server",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "ScanRequest",
+ "code": 0,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ScanResponse",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "DeviceInformationRequest",
+ "code": 2,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "DeviceInformationResponse",
+ "code": 3,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "IdentifyRequest",
+ "code": 6,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "ResetToFactoryNewRequest",
+ "code": 7,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkStartRequest",
+ "code": 16,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkStartResponse",
+ "code": 17,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkJoinRouterRequest",
+ "code": 18,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkJoinRouterResponse",
+ "code": 19,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkJoinEndDeviceRequest",
+ "code": 20,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkJoinEndDeviceResponse",
+ "code": 21,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "NetworkUpdateRequest",
+ "code": 22,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "EndpointInformation",
+ "code": 64,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetGroupIdentifiersRequest",
+ "code": 65,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetGroupIdentifiersResponse",
+ "code": 65,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetEndpointListRequest",
+ "code": 66,
+ "mfgCode": null,
+ "source": "client",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GetEndpointListResponse",
+ "code": 66,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 0,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "server",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": null,
+ "defaultValue": "1",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "id": 3,
+ "name": "GreenPower",
+ "deviceTypeRef": {
+ "code": 97,
+ "profileId": 41440,
+ "label": "GP-proxy-basic",
+ "name": "GP-proxy-basic"
+ },
+ "deviceTypes": [
+ {
+ "code": 97,
+ "profileId": 41440,
+ "label": "GP-proxy-basic",
+ "name": "GP-proxy-basic"
+ }
+ ],
+ "deviceVersions": [
+ 0
+ ],
+ "deviceIdentifiers": [
+ 97
+ ],
+ "deviceTypeName": "GP-proxy-basic",
+ "deviceTypeCode": 97,
+ "deviceTypeProfileId": 41440,
+ "clusters": [
+ {
+ "name": "Green Power",
+ "code": 33,
+ "mfgCode": null,
+ "define": "GREEN_POWER_CLUSTER",
+ "side": "client",
+ "enabled": 1,
+ "commands": [
+ {
+ "name": "GpPairing",
+ "code": 1,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GpProxyCommissioningMode",
+ "code": 2,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GpResponse",
+ "code": 6,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 1,
+ "isEnabled": 1
+ },
+ {
+ "name": "GpProxyTableRequest",
+ "code": 11,
+ "mfgCode": null,
+ "source": "server",
+ "isIncoming": 1,
+ "isEnabled": 1
+ }
+ ],
+ "attributes": [
+ {
+ "name": "gpp max proxy table entries",
+ "code": 16,
+ "mfgCode": null,
+ "side": "client",
+ "type": "int8u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x14",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "proxy table",
+ "code": 17,
+ "mfgCode": null,
+ "side": "client",
+ "type": "long_octet_string",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "gpp functionality",
+ "code": 22,
+ "mfgCode": null,
+ "side": "client",
+ "type": "bitmap24",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x09AC2F",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "gpp active functionality",
+ "code": 23,
+ "mfgCode": null,
+ "side": "client",
+ "type": "bitmap24",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0xFFFFFF",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "gp shared security key type",
+ "code": 32,
+ "mfgCode": null,
+ "side": "client",
+ "type": "bitmap8",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "gp shared security key",
+ "code": 33,
+ "mfgCode": null,
+ "side": "client",
+ "type": "security_key",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x00000000000000000000000000000000",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "gp link key",
+ "code": 34,
+ "mfgCode": null,
+ "side": "client",
+ "type": "security_key",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x5a6967426565416c6c69616e63653039",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ },
+ {
+ "name": "cluster revision",
+ "code": 65533,
+ "mfgCode": null,
+ "side": "client",
+ "type": "int16u",
+ "included": 1,
+ "storageOption": "RAM",
+ "singleton": 0,
+ "bounded": 0,
+ "defaultValue": "0x0001",
+ "reportable": 0,
+ "minInterval": 1,
+ "maxInterval": 65534,
+ "reportableChange": 0
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "endpoints": [
+ {
+ "endpointTypeName": "Centralized",
+ "endpointTypeIndex": 0,
+ "profileId": 260,
+ "endpointId": 1,
+ "networkId": 0,
+ "parentEndpointIdentifier": null
+ },
+ {
+ "endpointTypeName": "Touchlink",
+ "endpointTypeIndex": 1,
+ "profileId": 260,
+ "endpointId": 2,
+ "networkId": 0,
+ "parentEndpointIdentifier": null
+ },
+ {
+ "endpointTypeName": "GreenPower",
+ "endpointTypeIndex": 2,
+ "profileId": 41440,
+ "endpointId": 242,
+ "networkId": 0,
+ "parentEndpointIdentifier": null
+ }
+ ]
+}
\ No newline at end of file
diff --git a/src/zigbee_router/main.c b/src/zigbee_router/main.c
new file mode 100644
index 00000000..6c7831a3
--- /dev/null
+++ b/src/zigbee_router/main.c
@@ -0,0 +1,74 @@
+/***************************************************************************//**
+ * @file main.c
+ * @brief main() function.
+ *******************************************************************************
+ * # License
+ * Copyright 2021 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * The licensor of this software is Silicon Laboratories Inc. Your use of this
+ * software is governed by the terms of Silicon Labs Master Software License
+ * Agreement (MSLA) available at
+ * www.silabs.com/about-us/legal/master-software-license-agreement. This
+ * software is distributed to you in Source Code format and is governed by the
+ * sections of the MSLA applicable to Source Code.
+ *
+ ******************************************************************************/
+
+#ifdef SL_COMPONENT_CATALOG_PRESENT
+#include "sl_component_catalog.h"
+#endif
+#include "sl_system_init.h"
+#if defined(SL_CATALOG_POWER_MANAGER_PRESENT)
+#include "sl_power_manager.h"
+#endif
+#if defined(SL_CATALOG_KERNEL_PRESENT)
+#include "sl_system_kernel.h"
+#else
+#include "sl_system_process_action.h"
+#endif // SL_CATALOG_KERNEL_PRESENT
+
+#ifdef SL_ZIGBEE_TEST
+#define main nodeMain
+#endif
+
+void app_init(void)
+{
+}
+
+void app_process_action(void)
+{
+}
+
+int main(void)
+{
+ // Initialize Silicon Labs device, system, service(s) and protocol stack(s).
+ // Note that if the kernel is present, processing task(s) will be created by
+ // this call.
+ sl_system_init();
+
+ // Initialize the application. For example, create periodic timer(s) or
+ // task(s) if the kernel is present.
+ app_init();
+
+#if defined(SL_CATALOG_KERNEL_PRESENT)
+ // Start the kernel. Task(s) created in app_init() will start running.
+ sl_system_kernel_start();
+#else // SL_CATALOG_KERNEL_PRESENT
+ while (1) {
+ // Do not remove this call: Silicon Labs components process action routine
+ // must be called from the super loop.
+ sl_system_process_action();
+
+ // Application process.
+ app_process_action();
+
+ // Let the CPU go to sleep if the system allow it.
+#if defined(SL_CATALOG_POWER_MANAGER_PRESENT)
+ sl_power_manager_sleep();
+#endif // SL_CATALOG_POWER_MANAGER_PRESENT
+ }
+#endif // SL_CATALOG_KERNEL_PRESENT
+
+ return 0;
+}
diff --git a/src/zigbee_router/zigbee_router.slcp b/src/zigbee_router/zigbee_router.slcp
new file mode 100644
index 00000000..f86587d0
--- /dev/null
+++ b/src/zigbee_router/zigbee_router.slcp
@@ -0,0 +1,123 @@
+project_name: zigbee_router
+label: Zigbee - Router
+package: Zigbee
+category: Zigbee Application
+quality: production
+description: Zigbee Router firmware. Derived from the `Z3Light` example Simplicity SDK project.
+author: Nerivec
+
+component:
+ - id: cli
+ instance:
+ - example
+ - id: iostream_recommended_stream
+ - id: iostream_usart
+ instance:
+ - vcom
+ - id: zigbee_debug_print
+ - id: zigbee_pro_stack
+ - id: zigbee_source_route
+ - id: zigbee_stack_diagnostics
+ - id: zigbee_gp
+ - id: zigbee_zll
+ - id: zigbee_zcl_framework_core
+ - id: zigbee_zcl_cli
+ - id: zigbee_core_cli
+ - id: zigbee_color_control_server
+ - id: zigbee_groups_server
+ - id: zigbee_identify
+ - id: zigbee_level_control
+ - id: zigbee_on_off
+ - id: zigbee_zll_on_off_server
+ - id: zigbee_counters
+ - id: zigbee_green_power_common
+ - id: zigbee_green_power_client
+ - id: zigbee_green_power_client_cli
+ - id: zigbee_interpan
+ - id: zigbee_zll_commissioning_common
+ - id: zigbee_zll_commissioning_server
+ - id: zigbee_network_steering
+ - id: zigbee_reporting
+ - id: zigbee_zll_identify_server
+ - id: zigbee_zll_level_control_server
+ - id: zigbee_scenes
+ - id: zigbee_zll_scenes_server
+ - id: zigbee_basic
+ - id: zigbee_zll_utility_server
+ - id: zigbee_scan_dispatch
+ - id: zigbee_update_tc_link_key
+ - id: clock_manager
+ - id: zigbee_application_bootloader
+ - id: zigbee_button_joining
+ - id: rail_util_rssi
+
+define:
+ - name: EMBER_CUSTOM_MAC_FILTER_TABLE_SIZE
+ value: 15
+
+configuration:
+ - name: SL_BOARD_ENABLE_VCOM
+ value: 1
+ - name: SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE
+ value: usartHwFlowControlCtsAndRts
+ condition:
+ - iostream_usart
+ - name: SL_IOSTREAM_EUSART_VCOM_FLOW_CONTROL_TYPE
+ value: SL_IOSTREAM_EUSART_UART_FLOW_CTRL_CTS_RTS
+ condition:
+ - iostream_eusart
+ - name: SL_CLI_MAX_INPUT_ARGUMENTS
+ value: 16
+ - name: SLI_ZIGBEE_PRIMARY_NETWORK_DEVICE_TYPE
+ value: SLI_ZIGBEE_NETWORK_DEVICE_TYPE_ROUTER
+ - name: SLI_ZIGBEE_PRIMARY_NETWORK_SECURITY_TYPE
+ value: SLI_ZIGBEE_NETWORK_SECURITY_TYPE_3_0
+ - name: SL_CLI_PROMPT_STRING
+ value: "\"Z3Router>\""
+ - name: NVM3_DEFAULT_NVM_SIZE
+ value: 32768
+ condition:
+ - device_series_2
+ # If using zigbee_secure_key_storage we do not need to support backwards
+ # compatibility because we have never deployed images with keys in PSA
+ # As a result, these lines end up saving some code space
+ - name: SL_PSA_ITS_SUPPORT_V1_DRIVER
+ value: 0
+ - name: SL_PSA_ITS_SUPPORT_V2_DRIVER
+ value: 0
+ - name: SL_PSA_ITS_SUPPORT_V3_DRIVER
+ value: 1
+ - name: SL_STACK_SIZE
+ value: 1024
+ condition:
+ - freertos
+ - name: SL_STACK_SIZE
+ value: 512
+ condition:
+ - micriumos_kernel
+ # Timer RTOS task priority needs to be one more than SL_BT_RTOS_LINK_LAYER_TASK_PRIORITY
+ # BT uses event flags that require the timer task to be higher priority than all other RTOS tasks
+ - name: configTIMER_TASK_PRIORITY
+ value: 53
+ - name: configMAX_TASK_NAME_LEN
+ value: 30
+
+source:
+ - path: main.c
+ - path: app.c
+
+config_file:
+ - path: config/zcl/zcl_config.zap
+ file_id: zap_configuration_file_id
+ directory: zcl
+
+include:
+ - path: ./
+
+filter:
+ - name: Wireless Technology
+ value: [Zigbee]
+ - name: Device Type
+ value: [SoC]
+ - name: Project Difficulty
+ value: [Beginner]
diff --git a/tools/build_project.py b/tools/build_project.py
index ec8c865f..cabbea05 100755
--- a/tools/build_project.py
+++ b/tools/build_project.py
@@ -17,7 +17,7 @@
import contextlib
import subprocess
import multiprocessing
-from datetime import datetime, timezone
+from datetime import datetime
from ruamel.yaml import YAML
@@ -29,6 +29,45 @@
yaml = YAML(typ="safe")
+# prefix components:
+TREE_SPACE = " "
+TREE_BRANCH = "│ "
+# pointers:
+TREE_TEE = "├── "
+TREE_LAST = "└── "
+
+
+def tree(dir_path: pathlib.Path, prefix: str = ""):
+ """A recursive generator, given a directory Path object
+ will yield a visual tree structure line by line
+ with each line prefixed by the same characters
+ Source: https://stackoverflow.com/a/59109706
+ """
+ contents = list(dir_path.iterdir())
+ # contents each get pointers that are ├── with a final └── :
+ pointers = [TREE_TEE] * (len(contents) - 1) + [TREE_LAST]
+
+ for pointer, path in zip(pointers, contents):
+ yield prefix + pointer + path.name
+
+ if path.is_dir(): # extend the prefix and recurse:
+ extension = TREE_BRANCH if pointer == TREE_TEE else TREE_SPACE
+
+ # i.e. space because last, └── , above so no more |
+ yield from tree(path, prefix=prefix + extension)
+
+
+def log_tree(dir_path: pathlib.Path, prefix: str = ""):
+ LOGGER.info(f"Tree for {dir_path}:")
+
+ for line in tree(dir_path, prefix):
+ LOGGER.info(line)
+
+
+def log_subprocess_output(pipe, prefix: str = "subprocess"):
+ for line in iter(pipe.readline, b""):
+ LOGGER.info("[%s] %r", prefix, line)
+
def evaulate_f_string(f_string: str, variables: dict[str, typing.Any]) -> str:
"""
@@ -316,6 +355,8 @@ def main():
],
)
+ log_tree(build_template_path)
+
# We extend the base project with the manifest, since added components could have
# extra dependencies
(base_project_slcp,) = build_template_path.glob("*.slcp")
@@ -370,11 +411,74 @@ def main():
with (args.build_dir / "gbl_metadata.yaml").open("w") as f:
yaml.dump(manifest["gbl"], f)
+ zcl_config_zap = build_template_path / "config/zcl/zcl_config.zap"
+
+ if zcl_config_zap.exists():
+ date_code = datetime.today().strftime("%Y-%m-%d")
+ default_zap_changes = [
+ # Set software date code to day of build
+ f'(.endpointTypes[].clusters[].attributes[] | select(.name == "date code")).defaultValue = "{date_code}"',
+ # Set software build ID to SDK version
+ f'(.endpointTypes[].clusters[].attributes[] | select(.name == "sw build id")).defaultValue = "{sdk_version.split(":", 1)[1]}"',
+ # Set path
+ f'(.package[] | select(.type == "zcl-properties")).path = "{sdk}/app/zcl/zcl-zap.json"',
+ # Set path
+ f'(.package[] | select(.type == "gen-templates-json")).path = "{sdk}/protocol/zigbee/app/framework/gen-template/gen-templates.json"',
+ ]
+
+ for zap_change in default_zap_changes:
+ LOGGER.info("Default ZAP change: %s", zap_change)
+
+ result = subprocess.run(
+ [
+ "jq",
+ zap_change,
+ zcl_config_zap,
+ ],
+ capture_output=True,
+ )
+
+ if result.returncode != 0:
+ LOGGER.error("jq stderr: %s\n%s", result.returncode, result.stderr)
+ sys.exit(1)
+
+ with open(zcl_config_zap, "wb") as f:
+ f.write(result.stdout)
+
+ # JSON config
+ for json_config in manifest.get("json_config", []):
+ json_path = build_template_path / json_config["file"]
+
+ if not json_path.exists():
+ raise ValueError(f"[{json_path}] does not exist")
+
+ device_spe_change = json_config["jq"]
+
+ LOGGER.info("Device-specific change in %s: %s", json_path, device_spe_change)
+
+ result = subprocess.run(
+ [
+ "jq",
+ device_spe_change,
+ json_path,
+ ],
+ capture_output=True,
+ )
+
+ if result.returncode != 0:
+ LOGGER.error("jq stderr: %s\n%s", result.returncode, result.stderr)
+ sys.exit(1)
+
+ with open(json_path, "wb") as f:
+ f.write(result.stdout)
+
+ log_tree(build_template_path)
+
# Next, generate a chip-specific project from the modified base project
- print(f"Generating project for {manifest['device']}")
+ LOGGER.info(f"Generating project for {manifest['device']}")
# fmt: off
- subprocess.run(
+ slc_result = subprocess.Popen(
SLC
+ [
"generate",
@@ -387,10 +491,22 @@ def main():
"--sdk", sdk,
"--output-type", args.build_system,
],
- check=True,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT
)
# fmt: on
+ with slc_result.stdout:
+ log_subprocess_output(slc_result.stdout, "SLC generate")
+
+ slc_result_returncode = slc_result.wait()
+
+ if slc_result_returncode != 0:
+ LOGGER.error("[SLC generate] Error: %s", slc_result_returncode)
+ sys.exit(1)
+
+ log_tree(build_template_path)
+
# Make sure all extensions are valid
for sdk_extension in base_project.get("sdk_extension", []):
expected_dir = sdk / f"extension/{sdk_extension['id']}_extension"
@@ -403,7 +519,6 @@ def main():
value_template_env = {
"git_repo_hash": get_git_commit_id(repo=pathlib.Path(__file__).parent.parent),
"manifest_name": args.manifest.stem,
- "now": datetime.now(timezone.utc),
}
# Actually search for C defines within config
@@ -490,7 +605,14 @@ def main():
args.build_dir: "/src",
toolchain: "/toolchain",
}.items()
- ] + ["-Wall", "-Wextra", "-Werror"]
+ ] + [
+ "-Wall",
+ "-Wextra",
+ "-Werror",
+ # XXX: Fails due to protocol/openthread/platform-abstraction/efr32/radio.c@RAILCb_Generic
+ # Remove once this is fixed in the SDK!
+ "-Wno-error=unused-but-set-variable",
+ ]
output_artifact = (args.build_dir / "build/debug" / base_project_name).with_suffix(
".gbl"
diff --git a/tools/create_gbl.py b/tools/create_gbl.py
index 4167c56a..eaf3c772 100755
--- a/tools/create_gbl.py
+++ b/tools/create_gbl.py
@@ -164,16 +164,36 @@ def main():
)
metadata["ezsp_version"] = zigbee_esf_props["version"][0]
+ if "ot_version" in gbl_dynamic:
+ gbl_dynamic.remove("ot_version")
+ ot_esf_props = parse_properties_file(
+ (gsdk_path / "protocol/openthread/esf.properties").read_text()
+ )
+ metadata["ot_version"] = ot_esf_props["version"][0]
+
+ if "ble_version" in gbl_dynamic:
+ gbl_dynamic.remove("ble_version")
+ sl_bt_version_h = parse_c_header_defines(
+ (gsdk_path / "protocol/bluetooth/inc/sl_bt_version.h").read_text()
+ )
+ metadata["ble_version"] = ".".join(
+ [
+ str(sl_bt_version_h["SL_BT_VERSION_MAJOR"]),
+ str(sl_bt_version_h["SL_BT_VERSION_MINOR"]),
+ str(sl_bt_version_h["SL_BT_VERSION_PATCH"]),
+ ]
+ )
+
if "cpc_version" in gbl_dynamic:
gbl_dynamic.remove("cpc_version")
- sl_gsdk_version_h = parse_c_header_defines(
- (gsdk_path / "platform/common/inc/sl_gsdk_version.h").read_text()
+ sl_platform_version_h = parse_c_header_defines(
+ (gsdk_path / "platform/common/inc/sl_platform_version.h").read_text()
)
metadata["cpc_version"] = ".".join(
[
- str(sl_gsdk_version_h["SL_GSDK_MAJOR_VERSION"]),
- str(sl_gsdk_version_h["SL_GSDK_MINOR_VERSION"]),
- str(sl_gsdk_version_h["SL_GSDK_PATCH_VERSION"]),
+ str(sl_platform_version_h["SL_PLATFORM_MAJOR_VERSION"]),
+ str(sl_platform_version_h["SL_PLATFORM_MINOR_VERSION"]),
+ str(sl_platform_version_h["SL_PLATFORM_PATCH_VERSION"]),
]
)