diff --git a/.properties b/.properties
index 9659678218..d7e208a462 100644
--- a/.properties
+++ b/.properties
@@ -1,6 +1,6 @@
id=com.silabs.sdk.stack.super
-version=4.4.1
+version=4.4.2
label=Gecko SDK Suite
description=Gecko SDK Suite
diff --git a/README.md b/README.md
index c6d6d79f2f..c84f56f436 100644
--- a/README.md
+++ b/README.md
@@ -9,10 +9,6 @@ The Gecko SDK (GSDK) combines Silicon Labs wireless software development kits (S
Silicon Labs also helps future-proof your devices with over-the-air software and security updates, helping to minimize maintenance cost and improve your end user product experience!
-## Announcements
-
-On December 13th, 2023, the git LFS server changed and enabled a bandwidth quota based on your IP address. Go [here](https://github.com/SiliconLabs/.github) for more information on how to resolve this issue.
-
## Licensing
Gecko SDK is covered by one of several different licenses.
diff --git a/app/bluetooth/bluetooth_experimental_demos.xml b/app/bluetooth/bluetooth_experimental_demos.xml
index f8564645fe..00ef9f01c7 100644
--- a/app/bluetooth/bluetooth_experimental_demos.xml
+++ b/app/bluetooth/bluetooth_experimental_demos.xml
@@ -6,11 +6,11 @@
-
+
-
+
ABR Network Co-Processor (NCP) target application. Runs the Bluetooth stack and provides access to it by exposing the Bluetooth API (BGAPI) via UART connection. NCP mode makes it possible to run your application on a host controller or PC. This example does not have a GATT database, but makes it possible to build one from the application using Dynamic GATT API.
@@ -18,11 +18,11 @@
-
+
-
+
ABR Network Co-Processor (NCP) target application. Runs the Bluetooth stack and provides access to it by exposing the Bluetooth API (BGAPI) via UART connection. NCP mode makes it possible to run your application on a host controller or PC. This example does not have a GATT database, but makes it possible to build one from the application using Dynamic GATT API.
@@ -30,11 +30,11 @@
-
+
-
+
ABR Network Co-Processor (NCP) target application. Runs the Bluetooth stack and provides access to it by exposing the Bluetooth API (BGAPI) via UART connection. NCP mode makes it possible to run your application on a host controller or PC. This example does not have a GATT database, but makes it possible to build one from the application using Dynamic GATT API.
@@ -42,11 +42,11 @@
-
+
-
+
ABR initiator for Bluetooth. The example connects to an ABR reflector and starts distance measurement. Results are printed on the display of the WSTK.
@@ -54,11 +54,11 @@
-
+
-
+
ABR initiator for Bluetooth. The example connects to an ABR reflector and starts distance measurement. Results are printed on the display of the WSTK.
@@ -66,11 +66,11 @@
-
+
-
+
ABR initiator for Bluetooth. The example connects to an ABR reflector and starts distance measurement. Results are printed on the display of the WSTK.
@@ -78,11 +78,11 @@
-
+
-
+
ABR reflector for Bluetooth. The example sends measurement results to the initiator via GATT. The application starts advertising after boot and restarts advertising after a connection is closed. It also supports Over-the-Air Device Firmware Upgrade (OTA DFU).
@@ -90,11 +90,11 @@
-
+
-
+
ABR reflector for Bluetooth. The example sends measurement results to the initiator via GATT. The application starts advertising after boot and restarts advertising after a connection is closed. It also supports Over-the-Air Device Firmware Upgrade (OTA DFU).
@@ -102,11 +102,11 @@
-
+
-
+
ABR reflector for Bluetooth. The example sends measurement results to the initiator via GATT. The application starts advertising after boot and restarts advertising after a connection is closed. It also supports Over-the-Air Device Firmware Upgrade (OTA DFU).
@@ -114,10 +114,10 @@
-
+
-
+
diff --git a/app/bluetooth/bluetooth_internal_demos.xml b/app/bluetooth/bluetooth_internal_demos.xml
index 7012c49a4f..36a30746d7 100644
--- a/app/bluetooth/bluetooth_internal_demos.xml
+++ b/app/bluetooth/bluetooth_internal_demos.xml
@@ -6,11 +6,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -18,11 +18,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -30,11 +30,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -42,11 +42,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -54,11 +54,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -66,11 +66,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -78,11 +78,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -90,11 +90,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -102,11 +102,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -114,11 +114,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -126,11 +126,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -138,11 +138,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -150,11 +150,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -162,11 +162,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -174,11 +174,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -186,11 +186,11 @@
-
+
-
+
This example is an evaluation showcase for a Bluetooth Electronic Shelf Label (ESL) Tag application with the ESL Tag Demo component. The example includes image and display capabilities of an ESL Tag, utilizing the memory LCD display on the WSTK board while images are stored in RAM, only. Instead of the Silicon Labs logo, the Demo example will ask the user to run the QRCode generator on startup using the WSTK's display. After configuration the display will show ESL related information.
@@ -198,10 +198,10 @@
-
+
-
+
diff --git a/app/bluetooth/bluetooth_production_demos.xml b/app/bluetooth/bluetooth_production_demos.xml
index b8994035c8..2ea95bf6df 100644
--- a/app/bluetooth/bluetooth_production_demos.xml
+++ b/app/bluetooth/bluetooth_production_demos.xml
@@ -6,11 +6,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -18,11 +18,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -30,11 +30,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -42,11 +42,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -54,11 +54,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -66,11 +66,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -78,11 +78,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -90,11 +90,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -102,11 +102,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -114,11 +114,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -126,11 +126,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -138,11 +138,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -150,11 +150,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -162,11 +162,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -174,11 +174,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -186,11 +186,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -198,11 +198,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -210,11 +210,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -222,11 +222,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -234,11 +234,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -246,11 +246,11 @@
-
+
-
+
Network Co-Processor (NCP) target application with additional features to support the Electronic Shelf Label Profile ESL Access Point role. Note: Some BLE features unused by the ESL Access Point are removed compared to the NCP target application.
@@ -258,11 +258,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -270,11 +270,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -282,11 +282,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -294,11 +294,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -306,11 +306,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -318,11 +318,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -330,11 +330,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -342,11 +342,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -354,11 +354,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -366,11 +366,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -378,11 +378,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -390,11 +390,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -402,11 +402,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -414,11 +414,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -426,11 +426,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -438,11 +438,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -450,11 +450,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -462,11 +462,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -474,11 +474,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -486,11 +486,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -498,11 +498,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -510,11 +510,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -522,11 +522,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -534,11 +534,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -546,11 +546,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -558,11 +558,11 @@
-
+
-
+
Network Co-Processor (NCP) target application. Runs the Bluetooth stack dynamically and provides access to it via Bluetooth API (BGAPI) using UART connection. NCP mode makes it possible to run your application on a host controller or PC.
@@ -570,11 +570,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -582,11 +582,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -594,11 +594,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -606,11 +606,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -618,11 +618,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -630,11 +630,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -642,11 +642,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -654,11 +654,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -666,11 +666,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -678,11 +678,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -690,11 +690,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -702,11 +702,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -714,11 +714,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -726,11 +726,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -738,11 +738,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -750,11 +750,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -762,11 +762,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -774,11 +774,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -786,11 +786,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -798,11 +798,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -810,11 +810,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -822,11 +822,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -834,11 +834,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -846,11 +846,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -858,11 +858,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -870,11 +870,11 @@
-
+
-
+
The classic blinky example using Bluetooth communication. Demonstrates a simple two-way data exchange over GATT. This can be tested with the EFR Connect mobile app.
@@ -882,11 +882,11 @@
-
+
-
+
Demonstrates the features of the EFR32xG24 Dev Kit Board. This can be tested with the EFR Connect mobile app.
@@ -894,11 +894,11 @@
-
+
-
+
Demonstrates the features of the EFR32xG27 DevKit board. Features can be evaluated with the EFR Connect mobile app.
@@ -906,11 +906,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the mock relative humidity and temperature sensor.
@@ -918,11 +918,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the mock relative humidity and temperature sensor.
@@ -930,11 +930,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the mock relative humidity and temperature sensor.
@@ -942,11 +942,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the mock relative humidity and temperature sensor.
@@ -954,11 +954,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the mock relative humidity and temperature sensor.
@@ -966,11 +966,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the mock relative humidity and temperature sensor.
@@ -978,11 +978,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the mock relative humidity and temperature sensor.
@@ -990,11 +990,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the mock relative humidity and temperature sensor.
@@ -1002,11 +1002,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the mock relative humidity and temperature sensor.
@@ -1014,11 +1014,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the mock relative humidity and temperature sensor.
@@ -1026,11 +1026,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the mock relative humidity and temperature sensor.
@@ -1038,11 +1038,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the mock relative humidity and temperature sensor.
@@ -1050,11 +1050,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the mock relative humidity and temperature sensor.
@@ -1062,11 +1062,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the Si7021 digital relative humidity and temperature sensor of the WSTK or of the Thunderboard.
@@ -1074,11 +1074,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the Si7021 digital relative humidity and temperature sensor of the WSTK or of the Thunderboard.
@@ -1086,11 +1086,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the Si7021 digital relative humidity and temperature sensor of the WSTK or of the Thunderboard.
@@ -1098,11 +1098,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the Si7021 digital relative humidity and temperature sensor of the WSTK or of the Thunderboard.
@@ -1110,11 +1110,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the Si7021 digital relative humidity and temperature sensor of the WSTK or of the Thunderboard.
@@ -1122,11 +1122,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the Si7021 digital relative humidity and temperature sensor of the WSTK or of the Thunderboard.
@@ -1134,11 +1134,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the Si7021 digital relative humidity and temperature sensor of the WSTK or of the Thunderboard.
@@ -1146,11 +1146,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the Si7021 digital relative humidity and temperature sensor of the WSTK or of the Thunderboard.
@@ -1158,11 +1158,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the Si7021 digital relative humidity and temperature sensor of the WSTK or of the Thunderboard.
@@ -1170,11 +1170,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the Si7021 digital relative humidity and temperature sensor of the WSTK or of the Thunderboard.
@@ -1182,11 +1182,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the Si7021 digital relative humidity and temperature sensor of the WSTK or of the Thunderboard.
@@ -1194,11 +1194,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the Si7021 digital relative humidity and temperature sensor of the WSTK or of the Thunderboard.
@@ -1206,11 +1206,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the Si7021 digital relative humidity and temperature sensor of the WSTK or of the Thunderboard.
@@ -1218,11 +1218,11 @@
-
+
-
+
Implements a GATT Server with the Health Thermometer Profile, which enables a Client device to connect and get temperature data. Temperature is read from the Si7021 digital relative humidity and temperature sensor of the WSTK or of the Thunderboard.
@@ -1230,11 +1230,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1242,11 +1242,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1254,11 +1254,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1266,11 +1266,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1278,11 +1278,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1290,11 +1290,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1302,11 +1302,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1314,11 +1314,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1326,11 +1326,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1338,11 +1338,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1350,11 +1350,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1362,11 +1362,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1374,11 +1374,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1386,11 +1386,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1398,11 +1398,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1410,11 +1410,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1422,11 +1422,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1434,11 +1434,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1446,11 +1446,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1458,11 +1458,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1470,11 +1470,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1482,11 +1482,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1494,11 +1494,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1506,11 +1506,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1518,11 +1518,11 @@
-
+
-
+
This example tests the throughput capabilities of the device and can be used to measure throughput between 2 *EFR32* devices, as well as between a device and a smartphone using EFR Connect mobile app, through the Throughput demo tile.
@@ -1530,11 +1530,11 @@
-
+
-
+
Demonstrates the features of the Thunderboard EFR32BG22 Kit. This can be tested with the EFR Connect mobile app.
@@ -1542,11 +1542,11 @@
-
+
-
+
Demonstrates the features of the Thunderboard EFR32BG22 Kit. This can be tested with the EFR Connect mobile app.
@@ -1554,11 +1554,11 @@
-
+
-
+
Demonstrates the features of the Thunderboard Sense 2 Kit. This can be tested with the EFR Connect mobile app.
@@ -1566,11 +1566,11 @@
-
+
-
+
Voice over Bluetooth Low Energy sample application. It is supported by Thunderboard Sense 2 and Thunderboard EFR32BG22 boards and demonstrates how to send voice data over GATT, which is acquired from the on-board microphones.
@@ -1578,11 +1578,11 @@
-
+
-
+
Voice over Bluetooth Low Energy sample application. It is supported by Thunderboard Sense 2 and Thunderboard EFR32BG22 boards and demonstrates how to send voice data over GATT, which is acquired from the on-board microphones.
@@ -1590,11 +1590,11 @@
-
+
-
+
Voice over Bluetooth Low Energy sample application. It is supported by Thunderboard Sense 2 and Thunderboard EFR32BG22 boards and demonstrates how to send voice data over GATT, which is acquired from the on-board microphones.
@@ -1602,11 +1602,11 @@
-
+
-
+
Sends non-connectable advertisements in iBeacon format. The iBeacon Service gives Bluetooth accessories a simple and convenient way to send iBeacons to smartphones. This example can be tested together with the EFR Connect mobile app.
@@ -1614,7 +1614,7 @@
-
+
@@ -1625,7 +1625,7 @@
-
+
@@ -1636,7 +1636,7 @@
-
+
@@ -1647,7 +1647,7 @@
-
+
@@ -1658,7 +1658,7 @@
-
+
@@ -1669,7 +1669,7 @@
-
+
@@ -1680,7 +1680,7 @@
-
+
@@ -1691,7 +1691,7 @@
-
+
@@ -1702,7 +1702,7 @@
-
+
@@ -1713,7 +1713,7 @@
-
+
@@ -1724,7 +1724,7 @@
-
+
@@ -1735,7 +1735,7 @@
-
+
@@ -1746,7 +1746,7 @@
-
+
@@ -1757,7 +1757,7 @@
-
+
@@ -1768,7 +1768,7 @@
-
+
@@ -1779,7 +1779,7 @@
-
+
@@ -1790,7 +1790,7 @@
-
+
@@ -1801,7 +1801,7 @@
-
+
@@ -1812,7 +1812,7 @@
-
+
@@ -1823,7 +1823,7 @@
-
+
@@ -1834,7 +1834,7 @@
-
+
@@ -1845,7 +1845,7 @@
-
+
@@ -1856,7 +1856,7 @@
-
+
@@ -1867,7 +1867,7 @@
-
+
@@ -1878,7 +1878,7 @@
-
+
@@ -1889,7 +1889,7 @@
-
+
@@ -1900,7 +1900,7 @@
-
+
@@ -1911,7 +1911,7 @@
-
+
@@ -1922,7 +1922,7 @@
-
+
@@ -1933,7 +1933,7 @@
-
+
@@ -1944,7 +1944,7 @@
-
+
@@ -1955,7 +1955,7 @@
-
+
@@ -1966,7 +1966,7 @@
-
+
@@ -1977,11 +1977,11 @@
-
+
-
+
Network Co-Processor (NCP) target application extended with CTE Receiver support. It enables Angle of Arrival (AoA) calculation. Use this application with Direction Finding host examples.
@@ -1989,11 +1989,11 @@
-
+
-
+
This sample app demonstrates a CTE (Constant Tone Extension) transmitter that can be used as an asset tag in a Direction Finding setup estimating Angle of Arrival (AoA).
@@ -2001,11 +2001,11 @@
-
+
-
+
This sample app demonstrates a CTE (Constant Tone Extension) transmitter that can be used as an asset tag in a Direction Finding setup estimating Angle of Arrival (AoA).
@@ -2013,11 +2013,11 @@
-
+
-
+
This sample app demonstrates a CTE (Constant Tone Extension) transmitter that can be used as an asset tag in a Direction Finding setup estimating Angle of Arrival (AoA).
@@ -2025,11 +2025,11 @@
-
+
-
+
Network Co-Processor (NCP) target application extended with CTE Receiver support. It enables Angle of Departure (AoD) calculation. Use this application with Direction Finding Studio tools.
@@ -2037,11 +2037,11 @@
-
+
-
+
Network Co-Processor (NCP) target application extended with CTE Receiver support. It enables Angle of Departure (AoD) calculation. Use this application with Direction Finding Studio tools.
@@ -2049,11 +2049,11 @@
-
+
-
+
Network Co-Processor (NCP) target application extended with CTE Receiver support. It enables Angle of Departure (AoD) calculation. Use this application with Direction Finding Studio tools.
@@ -2061,11 +2061,11 @@
-
+
-
+
This sample app demonstrates a CTE (Constant Tone Extension) transmitter that can be used as a locator beacon in a Direction Finding setup estimating Angle of Departure (AoD).
@@ -2073,11 +2073,11 @@
-
+
-
+
This sample app demonstrates a CTE (Constant Tone Extension) transmitter that can be used as a locator beacon in a Direction Finding setup estimating Angle of Departure (AoD).
@@ -2085,11 +2085,11 @@
-
+
-
+
This is a Dynamic Multiprotocol reference application demonstrating a light bulb that can be switched both via Bluetooth and via a Proprietary protocol. Can be tested with the EFR Connect mobile app and Flex (RAIL) Switch sample app.
@@ -2097,10 +2097,10 @@
-
+
-
+
diff --git a/app/bluetooth/common/abr_cs_parser/abr_file_log.c b/app/bluetooth/common/abr_cs_parser/abr_file_log.c
index 33c46a2a0a..385cb27f5a 100644
--- a/app/bluetooth/common/abr_cs_parser/abr_file_log.c
+++ b/app/bluetooth/common/abr_cs_parser/abr_file_log.c
@@ -954,6 +954,8 @@ sl_status_t abr_file_log_store_step(abr_role_t role, cs_step_t *step_data)
return sc;
}
+// -----------------------------------------------------------------------------
+// Private function definitions
static void replace_char(char *str, char target_char, char new_char)
{
for (int i = 0; str[i] != '\0'; i++) {
diff --git a/app/bluetooth/common/abr_initiator/abr_initiator.c b/app/bluetooth/common/abr_initiator/abr_initiator.c
index 8f37cb68c2..4b546cdcbe 100644
--- a/app/bluetooth/common/abr_initiator/abr_initiator.c
+++ b/app/bluetooth/common/abr_initiator/abr_initiator.c
@@ -426,6 +426,9 @@ void abr_initiator_deinit(void)
sl_status_t sc;
if (connection_handle != SL_BT_INVALID_CONNECTION_HANDLE) {
+ app_log_info("Shutting down CS parser" APP_LOG_NL);
+ sc = abr_cs_parser_deinit();
+ app_assert_status(sc);
app_log_info("Closing connection" APP_LOG_NL);
sc = sl_bt_connection_close(connection_handle);
app_assert_status(sc);
diff --git a/app/bluetooth/common/cbap_lib/lib/cbap_CM33_gcc.a b/app/bluetooth/common/cbap_lib/lib/cbap_CM33_gcc.a
index a363a2924b..501810c2fa 100644
--- a/app/bluetooth/common/cbap_lib/lib/cbap_CM33_gcc.a
+++ b/app/bluetooth/common/cbap_lib/lib/cbap_CM33_gcc.a
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:bdec4fc9fa229b8d3f4d8914b8fe10b44509dda30dfd8269f34c609ddb2dce76
+oid sha256:24315681109032cf71671416cd53eefd73a05b710a567935b703f3b72cac5047
size 5326
diff --git a/app/bluetooth/common/cbap_lib/lib/cbap_CM33_iar.a b/app/bluetooth/common/cbap_lib/lib/cbap_CM33_iar.a
index 7a51539a98..a0397d8ba6 100644
--- a/app/bluetooth/common/cbap_lib/lib/cbap_CM33_iar.a
+++ b/app/bluetooth/common/cbap_lib/lib/cbap_CM33_iar.a
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:91007e2571715dc8739d5a3228bada4882be2c7d99d1e534169d4c48049f54f8
+oid sha256:43c12b1b2061cfadb814162b284ce1f01a1e55fa09486a8b9f9a6c5704d89314
size 10582
diff --git a/app/bluetooth/common/esl_tag_core/inc/esl_tag_core.h b/app/bluetooth/common/esl_tag_core/inc/esl_tag_core.h
index 494b5e1a4a..b89c5501c7 100644
--- a/app/bluetooth/common/esl_tag_core/inc/esl_tag_core.h
+++ b/app/bluetooth/common/esl_tag_core/inc/esl_tag_core.h
@@ -179,10 +179,21 @@ uint8_t esl_core_get_basic_state_bit(uint8_t bit);
*****************************************************************************/
esl_basic_state_t esl_core_set_basic_state_bit(uint8_t bit, uint8_t value);
+/**************************************************************************//**
+ * Get randomizer value for ESL response packet encryption.
+ * Returns SL_STATUS_NOT_READY until the randomizer is initialized.
+ * Returns SL_STATUS_OK on success after which the data will be available in
+ * the randomizer array passed as input parameter.
+ *
+ * @param[out] randomizer sl_bt_ead_randomizer_t array type to the storage
+ * @return sl_status_t
+ *****************************************************************************/
+sl_status_t esl_core_get_randomizer(sl_bt_ead_randomizer_t randomizer);
+
/**************************************************************************//**
* Read the value from the AP Key characteristics of ESL service.
* Returns SL_STATUS_NOT_READY until AP Key is written by the bonded AP.
- * My return other failing status as well, depending on stack response, or
+ * May return other failing status as well, depending on stack response, or
* SL_STATUS_OK on success. In the latter case, the data will be available in
* *(uint8_t*)ap_key in a format of little endian (packed) byte stream. Size of
* the stream is defined in ESL standard.
diff --git a/app/bluetooth/common/esl_tag_core/src/esl_tag_core.c b/app/bluetooth/common/esl_tag_core/src/esl_tag_core.c
index 9b68dfcbd5..dce823a0de 100644
--- a/app/bluetooth/common/esl_tag_core/src/esl_tag_core.c
+++ b/app/bluetooth/common/esl_tag_core/src/esl_tag_core.c
@@ -86,6 +86,7 @@
#define ESL_CONFIG_FLAG_ESL_RESPONSE_KEY (0x04u)
#define ESL_CONFIG_FLAG_ESL_ABS_TIME (0x08u)
#define ESL_CONFIG_FLAG_UPDATE_COMPLETE (0x10u)
+#define ESL_CONFIG_FLAG_RANDOMIZER_READY (0x20u)
#define ESL_CONFIG_FLAGS_MANDATORY_MASK (ESL_CONFIG_FLAG_ESL_ADDRESS \
| ESL_CONFIG_FLAG_ESL_AP_KEY \
| ESL_CONFIG_FLAG_ESL_RESPONSE_KEY \
@@ -158,6 +159,16 @@ typedef struct {
uint8_t advertising_set_handle;
} esl_persistent_struct_t;
+typedef union {
+ // Note: this will only work as expected on little endian machines!
+ sl_bt_ead_randomizer_t randomizer;
+ // Use exact naming from Core spec. v5.4, Vol 6, Part E, Section 2 (CCM)
+ uint64_t packetCounter;
+} response_randomizer_t;
+
+// EAD Randomizer for ESL Responses encryption
+static response_randomizer_t esl_core_response_randomizer = { 0 };
+
// Custom data for advertising, in accordance with ESLS v1.0r01, section 2.7.3.1
static const uint8_t esl_core_advertising_data[] = {
0x02, 0x01, 0x06, // Flags
@@ -200,6 +211,16 @@ static esl_persistent_struct_t esl_tag_persistent = {
.advertising_set_handle = SL_BT_INVALID_ADVERTISING_SET_HANDLE
};
+// ESL Tag asynchronous randomizer callback
+static void esl_core_async_randomizer(void *p_event_data, uint16_t event_size)
+{
+ (void)event_size;
+
+ // Remove ready flag so a new randomizer value will be generated by CSPRNG
+ esl_tag.config_status &= (uint8_t) (~ESL_CONFIG_FLAG_RANDOMIZER_READY);
+ (void)esl_core_get_randomizer(p_event_data);
+}
+
// ESL Tag PAwR sync handle getter
uint16_t esl_core_get_sync_handle(void)
{
@@ -432,6 +453,9 @@ static void esl_state_boot_handler(sl_bt_msg_t *evt)
ESL_LOG_LEVEL_DEBUG,
"Started with random seed: %lu.",
seed);
+ // set an arbitrary, initial random value for the ESL EAD Randomizer
+ esl_core_response_randomizer.packetCounter = 0xfa7eful * seed;
+ esl_tag.config_status |= ESL_CONFIG_FLAG_RANDOMIZER_READY;
// init stdlib's rand() generator by our TRNG seed
srand(seed);
// Set custom data for advertising, according to ESLS v0.9d095r08, section 2.7.3.1
@@ -736,6 +760,9 @@ static void esl_state_configuring_handler(sl_bt_msg_t *evt)
ESL_LOG_LEVEL_INFO,
"Write AP Response Key Material");
+ // get new randomizer value whenever the Response Key Material is written
+ (void)app_scheduler_add(&esl_core_async_randomizer, 0, 0, NULL);
+
if (overall_size == SL_BT_EAD_KEY_MATERIAL_SIZE) {
esl_tag.config_status |= execute_write_flag;
break;
@@ -1296,6 +1323,34 @@ esl_basic_state_t esl_core_set_basic_state_bit(uint8_t bit, uint8_t value)
return esl_tag.basic_state;
}
+sl_status_t esl_core_get_randomizer(sl_bt_ead_randomizer_t randomizer)
+{
+ sl_status_t result = SL_STATUS_NOT_READY;
+
+ if (!!(esl_tag.config_status & ESL_CONFIG_FLAG_RANDOMIZER_READY)) {
+ // Increase packet counter for every new packet
+ ++esl_core_response_randomizer.packetCounter;
+ result = SL_STATUS_OK;
+ } else {
+ struct sl_bt_ead_nonce_s nonce;
+
+ result = sl_bt_ead_randomizer_update(&nonce);
+
+ if (result == SL_STATUS_OK) {
+ memcpy((void *)esl_core_response_randomizer.randomizer, (void *)nonce.randomizer,
+ SL_BT_EAD_RANDOMIZER_SIZE);
+ esl_tag.config_status |= ESL_CONFIG_FLAG_RANDOMIZER_READY;
+ }
+ }
+
+ if (result == SL_STATUS_OK && randomizer != NULL) {
+ memcpy((void *)randomizer, (void *)esl_core_response_randomizer.randomizer,
+ SL_BT_EAD_RANDOMIZER_SIZE);
+ }
+
+ return result;
+}
+
sl_status_t esl_core_read_ap_key(sl_bt_ead_key_material_p ap_key)
{
sl_status_t result = SL_STATUS_NOT_READY;
diff --git a/app/bluetooth/common/esl_tag_core/src/esl_tag_crypto.c b/app/bluetooth/common/esl_tag_core/src/esl_tag_crypto.c
index e201b58946..7de78b44ff 100644
--- a/app/bluetooth/common/esl_tag_core/src/esl_tag_crypto.c
+++ b/app/bluetooth/common/esl_tag_core/src/esl_tag_crypto.c
@@ -65,7 +65,13 @@ void* esl_core_encrypt_message(void *msg, uint8_t *len)
status = esl_core_read_response_key(&key_material);
if (status == SL_STATUS_OK) {
- status = sl_bt_ead_session_init(&key_material, NULL, &nonce);
+ status = esl_core_get_randomizer(nonce.randomizer);
+ }
+
+ if (status == SL_STATUS_OK) {
+ status = sl_bt_ead_session_init(&key_material,
+ nonce.randomizer,
+ &nonce);
}
if (status == SL_STATUS_OK) {
diff --git a/app/bluetooth/common/esl_tag_core/src/esl_tag_opcodes.c b/app/bluetooth/common/esl_tag_core/src/esl_tag_opcodes.c
index 141755e1ea..8a6b0a605f 100644
--- a/app/bluetooth/common/esl_tag_core/src/esl_tag_opcodes.c
+++ b/app/bluetooth/common/esl_tag_core/src/esl_tag_opcodes.c
@@ -3,7 +3,7 @@
* @brief ESL Tag opcode processor implementation
*******************************************************************************
* # License
- * Copyright 2021 Silicon Laboratories Inc. www.silabs.com
+ * Copyright 2024 Silicon Laboratories Inc. www.silabs.com
*******************************************************************************
*
* SPDX-License-Identifier: Zlib
@@ -29,6 +29,7 @@
******************************************************************************/
#include
#include
+#include "sl_common.h"
#include "esl_tag_log.h"
#include "esl_tag_tlv.h"
#include "esl_tag_core.h"
diff --git a/app/bluetooth/common/gatt_service_aio/sl_gatt_service_aio.c b/app/bluetooth/common/gatt_service_aio/sl_gatt_service_aio.c
index 62ed5f2a2b..77c5f301d3 100644
--- a/app/bluetooth/common/gatt_service_aio/sl_gatt_service_aio.c
+++ b/app/bluetooth/common/gatt_service_aio/sl_gatt_service_aio.c
@@ -3,7 +3,7 @@
* @brief Automation IO GATT service
*******************************************************************************
* # License
- * Copyright 2022 Silicon Laboratories Inc. www.silabs.com
+ * Copyright 2024 Silicon Laboratories Inc. www.silabs.com
*******************************************************************************
*
* SPDX-License-Identifier: Zlib
@@ -29,6 +29,7 @@
******************************************************************************/
#include "stdbool.h"
+#include "sl_common.h"
#include "sl_status.h"
#include "gatt_db.h"
#include "app_assert.h"
diff --git a/app/bluetooth/common/ots/src/sl_bt_ots_client.c b/app/bluetooth/common/ots/src/sl_bt_ots_client.c
index 177e6ab518..b9926949f6 100644
--- a/app/bluetooth/common/ots/src/sl_bt_ots_client.c
+++ b/app/bluetooth/common/ots/src/sl_bt_ots_client.c
@@ -1187,11 +1187,11 @@ void sli_bt_ots_client_on_bt_event(sl_bt_msg_t *evt)
// Set status
handle->status = CLIENT_STATUS_DISCONNECTED;
- // Do callback
- CALL_SAFE(handle, on_disconnect, handle);
-
// Remove client from the list
sl_slist_remove(&client_list, &handle->node);
+
+ // The callback should be invoked last, as this might free up allocated memory behind the handle.
+ CALL_SAFE(handle, on_disconnect, handle);
break;
}
}
diff --git a/app/bluetooth/common/simple_com/sl_simple_com_cpc.c b/app/bluetooth/common/simple_com/sl_simple_com_cpc.c
index 8dfd4e3715..e84570f470 100644
--- a/app/bluetooth/common/simple_com/sl_simple_com_cpc.c
+++ b/app/bluetooth/common/simple_com/sl_simple_com_cpc.c
@@ -3,7 +3,7 @@
* @brief Simple Communication Interface (CPC)
*******************************************************************************
* # License
- * Copyright 2023 Silicon Laboratories Inc. www.silabs.com
+ * Copyright 2024 Silicon Laboratories Inc. www.silabs.com
*******************************************************************************
*
* SPDX-License-Identifier: Zlib
@@ -28,6 +28,7 @@
*
******************************************************************************/
+#include "sl_common.h"
#include
#include "sl_simple_com.h"
#include "sl_simple_com_config.h"
diff --git a/app/bluetooth/common/wake_lock/sl_wake_lock.c b/app/bluetooth/common/wake_lock/sl_wake_lock.c
index 448884d5bb..096879d305 100644
--- a/app/bluetooth/common/wake_lock/sl_wake_lock.c
+++ b/app/bluetooth/common/wake_lock/sl_wake_lock.c
@@ -3,7 +3,7 @@
* @brief Wake and sleep functionality
*******************************************************************************
* # License
- * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ * Copyright 2024 Silicon Laboratories Inc. www.silabs.com
*******************************************************************************
*
* SPDX-License-Identifier: Zlib
@@ -31,6 +31,7 @@
#define CURRENT_MODULE_NAME "APP_BLUETOOTH_EXAMPLE_WAKE_LOCK"
#include "em_gpio.h"
+#include "sl_common.h"
#include "gpiointerrupt.h"
#include "sl_wake_lock.h"
#include "sl_power_manager.h"
diff --git a/app/bluetooth/common_host/app_timer/app_timer_win.c b/app/bluetooth/common_host/app_timer/app_timer_win.c
index 66b290f507..2295af1df5 100644
--- a/app/bluetooth/common_host/app_timer/app_timer_win.c
+++ b/app/bluetooth/common_host/app_timer/app_timer_win.c
@@ -117,7 +117,7 @@ __attribute__((stdcall)) static void app_timer_common_callback(HWND hwnd,
tmp_timer_ptr = tmp_timer_ptr->next;
}
if (NULL == tmp_timer_ptr) {
- app_log_error("Timer handle %d not found." APP_LOG_NL, timer_id);
+ app_log_error("Timer handle %p not found." APP_LOG_NL, (void*)timer_id);
(void)KillTimer(NULL, timer_id);
(void)GetLastError();
} else {
diff --git a/app/bluetooth/common_host/esl_lib/esl_lib.h b/app/bluetooth/common_host/esl_lib/esl_lib.h
index 5600f25c4e..94bc9a88e7 100644
--- a/app/bluetooth/common_host/esl_lib/esl_lib.h
+++ b/app/bluetooth/common_host/esl_lib/esl_lib.h
@@ -62,17 +62,17 @@ extern "C" {
// Periodic advertisement interval for PAwR train.
// Value in units of 1.25 ms.
-#define ESL_LIB_PAWR_MIN_INTERVAL_DEFAULT 1233
+#define ESL_LIB_PAWR_MIN_INTERVAL_DEFAULT 1248
// Number of subevents, practically has to be equal to the supported number
// of ESL groups.
#define ESL_LIB_PAWR_MAX_INTERVAL_DEFAULT ESL_LIB_PAWR_MIN_INTERVAL_DEFAULT
-// Scalable up to 7140 tags in 28 groups
-#define ESL_LIB_PAWR_SUBEVENT_COUNT_DEFAULT 28
+// Scalable up to 6630 tags in 26 groups
+#define ESL_LIB_PAWR_SUBEVENT_COUNT_DEFAULT 26
// 55 ms
-#define ESL_LIB_PAWR_SUBEVENT_INTERVAL_DEFAULT 44
+#define ESL_LIB_PAWR_SUBEVENT_INTERVAL_DEFAULT 48
// Time between the advertising packet in a subevent and the first response
// slot. Value in units of 1.25 ms.
-#define ESL_LIB_PAWR_RESPONSE_SLOT_DELAY_DEFAULT 30
+#define ESL_LIB_PAWR_RESPONSE_SLOT_DELAY_DEFAULT 34
// Time between response slots. Value in units of 0.125 ms.
// 0.75 ms enough for up to 75 bytes on 1M phy
// (including LL overhead plus T_IFS)
@@ -456,6 +456,7 @@ typedef struct esl_lib_evt_connection_opened_s {
esl_lib_connection_handle_t connection_handle; ///< Connection handle
esl_lib_address_t address; ///< BLE address
esl_lib_gattdb_handles_t gattdb_handles; ///< GATT database handles
+ sl_status_t status; ///< Status
} esl_lib_evt_connection_opened_t;
/// Bonding data event
diff --git a/app/bluetooth/common_host/esl_lib/esl_lib_ap_control.c b/app/bluetooth/common_host/esl_lib/esl_lib_ap_control.c
index ade29d221b..2b17b3db20 100644
--- a/app/bluetooth/common_host/esl_lib/esl_lib_ap_control.c
+++ b/app/bluetooth/common_host/esl_lib/esl_lib_ap_control.c
@@ -97,15 +97,15 @@ static sl_status_t send_event_from_storage(esl_lib_ap_control_evt_type_t evt_typ
// Private variables
static ap_control_t ap_control = {
- .initialized = false,
- .cp_handle = ESL_LIB_INVALID_CHARACTERISTIC_HANDLE,
- .it_handle = ESL_LIB_INVALID_CHARACTERISTIC_HANDLE,
- .state = ESL_LIB_AP_CONTROL_STATE_DISCONNECTED,
- .conn_handle = SL_BT_INVALID_CONNECTION_HANDLE,
+ .initialized = false,
+ .cp_handle = ESL_LIB_INVALID_CHARACTERISTIC_HANDLE,
+ .it_handle = ESL_LIB_INVALID_CHARACTERISTIC_HANDLE,
+ .state = ESL_LIB_AP_CONTROL_STATE_DISCONNECTED,
+ .conn_handle = SL_BT_INVALID_CONNECTION_HANDLE,
.subscribed_cp = false,
.subscribed_it = false,
- .adv_handle = SL_BT_INVALID_ADVERTISING_SET_HANDLE,
- .cp_storage = ESL_LIB_INVALID_HANDLE
+ .adv_handle = SL_BT_INVALID_ADVERTISING_SET_HANDLE,
+ .cp_storage = ESL_LIB_INVALID_HANDLE
};
// -----------------------------------------------------------------------------
@@ -113,12 +113,24 @@ static ap_control_t ap_control = {
sl_status_t esl_lib_ap_control_cleanup(void)
{
- if (ap_control.conn_handle != SL_BT_INVALID_CONNECTION_HANDLE) {
- (void)sl_bt_connection_close(ap_control.conn_handle);
+ if (ap_control.initialized) {
+ if (ap_control.conn_handle != SL_BT_INVALID_CONNECTION_HANDLE) {
+ (void)sl_bt_connection_close(ap_control.conn_handle);
+ }
+ (void)esl_lib_ap_control_adv_enable(false);
+ (void)esl_lib_storage_delete(&ap_control.cp_storage);
+ esl_lib_log_ap_control_debug("AP Control cleanup complete" APP_LOG_NL);
+ // Reset static state storage
+ ap_control.initialized = false;
+ ap_control.cp_handle = ESL_LIB_INVALID_CHARACTERISTIC_HANDLE;
+ ap_control.it_handle = ESL_LIB_INVALID_CHARACTERISTIC_HANDLE;
+ ap_control.state = ESL_LIB_AP_CONTROL_STATE_DISCONNECTED;
+ ap_control.conn_handle = SL_BT_INVALID_CONNECTION_HANDLE;
+ ap_control.subscribed_cp = false;
+ ap_control.subscribed_it = false;
+ ap_control.adv_handle = SL_BT_INVALID_ADVERTISING_SET_HANDLE;
+ ap_control.cp_storage = ESL_LIB_INVALID_HANDLE;
}
- (void)esl_lib_storage_delete(&ap_control.cp_storage);
- (void)esl_lib_ap_control_adv_enable(false);
- esl_lib_log_ap_control_debug("AP Control cleanup complete" APP_LOG_NL);
return SL_STATUS_OK;
}
diff --git a/app/bluetooth/common_host/esl_lib/esl_lib_connection.c b/app/bluetooth/common_host/esl_lib/esl_lib_connection.c
index 91b135a5e9..d603eb2c78 100644
--- a/app/bluetooth/common_host/esl_lib/esl_lib_connection.c
+++ b/app/bluetooth/common_host/esl_lib/esl_lib_connection.c
@@ -112,7 +112,7 @@ static void connection_timeout(app_timer_t *timer,
static void reconnect_timeout(app_timer_t *timer,
void *data);
static bool uuid_16_match(uint8_t *uuid_a, uint8_t *uuid_b);
-static void connection_complete(esl_lib_connection_t *conn);
+static void connection_complete(esl_lib_connection_t *conn, sl_status_t result);
static bool check_connected(esl_lib_connection_t *conn);
static bool check_image_transfer(esl_lib_connection_t *conn);
static void on_image_transfer_type_arrived(esl_lib_image_transfer_handle_t handle,
@@ -217,7 +217,7 @@ sl_status_t esl_lib_connection_open(esl_lib_command_list_cmd_t *cmd)
sl_status_t sc = SL_STATUS_OK;
esl_lib_address_t *identity = NULL;
bd_addr *identity_addr = NULL;
- esl_lib_connection_t *conn = cmd->data.cmd_connect.conn_hnd;
+ esl_lib_connection_t *conn = (esl_lib_connection_t *)cmd->data.cmd_connect.conn_hnd;
uint8_t connection_handle = SL_BT_INVALID_CONNECTION_HANDLE;
bd_addr *addr = NULL;
uint8_t address_type = 0;
@@ -247,7 +247,6 @@ sl_status_t esl_lib_connection_open(esl_lib_command_list_cmd_t *cmd)
} else {
esl_lib_log_connection_debug("Initiate new connection" APP_LOG_NL);
}
-
if (cmd->data.cmd_connect.retries_left) {
// Set address
address = &cmd->data.cmd_connect.address;
@@ -318,6 +317,7 @@ sl_status_t esl_lib_connection_open(esl_lib_command_list_cmd_t *cmd)
sl_bt_gap_phy_1m,
&connection_handle);
}
+
if (sc == SL_STATUS_OK) {
// If not retry, add a new connection
if (conn == ESL_LIB_INVALID_HANDLE) {
@@ -369,7 +369,7 @@ sl_status_t esl_lib_connection_open(esl_lib_command_list_cmd_t *cmd)
// Pass the ownership of initial connect command to conn. handle on success - otherwise ap_core will free it
conn->command = cmd;
- conn->command->data.cmd_connect.conn_hnd = conn;
+ conn->command->data.cmd_connect.conn_hnd = (esl_lib_connection_handle_t)conn;
conn->command_complete = false;
esl_lib_log_connection_debug(CONN_FMT "Pending new connection to " ESL_LIB_LOG_ADDR_FORMAT APP_LOG_NL,
conn,
@@ -400,16 +400,30 @@ sl_status_t esl_lib_connection_open(esl_lib_command_list_cmd_t *cmd)
ESL_LIB_LOG_ADDR(*address),
sc);
if (conn != NULL) {
+ // Let the caller free the command in case of error
+ if (conn->command == cmd) {
+ conn->command = NULL;
+ }
(void)esl_lib_connection_remove_ptr(conn);
cmd->data.cmd_connect.conn_hnd = ESL_LIB_INVALID_HANDLE;
}
}
} else {
- esl_lib_log_connection_error("Connection failure, no more retry attempts" APP_LOG_NL);
- sc = SL_STATUS_BT_CTRL_CONNECTION_FAILED_TO_BE_ESTABLISHED;
- // Force removal of connection handle in case of no more retry
- (void)esl_lib_connection_remove_ptr(conn);
- cmd->data.cmd_connect.conn_hnd = ESL_LIB_INVALID_HANDLE;
+ if (conn == ESL_LIB_INVALID_HANDLE) {
+ // Just to avoid any NULL dereferencing below - otherwise this code path is implausible:
+ // cmd->data.cmd_connect.retries_left shall never be initialized to zero!
+ sc = SL_STATUS_NOT_READY;
+ } else {
+ esl_lib_log_connection_error("Connection failure, no more retry attempts" APP_LOG_NL);
+ sc = SL_STATUS_BT_CTRL_CONNECTION_FAILED_TO_BE_ESTABLISHED;
+ // Let the caller free the command in case of error
+ if (conn->command == cmd) {
+ conn->command = NULL;
+ }
+ // Force removal of connection handle in case of no more retry
+ (void)esl_lib_connection_remove_ptr(conn);
+ cmd->data.cmd_connect.conn_hnd = ESL_LIB_INVALID_HANDLE;
+ }
}
return sc;
}
@@ -434,10 +448,11 @@ sl_status_t esl_lib_connection_add(uint8_t conn,
} else {
ptr = (esl_lib_connection_t *)esl_lib_memory_allocate(sizeof(esl_lib_connection_t));
if (ptr != NULL) {
- *ptr_out = ptr;
memset(ptr, 0, sizeof(*ptr));
ptr->connection_handle = conn;
ptr->command_complete = true;
+ ptr->last_error = SL_STATUS_IN_PROGRESS; // Operation is in progress and not yet complete (pass or fail)
+ *ptr_out = ptr;
sl_slist_push_back(&connection_list, &ptr->node);
sc = app_timer_start(&ptr->timer,
@@ -665,6 +680,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
(void)esl_lib_connection_remove_ptr(conn);
conn = NULL;
} else if (conn->command != NULL) {
+ const bool pending_connect = (conn->state == ESL_LIB_CONNECTION_STATE_CONNECTING || conn->state == ESL_LIB_CONNECTION_STATE_RECONNECTING);
// Not connected, check if a retry is required (link issue or bonding issue)
if ((conn->command->cmd_code == ESL_LIB_CMD_CONNECT)
&& (conn->command->data.cmd_connect.retries_left)
@@ -681,9 +697,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
timeout = (pawr->config.adv_interval.max << 1) - (pawr->config.adv_interval.max >> 3); // = 1.5f * (pawr->config.adv_interval.max * 1.25f) [ms]
}
- if (reason == SL_STATUS_BT_CTRL_CONNECTION_FAILED_TO_BE_ESTABLISHED
- && (conn->state == ESL_LIB_CONNECTION_STATE_CONNECTING
- || conn->state == ESL_LIB_CONNECTION_STATE_RECONNECTING)) {
+ if (pending_connect) {
// If a connection request via PAwR times out, the sl_bt_evt_connection_closed_id
// event occurs without the preceding sl_bt_evt_connection_opened_id event!
conn->command_complete = true;
@@ -710,7 +724,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
break;
}
} else {
- // check again for the out-of-retries reason - set SL_STATUS_ABORT in case
+ // Check again for the out-of-retries reason - set SL_STATUS_ABORT in case
if (conn->command->cmd_code == ESL_LIB_CMD_CONNECT && conn->command->data.cmd_connect.retries_left == 0) {
reason = SL_STATUS_ABORT;
esl_lib_log_connection_debug(CONN_FMT "No more connect retry for " ESL_LIB_LOG_ADDR_FORMAT ", last handle = %u" APP_LOG_NL,
@@ -719,14 +733,14 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
(conn->address_type ? "random" : "public"),
ESL_LIB_LOG_BD_ADDR(conn->address),
conn->connection_handle);
+ // Decouple the handle mapping to the ESL_LIB_CMD_CONNECT command as the connection handle will be freed, soon
+ conn->command->data.cmd_connect.conn_hnd = ESL_LIB_INVALID_HANDLE;
}
(void)send_connection_error(conn,
ESL_LIB_STATUS_CONN_FAILED,
reason,
conn->state);
- if ((conn->state == ESL_LIB_CONNECTION_STATE_CONNECTING
- || conn->state == ESL_LIB_CONNECTION_STATE_RECONNECTING)
- && find_tlv(conn->command, ESL_LIB_CONNECT_DATA_TYPE_PAWR, &tlv)) {
+ if (pending_connect) {
// If a connection request via PAwR times out, the sl_bt_evt_connection_closed_id
// event occurs without the preceding sl_bt_evt_connection_opened_id event!
conn->command_complete = true;
@@ -789,7 +803,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
conn->connection_handle,
sc);
// Close connection
- (void)sl_bt_connection_close(conn->connection_handle);
+ (void)(void)close_connection(conn);
lib_status = ESL_LIB_STATUS_CONN_SUBSCRIBE_FAILED;
}
} else {
@@ -813,7 +827,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
conn->connection_handle,
sc);
// Close connection
- (void)sl_bt_connection_close(conn->connection_handle);
+ (void)close_connection(conn);
lib_status = ESL_LIB_STATUS_CONN_DISCOVERY_FAILED;
}
}
@@ -936,7 +950,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
conn,
conn->connection_handle);
// Close the connection in case of error.
- (void)sl_bt_connection_close(conn->connection_handle);
+ (void)close_connection(conn);
}
} else {
esl_lib_log_connection_error(CONN_FMT "No passkey available but requested, connection handle = %u" APP_LOG_NL,
@@ -960,7 +974,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
conn->state = ESL_LIB_CONNECTION_STATE_BONDING;
} else {
// Close the connection in case of error.
- (void)sl_bt_connection_close(conn->connection_handle);
+ (void)close_connection(conn);
lib_status = ESL_LIB_STATUS_BONDING_FAILED;
esl_lib_log_connection_error(CONN_FMT "Increase security failed, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
conn,
@@ -1028,7 +1042,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
// Save reason to the status variable.
sc = evt->data.evt_sm_bonding_failed.reason;
}
- // Try to close connection
+ // Try to close connection gently - it should be closing already
(void)close_connection(conn);
} else {
// Suppress error event for unknown connections
@@ -1048,7 +1062,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
conn,
conn->connection_handle,
sc);
- (void)sl_bt_connection_close(conn->connection_handle);
+ (void)close_connection(conn);
} else if (evt->data.evt_gatt_service.uuid.len == sizeof(sl_bt_uuid_16_t)) {
// Check for service UUIDs
if (uuid_16_match(evt->data.evt_gatt_service.uuid.data, (uint8_t *)uuid_map.services.dis.data)) {
@@ -1220,7 +1234,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
}
if (sc != SL_STATUS_OK) {
// Close connection
- (void)sl_bt_connection_close(conn->connection_handle);
+ (void)close_connection(conn);
lib_status = ESL_LIB_STATUS_CONN_DISCOVERY_FAILED;
esl_lib_log_connection_error(CONN_FMT "DIS discovery failed, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
conn,
@@ -1243,11 +1257,11 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
false);
}
} else {
- sc = SL_STATUS_BT_ATT_INVALID_HANDLE;
+ sc = SL_STATUS_BT_ATT_REQUEST_NOT_SUPPORTED;
}
if (sc != SL_STATUS_OK) {
// Close connection
- (void)sl_bt_connection_close(conn->connection_handle);
+ (void)close_connection(conn);
lib_status = ESL_LIB_STATUS_CONN_DISCOVERY_FAILED;
esl_lib_log_connection_error(CONN_FMT "Discovery failed, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
conn,
@@ -1275,7 +1289,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
}
if (sc != SL_STATUS_OK) {
// Close connection
- (void)sl_bt_connection_close(conn->connection_handle);
+ (void)close_connection(conn);
lib_status = ESL_LIB_STATUS_CONN_DISCOVERY_FAILED;
esl_lib_log_connection_error(CONN_FMT "DIS discovery failed, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
conn,
@@ -1286,7 +1300,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
// Set the cause of the error
sc = SL_STATUS_INVALID_HANDLE;
// Close connection
- (void)sl_bt_connection_close(conn->connection_handle);
+ (void)close_connection(conn);
lib_status = ESL_LIB_STATUS_CONN_DISCOVERY_FAILED;
esl_lib_log_connection_error(CONN_FMT "ESL Service not found, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
conn,
@@ -1322,7 +1336,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
}
if (sc != SL_STATUS_OK) {
// Close connection
- (void)sl_bt_connection_close(conn->connection_handle);
+ (void)close_connection(conn);
lib_status = ESL_LIB_STATUS_CONN_SUBSCRIBE_FAILED;
esl_lib_log_connection_error(CONN_FMT "Subscribe failed, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
conn,
@@ -1333,7 +1347,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
// Set the cause of the error
sc = SL_STATUS_INVALID_HANDLE;
// Close connection
- (void)sl_bt_connection_close(conn->connection_handle);
+ (void)close_connection(conn);
lib_status = ESL_LIB_STATUS_CONN_SUBSCRIBE_FAILED;
esl_lib_log_connection_error(CONN_FMT "ESL CP not found, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
conn,
@@ -1360,7 +1374,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
conn->state = ESL_LIB_CONNECTION_STATE_OTS_INIT;
} else {
// Close connection
- (void)sl_bt_connection_close(conn->connection_handle);
+ (void)close_connection(conn);
lib_status = ESL_LIB_STATUS_OTS_INIT_FAILED;
esl_lib_log_connection_error(CONN_FMT "Image Transfer - OTS init failed, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
conn,
@@ -1369,7 +1383,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
}
} else {
// If no OTS present, consider complete
- connection_complete(conn);
+ connection_complete(conn, SL_STATUS_OK);
}
break;
default:
@@ -1379,7 +1393,7 @@ void esl_lib_connection_on_bt_event(sl_bt_msg_t *evt)
// If not in image transfer, procedures handled by this module
if (!check_image_transfer(conn)) {
// Close connection on procedure failure
- (void)sl_bt_connection_close(conn->connection_handle);
+ (void)close_connection(conn);
lib_status = ESL_LIB_STATUS_CONN_LOST;
sc = evt->data.evt_gatt_procedure_completed.result;
esl_lib_log_connection_error(CONN_FMT "Procedure failure, connection handle = %u, result = 0x%04x" APP_LOG_NL,
@@ -1446,46 +1460,45 @@ static void esl_lib_connection_safe_remove_ptr(esl_lib_connection_t *ptr)
esl_lib_memory_free(ptr->command);
}
clean_tag_info(ptr);
- esl_lib_log_connection_debug(CONN_FMT "Removed connection handle = %u" APP_LOG_NL,
+ esl_lib_log_connection_debug(CONN_FMT "Removed connection handle = %u, last error: 0x%04x" APP_LOG_NL,
ptr,
- ptr->connection_handle);
+ ptr->connection_handle,
+ ptr->last_error);
// Sanitize handles in memory area to avoid possible corruption later due to garbage
ptr->connection_handle = SL_BT_INVALID_CONNECTION_HANDLE;
- ptr->ots_handle = ESL_LIB_INVALID_HANDLE;
+ esl_lib_image_dump_transfer_by_handle(&ptr->ots_handle);
esl_lib_memory_free(ptr);
}
static void run_command(esl_lib_command_list_cmd_t *cmd)
{
- sl_status_t sc = SL_STATUS_OK;
+ sl_status_t sc = SL_STATUS_DELETED;
esl_lib_connection_t *conn = NULL;
esl_lib_status_t lib_status = ESL_LIB_STATUS_NO_ERROR;
switch (cmd->cmd_code) {
case ESL_LIB_CMD_CLOSE_CONNECTION:
conn = (esl_lib_connection_t *)cmd->data.cmd_close_connection;
- esl_lib_log_connection_debug(CONN_FMT "Close connection command, connection handle = %u" APP_LOG_NL,
- conn,
- conn->connection_handle);
if (esl_lib_connection_contains(conn)) {
+ esl_lib_log_connection_debug(CONN_FMT "Close connection command, connection handle = %u" APP_LOG_NL,
+ conn,
+ conn->connection_handle);
sc = close_connection(conn);
+ esl_lib_log_connection_debug(CONN_FMT "After Close connection command, connection handle = %u , sc = 0x%04x" APP_LOG_NL,
+ conn,
+ conn->connection_handle,
+ sc);
} else {
- sc = SL_STATUS_DELETED;
- lib_status = ESL_LIB_STATUS_CONN_FAILED;
- conn->command_complete = true;
+ lib_status = ESL_LIB_STATUS_CONN_CLOSE_FAILED;
}
- esl_lib_log_connection_debug(CONN_FMT "After Close connection command, connection handle = %u , sc = 0x%04x" APP_LOG_NL,
- conn,
- conn->connection_handle,
- sc);
break;
case ESL_LIB_CMD_GET_TAG_INFO:
conn = (esl_lib_connection_t *)cmd->data.cmd_write_image.connection_handle;
- esl_lib_log_connection_debug(CONN_FMT "Get tag info command, connection handle = %u" APP_LOG_NL,
- conn,
- conn->connection_handle);
lib_status = ESL_LIB_STATUS_CONN_READ_FAILED;
if (esl_lib_connection_contains(conn)) {
+ esl_lib_log_connection_debug(CONN_FMT "Get tag info command, connection handle = %u" APP_LOG_NL,
+ conn,
+ conn->connection_handle);
// Check OTS features
if (conn->ots_handle != ESL_LIB_INVALID_HANDLE) {
conn->tag_info_type = ESL_LIB_DATA_TYPE_GATT_OTS_FEATURE;
@@ -1516,7 +1529,7 @@ static void run_command(esl_lib_command_list_cmd_t *cmd)
conn,
conn->tag_info_type,
conn->connection_handle);
- sc = get_tag_info_finish(conn, sc);
+ (void)get_tag_info_finish(conn, sc);
}
}
if (sc == SL_STATUS_OK) {
@@ -1526,35 +1539,30 @@ static void run_command(esl_lib_command_list_cmd_t *cmd)
lib_status = ESL_LIB_STATUS_NO_ERROR;
}
}
- } else {
- sc = SL_STATUS_DELETED;
- conn->command_complete = true;
}
break;
case ESL_LIB_CMD_CONFIGURE_TAG:
conn = (esl_lib_connection_t *)cmd->data.cmd_configure_tag.connection_handle;
- esl_lib_log_connection_debug(CONN_FMT "Configure tag command, connection handle = %u" APP_LOG_NL,
- conn,
- conn->connection_handle);
- lib_status = ESL_LIB_STATUS_CONN_CONFIG_FAILED;
if (esl_lib_connection_contains(conn)) {
+ esl_lib_log_connection_debug(CONN_FMT "Configure tag command, connection handle = %u" APP_LOG_NL,
+ conn,
+ conn->connection_handle);
// Clear index and type
conn->config_index = 0;
conn->config_type = ESL_LIB_DATA_TYPE_UNINITIALIZED;
// Start write process using TLV(s)
- (void)write_next_config_value(conn);
+ sc = write_next_config_value(conn);
} else {
- sc = SL_STATUS_DELETED;
- conn->command_complete = true;
+ lib_status = ESL_LIB_STATUS_CONN_CONFIG_FAILED;
}
break;
case ESL_LIB_CMD_WRITE_CONTROL_POINT:
conn = (esl_lib_connection_t *)cmd->data.cmd_write_control_point.connection_handle;
- esl_lib_log_connection_debug(CONN_FMT "Write control point command, connection handle = %u" APP_LOG_NL,
- conn,
- conn->connection_handle);
lib_status = ESL_LIB_STATUS_CONN_WRITE_CP_FAILED;
if (esl_lib_connection_contains(conn) && conn->command != NULL) {
+ esl_lib_log_connection_debug(CONN_FMT "Write control point command, connection handle = %u" APP_LOG_NL,
+ conn,
+ conn->connection_handle);
// Write characteristic value (with or without response)
sc = write_value(conn,
conn->command->data.cmd_write_control_point.att_response,
@@ -1580,18 +1588,16 @@ static void run_command(esl_lib_command_list_cmd_t *cmd)
// Do not generate error event
sc = SL_STATUS_OK;
}
- } else {
- sc = SL_STATUS_DELETED;
- conn->command_complete = true;
}
break;
case ESL_LIB_CMD_WRITE_IMAGE:
conn = (esl_lib_connection_t *)cmd->data.cmd_write_image.connection_handle;
- esl_lib_log_connection_debug(CONN_FMT "Write image command, connection handle = %u" APP_LOG_NL,
- conn,
- conn->connection_handle);
+ lib_status = ESL_LIB_STATUS_OTS_ERROR;
if (esl_lib_connection_contains(conn)) {
esl_lib_image_transfer_handle_t it_handle = conn->ots_handle;
+ esl_lib_log_connection_debug(CONN_FMT "Write image command, connection handle = %u" APP_LOG_NL,
+ conn,
+ conn->connection_handle);
if (it_handle != ESL_LIB_INVALID_HANDLE) {
sc = esl_lib_image_transfer_start(it_handle,
cmd->data.cmd_write_image.img_index,
@@ -1600,129 +1606,125 @@ static void run_command(esl_lib_command_list_cmd_t *cmd)
cmd->data.cmd_write_image.img_data_copied);
if (sc == SL_STATUS_OK) {
conn->state = ESL_LIB_CONNECTION_STATE_OTS_IMAGE_TRANSFER;
+ lib_status = ESL_LIB_STATUS_NO_ERROR;
} else {
- lib_status = ESL_LIB_STATUS_OTS_ERROR;
conn->command_complete = true;
}
} else {
- sc = SL_STATUS_NOT_INITIALIZED;
- lib_status = ESL_LIB_STATUS_OTS_ERROR;
+ sc = SL_STATUS_NOT_INITIALIZED;
conn->command_complete = true;
}
- } else {
- sc = SL_STATUS_DELETED;
- lib_status = ESL_LIB_STATUS_OTS_ERROR;
- conn->command_complete = true;
}
break;
case ESL_LIB_CMD_GET_IMAGE_TYPE:
conn = (esl_lib_connection_t *)cmd->data.cmd_get_image_type.connection_handle;
- esl_lib_log_connection_debug(CONN_FMT "Get image type command, connection handle = %u" APP_LOG_NL,
- conn,
- conn->connection_handle);
+ lib_status = ESL_LIB_STATUS_OTS_ERROR;
if (esl_lib_connection_contains(conn)) {
+ esl_lib_log_connection_debug(CONN_FMT "Get image type command, connection handle = %u" APP_LOG_NL,
+ conn,
+ conn->connection_handle);
esl_lib_image_transfer_handle_t it_handle = conn->ots_handle;
if (it_handle != ESL_LIB_INVALID_HANDLE) {
sc = esl_lib_image_transfer_get_type(it_handle,
cmd->data.cmd_get_image_type.img_index);
if (sc == SL_STATUS_OK) {
conn->state = ESL_LIB_CONNECTION_STATE_OTS_GET_TYPE;
+ lib_status = ESL_LIB_STATUS_NO_ERROR;
} else {
- lib_status = ESL_LIB_STATUS_OTS_ERROR;
conn->command_complete = true;
}
} else {
- sc = SL_STATUS_NOT_INITIALIZED;
- lib_status = ESL_LIB_STATUS_OTS_ERROR;
+ sc = SL_STATUS_NOT_INITIALIZED;
conn->command_complete = true;
}
- } else {
- sc = SL_STATUS_DELETED;
- lib_status = ESL_LIB_STATUS_OTS_ERROR;
- conn->command_complete = true;
}
break;
- case ESL_LIB_CMD_INITIATE_PAST: {
- uint32_t supervison_timeout = PAST_CONN_DEFAULT_TIMEOUT;
- uint16_t min_interval = 2 * PAST_CONN_INTERVAL_MIN;
- uint16_t max_interval = PAST_CONN_INTERVAL_MAX;
-
+ case ESL_LIB_CMD_INITIATE_PAST:
conn = (esl_lib_connection_t *)cmd->data.cmd_init_past.connection_handle;
- esl_lib_pawr_t *pawr = NULL;
- esl_lib_log_connection_debug(CONN_FMT "Initiate PAST command, connection handle = %u" APP_LOG_NL,
- conn,
- conn->connection_handle);
- if (conn->command != NULL) {
- pawr = (esl_lib_pawr_t *)conn->command->data.cmd_init_past.pawr_handle;
- }
+ if (esl_lib_connection_contains(conn)) {
+ uint32_t supervison_timeout = PAST_CONN_DEFAULT_TIMEOUT;
+ uint16_t min_interval = 2 * PAST_CONN_INTERVAL_MIN;
+ uint16_t max_interval = PAST_CONN_INTERVAL_MAX;
+ esl_lib_pawr_t *pawr = NULL;
+ esl_lib_log_connection_debug(CONN_FMT "Initiate PAST command, connection handle = %u" APP_LOG_NL,
+ conn,
+ conn->connection_handle);
+ if (conn->command != NULL) {
+ pawr = (esl_lib_pawr_t *)conn->command->data.cmd_init_past.pawr_handle;
+ }
- if (esl_lib_connection_contains(conn) && esl_lib_pawr_contains(pawr)) {
- supervison_timeout = pawr->config.adv_interval.max + pawr->config.adv_interval.max / 4; // * 1.25ms
- min_interval = pawr->config.adv_interval.min / 8;
- max_interval = pawr->config.adv_interval.max / 4;
+ if (esl_lib_pawr_contains(pawr)) {
+ supervison_timeout = pawr->config.adv_interval.max + pawr->config.adv_interval.max / 4; // * 1.25ms
+ min_interval = pawr->config.adv_interval.min / 8;
+ max_interval = pawr->config.adv_interval.max / 4;
- if (max_interval > PAST_CONN_INTERVAL_MAX) {
- max_interval = PAST_CONN_INTERVAL_MAX;
- }
+ if (max_interval > PAST_CONN_INTERVAL_MAX) {
+ max_interval = PAST_CONN_INTERVAL_MAX;
+ }
- supervison_timeout *= (PAST_CONN_PERIPHERAL_LATENCY + 1); // Core spec. 5.4 Vol 4, Part E, 7.8.31.
- supervison_timeout = (supervison_timeout / 10) + 1;
+ supervison_timeout *= (PAST_CONN_PERIPHERAL_LATENCY + 1); // Core spec. 5.4 Vol 4, Part E, 7.8.31.
+ supervison_timeout = (supervison_timeout / 10) + 1;
- if (supervison_timeout > PAST_CONN_MAX_TIMEOUT) {
- supervison_timeout = PAST_CONN_MAX_TIMEOUT;
- } else if (supervison_timeout < PAST_CONN_MIN_TIMEOUT) {
- supervison_timeout = PAST_CONN_MIN_TIMEOUT;
- }
+ if (supervison_timeout > PAST_CONN_MAX_TIMEOUT) {
+ supervison_timeout = PAST_CONN_MAX_TIMEOUT;
+ } else if (supervison_timeout < PAST_CONN_MIN_TIMEOUT) {
+ supervison_timeout = PAST_CONN_MIN_TIMEOUT;
+ }
- if (min_interval < PAST_CONN_INTERVAL_MIN) {
- min_interval = PAST_CONN_INTERVAL_MIN;
- } else if (min_interval > max_interval / 2) {
- min_interval = max_interval / 2;
- }
+ if (min_interval < PAST_CONN_INTERVAL_MIN) {
+ min_interval = PAST_CONN_INTERVAL_MIN;
+ } else if (min_interval > max_interval / 2) {
+ min_interval = max_interval / 2;
+ }
- sc = sl_bt_connection_set_parameters(conn->connection_handle,
+ sc = sl_bt_connection_set_parameters(conn->connection_handle,
+ min_interval,
+ max_interval,
+ PAST_CONN_PERIPHERAL_LATENCY,
+ (uint16_t)supervison_timeout,
+ PAST_CONN_MIN_CE_LENGTH,
+ PAST_CONN_MAX_CE_LENGTH);
+ if (sc == SL_STATUS_OK) {
+ conn->state = ESL_LIB_CONNECTION_STATE_PAST_INIT;
+ } else {
+ lib_status = ESL_LIB_STATUS_PAST_INIT_FAILED;
+ conn->command_complete = true;
+ // Ignore the warning if the connection is already closed by a remote node still in sync
+ if (sc != SL_STATUS_BT_CTRL_COMMAND_DISALLOWED) {
+ esl_lib_log_connection_warning(CONN_FMT "PAST init fail with connection interval[%u - %u] and timeout: %u, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
+ conn,
min_interval,
max_interval,
- PAST_CONN_PERIPHERAL_LATENCY,
- (uint16_t)supervison_timeout,
- PAST_CONN_MIN_CE_LENGTH,
- PAST_CONN_MAX_CE_LENGTH);
- if (sc == SL_STATUS_OK) {
- conn->state = ESL_LIB_CONNECTION_STATE_PAST_INIT;
- } else {
- lib_status = ESL_LIB_STATUS_PAST_INIT_FAILED;
- conn->command_complete = true;
- // Ignore the warning if the connection is already closed by a remote node still in sync
- if (sc != SL_STATUS_BT_CTRL_COMMAND_DISALLOWED) {
- esl_lib_log_connection_warning(CONN_FMT "PAST init fail with connection interval[%u - %u] and timeout: %u, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
- conn,
- min_interval,
- max_interval,
- supervison_timeout,
- conn->connection_handle,
- sc);
+ supervison_timeout,
+ conn->connection_handle,
+ sc);
+ }
}
+ // Start timeout anyway: the ESL may close/closing/closed the connection because it can be already in sync
+ sc = app_timer_start(&conn->timer,
+ 10 * supervison_timeout,
+ connection_timeout,
+ conn,
+ false);
}
- // Start timeout anyway: the ESL may close/closing/closed the connection because it can be already in sync
- sc = app_timer_start(&conn->timer,
- 10 * supervison_timeout,
- connection_timeout,
- conn,
- false);
} else {
- sc = SL_STATUS_DELETED;
lib_status = ESL_LIB_STATUS_PAST_INIT_FAILED;
- conn->command_complete = true;
}
- } break;
+ break;
default:
break;
}
- if (sc != SL_STATUS_OK && conn != NULL) {
- esl_lib_log_connection_warning(CONN_FMT "Command failure, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
+
+ if (sc == SL_STATUS_DELETED) {
+ esl_lib_log_connection_warning(CONN_FMT "Command failure on command %d, sc = 0x%04x" APP_LOG_NL,
conn,
- conn->connection_handle,
+ cmd->cmd_code,
sc);
+ } else if (sc != SL_STATUS_OK && conn != NULL) {
+ esl_lib_log_connection_error(CONN_FMT "Command failure, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
+ conn,
+ conn->connection_handle,
+ sc);
// Send connection error if connection is present.
(void)send_connection_error(conn,
lib_status,
@@ -1870,6 +1872,8 @@ static sl_status_t send_connection_status(esl_lib_connection_t *conn,
// Set handle
lib_evt->data.evt_connection_opened.connection_handle
= (esl_lib_connection_handle_t)conn;
+ // Set sl_status
+ lib_evt->data.evt_connection_opened.status = reason;
// Copy address
lib_evt->data.evt_connection_opened.address.address_type = conn->address_type;
memcpy(lib_evt->data.evt_connection_opened.address.addr,
@@ -1994,8 +1998,13 @@ static sl_status_t send_connection_error(esl_lib_connection_t *conn,
static sl_status_t close_connection(esl_lib_connection_t *conn)
{
- sl_status_t sc;
- sc = sl_bt_connection_close(conn->connection_handle);
+ sl_status_t sc = SL_STATUS_OK;
+
+ if (conn->last_error != SL_STATUS_BT_CTRL_CONNECTION_TERMINATED_BY_LOCAL_HOST) {
+ sc = sl_bt_connection_close(conn->connection_handle);
+ // Invalidate to avoid later possible redundant close calls that would fail
+ conn->last_error = SL_STATUS_BT_CTRL_CONNECTION_TERMINATED_BY_LOCAL_HOST;
+ }
return sc;
}
@@ -2004,9 +2013,9 @@ static bool uuid_16_match(uint8_t *uuid_a, uint8_t *uuid_b)
return (memcmp(uuid_a, uuid_b, sizeof(sl_bt_uuid_16_t)) == 0);
}
-static void connection_complete(esl_lib_connection_t *conn)
+static void connection_complete(esl_lib_connection_t *conn, sl_status_t result)
{
- (void)send_connection_status(conn, ESL_LIB_TRUE, SL_STATUS_OK);
+ (void)send_connection_status(conn, ESL_LIB_TRUE, result);
conn->state = ESL_LIB_CONNECTION_STATE_CONNECTED;
// Open command has been completed.
if (conn->command->cmd_code == ESL_LIB_CMD_CONNECT) {
@@ -2071,31 +2080,42 @@ static void on_image_transfer_status(esl_lib_image_transfer_handle_t handle,
if (state == ESL_LIB_IMAGE_TRANSFER_STATE_IDLE) {
// init succeeded
- connection_complete(conn);
+ connection_complete(conn, result);
+ conn->command_complete = true;
}
}
- if (state == ESL_LIB_IMAGE_TRANSFER_REMOVED && check_image_transfer(conn)) {
- // Removed since there were an error during init or transfer
- (void)send_connection_error(conn,
- ESL_LIB_STATUS_OTS_INIT_FAILED,
- result,
- conn->state);
- // Close connection as OTS errors are mostly unrecoverable
- esl_lib_log_connection_debug(CONN_FMT "Close connection due image transfer status 0x%04x, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
- conn,
- result,
- sc,
- conn->connection_handle);
- close_broken_connection(&conn);
+ if (state == ESL_LIB_IMAGE_TRANSFER_REMOVED) {
+ // Clear local handle reference in case of it's been already deleted by an error
+ conn->ots_handle = ESL_LIB_INVALID_HANDLE;
+ }
- if (conn != NULL) {
- // Note that conn might have been deleted already due an error case!
+ if (check_image_transfer(conn)) {
+ if (state == ESL_LIB_IMAGE_TRANSFER_STATE_NOT_INITIALIZED) {
+ // Removed since there were an error during init or transfer
+ (void)send_connection_error(conn,
+ ESL_LIB_STATUS_OTS_INIT_FAILED,
+ result,
+ conn->state);
+ // Close connection as OTS errors are mostly unrecoverable
+ esl_lib_log_connection_debug(CONN_FMT "Close connection due image transfer status 0x%04x, connection handle = %u, state = %d" APP_LOG_NL,
+ conn,
+ result,
+ conn->connection_handle,
+ state);
+ close_broken_connection(&conn);
+ } else if (state == ESL_LIB_IMAGE_TRANSFER_STATE_ERROR) {
+ (void)send_connection_error(conn,
+ ESL_LIB_STATUS_OTS_ERROR,
+ result,
+ conn->state);
+ // Let the AP try to continue in this case
conn->command_complete = true;
+ conn->state = ESL_LIB_CONNECTION_STATE_CONNECTED;
}
}
} else {
- esl_lib_log_connection_debug("[Unknown] Image transfer status changed for a forcibly closed connection, no handle available anymore." APP_LOG_NL);
+ esl_lib_log_connection_warning("[Unknown] Image transfer status changed for a deceised connection, no handle available anymore" APP_LOG_NL);
}
}
@@ -2116,6 +2136,13 @@ static void on_image_transfer_finished(esl_lib_image_transfer_handle_t handle,
result,
conn->connection_handle);
+ // Free up image data if still there after ESL_LIB_CMD_WRITE_IMAGE request
+ if (conn->command != NULL && conn->command->cmd_code == ESL_LIB_CMD_WRITE_IMAGE && conn->command->data.cmd_write_image.img_data_copied != NULL) {
+ esl_lib_memory_free(conn->command->data.cmd_write_image.img_data_copied);
+ conn->command_complete = true; // Also report command complete
+ conn->state = ESL_LIB_CONNECTION_STATE_CONNECTED; // And return to connected, idle.
+ }
+
if (result == SL_STATUS_OK) {
sc = esl_lib_event_list_allocate(ESL_LIB_EVT_IMAGE_TRANSFER_FINISHED, 0, &lib_evt);
if (sc == SL_STATUS_OK) {
@@ -2129,29 +2156,20 @@ static void on_image_transfer_finished(esl_lib_image_transfer_handle_t handle,
ESL_LIB_STATUS_OTS_TRANSFER_FAILED,
result,
conn->state);
- esl_lib_log_connection_debug(CONN_FMT "Close connection due image transfer finished result: 0x%04x, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
- conn,
- result,
- conn->connection_handle,
- sc);
if (result == SL_STATUS_TIMEOUT
- || result == SL_STATUS_NO_MORE_RESOURCE
|| result == SL_STATUS_FAIL
+ || result == SL_STATUS_INITIALIZATION
+ || result == SL_STATUS_TRANSMIT_INCOMPLETE
+ || result == SL_STATUS_NO_MORE_RESOURCE
|| result == SL_STATUS_BT_CTRL_CONNECTION_REJECTED_DUE_TO_NO_SUITABLE_CHANNEL_FOUND) {
+ esl_lib_log_connection_debug(CONN_FMT "Close connection due image transfer finished result: 0x%04x, connection handle = %u" APP_LOG_NL,
+ conn,
+ result,
+ conn->connection_handle);
// Close connection as some OTS errors are unrecoverable
close_broken_connection(&conn);
}
}
-
- if (conn != NULL && conn->command != NULL) {
- // Note that conn might have been deleted already due an error case!
- // Free up image data if still there
- if (conn->command->data.cmd_write_image.img_data_copied != NULL) {
- esl_lib_memory_free(conn->command->data.cmd_write_image.img_data_copied);
- }
- conn->command_complete = true;
- conn->state = ESL_LIB_CONNECTION_STATE_CONNECTED;
- }
}
}
@@ -2173,6 +2191,8 @@ static void on_image_transfer_type_arrived(esl_lib_image_transfer_handle_t handl
result,
conn->connection_handle);
if (result == SL_STATUS_OK) {
+ conn->command_complete = true;
+ conn->state = ESL_LIB_CONNECTION_STATE_CONNECTED;
sc = esl_lib_event_list_allocate(ESL_LIB_EVT_IMAGE_TYPE, len, &lib_evt);
if (sc == SL_STATUS_OK) {
lib_evt->data.evt_image_type.connection_handle = conn;
@@ -2190,18 +2210,11 @@ static void on_image_transfer_type_arrived(esl_lib_image_transfer_handle_t handl
ESL_LIB_STATUS_OTS_META_READ_FAILED,
result,
conn->state);
- esl_lib_log_connection_debug(CONN_FMT "Close connection due image get type fail 0x%04x, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
+ esl_lib_log_connection_debug(CONN_FMT "OTS Image get type fail (0x%04x), image index: %u, connection handle = %u" APP_LOG_NL,
conn,
result,
- sc,
+ image_index,
conn->connection_handle);
- // Close connection as OTS errors are mostly unrecoverable
- close_broken_connection(&conn);
- }
- if (conn != NULL) {
- // Note that conn might have been deleted already due an error case!
- conn->command_complete = true;
- conn->state = ESL_LIB_CONNECTION_STATE_CONNECTED;
}
}
}
@@ -2254,21 +2267,27 @@ static void reconnect_timeout(app_timer_t *timer,
conn,
ESL_LIB_LOG_ADDR(conn->command->data.cmd_connect.address),
conn->connection_handle);
- // Resend command to core queue
- sc = esl_lib_core_add_command(conn->command);
+ if (conn->command && conn->command->cmd_code == ESL_LIB_CMD_CONNECT) {
+ // Resend connect command to core queue
+ sc = esl_lib_core_add_command(conn->command);
+ } else {
+ // It's an error condition if there's no active command for the connection or it's not an ESL_LIB_CMD_CONNECT request!
+ sc = SL_STATUS_DELETED;
+ }
if (sc != SL_STATUS_OK) {
(void)send_connection_error(conn,
ESL_LIB_STATUS_CONN_FAILED,
sc,
conn->state);
- esl_lib_log_connection_error(CONN_FMT "Failed to reopen connection, connection handle = %u" APP_LOG_NL,
+ esl_lib_log_connection_error(CONN_FMT "Failed to reopen connection, connection handle = %u, sc = 0x%04x" APP_LOG_NL,
conn,
- conn->connection_handle);
+ conn->connection_handle,
+ sc);
// And also remove connection from the list.
(void)esl_lib_connection_remove_ptr(conn);
- conn = NULL;
} else {
+ // Decouple the connect command as it's been successfully queued again - we'll take ownership again, later.
conn->command = NULL;
conn->command_complete = true;
}
@@ -2283,21 +2302,29 @@ static void connection_timeout(app_timer_t *timer,
{
(void)timer;
sl_status_t sc;
- esl_lib_status_t status;
+ esl_lib_status_t status = ESL_LIB_STATUS_CONN_TIMEOUT;
esl_lib_connection_t *conn = (esl_lib_connection_t *)data;
// Check if it exists
if (esl_lib_connection_contains(conn)) {
esl_lib_log_connection_warning(CONN_FMT "Connection timeout, connection handle = %u" APP_LOG_NL,
conn,
conn->connection_handle);
- // Try to close the connection
- sc = close_connection(conn);
- if (sc == SL_STATUS_OK) {
- // Send timeout
- status = ESL_LIB_STATUS_CONN_TIMEOUT;
- } else {
- // Send error for closing
+ if (conn->last_error == SL_STATUS_BT_CTRL_CONNECTION_TERMINATED_BY_LOCAL_HOST) {
+ // This is the timeout for earlier local close request! Send error for closing because close event didn't arrive.
status = ESL_LIB_STATUS_CONN_CLOSE_FAILED;
+ } else {
+ // Try to gentle close the connection in the first place
+ sc = close_connection(conn);
+ if (sc != SL_STATUS_OK) {
+ status = ESL_LIB_STATUS_CONN_CLOSE_FAILED;
+ } else {
+ // Restart timer one last time as final watchdog
+ (void)app_timer_start(&conn->timer,
+ CLOSE_TIMEOUT_MS,
+ connection_timeout,
+ conn,
+ false);
+ }
}
(void)send_connection_error(conn,
@@ -2305,12 +2332,12 @@ static void connection_timeout(app_timer_t *timer,
SL_STATUS_TIMEOUT,
conn->state);
- if (conn->state == ESL_LIB_CONNECTION_STATE_CONNECTING
- || conn->state == ESL_LIB_CONNECTION_STATE_RECONNECTING) {
- esl_lib_core_connection_complete();
- }
-
if (status == ESL_LIB_STATUS_CONN_CLOSE_FAILED) {
+ if (conn->state == ESL_LIB_CONNECTION_STATE_CONNECTING
+ || conn->state == ESL_LIB_CONNECTION_STATE_RECONNECTING) {
+ // Report connection complete only if the connection opened event didn't arrive before the timeout
+ esl_lib_core_connection_complete();
+ }
// Remove connection
(void)esl_lib_connection_remove_ptr(conn);
}
@@ -2477,7 +2504,7 @@ static sl_status_t get_tag_info_finish(esl_lib_connection_t *conn, sl_status_t s
// Set command complete
conn->command_complete = true;
} else {
- esl_lib_log_connection_debug("[Unknown] Get tag info finished for a forcibly closed broken connection, no handle available anymore." APP_LOG_NL);
+ esl_lib_log_connection_warning("[Unknown] Get tag info finished for a deceised connection, no handle available anymore" APP_LOG_NL);
}
return sc;
@@ -2723,12 +2750,21 @@ static sl_status_t write_value(esl_lib_connection_t *conn,
len,
data,
&sent_len);
- if (sc == SL_STATUS_OK) {
+ if (sc == SL_STATUS_OK && sent_len == len) {
esl_lib_log_connection_debug(CONN_FMT "Writing value type %u (0x%02x) succeeded, connection handle = %u" APP_LOG_NL,
conn,
type,
characteristic,
conn->connection_handle);
+ } else {
+ esl_lib_log_connection_warning(CONN_FMT "Writing value type %u (0x%02x) unsuccesful, connection handle = %u, length/sent: %u/%u, sc = 0x%04x" APP_LOG_NL,
+ conn,
+ type,
+ characteristic,
+ conn->connection_handle,
+ len,
+ sent_len,
+ sc);
}
}
} else {
@@ -2770,12 +2806,20 @@ static bool find_tlv(esl_lib_command_list_cmd_t *cmd,
static void close_broken_connection(esl_lib_connection_t **conn)
{
- if (conn == NULL || *conn == NULL || (*conn)->connection_handle == SL_BT_INVALID_CONNECTION_HANDLE) {
+ if (conn == NULL || *conn == NULL
+ || (*conn)->connection_handle == SL_BT_INVALID_CONNECTION_HANDLE
+ || (*conn)->last_error == SL_STATUS_BT_CTRL_CONNECTION_TERMINATED_BY_LOCAL_HOST) {
// Nothing left to close (second invocation can happen on the same connection in edge cases, especially in case of various OTS errors)
return;
+ } else {
+ (void)app_timer_stop(&(*conn)->timer);
+ esl_lib_log_connection_debug(CONN_FMT "Cleanup command list for connection handle = %u during close on error" APP_LOG_NL,
+ *conn,
+ (*conn)->connection_handle);
+ esl_lib_command_list_cleanup(&(*conn)->command_list);
}
- sl_status_t sc = sl_bt_connection_close((*conn)->connection_handle);
+ sl_status_t sc = close_connection(*conn);
if (sc != SL_STATUS_OK) {
esl_lib_log_connection_error(CONN_FMT "Closing request failed with status: 0x%04x on connection handle = %u during close on error" APP_LOG_NL,
*conn,
@@ -2790,11 +2834,12 @@ static void close_broken_connection(esl_lib_connection_t **conn)
esl_lib_log_connection_debug(CONN_FMT "Requested closing connection with handle = %u on error" APP_LOG_NL,
*conn,
(*conn)->connection_handle);
- (void)app_timer_stop(&(*conn)->timer);
(void)app_timer_start(&(*conn)->timer,
CLOSE_TIMEOUT_MS,
connection_timeout,
*conn,
false);
+ // Prevent executing any future commands until the connection is closed
+ (*conn)->command_complete = false;
}
}
diff --git a/app/bluetooth/common_host/esl_lib/esl_lib_core.c b/app/bluetooth/common_host/esl_lib/esl_lib_core.c
index 8abc116596..fd97e6d229 100644
--- a/app/bluetooth/common_host/esl_lib/esl_lib_core.c
+++ b/app/bluetooth/common_host/esl_lib/esl_lib_core.c
@@ -146,8 +146,8 @@ void esl_lib_init(char *config)
void esl_lib_process_action(void)
{
esl_lib_core_step();
- esl_lib_connection_step();
esl_lib_pawr_step();
+ esl_lib_connection_step();
esl_lib_image_transfer_step();
}
@@ -173,16 +173,20 @@ sl_status_t esl_lib_core_add_command(esl_lib_command_list_cmd_t *cmd)
void sl_bt_on_event(sl_bt_msg_t *evt)
{
+ esl_lib_pawr_on_bt_event(evt);
esl_lib_image_transfer_on_bt_event(evt);
esl_lib_connection_on_bt_event(evt);
- esl_lib_pawr_on_bt_event(evt);
esl_lib_core_on_bt_event(evt);
esl_lib_ap_control_on_bt_event(evt);
}
void esl_lib_core_connection_complete()
{
- ap_state->command_complete = true;
+ // This function should only be called after the ESL_LIB_CMD_CONNECT request is processed (with or without error)
+ if (ap_state->command == NULL) {
+ // Since the ESL_LIB_CMD_CONNECT request is the owner of the command, the ap_state->command should be NULL
+ ap_state->command_complete = true;
+ }
}
// -----------------------------------------------------------------------------
@@ -562,7 +566,6 @@ static void run_command(esl_lib_command_list_cmd_t *cmd)
} else {
sc = SL_STATUS_INVALID_STATE;
}
- ap_state->command_complete = true;
} else {
lib_status = ESL_LIB_STATUS_SCAN_STOP_FAILED;
sc = sl_bt_scanner_stop();
diff --git a/app/bluetooth/common_host/esl_lib/esl_lib_image_transfer.c b/app/bluetooth/common_host/esl_lib/esl_lib_image_transfer.c
index 11c9fd75a9..f7a186c170 100644
--- a/app/bluetooth/common_host/esl_lib/esl_lib_image_transfer.c
+++ b/app/bluetooth/common_host/esl_lib/esl_lib_image_transfer.c
@@ -73,7 +73,6 @@ typedef enum {
// Structure type holding a client
typedef struct {
sl_slist_node_t node;
- esl_lib_image_transfer_handle_t image_transfer_handle;
uint8_t connection_handle;
sl_bt_ots_client_t ots_client;
sl_bt_ots_features_t ots_server_features;
@@ -218,7 +217,6 @@ sl_status_t esl_lib_image_transfer_init(uint8_t
return SL_STATUS_ALLOCATION_FAILED;
} else {
memset(transfer, 0, sizeof(*transfer));
- transfer->image_transfer_handle = (esl_lib_image_transfer_handle_t)transfer;
transfer->connection_handle = connection;
if (gattdb_handles != NULL) {
@@ -246,10 +244,10 @@ sl_status_t esl_lib_image_transfer_init(uint8_t
// Add to the transfer list
sl_slist_push(&image_transfer_list, &transfer->node);
- *handle_out = transfer->image_transfer_handle;
+ *handle_out = (esl_lib_image_transfer_handle_t)transfer;
esl_lib_log_it_debug(IT_FMT "Image transfer init started, connection handle = %u" APP_LOG_NL,
- transfer->image_transfer_handle,
+ transfer,
connection);
// Start timer
app_timer_start(&transfer->timer,
@@ -259,7 +257,7 @@ sl_status_t esl_lib_image_transfer_init(uint8_t
false);
} else {
esl_lib_log_it_error(IT_FMT "Image transfer init failed, sc = 0x%04x, connection handle = %u" APP_LOG_NL,
- transfer->image_transfer_handle,
+ transfer,
sc,
connection);
// Free up memory on error
@@ -269,6 +267,30 @@ sl_status_t esl_lib_image_transfer_init(uint8_t
return sc;
}
+sl_status_t esl_lib_image_dump_transfer_by_handle(esl_lib_image_transfer_handle_t *handle)
+{
+ sl_status_t sc = SL_STATUS_NULL_POINTER;
+ image_transfer_t *image_transfer;
+
+ if (handle == NULL || *handle == ESL_LIB_INVALID_HANDLE) {
+ return sc;
+ }
+
+ image_transfer = find_image_transfer_by_handle(*handle);
+
+ if (image_transfer != ESL_LIB_IMAGE_TRANSFER_INVALID_HANDLE) {
+ // Dump transfer shall only ever call on deceased connections (if sl_bt_connection_close() fails)!
+ remove_transfer(&image_transfer,
+ SL_STATUS_NONE_WAITING, // Signal expected absence of sl_bt_evt_connection_closed_id event
+ false);
+ } else {
+ sc = SL_STATUS_INVALID_HANDLE;
+ }
+
+ *handle = ESL_LIB_INVALID_HANDLE;
+ return sc;
+}
+
sl_status_t esl_lib_image_transfer_get_type(esl_lib_image_transfer_handle_t handle,
uint8_t image_index)
{
@@ -561,7 +583,7 @@ static sl_status_t search_image(image_transfer_t *image_transfer,
// Set requested object ID
image_index_to_object_id(image_index, &image_transfer->ots_requested_object_id);
esl_lib_log_it_debug(IT_FMT "Searching index %u = %02X %02X ..." APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
image_index,
image_transfer->ots_requested_object_id.data[0],
image_transfer->ots_requested_object_id.data[1]);
@@ -578,7 +600,7 @@ static sl_status_t search_image(image_transfer_t *image_transfer,
if (goto_supported) {
esl_lib_log_it_debug(IT_FMT "Moving with GOTO to image, index %u" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
image_index);
sc = sl_bt_ots_client_olcp_go_to(&image_transfer->ots_client,
&image_transfer->ots_requested_object_id);
@@ -597,7 +619,7 @@ static sl_status_t search_image(image_transfer_t *image_transfer,
}
} else {
esl_lib_log_it_debug(IT_FMT "Moving with FIRST+NEXT to image, index %u" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
image_index);
sc = sl_bt_ots_client_olcp_first(&image_transfer->ots_client);
if (sc == SL_STATUS_OK) {
@@ -614,14 +636,14 @@ static sl_status_t search_image(image_transfer_t *image_transfer,
NULL);
} else {
esl_lib_log_it_debug(IT_FMT "Write to the currently selected image, index %u" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
image_index);
}
}
}
if (sc != SL_STATUS_OK) {
esl_lib_log_it_error(IT_FMT "Search image index %u failed, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
image_index,
sc);
}
@@ -755,7 +777,7 @@ static void start_requested_operation(image_transfer_t *image_transfer)
(void)app_timer_stop(&image_transfer->timer);
if (image_transfer->ots_ongoing_command == OTS_COMMAND_OBJECT_TYPE) {
esl_lib_log_it_debug(IT_FMT "Reading object type of current object" APP_LOG_NL,
- image_transfer->image_transfer_handle);
+ image_transfer);
sc = sl_bt_ots_client_read_object_type(&image_transfer->ots_client);
if (sc == SL_STATUS_OK) {
@@ -768,14 +790,14 @@ static void start_requested_operation(image_transfer_t *image_transfer)
image_transfer->ots_state = OTS_STATE_OBJECT_TYPE;
} else {
esl_lib_log_it_error(IT_FMT "Read object type failed, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
sc);
// Could not read type, finish the operation
operation_finished(image_transfer, sc, false);
}
} else if (image_transfer->ots_ongoing_command == OTS_COMMAND_WRITE) {
esl_lib_log_it_debug(IT_FMT "Write current object of size %u bytes." APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
image_transfer->ots_write_size);
// Current object is selected, move on with writing the object.
@@ -795,7 +817,7 @@ static void start_requested_operation(image_transfer_t *image_transfer)
image_transfer->ots_state = OTS_STATE_WRITE;
} else {
esl_lib_log_it_error(IT_FMT "Write failed, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
sc);
// Could not start write, finish the operation
operation_finished(image_transfer, sc, true);
@@ -807,20 +829,27 @@ static void remove_transfer(image_transfer_t **image_transfer,
sl_status_t sc,
bool finish_transfer)
{
+ if (sc != SL_STATUS_DELETED && find_image_transfer_by_handle(*image_transfer) == ESL_LIB_IMAGE_TRANSFER_INVALID_HANDLE) {
+ esl_lib_log_it_warning(IT_FMT "Remove attempt on already removed handle, sc = 0x%04x" APP_LOG_NL,
+ *image_transfer,
+ sc);
+ return;
+ }
+
(void)app_timer_stop(&(*image_transfer)->timer);
esl_lib_log_it_debug(IT_FMT "Removing transfer" APP_LOG_NL,
- (*image_transfer)->image_transfer_handle);
+ *image_transfer);
sl_slist_remove(&image_transfer_list, &(*image_transfer)->node);
+ set_state(*image_transfer, ESL_LIB_IMAGE_TRANSFER_REMOVED, sc, NULL);
if (finish_transfer) {
esl_lib_log_it_debug(IT_FMT "Finishing transfer" APP_LOG_NL,
- (*image_transfer)->image_transfer_handle);
- (*image_transfer)->cb_finish((esl_lib_image_transfer_handle_t)image_transfer,
+ *image_transfer);
+ (*image_transfer)->cb_finish((esl_lib_image_transfer_handle_t)(*image_transfer),
(*image_transfer)->connection_handle,
sc,
(*image_transfer)->requested_image_index);
}
- set_state(*image_transfer, ESL_LIB_IMAGE_TRANSFER_REMOVED, sc, NULL);
// Remove transfer
esl_lib_memory_free(*image_transfer);
}
@@ -829,34 +858,39 @@ static void operation_finished(image_transfer_t *image_transfer,
sl_status_t sc,
bool finish_transfer)
{
+ if (find_image_transfer_by_handle(image_transfer) == ESL_LIB_IMAGE_TRANSFER_INVALID_HANDLE) {
+ esl_lib_log_it_warning(IT_FMT "OTS operation finished on removed handle, sc = 0x%04x" APP_LOG_NL,
+ image_transfer,
+ sc);
+ return;
+ }
+
if (sc == SL_STATUS_OK) {
esl_lib_log_it_debug(IT_FMT "OTS operation succeeded, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
sc);
} else {
esl_lib_log_it_error(IT_FMT "OTS operation failed, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
sc);
}
- if (sc != SL_STATUS_OK && image_transfer->ots_ongoing_command == OTS_COMMAND_OBJECT_TYPE) {
- // Send type back
- image_transfer->cb_type((esl_lib_image_transfer_handle_t)image_transfer,
- image_transfer->connection_handle,
- sc,
- image_transfer->requested_image_index,
- NULL,
- 0);
- }
- image_transfer->ots_state = OTS_STATE_IDLE;
image_transfer->ots_ongoing_command = OTS_COMMAND_NONE;
- set_state(image_transfer, ESL_LIB_IMAGE_TRANSFER_STATE_IDLE, sc, NULL);
- // Send error in case of object type requested
+ if (sc == SL_STATUS_OK) {
+ set_state(image_transfer, ESL_LIB_IMAGE_TRANSFER_STATE_IDLE, sc, NULL);
+ } else {
+ if (image_transfer->ots_state == OTS_STATE_NOT_INITIALIZED || image_transfer->ots_state == OTS_STATE_INITIALIZED) {
+ set_state(image_transfer, ESL_LIB_IMAGE_TRANSFER_STATE_NOT_INITIALIZED, sc, NULL);
+ } else {
+ set_state(image_transfer, ESL_LIB_IMAGE_TRANSFER_STATE_ERROR, sc, NULL);
+ }
+ }
+ image_transfer->ots_state = OTS_STATE_IDLE;
if (finish_transfer) {
esl_lib_log_it_debug(IT_FMT "Finishing transfer" APP_LOG_NL,
- image_transfer->image_transfer_handle);
+ image_transfer);
image_transfer->cb_finish((esl_lib_image_transfer_handle_t)image_transfer,
image_transfer->connection_handle,
sc,
@@ -880,7 +914,7 @@ static void ots_init(sl_bt_ots_client_handle_t client,
if (image_transfer->ots_state == OTS_STATE_NOT_INITIALIZED
&& result == SL_STATUS_OK) {
esl_lib_log_it_debug(IT_FMT "OTS init finished, Reading features" APP_LOG_NL,
- image_transfer->image_transfer_handle);
+ image_transfer);
sc = sl_bt_ots_client_read_ots_features(&image_transfer->ots_client);
if (sc == SL_STATUS_OK) {
// Start timer (with init callback)
@@ -896,15 +930,17 @@ static void ots_init(sl_bt_ots_client_handle_t client,
gattdb_handles);
} else {
esl_lib_log_it_error(IT_FMT "Failed to read features, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
sc);
- remove_transfer(&image_transfer, sc, false);
+ // Send operation finished with error event
+ operation_finished(image_transfer, SL_STATUS_FAIL, true);
}
} else {
esl_lib_log_it_error(IT_FMT "OTS not initialized, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
result);
- remove_transfer(&image_transfer, result, false);
+ // Send operation finished with error event
+ operation_finished(image_transfer, SL_STATUS_INITIALIZATION, true);
}
}
}
@@ -923,7 +959,7 @@ static void ots_features(sl_bt_ots_client_handle_t client,
&features,
sizeof(sl_bt_ots_features_t));
esl_lib_log_it_debug(IT_FMT "OTS features arrived, OACP = 0x%04x , OLCP = 0x%04x , OTS init done" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
image_transfer->ots_server_features.oacp_features,
image_transfer->ots_server_features.olcp_features);
// Set state to idle.
@@ -934,10 +970,10 @@ static void ots_features(sl_bt_ots_client_handle_t client,
NULL);
} else {
esl_lib_log_it_error(IT_FMT "Failed to get OTS features, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
status);
// Error during feature read
- remove_transfer(&image_transfer, status, false);
+ operation_finished(image_transfer, SL_STATUS_FAIL, true);
}
}
}
@@ -964,7 +1000,7 @@ static void ots_meta_read(sl_bt_ots_client_handle_t client,
&& image_transfer->ots_ongoing_command == OTS_COMMAND_OBJECT_TYPE) {
if (sc == SL_STATUS_OK) {
esl_lib_log_it_debug(IT_FMT "OTS object type arrived, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
sc);
type = parameters->object_type.uuid_data;
len = SL_BT_OTS_UUID_SIZE_128;
@@ -973,26 +1009,24 @@ static void ots_meta_read(sl_bt_ots_client_handle_t client,
}
} else {
esl_lib_log_it_error(IT_FMT "OTS object type read error, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
sc);
}
- // Type read operation finished, also sends the error if present
+ // Send the type report
+ image_transfer->cb_type((esl_lib_image_transfer_handle_t)image_transfer,
+ image_transfer->connection_handle,
+ sc,
+ image_transfer->requested_image_index,
+ type,
+ len);
+ // Type read operation finished
operation_finished(image_transfer,
sc,
false);
- // Send the type in case of success,
- if (sc == SL_STATUS_OK) {
- image_transfer->cb_type((esl_lib_image_transfer_handle_t)image_transfer,
- image_transfer->connection_handle,
- sc,
- image_transfer->requested_image_index,
- type,
- len);
- }
} else if (event == SL_BT_OTS_OBJECT_METADATA_READ_OBJECT_ID) {
if (sc == SL_STATUS_OK) {
esl_lib_log_it_debug(IT_FMT "OTS object ID arrived, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
sc);
memcpy(image_transfer->ots_current_object_id.data,
parameters->object_id.data,
@@ -1002,13 +1036,13 @@ static void ots_meta_read(sl_bt_ots_client_handle_t client,
image_transfer->ots_requested_object_id.data,
sizeof(image_transfer->ots_requested_object_id.data)) == 0) {
esl_lib_log_it_debug(IT_FMT "OTS object ID found, starting operation" APP_LOG_NL,
- image_transfer->image_transfer_handle);
+ image_transfer);
// Found the requested object, start the operation.
start_requested_operation(image_transfer);
} else {
esl_lib_log_it_debug(IT_FMT "Object ID does not match, move to next" APP_LOG_NL,
- image_transfer->image_transfer_handle);
+ image_transfer);
// Not found the requested object, move to the next object
sc = sl_bt_ots_client_olcp_next(&image_transfer->ots_client);
if (sc == SL_STATUS_OK) {
@@ -1021,7 +1055,7 @@ static void ots_meta_read(sl_bt_ots_client_handle_t client,
image_transfer->ots_state = OTS_STATE_NEXT;
} else {
esl_lib_log_it_error(IT_FMT "Failed to move to next object, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
sc);
// Could not get next, finish transfer if in progress
operation_finished(image_transfer,
@@ -1031,7 +1065,7 @@ static void ots_meta_read(sl_bt_ots_client_handle_t client,
}
} else {
esl_lib_log_it_error(IT_FMT "OTS Object ID read error, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
sc);
// Read Object ID failed - operation finished
operation_finished(image_transfer,
@@ -1060,12 +1094,12 @@ static void ots_olcp(sl_bt_ots_client_handle_t client,
if ((opcode == SL_BT_OTS_OLCP_OPCODE_FIRST && image_transfer->ots_state == OTS_STATE_FIRST)
|| (opcode == SL_BT_OTS_OLCP_OPCODE_NEXT && image_transfer->ots_state == OTS_STATE_NEXT)) {
esl_lib_log_it_debug(IT_FMT "OTS OLCP FIRST/NEXT operation succeeded" APP_LOG_NL,
- image_transfer->image_transfer_handle);
+ image_transfer);
sc = sl_bt_ots_client_read_object_id(&image_transfer->ots_client);
if (sc != SL_STATUS_OK) {
esl_lib_log_it_error(IT_FMT "OTS Reading object ID failed, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
sc);
// Read ID failed
operation_finished(image_transfer,
@@ -1073,7 +1107,7 @@ static void ots_olcp(sl_bt_ots_client_handle_t client,
image_transfer->ots_ongoing_command == OTS_COMMAND_WRITE);
} else {
esl_lib_log_it_debug(IT_FMT "OTS Reading object ID started" APP_LOG_NL,
- image_transfer->image_transfer_handle);
+ image_transfer);
// Start timer
app_timer_start(&image_transfer->timer,
TIMEOUT_GATT_MS,
@@ -1083,7 +1117,7 @@ static void ots_olcp(sl_bt_ots_client_handle_t client,
}
} else if (opcode == SL_BT_OTS_OLCP_OPCODE_GO_TO && image_transfer->ots_state == OTS_STATE_GO_TO) {
esl_lib_log_it_debug(IT_FMT "OTS OLCP GOTO operation succeeded. Starting requested operation" APP_LOG_NL,
- image_transfer->image_transfer_handle);
+ image_transfer);
// Object selected
memcpy(&image_transfer->ots_current_object_id,
@@ -1098,25 +1132,25 @@ static void ots_olcp(sl_bt_ots_client_handle_t client,
if (gatt_status != SL_STATUS_OK) {
sc = gatt_status;
esl_lib_log_it_error(IT_FMT "OTS OLCP operation failed due to ATT error 0x%04x, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
response,
sc);
} else {
// Check if no more items in the list
if (response == SL_BT_OTS_OLCP_RESPONSE_CODE_SUCCESS) {
esl_lib_log_it_debug(IT_FMT "OTS OLCP operation succeeded" APP_LOG_NL,
- image_transfer->image_transfer_handle);
+ image_transfer);
sc = SL_STATUS_OK;
} else if (response == SL_BT_OTS_OLCP_RESPONSE_CODE_OUT_OF_BOUNDS
|| response == SL_BT_OTS_OLCP_RESPONSE_CODE_OBJECT_ID_NOT_FOUND) {
sc = SL_STATUS_NOT_FOUND;
esl_lib_log_it_error(IT_FMT "OTS OLCP operation failed: object not found, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
sc);
} else {
sc = SL_STATUS_FAIL;
esl_lib_log_it_error(IT_FMT "OTS OLCP operation failed due unknown error, sc = 0x%04x, response = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
sc,
response);
}
@@ -1145,7 +1179,7 @@ static void ots_oacp(sl_bt_ots_client_handle_t client,
// Stop timer
app_timer_stop(&image_transfer->timer);
esl_lib_log_it_error(IT_FMT "OTS OACP Write operation failed, status = 0x%04x, response = 0x%04x, sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
status,
response,
sc);
@@ -1201,12 +1235,12 @@ static void ots_finished(sl_bt_ots_client_handle_t client,
break;
}
esl_lib_log_it_error(IT_FMT "OTS transfer failed, result = 0x%04x , sc = 0x%04x" APP_LOG_NL,
- image_transfer->image_transfer_handle,
+ image_transfer,
result,
sc);
} else {
esl_lib_log_it_debug(IT_FMT "OTS transfer succeeded" APP_LOG_NL,
- image_transfer->image_transfer_handle);
+ image_transfer);
}
// OACP operation completed
@@ -1224,7 +1258,7 @@ static void ots_disconnect(sl_bt_ots_client_handle_t client)
// Stop timer on disconnect
app_timer_stop(&image_transfer->timer);
esl_lib_log_it_debug(IT_FMT "OTS disconnected" APP_LOG_NL,
- image_transfer->image_transfer_handle);
+ image_transfer);
sc = SL_STATUS_BT_CTRL_REMOTE_USER_TERMINATED;
remove_transfer(&image_transfer,
sc,
@@ -1237,9 +1271,9 @@ static void init_timeout(app_timer_t *timer,
{
image_transfer_t *image_transfer = (image_transfer_t *)data;
esl_lib_log_it_error(IT_FMT "OTS init timeout" APP_LOG_NL,
- image_transfer->image_transfer_handle);
- // Remove transfer that could not be initialized
- remove_transfer(&image_transfer, SL_STATUS_TIMEOUT, false);
+ image_transfer);
+ // Send operation finished with error event
+ operation_finished(image_transfer, SL_STATUS_INITIALIZATION, false);
}
static void gatt_timeout(app_timer_t *timer,
@@ -1247,11 +1281,9 @@ static void gatt_timeout(app_timer_t *timer,
{
image_transfer_t *image_transfer = (image_transfer_t *)data;
esl_lib_log_it_error(IT_FMT "OTS GATT timeout" APP_LOG_NL,
- image_transfer->image_transfer_handle);
+ image_transfer);
// Send operation finished with error event
- operation_finished(image_transfer,
- SL_STATUS_TIMEOUT,
- image_transfer->ots_ongoing_command == OTS_COMMAND_WRITE);
+ operation_finished(image_transfer, SL_STATUS_TIMEOUT, true);
}
static void transfer_timeout(app_timer_t *timer,
@@ -1259,6 +1291,6 @@ static void transfer_timeout(app_timer_t *timer,
{
image_transfer_t *image_transfer = (image_transfer_t *)data;
esl_lib_log_it_error(IT_FMT "OTS transfer timeout" APP_LOG_NL,
- image_transfer->image_transfer_handle);
- operation_finished(image_transfer, SL_STATUS_TIMEOUT, true);
+ image_transfer);
+ operation_finished(image_transfer, SL_STATUS_TRANSMIT_INCOMPLETE, true);
}
diff --git a/app/bluetooth/common_host/esl_lib/esl_lib_image_transfer.h b/app/bluetooth/common_host/esl_lib/esl_lib_image_transfer.h
index 1fac377cd5..e507bbdaaf 100644
--- a/app/bluetooth/common_host/esl_lib/esl_lib_image_transfer.h
+++ b/app/bluetooth/common_host/esl_lib/esl_lib_image_transfer.h
@@ -54,6 +54,7 @@ typedef enum {
ESL_LIB_IMAGE_TRANSFER_STATE_INIT_IN_PROGRESS,
ESL_LIB_IMAGE_TRANSFER_STATE_IDLE,
ESL_LIB_IMAGE_TRANSFER_STATE_BUSY,
+ ESL_LIB_IMAGE_TRANSFER_STATE_ERROR,
ESL_LIB_IMAGE_TRANSFER_REMOVED
} esl_image_transfer_state_t;
@@ -129,6 +130,14 @@ sl_status_t esl_lib_image_transfer_init(uint8_t
esl_lib_ots_gattdb_handles_t *gattdb_handles,
esl_lib_image_transfer_handle_t *handle_out);
+/***************************************************************************//**
+ * Discard and clanup transfer by handle
+ * @note Call only if `sl_bt_evt_connection_closed_id` event can't be expected!
+ * @param[in] handle Pointer to an ESL Image Transfer handle.
+ * @return Status of the operation
+ ******************************************************************************/
+sl_status_t esl_lib_image_dump_transfer_by_handle(esl_lib_image_transfer_handle_t *handle);
+
/***************************************************************************//**
* Read object type
* @param[in] handle ESL Image Transfer handle.
diff --git a/app/bluetooth/common_host/esl_lib/esl_lib_memory.c b/app/bluetooth/common_host/esl_lib/esl_lib_memory.c
index d86805169d..bfbb8c6486 100644
--- a/app/bluetooth/common_host/esl_lib/esl_lib_memory.c
+++ b/app/bluetooth/common_host/esl_lib/esl_lib_memory.c
@@ -78,7 +78,7 @@ void *_esl_lib_malloc(size_t size, const char *file, uint32_t line)
// Push it to the list
sl_slist_push(&list, &item->node);
if (item->file[8] != 'e') { // event list allocations excluded
- esl_lib_log_debug(LOG_MODULE, "%8p Size = %zu allocated in %s:%u" APP_LOG_NL,
+ esl_lib_log_debug(LOG_MODULE, ESL_LIB_LOG_HANDLE_FORMAT " Size = %zu allocated in %s:%u" APP_LOG_NL,
item->ptr,
item->size,
item->file,
@@ -99,7 +99,7 @@ void _esl_lib_free(void *ptr, const char *file, uint32_t line)
// Remove from the list
sl_slist_remove(&list, &item->node);
if (item->file[8] != 'e') { // events excluded
- esl_lib_log_debug(LOG_MODULE, "%8p Size = %zu freed in %s:%u" APP_LOG_NL,
+ esl_lib_log_debug(LOG_MODULE, ESL_LIB_LOG_HANDLE_FORMAT " Size = %zu freed in %s:%u" APP_LOG_NL,
item->ptr,
item->size,
item->file,
@@ -109,6 +109,11 @@ void _esl_lib_free(void *ptr, const char *file, uint32_t line)
free(ptr);
// Free list item
free(item);
+ } else {
+ esl_lib_log_critical(LOG_MODULE, "Unknown free request for " ESL_LIB_LOG_HANDLE_FORMAT " in %s:%u" APP_LOG_NL,
+ ptr,
+ file,
+ line);
}
}
diff --git a/app/bluetooth/common_host/ncp_host/ncp_host.c b/app/bluetooth/common_host/ncp_host/ncp_host.c
index 6d9e013288..b53b5b0b6a 100644
--- a/app/bluetooth/common_host/ncp_host/ncp_host.c
+++ b/app/bluetooth/common_host/ncp_host/ncp_host.c
@@ -83,7 +83,9 @@ static bool enable_security = false;
#endif // defined(SECURITY) && SECURITY == 1
static int32_t ncp_host_peek_timeout(uint32_t len, uint32_t timeout);
-void ncp_sec_host_command_handler(buf_ncp_host_t *buf);
+static void ncp_sec_host_command_handler(buf_ncp_host_t *buf);
+static int32_t ncp_host_lazy_peek(void);
+static int32_t ncp_host_get_msg(void);
/**************************************************************************//**
* Initialize NCP connection.
@@ -92,7 +94,7 @@ sl_status_t ncp_host_init(void)
{
sl_status_t sc;
- sc = sl_bt_api_initialize_nonblock(ncp_host_tx, ncp_host_rx, ncp_host_peek);
+ sc = sl_bt_api_initialize_nonblock(ncp_host_tx, ncp_host_rx, ncp_host_lazy_peek);
if (sc == SL_STATUS_OK) {
sc = host_comm_init();
@@ -163,30 +165,50 @@ void ncp_host_tx(uint32_t len, uint8_t* data)
int32_t ncp_host_rx(uint32_t len, uint8_t* data)
{
int32_t ret;
+ static uint16_t read_offset = 0;
if (buf_ncp_in.len == 0) {
- ret = ncp_host_peek();
+ ret = ncp_host_get_msg();
+ // Finished receiving a brand new, complete NCP message
+ read_offset = 0;
} else {
- ret = buf_ncp_in.len;
+ // NCP host code is still processing the previosuly received message
+ ret = buf_ncp_in.len - read_offset;
}
if (ret > 0) {
- if (len <= buf_ncp_in.len) {
- memcpy(data, buf_ncp_in.buf, len);
- buf_ncp_in.len -= len;
- memmove(buf_ncp_in.buf, &buf_ncp_in.buf[len], buf_ncp_in.len);
+ if (len <= ret) {
+ memcpy(data, &buf_ncp_in.buf[read_offset], len);
+ read_offset += len;
} else {
ret = -1;
+ // Drop seemingly partial messages
+ buf_ncp_in.len = 0;
}
} else {
+ // Reset the length counter until a full message arrives
+ buf_ncp_in.len = 0;
ret = -1;
}
return ret;
}
-/**************************************************************************//**
- * Peek if readable data exists with timeout option.
+/******************************************************************************
+ * Check if any data is available in receive buffer, sleep if empty
+ *****************************************************************************/
+static int32_t ncp_host_lazy_peek(void)
+{
+ int32_t ret = HOST_COMM_PEEK();
+
+ if (ret < 1) {
+ app_sleep_us(PEEK_US_SLEEP);
+ }
+ return ret;
+}
+
+/******************************************************************************
+ * Check if given amount of data is available in receive buffer within timeout
*****************************************************************************/
-int32_t ncp_host_peek_timeout(uint32_t len, uint32_t timeout)
+static int32_t ncp_host_peek_timeout(uint32_t len, uint32_t timeout)
{
int32_t ret;
uint32_t timeout_counter = 0;
@@ -203,23 +225,20 @@ int32_t ncp_host_peek_timeout(uint32_t len, uint32_t timeout)
return ret;
}
-/**************************************************************************//**
- * Peek if readable data exists.
+/******************************************************************************
+ * Assemble complete BGAPI message from the receive buffer
*****************************************************************************/
-int32_t ncp_host_peek(void)
+static int32_t ncp_host_get_msg(void)
{
int32_t msg_len;
- msg_len = HOST_COMM_PEEK();
- if (msg_len) {
+ msg_len = ncp_host_lazy_peek();
+ if (msg_len > 0) {
int32_t ret;
uint8_t msg_header = 0;
// Read first byte
ret = HOST_COMM_RX(1, &buf_ncp_raw.buf[0]);
- if (ret < 0) {
- return -1;
- }
msg_header = (uint8_t)(buf_ncp_raw.buf[0] & 0xf8);
msg_len = 256 * (buf_ncp_raw.buf[0] & 0x07); // Get the high bits of the message length
// Check if proper ncp header arrived
@@ -230,9 +249,6 @@ int32_t ncp_host_peek(void)
return -1;
}
ret = HOST_COMM_RX(1, (void *)&buf_ncp_raw.buf[1]);
- if (ret < 0) {
- return -1;
- }
msg_len |= buf_ncp_raw.buf[1];
msg_len += 2;
// Check if length will fit to buffer
@@ -264,15 +280,15 @@ int32_t ncp_host_peek(void)
ncp_sec_host_command_handler(&buf_ncp_in);
}
#endif // defined(SECURITY) && SECURITY == 1
+ } else {
+ return -1;
}
- } else {
- app_sleep_us(PEEK_US_SLEEP);
}
return msg_len;
}
#if defined(SECURITY) && SECURITY == 1
-void ncp_sec_host_command_handler(buf_ncp_host_t *buf)
+static void ncp_sec_host_command_handler(buf_ncp_host_t *buf)
{
uint8_t response[DEFAULT_HOST_BUFLEN];
sl_bt_msg_t *command = NULL;
diff --git a/app/bluetooth/common_host/ncp_host/ncp_host.h b/app/bluetooth/common_host/ncp_host/ncp_host.h
index 372eaa7b4b..1dc407add5 100644
--- a/app/bluetooth/common_host/ncp_host/ncp_host.h
+++ b/app/bluetooth/common_host/ncp_host/ncp_host.h
@@ -94,12 +94,4 @@ void ncp_host_tx(uint32_t len, uint8_t *data);
* @return Number of bytes read, -1 on error.
*****************************************************************************/
int32_t ncp_host_rx(uint32_t len, uint8_t *data);
-
-/**************************************************************************//**
- * Peek if readable data exists.
- *
- * @return Number of bytes on the buffer, -1 on error.
- *****************************************************************************/
-int32_t ncp_host_peek(void);
-
#endif // NCP_HOST_H
diff --git a/app/bluetooth/common_host/ncp_sec/ncp_sec_host.c b/app/bluetooth/common_host/ncp_sec/ncp_sec_host.c
index c94e40ff88..c645a1cb51 100644
--- a/app/bluetooth/common_host/ncp_sec/ncp_sec_host.c
+++ b/app/bluetooth/common_host/ncp_sec/ncp_sec_host.c
@@ -564,6 +564,7 @@ void security_decrypt_packet(char *src, char *dst, unsigned *len)
// remove tag and counter value
*len = *len - NCP_SEC_PAYLOAD_OVERHEAD;
+ new_length += 4;
//verify counter to prevent replay attacks
conn_nonce_t nonce;
@@ -591,7 +592,7 @@ void security_decrypt_packet(char *src, char *dst, unsigned *len)
auth_data, 7,
(uint8_t *)dst, (uint8_t *)src + *len);
if (err) {
- app_log_warning("Packet decryption failed 0x%x" APP_LOG_NL, err);
+ app_log_warning("Packet decryption failed 0x%x, len: %u/%u" APP_LOG_NL, err, *len, new_length);
*len = 0;
return;
}
diff --git a/app/bluetooth/component_host/ncp_host_bt.mk b/app/bluetooth/component_host/ncp_host_bt.mk
index 69aee17ef3..d42e257ded 100644
--- a/app/bluetooth/component_host/ncp_host_bt.mk
+++ b/app/bluetooth/component_host/ncp_host_bt.mk
@@ -115,5 +115,5 @@ endif
ifeq ($(OS), win)
# Ws2_32: WinSock library
- override LDFLAGS += -lWs2_32
+ override LDFLAGS += -lWs2_32 -lcrypt32
endif
diff --git a/app/bluetooth/documentation/slBluetooth_docContent.xml b/app/bluetooth/documentation/slBluetooth_docContent.xml
index ecbd0c95bd..14249cd402 100644
--- a/app/bluetooth/documentation/slBluetooth_docContent.xml
+++ b/app/bluetooth/documentation/slBluetooth_docContent.xml
@@ -1,6 +1,6 @@
-
+
Includes detailed information on using the Gecko Bootloader with Silicon Labs Bluetooth applications. It supplements the general Gecko Bootloader implementation information provided in UG489: Silicon Labs Gecko Bootloader User's Guide.
@@ -8,7 +8,7 @@
-
+
Describes the Wi-Fi impact on Bluetooth and methods to improve Bluetooth coexistence with Wi-Fi. Explains design considerations to improve coexistence without direct interaction between Bluetooth and Wi-Fi radios. These techniques are applicable to the EFR32MGx and EFR32BGx series. Discusses the Silicon Labs Packet Traffic Arbitration (PTA) support to coordinate 2.4GHz RF traffic for co-located Bluetooth and Wi-Fi radios.
@@ -16,7 +16,7 @@
-
+
Explains how NVM3 can be used as non-volatile data storage in various protocol implementations.
@@ -24,7 +24,7 @@
-
+
Describes how to lock and unlock the debug access of EFR32 Gecko Series 2 devices. Many aspects of the debug access, including the secure debug unlock are described. The Debug Challenge Interface (DCI) and Secure Engine (SE) Mailbox Interface for locking and unlocking debug access are also included.
@@ -32,7 +32,7 @@
-
+
Contains detailed information on configuring and using the Secure Boot with hardware Root of Trust and Secure Loader on Series 2 devices, including how to provision the signing key. This is a companion document to UG489: Silicon Labs Gecko Bootloader User's Guide.
@@ -40,7 +40,7 @@
-
+
Details on programming, provisioning, and configuring Series 2 devices in production environments. Covers Secure Engine Subsystem of Series 2 devices, which runs easily upgradeable Secure Engine (SE) or Virtual Secure Engine (VSE) firmware.
@@ -48,14 +48,14 @@
-
+
Describes how to measure the power consumption of EFR32BG devices running the Bluetooth i-Beacon example. For general instructions, see AN969: Measuring Power Consumption in Wireless Gecko Devices, available on silabs.com.
-
+
How to program, provision, and configure the anti-tamper module on EFR32 Series 2 devices with Secure Vault.
@@ -63,7 +63,7 @@
-
+
Describes how to configure the NCP target and how to program the NCP host when using the Bluetooth Stack in Network Co-Processor mode
@@ -71,14 +71,14 @@
-
+
Describes how to integrate a v3.x Silicon Labs Bluetooth application with an RTOS, and demonstrate how a time- and event-driven application can be run in parallel with the Bluetooth stack.
-
+
Reviews performing radio frequency physical layer evaluation with EFR32BG SoCs and BGM modules using the Direct Test Mode protocol in Bluetooth SDK v3.x.
@@ -86,7 +86,7 @@
-
+
How to authenticate an EFR32 Series 2 device with Secure Vault, using secure device certificates and signatures.
@@ -94,14 +94,14 @@
-
+
Provides details on how to develop a dynamic multiprotocol application running Bluetooth and a proprietary protocol on RAIL in GSDK v3.x.
-
+
How to securely "wrap" keys in EFR32 Series 2 devices with Secure Vault, so they can be stored in non-volatile storage.
@@ -109,28 +109,28 @@
-
+
Describes the sample applications provided to demonstrate the directing finding capabilities of Bluetooth 5.1. Angle of Arrival (AoA) estimation is demonstrated with the use of Silicon Labs' Real Time Locating (RTL) library. These techniques are applicable to the EFR32MGx and EFR32BGx series.
-
+
Bluetooth 5.1 makes it possible to send Constant Tone Extensions (CTEs) in Bluetooth packets on which phase measurements can be done. This guide is for those implementing custom applications that take advantage of phase measurement and antenna switching capabilites.
-
+
Provides details on designing Bluetooth Low Energy applications with security and privacy in mind.
-
+
Describes how to provision and configure Series 2 devices through the DCI and SWD.
@@ -138,14 +138,14 @@
-
+
Includes the results of the interoperability testing of Silicon Labs' ICs and Bluetooth Low Energy stack with Android and iOS smart phones.
-
+
Describes how to integrate crypto functionality into applications using PSA Crypto compared to Mbed TLS.
@@ -153,7 +153,7 @@
-
+
Describes using Simplicity Studio 5's Network Analyzer to debug Bluetooth Mesh and Low Energy applications. It can be read jointly with AN958: Debugging and Programming Interfaces for Customer Designs for more information on using Packet Trace Interface with custom hardware.
@@ -161,7 +161,7 @@
-
+
Gecko Bootloader v2.x, introduced in GSDK 4.0, contains a number of changes compared to Gecko Bootloader v1.x. This document describes the differences between the versions, including how to configure the new Gecko Bootloader in Simplicity Studio 5.
@@ -169,14 +169,14 @@
-
+
Gives a short overview of the standard Host Controller Interface (HCI) and how to use it with a Silicon Labs Bluetooth LE controller.
-
+
Describes how to run any combination of Zigbee EmberZNet, OpenThread, and Bluetooth networking stacks on a Linux host processor, interfacing with a single EFR32 Radio Co-processor (RCP) with multiprotocol and multi-PAN support, as well as how to run the Zigbee stack on the EFR32 as a network co-processor (NCP) alongside the OpenThread RCP.
@@ -184,21 +184,21 @@
-
+
Summarizes Amazon FreeRTOS components and sample applications, and explains how to use the examples to communicate with the Amazon Web Services (AWS) cloud with a smart phone app.
-
+
Describes how to exploit the different features of Bluetooth technology to achieve the minimum possible energy consumption for a given use case.
-
+
Covers the basics of ARMv8-M TrustZone, describes how TrustZone is implemented on Series 2 devices, and provides application examples.
@@ -206,14 +206,14 @@
-
+
Describes the theoretical background of certificate-based authentication and pairing, and demonstrates the usage of the related sample applications that can be found in the Silicon Labs Bluetooth SDK.
-
+
Describes how to run a combination of Zigbee, Bluetooth, and OpenThread networking stacks and the Zigbee application layer on a System-on-Chip (SoC).
@@ -221,56 +221,56 @@
-
+
Provides an overview and hyperlinks to all packaged documentation.
-
+
Describes the differences between using Bluetooth SDK v2.x in Simplicity Studio 4 and using Bluetooth SDK v3.x in Simplicity Studio 5. Outlines the steps needed to migrate a v2.x project to v3.x.
-
+
Describes the software components provided by Silicon Labs to support Direction Finding (DF) and provides instructions on how to start developing your own application.
-
+
Contains a comprehensive list of APIs used to interface to the Silicon Labs Bluetooth Real-Time Locating Library.
-
+
Contains a comprehensive list of APIs used to interface to the Silicon Labs Bluetooth stack.
-
+
Lists compatibility requirements and sources for all software components in the development environment. Discusses the latest changes to the Silicon Labs Bluetooth SDK and associated utilities, including added/deleted/deprecated features/API, and lists fixed and known issues.
-
+
Discusses the latest changes to the The Real-Time Locating (RTL) library, including added/deleted/deprecated APIs, and lists fixed and known issues.
-
+
A detailed overview of the changes, additions, and fixes in the Gecko Platform components. The Gecko Platform includes EMLIB, EMDRV, RAIL Library, NVM3, and the component-based infrastructure.
@@ -278,7 +278,7 @@
-
+
Introduces the security concepts that must be considered when implementing an Internet of Things (IoT) system. Using the ioXt Alliance's eight security principles as a structure, it clearly delineates the solutions Silicon Labs provides to support endpoint security and what you must do outside of the Silicon Labs framework.
@@ -286,7 +286,7 @@
-
+
Introduces bootloading for Silicon Labs networking devices. Discusses the Gecko Bootloader as well as legacy Ember and Bluetooth bootloaders, and describes the file formats used by each.
@@ -294,7 +294,7 @@
-
+
Introduces non-volatile data storage using flash and the three different storage implementations offered for Silicon Labs microcontrollers and SoCs: Simulated EEPROM, PS Store, and NVM3.
@@ -302,14 +302,14 @@
-
+
Offers an overview for those new to the Bluetooth low energy technology.
-
+
Describes the four multiprotocol modes, discusses considerations when selecting protocols for multiprotocol implementations, and reviews the Radio Scheduler, a required component of a dynamic multiprotocol solution.
@@ -317,7 +317,7 @@
-
+
Describes methods to improve the coexistence of 2.4 GHz IEEE 802.11b/g/n Wi-Fi and other 2.4 GHz radios such as Bluetooth, Bluetooth Mesh, Bluetooth Low Energy, and IEEE 802.15.4-based radios such as Zigbee and OpenThread.
@@ -325,14 +325,14 @@
-
+
Explains the basics of Bluetooth Angle of Arrival (AoA) and Angle of Departure (AoD) direction finding technologies and provides the theory behind estimating angle of arrival.
-
+
Reviews using this XML-based mark-up language to describe the Bluetooth GATT database, configure access and security properties, and include the GATT database as part of the firmware.
@@ -340,7 +340,7 @@
-
+
Describes how and when to use Simplicity Commander's Command-Line Interface.
@@ -348,7 +348,7 @@
-
+
Describes how to implement a dynamic multiprotocol solution.
@@ -356,14 +356,14 @@
-
+
Covers the Bluetooth stack v7.x architecture, application development flow, using the MCU core and peripherals, stack configuration options, and stack resource usage.
-
+
Describes how to use the Simplicity Studio 5 GATT Configurator, an intuitive interface providing access to all the Profiles, Services, Characteristics, and Descriptors as defined in the Bluetooth specification.
@@ -371,7 +371,7 @@
-
+
Describes the high-level implementation of the Silicon Labs Gecko Bootloader for EFR32 SoCs and NCPs, and provides information on how to get started using the Gecko Bootloader with Silicon Labs wireless protocol stacks in GSDK 4.0 and higher.
@@ -379,7 +379,7 @@
-
+
The Bluetooth Direction Finding Tool Suite is meant to ease development with the Silicon Labs' RTL library. It provides multiple tools to configure the system, and also helps the development with analyzer tools that calculate many output parameters from the observed IQ samples.
diff --git a/app/bluetooth/esf.properties b/app/bluetooth/esf.properties
index b2e0b77d1e..0b104c14ea 100644
--- a/app/bluetooth/esf.properties
+++ b/app/bluetooth/esf.properties
@@ -3,8 +3,8 @@ id=com.silabs.stack.ble
label=Bluetooth SDK
description=Bluetooth Software Development Kit
-version=7.0.1.0
-prop.subLabel=Bluetooth\\ 7.0.1
+version=7.1.0.0
+prop.subLabel=Bluetooth\\ 7.1.0
# Default compatibility of the BLE SDK
prop.boardCompatibility=.*
diff --git a/app/bluetooth/example/bt_abr_ncp_initiator/app.c b/app/bluetooth/example/bt_abr_ncp_initiator/app.c
index a817a93b67..eea1b1ec19 100644
--- a/app/bluetooth/example/bt_abr_ncp_initiator/app.c
+++ b/app/bluetooth/example/bt_abr_ncp_initiator/app.c
@@ -44,6 +44,9 @@
#define ANTENNA_PIN0 0
#define ANTENNA_PIN1 1
#define APPLY_ANTENNA_PIN(pin, value) ((value) ? GPIO_PinOutSet(ANTENNA_PORT, pin) : GPIO_PinOutClear(ANTENNA_PORT, pin))
+#ifndef SL_BOARD_NAME
+#define SL_BOARD_NAME "UNKNOWN!"
+#endif // SL_BOARD_NAME
static void ans_set_GPIOS_for_antenna(uint8_t);
diff --git a/app/bluetooth/example/bt_ncp/bt_ncp_esl_ap.slcp b/app/bluetooth/example/bt_ncp/bt_ncp_esl_ap.slcp
index 4359745797..d83964f70e 100644
--- a/app/bluetooth/example/bt_ncp/bt_ncp_esl_ap.slcp
+++ b/app/bluetooth/example/bt_ncp/bt_ncp_esl_ap.slcp
@@ -49,6 +49,7 @@ requires:
- name: bluetooth_feature_periodic_advertiser
- name: bluetooth_feature_connection_phy_update
- name: bluetooth_feature_external_bonding_database
+ - name: bluetooth_feature_connection_pawr_scheduling
- name: bluetooth_feature_use_accurate_api_address_types
source:
@@ -80,9 +81,9 @@ configuration:
- name: SL_NCP_CMD_BUF_SIZE
value: "288"
- name: SL_NCP_EVT_BUF_SIZE
- value: "260"
+ value: "264"
- name: SL_SIMPLE_COM_TX_BUF_SIZE
- value: "260"
+ value: "264"
- name: SL_SIMPLE_COM_RX_BUF_SIZE
value: "288"
- name: SL_NCP_CMD_TIMEOUT_MS
@@ -99,6 +100,8 @@ configuration:
value: "3"
- name: SL_BT_CONFIG_MAX_PERIODIC_ADVERTISERS
value: "2"
+ - name: SL_BT_CONFIG_MAX_ADVERTISED_DATA_LENGTH_HINT
+ value: "74"
- name: SL_BT_CONFIG_MAX_PAWR_ADVERTISERS
value: "2"
- name: SL_DEVICE_INIT_LFRCO_PRECISION
diff --git a/app/bluetooth/example/bt_soc_esl_tag/app.c b/app/bluetooth/example/bt_soc_esl_tag/app.c
index 5aef0d8bde..340259cfef 100644
--- a/app/bluetooth/example/bt_soc_esl_tag/app.c
+++ b/app/bluetooth/example/bt_soc_esl_tag/app.c
@@ -206,14 +206,14 @@ static void sw_pwm_led_off(led_sw_pwm_t *instance)
}
#endif // gattdb_esl_led_info
+#ifdef SL_CATALOG_SIMPLE_LED_LED0_PRESENT
// Power manager callback with some LED feedback
static void pm_callback(sl_power_manager_em_t from,
sl_power_manager_em_t to)
{
(void)from;
-
- #ifdef SL_CATALOG_SIMPLE_LED_LED0_PRESENT
uint8_t basic_state = esl_core_get_basic_state_bit(ESL_BASIC_STATE_SYNCHRONIZED_BIT);
+
switch (to) {
case SL_POWER_MANAGER_EM0:
if (led0_feedback_enabled) {
@@ -243,9 +243,6 @@ static void pm_callback(sl_power_manager_em_t from,
default:
break;
}
- #else // SL_CATALOG_SIMPLE_LED_LED0_PRESENT
- (void)to;
- #endif // SL_CATALOG_SIMPLE_LED_LED0_PRESENT
}
static sl_power_manager_em_transition_event_handle_t event_handle;
@@ -254,14 +251,21 @@ static sl_power_manager_em_transition_event_info_t event_info = {
| SL_POWER_MANAGER_EVENT_TRANSITION_ENTERING_EM0,
.on_event = pm_callback,
};
+#endif // SL_CATALOG_SIMPLE_LED_LED0_PRESENT
/**************************************************************************//**
* Application Init.
*****************************************************************************/
SL_WEAK void app_init(void)
{
+#ifdef SL_CATALOG_SIMPLE_LED_LED0_PRESENT
+ // Provide optical feedback of the ESL internal status through led 0 instance
+ // Attention! Enable for debugging purposes only, as the vast increase in EM2
+ // wake-up time can increase the average power consumption of the synchronized
+ // ESL by up to 3uAh!
sl_power_manager_init();
sl_power_manager_subscribe_em_transition_event(&event_handle, &event_info);
+#endif // SL_CATALOG_SIMPLE_LED_LED0_PRESENT
/////////////////////////////////////////////////////////////////////////////
// Put your additional application init code here! //
@@ -541,14 +545,12 @@ sl_status_t esl_sensor_custom_read(uint8_t index,
void esl_core_unassociate_callback(void)
{
- uint8_t device_index;
-
sl_bt_esl_log(ESL_LOG_COMPONENT_APP,
ESL_LOG_LEVEL_INFO,
"Execute unassociate callback");
#ifdef gattdb_esl_led_info
- device_index = esl_led_get_count();
+ uint8_t device_index = esl_led_get_count();
// disable all available LED on board
while (device_index--) {
diff --git a/app/bluetooth/example/bt_soc_ibeacon/app.c b/app/bluetooth/example/bt_soc_ibeacon/app.c
index c062027e52..6dfa83bd81 100644
--- a/app/bluetooth/example/bt_soc_ibeacon/app.c
+++ b/app/bluetooth/example/bt_soc_ibeacon/app.c
@@ -3,7 +3,7 @@
* @brief Core application logic.
*******************************************************************************
* # License
- * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ * Copyright 2024 Silicon Laboratories Inc. www.silabs.com
*******************************************************************************
*
* SPDX-License-Identifier: Zlib
@@ -28,6 +28,7 @@
*
******************************************************************************/
+#include "sl_common.h"
#include "sl_bluetooth.h"
#include "app_assert.h"
#include "app.h"
diff --git a/app/bluetooth/example/bt_soc_voice/voice.c b/app/bluetooth/example/bt_soc_voice/voice.c
index f77f45e884..437d68962d 100644
--- a/app/bluetooth/example/bt_soc_voice/voice.c
+++ b/app/bluetooth/example/bt_soc_voice/voice.c
@@ -3,7 +3,7 @@
* @brief Voice transmission
*******************************************************************************
* # License
- * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ * Copyright 2024 Silicon Laboratories Inc. www.silabs.com
*******************************************************************************
*
* SPDX-License-Identifier: Zlib
@@ -27,10 +27,11 @@
* 3. This notice may not be removed or altered from any source distribution.
*
******************************************************************************/
-// Define module name for Power Manager debuging feature.
+// Define module name for Power Manager debugging feature.
#define CURRENT_MODULE_NAME "APP_BLUETOOTH_EXAMPLE_SOC_VOICE"
#include
+#include "sl_common.h"
#include "sl_power_manager.h"
#include "sl_board_control.h"
#include "app_assert.h"
diff --git a/app/bluetooth/example_host/bt_host_esl_ap/ap_cli.py b/app/bluetooth/example_host/bt_host_esl_ap/ap_cli.py
index 0cc00a3b21..c5e5b861b8 100644
--- a/app/bluetooth/example_host/bt_host_esl_ap/ap_cli.py
+++ b/app/bluetooth/example_host/bt_host_esl_ap/ap_cli.py
@@ -642,6 +642,9 @@ def arg_image_update(self):
image_update 1 "/user/home/path with space/img.jpg" all
Use the 'all' keyword as special address to send the same image to slot 1 on all connected ESLs.
+
+ image_update 0 *qrcode all
+ To send unique QR codes to all connected tags for use with ESL Demo, enter "*qrcode" instead of a valid image file path.
''')
parser_image_update.add_argument('image_index', type=int, help="Image storage index of the ESL tag to be updated.")
parser_image_update.add_argument('imagefile_path', type=str, help="Relative or full path to the selected image file. Use quotation marks if the path contains spaces.")
@@ -666,13 +669,15 @@ def do_image_update(self, arg):
label = None
rotation = None
cropfit = False
+ filename = None
if arg.image_index in range(0,256):
image_index = arg.image_index
else:
self.log.error("Image index must be between 0 and 255")
input_error = True
- filename = arg.imagefile_path
+ if arg.imagefile_path != "*qrcode": # Check if this is not the specific use case for the ESL demo
+ filename = arg.imagefile_path
if arg.raw:
raw_img = True
if arg.display_index is not None:
diff --git a/app/bluetooth/example_host/bt_host_esl_ap/ap_config.py b/app/bluetooth/example_host/bt_host_esl_ap/ap_config.py
index 22fb1e17de..b083bc46f9 100644
--- a/app/bluetooth/example_host/bt_host_esl_ap/ap_config.py
+++ b/app/bluetooth/example_host/bt_host_esl_ap/ap_config.py
@@ -45,7 +45,7 @@
ESL_CMD_MAX_PENDING_CONNECTION_REQUEST_COUNT = 2
# Tags in a group in automated mode addressing
-ESL_MAX_TAGS_IN_AUTO_GROUP = 16
+ESL_MAX_TAGS_IN_AUTO_GROUP = 32
# Default RSSI threshold in dBm
RSSI_THRESHOLD = -60
diff --git a/app/bluetooth/example_host/bt_host_esl_ap/ap_core.py b/app/bluetooth/example_host/bt_host_esl_ap/ap_core.py
index b84c8def43..efc58653e1 100644
--- a/app/bluetooth/example_host/bt_host_esl_ap/ap_core.py
+++ b/app/bluetooth/example_host/bt_host_esl_ap/ap_core.py
@@ -41,6 +41,8 @@
from esl_tag_db import TagDB
from ap_ead import KeyMaterial, EAD
from esl_command import ESLCommand
+from qrcode_generator import generate_qrcode
+from io import BytesIO
import esl_key_lib
import esl_lib
import esl_lib_wrapper as elw
@@ -377,6 +379,7 @@ def ap_imageupdate(self, image_index, file, raw=False, display_ind=None, label=N
- label Label to be printed as an overlay to the image
- rotation Clockwise (cw), Counter-clockwise (ccw), flip
"""
+ qr_request = False
# If image file is from console, check validity
if isinstance(file, str) and not self.controller_command:
self.raw_image = b""
@@ -421,8 +424,20 @@ def ap_imageupdate(self, image_index, file, raw=False, display_ind=None, label=N
self.notify_controller(CCMD_REQUEST_DATA, CONTROLLER_COMMAND_SUCCESS, REQUEST_IMAGE_DATA_HEADER, self.image_data_offset, REQUEST_IMAGE_DATA_RESERVED)
return
+ if file is None and len(tags_to_update) != 0:
+ self.log.info("QR code generation requested for %d number of tags to image slot %d", len(tags_to_update), image_index)
+ qr_request = True
+
for tag in tags_to_update:
try:
+ if qr_request:
+ # Create Silabs' ESL Demo specific command encoded into a QR code
+ _, file = generate_qrcode(f"connect {str(tag.ble_address).partition(',')[0]}", 128, 128)
+ # Convert to byte stream as if sent from demo controller
+ img_byte_arr = BytesIO()
+ file.save(img_byte_arr, format='PNG')
+ # Each tag will have its own, unique QR now as byte stream input
+ file = img_byte_arr.getvalue()
tag.image_update(image_index, file, raw, display_ind, label, rotation, cropfit)
self.log.info("Image update started for tag at %s to image slot %d", tag.ble_address, image_index)
except ImageUpdateFailed as ex:
@@ -1237,7 +1252,7 @@ def esl_event_error(self, evt: esl_lib.EventError):
if not tag.blocked:
self.log.warning("ESL at address %s has been blocked due to unsuccessful connection attempt(s).", evt.node_id)
tag.block(elw.ESL_LIB_STATUS_BONDING_FAILED)
- elif evt.sl_status == elw.SL_STATUS_BT_CTRL_CONNECTION_TERMINATED_BY_LOCAL_HOST and evt.data == elw.ESL_LIB_CONNECTION_STATE_ESL_DISCOVERY:
+ elif evt.sl_status == elw.SL_STATUS_BT_CTRL_CONNECTION_TERMINATED_BY_LOCAL_HOST and (evt.data == elw.ESL_LIB_CONNECTION_STATE_ESL_DISCOVERY or evt.data == elw.ESL_LIB_CONNECTION_STATE_SERVICE_DISCOVERY):
if tag.blocked:
self.key_db.delete_ltk(tag.ble_address) # remove key of ESLs which are violating the spec (that is, which are lack of any mandatory GATT entries)
self.log.debug("Bonding for ESL at address %s deleted due to ESL Profile/Service violation.", tag.ble_address)
@@ -1272,7 +1287,11 @@ def esl_event_error(self, evt: esl_lib.EventError):
if tag is not None and tag.provisioned and not tag.advertising:
self.log.debug("Check if Tag at address %s got synchronized despite the connection closing timeout.", tag.ble_address)
self.ap_ping(tag.esl_id, tag.group_id) # Special edge case in which the synced flag may not be set after disconnection -> check if tag is synced
-
+ elif evt.lib_status == elw.ESL_LIB_STATUS_CONN_DISCOVERY_FAILED and evt.sl_status == elw.SL_STATUS_BT_ATT_REQUEST_NOT_SUPPORTED and evt.data == elw.ESL_LIB_CONNECTION_STATE_SERVICE_DISCOVERY:
+ tag = self.tag_db.find(evt.node_id)
+ if tag is not None and not tag.blocked:
+ self.log.warning("ESL at address %s has been blocked due to missing mandatory service!", evt.node_id)
+ tag.block(evt.lib_status)
def esl_event_image_type(self, evt: esl_lib.EventImageType):
""" ESL event handler """
# Cache image type
@@ -1333,7 +1352,7 @@ def auto_esl_event_tag_found(self, evt: esl_lib.EventTagFound):
if tag is not None and tag.state == TagState.IDLE:
if tag.advertising:
if self.pawr_active and not tag.blocked:
- self.check_address_list()
+ self.check_address_list(tag)
elif not self.pawr_active:
self.log.error("ESL tag cannot be synchronized because PAwR is not started!")
self.log.info("Please re-start auto mode with command: 'mode auto' to recover.")
@@ -1369,11 +1388,14 @@ def auto_esl_event_connection_opened(self, evt: esl_lib.EventConnectionOpened):
self.log.warning("AUTO MODE TEMPORARILY CHANGED TO MANUAL!")
self.cmd_mode = self.auto_override
self.set_mode_handlers()
- elif tag is not None and tag.provisioned: # we remain in auto mode, so aviod stuck connected in special case below
- if tag.max_image_index is not None and tag.has_image_transfer and IMAGE_MAX_AUTO_UPLOAD_COUNT and tag.auto_image_count < min((tag.max_image_index + 1), IMAGE_MAX_AUTO_UPLOAD_COUNT):
- self.upload_auto_image((tag.auto_image_count % len(self.image_files)), tag)
- else:
- self.ap_update_complete(tag.esl_id, tag.group_id)
+ elif tag is not None:
+ if evt.status != elw.SL_STATUS_OK:
+ self.disconnect(tag) # auto mode can't do anything with a Tag that is connected with failure
+ elif tag.provisioned: # we remain in auto mode, so aviod stuck connected in special case below
+ if tag.max_image_index is not None and tag.has_image_transfer and IMAGE_MAX_AUTO_UPLOAD_COUNT and tag.auto_image_count < min((tag.max_image_index + 1), IMAGE_MAX_AUTO_UPLOAD_COUNT):
+ self.upload_auto_image((tag.auto_image_count % len(self.image_files)), tag)
+ else:
+ self.ap_update_complete(tag.esl_id, tag.group_id)
def auto_esl_event_tag_info(self, evt: esl_lib.EventTagInfo):
""" ESL event handler in auto mode """
@@ -1510,7 +1532,13 @@ def demo_ap_control_status(self, status: int):
def demo_esl_event_connection_opened(self, evt: esl_lib.EventConnectionOpened):
""" ESL event handler in demo mode """
if self.controller_command != None and not self.demo_auto_reconfigure:
- self.notify_controller(self.controller_command,CONTROLLER_COMMAND_SUCCESS)
+ if (evt.status == elw.SL_STATUS_OK):
+ self.notify_controller(self.controller_command,CONTROLLER_COMMAND_SUCCESS)
+ else:
+ self.notify_controller(self.controller_command,CONTROLLER_COMMAND_FAIL)
+ tag = self.tag_db.find(evt.address)
+ if tag is not None:
+ self.disconnect(tag)
def demo_esl_event_tag_found(self, evt: esl_lib.EventTagFound):
""" ESL event handler in demo mode """
@@ -1528,7 +1556,8 @@ def demo_esl_event_configure_tag_response(self, evt: esl_lib.EventConfigureTagRe
def demo_esl_event_connection_closed(self, evt: esl_lib.EventConnectionClosed):
""" ESL event handler in demo mode """
- self.demo_auto_reconfigure = False
+ if self.demo_auto_reconfigure and len(self.tag_db.list_state((TagState.CONNECTED, TagState.CONNECTING))) == 0:
+ self.demo_auto_reconfigure = False
if self.controller_command == CCMD_DISCONNECT:
self.notify_controller(self.controller_command, CONTROLLER_COMMAND_SUCCESS)
elif self.controller_command != None:
@@ -1557,15 +1586,19 @@ def revert_auto_mode(self):
self.log.warning("REVERT TO AUTO MODE!")
self.set_mode_handlers()
- def check_address_list(self):
- """ Check address list """
+ def check_address_list(self, target = None): # no specific tag by default
+ """ Check address list, or try connect to particular tag """
if self.pawr_active and self.bonding_finished and len(self.tag_db.list_state(TagState.CONNECTING)) < ESL_CMD_MAX_PENDING_CONNECTION_REQUEST_COUNT:
- self.log.info("Checking for next advertising ESL")
- # Advertising IDLE state tags those are not blocked
- tag_list = [tag for tag in self.tag_db.list_state(TagState.IDLE) if not tag.blocked and tag.advertising]
+ if target is None:
+ self.log.info("Checking for next advertising ESL")
+ # Advertising IDLE state tags those are not blocked
+ tag_list = [tag for tag in self.tag_db.list_state(TagState.IDLE) if not tag.blocked and tag.advertising]
+ else:
+ self.log.info("Initiate connection to ESL at %s address.", target.ble_address)
+ tag_list = [target]
if len(tag_list) > 0:
- tag = tag_list[0]
if not self.max_conn_count_reached:
+ tag = tag_list[random.randint(0, len(tag_list) - 1)] # chosing randomly helps to cope with netwokrs that include erroneous tags
self.bonding_finished = False
self.connect(tag)
if self.auto_config_start_time is None:
@@ -2049,6 +2082,10 @@ def route_command(self, esl_id, group_id, data, force_pawr=False):
tag = active_tag
if tag is None:
+ # Check if the current PAwR has the proper amount of subevents for the group request
+ if (group_id >= self.subevent_count):
+ self.log.error("Sending to group %d is impossible because there are only %d subevents in current PAwR train!", group_id, self.subevent_count)
+ return
self.queue_pawr_command(group_id, data)
else:
self.send_cp_command(tag, data)
diff --git a/app/bluetooth/example_host/bt_host_esl_ap/ap_logger.py b/app/bluetooth/example_host/bt_host_esl_ap/ap_logger.py
index 5524e6283a..60e7234bd6 100644
--- a/app/bluetooth/example_host/bt_host_esl_ap/ap_logger.py
+++ b/app/bluetooth/example_host/bt_host_esl_ap/ap_logger.py
@@ -60,7 +60,7 @@ def log(*args, _half_indent_log :bool=False, **kwargs):
''' Print with 1 tab + 1 whitespace indentation '''
args = [arg.replace('\n', '\n\t ') if isinstance(arg, str) else arg for arg in args]
with lock:
- print('\t' if not _half_indent_log else 3*' ', *args, file=sys.stdout if stdout else sys.stderr, **kwargs)
+ print('\t' if not _half_indent_log else 3*' ', *args, file=sys.stdout if stdout else sys.stderr, flush=True, **kwargs)
class StreamHandler(logging.StreamHandler):
def __init__(self):
diff --git a/app/bluetooth/example_host/bt_host_esl_ap/esl_lib.py b/app/bluetooth/example_host/bt_host_esl_ap/esl_lib.py
index 2a177640a0..b7357a053d 100644
--- a/app/bluetooth/example_host/bt_host_esl_ap/esl_lib.py
+++ b/app/bluetooth/example_host/bt_host_esl_ap/esl_lib.py
@@ -84,6 +84,10 @@ def get_enum(prefix, index):
except KeyError:
return f'Unknown {index} ({hex(index)})'
+def get_sl_status_str(index):
+ '''Return string for an sl_status_t index'''
+ return get_enum('SL_STATUS_', index)
+
def event_factory(evt_code: elw.esl_lib_evt_type_t, evt_data: elw.esl_lib_evt_data_t):
'''Transform ctype object to specific class instance'''
evt_class_list = [
@@ -260,7 +264,7 @@ def __init__(self, evt_data: elw.esl_lib_evt_data_t):
def __repr__(self) -> str:
type_str = get_enum('ESL_LIB_DATA_TYPE_', self.type)
- status_str = get_enum('SL_STATUS_', self.status)
+ status_str = get_sl_status_str(self.status)
return f'{self.evt_code}, {self.connection_handle}, {type_str}, {status_str}'
class EventControlPointResponse():
@@ -273,7 +277,7 @@ def __init__(self, evt_data: elw.esl_lib_evt_data_t):
self.data_sent = array_to_bytes(evt_data.evt_control_point_response.data_sent)
def __repr__(self) -> str:
- status_str = get_enum('SL_STATUS_', self.status)
+ status_str = get_sl_status_str(self.status)
return f'{self.evt_code}, {self.connection_handle}, {status_str}, {self.data_sent.hex()}'
class EventControlPointNotification():
@@ -295,10 +299,12 @@ def __init__(self, evt_data: elw.esl_lib_evt_data_t):
self.connection_handle = ConnectionHandle(evt_data.evt_connection_opened.connection_handle)
self.address = Address.from_ctype(evt_data.evt_connection_opened.address)
self.gattdb_handles = elw.esl_lib_gattdb_handles_t.from_buffer_copy(evt_data.evt_connection_opened.gattdb_handles)
+ self.status = evt_data.evt_connection_opened.status
def __repr__(self) -> str:
- gattdb_str = f'[{self.gattdb_handles.services.esl}, {self.gattdb_handles.services.ots}, {self.gattdb_handles.services.dis}]'
- return f'{self.evt_code}, {self.connection_handle}, {self.address}, {gattdb_str}'
+ gattdb_str = f'[{hex(self.gattdb_handles.services.esl)}, {hex(self.gattdb_handles.services.ots)}, {hex(self.gattdb_handles.services.dis)}]'
+ status_str = get_sl_status_str(self.status)
+ return f'{self.evt_code}, {self.connection_handle}, {self.address}, {status_str}, {gattdb_str}'
class EventConnectionRetry():
'''Wrapper for esl_lib_evt_connection_retry_t'''
@@ -312,7 +318,7 @@ def __init__(self, evt_data: elw.esl_lib_evt_data_t):
self.retries_left = evt_data.evt_connection_retry.retries_left
def __repr__(self) -> str:
- reason_str = get_enum('SL_STATUS_', self.reason)
+ reason_str = get_sl_status_str(self.reason)
state_str = get_enum('ESL_LIB_CONNECTION_STATE_',self.connection_state)
return f'{self.evt_code}, {self.connection_handle}, {reason_str}, {state_str}, {self.address}, {self.retries_left}'
@@ -326,7 +332,7 @@ def __init__(self, evt_data: elw.esl_lib_evt_data_t):
self.reason = evt_data.evt_connection_closed.reason
def __repr__(self) -> str:
- reason_str = get_enum('SL_STATUS_', self.reason)
+ reason_str = get_sl_status_str(self.reason)
return f'{self.evt_code}, {self.connection_handle}, {self.address}, {reason_str}'
class EventBondingData():
@@ -362,7 +368,7 @@ def __init__(self, evt_data: elw.esl_lib_evt_data_t):
self.status = evt_data.evt_image_transfer_finished.status
def __repr__(self) -> str:
- status_str = get_enum('SL_STATUS_', self.status)
+ status_str = get_sl_status_str(self.status)
return f'{self.evt_code}, {self.connection_handle}, {self.img_index}, {status_str}'
class EventImageType():
@@ -432,7 +438,7 @@ def __init__(self, evt_data: elw.esl_lib_evt_data_t):
def __repr__(self) -> str:
lib_status_str = get_enum('ESL_LIB_STATUS_', self.lib_status)
- sl_status_str = get_enum('SL_STATUS_', self.sl_status)
+ sl_status_str = get_sl_status_str(self.sl_status)
try:
if isinstance(self.node_id, ConnectionHandle) or isinstance(self.node_id, (Address)):
# Connection handle node ID type
@@ -534,7 +540,7 @@ def _serialize_command(self, command, args=None):
except BrokenPipeError as err:
raise CommandFailedError('Lib process terminated unexpectedly') from err
if result[0]:
- raise CommandFailedError(f'{command[1:]} failed with result: {get_enum("SL_STATUS_", result[0])}', result[0])
+ raise CommandFailedError(f'{command[1:]} failed with result: {get_sl_status_str(result[0])}', result[0])
return result
def stop(self, timeout=3):
diff --git a/app/bluetooth/example_host/bt_host_esl_ap/esl_tag.py b/app/bluetooth/example_host/bt_host_esl_ap/esl_tag.py
index c2f912af3f..4ddd397804 100644
--- a/app/bluetooth/example_host/bt_host_esl_ap/esl_tag.py
+++ b/app/bluetooth/example_host/bt_host_esl_ap/esl_tag.py
@@ -545,6 +545,10 @@ def get_info(self):
info += f" Product_ID: {self.pnp_product_id:#x} Product_version: {self.pnp_product_version:#x}"
else:
info += "Not available"
+
+ if self.serial_number is not None:
+ info += f"\n{'Serial Number:':{justify_column}}"
+ info += str(self.serial_number)
info += f"\n{'Last status:':{justify_column}}"
bs_string = ", ".join([value for key, value in BASIC_STATE_STRINGS.items() if self.basic_state_flags & key])
@@ -564,20 +568,23 @@ def handle_event(self, evt):
if evt.address == self.ble_address:
if self._connection_timer.is_alive():
self._connection_timer.cancel()
+ if self._advertising_timer.is_alive():
+ self._advertising_timer.cancel()
+ self._advertising = False
self._past_timer.cancel()
self._past_initiated = False
self.connection_handle = evt.connection_handle
self.gattdb_handles = evt.gattdb_handles
self.pending_unassociate = False
+ if evt.status != elw.SL_STATUS_OK:
+ self.log.error("Tag at address %s connected with failure: %s", self.ble_address, esl_lib.get_sl_status_str(evt.status))
+ return
if not self.provisioned:
self.log.info("Reading tag information from address %s", self.ble_address)
self.get_tag_info()
else:
self.log.info("Tag info already available, skipping discovery for %s", self.ble_address)
- if self._advertising_timer.is_alive():
- self._advertising_timer.cancel()
- self._advertising = False
if self.esl_address is None:
self.log.info("Registering ESL Tag at BLE address: %s", self.ble_address)
if self.provisioned:
@@ -595,14 +602,14 @@ def handle_event(self, evt):
self._connection_timer.start()
self._advertising = True # necessary step for any connect requests to undetected advertisers!
self.log.warning(
- "Tag at BLE address: %s reconnecting, reason: %s, %s retries left: %d",
+ "Reconnect to %s addr., reason: %s, %s, %d more left",
self.ble_address,
esl_lib.get_enum("ESL_LIB_CONNECTION_STATE_", evt.connection_state),
- esl_lib.get_enum("SL_STATUS_", evt.reason),
+ esl_lib.get_sl_status_str(evt.reason),
evt.retries_left,
)
elif isinstance(evt, esl_lib.EventConnectionClosed):
- if evt.connection_handle == self.connection_handle:
+ if evt.connection_handle == self.connection_handle or evt.address == self.ble_address:
self._past_timer.cancel()
self.connection_handle = None
self._past_initiated = False
@@ -615,7 +622,7 @@ def handle_event(self, evt):
self.update_timestamps()
elif evt.reason == elw.SL_STATUS_BT_CTRL_CONNECTION_TERMINATED_BY_LOCAL_HOST:
self.__update_flags(BASIC_STATE_FLAG_SYNCHRONIZED, False)
- self.log.info("Connection to %s closed with reason %s",self.ble_address, esl_lib.get_enum("SL_STATUS_",evt.reason))
+ self.log.info("Connection to %s closed with reason %s",self.ble_address, esl_lib.get_sl_status_str(evt.reason))
elif isinstance(evt, esl_lib.EventTagInfo):
if evt.connection_handle == self.connection_handle:
for ix, (tlv, value) in enumerate(evt.tlv_data.items()):
diff --git a/app/bluetooth/example_host/bt_host_esl_ap/qrcode_generator.py b/app/bluetooth/example_host/bt_host_esl_ap/qrcode_generator.py
index 2d5d7d620e..3521d25513 100755
--- a/app/bluetooth/example_host/bt_host_esl_ap/qrcode_generator.py
+++ b/app/bluetooth/example_host/bt_host_esl_ap/qrcode_generator.py
@@ -146,7 +146,7 @@ def generate_qrcode(data, height, width):
# Create bytes from image
img_xbm = XbmConverter(result)
xbm = img_xbm.convert()
- return xbm
+ return xbm, result
def merge_qr_hex(qrcode, ihex, sa, hex_file_out="merged.hex"):
diff --git a/app/bluetooth/example_host/bt_host_esl_ap/readme/readme.md b/app/bluetooth/example_host/bt_host_esl_ap/readme/readme.md
index 23db926a5a..9287675c0b 100644
--- a/app/bluetooth/example_host/bt_host_esl_ap/readme/readme.md
+++ b/app/bluetooth/example_host/bt_host_esl_ap/readme/readme.md
@@ -323,10 +323,14 @@ Examples:
- `image_update 0 ./image/banana.png --label="Line 1\nLine 2"`
Send an image to index 0 on the single connected ESL with two lines of label. Note that address is a positional argument yet it can be omitted if there's only one connected device present at the moment.
-- `image_update 1 "/user/home/path with space/img.jpg"` all
+- `image_update 1 "/user/home/path with space/img.jpg" all`
Use the 'all' keyword as special address to send the same image to slot 1 on all connected ESLs.
+- `image_update 0 *qrcode all`
+
+ To send unique QR codes to all connected tags for use with ESL Demo, enter "*qrcode" instead of a valid image file path. Typically beneficial for ESLs equipped with permanent displays, such as ePaper.
+
#### led
Turn on / off or flash an LED utilizing the LED control command.
diff --git a/app/btmesh/btmesh.properties b/app/btmesh/btmesh.properties
index 4896576b3e..11c461e26b 100644
--- a/app/btmesh/btmesh.properties
+++ b/app/btmesh/btmesh.properties
@@ -2,8 +2,8 @@
id=com.silabs.stack.btMesh
label=Bluetooth Mesh SDK
description=Bluetooth Mesh Software Development Kit
-version=6.0.1.0
-prop.subLabel=Bluetooth\\ Mesh\\ 6.0.1
+version=6.1.0.0
+prop.subLabel=Bluetooth\\ Mesh\\ 6.1.0
# Default compatibility of the BT Mesh SDK (This is needed for the documentation only)
prop.boardCompatibility=.*
diff --git a/app/btmesh/btmesh_internal_demos.xml b/app/btmesh/btmesh_internal_demos.xml
index e38e3dd3aa..b13d9fa2ae 100644
--- a/app/btmesh/btmesh_internal_demos.xml
+++ b/app/btmesh/btmesh_internal_demos.xml
@@ -6,11 +6,11 @@
-
+
-
+
Friend example for IOP test. This node acts as a friend for the low power node and caches messages sent to it when the low power node is sleeping.
@@ -18,11 +18,11 @@
-
+
-
+
Friend example for IOP test. This node acts as a friend for the low power node and caches messages sent to it when the low power node is sleeping.
@@ -30,11 +30,23 @@
-
+
-
+
+
+
+ Friend example for IOP test. This node acts as a friend for the low power node and caches messages sent to it when the low power node is sleeping.
+
+
+
+
+
+
+
+
+
Friend example for IOP test. This node acts as a friend for the low power node and caches messages sent to it when the low power node is sleeping.
@@ -42,11 +54,11 @@
-
+
-
+
Friend example for IOP test. This node acts as a friend for the low power node and caches messages sent to it when the low power node is sleeping.
@@ -54,11 +66,11 @@
-
+
-
+
Low power node example for IOP test. This node acts as a typical low power device and sleeps most of the time. It needs a friend node to cache messages and forward them when polled.
@@ -66,11 +78,11 @@
-
+
-
+
Low power node example for IOP test. This node acts as a typical low power device and sleeps most of the time. It needs a friend node to cache messages and forward them when polled.
@@ -78,11 +90,11 @@
-
+
-
+
Low power node example for IOP test. This node acts as a typical low power device and sleeps most of the time. It needs a friend node to cache messages and forward them when polled.
@@ -90,11 +102,11 @@
-
+
-
+
Low power node example for IOP test. This node acts as a typical low power device and sleeps most of the time. It needs a friend node to cache messages and forward them when polled.
@@ -102,11 +114,23 @@
-
+
+
+
+
+
+
+
+ Low power node example for IOP test. This node acts as a typical low power device and sleeps most of the time. It needs a friend node to cache messages and forward them when polled.
+
+
+
+
+
-
+
Low power node example for IOP test. This node acts as a typical low power device and sleeps most of the time. It needs a friend node to cache messages and forward them when polled.
@@ -114,11 +138,11 @@
-
+
-
+
Low power node example for IOP test. This node acts as a typical low power device and sleeps most of the time. It needs a friend node to cache messages and forward them when polled.
@@ -126,11 +150,11 @@
-
+
-
+
Proxy example for IOP test. This node forwards/relays messages between GATT and advertising bearers in the network.
@@ -138,11 +162,11 @@
-
+
-
+
Proxy example for IOP test. This node forwards/relays messages between GATT and advertising bearers in the network.
@@ -150,11 +174,11 @@
-
+
-
+
Proxy example for IOP test. This node forwards/relays messages between GATT and advertising bearers in the network.
@@ -162,11 +186,23 @@
-
+
-
+
+
+
+ Proxy example for IOP test. This node forwards/relays messages between GATT and advertising bearers in the network.
+
+
+
+
+
+
+
+
+
Proxy example for IOP test. This node forwards/relays messages between GATT and advertising bearers in the network.
@@ -174,11 +210,11 @@
-
+
-
+
Proxy example for IOP test. This node forwards/relays messages between GATT and advertising bearers in the network.
@@ -186,11 +222,11 @@
-
+
-
+
Relay example for IOP test. This node acts as a relay, i.e. if a node is out of range for another node, it relays messages between the two, provided the relay node is in range for both.
@@ -198,11 +234,11 @@
-
+
-
+
Relay example for IOP test. This node acts as a relay, i.e. if a node is out of range for another node, it relays messages between the two, provided the relay node is in range for both.
@@ -210,11 +246,11 @@
-
+
-
+
Relay example for IOP test. This node acts as a relay, i.e. if a node is out of range for another node, it relays messages between the two, provided the relay node is in range for both.
@@ -222,11 +258,23 @@
-
+
+
+
+
+
+
+
+ Relay example for IOP test. This node acts as a relay, i.e. if a node is out of range for another node, it relays messages between the two, provided the relay node is in range for both.
+
+
+
+
+
-
+
Relay example for IOP test. This node acts as a relay, i.e. if a node is out of range for another node, it relays messages between the two, provided the relay node is in range for both.
@@ -234,11 +282,11 @@
-
+
-
+
Relay example for IOP test. This node acts as a relay, i.e. if a node is out of range for another node, it relays messages between the two, provided the relay node is in range for both.
@@ -246,11 +294,11 @@
-
+
-
+
An out-of-the-box software demo which can provision and configure nearby switch devices.
@@ -259,7 +307,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -271,7 +319,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -283,7 +331,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -295,7 +343,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -307,7 +355,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -319,7 +367,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -331,7 +379,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -343,7 +391,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -355,7 +403,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -367,7 +415,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -379,7 +427,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -391,7 +439,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -403,7 +451,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -415,7 +463,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -427,7 +475,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -439,7 +487,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -451,7 +499,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -463,7 +511,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -475,7 +523,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -487,7 +535,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -499,7 +547,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -511,7 +559,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -523,7 +571,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -535,7 +583,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -547,7 +595,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -559,7 +607,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -571,7 +619,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -583,7 +631,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -595,7 +643,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -607,7 +655,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -619,7 +667,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -631,7 +679,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -643,7 +691,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -655,7 +703,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -667,7 +715,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -679,7 +727,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -691,7 +739,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -703,7 +751,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -715,7 +763,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -727,7 +775,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -739,7 +787,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -751,7 +799,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -763,7 +811,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -775,7 +823,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -787,7 +835,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -799,7 +847,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -811,7 +859,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -823,7 +871,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -835,7 +883,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -847,7 +895,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -859,7 +907,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -871,7 +919,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -883,7 +931,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -895,7 +943,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -907,7 +955,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -919,7 +967,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -931,7 +979,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -943,7 +991,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -955,7 +1003,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -967,7 +1015,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -979,7 +1027,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
@@ -991,7 +1039,7 @@ The LEDs of the mainboard can be switched on and off and their lighting intensit
-
+
diff --git a/app/btmesh/btmesh_production_demos.xml b/app/btmesh/btmesh_production_demos.xml
index 8faeec1dcc..21452c6bd8 100644
--- a/app/btmesh/btmesh_production_demos.xml
+++ b/app/btmesh/btmesh_production_demos.xml
@@ -6,11 +6,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -18,11 +18,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -30,11 +30,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -42,11 +42,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -54,11 +54,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -66,11 +66,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -78,11 +78,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -90,11 +90,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -102,11 +102,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -114,11 +114,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -126,11 +126,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -138,11 +138,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -150,11 +150,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -162,11 +162,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -174,11 +174,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -186,11 +186,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -198,11 +198,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -210,11 +210,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI. Contains models from BT mesh specification 1.1.
@@ -222,11 +222,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI.
@@ -234,11 +234,11 @@
-
+
-
+
Demonstrates the bare minimum needed for an NCP Target C application. This example is recommended for EFR32xG22, which has limited RAM and flash, and therefore some of the stack classes are disabled by default.
@@ -246,11 +246,11 @@
-
+
-
+
Demonstrates the bare minimum needed for an NCP Target C application. This example is recommended for EFR32xG22, which has limited RAM and flash, and therefore some of the stack classes are disabled by default.
@@ -258,11 +258,11 @@
-
+
-
+
Demonstrates the bare minimum needed for an NCP Target C application. This example is recommended for EFR32xG22, which has limited RAM and flash, and therefore some of the stack classes are disabled by default.
@@ -270,11 +270,11 @@
-
+
-
+
Demonstrates the bare minimum needed for an NCP Target C application. This example is recommended for EFR32xG22, which has limited RAM and flash, and therefore some of the stack classes are disabled by default.
@@ -282,11 +282,11 @@
-
+
-
+
Demonstrates the bare minimum needed for an NCP Target C application. This example is recommended for EFR32xG22, which has limited RAM and flash, and therefore some of the stack classes are disabled by default.
@@ -294,11 +294,11 @@
-
+
-
+
Demonstrates the bare minimum needed for an NCP Target C application. This example is recommended for EFR32xG22, which has limited RAM and flash, and therefore some of the stack classes are disabled by default.
@@ -306,11 +306,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI.
@@ -318,11 +318,11 @@
-
+
-
+
An NCP Target C application that makes it possible for the NCP Host Controller to access the Bluetooth Mesh stack via UART. It provides access to the host layer via BGAPI and not to the link layer via HCI.
@@ -330,11 +330,11 @@
-
+
-
+
Demonstrates the bare minimum needed for an NCP Target C application. This example is recommended for EFR32xG22, which has limited RAM and flash, and therefore some of the stack classes are disabled by default.
@@ -342,11 +342,11 @@
-
+
-
+
Demonstrates the bare minimum needed for an NCP Target C application. This example is recommended for EFR32xG22, which has limited RAM and flash, and therefore some of the stack classes are disabled by default.
@@ -354,11 +354,11 @@
-
+
-
+
Demonstrates the bare minimum needed for an NCP Target C application. This example is recommended for EFR32xG22, which has limited RAM and flash, and therefore some of the stack classes are disabled by default.
@@ -366,11 +366,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -378,11 +378,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -390,11 +390,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -402,11 +402,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -414,11 +414,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -426,11 +426,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -438,11 +438,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -450,11 +450,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -462,11 +462,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -474,11 +474,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -486,11 +486,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -498,11 +498,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -510,11 +510,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -522,11 +522,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -534,11 +534,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -546,11 +546,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -558,11 +558,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -570,11 +570,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -582,11 +582,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -594,11 +594,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -606,11 +606,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -618,11 +618,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -630,11 +630,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an ambient light sensor in a Networked Lighting Control (NLC) system. The device simulates ambient light measurements and sends these to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -642,11 +642,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Ambient Light Sensor in a Networked Lighting Control (NLC) system. The device measures ambient light and sends these measurements to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -654,11 +654,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Ambient Light Sensor in a Networked Lighting Control (NLC) system. The device measures ambient light and sends these measurements to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -666,11 +666,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Ambient Light Sensor in a Networked Lighting Control (NLC) system. The device measures ambient light and sends these measurements to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -678,11 +678,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Ambient Light Sensor in a Networked Lighting Control (NLC) system. The device measures ambient light and sends these measurements to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -690,11 +690,11 @@
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Ambient Light Sensor in a Networked Lighting Control (NLC) system. The device measures ambient light and sends these measurements to the network. Properly configured NLC Basic Lightness Controllers then can act on the received data.
@@ -702,11 +702,11 @@
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness Controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -715,11 +715,11 @@ This project uses the RGB LED on the xG24 Dev Kit.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -728,7 +728,7 @@ This project uses the LEDs on the mainboard.
-
+
@@ -740,11 +740,11 @@ This project uses the LEDs on the mainboard.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -753,7 +753,7 @@ This project uses the LEDs on the mainboard.
-
+
@@ -765,7 +765,7 @@ This project uses the LEDs on the mainboard.
-
+
@@ -777,7 +777,7 @@ This project uses the LEDs on the mainboard.
-
+
@@ -789,7 +789,7 @@ This project uses the LEDs on the mainboard.
-
+
@@ -801,11 +801,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -814,11 +814,11 @@ This project uses the LEDs on the mainboard.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness Controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -827,11 +827,11 @@ This project uses the RGB LEDs on the Thunderboard Sense 2 board.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -840,11 +840,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -853,11 +853,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -866,11 +866,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -879,11 +879,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -892,11 +892,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -905,11 +905,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -918,11 +918,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -931,11 +931,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -944,11 +944,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -957,11 +957,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -970,11 +970,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -983,11 +983,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -996,11 +996,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -1009,11 +1009,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -1022,11 +1022,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the device acts as a Basic Lightness controller in a Networked Lighting Control (NLC) system. The device listens to messages from other NLC devices, namely Occupancy Sensor, Ambient Light Sensor, Dimming Control and Basic Scene Selector nodes.
@@ -1035,11 +1035,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1047,11 +1047,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1059,11 +1059,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1071,11 +1071,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1083,11 +1083,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1095,11 +1095,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1107,11 +1107,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1119,11 +1119,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1131,11 +1131,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1143,11 +1143,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1155,11 +1155,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1167,11 +1167,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1179,11 +1179,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1191,11 +1191,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1203,11 +1203,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1215,11 +1215,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1227,11 +1227,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1239,11 +1239,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1251,11 +1251,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1263,11 +1263,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1275,11 +1275,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1287,11 +1287,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1299,11 +1299,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1311,11 +1311,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1323,11 +1323,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1335,11 +1335,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1347,11 +1347,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1359,11 +1359,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1371,11 +1371,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1383,11 +1383,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1395,11 +1395,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1407,11 +1407,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1419,11 +1419,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1431,11 +1431,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1443,11 +1443,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1455,11 +1455,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1467,11 +1467,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1479,11 +1479,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1491,11 +1491,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1503,11 +1503,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1515,11 +1515,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1527,11 +1527,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1539,11 +1539,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1551,11 +1551,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1563,11 +1563,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1575,11 +1575,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1587,11 +1587,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1599,11 +1599,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1611,11 +1611,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1623,11 +1623,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1635,11 +1635,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1647,11 +1647,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1659,11 +1659,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1671,11 +1671,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1683,11 +1683,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1695,11 +1695,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1707,11 +1707,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1719,11 +1719,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1731,11 +1731,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1743,11 +1743,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1755,11 +1755,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1767,11 +1767,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Basic Scene Selector in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by scene recall requests.
@@ -1779,11 +1779,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1791,11 +1791,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1803,11 +1803,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1815,11 +1815,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1827,11 +1827,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1839,11 +1839,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1851,11 +1851,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1863,11 +1863,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1875,11 +1875,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1887,11 +1887,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1899,11 +1899,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1911,11 +1911,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1923,11 +1923,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1935,11 +1935,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1947,11 +1947,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1959,11 +1959,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1971,11 +1971,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1983,11 +1983,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -1995,11 +1995,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2007,11 +2007,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2019,11 +2019,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2031,11 +2031,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2043,11 +2043,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2055,11 +2055,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2067,11 +2067,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2079,11 +2079,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2091,11 +2091,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2103,11 +2103,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2115,11 +2115,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2127,11 +2127,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2139,11 +2139,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2151,11 +2151,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2163,11 +2163,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2175,11 +2175,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2187,11 +2187,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2199,11 +2199,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2211,11 +2211,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2223,11 +2223,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2235,11 +2235,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2247,11 +2247,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2259,11 +2259,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2271,11 +2271,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2283,11 +2283,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2295,11 +2295,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2307,11 +2307,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2319,11 +2319,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2331,11 +2331,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2343,11 +2343,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2355,11 +2355,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2367,11 +2367,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2379,11 +2379,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2391,11 +2391,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2403,11 +2403,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2415,11 +2415,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2427,11 +2427,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2439,11 +2439,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2451,11 +2451,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2463,11 +2463,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2475,11 +2475,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2487,11 +2487,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2499,11 +2499,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a Dimming Control in a Networked Lighting Control (NLC) system. Push Button presses control Basic Lightness Controllers in the network by Generic Level Delta or Generic On/Off messages.
@@ -2511,11 +2511,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2523,11 +2523,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2535,11 +2535,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2547,11 +2547,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2559,11 +2559,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2571,11 +2571,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2583,11 +2583,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2595,11 +2595,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2607,11 +2607,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2619,11 +2619,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2631,11 +2631,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2643,11 +2643,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2655,11 +2655,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2667,11 +2667,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2679,11 +2679,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2691,11 +2691,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2703,11 +2703,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2715,11 +2715,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2727,11 +2727,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2739,11 +2739,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2751,11 +2751,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2763,11 +2763,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2775,11 +2775,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2787,11 +2787,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2799,11 +2799,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2811,11 +2811,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2823,11 +2823,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2835,11 +2835,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2847,11 +2847,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2859,11 +2859,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2871,11 +2871,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as an Occupancy Sensor in a Networked Lighting Control (NLC) system. Push Button presses imitate people count changes which can control a properly configured NLC Basic Lightness Controller.
@@ -2883,11 +2883,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Certificate generating firmware example. Software is generating the device EC key pair, the signing request for the device certificate, and other related data. The generated data can be read out by the Central Authority.
@@ -2895,11 +2895,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Certificate generating firmware example. Software is generating the device EC key pair, the signing request for the device certificate, and other related data. The generated data can be read out by the Central Authority.
@@ -2907,11 +2907,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Certificate generating firmware example. Software is generating the device EC key pair, the signing request for the device certificate, and other related data. The generated data can be read out by the Central Authority.
@@ -2919,11 +2919,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Certificate generating firmware example. Software is generating the device EC key pair, the signing request for the device certificate, and other related data. The generated data can be read out by the Central Authority.
@@ -2931,11 +2931,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Certificate generating firmware example. Software is generating the device EC key pair, the signing request for the device certificate, and other related data. The generated data can be read out by the Central Authority.
@@ -2943,11 +2943,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Certificate generating firmware example. Software is generating the device EC key pair, the signing request for the device certificate, and other related data. The generated data can be read out by the Central Authority.
@@ -2955,11 +2955,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Certificate generating firmware example. Software is generating the device EC key pair, the signing request for the device certificate, and other related data. The generated data can be read out by the Central Authority.
@@ -2967,11 +2967,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Certificate generating firmware example. Software is generating the device EC key pair, the signing request for the device certificate, and other related data. The generated data can be read out by the Central Authority.
@@ -2979,11 +2979,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Certificate generating firmware example. Software is generating the device EC key pair, the signing request for the device certificate, and other related data. The generated data can be read out by the Central Authority.
@@ -2991,11 +2991,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Certificate generating firmware example. Software is generating the device EC key pair, the signing request for the device certificate, and other related data. The generated data can be read out by the Central Authority.
@@ -3003,11 +3003,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Certificate generating firmware example. Software is generating the device EC key pair, the signing request for the device certificate, and other related data. The generated data can be read out by the Central Authority.
@@ -3015,11 +3015,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Certificate generating firmware example. Software is generating the device EC key pair, the signing request for the device certificate, and other related data. The generated data can be read out by the Central Authority.
@@ -3027,11 +3027,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Certificate generating firmware example. Software is generating the device EC key pair, the signing request for the device certificate, and other related data. The generated data can be read out by the Central Authority.
@@ -3039,11 +3039,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3051,11 +3051,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3063,11 +3063,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3075,11 +3075,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3087,11 +3087,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3099,11 +3099,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3111,11 +3111,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3123,11 +3123,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3135,11 +3135,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3147,11 +3147,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3159,11 +3159,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3171,11 +3171,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3183,11 +3183,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3195,11 +3195,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3207,11 +3207,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3219,11 +3219,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3231,11 +3231,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3243,11 +3243,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
Demonstrates the Firmware Distributor role based on the BT Mesh Model specification. Distributor is responsible for delivering new firmware images to the Target nodes and monitoring the progress of the firmware update.
@@ -3255,11 +3255,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3267,11 +3267,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3279,11 +3279,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3291,11 +3291,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3303,11 +3303,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3315,11 +3315,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the Thunderboard Sense 2 board can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3327,11 +3327,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3339,11 +3339,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3351,11 +3351,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3363,11 +3363,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3375,11 +3375,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3387,11 +3387,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3399,11 +3399,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3411,11 +3411,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3423,11 +3423,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3435,11 +3435,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3447,11 +3447,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3459,11 +3459,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3471,11 +3471,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3483,11 +3483,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3495,11 +3495,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3507,11 +3507,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the WSTK can be switched on and off, and their lighting intensity, color temperature, and delta UV can be set.
@@ -3519,11 +3519,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3531,11 +3531,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3543,11 +3543,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3555,11 +3555,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3567,11 +3567,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3579,11 +3579,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the Thunderboard Sense 2 can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3591,11 +3591,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3603,11 +3603,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3615,11 +3615,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3627,11 +3627,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3639,11 +3639,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3651,11 +3651,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3663,11 +3663,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3675,11 +3675,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3687,11 +3687,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3699,11 +3699,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3711,11 +3711,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3723,11 +3723,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3735,11 +3735,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3747,11 +3747,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3759,11 +3759,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3771,11 +3771,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box software demo where the LEDs of the mainboard can be switched on and off, and their lighting intensity, hue, and saturation can be set. The example also tries to establish friendship as a Friend node.
@@ -3783,11 +3783,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3795,11 +3795,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3807,11 +3807,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3819,11 +3819,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3831,11 +3831,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3843,11 +3843,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3855,11 +3855,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3867,11 +3867,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3879,11 +3879,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3891,11 +3891,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3903,11 +3903,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3915,11 +3915,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3927,11 +3927,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3939,11 +3939,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3951,11 +3951,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3963,11 +3963,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3975,11 +3975,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3987,11 +3987,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -3999,11 +3999,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -4011,11 +4011,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -4023,11 +4023,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -4035,11 +4035,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -4047,11 +4047,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -4059,11 +4059,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -4071,11 +4071,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -4083,11 +4083,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -4095,11 +4095,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -4107,11 +4107,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -4119,11 +4119,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -4131,11 +4131,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -4143,11 +4143,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Client Model. It collects and displays sensor measurement data from remote device(s) (e.g., btmesh_soc_sensor_server).
@@ -4155,11 +4155,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4167,11 +4167,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4179,11 +4179,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4191,11 +4191,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4203,11 +4203,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4215,11 +4215,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4227,11 +4227,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4239,11 +4239,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4251,11 +4251,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4263,11 +4263,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4275,11 +4275,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4287,11 +4287,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4299,11 +4299,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4311,11 +4311,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4323,11 +4323,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4335,11 +4335,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4347,11 +4347,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4359,11 +4359,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4371,11 +4371,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4383,11 +4383,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4395,11 +4395,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4407,11 +4407,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4419,11 +4419,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4431,11 +4431,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4443,11 +4443,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4455,11 +4455,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4467,11 +4467,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4479,11 +4479,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4491,11 +4491,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4503,11 +4503,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. It measures temperature and sends the measurement data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4515,11 +4515,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
This example demonstrates the Bluetooth Mesh Sensor Server Model and Sensor Setup Server Model. If available, it measures CPU temperature and uses that data as temperature reading, otherwise it sends mocked temperature data to a remote device (e.g., btmesh_soc_sensor_client).
@@ -4527,11 +4527,11 @@ This project uses the LEDs and display on the WSTK.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4540,11 +4540,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4553,11 +4553,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4566,11 +4566,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4579,11 +4579,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4592,11 +4592,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4605,11 +4605,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4618,11 +4618,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4631,11 +4631,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4644,11 +4644,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4657,11 +4657,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4670,11 +4670,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4683,11 +4683,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4696,11 +4696,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4709,11 +4709,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4722,11 +4722,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4735,11 +4735,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4748,11 +4748,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4761,11 +4761,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4774,11 +4774,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4787,11 +4787,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4800,11 +4800,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4813,11 +4813,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4826,11 +4826,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4839,11 +4839,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4852,11 +4852,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4865,11 +4865,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4878,11 +4878,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4891,11 +4891,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4904,11 +4904,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4917,11 +4917,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. It is optimized for low current consumption with disabled CLI, logging, and LCD. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4930,11 +4930,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4943,11 +4943,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4956,11 +4956,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4969,11 +4969,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4982,11 +4982,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -4995,11 +4995,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5008,11 +5008,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5021,11 +5021,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5034,11 +5034,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5047,11 +5047,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5060,11 +5060,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5073,11 +5073,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5086,11 +5086,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5099,11 +5099,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5112,11 +5112,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5125,11 +5125,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5138,11 +5138,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5151,11 +5151,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5164,11 +5164,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5177,11 +5177,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5190,11 +5190,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5203,11 +5203,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5216,11 +5216,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5229,11 +5229,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5242,11 +5242,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5255,11 +5255,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5268,11 +5268,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5281,11 +5281,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5294,11 +5294,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5307,11 +5307,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5320,11 +5320,11 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
An out-of-the-box Software Demo where the device acts as a switch using the Light CTL Client Model. Push Button presses or CLI commands can control the lightness and color temperature of the LEDs on a remote device.
@@ -5333,10 +5333,10 @@ Note - this example is not compatible with the Dimming Control NLC Profile.
-
+
-
+
diff --git a/app/btmesh/common/btmesh_ctl_server/config/sl_btmesh_ctl_server_config.h b/app/btmesh/common/btmesh_ctl_server/config/sl_btmesh_ctl_server_config.h
index 6b766004a4..5679c90ddc 100644
--- a/app/btmesh/common/btmesh_ctl_server/config/sl_btmesh_ctl_server_config.h
+++ b/app/btmesh/common/btmesh_ctl_server/config/sl_btmesh_ctl_server_config.h
@@ -45,9 +45,9 @@
#define SL_BTMESH_CTL_SERVER_PS_KEY_CFG_VAL (0x4005)
// Periodicity [ms] for updating the PWM duty cycle during a transition.
-// Default: 1
+// Default: 10
// Periodicity [ms] for updating the PWM duty cycle during a transition.
-#define SL_BTMESH_CTL_SERVER_PWM_UPDATE_PERIOD_CFG_VAL (1)
+#define SL_BTMESH_CTL_SERVER_PWM_UPDATE_PERIOD_CFG_VAL (10)
// Periodicity [ms] for updating the UI with temperature & delta UV during a transition.
// Default: 100
diff --git a/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_server.c b/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_server.c
index adb142a0ad..9d5395fbb2 100644
--- a/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_server.c
+++ b/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_server.c
@@ -79,6 +79,8 @@
#define HIGH_PRIORITY 0 ///< High Priority
/// Values greater than max 37200000 are treated as unknown remaining time
#define UNKNOWN_REMAINING_TIME 40000000
+/// Difference between Generic Level and temperature value to convert the ranges
+#define GENERIC_TO_TEMP_LEVEL_SHIFT 32768
/// Lightbulb state
static PACKSTRUCT(struct lightbulb_state {
@@ -1496,6 +1498,9 @@ static void sec_level_move_schedule_next_request(int32_t remaining_delta)
******************************************************************************/
static void sec_level_move_request(void)
{
+ // sync current sec level and actual value
+ lightbulb_state.sec_level_current = lightbulb_state.temperature_current - GENERIC_TO_TEMP_LEVEL_SHIFT;
+
log_info("Secondary level move: level %d -> %d, delta %d in %lu ms" NL,
lightbulb_state.sec_level_current,
lightbulb_state.sec_level_target,
@@ -1508,18 +1513,13 @@ static void sec_level_move_request(void)
if (abs(remaining_delta) < abs(move_sec_level_delta)) {
// end of move level as it reached target state
lightbulb_state.sec_level_current = lightbulb_state.sec_level_target;
- lightbulb_state.temperature_current = lightbulb_state.temperature_target;
} else {
lightbulb_state.sec_level_current += move_sec_level_delta;
- uint16_t temperature = level_to_temperature(lightbulb_state.sec_level_current);
- lightbulb_state.temperature_current = temperature;
}
lightbulb_state_changed();
sec_level_update_and_publish(BTMESH_CTL_SERVER_TEMPERATURE,
UNKNOWN_REMAINING_TIME);
- remaining_delta = (int32_t)lightbulb_state.sec_level_target
- - lightbulb_state.sec_level_current;
if (remaining_delta != 0) {
sec_level_move_schedule_next_request(remaining_delta);
}
diff --git a/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_signal_transition_handler.c b/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_signal_transition_handler.c
index 3e9cfe3ff3..9e77588013 100644
--- a/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_signal_transition_handler.c
+++ b/app/btmesh/common/btmesh_ctl_server/sl_btmesh_ctl_signal_transition_handler.c
@@ -37,6 +37,7 @@
#include "app_assert.h"
#include "app_timer.h"
+#include "sl_sleeptimer.h"
#ifdef SL_COMPONENT_CATALOG_PRESENT
#include "sl_component_catalog.h"
@@ -74,12 +75,14 @@ static int16_t start_deltauv;
/// target level of delta UV transition
static int16_t target_deltauv;
-/// temperature transition time in timer ticks
-static uint32_t temp_transtime_ticks;
+/// temperature transition time in ms
+static uint32_t temp_transtime_ms;
/// time elapsed from temperature transition start
static uint32_t temp_transtime_elapsed;
/// non-zero if temperature transition is active
static uint8_t temp_transitioning;
+/// timestamp of the last sleeptimer tick
+static uint64_t last_tick;
static app_timer_t transition_timer;
@@ -109,6 +112,13 @@ static void transition_timer_cb(app_timer_t *timer, void *data)
{
(void)data;
(void)timer;
+
+ // Use sleeptimer to account for scheduling errors
+ uint64_t current_tick = sl_sleeptimer_get_tick_count64();
+ uint64_t period_ms = 0;
+ sl_sleeptimer_tick64_to_ms(current_tick - last_tick, &period_ms);
+ last_tick = current_tick;
+
// Initialize the variable to UI update period in order to trigger a UI update
// at the beginning of the transition.
static uint16_t time_elapsed_since_ui_update = SL_BTMESH_CTL_SERVER_UI_UPDATE_PERIOD_CFG_VAL;
@@ -118,9 +128,9 @@ static void transition_timer_cb(app_timer_t *timer, void *data)
app_assert_status_f(sc, "Failed to stop Periodic Level Transition Timer\n");
return;
} else {
- temp_transtime_elapsed++;
+ temp_transtime_elapsed += period_ms;
- if (temp_transtime_elapsed >= temp_transtime_ticks) {
+ if (temp_transtime_elapsed >= temp_transtime_ms) {
// transition complete
temp_transitioning = 0;
current_temperature = target_temperature;
@@ -139,24 +149,24 @@ static void transition_timer_cb(app_timer_t *timer, void *data)
current_temperature = start_temperature
+ (target_temperature - start_temperature)
* (uint64_t)temp_transtime_elapsed
- / temp_transtime_ticks;
+ / temp_transtime_ms;
} else {
current_temperature = start_temperature
- (start_temperature - target_temperature)
* (uint64_t)temp_transtime_elapsed
- / temp_transtime_ticks;
+ / temp_transtime_ms;
}
if (target_deltauv >= start_deltauv) {
current_deltauv = start_deltauv
+ (target_deltauv - start_deltauv)
* (uint64_t)temp_transtime_elapsed
- / temp_transtime_ticks;
+ / temp_transtime_ms;
} else {
current_deltauv = start_deltauv
- (start_deltauv - target_deltauv)
* (uint64_t)temp_transtime_elapsed
- / temp_transtime_ticks;
+ / temp_transtime_ms;
}
// When transition is ongoing generate an event to application once every
@@ -191,6 +201,9 @@ void sl_btmesh_ctl_set_temperature_deltauv_level(uint16_t temperature,
temperature = SL_BTMESH_CTL_SERVER_MAXIMUM_TEMPERATURE_CFG_VAL;
}
+ // get last tick before running the first transition timer
+ last_tick = sl_sleeptimer_get_tick_count64();
+
if (transition_ms == 0) {
current_temperature = temperature;
current_deltauv = deltauv;
@@ -207,7 +220,7 @@ void sl_btmesh_ctl_set_temperature_deltauv_level(uint16_t temperature,
return;
}
- temp_transtime_ticks = transition_ms;
+ temp_transtime_ms = transition_ms;
start_temperature = current_temperature;
target_temperature = temperature;
@@ -227,6 +240,9 @@ void sl_btmesh_ctl_set_temperature_deltauv_level(uint16_t temperature,
true);
app_assert_status_f(sc, "Failed to start periodic Transition Timer\n");
+ // run first transition since the timer will not trigger now
+ transition_timer_cb(NULL, NULL);
+
return;
}
diff --git a/app/btmesh/common/btmesh_dcd_configuration/dcd_config.btmeshconf b/app/btmesh/common/btmesh_dcd_configuration/dcd_config.btmeshconf
index 4753009e99..15e9497cc1 100644
--- a/app/btmesh/common/btmesh_dcd_configuration/dcd_config.btmeshconf
+++ b/app/btmesh/common/btmesh_dcd_configuration/dcd_config.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0xffff",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/common/btmesh_hsl_server/config/sl_btmesh_hsl_server_config.h b/app/btmesh/common/btmesh_hsl_server/config/sl_btmesh_hsl_server_config.h
index 0c48f90979..3872a49a48 100644
--- a/app/btmesh/common/btmesh_hsl_server/config/sl_btmesh_hsl_server_config.h
+++ b/app/btmesh/common/btmesh_hsl_server/config/sl_btmesh_hsl_server_config.h
@@ -16,14 +16,14 @@
#define SL_BTMESH_HSL_SERVER_PS_KEY_CFG_VAL (0x4008)
// Periodicity [ms] for updating the hue during a transition.
-// Default: 1
+// Default: 10
// Periodicity [ms] for updating the hue during a transition.
-#define SL_BTMESH_HSL_SERVER_HUE_UPDATE_PERIOD_CFG_VAL (1)
+#define SL_BTMESH_HSL_SERVER_HUE_UPDATE_PERIOD_CFG_VAL (10)
// Periodicity [ms] for updating the saturation during a transition.
-// Default: 1
+// Default: 10
// Periodicity [ms] for updating the saturation during a transition.
-#define SL_BTMESH_HSL_SERVER_SATURATION_UPDATE_PERIOD_CFG_VAL (1)
+#define SL_BTMESH_HSL_SERVER_SATURATION_UPDATE_PERIOD_CFG_VAL (10)
// Periodicity [ms] for updating the UI with hue during a transition.
// Default: 100
diff --git a/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_server.c b/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_server.c
index b6560c1987..b059c23655 100644
--- a/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_server.c
+++ b/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_server.c
@@ -80,6 +80,8 @@
#define HIGH_PRIORITY 0 ///< High Priority
/// Values greater than max 37200000 are treated as unknown remaining time
#define UNKNOWN_REMAINING_TIME 40000000
+/// Difference between Generic Level and Hue/Saturation Level to convert the ranges
+#define GENERIC_TO_HSL_LEVEL_SHIFT 32768
/// Lightbulb state
static PACKSTRUCT(struct lightbulb_state {
@@ -1486,6 +1488,9 @@ static void hue_level_move_schedule_next_request(int32_t remaining_delta)
******************************************************************************/
static void hue_level_move_request(void)
{
+ // sync current hue level with actual value
+ lightbulb_state.hue_level_current = lightbulb_state.hue_current - GENERIC_TO_HSL_LEVEL_SHIFT;
+
log_info("Hue generic level move: level %d -> %d, delta %d in %lu ms" NL,
lightbulb_state.hue_level_current,
lightbulb_state.hue_level_target,
@@ -1498,17 +1503,12 @@ static void hue_level_move_request(void)
if (abs(remaining_delta) < abs(move_hue_level_delta)) {
// end of move level as it reached target state
lightbulb_state.hue_level_current = lightbulb_state.hue_level_target;
- lightbulb_state.hue_current = lightbulb_state.hue_target;
} else {
lightbulb_state.hue_level_current += move_hue_level_delta;
- lightbulb_state.hue_current += move_hue_level_delta;
}
lightbulb_state_changed();
hue_level_update_and_publish(BTMESH_HSL_SERVER_HUE, UNKNOWN_REMAINING_TIME);
- remaining_delta = (int32_t)lightbulb_state.hue_level_target
- - lightbulb_state.hue_level_current;
-
hue_level_move_schedule_next_request(remaining_delta);
}
@@ -2340,6 +2340,9 @@ static void saturation_level_move_schedule_next_request(int32_t remaining_delta)
******************************************************************************/
static void saturation_level_move_request(void)
{
+ // sync current saturation level with actual value
+ lightbulb_state.saturation_level_current = lightbulb_state.saturation_current - GENERIC_TO_HSL_LEVEL_SHIFT;
+
log_info("Saturation generic level move: level %d -> %d, delta %d in %lu ms" NL,
lightbulb_state.saturation_level_current,
lightbulb_state.saturation_level_target,
@@ -2352,18 +2355,13 @@ static void saturation_level_move_request(void)
if (abs(remaining_delta) < abs(move_saturation_level_delta)) {
// end of move level as it reached target state
lightbulb_state.saturation_level_current = lightbulb_state.saturation_level_target;
- lightbulb_state.saturation_current = lightbulb_state.saturation_target;
} else {
lightbulb_state.saturation_level_current += move_saturation_level_delta;
- lightbulb_state.saturation_current += move_saturation_level_delta;
}
lightbulb_state_changed();
saturation_level_update_and_publish(BTMESH_HSL_SERVER_SATURATION,
UNKNOWN_REMAINING_TIME);
- remaining_delta = (int32_t)lightbulb_state.saturation_level_target
- - lightbulb_state.saturation_level_current;
-
saturation_level_move_schedule_next_request(remaining_delta);
}
diff --git a/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_signal_transition_handler.c b/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_signal_transition_handler.c
index 67d4f948e2..31fbf0ef2e 100644
--- a/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_signal_transition_handler.c
+++ b/app/btmesh/common/btmesh_hsl_server/sl_btmesh_hsl_signal_transition_handler.c
@@ -37,6 +37,7 @@
#include "sl_status.h"
#include "app_timer.h"
+#include "sl_sleeptimer.h"
#ifdef SL_COMPONENT_CATALOG_PRESENT
#include "sl_component_catalog.h"
@@ -70,19 +71,23 @@ static uint16_t start_saturation;
/// target level of saturation transition
static uint16_t target_saturation;
-/// hue transition time in timer ticks
-static uint32_t hue_transtime_ticks;
+/// hue transition time in ms
+static uint32_t hue_transtime_ms;
/// time elapsed from hue transition start
static uint32_t hue_transtime_elapsed;
/// non-zero if hue transition is active
static uint8_t hue_transitioning;
+/// timestamp of the last sleeptimer tick
+static uint64_t hue_last_tick;
-/// saturation transition time in timer ticks
-static uint32_t saturation_transtime_ticks;
+/// saturation transition time in ms
+static uint32_t saturation_transtime_ms;
/// time elapsed from saturation transition start
static uint32_t saturation_transtime_elapsed;
/// non-zero if saturation transition is active
static uint8_t saturation_transitioning;
+/// timestamp of the last sleeptimer tick
+static uint64_t saturation_last_tick;
static app_timer_t hue_transition_timer;
static app_timer_t saturation_transition_timer;
@@ -122,6 +127,13 @@ static void hue_transition_timer_cb(app_timer_t *timer, void *data)
{
(void)data;
(void)timer;
+
+ // Use sleeptimer to account for scheduling errors
+ uint64_t current_tick = sl_sleeptimer_get_tick_count64();
+ uint64_t period_ms = 0;
+ sl_sleeptimer_tick64_to_ms(current_tick - hue_last_tick, &period_ms);
+ hue_last_tick = current_tick;
+
// Initialize the variable to UI update period in order to trigger a UI update
// at the beginning of the transition.
static uint16_t time_elapsed_since_ui_update = SL_BTMESH_HSL_SERVER_HUE_UI_UPDATE_PERIOD_CFG_VAL;
@@ -131,9 +143,9 @@ static void hue_transition_timer_cb(app_timer_t *timer, void *data)
app_assert_status_f(sc, "Failed to stop Periodic Hue Transition Timer");
return;
} else {
- hue_transtime_elapsed++;
+ hue_transtime_elapsed += period_ms;
- if (hue_transtime_elapsed >= hue_transtime_ticks) {
+ if (hue_transtime_elapsed >= hue_transtime_ms) {
// transition complete
hue_transitioning = 0;
current_hue = target_hue;
@@ -151,12 +163,12 @@ static void hue_transition_timer_cb(app_timer_t *timer, void *data)
current_hue = start_hue
+ (target_hue - start_hue)
* (uint64_t)hue_transtime_elapsed
- / hue_transtime_ticks;
+ / hue_transtime_ms;
} else {
current_hue = start_hue
- (start_hue - target_hue)
* (uint64_t)hue_transtime_elapsed
- / hue_transtime_ticks;
+ / hue_transtime_ms;
}
// When transition is ongoing generate an event to application once every
@@ -181,6 +193,13 @@ static void saturation_transition_timer_cb(app_timer_t *timer, void *data)
{
(void)data;
(void)timer;
+
+ // Use sleeptimer to account for scheduling errors
+ uint64_t current_tick = sl_sleeptimer_get_tick_count64();
+ uint64_t period_ms = 0;
+ sl_sleeptimer_tick64_to_ms(current_tick - saturation_last_tick, &period_ms);
+ saturation_last_tick = current_tick;
+
// Initialize the variable to UI update period in order to trigger a UI update
// at the beginning of the transition.
static uint16_t time_elapsed_since_ui_update = SL_BTMESH_HSL_SERVER_SATURATION_UI_UPDATE_PERIOD_CFG_VAL;
@@ -190,9 +209,9 @@ static void saturation_transition_timer_cb(app_timer_t *timer, void *data)
app_assert_status_f(sc, "Failed to stop Periodic Saturation Transition Timer");
return;
} else {
- saturation_transtime_elapsed++;
+ saturation_transtime_elapsed += period_ms;
- if (saturation_transtime_elapsed >= saturation_transtime_ticks) {
+ if (saturation_transtime_elapsed >= saturation_transtime_ms) {
// transition complete
saturation_transitioning = 0;
current_saturation = target_saturation;
@@ -210,12 +229,12 @@ static void saturation_transition_timer_cb(app_timer_t *timer, void *data)
current_saturation = start_saturation
+ (target_saturation - start_saturation)
* (uint64_t)saturation_transtime_elapsed
- / saturation_transtime_ticks;
+ / saturation_transtime_ms;
} else {
current_saturation = start_saturation
- (target_saturation - start_saturation)
* (uint64_t)saturation_transtime_elapsed
- / saturation_transtime_ticks;
+ / saturation_transtime_ms;
}
// When transition is ongoing generate an event to application once every
@@ -253,6 +272,9 @@ void sl_btmesh_hsl_set_hue_level(uint16_t hue, uint32_t transition_ms)
}
#endif
+ // get last tick before running the first transition timer
+ hue_last_tick = sl_sleeptimer_get_tick_count64();
+
if (transition_ms == 0) {
current_hue = hue;
@@ -268,7 +290,7 @@ void sl_btmesh_hsl_set_hue_level(uint16_t hue, uint32_t transition_ms)
return;
}
- hue_transtime_ticks = transition_ms;
+ hue_transtime_ms = transition_ms;
start_hue = current_hue;
target_hue = hue;
@@ -285,6 +307,9 @@ void sl_btmesh_hsl_set_hue_level(uint16_t hue, uint32_t transition_ms)
true);
app_assert_status_f(sc, "Failed to start periodic Hue Transition Timer");
+ // run first transition since the timer will not trigger now
+ hue_transition_timer_cb(NULL, NULL);
+
return;
}
@@ -308,6 +333,9 @@ void sl_btmesh_hsl_set_saturation_level(uint16_t saturation, uint32_t transition
}
#endif
+ // get last tick before running the first transition timer
+ saturation_last_tick = sl_sleeptimer_get_tick_count64();
+
if (transition_ms == 0) {
current_saturation = saturation;
@@ -323,7 +351,7 @@ void sl_btmesh_hsl_set_saturation_level(uint16_t saturation, uint32_t transition
return;
}
- saturation_transtime_ticks = transition_ms;
+ saturation_transtime_ms = transition_ms;
start_saturation = current_saturation;
target_saturation = saturation;
@@ -340,6 +368,9 @@ void sl_btmesh_hsl_set_saturation_level(uint16_t saturation, uint32_t transition
true);
app_assert_status_f(sc, "Failed to start periodic Saturation Transition Timer");
+ // run first transition since the timer will not trigger now
+ saturation_transition_timer_cb(NULL, NULL);
+
return;
}
diff --git a/app/btmesh/common/btmesh_lighting_server/config/sl_btmesh_lighting_server_config.h b/app/btmesh/common/btmesh_lighting_server/config/sl_btmesh_lighting_server_config.h
index 4b99db69ce..6b3197fef5 100644
--- a/app/btmesh/common/btmesh_lighting_server/config/sl_btmesh_lighting_server_config.h
+++ b/app/btmesh/common/btmesh_lighting_server/config/sl_btmesh_lighting_server_config.h
@@ -45,9 +45,9 @@
#define SL_BTMESH_LIGHTING_SERVER_PS_KEY_CFG_VAL (0x4004)
// Periodicity [ms] for updating the PWM duty cycle during a transition.
-// Default: 1
+// Default: 10
// Periodicity [ms] for updating the PWM duty cycle during a transition.
-#define SL_BTMESH_LIGHTING_SERVER_PWM_UPDATE_PERIOD_CFG_VAL (1)
+#define SL_BTMESH_LIGHTING_SERVER_PWM_UPDATE_PERIOD_CFG_VAL (10)
// for updating the UI with lightness level during a transition.
// Default: 100
diff --git a/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_level_transition_handler.c b/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_level_transition_handler.c
index d2dddbd2ab..7335e0b574 100644
--- a/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_level_transition_handler.c
+++ b/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_level_transition_handler.c
@@ -33,6 +33,7 @@
#include "app_assert.h"
#include "app_timer.h"
+#include "sl_sleeptimer.h"
#ifdef SL_COMPONENT_CATALOG_PRESENT
#include "sl_component_catalog.h"
@@ -63,12 +64,14 @@ static uint16_t start_level;
/// target level of lightness transition
static uint16_t target_level;
-/// lightness transition time in timer ticks
-static uint32_t level_transtime_ticks;
+/// lightness transition time in ms
+static uint32_t level_transtime_ms;
/// time elapsed from lightness transition start
static uint32_t level_transtime_elapsed;
/// non-zero if lightness transition is active
static uint8_t level_transitioning;
+/// timestamp of the last sleeptimer tick
+static uint64_t last_tick;
static app_timer_t transition_timer;
@@ -99,6 +102,12 @@ static void transition_timer_cb(app_timer_t *handle,
(void)data;
(void)handle;
+ // Use sleeptimer to account for scheduling errors
+ uint64_t current_tick = sl_sleeptimer_get_tick_count64();
+ uint64_t period_ms = 0;
+ sl_sleeptimer_tick64_to_ms(current_tick - last_tick, &period_ms);
+ last_tick = current_tick;
+
// Initialize the variable to UI update period in order to trigger a UI update
// at the beginning of the transition.
static uint16_t time_elapsed_since_ui_update =
@@ -109,9 +118,9 @@ static void transition_timer_cb(app_timer_t *handle,
app_assert_status_f(sc, "Failed to stop Periodic Level Transition Timer");
return;
} else {
- level_transtime_elapsed++;
+ level_transtime_elapsed += period_ms;
- if (level_transtime_elapsed >= level_transtime_ticks) {
+ if (level_transtime_elapsed >= level_transtime_ms) {
// transition complete
level_transitioning = 0;
current_level = target_level;
@@ -123,19 +132,19 @@ static void transition_timer_cb(app_timer_t *handle,
// Trigger a UI update in order to provide the target values at the end
// of the current transition
sl_btmesh_lighting_server_on_ui_update(current_level);
- sl_btmesh_update_lightness(current_level, level_transtime_ticks - level_transtime_elapsed);
+ sl_btmesh_update_lightness(current_level, level_transtime_ms - level_transtime_elapsed);
} else {
// calculate current PWM duty cycle based on elapsed transition time
if (target_level >= start_level) {
current_level = start_level
+ (target_level - start_level)
* (uint64_t)level_transtime_elapsed
- / level_transtime_ticks;
+ / level_transtime_ms;
} else {
current_level = start_level
- (start_level - target_level)
* (uint64_t)level_transtime_elapsed
- / level_transtime_ticks;
+ / level_transtime_ms;
}
// When transition is ongoing generate an event to application once every
@@ -146,7 +155,7 @@ static void transition_timer_cb(app_timer_t *handle,
if (SL_BTMESH_LIGHTING_SERVER_UI_UPDATE_PERIOD_CFG_VAL <= time_elapsed_since_ui_update) {
time_elapsed_since_ui_update -= SL_BTMESH_LIGHTING_SERVER_UI_UPDATE_PERIOD_CFG_VAL;
sl_btmesh_lighting_server_on_ui_update(current_level);
- sl_btmesh_update_lightness(current_level, level_transtime_ticks - level_transtime_elapsed);
+ sl_btmesh_update_lightness(current_level, level_transtime_ms - level_transtime_elapsed);
}
}
}
@@ -162,6 +171,8 @@ static void transition_timer_cb(app_timer_t *handle,
******************************************************************************/
void sl_btmesh_lighting_set_level(uint16_t level, uint32_t transition_ms)
{
+ // get last tick before running the first transition timer
+ last_tick = sl_sleeptimer_get_tick_count64();
if (transition_ms == 0) {
current_level = level;
@@ -177,7 +188,7 @@ void sl_btmesh_lighting_set_level(uint16_t level, uint32_t transition_ms)
return;
}
- level_transtime_ticks = transition_ms;
+ level_transtime_ms = transition_ms;
start_level = current_level;
target_level = level;
@@ -194,6 +205,9 @@ void sl_btmesh_lighting_set_level(uint16_t level, uint32_t transition_ms)
true);
app_assert_status_f(sc, "Failed to start periodic Transition Timer");
+ // run first transition since the timer will not trigger now
+ transition_timer_cb(NULL, NULL);
+
return;
}
diff --git a/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_server.c b/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_server.c
index cf47691d5a..5eb3c68353 100644
--- a/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_server.c
+++ b/app/btmesh/common/btmesh_lighting_server/sl_btmesh_lighting_server.c
@@ -1862,6 +1862,9 @@ static void pri_level_move_schedule_next_request(int32_t remaining_delta)
******************************************************************************/
static void pri_level_move_request(void)
{
+ // sync current pri level and actual lightness
+ lightbulb_state.pri_level_current = lightbulb_state.lightness_current - GENERIC_TO_LIGHTNESS_LEVEL_SHIFT;
+
log_info("Primary level move: level %d -> %d, delta %d in %lu ms" NL,
lightbulb_state.pri_level_current,
lightbulb_state.pri_level_target,
@@ -1874,17 +1877,13 @@ static void pri_level_move_request(void)
if (abs(remaining_delta) < abs(move_pri_level_delta)) {
// end of move level as it reached target state
lightbulb_state.pri_level_current = lightbulb_state.pri_level_target;
- lightbulb_state.lightness_current = lightbulb_state.lightness_target;
} else {
lightbulb_state.pri_level_current += move_pri_level_delta;
- lightbulb_state.lightness_current += move_pri_level_delta;
}
lightbulb_state_changed();
pri_level_update_and_publish(BTMESH_LIGHTING_SERVER_MAIN,
UNKNOWN_REMAINING_TIME);
- remaining_delta = (int32_t)lightbulb_state.pri_level_target
- - lightbulb_state.pri_level_current;
if (remaining_delta != 0) {
pri_level_move_schedule_next_request(remaining_delta);
}
@@ -1946,6 +1945,8 @@ static void pri_level_request(uint16_t model_id,
pri_level_move_stop();
+ lightness_kind = mesh_generic_state_level;
+
if (lightbulb_state.pri_level_current == request->level) {
log_info("Request for current state received; no op" NL);
lightbulb_state.pri_level_target = request->level;
diff --git a/app/btmesh/component/btmesh_lighting_server.slcc b/app/btmesh/component/btmesh_lighting_server.slcc
index 1a386fce06..036f7a28f9 100644
--- a/app/btmesh/component/btmesh_lighting_server.slcc
+++ b/app/btmesh/component/btmesh_lighting_server.slcc
@@ -42,6 +42,8 @@ requires:
- name: "btmesh_stack_generic_server"
- name: "btmesh_stack_node"
- name: "btmesh_generic_server"
+ - name: "component_catalog"
+ - name: "sleeptimer"
- name: "btmesh_stack"
- name: "app_timer"
recommends:
diff --git a/app/btmesh/documentation/btmesh-release-highlights.txt b/app/btmesh/documentation/btmesh-release-highlights.txt
index 0fa8929cef..9443ce291d 100644
--- a/app/btmesh/documentation/btmesh-release-highlights.txt
+++ b/app/btmesh/documentation/btmesh-release-highlights.txt
@@ -1,2 +1,2 @@
-Bluetooth Mesh SDK 6.0.1
-- Targeted quality improvements and bugfixes
+Bluetooth Mesh SDK 6.1.0
+- Targeted quality improvements and bugfixes.
diff --git a/app/btmesh/documentation/slBtMesh_docContent.xml b/app/btmesh/documentation/slBtMesh_docContent.xml
index 7a435b2fc5..8ce4ac4f1e 100644
--- a/app/btmesh/documentation/slBtMesh_docContent.xml
+++ b/app/btmesh/documentation/slBtMesh_docContent.xml
@@ -1,6 +1,6 @@
-
+
Includes detailed information on using the Gecko Bootloader with Silicon Labs Bluetooth applications. It supplements the general Gecko Bootloader implementation information provided in UG489: Silicon Labs Gecko Bootloader User's Guide.
@@ -8,7 +8,7 @@
-
+
Describes the Wi-Fi impact on Bluetooth and methods to improve Bluetooth coexistence with Wi-Fi. Explains design considerations to improve coexistence without direct interaction between Bluetooth and Wi-Fi radios. These techniques are applicable to the EFR32MGx and EFR32BGx series. Discusses the Silicon Labs Packet Traffic Arbitration (PTA) support to coordinate 2.4GHz RF traffic for co-located Bluetooth and Wi-Fi radios.
@@ -16,7 +16,7 @@
-
+
Explains how NVM3 can be used as non-volatile data storage in various protocol implementations.
@@ -24,14 +24,14 @@
-
+
Details methods for testing Bluetooth mesh network performance; results are intended to provide guidance on design practices and principles as well as expected field performance results.
-
+
Reviews the Zigbee, Thread, and Bluetooth mesh networks to evaluate their differences in performance and behavior.
@@ -39,7 +39,7 @@
-
+
Describes how to lock and unlock the debug access of EFR32 Gecko Series 2 devices. Many aspects of the debug access, including the secure debug unlock are described. The Debug Challenge Interface (DCI) and Secure Engine (SE) Mailbox Interface for locking and unlocking debug access are also included.
@@ -47,7 +47,7 @@
-
+
Contains detailed information on configuring and using the Secure Boot with hardware Root of Trust and Secure Loader on Series 2 devices, including how to provision the signing key. This is a companion document to UG489: Silicon Labs Gecko Bootloader User's Guide.
@@ -55,7 +55,7 @@
-
+
Details on programming, provisioning, and configuring Series 2 devices in production environments. Covers Secure Engine Subsystem of Series 2 devices, which runs easily upgradeable Secure Engine (SE) or Virtual Secure Engine (VSE) firmware.
@@ -63,7 +63,7 @@
-
+
How to program, provision, and configure the anti-tamper module on EFR32 Series 2 devices with Secure Vault.
@@ -71,7 +71,7 @@
-
+
Describes how to configure the NCP target and how to program the NCP host when using the Bluetooth Stack in Network Co-Processor mode
@@ -79,7 +79,7 @@
-
+
Reviews performing radio frequency physical layer evaluation with EFR32BG SoCs and BGM modules using the Direct Test Mode protocol in Bluetooth SDK v3.x.
@@ -87,7 +87,7 @@
-
+
How to authenticate an EFR32 Series 2 device with Secure Vault, using secure device certificates and signatures.
@@ -95,7 +95,7 @@
-
+
How to securely "wrap" keys in EFR32 Series 2 devices with Secure Vault, so they can be stored in non-volatile storage.
@@ -103,28 +103,28 @@
-
+
Describes the differences between using Bluetooth mesh SDK v1.x in Simplicity Studio 4 and using Bluetooth mesh SDK v2.x in Simplicity Studio 5. Outlines the steps needed to migrate a v1.x project to v2.x.
-
+
Discusses the basics of Bluetooth mesh required to understand the Bluetooth mesh lighting example, and walks through key aspects of the application source code.
-
+
Discusses the basics of sensor models and describe the related sample applications in the SDK that create a wireless network of sensors and sensor clients using Bluetooth mesh technology.
-
+
Describes how to provision and configure Series 2 devices through the DCI and SWD.
@@ -132,14 +132,14 @@
-
+
Includes the results of the interoperability testing of Silicon Labs' ICs and Bluetooth Mesh stack with Android and iOS smart phones.
-
+
Describes how to integrate crypto functionality into applications using PSA Crypto compared to Mbed TLS.
@@ -147,21 +147,21 @@
-
+
Describes Low Power Node (LPN) and Friend operation and the parameters related to power consumption. It also describes how to measure the power consumption of EFR32BG devices acting as Bluetooth mesh LPNs using the setup and procedures recommended in AN969: Measuring Power Consumption in Wireless Gecko Devices.
-
+
Describes in detail how the Bluetooth mesh toplogy can influence network operation. Provides tips on how to tune your network and its nodes to achieve best performance.
-
+
Describes using Simplicity Studio 5's Network Analyzer to debug Bluetooth Mesh and Low Energy applications. It can be read jointly with AN958: Debugging and Programming Interfaces for Customer Designs for more information on using Packet Trace Interface with custom hardware.
@@ -169,21 +169,21 @@
-
+
Provides background information on the sequence number and IV index in a Bluetooth mesh network and the IV Update and IV Index Recovery procedures. It also discusses how to implement IV Update functionality in a Bluetooth mesh application.
-
+
Provides background information on the Bluetooth Mesh Device Firmware Update (DFU) feature, including the BLOB transfer, the DFU roles in a Bluetooth mesh network, the models required for these roles, and the firmware update process.
-
+
Gecko Bootloader v2.x, introduced in GSDK 4.0, contains a number of changes compared to Gecko Bootloader v1.x. This document describes the differences between the versions, including how to configure the new Gecko Bootloader in Simplicity Studio 5.
@@ -191,91 +191,91 @@
-
+
Describes the Bluetooth Mesh Remote Provisioning feature and provides an example walkthrough. With the feature, a device can be provisioned without a direct radio connection between the provisioner and the unprovisioned node.
-
+
Describes the bootloader configurations and the device firmware update (DFU) models in the SDK's example projects, and walks through a firmware update demonstration.
-
+
The NCP Host Provisioner example demonstrates how to run a provisioner on a computer with a NCP node connected. The user can provision, configure, and reset other nodes through the NCP node.
-
+
Describes how certificates are used to establish the authenticity of devices wishing to join a mesh network.
-
+
Describes the Bluetooth Mesh Advertising Extensions feature. The non-standard Bluetooth Mesh modification achieves better performance through utilizing the Bluetooth 5 Advertising Extensions feature, which allows sending much larger advertisement packets.
-
+
Walks through a device firmware update demonstration using the DFU Python script. The script is an NCP host application that requires an NCP node connected.
-
+
Describes the following Networked Lighting Control (NLC) profiles: ambient light sensor, basic scene selector, dimming control, basic lightness controller, and occupancy sensor.
-
+
Provides an overview and hyperlinks to all packaged documentation.
-
+
Describes how to get started with Bluetooth mesh development using the Bluetooth Mesh Software Development Kit (SDK) version 4.x and higher, and Simplicity Studio 5 with a compatible wireless starter kit. Contains information about features specific to Bluetooth mesh specification version 1.1.
-
+
Contains a comprehensive list of APIs used to interface to the Silicon Labs Bluetooth Mesh stack.
-
+
A reference for those developing C-based applications for the Silicon Labs EFR32 products using the Silicon Labs Bluetooth mesh stack. A companion to UG434: Silicon Labs Bluetooth C Application Developers Guide for SDK v3.x containing content specific to Bluetooth mesh application development. Covers Bluetooth mesh stack architecture, application development flow, use and limitations of the MCU core and peripherals, stack configuration options, and stack resource usage.
-
+
Lists compatibility requirements and sources for all software components in the development environment. Discusses the latest changes to the Silicon Labs Bluetooth mesh SDK and associated utilities, including added/deleted/deprecated features/API, and lists fixed and known issues.
-
+
A detailed overview of the changes, additions, and fixes in the Gecko Platform components. The Gecko Platform includes EMLIB, EMDRV, RAIL Library, NVM3, and the component-based infrastructure.
@@ -283,7 +283,7 @@
-
+
Introduces the security concepts that must be considered when implementing an Internet of Things (IoT) system. Using the ioXt Alliance's eight security principles as a structure, it clearly delineates the solutions Silicon Labs provides to support endpoint security and what you must do outside of the Silicon Labs framework.
@@ -291,7 +291,7 @@
-
+
Introduces bootloading for Silicon Labs networking devices. Discusses the Gecko Bootloader as well as legacy Ember and Bluetooth bootloaders, and describes the file formats used by each.
@@ -299,7 +299,7 @@
-
+
Introduces non-volatile data storage using flash and the three different storage implementations offered for Silicon Labs microcontrollers and SoCs: Simulated EEPROM, PS Store, and NVM3.
@@ -307,7 +307,7 @@
-
+
Describes methods to improve the coexistence of 2.4 GHz IEEE 802.11b/g/n Wi-Fi and other 2.4 GHz radios such as Bluetooth, Bluetooth Mesh, Bluetooth Low Energy, and IEEE 802.15.4-based radios such as Zigbee and OpenThread.
@@ -315,7 +315,7 @@
-
+
Reviews using this XML-based mark-up language to describe the Bluetooth GATT database, configure access and security properties, and include the GATT database as part of the firmware.
@@ -323,7 +323,7 @@
-
+
Describes how and when to use Simplicity Commander's Command-Line Interface.
@@ -331,7 +331,7 @@
-
+
Provides the information needed to effectively use the Bluetooth GATT Configurator provided as a part of Simplicity Studio 5 with Bluetooth SDK 3.x and higher and Bluetooth Mesh SDK 2.x and higher.
@@ -339,14 +339,14 @@
-
+
Describes the components, stack, and DCD (Device Composition Data) configuration options for the Bluetooth Mesh v2.x SDK.
-
+
Describes the high-level implementation of the Silicon Labs Gecko Bootloader for EFR32 SoCs and NCPs, and provides information on how to get started using the Gecko Bootloader with Silicon Labs wireless protocol stacks in GSDK 4.0 and higher.
@@ -354,7 +354,7 @@
-
+
Introduces Simplicity Studio 5 Bluetooth Mesh SDK components. Describes how to modify the Device Composition Data (DCD), including device information, elements, and models. Describes the stack configuration options to optimize RAM and persistent storage usage.
diff --git a/app/btmesh/example/btmesh_ncp_empty/dcd_config.btmeshconf b/app/btmesh/example/btmesh_ncp_empty/dcd_config.btmeshconf
index 18d9de7b05..99d83bae74 100644
--- a/app/btmesh/example/btmesh_ncp_empty/dcd_config.btmeshconf
+++ b/app/btmesh/example/btmesh_ncp_empty/dcd_config.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x0000",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Primary Element",
diff --git a/app/btmesh/example/btmesh_ncp_empty/dcd_config_v1_1.btmeshconf b/app/btmesh/example/btmesh_ncp_empty/dcd_config_v1_1.btmeshconf
index 451e2b19eb..a65d097c3b 100644
--- a/app/btmesh/example/btmesh_ncp_empty/dcd_config_v1_1.btmeshconf
+++ b/app/btmesh/example/btmesh_ncp_empty/dcd_config_v1_1.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x0000",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Primary Element",
diff --git a/app/btmesh/example/btmesh_ncp_empty/dcd_config_xg22.btmeshconf b/app/btmesh/example/btmesh_ncp_empty/dcd_config_xg22.btmeshconf
index 649714ab70..7407313ca6 100644
--- a/app/btmesh/example/btmesh_ncp_empty/dcd_config_xg22.btmeshconf
+++ b/app/btmesh/example/btmesh_ncp_empty/dcd_config_xg22.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x0000",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_dfu_distributor/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_dfu_distributor/dcd_config.btmeshconf
index d873fa225e..40dac8abca 100644
--- a/app/btmesh/example/btmesh_soc_dfu_distributor/dcd_config.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_dfu_distributor/dcd_config.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x000c",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_empty/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_empty/dcd_config.btmeshconf
index e424ef941a..cd8c710f08 100644
--- a/app/btmesh/example/btmesh_soc_empty/dcd_config.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_empty/dcd_config.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x0001",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_empty_cbp/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_empty_cbp/dcd_config.btmeshconf
index c4be5f169a..facb681aa4 100644
--- a/app/btmesh/example/btmesh_soc_empty_cbp/dcd_config.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_empty_cbp/dcd_config.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x000d",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_light_ctl/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_light_ctl/dcd_config.btmeshconf
index bc2ef74f9c..fcee98064e 100644
--- a/app/btmesh/example/btmesh_soc_light_ctl/dcd_config.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_light_ctl/dcd_config.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x0017",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_light_hsl/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_light_hsl/dcd_config.btmeshconf
index 58a4a7f22e..b1bf83549a 100644
--- a/app/btmesh/example/btmesh_soc_light_hsl/dcd_config.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_light_hsl/dcd_config.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x0018",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_nlc_basic_lightness_controller/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_nlc_basic_lightness_controller/dcd_config.btmeshconf
index 277c06fecb..7fed56a78b 100644
--- a/app/btmesh/example/btmesh_soc_nlc_basic_lightness_controller/dcd_config.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_nlc_basic_lightness_controller/dcd_config.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x000e",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_nlc_basic_scene_selector/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_nlc_basic_scene_selector/dcd_config.btmeshconf
index 884a3997bd..c14f4bb517 100644
--- a/app/btmesh/example/btmesh_soc_nlc_basic_scene_selector/dcd_config.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_nlc_basic_scene_selector/dcd_config.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x0013",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_nlc_basic_scene_selector/dcd_config_low_power.btmeshconf b/app/btmesh/example/btmesh_soc_nlc_basic_scene_selector/dcd_config_low_power.btmeshconf
index 55654a9ff4..9c34aa8146 100644
--- a/app/btmesh/example/btmesh_soc_nlc_basic_scene_selector/dcd_config_low_power.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_nlc_basic_scene_selector/dcd_config_low_power.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x0014",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_nlc_dimming_control/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_nlc_dimming_control/dcd_config.btmeshconf
index 9305e10f8e..d765473930 100644
--- a/app/btmesh/example/btmesh_soc_nlc_dimming_control/dcd_config.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_nlc_dimming_control/dcd_config.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x000f",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_nlc_dimming_control/dcd_config_low_power.btmeshconf b/app/btmesh/example/btmesh_soc_nlc_dimming_control/dcd_config_low_power.btmeshconf
index 0c60b54eab..71da2565cb 100644
--- a/app/btmesh/example/btmesh_soc_nlc_dimming_control/dcd_config_low_power.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_nlc_dimming_control/dcd_config_low_power.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x0010",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_nlc_sensor_ambient_light/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_nlc_sensor_ambient_light/dcd_config.btmeshconf
index 346d9faa78..fcf4aad014 100644
--- a/app/btmesh/example/btmesh_soc_nlc_sensor_ambient_light/dcd_config.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_nlc_sensor_ambient_light/dcd_config.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x0011",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_nlc_sensor_occupancy/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_nlc_sensor_occupancy/dcd_config.btmeshconf
index 6711a19959..61e0eefeeb 100644
--- a/app/btmesh/example/btmesh_soc_nlc_sensor_occupancy/dcd_config.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_nlc_sensor_occupancy/dcd_config.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x0012",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_sensor_client/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_sensor_client/dcd_config.btmeshconf
index 048b1f9853..9a6661c7ae 100644
--- a/app/btmesh/example/btmesh_soc_sensor_client/dcd_config.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_sensor_client/dcd_config.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x0004",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_sensor_thermometer/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_sensor_thermometer/dcd_config.btmeshconf
index cff712b600..591bcf9478 100644
--- a/app/btmesh/example/btmesh_soc_sensor_thermometer/dcd_config.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_sensor_thermometer/dcd_config.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x0019",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_switch_ctl/dcd_config.btmeshconf b/app/btmesh/example/btmesh_soc_switch_ctl/dcd_config.btmeshconf
index 0870c88c05..3e990d69a8 100644
--- a/app/btmesh/example/btmesh_soc_switch_ctl/dcd_config.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_switch_ctl/dcd_config.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x0015",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/btmesh/example/btmesh_soc_switch_ctl/dcd_config_low_power.btmeshconf b/app/btmesh/example/btmesh_soc_switch_ctl/dcd_config_low_power.btmeshconf
index 894c8a2685..b9e3b0851e 100644
--- a/app/btmesh/example/btmesh_soc_switch_ctl/dcd_config_low_power.btmeshconf
+++ b/app/btmesh/example/btmesh_soc_switch_ctl/dcd_config_low_power.btmeshconf
@@ -2,7 +2,7 @@
"composition_data": {
"cid": "0x02ff",
"pid": "0x0016",
- "vid": "0x0601",
+ "vid": "0x0610",
"elements": [
{
"name": "Main",
diff --git a/app/common/app_common.properties b/app/common/app_common.properties
index 416a5bebe8..47c6969565 100644
--- a/app/common/app_common.properties
+++ b/app/common/app_common.properties
@@ -2,9 +2,9 @@
id=com.silabs.sdk.platform
label=Platform
description=Platform
-version=4.4.1.0
-dependantSdkVersion=4.4.1
-prop.subLabel=Platform\\ 4.4.1.0
+version=4.4.2.0
+dependantSdkVersion=4.4.2
+prop.subLabel=Platform\\ 4.4.2.0
# General properties are prepended with "prop."
prop.file.templatesFile=platform_evaluation_templates.xml platform_experimental_templates.xml builtin_templates.xml platform_production_templates.xml platform_internal_templates.xml
diff --git a/app/common/platform_production_demos.xml b/app/common/platform_production_demos.xml
index fd363e4d21..b41e9c49f2 100644
--- a/app/common/platform_production_demos.xml
+++ b/app/common/platform_production_demos.xml
@@ -6,7 +6,7 @@
-
+
@@ -17,7 +17,7 @@
-
+
@@ -28,7 +28,7 @@
-
+
@@ -39,7 +39,7 @@
-
+
@@ -50,7 +50,7 @@
-
+
@@ -61,7 +61,7 @@
-
+
@@ -72,7 +72,7 @@
-
+
@@ -83,7 +83,7 @@
-
+
@@ -94,7 +94,7 @@
-
+
@@ -105,7 +105,7 @@
-
+
@@ -116,7 +116,7 @@
-
+
@@ -127,7 +127,7 @@
-
+
@@ -138,7 +138,7 @@
-
+
@@ -149,7 +149,7 @@
-
+
@@ -160,7 +160,7 @@
-
+
@@ -171,7 +171,7 @@
-
+
@@ -182,7 +182,7 @@
-
+
@@ -193,7 +193,7 @@
-
+
@@ -204,7 +204,7 @@
-
+
@@ -215,7 +215,7 @@
-
+
@@ -226,7 +226,7 @@
-
+
@@ -237,7 +237,7 @@
-
+
@@ -248,7 +248,7 @@
-
+
@@ -259,7 +259,7 @@
-
+
@@ -270,7 +270,7 @@
-
+
@@ -281,7 +281,7 @@
-
+
@@ -292,7 +292,7 @@
-
+
@@ -303,7 +303,7 @@
-
+
@@ -314,7 +314,7 @@
-
+
@@ -325,7 +325,7 @@
-
+
@@ -336,7 +336,7 @@
-
+
@@ -347,7 +347,7 @@
-
+
@@ -358,7 +358,7 @@
-
+
@@ -369,7 +369,7 @@
-
+
@@ -380,7 +380,7 @@
-
+
@@ -391,7 +391,7 @@
-
+
@@ -402,7 +402,7 @@
-
+
@@ -413,7 +413,7 @@
-
+
@@ -424,7 +424,7 @@
-
+
@@ -435,7 +435,7 @@
-
+
@@ -446,7 +446,7 @@
-
+
@@ -457,7 +457,7 @@
-
+
@@ -468,7 +468,7 @@
-
+
@@ -479,7 +479,7 @@
-
+
@@ -490,7 +490,7 @@
-
+
@@ -501,7 +501,7 @@
-
+
@@ -512,7 +512,7 @@
-
+
@@ -523,7 +523,7 @@
-
+
@@ -534,7 +534,7 @@
-
+
@@ -545,7 +545,7 @@
-
+
@@ -556,7 +556,7 @@
-
+
@@ -567,7 +567,7 @@
-
+
@@ -578,7 +578,7 @@
-
+
@@ -589,7 +589,7 @@
-
+
@@ -600,7 +600,7 @@
-
+
@@ -611,7 +611,7 @@
-
+
@@ -622,7 +622,7 @@
-
+
@@ -633,7 +633,7 @@
-
+
@@ -644,7 +644,7 @@
-
+
@@ -655,7 +655,7 @@
-
+
@@ -666,7 +666,7 @@
-
+
@@ -677,7 +677,7 @@
-
+
@@ -688,7 +688,7 @@
-
+
@@ -699,7 +699,7 @@
-
+
@@ -710,7 +710,7 @@
-
+
@@ -721,7 +721,7 @@
-
+
@@ -732,7 +732,7 @@
-
+
@@ -743,7 +743,7 @@
-
+
@@ -754,7 +754,7 @@
-
+
@@ -765,7 +765,7 @@
-
+
@@ -776,7 +776,7 @@
-
+
@@ -787,7 +787,7 @@
-
+
@@ -798,7 +798,7 @@
-
+
@@ -809,7 +809,7 @@
-
+
@@ -820,7 +820,7 @@
-
+
@@ -831,7 +831,7 @@
-
+
@@ -842,7 +842,7 @@
-
+
@@ -853,7 +853,7 @@
-
+
@@ -864,7 +864,7 @@
-
+
@@ -875,7 +875,7 @@
-
+
@@ -886,7 +886,7 @@
-
+
@@ -897,7 +897,7 @@
-
+
@@ -908,7 +908,7 @@
-
+
@@ -919,7 +919,7 @@
-
+
@@ -930,7 +930,7 @@
-
+
@@ -941,7 +941,7 @@
-
+
@@ -952,7 +952,7 @@
-
+
@@ -963,7 +963,7 @@
-
+
@@ -974,7 +974,7 @@
-
+
@@ -985,7 +985,7 @@
-
+
@@ -996,7 +996,7 @@
-
+
@@ -1007,7 +1007,7 @@
-
+
@@ -1018,7 +1018,7 @@
-
+
@@ -1029,7 +1029,7 @@
-
+
@@ -1040,7 +1040,7 @@
-
+
@@ -1051,7 +1051,7 @@
-
+
@@ -1062,7 +1062,7 @@
-
+
@@ -1073,7 +1073,7 @@
-
+
@@ -1084,7 +1084,7 @@
-
+
@@ -1095,7 +1095,7 @@
-
+
@@ -1106,7 +1106,7 @@
-
+
@@ -1117,7 +1117,7 @@
-
+
@@ -1128,7 +1128,7 @@
-
+
@@ -1139,7 +1139,7 @@
-
+
@@ -1150,7 +1150,7 @@
-
+
@@ -1161,7 +1161,7 @@
-
+
@@ -1172,7 +1172,7 @@
-
+
@@ -1183,7 +1183,7 @@
-
+
@@ -1194,7 +1194,7 @@
-
+
@@ -1205,7 +1205,7 @@
-
+
@@ -1216,7 +1216,7 @@
-
+
@@ -1227,7 +1227,7 @@
-
+
@@ -1238,7 +1238,7 @@
-
+
@@ -1249,7 +1249,7 @@
-
+
@@ -1260,7 +1260,7 @@
-
+
@@ -1271,7 +1271,7 @@
-
+
@@ -1282,7 +1282,7 @@
-
+
@@ -1293,7 +1293,7 @@
-
+
@@ -1304,7 +1304,7 @@
-
+
@@ -1315,7 +1315,7 @@
-
+
@@ -1326,7 +1326,7 @@
-
+
@@ -1337,7 +1337,7 @@
-
+
@@ -1348,7 +1348,7 @@
-
+
@@ -1359,7 +1359,7 @@
-
+
@@ -1370,7 +1370,7 @@
-
+
@@ -1381,7 +1381,7 @@
-
+
@@ -1392,7 +1392,7 @@
-
+
@@ -1403,7 +1403,7 @@
-
+
@@ -1414,7 +1414,7 @@
-
+
@@ -1425,7 +1425,7 @@
-
+
@@ -1436,7 +1436,7 @@
-
+
@@ -1447,7 +1447,7 @@
-
+
@@ -1458,7 +1458,7 @@
-
+
@@ -1469,7 +1469,7 @@
-
+
@@ -1480,7 +1480,7 @@
-
+
@@ -1491,7 +1491,7 @@
-
+
@@ -1502,7 +1502,18 @@
-
+
+
+
+
+
+
+ This example project demonstrates use of the Memory Liquid Crystal Display (LCD) module in a baremetal application, using Silicon Labs Graphics Library (glib).
+
+
+
+
+
@@ -1513,7 +1524,7 @@
-
+
@@ -1524,7 +1535,7 @@
-
+
@@ -1535,7 +1546,7 @@
-
+
@@ -1546,7 +1557,7 @@
-
+
@@ -1557,7 +1568,7 @@
-
+
@@ -1568,7 +1579,7 @@
-
+
@@ -1579,7 +1590,7 @@
-
+
@@ -1590,7 +1601,7 @@
-
+
@@ -1601,7 +1612,7 @@
-
+
@@ -1612,7 +1623,7 @@
-
+
diff --git a/app/common/platform_production_templates.xml b/app/common/platform_production_templates.xml
index 8933e16a11..00d1f5a640 100644
--- a/app/common/platform_production_templates.xml
+++ b/app/common/platform_production_templates.xml
@@ -6,7 +6,7 @@
-
+
@@ -22,7 +22,7 @@
-
+
@@ -38,7 +38,7 @@
-
+
@@ -53,7 +53,7 @@
-
+
@@ -68,7 +68,7 @@
-
+
@@ -83,7 +83,7 @@
-
+
@@ -98,7 +98,7 @@
-
+
@@ -113,7 +113,7 @@
-
+
@@ -128,7 +128,7 @@
-
+
@@ -173,7 +173,7 @@
-
+
@@ -188,7 +188,7 @@
-
+
@@ -203,7 +203,7 @@
-
+
@@ -218,7 +218,7 @@
-
+
@@ -248,7 +248,7 @@
-
+
@@ -263,7 +263,7 @@
-
+
@@ -278,7 +278,7 @@
-
+
@@ -293,7 +293,7 @@
-
+
@@ -308,7 +308,7 @@
-
+
@@ -323,7 +323,7 @@
-
+
@@ -338,7 +338,7 @@
-
+
@@ -353,7 +353,7 @@
-
+
@@ -368,7 +368,7 @@
-
+
@@ -443,7 +443,7 @@
-
+
@@ -458,7 +458,7 @@
-
+
@@ -473,7 +473,7 @@
-
+
@@ -488,7 +488,7 @@
-
+
@@ -503,7 +503,7 @@
-
+
@@ -533,7 +533,7 @@
-
+
@@ -563,7 +563,7 @@
-
+
@@ -593,7 +593,7 @@
-
+
@@ -608,7 +608,7 @@
-
+
@@ -623,7 +623,7 @@
-
+
@@ -638,7 +638,7 @@
-
+
@@ -653,7 +653,7 @@
-
+
@@ -668,7 +668,7 @@
-
+
@@ -683,7 +683,7 @@
-
+
@@ -698,7 +698,7 @@
-
+
@@ -713,7 +713,7 @@
-
+
@@ -728,7 +728,7 @@
-
+
@@ -743,7 +743,7 @@
-
+
@@ -758,7 +758,7 @@
-
+
@@ -773,7 +773,7 @@
-
+
@@ -788,7 +788,7 @@
-
+
@@ -803,7 +803,7 @@
-
+
@@ -833,7 +833,7 @@
-
+
@@ -848,7 +848,7 @@
-
+
@@ -863,7 +863,7 @@
-
+
@@ -878,7 +878,7 @@
-
+
@@ -923,7 +923,7 @@
-
+
@@ -938,7 +938,7 @@
-
+
@@ -953,7 +953,7 @@
-
+
@@ -983,7 +983,7 @@
-
+
@@ -998,7 +998,7 @@
-
+
@@ -1013,7 +1013,7 @@
-
+
@@ -1058,7 +1058,7 @@
-
+
@@ -1073,7 +1073,7 @@
-
+
@@ -1088,7 +1088,7 @@
-
+
@@ -1103,7 +1103,7 @@
-
+
@@ -1118,7 +1118,7 @@
-
+
@@ -1133,7 +1133,7 @@
-
+
@@ -1148,7 +1148,7 @@
-
+
@@ -1163,7 +1163,7 @@
-
+
@@ -1178,7 +1178,7 @@
-
+
@@ -1193,7 +1193,7 @@
-
+
@@ -1208,7 +1208,7 @@
-
+
@@ -1223,7 +1223,7 @@
-
+
@@ -1238,7 +1238,7 @@
-
+
diff --git a/app/common/util/app_button_press/app_button_press.c b/app/common/util/app_button_press/app_button_press.c
index d73292904d..3bb3f23562 100644
--- a/app/common/util/app_button_press/app_button_press.c
+++ b/app/common/util/app_button_press/app_button_press.c
@@ -3,7 +3,7 @@
* @brief Button Press source code
*******************************************************************************
* # License
- * Copyright 2018 Silicon Laboratories Inc. www.silabs.com
+ * Copyright 2024 Silicon Laboratories Inc. www.silabs.com
*******************************************************************************
*
* SPDX-License-Identifier: Zlib
@@ -28,6 +28,7 @@
*
******************************************************************************/
+#include "sl_common.h"
#include "sl_sleeptimer.h"
#include "app_button_press.h"
#include "app_button_press_config.h"
diff --git a/app/flex/documentation/release-highlights.txt b/app/flex/documentation/release-highlights.txt
old mode 100644
new mode 100755
index 1bb8383a46..c6f286973b
--- a/app/flex/documentation/release-highlights.txt
+++ b/app/flex/documentation/release-highlights.txt
@@ -1,2 +1,2 @@
-Flex SDK 3.7.1.0
-- Targeted quality improvements and bug fixes
\ No newline at end of file
+Flex SDK 3.7.2.0
+- Targeted quality improvements and bug fixes.
\ No newline at end of file
diff --git a/app/flex/documentation/slFlex_docContent.xml b/app/flex/documentation/slFlex_docContent.xml
index f0c2dbb5a3..13317efa67 100644
--- a/app/flex/documentation/slFlex_docContent.xml
+++ b/app/flex/documentation/slFlex_docContent.xml
@@ -1,20 +1,20 @@
-
+
Includes detailed information on using the Silicon Labs Gecko Bootloader with Connect. It supplements the general Gecko Bootloader implementation information provided in UG489: Silicon Labs Gecko Bootloader User's Guide.
-
+
Describes using the Flex SDK for Wireless M-Bus development on EFR32 Wireless Geckos. Includes features and limitations as well as examples.
-
+
Explains how NVM3 can be used as non-volatile data storage in various protocol implementations.
@@ -22,7 +22,7 @@
-
+
Describes tokens and shows how to use them for non-volatile data storage in EmberZNet PRO and Silicon Labs Flex applications.
@@ -30,7 +30,7 @@
-
+
Describes how to lock and unlock the debug access of EFR32 Gecko Series 2 devices. Many aspects of the debug access, including the secure debug unlock are described. The Debug Challenge Interface (DCI) and Secure Engine (SE) Mailbox Interface for locking and unlocking debug access are also included.
@@ -38,7 +38,7 @@
-
+
Contains detailed information on configuring and using the Secure Boot with hardware Root of Trust and Secure Loader on Series 2 devices, including how to provision the signing key. This is a companion document to UG489: Silicon Labs Gecko Bootloader User's Guide.
@@ -46,7 +46,7 @@
-
+
Details on programming, provisioning, and configuring Series 2 devices in production environments. Covers Secure Engine Subsystem of Series 2 devices, which runs easily upgradeable Secure Engine (SE) or Virtual Secure Engine (VSE) firmware.
@@ -54,14 +54,14 @@
-
+
Describes the distinguishing features of different EFR32 families that are most relevant to porting proprietary wireless applications between them. Provides insight that is also helpful when selecting an initial target platform for proprietary wireless solutions.
-
+
How to program, provision, and configure the anti-tamper module on EFR32 Series 2 devices with Secure Vault.
@@ -69,21 +69,21 @@
-
+
Illustrates reducing power consumption in a Connect v3.x application using the sensor example.
-
+
Describes the radio configurator GUI for RAIL framework applications in Simplicity Studio 5. With it, you can create standard or custom radio configurations on which to run your RAIL-based applications. The role of each GUI item is explained.
-
+
How to authenticate an EFR32 Series 2 device with Secure Vault, using secure device certificates and signatures.
@@ -91,7 +91,7 @@
-
+
How to securely "wrap" keys in EFR32 Series 2 devices with Secure Vault, so they can be stored in non-volatile storage.
@@ -99,7 +99,7 @@
-
+
Describes how to provision and configure Series 2 devices through the DCI and SWD.
@@ -107,7 +107,7 @@
-
+
Describes how to integrate crypto functionality into applications using PSA Crypto compared to Mbed TLS.
@@ -115,7 +115,7 @@
-
+
Gecko Bootloader v2.x, introduced in GSDK 4.0, contains a number of changes compared to Gecko Bootloader v1.x. This document describes the differences between the versions, including how to configure the new Gecko Bootloader in Simplicity Studio 5.
@@ -123,14 +123,14 @@
-
+
Describes using the Flex SDK for 802.15.4 development on EFR32 wireless parts.
-
+
Describes how to initialize a piece of custom hardware (a 'device') based on the EFR32MG and EFR32FG families so that it interfaces correctly with a network stack. The same procedures can be used to restore devices whose settings have been corrupted or erased.
@@ -138,49 +138,49 @@
-
+
Describes using RAILTest to evaluate radio functionality, as well as peripherals, deep sleep states, etc. With it you can fully evaluate the receiving and transmitting performance and test RF functionality of development kit hardware or custom hardware.
-
+
Provides an overview and hyperlinks to all packaged documentation.
-
+
Provides basic information on configuring, building, and installing applications using Silicon Labs Connect and RAIL, the two development paths in the Silicon Labs Proprietary Flex SDK v3.x.
-
+
Contains a comprehensive list of APIs used to interface to the Silicon Labs Connect stack.
-
+
Contains a comprehensive list of APIs used to interface to the Silicon Labs RAIL library.
-
+
Lists compatibility requirements and sources for all software components in the development environment. Discusses the latest changes to the SiliconLabs Flex SDK, including added/deleted/deprecated features/API. Reviews fixed and known issues.
-
+
A detailed overview of the changes, additions, and fixes in the Gecko Platform components. The Gecko Platform includes EMLIB, EMDRV, RAIL Library, NVM3, and the component-based infrastructure.
@@ -188,7 +188,7 @@
-
+
Introduces some fundamental concepts of wireless networking. These concepts are referred to in other Fundamentals documents. If you are new to wireless networking, you should read this document first.
@@ -196,7 +196,7 @@
-
+
Introduces the security concepts that must be considered when implementing an Internet of Things (IoT) system. Using the ioXt Alliance's eight security principles as a structure, it clearly delineates the solutions Silicon Labs provides to support endpoint security and what you must do outside of the Silicon Labs framework.
@@ -204,7 +204,7 @@
-
+
Introduces bootloading for Silicon Labs networking devices. Discusses the Gecko Bootloader as well as legacy Ember and Bluetooth bootloaders, and describes the file formats used by each.
@@ -212,7 +212,7 @@
-
+
Introduces non-volatile data storage using flash and the three different storage implementations offered for Silicon Labs microcontrollers and SoCs: Simulated EEPROM, PS Store, and NVM3.
@@ -220,21 +220,21 @@
-
+
Describes the features and functions of the Silicon Labs Connect stack, including its device types, network topologies, and its 'building block' development methodology using plugins.
-
+
Describes the features and functions of Silicon Labs RAIL (Radio Abstraction Interface Layer). RAIL provides an intuitive, easily-customizable radio interface layer that is designed to support proprietary or standards-based wireless protocols.
-
+
Describes the four multiprotocol modes, discusses considerations when selecting protocols for multiprotocol implementations, and reviews the Radio Scheduler, a required component of a dynamic multiprotocol solution.
@@ -242,7 +242,7 @@
-
+
Describes how and when to use Simplicity Commander's Command-Line Interface.
@@ -250,7 +250,7 @@
-
+
Describes how to implement a dynamic multiprotocol solution.
@@ -258,91 +258,91 @@
-
+
Describes the functionality available in the RAILtest application.
-
+
Introduces the Connect User's Guide for the Flex SDK v3.x.
-
+
Introduces the IEEE 802.15.4 standard on which Connect v3.x is based.
-
+
Describes the architecture of the Silicon Labs Connect stack v3.x an how it implements IEEE 802.15.4.
-
+
Describes how to use components, callbacks, and events on top of the Gecko Platform application framework to configure features and application behavior.
-
+
Describes the process to implement a Connect-based application on top of one of the supported Real Time Operating Systems (RTOS).
-
+
Explains standalone (serial) and application (OTA) bootloader options available for use within Connect v3.x -based applications
-
+
Describes the features available in Connect v3.x to reduce power consumption. Using those features is described in AN1252: Building Low Power Networks with the Silicon Labs Connect Stack v3.x.
-
+
Describes how to run the Silicon Labs Connect stack in Network Co-Processor (NCP) mode, where the NCP runs on the EFR32 while the Host application and the Co-processor Communication daemon (CPCd) run on the Host device.
-
+
Introduces the long-range radio profile, describes its development, and examines underlying details that enable it to realize extended range. Instructions for using example applications are included.
-
+
Describes how to test long range performance on EFR32 Series 2 devices using Simplicity Studio 5 and Silicon Labs development hardware. Instructions for using example applications are included.
-
+
Provides an easy way to evaluate the link budget of the Wireless Gecko EFR32 devices using Silicon Labs RAIL (RAIL) by performing a range test between two nodes using Range Test, a standalone test application. The range test demo implements Packet Error Rate (PER) measurement.
-
+
Describes the high-level implementation of the Silicon Labs Gecko Bootloader for EFR32 SoCs and NCPs, and provides information on how to get started using the Gecko Bootloader with Silicon Labs wireless protocol stacks in GSDK 4.0 and higher.
diff --git a/app/flex/esf.properties b/app/flex/esf.properties
index e8741efd01..20fc97b856 100644
--- a/app/flex/esf.properties
+++ b/app/flex/esf.properties
@@ -3,8 +3,8 @@ id=com.silabs.stack.flex
label=Flex SDK
description=Flex Software Development Kit
-version=3.7.1.0
-prop.subLabel=Flex\\ 3.7.1.0
+version=3.7.2.0
+prop.subLabel=Flex\\ 3.7.2.0
# General properties are prepended with "prop."
prop.file.templatesFile=flex_production_templates.xml flex_demos_only_templates.xml flex_internal_templates.xml
diff --git a/app/flex/flex_demos_only_demos.xml b/app/flex/flex_demos_only_demos.xml
index 76c1e261be..db84284be5 100644
--- a/app/flex/flex_demos_only_demos.xml
+++ b/app/flex/flex_demos_only_demos.xml
@@ -5,7 +5,7 @@
-
+
@@ -15,7 +15,7 @@
-
+
diff --git a/app/flex/flex_production_demos.xml b/app/flex/flex_production_demos.xml
index 30bbd7eadd..d3b1dd99c4 100644
--- a/app/flex/flex_production_demos.xml
+++ b/app/flex/flex_production_demos.xml
@@ -5,7 +5,7 @@
-
+
@@ -15,7 +15,7 @@
-
+
@@ -25,7 +25,7 @@
-
+
@@ -35,7 +35,7 @@
-
+
@@ -45,7 +45,7 @@
-
+
@@ -55,7 +55,7 @@
-
+
@@ -65,7 +65,7 @@
-
+
@@ -75,7 +75,7 @@
-
+
@@ -85,7 +85,7 @@
-
+
@@ -95,7 +95,7 @@
-
+
@@ -105,7 +105,7 @@
-
+
@@ -115,7 +115,7 @@
-
+
@@ -125,7 +125,7 @@
-
+
@@ -135,7 +135,7 @@
-
+
@@ -145,7 +145,7 @@
-
+
@@ -155,7 +155,7 @@
-
+
@@ -165,7 +165,7 @@
-
+
@@ -175,7 +175,7 @@
-
+
@@ -185,7 +185,7 @@
-
+
@@ -195,7 +195,7 @@
-
+
@@ -205,7 +205,7 @@
-
+
@@ -215,7 +215,7 @@
-
+
@@ -225,7 +225,7 @@
-
+
@@ -235,7 +235,7 @@
-
+
@@ -245,7 +245,7 @@
-
+
@@ -255,7 +255,7 @@
-
+
@@ -265,7 +265,7 @@
-
+
@@ -275,7 +275,7 @@
-
+
@@ -285,7 +285,7 @@
-
+
@@ -295,7 +295,7 @@
-
+
@@ -305,7 +305,7 @@
-
+
@@ -315,7 +315,7 @@
-
+
@@ -325,7 +325,7 @@
-
+
@@ -335,7 +335,7 @@
-
+
@@ -345,7 +345,7 @@
-
+
@@ -355,7 +355,7 @@
-
+
@@ -365,18 +365,18 @@
-
+
-
+
Range Test BLE and IEEE802.15.4 with Bluetooth connectivity. It runs on top of Micrium OS RTOS and multiprotocol RAIL. This application demonstrates over the air range of the Silicon Labs boards. 5 predefined PHYs can be used for this: BLE: 125kbps, BLE: 500kbps, BLE: 1Mbps, BLE: 2Mbps, IEEE80215.4: 250kbps. This sample app can act as a Transmitter and a Receiver. The role can be selected in the LCD menu. Flashing this app into two separate boards makes it possible to test the features and specification of the radio. The sample also provides an example how the RAIL API can be used. A menu is displayed in the LCD, which allows the user to see the most important information about the settings and also change some of them. The left button navigates in the menu and the right button selects or changes options. The bottom line always shows what the buttons do in the particular context. In Tx Mode, the user can send packets. Packet length defined by the PHY and the number of packets to transmit (from 500 up to continuous) can be set. Output power can be set in the LCD menu, in 0.5dBm steps (power setpoint), between -15..+20dBm. Actual minimum and maximum power may vary in different frequencies as well as the power that is actually set by RAIL. The LCD menu informs the user about the setpoint and the actual power. In the LCD menu, the Power item displays the setpoint first, then actual value. In Rx Mode, the radio listens on the given predefined PHY and inspects the packets received. Packet Error Rate, Bit Error Rate and RSSI of the packets is displayed to inform about the quality of the transmission. Radio related events can be logged on UART on demand. CLI can be used to set and get configuration of the app, and to start and stop it. To get started with CLI send 'help' with a terminal. Wireless Gecko mobile app can also be used to control this application over Bluetooth. Currently MicriumOS and FreeRTOS is supported by this sample app. NOTE: Due to the higher current consumption of the continuous radio usage (especially in Rx Mode), it is not recommended to power the boards from a coin cell. Instead, a USB power bank can be used if portability is needed.
-
+
@@ -386,7 +386,7 @@
-
+
@@ -396,7 +396,7 @@
-
+
@@ -406,7 +406,7 @@
-
+
@@ -416,7 +416,7 @@
-
+
@@ -426,7 +426,7 @@
-
+
@@ -436,7 +436,7 @@
-
+
@@ -446,7 +446,7 @@
-
+
@@ -456,7 +456,7 @@
-
+
@@ -466,7 +466,7 @@
-
+
@@ -476,7 +476,7 @@
-
+
@@ -486,7 +486,7 @@
-
+
@@ -496,7 +496,7 @@
-
+
@@ -506,7 +506,7 @@
-
+
@@ -516,7 +516,7 @@
-
+
@@ -526,7 +526,7 @@
-
+
@@ -536,7 +536,7 @@
-
+
@@ -546,7 +546,7 @@
-
+
@@ -556,7 +556,7 @@
-
+
@@ -566,7 +566,7 @@
-
+
@@ -576,7 +576,7 @@
-
+
@@ -586,7 +586,7 @@
-
+
@@ -596,7 +596,7 @@
-
+
@@ -606,7 +606,7 @@
-
+
@@ -616,7 +616,7 @@
-
+
@@ -626,7 +626,7 @@
-
+
@@ -636,7 +636,7 @@
-
+
@@ -646,7 +646,7 @@
-
+
@@ -656,7 +656,7 @@
-
+
@@ -666,7 +666,7 @@
-
+
@@ -676,7 +676,7 @@
-
+
@@ -686,7 +686,7 @@
-
+
@@ -696,7 +696,7 @@
-
+
@@ -706,7 +706,7 @@
-
+
@@ -716,7 +716,7 @@
-
+
@@ -726,7 +726,7 @@
-
+
@@ -736,7 +736,7 @@
-
+
@@ -746,7 +746,7 @@
-
+
@@ -756,7 +756,7 @@
-
+
@@ -766,7 +766,7 @@
-
+
@@ -776,7 +776,7 @@
-
+
@@ -786,7 +786,7 @@
-
+
@@ -796,7 +796,7 @@
-
+
@@ -806,7 +806,7 @@
-
+
@@ -816,7 +816,7 @@
-
+
@@ -826,7 +826,7 @@
-
+
@@ -836,7 +836,7 @@
-
+
@@ -846,7 +846,7 @@
-
+
@@ -856,7 +856,7 @@
-
+
@@ -866,7 +866,7 @@
-
+
@@ -876,7 +876,7 @@
-
+
@@ -886,7 +886,7 @@
-
+
@@ -896,7 +896,7 @@
-
+
@@ -906,7 +906,7 @@
-
+
@@ -916,7 +916,7 @@
-
+
@@ -926,7 +926,7 @@
-
+
@@ -936,7 +936,7 @@
-
+
@@ -946,7 +946,7 @@
-
+
@@ -956,7 +956,7 @@
-
+
@@ -966,7 +966,7 @@
-
+
@@ -976,7 +976,7 @@
-
+
@@ -986,7 +986,7 @@
-
+
@@ -996,7 +996,7 @@
-
+
@@ -1006,7 +1006,7 @@
-
+
@@ -1016,7 +1016,7 @@
-
+
@@ -1026,7 +1026,7 @@
-
+
@@ -1036,7 +1036,7 @@
-
+
@@ -1046,7 +1046,7 @@
-
+
@@ -1056,7 +1056,7 @@
-
+
@@ -1066,7 +1066,7 @@
-
+
@@ -1076,7 +1076,7 @@
-
+
@@ -1086,7 +1086,7 @@
-
+
@@ -1096,7 +1096,7 @@
-
+
@@ -1106,7 +1106,7 @@
-
+
@@ -1116,7 +1116,7 @@
-
+
@@ -1126,7 +1126,7 @@
-
+
@@ -1136,7 +1136,7 @@
-
+
@@ -1146,7 +1146,7 @@
-
+
@@ -1156,7 +1156,7 @@
-
+
@@ -1166,7 +1166,7 @@
-
+
@@ -1176,7 +1176,7 @@
-
+
@@ -1186,7 +1186,7 @@
-
+
diff --git a/app/mcu_example/app_mcu.properties b/app/mcu_example/app_mcu.properties
index 6baee33efc..e9cc250282 100644
--- a/app/mcu_example/app_mcu.properties
+++ b/app/mcu_example/app_mcu.properties
@@ -3,9 +3,9 @@ id=com.silabs.sdk.mcu
label=32-bit MCU SDK
description=Silicon Labs 32-bit MCU SDK for EFM32 and EZR32
-version=6.6.1.0
+version=6.6.2.0
supportedParts=mcu.arm.efm32.* mcu.arm.ezr32.* .*wgm16.*
-prop.subLabel=MCU\\ 6.6.1.0
+prop.subLabel=MCU\\ 6.6.2.0
# General properties are prepended with "prop."
prop.file.templatesFile=mcu_production_templates.xml
diff --git a/app/mcu_example/documentation/release-highlights.txt b/app/mcu_example/documentation/release-highlights.txt
index 129f49e9b5..534de654d0 100644
--- a/app/mcu_example/documentation/release-highlights.txt
+++ b/app/mcu_example/documentation/release-highlights.txt
@@ -1,2 +1,2 @@
-32-Bit MCU SDK 6.6.1.0
+32-Bit MCU SDK 6.6.2.0
- Underlying platform changes only.
\ No newline at end of file
diff --git a/app/mcu_example/mcu_production_demos.xml b/app/mcu_example/mcu_production_demos.xml
index c9aba28acc..5d0dcfb378 100644
--- a/app/mcu_example/mcu_production_demos.xml
+++ b/app/mcu_example/mcu_production_demos.xml
@@ -5,7 +5,7 @@
-
+
@@ -16,7 +16,7 @@
-
+
@@ -27,7 +27,7 @@
-
+
@@ -38,7 +38,7 @@
-
+
@@ -49,7 +49,7 @@
-
+
@@ -61,7 +61,7 @@ This example shows how to use the Micrium OS network stack with the ETH periphe
-
+
@@ -73,7 +73,7 @@ This example shows how to use the Micrium OS network stack with the ETH periphe
-
+
@@ -84,7 +84,7 @@ You must have the Hall Effect Evaluation kit, Si72xx-WD-Kit, to make use of this
-
+
diff --git a/app/wisun/component/app_core/sl_wisun_app_core.c b/app/wisun/component/app_core/sl_wisun_app_core.c
index 3184bdc3e9..edd585128d 100644
--- a/app/wisun/component/app_core/sl_wisun_app_core.c
+++ b/app/wisun/component/app_core/sl_wisun_app_core.c
@@ -353,6 +353,7 @@ void sl_wisun_disconnected_event_hnd(sl_wisun_evt_t *evt)
__CHECK_FOR_STATUS(evt->evt.error.status);
_app_wisun_core_set_state(SL_WISUN_APP_CORE_STATE_NETWORK_DISCONNECTED);
+ _join_state = SL_WISUN_JOIN_STATE_DISCONNECTED;
}
/* Socket connection lost event handler*/
diff --git a/app/wisun/component/cli_util/sl_wisun_cli_settings.c b/app/wisun/component/cli_util/sl_wisun_cli_settings.c
index 0acded20da..0045391423 100644
--- a/app/wisun/component/cli_util/sl_wisun_cli_settings.c
+++ b/app/wisun/component/cli_util/sl_wisun_cli_settings.c
@@ -323,6 +323,12 @@ sl_status_t app_settings_set_string(const char *value_str,
entry_value_str = entry->value;
strncpy(entry_value_str, value_str, entry->value_size - 1);
entry_value_str[entry->value_size - 1] = '\0';
+ if (strlen(value_str) >= entry->value_size) {
+ printf("Warning: string is too long for %s.%s, truncated to \"%s\"\r\n",
+ app_settings_domain_str[entry->domain],
+ entry->key,
+ entry_value_str);
+ }
return SL_STATUS_OK;
}
diff --git a/app/wisun/component/ftp/config/sl_ftp_config.h b/app/wisun/component/ftp/config/sl_ftp_config.h
index 39189f8400..2caa23d835 100644
--- a/app/wisun/component/ftp/config/sl_ftp_config.h
+++ b/app/wisun/component/ftp/config/sl_ftp_config.h
@@ -91,10 +91,6 @@
// Default value 256 bytes
#define SL_TFTP_CLNT_STACK_SIZE_WORD 256UL
-// TFTP address storage size in bytes
-// Default value 20 bytes
-#define SL_TFTP_ADDR_SIZE 28UL
-
// TFTP Default remote host address string
// Default: "aabb:ccdd::eeff:0011:2233:4455" (dummy)
#define SL_TFTP_CLNT_DEFAULT_HOST "aabb:ccdd::eeff:0011:2233:4455"
diff --git a/app/wisun/component/ftp/sl_ftp.h b/app/wisun/component/ftp/sl_ftp.h
index 1ae652ab9f..9e408834da 100644
--- a/app/wisun/component/ftp/sl_ftp.h
+++ b/app/wisun/component/ftp/sl_ftp.h
@@ -271,17 +271,22 @@ int32_t sl_tftp_udp_sendto(int32_t sockid, const void *buff, uint32_t len, const
int32_t sl_tftp_udp_recvfrom(int32_t sockid, void *buff, uint32_t len, void *src_addr);
/**************************************************************************//**
- * @brief Get UDP address bytes
- * @details Create address bytes from host string and port
+ * @brief Get UDP address structure
+ * @details Allocate address structue and set host address and port
* @param[in] host Host string
* @param[in] port Port
- * @param[in,out] dst Destiantion ptr
- * @param[in] dst_size Destination size
+ * @return void * Address structure
*****************************************************************************/
-void sl_tftp_udp_get_addr_bytes(const char *host,
- uint16_t port,
- void * const dst,
- size_t dst_size);
+void * sl_tftp_udp_get_addr(const char *host,
+ uint16_t port);
+
+/**************************************************************************//**
+ * @brief Free address
+ * @details Release the allocated address strcutre
+ * @param[in] addr Address structure
+ *****************************************************************************/
+void sl_tftp_udp_free_addr(void *addr);
+
#endif
#ifdef __cplusplus
diff --git a/app/wisun/component/ftp/sl_tftp_clnt.c b/app/wisun/component/ftp/sl_tftp_clnt.c
index 2e0297e493..be19340a56 100644
--- a/app/wisun/component/ftp/sl_tftp_clnt.c
+++ b/app/wisun/component/ftp/sl_tftp_clnt.c
@@ -623,7 +623,7 @@ static void _rrq_hnd(sl_tftp_clnt_t * const clnt,
uint32_t timeout = 0UL;
uint16_t pkt_payload_size = 0U;
uint16_t block_num = 1U;
- static uint8_t host_addr[SL_TFTP_ADDR_SIZE] = { 0U };
+ void * host_addr = NULL;
int32_t res = SL_FTP_ERROR;
sock_id = sl_tftp_udp_socket_create();
@@ -632,7 +632,12 @@ static void _rrq_hnd(sl_tftp_clnt_t * const clnt,
return;
}
- sl_tftp_udp_get_addr_bytes(clnt->host, clnt->port, host_addr, SL_TFTP_ADDR_SIZE);
+ host_addr = sl_tftp_udp_get_addr(clnt->host, clnt->port);
+ if (host_addr == NULL) {
+ sl_tftp_socket_close(sock_id);
+ printf("[TFTP Address error]\n");
+ return;
+ }
pkt_payload_size = _build_packet(&clnt->packet, buff, buff_size);
(void) sl_tftp_udp_sendto(sock_id, buff, pkt_payload_size, host_addr);
@@ -685,7 +690,7 @@ static void _rrq_hnd(sl_tftp_clnt_t * const clnt,
timeout = 0UL;
}
-
+ sl_tftp_udp_free_addr(host_addr);
sl_tftp_socket_close(sock_id);
}
@@ -698,7 +703,7 @@ static void _wrq_hnd(sl_tftp_clnt_t * const clnt,
uint16_t pkt_payload_size = 0U;
uint16_t block_num = 0U;
uint16_t required_block_num = 0U;
- static uint8_t host_addr[SL_TFTP_ADDR_SIZE] = { 0U };
+ void * host_addr = NULL;
int32_t res = SL_FTP_ERROR;
uint8_t *ptr = NULL;
uint32_t remained_size = 0UL;
@@ -710,7 +715,12 @@ static void _wrq_hnd(sl_tftp_clnt_t * const clnt,
return;
}
- sl_tftp_udp_get_addr_bytes(clnt->host, clnt->port, host_addr, SL_TFTP_ADDR_SIZE);
+ host_addr = sl_tftp_udp_get_addr(clnt->host, clnt->port);
+ if (host_addr == NULL) {
+ sl_tftp_socket_close(sock_id);
+ printf("[TFTP Address error]\n");
+ return;
+ }
pkt_payload_size = _build_packet(&clnt->packet, buff, buff_size);
(void) sl_tftp_udp_sendto(sock_id, buff, pkt_payload_size, host_addr);
@@ -718,7 +728,6 @@ static void _wrq_hnd(sl_tftp_clnt_t * const clnt,
ptr = (uint8_t *) clnt->ext_data;
remained_size = clnt->ext_data_size;
required_block_num = remained_size / SL_TFTP_DATA_BLOCK_SIZE + 1U;
- sl_tftp_debug("Prepare transfer: 0x%p address, %lu bytes\n", ptr, remained_size);
while (timeout < SL_TFTP_CLNT_RECV_TIMEOUT_MS) {
sl_tftp_delay_ms(100UL);
@@ -740,7 +749,6 @@ static void _wrq_hnd(sl_tftp_clnt_t * const clnt,
if (clnt->packet.opcode == SL_TFTP_OPCODE_ACK) {
if (!remained_size && block_num == required_block_num) {
- sl_tftp_debug("Received last ack\n");
break;
}
// reset timeout counter
@@ -774,7 +782,7 @@ static void _wrq_hnd(sl_tftp_clnt_t * const clnt,
sl_tftp_dump_buff(ptr, data_size);
#endif
}
- sl_tftp_debug("Closing WRQ socket\n");
+ sl_tftp_udp_free_addr(host_addr);
sl_tftp_socket_close(sock_id);
}
@@ -801,9 +809,8 @@ static void _clnt_thr_fnc(void * args)
sl_tftp_delay_ms(100UL);
continue;
}
- sl_tftp_debug("TFTP Client started\n");
-
#if defined(SL_TFTP_DEBUG)
+ sl_tftp_debug("TFTP Client started\n");
sl_tftp_clnt_print_pkt(&clnt.packet);
#endif
@@ -818,8 +825,10 @@ static void _clnt_thr_fnc(void * args)
(void) osEventFlagsClear(clnt.evt_flags, SL_TFTP_EVT_ALL_MSK);
(void) osEventFlagsSet(clnt.evt_flags, SL_TFTP_EVT_OP_FINISHED_MSK);
- // sl_tftp_socket_close(sock_id);
+#if defined(SL_TFTP_DEBUG)
sl_tftp_debug("TFTP Client socket closed\n");
+#endif
+
sl_tftp_delay_ms(100UL);
}
}
diff --git a/app/wisun/component/ftp_posix_port/sl_wisun_ftp_posix_port.c b/app/wisun/component/ftp_posix_port/sl_wisun_ftp_posix_port.c
index 30bc10e7c4..63bb805f2f 100644
--- a/app/wisun/component/ftp_posix_port/sl_wisun_ftp_posix_port.c
+++ b/app/wisun/component/ftp_posix_port/sl_wisun_ftp_posix_port.c
@@ -39,6 +39,8 @@
#include "sl_wisun_app_core_util.h"
#include "sl_wisun_types.h"
#include "sl_wisun_api.h"
+#include "sl_wisun_trace_util.h"
+
#if SL_FTP_ENABLE_TFTP_PROTOCOL
#include "sl_tftp_clnt.h"
#endif
@@ -224,30 +226,31 @@ int32_t sl_tftp_udp_recvfrom(int32_t sockid, void *buff, uint32_t len, void *src
return recvfrom(sockid, buff, len, 0L, (struct sockaddr *)src_addr, &addr_len);
}
-void sl_tftp_udp_get_addr_bytes(const char *host,
- uint16_t port,
- void * const dst,
- size_t dst_size)
+
+void * sl_tftp_udp_get_addr(const char *host,
+ uint16_t port)
{
- sockaddr_in6_t waddr = { 0U };
+ sockaddr_in6_t *waddr = NULL;
- if (dst == NULL || !dst_size) {
- return;
+ waddr = (sockaddr_in6_t *)app_wisun_malloc(sizeof(sockaddr_in6_t));
+ if (waddr == NULL) {
+ return NULL;
}
- if (inet_pton(AF_INET6, host,
- &waddr.sin6_addr) == SOCKET_RETVAL_ERROR) {
- memset(dst, 0U, dst_size);
+ if (inet_pton(AF_INET6, host, &waddr->sin6_addr) == SOCKET_RETVAL_ERROR) {
+ app_wisun_free(waddr);
+ return NULL;
}
- waddr.sin6_family = AF_INET6;
- waddr.sin6_port = port;
+ waddr->sin6_family = AF_INET6;
+ waddr->sin6_port = port;
- if (dst_size < sizeof(sockaddr_in6_t)) {
- memset(dst, 0U, dst_size);
- } else {
- memcpy(dst, &waddr, sizeof(sockaddr_in6_t));
- }
+ return (void *)waddr;
}
+void sl_tftp_udp_free_addr(void *addr)
+{
+ app_wisun_free(addr);
+}
+
#endif
diff --git a/app/wisun/component/ping/sl_wisun_ping.c b/app/wisun/component/ping/sl_wisun_ping.c
index 2e3bb46de3..7cd6de1cd3 100644
--- a/app/wisun/component/ping/sl_wisun_ping.c
+++ b/app/wisun/component/ping/sl_wisun_ping.c
@@ -443,7 +443,7 @@ static void _ping_task_fnc(void *args)
req.remote_addr.sin6_family = AF_INET6;
req.remote_addr.sin6_port = htons(SL_WISUN_PING_ICMP_PORT);
- sockid = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMP);
+ sockid = socket(AF_INET6, SOCK_RAW | SOCK_NONBLOCK, IPPROTO_ICMP);
if (sockid == SOCKET_INVALID_ID) {
_prepare_and_push_failed_response(&resp, SL_WISUN_PING_STATUS_SOCKET_ERROR);
diff --git a/app/wisun/documentation/release-highlights.txt b/app/wisun/documentation/release-highlights.txt
old mode 100644
new mode 100755
index d82e99e924..67bb5ceb02
--- a/app/wisun/documentation/release-highlights.txt
+++ b/app/wisun/documentation/release-highlights.txt
@@ -1,2 +1,2 @@
-Wi-SUN SDK 1.9.0
-- Targeted quality improvements and bug fixes
\ No newline at end of file
+Wi-SUN SDK 1.10.0
+- Targeted quality improvements and bug fixes.
\ No newline at end of file
diff --git a/app/wisun/documentation/slWi-SUN_docContent.xml b/app/wisun/documentation/slWi-SUN_docContent.xml
index 5ccf800175..6903b427e0 100644
--- a/app/wisun/documentation/slWi-SUN_docContent.xml
+++ b/app/wisun/documentation/slWi-SUN_docContent.xml
@@ -1,6 +1,6 @@
-
+
Explains how NVM3 can be used as non-volatile data storage in various protocol implementations.
@@ -8,7 +8,7 @@
-
+
Describes how to integrate crypto functionality into applications using PSA Crypto compared to Mbed TLS.
@@ -16,7 +16,7 @@
-
+
Gecko Bootloader v2.x, introduced in GSDK 4.0, contains a number of changes compared to Gecko Bootloader v1.x. This document describes the differences between the versions, including how to configure the new Gecko Bootloader in Simplicity Studio 5.
@@ -24,63 +24,63 @@
-
+
Describes the test environment and methods for testing Wi-SUN network performance. The results are intended to provide guidance on design practices and principles as well as expected field performance results.
-
+
Describes how to use the Wi-SUN Network Performance Measurement Application from either the LCD output or the CLI, and includes suggestions for improving ping latency in a Wi-SUN network.
-
+
Provides an introduction to the Wi-SUN PHY Mode Switch feature using the RAILtest example application.
-
+
Explains how to program EFR32FG25 devices to enable the Wi-SUN concurrent detection feature.
-
+
Provides an overview and hyperlinks to all packaged documentation.
-
+
Contains a comprehensive list of APIs used to interface to the Silicon Labs Wi-SUN stack.
-
+
Reference for those developing applications using the Silicon Labs Wi-SUN SDK. The guide covers guidelines to develop an application on top of Silicon Labs Wi-SUN stack . The purpose of this document is to fill in the gaps between the Silicon Labs Wi-SUN Field Area Network (FAN) API reference, Gecko Platform references, and documentation for the target EFR32xG part.
-
+
Lists compatibility requirements and sources for all software components in the development environment. Discusses the latest changes to the SiliconLabs Wi-SUN SDK, including added/deleted/deprecated features/API. Reviews fixed and known issues.
-
+
A detailed overview of the changes, additions, and fixes in the Gecko Platform components. The Gecko Platform includes EMLIB, EMDRV, RAIL Library, NVM3, and the component-based infrastructure.
@@ -88,7 +88,7 @@
-
+
Introduces the security concepts that must be considered when implementing an Internet of Things (IoT) system. Using the ioXt Alliance's eight security principles as a structure, it clearly delineates the solutions Silicon Labs provides to support endpoint security and what you must do outside of the Silicon Labs framework.
@@ -96,7 +96,7 @@
-
+
Introduces bootloading for Silicon Labs networking devices. Discusses the Gecko Bootloader as well as legacy Ember and Bluetooth bootloaders, and describes the file formats used by each.
@@ -104,7 +104,7 @@
-
+
Introduces non-volatile data storage using flash and the three different storage implementations offered for Silicon Labs microcontrollers and SoCs: Simulated EEPROM, PS Store, and NVM3.
@@ -112,7 +112,7 @@
-
+
Describes how and when to use Simplicity Commander's Command-Line Interface.
@@ -120,7 +120,7 @@
-
+
Describes the high-level implementation of the Silicon Labs Gecko Bootloader for EFR32 SoCs and NCPs, and provides information on how to get started using the Gecko Bootloader with Silicon Labs wireless protocol stacks in GSDK 4.0 and higher.
diff --git a/app/wisun/esf.properties b/app/wisun/esf.properties
index 460fccc426..7f8ebdafae 100644
--- a/app/wisun/esf.properties
+++ b/app/wisun/esf.properties
@@ -3,8 +3,8 @@ id=com.silabs.stack.wisun
label=Wi-SUN
description=Silicon Labs Wi-SUN SDK
-version=1.9.0.0
-prop.subLabel=Wi-SUN\\ 1.9.0.0
+version=1.10.0.0
+prop.subLabel=Wi-SUN\\ 1.10.0.0
# General properties are prepended with "prop."
prop.file.templatesFile=wisun_production_templates.xml wisun_br_demos_templates.xml
diff --git a/app/wisun/wisun_br_demos_demos.xml b/app/wisun/wisun_br_demos_demos.xml
index 8963cf9644..9bc73943df 100644
--- a/app/wisun/wisun_br_demos_demos.xml
+++ b/app/wisun/wisun_br_demos_demos.xml
@@ -5,7 +5,7 @@
-
+
@@ -15,7 +15,7 @@
-
+
@@ -25,7 +25,7 @@
-
+
@@ -35,7 +35,7 @@
-
+
@@ -45,7 +45,7 @@
-
+
@@ -55,7 +55,7 @@
-
+
@@ -65,7 +65,7 @@
-
+
@@ -75,7 +75,7 @@
-
+
@@ -85,7 +85,7 @@
-
+
@@ -95,7 +95,7 @@
-
+
@@ -105,7 +105,7 @@
-
+
@@ -115,7 +115,7 @@
-
+
@@ -125,7 +125,7 @@
-
+
@@ -135,7 +135,7 @@
-
+
@@ -145,7 +145,7 @@
-
+
@@ -155,7 +155,7 @@
-
+
@@ -165,7 +165,7 @@
-
+
@@ -175,7 +175,7 @@
-
+
@@ -185,7 +185,7 @@
-
+
@@ -195,7 +195,7 @@
-
+
@@ -205,7 +205,7 @@
-
+
@@ -215,7 +215,7 @@
-
+
@@ -225,7 +225,7 @@
-
+
@@ -235,7 +235,7 @@
-
+
@@ -245,7 +245,7 @@
-
+
@@ -255,7 +255,7 @@
-
+
@@ -265,7 +265,7 @@
-
+
@@ -275,7 +275,7 @@
-
+
@@ -285,7 +285,7 @@
-
+
@@ -295,7 +295,7 @@
-
+
@@ -305,7 +305,7 @@
-
+
@@ -315,7 +315,7 @@
-
+
@@ -325,7 +325,7 @@
-
+
@@ -335,7 +335,7 @@
-
+
@@ -345,7 +345,7 @@
-
+
@@ -355,7 +355,7 @@
-
+
@@ -365,7 +365,7 @@
-
+
@@ -375,7 +375,7 @@
-
+
diff --git a/app/wisun/wisun_production_demos.xml b/app/wisun/wisun_production_demos.xml
index c88cff34ea..89e99abcb4 100644
--- a/app/wisun/wisun_production_demos.xml
+++ b/app/wisun/wisun_production_demos.xml
@@ -5,7 +5,7 @@
-
+
@@ -15,7 +15,7 @@
-
+
@@ -25,7 +25,7 @@
-
+
@@ -35,7 +35,7 @@
-
+
@@ -45,7 +45,7 @@
-
+
@@ -55,7 +55,7 @@
-
+
@@ -65,7 +65,7 @@
-
+
@@ -75,7 +75,7 @@
-
+
@@ -85,7 +85,7 @@
-
+
@@ -95,7 +95,7 @@
-
+
@@ -105,7 +105,7 @@
-
+
@@ -115,7 +115,7 @@
-
+
@@ -125,7 +125,7 @@
-
+
@@ -135,7 +135,7 @@
-
+
@@ -145,7 +145,7 @@
-
+
@@ -155,7 +155,7 @@
-
+
@@ -165,7 +165,7 @@
-
+
@@ -175,7 +175,7 @@
-
+
@@ -185,137 +185,137 @@
-
+
- The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN stack APIs. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
+ The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN LFN device. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
-
+
- The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN stack APIs. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
+ The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN LFN device. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
-
+
- The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN stack APIs. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
+ The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN LFN device. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
-
+
- The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN stack APIs. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
+ The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN LFN device. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
-
+
- The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN stack APIs. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
+ The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN LFN device. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
-
+
- The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN stack APIs. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
+ The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN LFN device. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
-
+
- The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN stack APIs. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
+ The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN LFN device. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
-
+
- The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN stack APIs. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
+ The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN LFN device. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
-
+
- The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN stack APIs. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
+ The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN LFN device. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
-
+
- The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN stack APIs. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
+ The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN LFN device. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
-
+
- The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN stack APIs. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
+ The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN LFN device. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
-
+
- The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN stack APIs. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
+ The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN LFN device. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
-
+
- The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN stack APIs. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
+ The Wi-SUN CLI (Command-Line Interface) sample application allows developers to easily evaluate the Wi-SUN LFN device. The Wi-SUN command line interface provides a serial interface to a number of the Wi-SUN stack functions. For example, it can be used to connect the Wi-SUN device to a Wi-SUN border router and exchange IP packets.
-
+
@@ -325,7 +325,7 @@
-
+
@@ -335,7 +335,7 @@
-
+
@@ -345,7 +345,7 @@
-
+
@@ -355,7 +355,7 @@
-
+
@@ -365,7 +365,7 @@
-
+
@@ -375,7 +375,7 @@
-
+
@@ -385,7 +385,7 @@
-
+
@@ -395,7 +395,7 @@
-
+
@@ -405,7 +405,7 @@
-
+
@@ -415,7 +415,7 @@
-
+
@@ -425,7 +425,7 @@
-
+
@@ -435,7 +435,7 @@
-
+
@@ -445,7 +445,7 @@
-
+
@@ -455,7 +455,7 @@
-
+
@@ -465,7 +465,7 @@
-
+
@@ -475,7 +475,7 @@
-
+
@@ -485,7 +485,7 @@
-
+
@@ -495,7 +495,7 @@
-
+
@@ -505,7 +505,7 @@
-
+
diff --git a/app/wisun/wisun_production_templates.xml b/app/wisun/wisun_production_templates.xml
index 180c7d1c12..544238a5c0 100644
--- a/app/wisun/wisun_production_templates.xml
+++ b/app/wisun/wisun_production_templates.xml
@@ -8,14 +8,14 @@
-
+
-
+
@@ -23,7 +23,7 @@
-
+
@@ -38,7 +38,7 @@
-
+
@@ -53,7 +53,7 @@
-
+
@@ -68,7 +68,7 @@
-
+
@@ -83,7 +83,7 @@
-
+
@@ -98,7 +98,7 @@
-
+
@@ -113,7 +113,7 @@
-
+
@@ -128,7 +128,7 @@
-
+
@@ -143,7 +143,7 @@
-
+
@@ -158,7 +158,7 @@
-
+
@@ -173,7 +173,7 @@
-
+
@@ -188,7 +188,7 @@
-
+
@@ -203,7 +203,7 @@
-
+
diff --git a/gecko_sdk.slcs b/gecko_sdk.slcs
index f067959bdd..9c19baba12 100644
--- a/gecko_sdk.slcs
+++ b/gecko_sdk.slcs
@@ -2,7 +2,7 @@ id: "gecko_sdk"
label: "Gecko SDK Suite"
description: |-
Gecko SDK Suite for EM3xx, EFM32, EZR32 and EFR32 microcontrollers and radios.
-sdk_version: "4.4.1"
+sdk_version: "4.4.2"
specification_version: 10
component_path:
- path: "app/amazon/component"
@@ -93,29 +93,31 @@ component_path:
toolchain_mapping: "platform/common/toolchain/toolchains.slct"
documentation:
- docset: gecko-platform
- version: "4.4.1"
+ version: "4.4.2"
- docset: mbed-tls
version: "3.5.0"
- docset: connect-stack
- version: "3.7.1"
+ version: "3.7.2"
- docset: mcu-bootloader
- version: "2.4.1"
+ version: "2.4.2"
- docset: openthread
- version: "2.4.1"
+ version: "2.4.2"
- docset: rail
- version: "2.16.1"
+ version: "2.16.2"
- docset: wifi/wf200/rtos
- version: "3.0.1"
+ version: "3.0.2"
- docset: wisun
- version: "1.9.0"
+ version: "1.10.0"
- docset: zigbee
- version: "7.4.1"
+ version: "7.4.2"
- docset: rtl-lib
- version: "7.0.1"
+ version: "7.1.0"
- docset: bluetooth
- version: "7.0.1"
+ version: "7.1.0"
- docset: protocol-usb
- version: "1.2.0"
+ version: "1.2.1"
+ - docset: machine-learning
+ version: "1.3.0"
upgrade_manifest:
- path: "app/common/upgrade.slcu"
- path: "hardware/upgrade.slcu"
diff --git a/hardware/board/component/bg22-pk6022a.slcc b/hardware/board/component/bg22-pk6022a.slcc
new file mode 100644
index 0000000000..f0ae8a7ec2
--- /dev/null
+++ b/hardware/board/component/bg22-pk6022a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: bg22_pk6022a
+- label: BG22-PK6022A
+- package: platform
+- description: Kit BSP support for the BG22 Direction Finding Pro Kit.
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_bg22-pk6022a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"BG22-PK6022A"'
+ - name: SL_KIT_REV
+ value: '"A00"'
+- tag:
+ - kit:opn:BG22-PK6022A
+ - kit:pn:PK6022
+ - kit:variant:A
+ - kit:revision:A00
diff --git a/hardware/board/component/brd2204a.slcc b/hardware/board/component/brd2204a.slcc
index dba76a54e0..205a60981a 100644
--- a/hardware/board/component/brd2204a.slcc
+++ b/hardware/board/component/brd2204a.slcc
@@ -16,6 +16,7 @@
- name: hardware_board_from_slstk3701a
- name: hardware_board_has_si70xx
- name: hardware_board_has_tempsensor
+ - name: hardware_board_has_rgb
- name: hardware_board_has_vcom
- name: hardware_board_has_hfxo_freq_50mhz
- name: hardware_board_has_hfxo
diff --git a/hardware/board/component/brd2204c.slcc b/hardware/board/component/brd2204c.slcc
index 41f2654806..7232903980 100644
--- a/hardware/board/component/brd2204c.slcc
+++ b/hardware/board/component/brd2204c.slcc
@@ -16,6 +16,7 @@
- name: hardware_board_from_slstk3701a
- name: hardware_board_has_si70xx
- name: hardware_board_has_tempsensor
+ - name: hardware_board_has_rgb
- name: hardware_board_has_vcom
- name: hardware_board_has_hfxo_freq_50mhz
- name: hardware_board_has_hfxo
diff --git a/hardware/board/component/brd2207a.slcc b/hardware/board/component/brd2207a.slcc
index d5d614b2a4..7f31f3ada8 100644
--- a/hardware/board/component/brd2207a.slcc
+++ b/hardware/board/component/brd2207a.slcc
@@ -14,6 +14,7 @@
- name: hardware_board_tb
- name: hardware_board_from_tb
- name: hardware_board_from_sltb009a
+ - name: hardware_board_has_rgb
- name: hardware_board_has_vcom
- name: hardware_board_has_hfxo_freq_50mhz
- name: hardware_board_has_hfxo
diff --git a/hardware/board/component/brd2601a.slcc b/hardware/board/component/brd2601a.slcc
index ab41c976b3..b9ec9f4611 100644
--- a/hardware/board/component/brd2601a.slcc
+++ b/hardware/board/component/brd2601a.slcc
@@ -16,6 +16,7 @@
- name: hardware_board_from_xg24-dk2601a
- name: hardware_board_has_si70xx
- name: hardware_board_has_tempsensor
+ - name: hardware_board_has_rgb
- name: hardware_board_has_vcom
- name: hardware_board_has_spiflash
- name: hardware_board_has_hfxo_freq_39mhz
diff --git a/hardware/board/component/brd2601b.slcc b/hardware/board/component/brd2601b.slcc
index ba5fe8243c..267951d13c 100644
--- a/hardware/board/component/brd2601b.slcc
+++ b/hardware/board/component/brd2601b.slcc
@@ -16,6 +16,7 @@
- name: hardware_board_from_xg24-dk2601b
- name: hardware_board_has_si70xx
- name: hardware_board_has_tempsensor
+ - name: hardware_board_has_rgb
- name: hardware_board_has_vcom
- name: hardware_board_has_spiflash
- name: hardware_board_has_hfxo_freq_39mhz
diff --git a/hardware/board/component/brd2603a.slcc b/hardware/board/component/brd2603a.slcc
index babd9dd641..8f1f7f59d5 100644
--- a/hardware/board/component/brd2603a.slcc
+++ b/hardware/board/component/brd2603a.slcc
@@ -18,6 +18,7 @@
- name: hardware_board_from_zwave-pk800b
- name: hardware_board_has_si70xx
- name: hardware_board_has_tempsensor
+ - name: hardware_board_has_rgb
- name: hardware_board_has_vcom
- name: hardware_board_has_spiflash
- name: hardware_board_has_lfxo
diff --git a/hardware/board/component/brd4001a.slcc b/hardware/board/component/brd4001a.slcc
index d4bcaa4bb1..cb80210b16 100644
--- a/hardware/board/component/brd4001a.slcc
+++ b/hardware/board/component/brd4001a.slcc
@@ -18,8 +18,8 @@
- name: SL_BOARD_NAME
value: '"BRD4001A"'
- name: SL_BOARD_REV
- value: '"A03"'
+ value: '"A02"'
- tag:
- board:pn:BRD4001
- board:variant:A
- - board:revision:A03
+ - board:revision:A02
diff --git a/hardware/board/component/brd4002a.slcc b/hardware/board/component/brd4002a.slcc
index 86c2fb401e..83de8b2ddd 100644
--- a/hardware/board/component/brd4002a.slcc
+++ b/hardware/board/component/brd4002a.slcc
@@ -11,10 +11,14 @@
- name: hardware_board_mainboard_wstk
- name: hardware_board_mainboard
- name: hardware_board_from_wmb
- - name: hardware_board_from_slwmb4002a
- recommends: []
- template_contribution: []
+- define:
+ - name: SL_BOARD_NAME
+ value: '"BRD4002A"'
+ - name: SL_BOARD_REV
+ value: '"A06"'
- tag:
- board:pn:BRD4002
- board:variant:A
- - board:revision:A02
+ - board:revision:A06
diff --git a/hardware/board/component/brd4200a.slcc b/hardware/board/component/brd4200a.slcc
index 31e6d1f1e0..e2eb2e3933 100644
--- a/hardware/board/component/brd4200a.slcc
+++ b/hardware/board/component/brd4200a.slcc
@@ -17,6 +17,7 @@
- name: hardware_board_from_slwrb4200a
- name: hardware_board_has_si70xx
- name: hardware_board_has_tempsensor
+ - name: hardware_board_has_rgb
- name: hardware_board_has_rfswitch_zwave
- name: hardware_board_has_vcom
- name: hardware_board_has_rfswitch
diff --git a/hardware/board/component/brd4202a.slcc b/hardware/board/component/brd4202a.slcc
index 3df6aa9c07..e85684afb4 100644
--- a/hardware/board/component/brd4202a.slcc
+++ b/hardware/board/component/brd4202a.slcc
@@ -18,6 +18,7 @@
- name: hardware_board_from_slwstk6050a
- name: hardware_board_has_si70xx
- name: hardware_board_has_tempsensor
+ - name: hardware_board_has_rgb
- name: hardware_board_has_vcom
- name: hardware_board_supports_rf_band_868
- name: hardware_board_supports_rf_band_914
diff --git a/hardware/board/component/brd4203a.slcc b/hardware/board/component/brd4203a.slcc
index 94a37fd1ee..d5d12f4670 100644
--- a/hardware/board/component/brd4203a.slcc
+++ b/hardware/board/component/brd4203a.slcc
@@ -16,6 +16,7 @@
- name: hardware_board_from_stk
- name: hardware_board_has_si70xx
- name: hardware_board_has_tempsensor
+ - name: hardware_board_has_rgb
- name: hardware_board_has_vcom
- name: hardware_board_has_spiflash
- name: hardware_board_has_hfxo_freq_39mhz
diff --git a/hardware/board/component/brd4205a.slcc b/hardware/board/component/brd4205a.slcc
index 9f69b80bde..cb3d6e4d33 100644
--- a/hardware/board/component/brd4205a.slcc
+++ b/hardware/board/component/brd4205a.slcc
@@ -16,6 +16,7 @@
- name: hardware_board_from_stk
- name: hardware_board_has_si70xx
- name: hardware_board_has_tempsensor
+ - name: hardware_board_has_rgb
- name: hardware_board_has_vcom
- name: hardware_board_has_spiflash
- name: hardware_board_supports_rf_band_868
diff --git a/hardware/board/component/brd4205b.slcc b/hardware/board/component/brd4205b.slcc
index 3c9e1d8fc2..9a4aaeecf9 100644
--- a/hardware/board/component/brd4205b.slcc
+++ b/hardware/board/component/brd4205b.slcc
@@ -19,6 +19,7 @@
- name: hardware_board_from_zwave-pk800b
- name: hardware_board_has_si70xx
- name: hardware_board_has_tempsensor
+ - name: hardware_board_has_rgb
- name: hardware_board_has_vcom
- name: hardware_board_has_spiflash
- name: hardware_board_supports_rf_band_868
diff --git a/hardware/board/component/brd4207a.slcc b/hardware/board/component/brd4207a.slcc
index 0a4aaf68c1..1c7cb000a0 100644
--- a/hardware/board/component/brd4207a.slcc
+++ b/hardware/board/component/brd4207a.slcc
@@ -19,6 +19,7 @@
- name: hardware_board_from_slwstk6050c
- name: hardware_board_has_si70xx
- name: hardware_board_has_tempsensor
+ - name: hardware_board_has_rgb
- name: hardware_board_has_vcom
- name: hardware_board_supports_rf_band_868
- name: hardware_board_supports_rf_band_914
diff --git a/hardware/board/component/brd4209a.slcc b/hardware/board/component/brd4209a.slcc
index 784ebc4475..ab23f4ea2d 100644
--- a/hardware/board/component/brd4209a.slcc
+++ b/hardware/board/component/brd4209a.slcc
@@ -16,6 +16,7 @@
- name: hardware_board_from_stk
- name: hardware_board_has_si70xx
- name: hardware_board_has_tempsensor
+ - name: hardware_board_has_rgb
- name: hardware_board_has_vcom
- name: hardware_board_has_spiflash
- name: hardware_board_has_hfxo_freq_39mhz
diff --git a/hardware/board/component/brd4328a.slcc b/hardware/board/component/brd4328a.slcc
index 36e0fc1d4e..f15ca6c8fe 100644
--- a/hardware/board/component/brd4328a.slcc
+++ b/hardware/board/component/brd4328a.slcc
@@ -17,6 +17,7 @@
- name: hardware_board_from_fgm230-rb4328a
- name: hardware_board_has_si70xx
- name: hardware_board_has_tempsensor
+ - name: hardware_board_has_rgb
- name: hardware_board_has_vcom
- name: hardware_board_has_spiflash
- name: hardware_board_supports_rf_band_868
diff --git a/hardware/board/component/brd4328b.slcc b/hardware/board/component/brd4328b.slcc
new file mode 100644
index 0000000000..0bc82b3cbd
--- /dev/null
+++ b/hardware/board/component/brd4328b.slcc
@@ -0,0 +1,81 @@
+!!omap
+- id: brd4328b
+- label: BRD4328B
+- package: platform
+- description: Board support for BRD4328B.
+- category: Platform|Board|Radio Board
+- quality: production
+- requires:
+ - name: fgm230sa27hgn
+ - name: brd4328b_config
+ - name: hardware_board_mainboard
+- provides:
+ - name: brd4328b
+ - name: hardware_board
+ - name: hardware_board_rb
+ - name: hardware_board_from_stk
+ - name: hardware_board_from_fgm230-rb4328b
+ - name: hardware_board_has_si70xx
+ - name: hardware_board_has_tempsensor
+ - name: hardware_board_has_rgb
+ - name: hardware_board_has_vcom
+ - name: hardware_board_has_spiflash
+ - name: hardware_board_supports_rf_band_868
+ - name: hardware_board_supports_rf_band_914
+ - name: hardware_board_supports_rf_band_924
+ - name: hardware_board_supports_3_rf_bands
+ - name: hardware_board_default_rf_band
+ - name: hardware_board_default_rf_band_868
+- recommends:
+ - id: brd4002a
+ - id: iostream_eusart
+ instance:
+ - vcom
+ - id: bootloader_uart_driver
+ - id: i2cspm
+ instance:
+ - sensor
+ - id: ls013b7dh03
+ - id: memlcd_usart
+ - id: simple_led
+ instance:
+ - led0
+ - led1
+ - led2
+ - led3
+ - led4
+ - id: simple_button
+ instance:
+ - btn0
+ - btn1
+ - id: mx25_flash_shutdown_usart
+ - id: bootloader_spi_controller_usart_driver
+ - id: bootloader_spi_peripheral_usart_driver
+- template_contribution:
+ - name: board_default_init
+ value: sl_board_disable_vcom()
+- define:
+ - name: SL_BOARD_NAME
+ value: '"BRD4328B"'
+ - name: SL_BOARD_REV
+ value: '"A00"'
+ - name: HARDWARE_BOARD_SUPPORTS_RF_BAND_868
+ - name: HARDWARE_BOARD_SUPPORTS_RF_BAND_914
+ - name: HARDWARE_BOARD_SUPPORTS_RF_BAND_924
+ - name: HARDWARE_BOARD_SUPPORTS_3_RF_BANDS
+ - name: HARDWARE_BOARD_DEFAULT_RF_BAND_868
+- tag:
+ - board:pn:BRD4328
+ - board:variant:B
+ - board:revision:A00
+ - board:device:fgm230sa27hgn
+ - hardware:has:vcom
+ - hardware:has:pti
+ - hardware:has:sensor:si7021
+ - hardware:has:display:ls013b7dh03
+ - hardware:has:led:5
+ - hardware:has:button:2
+ - hardware:has:memory:spi:mx25r8035f
+ - hardware:has:exp_header:spi
+ - hardware:has:exp_header:uart
+ - hardware:has:exp_header:i2c
diff --git a/hardware/board/component/fg25-pk6011a.slcc b/hardware/board/component/fg25-pk6011a.slcc
new file mode 100644
index 0000000000..fdebcbf2e9
--- /dev/null
+++ b/hardware/board/component/fg25-pk6011a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: fg25_pk6011a
+- label: FG25-PK6011A
+- package: platform
+- description: Kit BSP support for the FG25 US/Japan Pro Kit.
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_fg25-pk6011a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"FG25-PK6011A"'
+ - name: SL_KIT_REV
+ value: '"A02"'
+- tag:
+ - kit:opn:FG25-PK6011A
+ - kit:pn:PK6011
+ - kit:variant:A
+ - kit:revision:A02
diff --git a/hardware/board/component/fg25-pk6012a.slcc b/hardware/board/component/fg25-pk6012a.slcc
new file mode 100644
index 0000000000..3aeb6643f8
--- /dev/null
+++ b/hardware/board/component/fg25-pk6012a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: fg25_pk6012a
+- label: FG25-PK6012A
+- package: platform
+- description: Kit BSP support for the FG25 RoW Pro Kit.
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_fg25-pk6012a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"FG25-PK6012A"'
+ - name: SL_KIT_REV
+ value: '"A02"'
+- tag:
+ - kit:opn:FG25-PK6012A
+ - kit:pn:PK6012
+ - kit:variant:A
+ - kit:revision:A02
diff --git a/hardware/board/component/fg25-pk6013a.slcc b/hardware/board/component/fg25-pk6013a.slcc
new file mode 100644
index 0000000000..970fa9ca84
--- /dev/null
+++ b/hardware/board/component/fg25-pk6013a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: fg25_pk6013a
+- label: FG25-PK6013A
+- package: platform
+- description: Kit BSP support for the FG25-EFF01 US/Japan Pro Kit.
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_fg25-pk6013a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"FG25-PK6013A"'
+ - name: SL_KIT_REV
+ value: '"A00"'
+- tag:
+ - kit:opn:FG25-PK6013A
+ - kit:pn:PK6013
+ - kit:variant:A
+ - kit:revision:A00
diff --git a/hardware/board/component/fg25-pk6014a.slcc b/hardware/board/component/fg25-pk6014a.slcc
new file mode 100644
index 0000000000..08737e37c4
--- /dev/null
+++ b/hardware/board/component/fg25-pk6014a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: fg25_pk6014a
+- label: FG25-PK6014A
+- package: platform
+- description: Kit BSP support for the FG25-EFF01 RoW Pro Kit.
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_fg25-pk6014a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"FG25-PK6014A"'
+ - name: SL_KIT_REV
+ value: '"A00"'
+- tag:
+ - kit:opn:FG25-PK6014A
+ - kit:pn:PK6014
+ - kit:variant:A
+ - kit:revision:A00
diff --git a/hardware/board/component/fgm230-rb4328b.slcc b/hardware/board/component/fgm230-rb4328b.slcc
new file mode 100644
index 0000000000..01843ebe41
--- /dev/null
+++ b/hardware/board/component/fgm230-rb4328b.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: fgm230_rb4328b
+- label: FGM230-RB4328B
+- package: platform
+- description: Kit BSP support for the FGM230SA Module Radio Board.
+- category: Platform|Board|Kit|Radio Board
+- quality: production
+- requires:
+ - name: hardware_board_from_fgm230-rb4328b
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_rb
+- define:
+ - name: SL_KIT_NAME
+ value: '"FGM230-RB4328B"'
+ - name: SL_KIT_REV
+ value: '"A00"'
+- tag:
+ - kit:opn:FGM230-RB4328B
+ - kit:pn:RB4328
+ - kit:variant:B
+ - kit:revision:A00
diff --git a/hardware/board/component/slwstk6000b.slcc b/hardware/board/component/slwstk6000b.slcc
index 6a3c641b1e..e4ce62a6cf 100644
--- a/hardware/board/component/slwstk6000b.slcc
+++ b/hardware/board/component/slwstk6000b.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6000b
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6000B"'
- name: SL_KIT_REV
- value: '"B05"'
+ value: '"C00"'
- tag:
- kit:opn:SLWSTK6000B
- kit:pn:WSTK6000
- kit:variant:B
- - kit:revision:B05
+ - kit:revision:C00
diff --git a/hardware/board/component/slwstk6005a.slcc b/hardware/board/component/slwstk6005a.slcc
index 69d6145769..c438e42259 100644
--- a/hardware/board/component/slwstk6005a.slcc
+++ b/hardware/board/component/slwstk6005a.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6005a
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6005A"'
- name: SL_KIT_REV
- value: '"A04"'
+ value: '"B00"'
- tag:
- kit:opn:SLWSTK6005A
- kit:pn:WSTK6005
- kit:variant:A
- - kit:revision:A04
+ - kit:revision:B00
diff --git a/hardware/board/component/slwstk6006a.slcc b/hardware/board/component/slwstk6006a.slcc
index 07093436de..26d92739a3 100644
--- a/hardware/board/component/slwstk6006a.slcc
+++ b/hardware/board/component/slwstk6006a.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6006a
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6006A"'
- name: SL_KIT_REV
- value: '"B06"'
+ value: '"C01"'
- tag:
- kit:opn:SLWSTK6006A
- kit:pn:WSTK6006
- kit:variant:A
- - kit:revision:B06
+ - kit:revision:C01
diff --git a/hardware/board/component/slwstk6007a.slcc b/hardware/board/component/slwstk6007a.slcc
index b3cbdd2cdc..f82a5258d0 100644
--- a/hardware/board/component/slwstk6007a.slcc
+++ b/hardware/board/component/slwstk6007a.slcc
@@ -7,7 +7,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6007a
- provides:
- name: hardware_kit
@@ -16,9 +16,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6007A"'
- name: SL_KIT_REV
- value: '"A00"'
+ value: '"A01"'
- tag:
- kit:opn:SLWSTK6007A
- kit:pn:WSTK6007
- kit:variant:A
- - kit:revision:A00
+ - kit:revision:A01
diff --git a/hardware/board/component/slwstk6020b.slcc b/hardware/board/component/slwstk6020b.slcc
index 08eed96c8a..774aa9a09c 100644
--- a/hardware/board/component/slwstk6020b.slcc
+++ b/hardware/board/component/slwstk6020b.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6020b
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6020B"'
- name: SL_KIT_REV
- value: '"A05"'
+ value: '"B00"'
- tag:
- kit:opn:SLWSTK6020B
- kit:pn:WSTK6020
- kit:variant:B
- - kit:revision:A05
+ - kit:revision:B00
diff --git a/hardware/board/component/slwstk6021a.slcc b/hardware/board/component/slwstk6021a.slcc
index fee145f113..a4f9cd1fb2 100644
--- a/hardware/board/component/slwstk6021a.slcc
+++ b/hardware/board/component/slwstk6021a.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6021a
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6021A"'
- name: SL_KIT_REV
- value: '"A04"'
+ value: '"B00"'
- tag:
- kit:opn:SLWSTK6021A
- kit:pn:WSTK6021
- kit:variant:A
- - kit:revision:A04
+ - kit:revision:B00
diff --git a/hardware/board/component/slwstk6023a.slcc b/hardware/board/component/slwstk6023a.slcc
index b9dbe55f5e..80b22868dc 100644
--- a/hardware/board/component/slwstk6023a.slcc
+++ b/hardware/board/component/slwstk6023a.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6023a
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6023A"'
- name: SL_KIT_REV
- value: '"A03"'
+ value: '"B00"'
- tag:
- kit:opn:SLWSTK6023A
- kit:pn:WSTK6023
- kit:variant:A
- - kit:revision:A03
+ - kit:revision:B00
diff --git a/hardware/board/component/slwstk6050b.slcc b/hardware/board/component/slwstk6050b.slcc
index 1c0f28b5fe..b6d39282b1 100644
--- a/hardware/board/component/slwstk6050b.slcc
+++ b/hardware/board/component/slwstk6050b.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6050b
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6050B"'
- name: SL_KIT_REV
- value: '"A01"'
+ value: '"B00"'
- tag:
- kit:opn:SLWSTK6050B
- kit:pn:WSTK6050
- kit:variant:B
- - kit:revision:A01
+ - kit:revision:B00
diff --git a/hardware/board/component/slwstk6050c.slcc b/hardware/board/component/slwstk6050c.slcc
new file mode 100644
index 0000000000..e1fc437f65
--- /dev/null
+++ b/hardware/board/component/slwstk6050c.slcc
@@ -0,0 +1,23 @@
+!!omap
+- id: slwstk6050c
+- label: SLWSTK6050C
+- package: platform
+- description: Kit BSP support for the Z-Wave 700 Starter Kit.
+- category: Platform|Board|Kit|Wireless Starter Kit
+- quality: production
+- requires:
+ - name: brd4002a
+ - name: hardware_board_from_slwstk6050c
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_stk
+- define:
+ - name: SL_KIT_NAME
+ value: '"SLWSTK6050C"'
+ - name: SL_KIT_REV
+ value: '"A00"'
+- tag:
+ - kit:opn:SLWSTK6050C
+ - kit:pn:WSTK6050
+ - kit:variant:C
+ - kit:revision:A00
diff --git a/hardware/board/component/slwstk6061b.slcc b/hardware/board/component/slwstk6061b.slcc
index ec3a2d5352..d7406a760d 100644
--- a/hardware/board/component/slwstk6061b.slcc
+++ b/hardware/board/component/slwstk6061b.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6061b
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6061B"'
- name: SL_KIT_REV
- value: '"A04"'
+ value: '"B00"'
- tag:
- kit:opn:SLWSTK6061B
- kit:pn:WSTK6061
- kit:variant:B
- - kit:revision:A04
+ - kit:revision:B00
diff --git a/hardware/board/component/slwstk6063b.slcc b/hardware/board/component/slwstk6063b.slcc
index 4b31deebdd..a9461ebb4b 100644
--- a/hardware/board/component/slwstk6063b.slcc
+++ b/hardware/board/component/slwstk6063b.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6063b
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6063B"'
- name: SL_KIT_REV
- value: '"A03"'
+ value: '"B00"'
- tag:
- kit:opn:SLWSTK6063B
- kit:pn:WSTK6063
- kit:variant:B
- - kit:revision:A03
+ - kit:revision:B00
diff --git a/hardware/board/component/slwstk6065b.slcc b/hardware/board/component/slwstk6065b.slcc
index 287af1a036..fe9c2ff364 100644
--- a/hardware/board/component/slwstk6065b.slcc
+++ b/hardware/board/component/slwstk6065b.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6065b
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6065B"'
- name: SL_KIT_REV
- value: '"A03"'
+ value: '"B01"'
- tag:
- kit:opn:SLWSTK6065B
- kit:pn:WSTK6065
- kit:variant:B
- - kit:revision:A03
+ - kit:revision:B01
diff --git a/hardware/board/component/slwstk6101d.slcc b/hardware/board/component/slwstk6101d.slcc
index 4e146c5175..899bb96612 100644
--- a/hardware/board/component/slwstk6101d.slcc
+++ b/hardware/board/component/slwstk6101d.slcc
@@ -7,7 +7,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6101d
- provides:
- name: hardware_kit
@@ -16,9 +16,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6101D"'
- name: SL_KIT_REV
- value: '"A04"'
+ value: '"B00"'
- tag:
- kit:opn:SLWSTK6101D
- kit:pn:WSTK6101
- kit:variant:D
- - kit:revision:A04
+ - kit:revision:B00
diff --git a/hardware/board/component/slwstk6102a.slcc b/hardware/board/component/slwstk6102a.slcc
index 035066b4f1..4bb2a3327b 100644
--- a/hardware/board/component/slwstk6102a.slcc
+++ b/hardware/board/component/slwstk6102a.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6102a
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6102A"'
- name: SL_KIT_REV
- value: '"B00"'
+ value: '"C00"'
- tag:
- kit:opn:SLWSTK6102A
- kit:pn:WSTK6102
- kit:variant:A
- - kit:revision:B00
+ - kit:revision:C00
diff --git a/hardware/board/component/slwstk6103a.slcc b/hardware/board/component/slwstk6103a.slcc
index 052d6ac36a..71cfa32614 100644
--- a/hardware/board/component/slwstk6103a.slcc
+++ b/hardware/board/component/slwstk6103a.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6103a
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6103A"'
- name: SL_KIT_REV
- value: '"A07"'
+ value: '"B01"'
- tag:
- kit:opn:SLWSTK6103A
- kit:pn:WSTK6103
- kit:variant:A
- - kit:revision:A07
+ - kit:revision:B01
diff --git a/hardware/board/component/slwstk6104a.slcc b/hardware/board/component/slwstk6104a.slcc
index a721175499..6564fda4d2 100644
--- a/hardware/board/component/slwstk6104a.slcc
+++ b/hardware/board/component/slwstk6104a.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6104a
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6104A"'
- name: SL_KIT_REV
- value: '"A02"'
+ value: '"B00"'
- tag:
- kit:opn:SLWSTK6104A
- kit:pn:WSTK6104
- kit:variant:A
- - kit:revision:A02
+ - kit:revision:B00
diff --git a/hardware/board/component/slwstk6220a.slcc b/hardware/board/component/slwstk6220a.slcc
index a7ae455970..6d1891d28c 100644
--- a/hardware/board/component/slwstk6220a.slcc
+++ b/hardware/board/component/slwstk6220a.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6220a
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6220A"'
- name: SL_KIT_REV
- value: '"D01"'
+ value: '"E00"'
- tag:
- kit:opn:SLWSTK6220A
- kit:pn:WSTK6220
- kit:variant:A
- - kit:revision:D01
+ - kit:revision:E00
diff --git a/hardware/board/component/slwstk6222a.slcc b/hardware/board/component/slwstk6222a.slcc
index fe70b9d677..974f6ade88 100644
--- a/hardware/board/component/slwstk6222a.slcc
+++ b/hardware/board/component/slwstk6222a.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6222a
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6222A"'
- name: SL_KIT_REV
- value: '"D02"'
+ value: '"E01"'
- tag:
- kit:opn:SLWSTK6222A
- kit:pn:WSTK6222
- kit:variant:A
- - kit:revision:D02
+ - kit:revision:E01
diff --git a/hardware/board/component/slwstk6224a.slcc b/hardware/board/component/slwstk6224a.slcc
index d990301de3..aa3ce54e62 100644
--- a/hardware/board/component/slwstk6224a.slcc
+++ b/hardware/board/component/slwstk6224a.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6224a
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6224A"'
- name: SL_KIT_REV
- value: '"D01"'
+ value: '"E00"'
- tag:
- kit:opn:SLWSTK6224A
- kit:pn:WSTK6224
- kit:variant:A
- - kit:revision:D01
+ - kit:revision:E00
diff --git a/hardware/board/component/slwstk6240a.slcc b/hardware/board/component/slwstk6240a.slcc
index abc2bd0a8d..11bdd76b72 100644
--- a/hardware/board/component/slwstk6240a.slcc
+++ b/hardware/board/component/slwstk6240a.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6240a
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6240A"'
- name: SL_KIT_REV
- value: '"D01"'
+ value: '"E00"'
- tag:
- kit:opn:SLWSTK6240A
- kit:pn:WSTK6240
- kit:variant:A
- - kit:revision:D01
+ - kit:revision:E00
diff --git a/hardware/board/component/slwstk6242a.slcc b/hardware/board/component/slwstk6242a.slcc
index ded1864b81..9d335cfd86 100644
--- a/hardware/board/component/slwstk6242a.slcc
+++ b/hardware/board/component/slwstk6242a.slcc
@@ -6,7 +6,7 @@
- category: Platform|Board|Kit|Wireless Starter Kit
- quality: production
- requires:
- - name: brd4001a
+ - name: brd4002a
- name: hardware_board_from_slwstk6242a
- provides:
- name: hardware_kit
@@ -15,9 +15,9 @@
- name: SL_KIT_NAME
value: '"SLWSTK6242A"'
- name: SL_KIT_REV
- value: '"D01"'
+ value: '"E00"'
- tag:
- kit:opn:SLWSTK6242A
- kit:pn:WSTK6242
- kit:variant:A
- - kit:revision:D01
+ - kit:revision:E00
diff --git a/hardware/board/component/wi-sun-pk6015a.slcc b/hardware/board/component/wi-sun-pk6015a.slcc
new file mode 100644
index 0000000000..7d7d361abe
--- /dev/null
+++ b/hardware/board/component/wi-sun-pk6015a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: wi_sun_pk6015a
+- label: WI-SUN-PK6015A
+- package: platform
+- description: Kit BSP support for the Wi-SUN FAN RoW Pro Kit.
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_wi-sun-pk6015a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"WI-SUN-PK6015A"'
+ - name: SL_KIT_REV
+ value: '"A01"'
+- tag:
+ - kit:opn:Wi-SUN-PK6015A
+ - kit:pn:PK6015
+ - kit:variant:A
+ - kit:revision:A01
diff --git a/hardware/board/component/wi-sun-pk6016a.slcc b/hardware/board/component/wi-sun-pk6016a.slcc
new file mode 100644
index 0000000000..1e5449b864
--- /dev/null
+++ b/hardware/board/component/wi-sun-pk6016a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: wi_sun_pk6016a
+- label: WI-SUN-PK6016A
+- package: platform
+- description: Kit BSP support for the Wi-SUN FAN US/Japan Pro Kit.
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_wi-sun-pk6016a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"WI-SUN-PK6016A"'
+ - name: SL_KIT_REV
+ value: '"A01"'
+- tag:
+ - kit:opn:Wi-SUN-PK6016A
+ - kit:pn:PK6016
+ - kit:variant:A
+ - kit:revision:A01
diff --git a/hardware/board/component/xg21-pk6026a.slcc b/hardware/board/component/xg21-pk6026a.slcc
new file mode 100644
index 0000000000..4d2cbfa672
--- /dev/null
+++ b/hardware/board/component/xg21-pk6026a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: xg21_pk6026a
+- label: XG21-PK6026A
+- package: platform
+- description: Kit BSP support for the xG21 2.4 GHz 10 dBm Pro Kit.
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_xg21-pk6026a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"XG21-PK6026A"'
+ - name: SL_KIT_REV
+ value: '"A00"'
+- tag:
+ - kit:opn:xG21-PK6026A
+ - kit:pn:PK6026
+ - kit:variant:A
+ - kit:revision:A00
diff --git a/hardware/board/component/xg21-pk6027a.slcc b/hardware/board/component/xg21-pk6027a.slcc
new file mode 100644
index 0000000000..dcd60ea5fb
--- /dev/null
+++ b/hardware/board/component/xg21-pk6027a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: xg21_pk6027a
+- label: XG21-PK6027A
+- package: platform
+- description: Kit BSP support for the xG21 2.4 GHz 20 dBm Pro Kit.
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_xg21-pk6027a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"XG21-PK6027A"'
+ - name: SL_KIT_REV
+ value: '"A00"'
+- tag:
+ - kit:opn:xG21-PK6027A
+ - kit:pn:PK6027
+ - kit:variant:A
+ - kit:revision:A00
diff --git a/hardware/board/component/xg23-pk6067a.slcc b/hardware/board/component/xg23-pk6067a.slcc
index bb1fc74be2..0efb94139f 100644
--- a/hardware/board/component/xg23-pk6067a.slcc
+++ b/hardware/board/component/xg23-pk6067a.slcc
@@ -14,9 +14,9 @@
- name: SL_KIT_NAME
value: '"XG23-PK6067A"'
- name: SL_KIT_REV
- value: '"A00"'
+ value: '"B01"'
- tag:
- kit:opn:xG23-PK6067A
- kit:pn:PK6067
- kit:variant:A
- - kit:revision:A00
+ - kit:revision:B01
diff --git a/hardware/board/component/xg23-pk6068a.slcc b/hardware/board/component/xg23-pk6068a.slcc
index bc0c8d51b6..73b5d670fe 100644
--- a/hardware/board/component/xg23-pk6068a.slcc
+++ b/hardware/board/component/xg23-pk6068a.slcc
@@ -14,9 +14,9 @@
- name: SL_KIT_NAME
value: '"XG23-PK6068A"'
- name: SL_KIT_REV
- value: '"A00"'
+ value: '"B01"'
- tag:
- kit:opn:xG23-PK6068A
- kit:pn:PK6068
- kit:variant:A
- - kit:revision:A00
+ - kit:revision:B01
diff --git a/hardware/board/component/xg24-pk6009a.slcc b/hardware/board/component/xg24-pk6009a.slcc
new file mode 100644
index 0000000000..2244047984
--- /dev/null
+++ b/hardware/board/component/xg24-pk6009a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: xg24_pk6009a
+- label: XG24-PK6009A
+- package: platform
+- description: Kit BSP support for the xG24 10 dBm Pro Kit.
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_xg24-pk6009a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"XG24-PK6009A"'
+ - name: SL_KIT_REV
+ value: '"A01"'
+- tag:
+ - kit:opn:xG24-PK6009A
+ - kit:pn:PK6009
+ - kit:variant:A
+ - kit:revision:A01
diff --git a/hardware/board/component/xg24-pk6010a.slcc b/hardware/board/component/xg24-pk6010a.slcc
new file mode 100644
index 0000000000..ce89151398
--- /dev/null
+++ b/hardware/board/component/xg24-pk6010a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: xg24_pk6010a
+- label: XG24-PK6010A
+- package: platform
+- description: Kit BSP support for the xG24 20 dBm Pro Kit.
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_xg24-pk6010a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"XG24-PK6010A"'
+ - name: SL_KIT_REV
+ value: '"A01"'
+- tag:
+ - kit:opn:xG24-PK6010A
+ - kit:pn:PK6010
+ - kit:variant:A
+ - kit:revision:A01
diff --git a/hardware/board/component/xg27-pk6017a.slcc b/hardware/board/component/xg27-pk6017a.slcc
new file mode 100644
index 0000000000..645e37c29b
--- /dev/null
+++ b/hardware/board/component/xg27-pk6017a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: xg27_pk6017a
+- label: XG27-PK6017A
+- package: platform
+- description: Kit BSP support for the xG27 2.4 GHz +8 dBm Pro Kit.
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_xg27-pk6017a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"XG27-PK6017A"'
+ - name: SL_KIT_REV
+ value: '"A00"'
+- tag:
+ - kit:opn:xG27-PK6017A
+ - kit:pn:PK6017
+ - kit:variant:A
+ - kit:revision:A00
diff --git a/hardware/board/component/xg27-pk6018a.slcc b/hardware/board/component/xg27-pk6018a.slcc
new file mode 100644
index 0000000000..656ee9c636
--- /dev/null
+++ b/hardware/board/component/xg27-pk6018a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: xg27_pk6018a
+- label: XG27-PK6018A
+- package: platform
+- description: Kit BSP support for the xG27 2.4 GHz +4 dBm Pro Kit (Buck).
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_xg27-pk6018a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"XG27-PK6018A"'
+ - name: SL_KIT_REV
+ value: '"A01"'
+- tag:
+ - kit:opn:xG27-PK6018A
+ - kit:pn:PK6018
+ - kit:variant:A
+ - kit:revision:A01
diff --git a/hardware/board/component/xg27-pk6019a.slcc b/hardware/board/component/xg27-pk6019a.slcc
new file mode 100644
index 0000000000..386ed22ee9
--- /dev/null
+++ b/hardware/board/component/xg27-pk6019a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: xg27_pk6019a
+- label: XG27-PK6019A
+- package: platform
+- description: Kit BSP support for the xG27 2.4 GHz +4 dBm Pro Kit (Boost).
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_xg27-pk6019a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"XG27-PK6019A"'
+ - name: SL_KIT_REV
+ value: '"A01"'
+- tag:
+ - kit:opn:xG27-PK6019A
+ - kit:pn:PK6019
+ - kit:variant:A
+ - kit:revision:A01
diff --git a/hardware/board/component/xg28-pk6024a.slcc b/hardware/board/component/xg28-pk6024a.slcc
new file mode 100644
index 0000000000..9aa1f71084
--- /dev/null
+++ b/hardware/board/component/xg28-pk6024a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: xg28_pk6024a
+- label: XG28-PK6024A
+- package: platform
+- description: Kit BSP support for the EFR32xG28 14 dBm Pro Kit.
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_xg28-pk6024a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"XG28-PK6024A"'
+ - name: SL_KIT_REV
+ value: '"A02"'
+- tag:
+ - kit:opn:xG28-PK6024A
+ - kit:pn:PK6024
+ - kit:variant:A
+ - kit:revision:A02
diff --git a/hardware/board/component/xg28-pk6025a.slcc b/hardware/board/component/xg28-pk6025a.slcc
new file mode 100644
index 0000000000..9594896e3d
--- /dev/null
+++ b/hardware/board/component/xg28-pk6025a.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: xg28_pk6025a
+- label: XG28-PK6025A
+- package: platform
+- description: Kit BSP support for the EFR32xG28 20 dBm Pro Kit.
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_xg28-pk6025a
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"XG28-PK6025A"'
+ - name: SL_KIT_REV
+ value: '"A02"'
+- tag:
+ - kit:opn:xG28-PK6025A
+ - kit:pn:PK6025
+ - kit:variant:A
+ - kit:revision:A02
diff --git a/hardware/board/component/zwave-pk800a.slcc b/hardware/board/component/zwave-pk800a.slcc
index b5c49d7826..3c9401e4d4 100644
--- a/hardware/board/component/zwave-pk800a.slcc
+++ b/hardware/board/component/zwave-pk800a.slcc
@@ -14,9 +14,9 @@
- name: SL_KIT_NAME
value: '"ZWAVE-PK800A"'
- name: SL_KIT_REV
- value: '"A00"'
+ value: '"B01"'
- tag:
- kit:opn:ZWAVE-PK800A
- kit:pn:PK800
- kit:variant:A
- - kit:revision:A00
+ - kit:revision:B01
diff --git a/hardware/board/component/zwave-pk800b.slcc b/hardware/board/component/zwave-pk800b.slcc
new file mode 100644
index 0000000000..546fb61fff
--- /dev/null
+++ b/hardware/board/component/zwave-pk800b.slcc
@@ -0,0 +1,22 @@
+!!omap
+- id: zwave_pk800b
+- label: ZWAVE-PK800B
+- package: platform
+- description: Kit BSP support for the ZWAVE-PK800B.
+- category: Platform|Board|Kit|Pro Kit
+- quality: production
+- requires:
+ - name: hardware_board_from_zwave-pk800b
+- provides:
+ - name: hardware_kit
+ - name: hardware_kit_pk
+- define:
+ - name: SL_KIT_NAME
+ value: '"ZWAVE-PK800B"'
+ - name: SL_KIT_REV
+ value: '"A00"'
+- tag:
+ - kit:opn:ZWAVE-PK800B
+ - kit:pn:PK800
+ - kit:variant:B
+ - kit:revision:A00
diff --git a/hardware/board/config/brd2010a/btl_uart_driver_cfg.h b/hardware/board/config/brd2010a/btl_uart_driver_cfg.h
index 177265ba1f..5be766f055 100644
--- a/hardware/board/config/brd2010a/btl_uart_driver_cfg.h
+++ b/hardware/board/config/brd2010a/btl_uart_driver_cfg.h
@@ -72,7 +72,7 @@
// $[GPIO_SL_VCOM_ENABLE]
#define SL_VCOM_ENABLE_PORT gpioPortA
-#define SL_VCOM_ENABLE_PIN 8
+#define SL_VCOM_ENABLE_PIN 9
// [GPIO_SL_VCOM_ENABLE]$
diff --git a/hardware/board/config/brd2010a/sl_board_control_config.h b/hardware/board/config/brd2010a/sl_board_control_config.h
index b664c5506f..ef558e2ac7 100644
--- a/hardware/board/config/brd2010a/sl_board_control_config.h
+++ b/hardware/board/config/brd2010a/sl_board_control_config.h
@@ -48,7 +48,7 @@
// SL_BOARD_ENABLE_VCOM
// $[GPIO_SL_BOARD_ENABLE_VCOM]
#define SL_BOARD_ENABLE_VCOM_PORT gpioPortA
-#define SL_BOARD_ENABLE_VCOM_PIN 8
+#define SL_BOARD_ENABLE_VCOM_PIN 9
// [GPIO_SL_BOARD_ENABLE_VCOM]$
// SL_BOARD_ENABLE_DISPLAY
diff --git a/hardware/board/config/brd4328b_brd4001a/btl_euart_driver_cfg.h b/hardware/board/config/brd4328b_brd4001a/btl_euart_driver_cfg.h
new file mode 100644
index 0000000000..9f7c84438c
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/btl_euart_driver_cfg.h
@@ -0,0 +1,86 @@
+/***************************************************************************//**
+ * @file
+ * @brief Configuration header for bootloader euart Driver
+ *******************************************************************************
+ * # 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.
+ *
+ ******************************************************************************/
+#ifndef BTL_EUART_DRIVER_CONFIG_H
+#define BTL_EUART_DRIVER_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// EUART settings
+
+// Baud rate
+// Default: 115200
+#define SL_SERIAL_EUART_BAUD_RATE 115200
+
+// Hardware flow control
+// Default: 0
+#define SL_SERIAL_EUART_FLOW_CONTROL 0
+//
+
+// Receive buffer size
+// <0-2048:1>
+// Default: 512 [0-2048]
+#define SL_DRIVER_EUART_RX_BUFFER_SIZE 512
+
+// Transmit buffer size
+// <0-2048:1>
+// Default: 128 [0-2048]
+#define SL_DRIVER_EUART_TX_BUFFER_SIZE 128
+
+// Virtual COM Port
+// Default: 0
+#define SL_VCOM_ENABLE 0
+//
+
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_SERIAL_EUART
+// $[EUSART_SL_SERIAL_EUART]
+#define SL_SERIAL_EUART_PERIPHERAL EUSART0
+#define SL_SERIAL_EUART_PERIPHERAL_NO 0
+
+// EUSART0 TX on PA08
+#define SL_SERIAL_EUART_TX_PORT gpioPortA
+#define SL_SERIAL_EUART_TX_PIN 8
+
+// EUSART0 RX on PA09
+#define SL_SERIAL_EUART_RX_PORT gpioPortA
+#define SL_SERIAL_EUART_RX_PIN 9
+
+// EUSART0 CTS on PA10
+#define SL_SERIAL_EUART_CTS_PORT gpioPortA
+#define SL_SERIAL_EUART_CTS_PIN 10
+
+// EUSART0 RTS on PA00
+#define SL_SERIAL_EUART_RTS_PORT gpioPortA
+#define SL_SERIAL_EUART_RTS_PIN 0
+
+// [EUSART_SL_SERIAL_EUART]$
+
+// SL_VCOM_ENABLE
+
+// $[GPIO_SL_VCOM_ENABLE]
+#define SL_VCOM_ENABLE_PORT gpioPortB
+#define SL_VCOM_ENABLE_PIN 0
+
+// [GPIO_SL_VCOM_ENABLE]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // BTL_EUART_DRIVER_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/btl_ezsp_gpio_activation_cfg.h b/hardware/board/config/brd4328b_brd4001a/btl_ezsp_gpio_activation_cfg.h
new file mode 100644
index 0000000000..c8016ffd03
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/btl_ezsp_gpio_activation_cfg.h
@@ -0,0 +1,52 @@
+/***************************************************************************//**
+ * @file
+ * @brief Configuration header for bootloader EZSP GPIO Activation
+ *******************************************************************************
+ * # 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.
+ *
+ ******************************************************************************/
+#ifndef BTL_EZSP_GPIO_ACTIVATION_CONFIG_H
+#define BTL_EZSP_GPIO_ACTIVATION_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// Properties of SPI NCP
+
+// Active state
+// Low
+// High
+// Default: LOW
+// Enter firmware upgrade mode if GPIO pin has this state
+#define SL_EZSP_GPIO_ACTIVATION_POLARITY LOW
+
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_EZSPSPI_HOST_INT
+// $[GPIO_SL_EZSPSPI_HOST_INT]
+#define SL_EZSPSPI_HOST_INT_PORT gpioPortA
+#define SL_EZSPSPI_HOST_INT_PIN 5
+
+// [GPIO_SL_EZSPSPI_HOST_INT]$
+
+// SL_EZSPSPI_WAKE_INT
+// $[GPIO_SL_EZSPSPI_WAKE_INT]
+#define SL_EZSPSPI_WAKE_INT_PORT gpioPortD
+#define SL_EZSPSPI_WAKE_INT_PIN 2
+
+// [GPIO_SL_EZSPSPI_WAKE_INT]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // BTL_EZSP_GPIO_ACTIVATION_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/btl_gpio_activation_cfg.h b/hardware/board/config/brd4328b_brd4001a/btl_gpio_activation_cfg.h
new file mode 100644
index 0000000000..f73756e2d5
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/btl_gpio_activation_cfg.h
@@ -0,0 +1,47 @@
+/***************************************************************************//**
+ * @file
+ * @brief Configuration header for bootloader GPIO Activation
+ *******************************************************************************
+ * # 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.
+ *
+ ******************************************************************************/
+#ifndef BTL_GPIO_ACTIVATION_CONFIG_H
+#define BTL_GPIO_ACTIVATION_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// Properties of Bootloader Entry
+
+// Active state
+// Low
+// High
+// Default: LOW
+// Enter firmware upgrade mode if GPIO pin has this state
+#define SL_GPIO_ACTIVATION_POLARITY LOW
+
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+
+// SL_BTL_BUTTON
+
+// $[GPIO_SL_BTL_BUTTON]
+#define SL_BTL_BUTTON_PORT gpioPortB
+#define SL_BTL_BUTTON_PIN 1
+
+// [GPIO_SL_BTL_BUTTON]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // BTL_GPIO_ACTIVATION_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/btl_spi_controller_eusart_driver_cfg.h b/hardware/board/config/brd4328b_brd4001a/btl_spi_controller_eusart_driver_cfg.h
new file mode 100644
index 0000000000..dfa2459451
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/btl_spi_controller_eusart_driver_cfg.h
@@ -0,0 +1,68 @@
+/***************************************************************************//**
+ * @file
+ * @brief Configuration header for bootloader Spi Controller Eusart Driver
+ *******************************************************************************
+ * # 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.
+ *
+ ******************************************************************************/
+#ifndef BTL_SPI_CONTROLLER_EUSART_DRIVER_CONFIG_H
+#define BTL_SPI_CONTROLLER_EUSART_DRIVER_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// SPI Controller EUSART Driver
+
+// Frequency
+// Default: 6400000
+#define SL_EUSART_EXTFLASH_FREQUENCY 6400000
+
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_EUSART_EXTFLASH
+// $[EUSART_SL_EUSART_EXTFLASH]
+#define SL_EUSART_EXTFLASH_PERIPHERAL EUSART1
+#define SL_EUSART_EXTFLASH_PERIPHERAL_NO 1
+
+// EUSART1 TX on PC01
+#define SL_EUSART_EXTFLASH_TX_PORT gpioPortC
+#define SL_EUSART_EXTFLASH_TX_PIN 1
+
+// EUSART1 RX on PC02
+#define SL_EUSART_EXTFLASH_RX_PORT gpioPortC
+#define SL_EUSART_EXTFLASH_RX_PIN 2
+
+// EUSART1 SCLK on PC03
+#define SL_EUSART_EXTFLASH_SCLK_PORT gpioPortC
+#define SL_EUSART_EXTFLASH_SCLK_PIN 3
+
+// EUSART1 CS on PC04
+#define SL_EUSART_EXTFLASH_CS_PORT gpioPortC
+#define SL_EUSART_EXTFLASH_CS_PIN 4
+
+// [EUSART_SL_EUSART_EXTFLASH]$
+
+// SL_EXTFLASH_WP
+// $[GPIO_SL_EXTFLASH_WP]
+
+// [GPIO_SL_EXTFLASH_WP]$
+
+// SL_EXTFLASH_HOLD
+// $[GPIO_SL_EXTFLASH_HOLD]
+
+// [GPIO_SL_EXTFLASH_HOLD]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // BTL_SPI_CONTROLLER_EUSART_DRIVER_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/btl_spi_controller_usart_driver_cfg.h b/hardware/board/config/brd4328b_brd4001a/btl_spi_controller_usart_driver_cfg.h
new file mode 100644
index 0000000000..a666144221
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/btl_spi_controller_usart_driver_cfg.h
@@ -0,0 +1,68 @@
+/***************************************************************************//**
+ * @file
+ * @brief Configuration header for bootloader Spi Controller Usart Driver
+ *******************************************************************************
+ * # 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.
+ *
+ ******************************************************************************/
+#ifndef BTL_SPI_CONTROLLER_USART_DRIVER_CONFIG_H
+#define BTL_SPI_CONTROLLER_USART_DRIVER_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// SPI Controller USART Driver
+
+// Frequency
+// Default: 6400000
+#define SL_USART_EXTFLASH_FREQUENCY 6400000
+
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_USART_EXTFLASH
+// $[USART_SL_USART_EXTFLASH]
+#define SL_USART_EXTFLASH_PERIPHERAL USART0
+#define SL_USART_EXTFLASH_PERIPHERAL_NO 0
+
+// USART0 TX on PC01
+#define SL_USART_EXTFLASH_TX_PORT gpioPortC
+#define SL_USART_EXTFLASH_TX_PIN 1
+
+// USART0 RX on PC02
+#define SL_USART_EXTFLASH_RX_PORT gpioPortC
+#define SL_USART_EXTFLASH_RX_PIN 2
+
+// USART0 CLK on PC03
+#define SL_USART_EXTFLASH_CLK_PORT gpioPortC
+#define SL_USART_EXTFLASH_CLK_PIN 3
+
+// USART0 CS on PC04
+#define SL_USART_EXTFLASH_CS_PORT gpioPortC
+#define SL_USART_EXTFLASH_CS_PIN 4
+
+// [USART_SL_USART_EXTFLASH]$
+
+// SL_EXTFLASH_WP
+// $[GPIO_SL_EXTFLASH_WP]
+
+// [GPIO_SL_EXTFLASH_WP]$
+
+// SL_EXTFLASH_HOLD
+// $[GPIO_SL_EXTFLASH_HOLD]
+
+// [GPIO_SL_EXTFLASH_HOLD]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // BTL_SPI_CONTROLLER_USART_DRIVER_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/btl_spi_peripheral_eusart_driver_cfg.h b/hardware/board/config/brd4328b_brd4001a/btl_spi_peripheral_eusart_driver_cfg.h
new file mode 100644
index 0000000000..8bdc092f79
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/btl_spi_peripheral_eusart_driver_cfg.h
@@ -0,0 +1,71 @@
+/***************************************************************************//**
+ * @file
+ * @brief Configuration header for bootloader Spi Peripheral Eusart Driver
+ *******************************************************************************
+ * # 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.
+ *
+ ******************************************************************************/
+#ifndef BTL_SPI_PERIPHERAL_EUSART_DRIVER_CONFIG_H
+#define BTL_SPI_PERIPHERAL_EUSART_DRIVER_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// SPI Peripheral Eusart Driver
+
+// Receive buffer size:[0-2048] <0-2048>
+// Default: 300
+#define SL_SPI_PERIPHERAL_EUSART_RX_BUFFER_SIZE 300
+
+// Transmit buffer size:[0-2048] <0-2048>
+// Default: 50
+#define SL_SPI_PERIPHERAL_EUSART_TX_BUFFER_SIZE 50
+
+// LDMA channel for SPI RX:[0-1] <0-1>
+// Default: 0
+#define SL_SPI_PERIPHERAL_EUSART_LDMA_RX_CHANNEL 0
+
+// LDMA channel for SPI TX:[0-1] <0-1>
+// Default: 1
+#define SL_SPI_PERIPHERAL_EUSART_LDMA_TX_CHANNEL 1
+
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_EUSART_SPINCP
+
+// $[EUSART_SL_EUSART_SPINCP]
+#define SL_EUSART_SPINCP_PERIPHERAL EUSART1
+#define SL_EUSART_SPINCP_PERIPHERAL_NO 1
+
+// EUSART1 TX on PC01
+#define SL_EUSART_SPINCP_TX_PORT gpioPortC
+#define SL_EUSART_SPINCP_TX_PIN 1
+
+// EUSART1 RX on PC02
+#define SL_EUSART_SPINCP_RX_PORT gpioPortC
+#define SL_EUSART_SPINCP_RX_PIN 2
+
+// EUSART1 CS on PC00
+#define SL_EUSART_SPINCP_CS_PORT gpioPortC
+#define SL_EUSART_SPINCP_CS_PIN 0
+
+// EUSART1 SCLK on PC03
+#define SL_EUSART_SPINCP_SCLK_PORT gpioPortC
+#define SL_EUSART_SPINCP_SCLK_PIN 3
+
+// [EUSART_SL_EUSART_SPINCP]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // BTL_SPI_PERIPHERAL_EUSART_DRIVER_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/btl_spi_peripheral_usart_driver_cfg.h b/hardware/board/config/brd4328b_brd4001a/btl_spi_peripheral_usart_driver_cfg.h
new file mode 100644
index 0000000000..4310485bc4
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/btl_spi_peripheral_usart_driver_cfg.h
@@ -0,0 +1,71 @@
+/***************************************************************************//**
+ * @file
+ * @brief Configuration header for bootloader Spi Peripheral Usart Driver
+ *******************************************************************************
+ * # 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.
+ *
+ ******************************************************************************/
+#ifndef BTL_SPI_PERIPHERAL_USART_DRIVER_CONFIG_H
+#define BTL_SPI_PERIPHERAL_USART_DRIVER_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// SPI Peripheral Usart Driver
+
+// Receive buffer size:[0-2048] <0-2048>
+// Default: 300
+#define SL_SPI_PERIPHERAL_USART_RX_BUFFER_SIZE 300
+
+// Transmit buffer size:[0-2048] <0-2048>
+// Default: 50
+#define SL_SPI_PERIPHERAL_USART_TX_BUFFER_SIZE 50
+
+// LDMA channel for SPI RX:[0-1] <0-1>
+// Default: 0
+#define SL_SPI_PERIPHERAL_USART_LDMA_RX_CHANNEL 0
+
+// LDMA channel for SPI TX:[0-1] <0-1>
+// Default: 1
+#define SL_SPI_PERIPHERAL_USART_LDMA_TX_CHANNEL 1
+
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_USART_SPINCP
+
+// $[USART_SL_USART_SPINCP]
+#define SL_USART_SPINCP_PERIPHERAL USART0
+#define SL_USART_SPINCP_PERIPHERAL_NO 0
+
+// USART0 TX on PC01
+#define SL_USART_SPINCP_TX_PORT gpioPortC
+#define SL_USART_SPINCP_TX_PIN 1
+
+// USART0 RX on PC02
+#define SL_USART_SPINCP_RX_PORT gpioPortC
+#define SL_USART_SPINCP_RX_PIN 2
+
+// USART0 CS on PC00
+#define SL_USART_SPINCP_CS_PORT gpioPortC
+#define SL_USART_SPINCP_CS_PIN 0
+
+// USART0 CLK on PC03
+#define SL_USART_SPINCP_CLK_PORT gpioPortC
+#define SL_USART_SPINCP_CLK_PIN 3
+
+// [USART_SL_USART_SPINCP]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // BTL_SPI_PERIPHERAL_USART_DRIVER_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/btl_uart_driver_cfg.h b/hardware/board/config/brd4328b_brd4001a/btl_uart_driver_cfg.h
new file mode 100644
index 0000000000..42676179a9
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/btl_uart_driver_cfg.h
@@ -0,0 +1,86 @@
+/***************************************************************************//**
+ * @file
+ * @brief Configuration header for bootloader Uart Driver
+ *******************************************************************************
+ * # 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.
+ *
+ ******************************************************************************/
+#ifndef BTL_UART_DRIVER_CONFIG_H
+#define BTL_UART_DRIVER_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// USART settings
+
+// Baud rate
+// Default: 115200
+#define SL_SERIAL_UART_BAUD_RATE 115200
+
+// Hardware flow control
+// Default: 0
+#define SL_SERIAL_UART_FLOW_CONTROL 0
+//
+
+// Receive buffer size
+// <0-2048:1>
+// Default: 512 [0-2048]
+#define SL_DRIVER_UART_RX_BUFFER_SIZE 512
+
+// Transmit buffer size
+// <0-2048:1>
+// Default: 128 [0-2048]
+#define SL_DRIVER_UART_TX_BUFFER_SIZE 128
+
+// Virtual COM Port
+// Default: 0
+#define SL_VCOM_ENABLE 0
+//
+
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_SERIAL_UART
+// $[USART_SL_SERIAL_UART]
+#define SL_SERIAL_UART_PERIPHERAL USART0
+#define SL_SERIAL_UART_PERIPHERAL_NO 0
+
+// USART0 TX on PA08
+#define SL_SERIAL_UART_TX_PORT gpioPortA
+#define SL_SERIAL_UART_TX_PIN 8
+
+// USART0 RX on PA09
+#define SL_SERIAL_UART_RX_PORT gpioPortA
+#define SL_SERIAL_UART_RX_PIN 9
+
+// USART0 CTS on PA10
+#define SL_SERIAL_UART_CTS_PORT gpioPortA
+#define SL_SERIAL_UART_CTS_PIN 10
+
+// USART0 RTS on PA00
+#define SL_SERIAL_UART_RTS_PORT gpioPortA
+#define SL_SERIAL_UART_RTS_PIN 0
+
+// [USART_SL_SERIAL_UART]$
+
+// SL_VCOM_ENABLE
+
+// $[GPIO_SL_VCOM_ENABLE]
+#define SL_VCOM_ENABLE_PORT gpioPortB
+#define SL_VCOM_ENABLE_PIN 0
+
+// [GPIO_SL_VCOM_ENABLE]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // BTL_UART_DRIVER_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/iot_flash_cfg_exp.h b/hardware/board/config/brd4328b_brd4001a/iot_flash_cfg_exp.h
new file mode 100644
index 0000000000..e54999dcf3
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/iot_flash_cfg_exp.h
@@ -0,0 +1,141 @@
+/***************************************************************************//**
+ * @file iot_flash_cfg_inst.h
+ * @brief Common I/O flash instance configurations.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#ifndef _IOT_FLASH_CFG_EXP_H_
+#define _IOT_FLASH_CFG_EXP_H_
+
+/*******************************************************************************
+ * Flash Default Configs
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// Flash General Options
+
+// Instance number
+// Instance number used when iot_flash_open() is called.
+// Default: 0
+#define IOT_FLASH_CFG_EXP_INST_NUM 0
+
+// External Flash Base Address
+// Hex value of the base address of the external flash used.
+// Default: 0x0
+#define IOT_FLASH_CFG_EXP_EXTERNAL_FLASH_BASE 0x0
+
+// Instance type
+// <0=> Internal Flash (MSC)
+// <1=> External Flash (SPI)
+// Specify whether this instance is for internal flash (MSC)
+// or an external SPI flash. If external, then you need to setup
+// SPI configs below.
+// Default: 0
+#define IOT_FLASH_CFG_EXP_INST_TYPE 1
+
+//
+
+// SPI Configuration
+
+// Default SPI bitrate
+// Default: 1000000
+#define IOT_FLASH_CFG_EXP_SPI_BITRATE 1000000
+
+// Default SPI frame length <4-16>
+// Default: 8
+#define IOT_FLASH_CFG_EXP_SPI_FRAME_LENGTH 8
+
+// Default SPI master/slave mode
+// Master
+// Slave
+#define IOT_FLASH_CFG_EXP_SPI_TYPE spidrvMaster
+
+// Default SPI bit order
+// LSB transmitted first
+// MSB transmitted first
+#define IOT_FLASH_CFG_EXP_SPI_BIT_ORDER spidrvBitOrderMsbFirst
+
+// Default SPI clock mode
+// SPI mode 0: CLKPOL=0, CLKPHA=0
+// SPI mode 1: CLKPOL=0, CLKPHA=1
+// SPI mode 2: CLKPOL=1, CLKPHA=0
+// SPI mode 3: CLKPOL=1, CLKPHA=1
+#define IOT_FLASH_CFG_EXP_SPI_CLOCK_MODE spidrvClockMode0
+
+// Default SPI CS control scheme
+// CS controlled by the SPI driver
+// CS controlled by the application
+#define IOT_FLASH_CFG_EXP_SPI_CS_CONTROL spidrvCsControlApplication
+
+// Default SPI transfer scheme
+// Transfer starts immediately
+// Transfer starts when the bus is idle
+#define IOT_FLASH_CFG_EXP_SPI_SLAVE_START_MODE spidrvSlaveStartImmediate
+
+//
+
+// <<< end of configuration section >>>
+
+/*******************************************************************************
+ * EXTERNAL FLASH: H/W PERIPHERAL CONFIG
+ ******************************************************************************/
+
+// <<< sl:start pin_tool >>>
+// IOT_FLASH_CFG_EXP_SPI
+// $[USART_IOT_FLASH_CFG_EXP_SPI]
+#define IOT_FLASH_CFG_EXP_SPI_PERIPHERAL USART0
+#define IOT_FLASH_CFG_EXP_SPI_PERIPHERAL_NO 0
+
+// USART0 TX on PC01
+#define IOT_FLASH_CFG_EXP_SPI_TX_PORT gpioPortC
+#define IOT_FLASH_CFG_EXP_SPI_TX_PIN 1
+
+// USART0 RX on PC02
+#define IOT_FLASH_CFG_EXP_SPI_RX_PORT gpioPortC
+#define IOT_FLASH_CFG_EXP_SPI_RX_PIN 2
+
+// USART0 CLK on PC03
+#define IOT_FLASH_CFG_EXP_SPI_CLK_PORT gpioPortC
+#define IOT_FLASH_CFG_EXP_SPI_CLK_PIN 3
+
+// USART0 CS on PC00
+#define IOT_FLASH_CFG_EXP_SPI_CS_PORT gpioPortC
+#define IOT_FLASH_CFG_EXP_SPI_CS_PIN 0
+
+// [USART_IOT_FLASH_CFG_EXP_SPI]$
+// <<< sl:end pin_tool >>>
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#endif /* _IOT_FLASH_CFG_EXP_H_ */
diff --git a/hardware/board/config/brd4328b_brd4001a/iot_flash_cfg_msc.h b/hardware/board/config/brd4328b_brd4001a/iot_flash_cfg_msc.h
new file mode 100644
index 0000000000..c2af14bc7d
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/iot_flash_cfg_msc.h
@@ -0,0 +1,123 @@
+/***************************************************************************//**
+ * @file iot_flash_cfg_inst.h
+ * @brief Common I/O flash instance configurations.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#ifndef _IOT_FLASH_CFG_MSC_H_
+#define _IOT_FLASH_CFG_MSC_H_
+
+/*******************************************************************************
+ * Flash Default Configs
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// Flash General Options
+
+// Instance number
+// Instance number used when iot_flash_open() is called.
+// Default: 0
+#define IOT_FLASH_CFG_MSC_INST_NUM 0
+
+// External Flash Base Address
+// Hex value of the base address of the external flash used.
+// Default: 0x0
+#define IOT_FLASH_CFG_MSC_EXTERNAL_FLASH_BASE 0x0
+
+// Instance type
+// <0=> Internal Flash (MSC)
+// <1=> External Flash (SPI)
+// Specify whether this instance is for internal flash (MSC)
+// or an external SPI flash. If external, then you need to setup
+// SPI configs below.
+// Default: 0
+#define IOT_FLASH_CFG_MSC_INST_TYPE 0
+
+//
+
+// SPI Configuration
+
+// Default SPI bitrate
+// Default: 1000000
+#define IOT_FLASH_CFG_MSC_SPI_BITRATE 1000000
+
+// Default SPI frame length <4-16>
+// Default: 8
+#define IOT_FLASH_CFG_MSC_SPI_FRAME_LENGTH 8
+
+// Default SPI master/slave mode
+// Master
+// Slave
+#define IOT_FLASH_CFG_MSC_SPI_TYPE spidrvMaster
+
+// Default SPI bit order
+// LSB transmitted first
+// MSB transmitted first
+#define IOT_FLASH_CFG_MSC_SPI_BIT_ORDER spidrvBitOrderMsbFirst
+
+// Default SPI clock mode
+// SPI mode 0: CLKPOL=0, CLKPHA=0
+// SPI mode 1: CLKPOL=0, CLKPHA=1
+// SPI mode 2: CLKPOL=1, CLKPHA=0
+// SPI mode 3: CLKPOL=1, CLKPHA=1
+#define IOT_FLASH_CFG_MSC_SPI_CLOCK_MODE spidrvClockMode0
+
+// Default SPI CS control scheme
+// CS controlled by the SPI driver
+// CS controlled by the application
+#define IOT_FLASH_CFG_MSC_SPI_CS_CONTROL spidrvCsControlApplication
+
+// Default SPI transfer scheme
+// Transfer starts immediately
+// Transfer starts when the bus is idle
+#define IOT_FLASH_CFG_MSC_SPI_SLAVE_START_MODE spidrvSlaveStartImmediate
+
+//
+
+// <<< end of configuration section >>>
+
+/*******************************************************************************
+ * EXTERNAL FLASH: H/W PERIPHERAL CONFIG
+ ******************************************************************************/
+
+// <<< sl:start pin_tool >>>
+// IOT_FLASH_CFG_MSC_SPI
+// $[USART_IOT_FLASH_CFG_MSC_SPI]
+
+// [USART_IOT_FLASH_CFG_MSC_SPI]$
+// <<< sl:end pin_tool >>>
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#endif /* _IOT_FLASH_CFG_MSC_H_ */
diff --git a/hardware/board/config/brd4328b_brd4001a/iot_flash_cfg_spiflash.h b/hardware/board/config/brd4328b_brd4001a/iot_flash_cfg_spiflash.h
new file mode 100644
index 0000000000..0dd0bb9f60
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/iot_flash_cfg_spiflash.h
@@ -0,0 +1,141 @@
+/***************************************************************************//**
+ * @file iot_flash_cfg_inst.h
+ * @brief Common I/O flash instance configurations.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#ifndef _IOT_FLASH_CFG_SPIFLASH_H_
+#define _IOT_FLASH_CFG_SPIFLASH_H_
+
+/*******************************************************************************
+ * Flash Default Configs
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// Flash General Options
+
+// Instance number
+// Instance number used when iot_flash_open() is called.
+// Default: 0
+#define IOT_FLASH_CFG_SPIFLASH_INST_NUM 0
+
+// External Flash Base Address
+// Hex value of the base address of the external flash used.
+// Default: 0x0
+#define IOT_FLASH_CFG_SPIFLASH_EXTERNAL_FLASH_BASE 0x0
+
+// Instance type
+// <0=> Internal Flash (MSC)
+// <1=> External Flash (SPI)
+// Specify whether this instance is for internal flash (MSC)
+// or an external SPI flash. If external, then you need to setup
+// SPI configs below.
+// Default: 0
+#define IOT_FLASH_CFG_SPIFLASH_INST_TYPE 1
+
+//
+
+// SPI Configuration
+
+// Default SPI bitrate
+// Default: 1000000
+#define IOT_FLASH_CFG_SPIFLASH_SPI_BITRATE 1000000
+
+// Default SPI frame length <4-16>
+// Default: 8
+#define IOT_FLASH_CFG_SPIFLASH_SPI_FRAME_LENGTH 8
+
+// Default SPI master/slave mode
+// Master
+// Slave
+#define IOT_FLASH_CFG_SPIFLASH_SPI_TYPE spidrvMaster
+
+// Default SPI bit order
+// LSB transmitted first
+// MSB transmitted first
+#define IOT_FLASH_CFG_SPIFLASH_SPI_BIT_ORDER spidrvBitOrderMsbFirst
+
+// Default SPI clock mode
+// SPI mode 0: CLKPOL=0, CLKPHA=0
+// SPI mode 1: CLKPOL=0, CLKPHA=1
+// SPI mode 2: CLKPOL=1, CLKPHA=0
+// SPI mode 3: CLKPOL=1, CLKPHA=1
+#define IOT_FLASH_CFG_SPIFLASH_SPI_CLOCK_MODE spidrvClockMode0
+
+// Default SPI CS control scheme
+// CS controlled by the SPI driver
+// CS controlled by the application
+#define IOT_FLASH_CFG_SPIFLASH_SPI_CS_CONTROL spidrvCsControlApplication
+
+// Default SPI transfer scheme
+// Transfer starts immediately
+// Transfer starts when the bus is idle
+#define IOT_FLASH_CFG_SPIFLASH_SPI_SLAVE_START_MODE spidrvSlaveStartImmediate
+
+//
+
+// <<< end of configuration section >>>
+
+/*******************************************************************************
+ * EXTERNAL FLASH: H/W PERIPHERAL CONFIG
+ ******************************************************************************/
+
+// <<< sl:start pin_tool >>>
+// IOT_FLASH_CFG_SPIFLASH_SPI
+// $[USART_IOT_FLASH_CFG_SPIFLASH_SPI]
+#define IOT_FLASH_CFG_SPIFLASH_SPI_PERIPHERAL USART0
+#define IOT_FLASH_CFG_SPIFLASH_SPI_PERIPHERAL_NO 0
+
+// USART0 TX on PC01
+#define IOT_FLASH_CFG_SPIFLASH_SPI_TX_PORT gpioPortC
+#define IOT_FLASH_CFG_SPIFLASH_SPI_TX_PIN 1
+
+// USART0 RX on PC02
+#define IOT_FLASH_CFG_SPIFLASH_SPI_RX_PORT gpioPortC
+#define IOT_FLASH_CFG_SPIFLASH_SPI_RX_PIN 2
+
+// USART0 CLK on PC03
+#define IOT_FLASH_CFG_SPIFLASH_SPI_CLK_PORT gpioPortC
+#define IOT_FLASH_CFG_SPIFLASH_SPI_CLK_PIN 3
+
+// USART0 CS on PC04
+#define IOT_FLASH_CFG_SPIFLASH_SPI_CS_PORT gpioPortC
+#define IOT_FLASH_CFG_SPIFLASH_SPI_CS_PIN 4
+
+// [USART_IOT_FLASH_CFG_SPIFLASH_SPI]$
+// <<< sl:end pin_tool >>>
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#endif /* _IOT_FLASH_CFG_SPIFLASH_H_ */
diff --git a/hardware/board/config/brd4328b_brd4001a/iot_i2c_cfg_exp.h b/hardware/board/config/brd4328b_brd4001a/iot_i2c_cfg_exp.h
new file mode 100644
index 0000000000..b538ec590e
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/iot_i2c_cfg_exp.h
@@ -0,0 +1,108 @@
+/***************************************************************************//**
+ * @file IOT_I2C_CFG_EXP_inst.h
+ * @brief Common I/O I2C instance configuration.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#ifndef _IOT_I2C_CFG_EXP_H_
+#define _IOT_I2C_CFG_EXP_H_
+
+/*******************************************************************************
+ * I2C Default Configs
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// I2C General Options
+
+// Instance number
+// Instance number used when iot_i2c_open() is called.
+// Default: 0
+#define IOT_I2C_CFG_EXP_INST_NUM 0
+
+// Default timeout (in msec)
+// Default: 500
+#define IOT_I2C_CFG_EXP_DEFAULT_TIMEOUT 500
+
+// Default bus speed
+// <100000=> Standard mode
+// <400000=> Fast mode
+// <1000000=> Fast plus mode
+// <3400000=> High speed mode
+// Default: 400000
+#define IOT_I2C_CFG_EXP_DEFAULT_FREQ 400000
+
+// Accept NACK
+// If the driver receives NACK during a transfer, the transfer is halted
+// immediately but it is not considered as an error. Instead, the driver
+// returns success status (useful for test purposes).
+// Default: 0
+#define IOT_I2C_CFG_EXP_ACCEPT_NACK 0
+
+//
+
+// <<< end of configuration section >>>
+
+/*******************************************************************************
+ * H/W PERIPHERAL CONFIG
+ ******************************************************************************/
+
+// <<< sl:start pin_tool >>>
+
+// IOT_I2C_CFG_EXP_ENABLE
+// $[GPIO_IOT_I2C_CFG_EXP_ENABLE]
+#define IOT_I2C_CFG_EXP_ENABLE_PORT gpioPortA
+#define IOT_I2C_CFG_EXP_ENABLE_PIN 5
+
+// [GPIO_IOT_I2C_CFG_EXP_ENABLE]$
+
+// IOT_I2C_CFG_EXP
+// $[I2C_IOT_I2C_CFG_EXP]
+#define IOT_I2C_CFG_EXP_PERIPHERAL I2C1
+#define IOT_I2C_CFG_EXP_PERIPHERAL_NO 1
+
+// I2C1 SCL on PC05
+#define IOT_I2C_CFG_EXP_SCL_PORT gpioPortC
+#define IOT_I2C_CFG_EXP_SCL_PIN 5
+
+// I2C1 SDA on PC07
+#define IOT_I2C_CFG_EXP_SDA_PORT gpioPortC
+#define IOT_I2C_CFG_EXP_SDA_PIN 7
+
+// [I2C_IOT_I2C_CFG_EXP]$
+
+// <<< sl:end pin_tool >>>
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#endif /* _IOT_I2C_CFG_EXP_H_ */
diff --git a/hardware/board/config/brd4328b_brd4001a/iot_i2c_cfg_sensor.h b/hardware/board/config/brd4328b_brd4001a/iot_i2c_cfg_sensor.h
new file mode 100644
index 0000000000..0692295a6d
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/iot_i2c_cfg_sensor.h
@@ -0,0 +1,106 @@
+/***************************************************************************//**
+ * @file IOT_I2C_CFG_SENSOR_inst.h
+ * @brief Common I/O I2C instance configuration.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#ifndef _IOT_I2C_CFG_SENSOR_H_
+#define _IOT_I2C_CFG_SENSOR_H_
+
+/*******************************************************************************
+ * I2C Default Configs
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// I2C General Options
+
+// Instance number
+// Instance number used when iot_i2c_open() is called.
+// Default: 0
+#define IOT_I2C_CFG_SENSOR_INST_NUM 0
+
+// Default timeout (in msec)
+// Default: 500
+#define IOT_I2C_CFG_SENSOR_DEFAULT_TIMEOUT 500
+
+// Default bus speed
+// <100000=> Standard mode
+// <400000=> Fast mode
+// <1000000=> Fast plus mode
+// <3400000=> High speed mode
+// Default: 400000
+#define IOT_I2C_CFG_SENSOR_DEFAULT_FREQ 400000
+
+// Accept NACK
+// If the driver receives NACK during a transfer, the transfer is halted
+// immediately but it is not considered as an error. Instead, the driver
+// returns success status (useful for test purposes).
+// Default: 0
+#define IOT_I2C_CFG_SENSOR_ACCEPT_NACK 0
+
+//
+
+// <<< end of configuration section >>>
+
+/*******************************************************************************
+ * H/W PERIPHERAL CONFIG
+ ******************************************************************************/
+
+// <<< sl:start pin_tool >>>
+
+// IOT_I2C_CFG_SENSOR_ENABLE
+// $[GPIO_IOT_I2C_CFG_SENSOR_ENABLE]
+
+// [GPIO_IOT_I2C_CFG_SENSOR_ENABLE]$
+
+// IOT_I2C_CFG_SENSOR
+// $[I2C_IOT_I2C_CFG_SENSOR]
+#define IOT_I2C_CFG_SENSOR_PERIPHERAL I2C1
+#define IOT_I2C_CFG_SENSOR_PERIPHERAL_NO 1
+
+// I2C1 SCL on PC05
+#define IOT_I2C_CFG_SENSOR_SCL_PORT gpioPortC
+#define IOT_I2C_CFG_SENSOR_SCL_PIN 5
+
+// I2C1 SDA on PC07
+#define IOT_I2C_CFG_SENSOR_SDA_PORT gpioPortC
+#define IOT_I2C_CFG_SENSOR_SDA_PIN 7
+
+// [I2C_IOT_I2C_CFG_SENSOR]$
+
+// <<< sl:end pin_tool >>>
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#endif /* _IOT_I2C_CFG_SENSOR_H_ */
diff --git a/hardware/board/config/brd4328b_brd4001a/iot_i2c_cfg_test.h b/hardware/board/config/brd4328b_brd4001a/iot_i2c_cfg_test.h
new file mode 100644
index 0000000000..8fc615bc1e
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/iot_i2c_cfg_test.h
@@ -0,0 +1,108 @@
+/***************************************************************************//**
+ * @file IOT_I2C_CFG_TEST_inst.h
+ * @brief Common I/O I2C instance configuration.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#ifndef _IOT_I2C_CFG_TEST_H_
+#define _IOT_I2C_CFG_TEST_H_
+
+/*******************************************************************************
+ * I2C Default Configs
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// I2C General Options
+
+// Instance number
+// Instance number used when iot_i2c_open() is called.
+// Default: 0
+#define IOT_I2C_CFG_TEST_INST_NUM 0
+
+// Default timeout (in msec)
+// Default: 500
+#define IOT_I2C_CFG_TEST_DEFAULT_TIMEOUT 500
+
+// Default bus speed
+// <100000=> Standard mode
+// <400000=> Fast mode
+// <1000000=> Fast plus mode
+// <3400000=> High speed mode
+// Default: 400000
+#define IOT_I2C_CFG_TEST_DEFAULT_FREQ 400000
+
+// Accept NACK
+// If the driver receives NACK during a transfer, the transfer is halted
+// immediately but it is not considered as an error. Instead, the driver
+// returns success status (useful for test purposes).
+// Default: 0
+#define IOT_I2C_CFG_TEST_ACCEPT_NACK 1
+
+//
+
+// <<< end of configuration section >>>
+
+/*******************************************************************************
+ * H/W PERIPHERAL CONFIG
+ ******************************************************************************/
+
+// <<< sl:start pin_tool >>>
+
+// IOT_I2C_CFG_TEST_ENABLE
+// $[GPIO_IOT_I2C_CFG_TEST_ENABLE]
+#define IOT_I2C_CFG_TEST_ENABLE_PORT gpioPortA
+#define IOT_I2C_CFG_TEST_ENABLE_PIN 5
+
+// [GPIO_IOT_I2C_CFG_TEST_ENABLE]$
+
+// IOT_I2C_CFG_TEST
+// $[I2C_IOT_I2C_CFG_TEST]
+#define IOT_I2C_CFG_TEST_PERIPHERAL I2C1
+#define IOT_I2C_CFG_TEST_PERIPHERAL_NO 1
+
+// I2C1 SCL on PC05
+#define IOT_I2C_CFG_TEST_SCL_PORT gpioPortC
+#define IOT_I2C_CFG_TEST_SCL_PIN 5
+
+// I2C1 SDA on PC07
+#define IOT_I2C_CFG_TEST_SDA_PORT gpioPortC
+#define IOT_I2C_CFG_TEST_SDA_PIN 7
+
+// [I2C_IOT_I2C_CFG_TEST]$
+
+// <<< sl:end pin_tool >>>
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#endif /* _IOT_I2C_CFG_TEST_H_ */
diff --git a/hardware/board/config/brd4328b_brd4001a/iot_pwm_cfg_exp.h b/hardware/board/config/brd4328b_brd4001a/iot_pwm_cfg_exp.h
new file mode 100644
index 0000000000..07189e64c2
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/iot_pwm_cfg_exp.h
@@ -0,0 +1,78 @@
+/***************************************************************************//**
+ * @file iot_pwm_cfg_inst.h
+ * @brief Common I/O PWM instance configuration.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#ifndef _IOT_PWM_CFG_EXP_H_
+#define _IOT_PWM_CFG_EXP_H_
+
+/*******************************************************************************
+ * PWM Default Configs
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// PWM General Options
+
+// Instance number
+// Instance number used when iot_pwm_open() is called.
+// Default: 0
+#define IOT_PWM_CFG_EXP_INST_NUM 0
+
+//
+
+// <<< end of configuration section >>>
+
+/*******************************************************************************
+ * H/W PERIPHERAL CONFIG
+ ******************************************************************************/
+
+// <<< sl:start pin_tool >>>
+// IOT_PWM_CFG_EXP
+// $[TIMER_IOT_PWM_CFG_EXP]
+#define IOT_PWM_CFG_EXP_PERIPHERAL TIMER4
+#define IOT_PWM_CFG_EXP_PERIPHERAL_NO 4
+
+// TIMER4 CC0 on PA05
+#define IOT_PWM_CFG_EXP_CC0_PORT gpioPortA
+#define IOT_PWM_CFG_EXP_CC0_PIN 5
+
+
+
+// [TIMER_IOT_PWM_CFG_EXP]$
+// <<< sl:end pin_tool >>>
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#endif /* _IOT_PWM_CFG_EXP_H_ */
diff --git a/hardware/board/config/brd4328b_brd4001a/iot_pwm_cfg_led0.h b/hardware/board/config/brd4328b_brd4001a/iot_pwm_cfg_led0.h
new file mode 100644
index 0000000000..037f953d0f
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/iot_pwm_cfg_led0.h
@@ -0,0 +1,78 @@
+/***************************************************************************//**
+ * @file iot_pwm_cfg_inst.h
+ * @brief Common I/O PWM instance configuration.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#ifndef _IOT_PWM_CFG_LED0_H_
+#define _IOT_PWM_CFG_LED0_H_
+
+/*******************************************************************************
+ * PWM Default Configs
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// PWM General Options
+
+// Instance number
+// Instance number used when iot_pwm_open() is called.
+// Default: 0
+#define IOT_PWM_CFG_LED0_INST_NUM 0
+
+//
+
+// <<< end of configuration section >>>
+
+/*******************************************************************************
+ * H/W PERIPHERAL CONFIG
+ ******************************************************************************/
+
+// <<< sl:start pin_tool >>>
+// IOT_PWM_CFG_LED0
+// $[TIMER_IOT_PWM_CFG_LED0]
+#define IOT_PWM_CFG_LED0_PERIPHERAL TIMER0
+#define IOT_PWM_CFG_LED0_PERIPHERAL_NO 0
+
+// TIMER0 CC0 on PB02
+#define IOT_PWM_CFG_LED0_CC0_PORT gpioPortB
+#define IOT_PWM_CFG_LED0_CC0_PIN 2
+
+
+
+// [TIMER_IOT_PWM_CFG_LED0]$
+// <<< sl:end pin_tool >>>
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#endif /* _IOT_PWM_CFG_LED0_H_ */
diff --git a/hardware/board/config/brd4328b_brd4001a/iot_pwm_cfg_led1.h b/hardware/board/config/brd4328b_brd4001a/iot_pwm_cfg_led1.h
new file mode 100644
index 0000000000..f290b8319e
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/iot_pwm_cfg_led1.h
@@ -0,0 +1,78 @@
+/***************************************************************************//**
+ * @file iot_pwm_cfg_inst.h
+ * @brief Common I/O PWM instance configuration.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#ifndef _IOT_PWM_CFG_LED1_H_
+#define _IOT_PWM_CFG_LED1_H_
+
+/*******************************************************************************
+ * PWM Default Configs
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// PWM General Options
+
+// Instance number
+// Instance number used when iot_pwm_open() is called.
+// Default: 0
+#define IOT_PWM_CFG_LED1_INST_NUM 0
+
+//
+
+// <<< end of configuration section >>>
+
+/*******************************************************************************
+ * H/W PERIPHERAL CONFIG
+ ******************************************************************************/
+
+// <<< sl:start pin_tool >>>
+// IOT_PWM_CFG_LED1
+// $[TIMER_IOT_PWM_CFG_LED1]
+#define IOT_PWM_CFG_LED1_PERIPHERAL TIMER1
+#define IOT_PWM_CFG_LED1_PERIPHERAL_NO 1
+
+// TIMER1 CC0 on PD03
+#define IOT_PWM_CFG_LED1_CC0_PORT gpioPortD
+#define IOT_PWM_CFG_LED1_CC0_PIN 3
+
+
+
+// [TIMER_IOT_PWM_CFG_LED1]$
+// <<< sl:end pin_tool >>>
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#endif /* _IOT_PWM_CFG_LED1_H_ */
diff --git a/hardware/board/config/brd4328b_brd4001a/iot_spi_cfg_exp.h b/hardware/board/config/brd4328b_brd4001a/iot_spi_cfg_exp.h
new file mode 100644
index 0000000000..d0dcc63132
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/iot_spi_cfg_exp.h
@@ -0,0 +1,128 @@
+/***************************************************************************//**
+ * @file iot_spi_cfg_inst.h
+ * @brief Common I/O SPI instance configurations.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#ifndef _IOT_SPI_CFG_EXP_H_
+#define _IOT_SPI_CFG_EXP_H_
+
+/*******************************************************************************
+ * SPI Default Configs
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// SPI General Options
+
+// Instance number
+// Instance number used when iot_spi_open() is called.
+// Default: 0
+#define IOT_SPI_CFG_EXP_INST_NUM 0
+
+// Default SPI bitrate
+// Default: 1000000
+#define IOT_SPI_CFG_EXP_DEFAULT_BITRATE 1000000
+
+// Default SPI frame length <4-16>
+// Default: 8
+#define IOT_SPI_CFG_EXP_DEFAULT_FRAME_LENGTH 8
+
+// Default SPI master/slave mode
+// Master
+// Slave
+#define IOT_SPI_CFG_EXP_DEFAULT_TYPE spidrvMaster
+
+// Default SPI bit order
+// LSB transmitted first
+// MSB transmitted first
+#define IOT_SPI_CFG_EXP_DEFAULT_BIT_ORDER spidrvBitOrderMsbFirst
+
+// Default SPI clock mode
+// SPI mode 0: CLKPOL=0, CLKPHA=0
+// SPI mode 1: CLKPOL=0, CLKPHA=1
+// SPI mode 2: CLKPOL=1, CLKPHA=0
+// SPI mode 3: CLKPOL=1, CLKPHA=1
+#define IOT_SPI_CFG_EXP_DEFAULT_CLOCK_MODE spidrvClockMode0
+
+// Default SPI CS control scheme
+// CS controlled by the SPI driver
+// CS controlled by the application
+#define IOT_SPI_CFG_EXP_DEFAULT_CS_CONTROL spidrvCsControlApplication
+
+// Default SPI transfer scheme
+// Transfer starts immediately
+// Transfer starts when the bus is idle
+#define IOT_SPI_CFG_EXP_DEFAULT_SLAVE_START_MODE spidrvSlaveStartImmediate
+
+// Internal Loopback
+// Enable USART Internal loopback
+// Default: 0
+#define IOT_SPI_CFG_EXP_LOOPBACK 0
+
+//
+
+// <<< end of configuration section >>>
+
+/*******************************************************************************
+ * H/W PERIPHERAL CONFIG
+ ******************************************************************************/
+
+// <<< sl:start pin_tool >>>
+// IOT_SPI_CFG_EXP
+// $[USART_IOT_SPI_CFG_EXP]
+#define IOT_SPI_CFG_EXP_PERIPHERAL USART0
+#define IOT_SPI_CFG_EXP_PERIPHERAL_NO 0
+
+// USART0 TX on PC01
+#define IOT_SPI_CFG_EXP_TX_PORT gpioPortC
+#define IOT_SPI_CFG_EXP_TX_PIN 1
+
+// USART0 RX on PC02
+#define IOT_SPI_CFG_EXP_RX_PORT gpioPortC
+#define IOT_SPI_CFG_EXP_RX_PIN 2
+
+// USART0 CLK on PC03
+#define IOT_SPI_CFG_EXP_CLK_PORT gpioPortC
+#define IOT_SPI_CFG_EXP_CLK_PIN 3
+
+// USART0 CS on PC00
+#define IOT_SPI_CFG_EXP_CS_PORT gpioPortC
+#define IOT_SPI_CFG_EXP_CS_PIN 0
+
+// [USART_IOT_SPI_CFG_EXP]$
+// <<< sl:end pin_tool >>>
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#endif /* _IOT_SPI_CFG_EXP_H_ */
diff --git a/hardware/board/config/brd4328b_brd4001a/iot_spi_cfg_loopback.h b/hardware/board/config/brd4328b_brd4001a/iot_spi_cfg_loopback.h
new file mode 100644
index 0000000000..c5fe826e25
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/iot_spi_cfg_loopback.h
@@ -0,0 +1,128 @@
+/***************************************************************************//**
+ * @file iot_spi_cfg_inst.h
+ * @brief Common I/O SPI instance configurations.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#ifndef _IOT_SPI_CFG_LOOPBACK_H_
+#define _IOT_SPI_CFG_LOOPBACK_H_
+
+/*******************************************************************************
+ * SPI Default Configs
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// SPI General Options
+
+// Instance number
+// Instance number used when iot_spi_open() is called.
+// Default: 0
+#define IOT_SPI_CFG_LOOPBACK_INST_NUM 0
+
+// Default SPI bitrate
+// Default: 1000000
+#define IOT_SPI_CFG_LOOPBACK_DEFAULT_BITRATE 1000000
+
+// Default SPI frame length <4-16>
+// Default: 8
+#define IOT_SPI_CFG_LOOPBACK_DEFAULT_FRAME_LENGTH 8
+
+// Default SPI master/slave mode
+// Master
+// Slave
+#define IOT_SPI_CFG_LOOPBACK_DEFAULT_TYPE spidrvMaster
+
+// Default SPI bit order
+// LSB transmitted first
+// MSB transmitted first
+#define IOT_SPI_CFG_LOOPBACK_DEFAULT_BIT_ORDER spidrvBitOrderMsbFirst
+
+// Default SPI clock mode
+// SPI mode 0: CLKPOL=0, CLKPHA=0
+// SPI mode 1: CLKPOL=0, CLKPHA=1
+// SPI mode 2: CLKPOL=1, CLKPHA=0
+// SPI mode 3: CLKPOL=1, CLKPHA=1
+#define IOT_SPI_CFG_LOOPBACK_DEFAULT_CLOCK_MODE spidrvClockMode0
+
+// Default SPI CS control scheme
+// CS controlled by the SPI driver
+// CS controlled by the application
+#define IOT_SPI_CFG_LOOPBACK_DEFAULT_CS_CONTROL spidrvCsControlApplication
+
+// Default SPI transfer scheme
+// Transfer starts immediately
+// Transfer starts when the bus is idle
+#define IOT_SPI_CFG_LOOPBACK_DEFAULT_SLAVE_START_MODE spidrvSlaveStartImmediate
+
+// Internal Loopback
+// Enable USART Internal loopback
+// Default: 0
+#define IOT_SPI_CFG_LOOPBACK_LOOPBACK 1
+
+//
+
+// <<< end of configuration section >>>
+
+/*******************************************************************************
+ * H/W PERIPHERAL CONFIG
+ ******************************************************************************/
+
+// <<< sl:start pin_tool >>>
+// IOT_SPI_CFG_LOOPBACK
+// $[USART_IOT_SPI_CFG_LOOPBACK]
+#define IOT_SPI_CFG_LOOPBACK_PERIPHERAL USART0
+#define IOT_SPI_CFG_LOOPBACK_PERIPHERAL_NO 0
+
+// USART0 TX on PC01
+#define IOT_SPI_CFG_LOOPBACK_TX_PORT gpioPortC
+#define IOT_SPI_CFG_LOOPBACK_TX_PIN 1
+
+// USART0 RX on PC02
+#define IOT_SPI_CFG_LOOPBACK_RX_PORT gpioPortC
+#define IOT_SPI_CFG_LOOPBACK_RX_PIN 2
+
+// USART0 CLK on PC03
+#define IOT_SPI_CFG_LOOPBACK_CLK_PORT gpioPortC
+#define IOT_SPI_CFG_LOOPBACK_CLK_PIN 3
+
+// USART0 CS on PC00
+#define IOT_SPI_CFG_LOOPBACK_CS_PORT gpioPortC
+#define IOT_SPI_CFG_LOOPBACK_CS_PIN 0
+
+// [USART_IOT_SPI_CFG_LOOPBACK]$
+// <<< sl:end pin_tool >>>
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#endif /* _IOT_SPI_CFG_LOOPBACK_H_ */
diff --git a/hardware/board/config/brd4328b_brd4001a/iot_uart_cfg_exp.h b/hardware/board/config/brd4328b_brd4001a/iot_uart_cfg_exp.h
new file mode 100644
index 0000000000..b9a823f0fa
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/iot_uart_cfg_exp.h
@@ -0,0 +1,126 @@
+/***************************************************************************//**
+ * @file iot_uart_cfg_inst.h
+ * @brief Common I/O UART instance configuration.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#ifndef _IOT_UART_CFG_EXP_H_
+#define _IOT_UART_CFG_EXP_H_
+
+/*******************************************************************************
+ * UART Default Configs
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// UART General Options
+
+// Instance number
+// Instance number used when iot_uart_open() is called.
+// Default: 0
+#define IOT_UART_CFG_EXP_INST_NUM 0
+
+// Default baud rate
+// Default: 115200
+#define IOT_UART_CFG_EXP_DEFAULT_BAUDRATE 115200
+
+// Default number of data bits
+// 4 data bits
+// 5 data bits
+// 6 data bits
+// 7 data bits
+// 8 data bits
+// Default: usartDatabits8
+#define IOT_UART_CFG_EXP_DEFAULT_DATA_BITS usartDatabits8
+
+// Default parity mode
+// No Parity
+// Even parity
+// Odd parity
+// Default: usartNoParity
+#define IOT_UART_CFG_EXP_DEFAULT_PARITY usartNoParity
+
+// Default number of stop bits
+// 0.5 stop bits
+// 1 stop bits
+// 1.5 stop bits
+// 2 stop bits
+// Default: usartStopbits1
+#define IOT_UART_CFG_EXP_DEFAULT_STOP_BITS usartStopbits1
+
+// Default hardware flow control
+// None
+// CTS
+// RTS
+// CTS/RTS
+// Default: usartHwFlowControlNone
+#define IOT_UART_CFG_EXP_DEFAULT_FLOW_CONTROL_TYPE usartHwFlowControlNone
+
+
+// Internal Loopback
+// Enable USART Internal loopback
+// Default: 0
+#define IOT_UART_CFG_EXP_LOOPBACK 0
+
+//
+
+// <<< end of configuration section >>>
+
+/*******************************************************************************
+ * H/W PERIPHERAL CONFIG
+ ******************************************************************************/
+
+// <<< sl:start pin_tool >>>
+// IOT_UART_CFG_EXP
+// $[USART_IOT_UART_CFG_EXP]
+#define IOT_UART_CFG_EXP_PERIPHERAL USART0
+#define IOT_UART_CFG_EXP_PERIPHERAL_NO 0
+
+// USART0 TX on PA08
+#define IOT_UART_CFG_EXP_TX_PORT gpioPortA
+#define IOT_UART_CFG_EXP_TX_PIN 8
+
+// USART0 RX on PA09
+#define IOT_UART_CFG_EXP_RX_PORT gpioPortA
+#define IOT_UART_CFG_EXP_RX_PIN 9
+
+
+
+
+
+// [USART_IOT_UART_CFG_EXP]$
+// <<< sl:end pin_tool >>>
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#endif /* _IOT_UART_CFG_EXP_H_ */
diff --git a/hardware/board/config/brd4328b_brd4001a/iot_uart_cfg_loopback.h b/hardware/board/config/brd4328b_brd4001a/iot_uart_cfg_loopback.h
new file mode 100644
index 0000000000..b9d7759c50
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/iot_uart_cfg_loopback.h
@@ -0,0 +1,132 @@
+/***************************************************************************//**
+ * @file iot_uart_cfg_inst.h
+ * @brief Common I/O UART instance configuration.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#ifndef _IOT_UART_CFG_LOOPBACK_H_
+#define _IOT_UART_CFG_LOOPBACK_H_
+
+/*******************************************************************************
+ * UART Default Configs
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// UART General Options
+
+// Instance number
+// Instance number used when iot_uart_open() is called.
+// Default: 0
+#define IOT_UART_CFG_LOOPBACK_INST_NUM 0
+
+// Default baud rate
+// Default: 115200
+#define IOT_UART_CFG_LOOPBACK_DEFAULT_BAUDRATE 115200
+
+// Default number of data bits
+// 4 data bits
+// 5 data bits
+// 6 data bits
+// 7 data bits
+// 8 data bits
+// Default: usartDatabits8
+#define IOT_UART_CFG_LOOPBACK_DEFAULT_DATA_BITS usartDatabits8
+
+// Default parity mode
+// No Parity
+// Even parity
+// Odd parity
+// Default: usartNoParity
+#define IOT_UART_CFG_LOOPBACK_DEFAULT_PARITY usartNoParity
+
+// Default number of stop bits
+// 0.5 stop bits
+// 1 stop bits
+// 1.5 stop bits
+// 2 stop bits
+// Default: usartStopbits1
+#define IOT_UART_CFG_LOOPBACK_DEFAULT_STOP_BITS usartStopbits1
+
+// Default hardware flow control
+// None
+// CTS
+// RTS
+// CTS/RTS
+// Default: usartHwFlowControlNone
+#define IOT_UART_CFG_LOOPBACK_DEFAULT_FLOW_CONTROL_TYPE usartHwFlowControlNone
+
+
+// Internal Loopback
+// Enable USART Internal loopback
+// Default: 0
+#define IOT_UART_CFG_LOOPBACK_LOOPBACK 1
+
+//
+
+// <<< end of configuration section >>>
+
+/*******************************************************************************
+ * H/W PERIPHERAL CONFIG
+ ******************************************************************************/
+
+// <<< sl:start pin_tool >>>
+// IOT_UART_CFG_LOOPBACK
+// $[USART_IOT_UART_CFG_LOOPBACK]
+#define IOT_UART_CFG_LOOPBACK_PERIPHERAL USART0
+#define IOT_UART_CFG_LOOPBACK_PERIPHERAL_NO 0
+
+// USART0 TX on PA08
+#define IOT_UART_CFG_LOOPBACK_TX_PORT gpioPortA
+#define IOT_UART_CFG_LOOPBACK_TX_PIN 8
+
+// USART0 RX on PA09
+#define IOT_UART_CFG_LOOPBACK_RX_PORT gpioPortA
+#define IOT_UART_CFG_LOOPBACK_RX_PIN 9
+
+
+
+// USART0 RTS on PA00
+#define IOT_UART_CFG_LOOPBACK_RTS_PORT gpioPortA
+#define IOT_UART_CFG_LOOPBACK_RTS_PIN 0
+
+// USART0 CTS on PA10
+#define IOT_UART_CFG_LOOPBACK_CTS_PORT gpioPortA
+#define IOT_UART_CFG_LOOPBACK_CTS_PIN 10
+
+// [USART_IOT_UART_CFG_LOOPBACK]$
+// <<< sl:end pin_tool >>>
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#endif /* _IOT_UART_CFG_LOOPBACK_H_ */
diff --git a/hardware/board/config/brd4328b_brd4001a/iot_uart_cfg_vcom.h b/hardware/board/config/brd4328b_brd4001a/iot_uart_cfg_vcom.h
new file mode 100644
index 0000000000..ea72497782
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/iot_uart_cfg_vcom.h
@@ -0,0 +1,132 @@
+/***************************************************************************//**
+ * @file iot_uart_cfg_inst.h
+ * @brief Common I/O UART instance configuration.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#ifndef _IOT_UART_CFG_VCOM_H_
+#define _IOT_UART_CFG_VCOM_H_
+
+/*******************************************************************************
+ * UART Default Configs
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// UART General Options
+
+// Instance number
+// Instance number used when iot_uart_open() is called.
+// Default: 0
+#define IOT_UART_CFG_VCOM_INST_NUM 0
+
+// Default baud rate
+// Default: 115200
+#define IOT_UART_CFG_VCOM_DEFAULT_BAUDRATE 115200
+
+// Default number of data bits
+// 4 data bits
+// 5 data bits
+// 6 data bits
+// 7 data bits
+// 8 data bits
+// Default: usartDatabits8
+#define IOT_UART_CFG_VCOM_DEFAULT_DATA_BITS usartDatabits8
+
+// Default parity mode
+// No Parity
+// Even parity
+// Odd parity
+// Default: usartNoParity
+#define IOT_UART_CFG_VCOM_DEFAULT_PARITY usartNoParity
+
+// Default number of stop bits
+// 0.5 stop bits
+// 1 stop bits
+// 1.5 stop bits
+// 2 stop bits
+// Default: usartStopbits1
+#define IOT_UART_CFG_VCOM_DEFAULT_STOP_BITS usartStopbits1
+
+// Default hardware flow control
+// None
+// CTS
+// RTS
+// CTS/RTS
+// Default: usartHwFlowControlNone
+#define IOT_UART_CFG_VCOM_DEFAULT_FLOW_CONTROL_TYPE usartHwFlowControlNone
+
+
+// Internal Loopback
+// Enable USART Internal loopback
+// Default: 0
+#define IOT_UART_CFG_VCOM_LOOPBACK 0
+
+//
+
+// <<< end of configuration section >>>
+
+/*******************************************************************************
+ * H/W PERIPHERAL CONFIG
+ ******************************************************************************/
+
+// <<< sl:start pin_tool >>>
+// IOT_UART_CFG_VCOM
+// $[USART_IOT_UART_CFG_VCOM]
+#define IOT_UART_CFG_VCOM_PERIPHERAL USART0
+#define IOT_UART_CFG_VCOM_PERIPHERAL_NO 0
+
+// USART0 TX on PA08
+#define IOT_UART_CFG_VCOM_TX_PORT gpioPortA
+#define IOT_UART_CFG_VCOM_TX_PIN 8
+
+// USART0 RX on PA09
+#define IOT_UART_CFG_VCOM_RX_PORT gpioPortA
+#define IOT_UART_CFG_VCOM_RX_PIN 9
+
+
+
+// USART0 RTS on PA00
+#define IOT_UART_CFG_VCOM_RTS_PORT gpioPortA
+#define IOT_UART_CFG_VCOM_RTS_PIN 0
+
+// USART0 CTS on PA10
+#define IOT_UART_CFG_VCOM_CTS_PORT gpioPortA
+#define IOT_UART_CFG_VCOM_CTS_PIN 10
+
+// [USART_IOT_UART_CFG_VCOM]$
+// <<< sl:end pin_tool >>>
+
+/*******************************************************************************
+ * SAFE GUARD
+ ******************************************************************************/
+
+#endif /* _IOT_UART_CFG_VCOM_H_ */
diff --git a/hardware/board/config/brd4328b_brd4001a/legacy_ncp_spi_config.h b/hardware/board/config/brd4328b_brd4001a/legacy_ncp_spi_config.h
new file mode 100644
index 0000000000..d11f9eeb32
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/legacy_ncp_spi_config.h
@@ -0,0 +1,60 @@
+/***************************************************************************//**
+ * @file
+ * @brief SPIDRV Config
+ *******************************************************************************
+ * # License
+ * Copyright 2019 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.
+ *
+ ******************************************************************************/
+
+#ifndef LEGACY_NCP_SPI_CONFIG_H
+#define LEGACY_NCP_SPI_CONFIG_H
+
+// <<< sl:start pin_tool >>>
+// LEGACY_NCP_SPI
+// $[USART_LEGACY_NCP_SPI]
+#define LEGACY_NCP_SPI_PERIPHERAL USART0
+#define LEGACY_NCP_SPI_PERIPHERAL_NO 0
+
+// USART0 TX on PC01
+#define LEGACY_NCP_SPI_TX_PORT gpioPortC
+#define LEGACY_NCP_SPI_TX_PIN 1
+
+// USART0 RX on PC02
+#define LEGACY_NCP_SPI_RX_PORT gpioPortC
+#define LEGACY_NCP_SPI_RX_PIN 2
+
+// USART0 CLK on PC03
+#define LEGACY_NCP_SPI_CLK_PORT gpioPortC
+#define LEGACY_NCP_SPI_CLK_PIN 3
+
+// USART0 CS on PC00
+#define LEGACY_NCP_SPI_CS_PORT gpioPortC
+#define LEGACY_NCP_SPI_CS_PIN 0
+
+// [USART_LEGACY_NCP_SPI]$
+
+// LEGACY_NCP_SPI_HOST_INT
+// $[GPIO_LEGACY_NCP_SPI_HOST_INT]
+#define LEGACY_NCP_SPI_HOST_INT_PORT gpioPortA
+#define LEGACY_NCP_SPI_HOST_INT_PIN 5
+
+// [GPIO_LEGACY_NCP_SPI_HOST_INT]$
+
+// LEGACY_NCP_SPI_WAKE_INT
+// $[GPIO_LEGACY_NCP_SPI_WAKE_INT]
+#define LEGACY_NCP_SPI_WAKE_INT_PORT gpioPortD
+#define LEGACY_NCP_SPI_WAKE_INT_PIN 2
+
+// [GPIO_LEGACY_NCP_SPI_WAKE_INT]$
+// <<< sl:end pin_tool >>>
+
+#endif // SL_SPIDRV_EXP_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_board_control_config.h b/hardware/board/config/brd4328b_brd4001a/sl_board_control_config.h
new file mode 100644
index 0000000000..049d22e03a
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_board_control_config.h
@@ -0,0 +1,76 @@
+/***************************************************************************//**
+ * @file
+ * @brief Board Control
+ *******************************************************************************
+ * # License
+ * Copyright 2022 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_BOARD_CONTROL_CONFIG_H
+#define SL_BOARD_CONTROL_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// Enable Virtual COM UART
+// Default: 0
+#define SL_BOARD_ENABLE_VCOM 0
+
+// Enable Display
+// Default: 0
+#define SL_BOARD_ENABLE_DISPLAY 0
+
+// Enable Relative Humidity and Temperature sensor
+// Default: 0
+#define SL_BOARD_ENABLE_SENSOR_RHT 0
+
+// Disable SPI Flash
+// Default: 1
+#define SL_BOARD_DISABLE_MEMORY_SPI 1
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+
+// SL_BOARD_ENABLE_VCOM
+// $[GPIO_SL_BOARD_ENABLE_VCOM]
+#define SL_BOARD_ENABLE_VCOM_PORT gpioPortB
+#define SL_BOARD_ENABLE_VCOM_PIN 0
+// [GPIO_SL_BOARD_ENABLE_VCOM]$
+
+// SL_BOARD_ENABLE_DISPLAY
+// $[GPIO_SL_BOARD_ENABLE_DISPLAY]
+#define SL_BOARD_ENABLE_DISPLAY_PORT gpioPortC
+#define SL_BOARD_ENABLE_DISPLAY_PIN 9
+// [GPIO_SL_BOARD_ENABLE_DISPLAY]$
+
+// SL_BOARD_ENABLE_SENSOR_RHT
+// $[GPIO_SL_BOARD_ENABLE_SENSOR_RHT]
+#define SL_BOARD_ENABLE_SENSOR_RHT_PORT gpioPortD
+#define SL_BOARD_ENABLE_SENSOR_RHT_PIN 0
+// [GPIO_SL_BOARD_ENABLE_SENSOR_RHT]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // SL_BOARD_CONTROL_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_secondary_spi_eusart_exp_config.h b/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_secondary_spi_eusart_exp_config.h
new file mode 100644
index 0000000000..e7b20e6571
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_secondary_spi_eusart_exp_config.h
@@ -0,0 +1,120 @@
+/***************************************************************************//**
+ * @file
+ * @brief CPC SPI SECONDARY driver configuration file.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_CPC_DRV_SPI_EUSART_EXP_SECONDARY_CONFIG_H
+#define SL_CPC_DRV_SPI_EUSART_EXP_SECONDARY_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// CPC-Secondary SPI Driver Configuration
+
+// Queues size configuration
+
+// Number of frame that can be queued in the driver receive queue
+// A greater number decreases the chances of retransmission due to dropped frames at the cost of memory footprint
+// Default : 10
+// 10
+#define SL_CPC_DRV_SPI_EXP_RX_QUEUE_SIZE 10
+
+// Number of frame that can be queued in the driver transmit queue
+// A greater number increases the transmission responsiveness at the cost of memory footprint
+// Default : 10
+// 10
+#define SL_CPC_DRV_SPI_EXP_TX_QUEUE_SIZE 10
+//
+
+// LDMA SYNCTRIG bit configuration
+// The LDMA SYNCTRIG bit number for the TX availability [bit] <0-7>
+// Specify which SYNCTRIG bit is used. Modify this value to avoid collisions if specific LDMA SYNCTRIG bits need to be used elsewhere in the project.
+// Default : 7
+// 7
+#define SL_CPC_DRV_SPI_EXP_TX_AVAILABILITY_SYNCTRIG_CH 6
+
+// The LDMA SYNCTRIG bit number for the CS PRS channel [bit] <0-7>
+// Specify which SYNCTRIG bit is used. Modify this value to avoid collisions if specific LDMA SYNCTRIG bits need to be used elsewhere in the project.
+// This bit number is tied to the equivalent PRS channel number. Keep that in mind if using PRS channels elsewhere in the project.
+// Default : 5
+// 5
+#define SL_CPC_DRV_SPI_EXP_CS_SYNCTRIG_PRS_CH 5
+
+// The LDMA SYNCTRIG bit number for the TXC PRS channel [bit] <0-7>
+// Specify which SYNCTRIG bit is used. Modify this value to avoid collisions if specific LDMA SYNCTRIG bits need to be used elsewhere in the project.
+// This bit number is tied to the equivalent PRS channel number. Keep that in mind if using PRS channels elsewhere in the project.
+// Default : 6
+// 6
+#define SL_CPC_DRV_SPI_EXP_TXC_SYNCTRIG_PRS_CH 4
+//
+
+// Chip Select PRS Routing
+// The Chip Select input to EXTernal Interrupt number <0-7>
+// The CS input needs to be routed to a PRS channel in order to manipulate its LDMA SYNCTRIG bit.
+// Modify this value to avoid collisions if any specific EXTI number needs to be used elsewhere in the project.
+// Note that only EXTI0..7 can be used as input for a PRS channel, and only pins Px0..7 can be routed to those.
+// Default : 0 (pin0..4 of any port)
+// 0
+#define SL_CPC_DRV_SPI_EXP_CS_EXTI_NUMBER 0
+//
+
+//
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_CPC_DRV_SPI_EXP_RX_IRQ
+// $[GPIO_SL_CPC_DRV_SPI_EXP_RX_IRQ]
+#define SL_CPC_DRV_SPI_EXP_RX_IRQ_PORT gpioPortA
+#define SL_CPC_DRV_SPI_EXP_RX_IRQ_PIN 5
+
+// [GPIO_SL_CPC_DRV_SPI_EXP_RX_IRQ]$
+
+// SL_CPC_DRV_SPI_EXP
+// $[EUSART_SL_CPC_DRV_SPI_EXP]
+#define SL_CPC_DRV_SPI_EXP_PERIPHERAL EUSART1
+#define SL_CPC_DRV_SPI_EXP_PERIPHERAL_NO 1
+
+// EUSART1 TX on PC01
+#define SL_CPC_DRV_SPI_EXP_TX_PORT gpioPortC
+#define SL_CPC_DRV_SPI_EXP_TX_PIN 1
+
+// EUSART1 RX on PC02
+#define SL_CPC_DRV_SPI_EXP_RX_PORT gpioPortC
+#define SL_CPC_DRV_SPI_EXP_RX_PIN 2
+
+// EUSART1 SCLK on PC03
+#define SL_CPC_DRV_SPI_EXP_SCLK_PORT gpioPortC
+#define SL_CPC_DRV_SPI_EXP_SCLK_PIN 3
+
+// EUSART1 CS on PC00
+#define SL_CPC_DRV_SPI_EXP_CS_PORT gpioPortC
+#define SL_CPC_DRV_SPI_EXP_CS_PIN 0
+
+// [EUSART_SL_CPC_DRV_SPI_EXP]$
+// <<< sl:end pin_tool >>>
+
+#endif /* SL_CPC_DRV_SPI_EXP_SECONDARY_CONFIG_H */
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_secondary_spi_usart_exp_config.h b/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_secondary_spi_usart_exp_config.h
new file mode 100644
index 0000000000..c69f5a5ed0
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_secondary_spi_usart_exp_config.h
@@ -0,0 +1,110 @@
+/***************************************************************************//**
+ * @file
+ * @brief CPC SPI SECONDARY driver configuration file.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_CPC_DRV_SPI_USART_EXP_SECONDARY_CONFIG_H
+#define SL_CPC_DRV_SPI_USART_EXP_SECONDARY_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// CPC-Secondary SPI Driver Configuration
+
+// Queues size configuration
+
+// Number of frame that can be queued in the driver receive queue
+// A greater number decreases the chances of retransmission due to dropped frames at the cost of memory footprint.
+// Default : 10
+// 10
+#define SL_CPC_DRV_SPI_EXP_RX_QUEUE_SIZE 10
+
+// Number of frame that can be queued in the driver transmit queue
+// A greater number increases the transmission responsiveness at the cost of memory footprint.
+// Default : 10
+// 10
+#define SL_CPC_DRV_SPI_EXP_TX_QUEUE_SIZE 10
+//
+
+// LDMA SYNCTRIG bit configuration
+// The LDMA SYNCTRIG bit number for the TX availability [bit] <0-7>
+// Specify which SYNCTRIG bit is used. Modify this value to avoid collisions if specific LDMA SYNCTRIG bits need to be used elsewhere in the project.
+// Default : 7
+// 7
+#define SL_CPC_DRV_SPI_EXP_TX_AVAILABILITY_SYNCTRIG_CH 6
+
+// The LDMA SYNCTRIG bit number for the CS PRS channel [bit] <0-7>
+// Specify which SYNCTRIG bit is used. Modify this value to avoid collisions if specific LDMA SYNCTRIG bits need to be used elsewhere in the project.
+// This bit number is tied to the equivalent PRS channel number. Keep that in mind if using PRS channels elsewhere in the project.
+// Default : 5
+// 5
+#define SL_CPC_DRV_SPI_EXP_CS_SYNCTRIG_PRS_CH 5
+
+// The LDMA SYNCTRIG bit number for the TXC PRS channel [bit] <0-7>
+// Specify which SYNCTRIG bit is used. Modify this value to avoid collisions if specific LDMA SYNCTRIG bits need to be used elsewhere in the project.
+// This bit number is tied to the equivalent PRS channel number. Keep that in mind if using PRS channels elsewhere in the project.
+// Default : 6
+// 6
+#define SL_CPC_DRV_SPI_EXP_TXC_SYNCTRIG_PRS_CH 4
+
+//
+//
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_CPC_DRV_SPI_EXP_RX_IRQ
+// $[GPIO_SL_CPC_DRV_SPI_EXP_RX_IRQ]
+#define SL_CPC_DRV_SPI_EXP_RX_IRQ_PORT gpioPortA
+#define SL_CPC_DRV_SPI_EXP_RX_IRQ_PIN 5
+
+// [GPIO_SL_CPC_DRV_SPI_EXP_RX_IRQ]$
+
+// SL_CPC_DRV_SPI_EXP
+// $[USART_SL_CPC_DRV_SPI_EXP]
+#define SL_CPC_DRV_SPI_EXP_PERIPHERAL USART0
+#define SL_CPC_DRV_SPI_EXP_PERIPHERAL_NO 0
+
+// USART0 TX on PC01
+#define SL_CPC_DRV_SPI_EXP_TX_PORT gpioPortC
+#define SL_CPC_DRV_SPI_EXP_TX_PIN 1
+
+// USART0 RX on PC02
+#define SL_CPC_DRV_SPI_EXP_RX_PORT gpioPortC
+#define SL_CPC_DRV_SPI_EXP_RX_PIN 2
+
+// USART0 CLK on PC03
+#define SL_CPC_DRV_SPI_EXP_CLK_PORT gpioPortC
+#define SL_CPC_DRV_SPI_EXP_CLK_PIN 3
+
+// USART0 CS on PC00
+#define SL_CPC_DRV_SPI_EXP_CS_PORT gpioPortC
+#define SL_CPC_DRV_SPI_EXP_CS_PIN 0
+
+// [USART_SL_CPC_DRV_SPI_EXP]$
+// <<< sl:end pin_tool >>>
+
+#endif /* SL_CPC_DRV_SPI_EXP_SECONDARY_CONFIG_H */
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_uart_eusart_exp_config.h b/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_uart_eusart_exp_config.h
new file mode 100644
index 0000000000..d99b864969
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_uart_eusart_exp_config.h
@@ -0,0 +1,84 @@
+/***************************************************************************//**
+ * @file
+ * @brief CPC EUSART driver configuration file.
+ *******************************************************************************
+ * # License
+ * Copyright 2023 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+#ifndef SL_CPC_DRV_UART_EUSART_EXP_CONFIG_H
+#define SL_CPC_DRV_UART_EUSART_EXP_CONFIG_H
+
+// CPC - EUSART Driver Configuration
+
+// Number of frame that can be queued in the driver receive queue
+// Default: 10
+#define SL_CPC_DRV_UART_EXP_RX_QUEUE_SIZE 10
+
+// Number of frame that can be queued in the driver transmit queue
+// Default: 10
+#define SL_CPC_DRV_UART_EXP_TX_QUEUE_SIZE 10
+
+// EUSART Baudrate
+// Default: 115200
+#define SL_CPC_DRV_UART_EXP_BAUDRATE 115200
+
+// Flow control
+// None
+// CTS/RTS
+// Default: eusartHwFlowControlNone
+#define SL_CPC_DRV_UART_EXP_FLOW_CONTROL_TYPE eusartHwFlowControlCtsAndRts
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_CPC_DRV_UART_EXP
+// $[EUSART_SL_CPC_DRV_UART_EXP]
+#define SL_CPC_DRV_UART_EXP_PERIPHERAL EUSART1
+#define SL_CPC_DRV_UART_EXP_PERIPHERAL_NO 1
+
+// EUSART1 TX on PC01
+#define SL_CPC_DRV_UART_EXP_TX_PORT gpioPortC
+#define SL_CPC_DRV_UART_EXP_TX_PIN 1
+
+// EUSART1 RX on PC02
+#define SL_CPC_DRV_UART_EXP_RX_PORT gpioPortC
+#define SL_CPC_DRV_UART_EXP_RX_PIN 2
+
+// EUSART1 CTS on PC03
+#define SL_CPC_DRV_UART_EXP_CTS_PORT gpioPortC
+#define SL_CPC_DRV_UART_EXP_CTS_PIN 3
+
+// EUSART1 RTS on PC00
+#define SL_CPC_DRV_UART_EXP_RTS_PORT gpioPortC
+#define SL_CPC_DRV_UART_EXP_RTS_PIN 0
+
+// [EUSART_SL_CPC_DRV_UART_EXP]$
+// <<< sl:end pin_tool >>>
+
+#endif /* SL_CPC_DRV_UART_EXP_CONFIG_H */
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_uart_eusart_vcom_config.h b/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_uart_eusart_vcom_config.h
new file mode 100644
index 0000000000..6901c2ac47
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_uart_eusart_vcom_config.h
@@ -0,0 +1,84 @@
+/***************************************************************************//**
+ * @file
+ * @brief CPC EUSART driver configuration file.
+ *******************************************************************************
+ * # License
+ * Copyright 2023 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+#ifndef SL_CPC_DRV_UART_EUSART_VCOM_CONFIG_H
+#define SL_CPC_DRV_UART_EUSART_VCOM_CONFIG_H
+
+// CPC - EUSART Driver Configuration
+
+// Number of frame that can be queued in the driver receive queue
+// Default: 10
+#define SL_CPC_DRV_UART_VCOM_RX_QUEUE_SIZE 10
+
+// Number of frame that can be queued in the driver transmit queue
+// Default: 10
+#define SL_CPC_DRV_UART_VCOM_TX_QUEUE_SIZE 10
+
+// EUSART Baudrate
+// Default: 115200
+#define SL_CPC_DRV_UART_VCOM_BAUDRATE 115200
+
+// Flow control
+// None
+// CTS/RTS
+// Default: eusartHwFlowControlNone
+#define SL_CPC_DRV_UART_VCOM_FLOW_CONTROL_TYPE eusartHwFlowControlCtsAndRts
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_CPC_DRV_UART_VCOM
+// $[EUSART_SL_CPC_DRV_UART_VCOM]
+#define SL_CPC_DRV_UART_VCOM_PERIPHERAL EUSART0
+#define SL_CPC_DRV_UART_VCOM_PERIPHERAL_NO 0
+
+// EUSART0 TX on PA08
+#define SL_CPC_DRV_UART_VCOM_TX_PORT gpioPortA
+#define SL_CPC_DRV_UART_VCOM_TX_PIN 8
+
+// EUSART0 RX on PA09
+#define SL_CPC_DRV_UART_VCOM_RX_PORT gpioPortA
+#define SL_CPC_DRV_UART_VCOM_RX_PIN 9
+
+// EUSART0 CTS on PA10
+#define SL_CPC_DRV_UART_VCOM_CTS_PORT gpioPortA
+#define SL_CPC_DRV_UART_VCOM_CTS_PIN 10
+
+// EUSART0 RTS on PA00
+#define SL_CPC_DRV_UART_VCOM_RTS_PORT gpioPortA
+#define SL_CPC_DRV_UART_VCOM_RTS_PIN 0
+
+// [EUSART_SL_CPC_DRV_UART_VCOM]$
+// <<< sl:end pin_tool >>>
+
+#endif /* SL_CPC_DRV_UART_VCOM_CONFIG_H */
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_uart_usart_exp_config.h b/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_uart_usart_exp_config.h
new file mode 100644
index 0000000000..467312777c
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_uart_usart_exp_config.h
@@ -0,0 +1,84 @@
+/***************************************************************************//**
+ * @file
+ * @brief CPC UART driver configuration file.
+ *******************************************************************************
+ * # License
+ * Copyright 2023 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+#ifndef SL_CPC_DRV_UART_USART_EXP_CONFIG_H
+#define SL_CPC_DRV_UART_USART_EXP_CONFIG_H
+
+// CPC - UART Driver Configuration
+
+// Number of frame that can be queued in the driver receive queue
+// Default: 10
+#define SL_CPC_DRV_UART_EXP_RX_QUEUE_SIZE 10
+
+// Number of frame that can be queued in the driver transmit queue
+// Default: 10
+#define SL_CPC_DRV_UART_EXP_TX_QUEUE_SIZE 10
+
+// UART Baudrate
+// Default: 115200
+#define SL_CPC_DRV_UART_EXP_BAUDRATE 115200
+
+// Flow control
+// None
+// CTS/RTS
+// Default: usartHwFlowControlCtsAndRts
+#define SL_CPC_DRV_UART_EXP_FLOW_CONTROL_TYPE usartHwFlowControlCtsAndRts
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_CPC_DRV_UART_EXP
+// $[USART_SL_CPC_DRV_UART_EXP]
+#define SL_CPC_DRV_UART_EXP_PERIPHERAL USART0
+#define SL_CPC_DRV_UART_EXP_PERIPHERAL_NO 0
+
+// USART0 TX on PC01
+#define SL_CPC_DRV_UART_EXP_TX_PORT gpioPortC
+#define SL_CPC_DRV_UART_EXP_TX_PIN 1
+
+// USART0 RX on PC02
+#define SL_CPC_DRV_UART_EXP_RX_PORT gpioPortC
+#define SL_CPC_DRV_UART_EXP_RX_PIN 2
+
+// USART0 CTS on PC03
+#define SL_CPC_DRV_UART_EXP_CTS_PORT gpioPortC
+#define SL_CPC_DRV_UART_EXP_CTS_PIN 3
+
+// USART0 RTS on PC00
+#define SL_CPC_DRV_UART_EXP_RTS_PORT gpioPortC
+#define SL_CPC_DRV_UART_EXP_RTS_PIN 0
+
+// [USART_SL_CPC_DRV_UART_EXP]$
+// <<< sl:end pin_tool >>>
+
+#endif /* SL_CPC_DRV_UART_EXP_CONFIG_H */
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_uart_usart_vcom_config.h b/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_uart_usart_vcom_config.h
new file mode 100644
index 0000000000..5e13497282
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_cpc_drv_uart_usart_vcom_config.h
@@ -0,0 +1,84 @@
+/***************************************************************************//**
+ * @file
+ * @brief CPC UART driver configuration file.
+ *******************************************************************************
+ * # License
+ * Copyright 2023 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+#ifndef SL_CPC_DRV_UART_USART_VCOM_CONFIG_H
+#define SL_CPC_DRV_UART_USART_VCOM_CONFIG_H
+
+// CPC - UART Driver Configuration
+
+// Number of frame that can be queued in the driver receive queue
+// Default: 10
+#define SL_CPC_DRV_UART_VCOM_RX_QUEUE_SIZE 10
+
+// Number of frame that can be queued in the driver transmit queue
+// Default: 10
+#define SL_CPC_DRV_UART_VCOM_TX_QUEUE_SIZE 10
+
+// UART Baudrate
+// Default: 115200
+#define SL_CPC_DRV_UART_VCOM_BAUDRATE 115200
+
+// Flow control
+// None
+// CTS/RTS
+// Default: usartHwFlowControlCtsAndRts
+#define SL_CPC_DRV_UART_VCOM_FLOW_CONTROL_TYPE usartHwFlowControlCtsAndRts
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_CPC_DRV_UART_VCOM
+// $[USART_SL_CPC_DRV_UART_VCOM]
+#define SL_CPC_DRV_UART_VCOM_PERIPHERAL USART0
+#define SL_CPC_DRV_UART_VCOM_PERIPHERAL_NO 0
+
+// USART0 TX on PA08
+#define SL_CPC_DRV_UART_VCOM_TX_PORT gpioPortA
+#define SL_CPC_DRV_UART_VCOM_TX_PIN 8
+
+// USART0 RX on PA09
+#define SL_CPC_DRV_UART_VCOM_RX_PORT gpioPortA
+#define SL_CPC_DRV_UART_VCOM_RX_PIN 9
+
+// USART0 CTS on PA10
+#define SL_CPC_DRV_UART_VCOM_CTS_PORT gpioPortA
+#define SL_CPC_DRV_UART_VCOM_CTS_PIN 10
+
+// USART0 RTS on PA00
+#define SL_CPC_DRV_UART_VCOM_RTS_PORT gpioPortA
+#define SL_CPC_DRV_UART_VCOM_RTS_PIN 0
+
+// [USART_SL_CPC_DRV_UART_VCOM]$
+// <<< sl:end pin_tool >>>
+
+#endif /* SL_CPC_DRV_UART_VCOM_CONFIG_H */
diff --git a/platform/radio/rail_lib/plugin/rail_util_sequencer/config/efr32xg13/seq_1_zwave/sl_rail_util_sequencer_config.h b/hardware/board/config/brd4328b_brd4001a/sl_cpc_gpio_expander_gpio_btn0_config.h
similarity index 62%
rename from platform/radio/rail_lib/plugin/rail_util_sequencer/config/efr32xg13/seq_1_zwave/sl_rail_util_sequencer_config.h
rename to hardware/board/config/brd4328b_brd4001a/sl_cpc_gpio_expander_gpio_btn0_config.h
index 3701c8af33..331c3bc888 100644
--- a/platform/radio/rail_lib/plugin/rail_util_sequencer/config/efr32xg13/seq_1_zwave/sl_rail_util_sequencer_config.h
+++ b/hardware/board/config/brd4328b_brd4001a/sl_cpc_gpio_expander_gpio_btn0_config.h
@@ -1,6 +1,6 @@
/***************************************************************************//**
* @file
- * @brief
+ * @brief CPC GPIO Expander instance configuration file.
*******************************************************************************
* # License
* Copyright 2023 Silicon Laboratories Inc. www.silabs.com
@@ -28,21 +28,26 @@
*
******************************************************************************/
-#ifndef SL_RAIL_UTIL_SEQUENCER_H
-#define SL_RAIL_UTIL_SEQUENCER_H
+// <<< Use Configuration Wizard in Context Menu >>>
-#include "rail.h"
+#ifndef SL_CPC_GPIO_EXPANDER_GPIO_BTN0_CONFIG_H
+#define SL_CPC_GPIO_EXPANDER_GPIO_BTN0_CONFIG_H
-#ifdef __cplusplus
-extern "C" {
-#endif
+// GPIO Pin Name
+// Specify the name of the GPIO pin instance which is reported to the Host/Primary device
+// Default: "UNDEFINED"
+#define SL_CPC_GPIO_EXPANDER_GPIO_BTN0_NAME "BTN0"
-#define SL_RAIL_UTIL_SEQUENCER_RUNTIME_IMAGE_SELECTION 0
+// <<< end of configuration section >>>
-#define SL_RAIL_UTIL_SEQUENCER_IMAGE RAIL_SEQ_IMAGE_ZWAVE
+// <<< sl:start pin_tool >>>
+// SL_CPC_GPIO_EXPANDER_GPIO_BTN0
+// $[GPIO_SL_CPC_GPIO_EXPANDER_GPIO_BTN0]
+#define SL_CPC_GPIO_EXPANDER_GPIO_BTN0_PORT gpioPortB
+#define SL_CPC_GPIO_EXPANDER_GPIO_BTN0_PIN 1
-#ifdef __cplusplus
-}
-#endif
+// [GPIO_SL_CPC_GPIO_EXPANDER_GPIO_BTN0]$
-#endif // SL_RAIL_UTIL_SEQUENCER_H
+// <<< sl:end pin_tool >>>
+
+#endif /* SL_CPC_GPIO_EXPANDER_GPIO_BTN0_CONFIG_H */
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_cpc_gpio_expander_gpio_btn1_config.h b/hardware/board/config/brd4328b_brd4001a/sl_cpc_gpio_expander_gpio_btn1_config.h
new file mode 100644
index 0000000000..74ef962318
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_cpc_gpio_expander_gpio_btn1_config.h
@@ -0,0 +1,53 @@
+/***************************************************************************//**
+ * @file
+ * @brief CPC GPIO Expander instance configuration file.
+ *******************************************************************************
+ * # License
+ * Copyright 2023 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+#ifndef SL_CPC_GPIO_EXPANDER_GPIO_BTN1_CONFIG_H
+#define SL_CPC_GPIO_EXPANDER_GPIO_BTN1_CONFIG_H
+
+// GPIO Pin Name
+// Specify the name of the GPIO pin instance which is reported to the Host/Primary device
+// Default: "UNDEFINED"
+#define SL_CPC_GPIO_EXPANDER_GPIO_BTN1_NAME "BTN1"
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_CPC_GPIO_EXPANDER_GPIO_BTN1
+// $[GPIO_SL_CPC_GPIO_EXPANDER_GPIO_BTN1]
+#define SL_CPC_GPIO_EXPANDER_GPIO_BTN1_PORT gpioPortB
+#define SL_CPC_GPIO_EXPANDER_GPIO_BTN1_PIN 3
+
+// [GPIO_SL_CPC_GPIO_EXPANDER_GPIO_BTN1]$
+
+// <<< sl:end pin_tool >>>
+
+#endif /* SL_CPC_GPIO_EXPANDER_GPIO_BTN1_CONFIG_H */
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_device_init_hfxo_config.h b/hardware/board/config/brd4328b_brd4001a/sl_device_init_hfxo_config.h
new file mode 100644
index 0000000000..78b14ee253
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_device_init_hfxo_config.h
@@ -0,0 +1,57 @@
+/***************************************************************************//**
+ * @file
+ * @brief DEVICE_INIT_HFXO Config
+ *******************************************************************************
+ * # License
+ * Copyright 2022 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_DEVICE_INIT_HFXO_CONFIG_H
+#define SL_DEVICE_INIT_HFXO_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// Mode
+//
+// Crystal oscillator
+// External sine wave
+// Default: cmuHfxoOscMode_Crystal
+#define SL_DEVICE_INIT_HFXO_MODE cmuHfxoOscMode_Crystal
+
+// Frequency <38000000-40000000>
+// Default: 39000000
+#define SL_DEVICE_INIT_HFXO_FREQ 39000000
+
+// HFXO precision in PPM <0-65535>
+// Default: 50
+#define SL_DEVICE_INIT_HFXO_PRECISION 50
+
+// CTUNE <0-255>
+// Default: 140
+#define SL_DEVICE_INIT_HFXO_CTUNE 140
+
+// <<< end of configuration section >>>
+
+#endif // SL_DEVICE_INIT_HFXO_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_i2cspm_sensor_config.h b/hardware/board/config/brd4328b_brd4001a/sl_i2cspm_sensor_config.h
new file mode 100644
index 0000000000..b5fedf050d
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_i2cspm_sensor_config.h
@@ -0,0 +1,71 @@
+/***************************************************************************//**
+ * @file
+ * @brief I2CSPM Config
+ *******************************************************************************
+ * # License
+ * Copyright 2019 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_I2CSPM_SENSOR_CONFIG_H
+#define SL_I2CSPM_SENSOR_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu
+
+// I2CSPM settings
+
+// Reference clock frequency
+// Frequency in Hz of the reference clock.
+// Select 0 to use the frequency of the currently selected clock.
+// Default: 0
+#define SL_I2CSPM_SENSOR_REFERENCE_CLOCK 0
+
+// Speed mode
+// <0=> Standard mode (100kbit/s)
+// <1=> Fast mode (400kbit/s)
+// <2=> Fast mode plus (1Mbit/s)
+// Default: 0
+#define SL_I2CSPM_SENSOR_SPEED_MODE 0
+// end I2CSPM config
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_I2CSPM_SENSOR
+// $[I2C_SL_I2CSPM_SENSOR]
+#define SL_I2CSPM_SENSOR_PERIPHERAL I2C1
+#define SL_I2CSPM_SENSOR_PERIPHERAL_NO 1
+
+// I2C1 SCL on PC05
+#define SL_I2CSPM_SENSOR_SCL_PORT gpioPortC
+#define SL_I2CSPM_SENSOR_SCL_PIN 5
+
+// I2C1 SDA on PC07
+#define SL_I2CSPM_SENSOR_SDA_PORT gpioPortC
+#define SL_I2CSPM_SENSOR_SDA_PIN 7
+
+// [I2C_SL_I2CSPM_SENSOR]$
+// <<< sl:end pin_tool >>>
+
+#endif // SL_I2CSPM_SENSOR_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_iostream_eusart_exp_config.h b/hardware/board/config/brd4328b_brd4001a/sl_iostream_eusart_exp_config.h
new file mode 100644
index 0000000000..cbe96bbdcb
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_iostream_eusart_exp_config.h
@@ -0,0 +1,107 @@
+/***************************************************************************//**
+ * @file
+ * @brief IOSTREAM_EUSART Config.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_IOSTREAM_EUSART_EXP_CONFIG_H
+#define SL_IOSTREAM_EUSART_EXP_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// EUART settings
+
+// Enable High frequency mode
+// Default: 1
+#define SL_IOSTREAM_EUSART_EXP_ENABLE_HIGH_FREQUENCY 1
+
+// Baud rate
+// Default: 115200
+#define SL_IOSTREAM_EUSART_EXP_BAUDRATE 115200
+
+// Parity mode to use
+// No Parity
+// Even parity
+// Odd parity
+// Default: eusartNoParity
+#define SL_IOSTREAM_EUSART_EXP_PARITY eusartNoParity
+
+// Number of stop bits to use.
+// 0.5 stop bits
+// 1 stop bits
+// 1.5 stop bits
+// 2 stop bits
+// Default: eusartStopbits1
+#define SL_IOSTREAM_EUSART_EXP_STOP_BITS eusartStopbits1
+
+// Flow control
+// None
+// CTS
+// RTS
+// CTS/RTS
+// Software Flow control (XON/XOFF)
+// Default: eusartHwFlowControlNone
+#define SL_IOSTREAM_EUSART_EXP_FLOW_CONTROL_TYPE eusartHwFlowControlNone
+
+// Receive buffer size
+// Default: 32
+#define SL_IOSTREAM_EUSART_EXP_RX_BUFFER_SIZE 32
+
+// Convert \n to \r\n
+// It can be changed at runtime using the C API.
+// Default: 0
+#define SL_IOSTREAM_EUSART_EXP_CONVERT_BY_DEFAULT_LF_TO_CRLF 0
+
+// Restrict the energy mode to allow the reception.
+// Default: 1
+// Limits the lowest energy mode the system can sleep to in order to keep the reception on. May cause higher power consumption.
+#define SL_IOSTREAM_EUSART_EXP_RESTRICT_ENERGY_MODE_TO_ALLOW_RECEPTION 1
+
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_IOSTREAM_EUSART_EXP
+// $[EUSART_SL_IOSTREAM_EUSART_EXP]
+#define SL_IOSTREAM_EUSART_EXP_PERIPHERAL EUSART0
+#define SL_IOSTREAM_EUSART_EXP_PERIPHERAL_NO 0
+
+// EUSART0 TX on PA08
+#define SL_IOSTREAM_EUSART_EXP_TX_PORT gpioPortA
+#define SL_IOSTREAM_EUSART_EXP_TX_PIN 8
+
+// EUSART0 RX on PA09
+#define SL_IOSTREAM_EUSART_EXP_RX_PORT gpioPortA
+#define SL_IOSTREAM_EUSART_EXP_RX_PIN 9
+
+
+
+// [EUSART_SL_IOSTREAM_EUSART_EXP]$
+// <<< sl:end pin_tool >>>
+
+#endif
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_iostream_eusart_vcom_config.h b/hardware/board/config/brd4328b_brd4001a/sl_iostream_eusart_vcom_config.h
new file mode 100644
index 0000000000..db8ecd8a79
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_iostream_eusart_vcom_config.h
@@ -0,0 +1,113 @@
+/***************************************************************************//**
+ * @file
+ * @brief IOSTREAM_EUSART Config.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_IOSTREAM_EUSART_VCOM_CONFIG_H
+#define SL_IOSTREAM_EUSART_VCOM_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// EUART settings
+
+// Enable High frequency mode
+// Default: 1
+#define SL_IOSTREAM_EUSART_VCOM_ENABLE_HIGH_FREQUENCY 1
+
+// Baud rate
+// Default: 115200
+#define SL_IOSTREAM_EUSART_VCOM_BAUDRATE 115200
+
+// Parity mode to use
+// No Parity
+// Even parity
+// Odd parity
+// Default: eusartNoParity
+#define SL_IOSTREAM_EUSART_VCOM_PARITY eusartNoParity
+
+// Number of stop bits to use.
+// 0.5 stop bits
+// 1 stop bits
+// 1.5 stop bits
+// 2 stop bits
+// Default: eusartStopbits1
+#define SL_IOSTREAM_EUSART_VCOM_STOP_BITS eusartStopbits1
+
+// Flow control
+// None
+// CTS
+// RTS
+// CTS/RTS
+// Software Flow control (XON/XOFF)
+// Default: eusartHwFlowControlNone
+#define SL_IOSTREAM_EUSART_VCOM_FLOW_CONTROL_TYPE eusartHwFlowControlCtsAndRts
+
+// Receive buffer size
+// Default: 32
+#define SL_IOSTREAM_EUSART_VCOM_RX_BUFFER_SIZE 32
+
+// Convert \n to \r\n
+// It can be changed at runtime using the C API.
+// Default: 0
+#define SL_IOSTREAM_EUSART_VCOM_CONVERT_BY_DEFAULT_LF_TO_CRLF 0
+
+// Restrict the energy mode to allow the reception.
+// Default: 1
+// Limits the lowest energy mode the system can sleep to in order to keep the reception on. May cause higher power consumption.
+#define SL_IOSTREAM_EUSART_VCOM_RESTRICT_ENERGY_MODE_TO_ALLOW_RECEPTION 1
+
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_IOSTREAM_EUSART_VCOM
+// $[EUSART_SL_IOSTREAM_EUSART_VCOM]
+#define SL_IOSTREAM_EUSART_VCOM_PERIPHERAL EUSART0
+#define SL_IOSTREAM_EUSART_VCOM_PERIPHERAL_NO 0
+
+// EUSART0 TX on PA08
+#define SL_IOSTREAM_EUSART_VCOM_TX_PORT gpioPortA
+#define SL_IOSTREAM_EUSART_VCOM_TX_PIN 8
+
+// EUSART0 RX on PA09
+#define SL_IOSTREAM_EUSART_VCOM_RX_PORT gpioPortA
+#define SL_IOSTREAM_EUSART_VCOM_RX_PIN 9
+
+// EUSART0 CTS on PA10
+#define SL_IOSTREAM_EUSART_VCOM_CTS_PORT gpioPortA
+#define SL_IOSTREAM_EUSART_VCOM_CTS_PIN 10
+
+// EUSART0 RTS on PA00
+#define SL_IOSTREAM_EUSART_VCOM_RTS_PORT gpioPortA
+#define SL_IOSTREAM_EUSART_VCOM_RTS_PIN 0
+
+// [EUSART_SL_IOSTREAM_EUSART_VCOM]$
+// <<< sl:end pin_tool >>>
+
+#endif
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_iostream_usart_exp_config.h b/hardware/board/config/brd4328b_brd4001a/sl_iostream_usart_exp_config.h
new file mode 100644
index 0000000000..e5f8850848
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_iostream_usart_exp_config.h
@@ -0,0 +1,109 @@
+/***************************************************************************//**
+ * @file
+ * @brief IOSTREAM_USART Config.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_IOSTREAM_USART_EXP_CONFIG_H
+#define SL_IOSTREAM_USART_EXP_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// USART settings
+
+// Baud rate
+// Default: 115200
+#define SL_IOSTREAM_USART_EXP_BAUDRATE 115200
+
+// Parity mode to use
+// No Parity
+// Even parity
+// Odd parity
+// Default: usartNoParity
+#define SL_IOSTREAM_USART_EXP_PARITY usartNoParity
+
+// Number of stop bits to use.
+// 0.5 stop bits
+// 1 stop bits
+// 1.5 stop bits
+// 2 stop bits
+// Default: usartStopbits1
+#define SL_IOSTREAM_USART_EXP_STOP_BITS usartStopbits1
+
+// Flow control
+// None
+// CTS
+// RTS
+// CTS/RTS
+// Software Flow control (XON/XOFF)
+// Default: usartHwFlowControlNone
+#define SL_IOSTREAM_USART_EXP_FLOW_CONTROL_TYPE usartHwFlowControlNone
+
+// Receive buffer size
+// Default: 32
+#define SL_IOSTREAM_USART_EXP_RX_BUFFER_SIZE 32
+
+// Convert \n to \r\n
+// It can be changed at runtime using the C API.
+// Default: 0
+#define SL_IOSTREAM_USART_EXP_CONVERT_BY_DEFAULT_LF_TO_CRLF 0
+
+// Restrict the energy mode to allow the reception.
+// Default: 1
+// Limits the lowest energy mode the system can sleep to in order to keep the reception on. May cause higher power consumption.
+#define SL_IOSTREAM_USART_EXP_RESTRICT_ENERGY_MODE_TO_ALLOW_RECEPTION 1
+
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_IOSTREAM_USART_EXP
+// $[USART_SL_IOSTREAM_USART_EXP]
+#define SL_IOSTREAM_USART_EXP_PERIPHERAL USART0
+#define SL_IOSTREAM_USART_EXP_PERIPHERAL_NO 0
+
+// USART0 TX on PA08
+#define SL_IOSTREAM_USART_EXP_TX_PORT gpioPortA
+#define SL_IOSTREAM_USART_EXP_TX_PIN 8
+
+// USART0 RX on PA09
+#define SL_IOSTREAM_USART_EXP_RX_PORT gpioPortA
+#define SL_IOSTREAM_USART_EXP_RX_PIN 9
+
+// USART0 CTS on PA10
+#define SL_IOSTREAM_USART_EXP_CTS_PORT gpioPortA
+#define SL_IOSTREAM_USART_EXP_CTS_PIN 10
+
+// USART0 RTS on PA00
+#define SL_IOSTREAM_USART_EXP_RTS_PORT gpioPortA
+#define SL_IOSTREAM_USART_EXP_RTS_PIN 0
+
+// [USART_SL_IOSTREAM_USART_EXP]$
+// <<< sl:end pin_tool >>>
+
+#endif
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_iostream_usart_vcom_config.h b/hardware/board/config/brd4328b_brd4001a/sl_iostream_usart_vcom_config.h
new file mode 100644
index 0000000000..85da71b67b
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_iostream_usart_vcom_config.h
@@ -0,0 +1,109 @@
+/***************************************************************************//**
+ * @file
+ * @brief IOSTREAM_USART Config.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_IOSTREAM_USART_VCOM_CONFIG_H
+#define SL_IOSTREAM_USART_VCOM_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// USART settings
+
+// Baud rate
+// Default: 115200
+#define SL_IOSTREAM_USART_VCOM_BAUDRATE 115200
+
+// Parity mode to use
+// No Parity
+// Even parity
+// Odd parity
+// Default: usartNoParity
+#define SL_IOSTREAM_USART_VCOM_PARITY usartNoParity
+
+// Number of stop bits to use.
+// 0.5 stop bits
+// 1 stop bits
+// 1.5 stop bits
+// 2 stop bits
+// Default: usartStopbits1
+#define SL_IOSTREAM_USART_VCOM_STOP_BITS usartStopbits1
+
+// Flow control
+// None
+// CTS
+// RTS
+// CTS/RTS
+// Software Flow control (XON/XOFF)
+// Default: usartHwFlowControlNone
+#define SL_IOSTREAM_USART_VCOM_FLOW_CONTROL_TYPE usartHwFlowControlCtsAndRts
+
+// Receive buffer size
+// Default: 32
+#define SL_IOSTREAM_USART_VCOM_RX_BUFFER_SIZE 32
+
+// Convert \n to \r\n
+// It can be changed at runtime using the C API.
+// Default: 0
+#define SL_IOSTREAM_USART_VCOM_CONVERT_BY_DEFAULT_LF_TO_CRLF 0
+
+// Restrict the energy mode to allow the reception.
+// Default: 1
+// Limits the lowest energy mode the system can sleep to in order to keep the reception on. May cause higher power consumption.
+#define SL_IOSTREAM_USART_VCOM_RESTRICT_ENERGY_MODE_TO_ALLOW_RECEPTION 1
+
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_IOSTREAM_USART_VCOM
+// $[USART_SL_IOSTREAM_USART_VCOM]
+#define SL_IOSTREAM_USART_VCOM_PERIPHERAL USART0
+#define SL_IOSTREAM_USART_VCOM_PERIPHERAL_NO 0
+
+// USART0 TX on PA08
+#define SL_IOSTREAM_USART_VCOM_TX_PORT gpioPortA
+#define SL_IOSTREAM_USART_VCOM_TX_PIN 8
+
+// USART0 RX on PA09
+#define SL_IOSTREAM_USART_VCOM_RX_PORT gpioPortA
+#define SL_IOSTREAM_USART_VCOM_RX_PIN 9
+
+// USART0 CTS on PA10
+#define SL_IOSTREAM_USART_VCOM_CTS_PORT gpioPortA
+#define SL_IOSTREAM_USART_VCOM_CTS_PIN 10
+
+// USART0 RTS on PA00
+#define SL_IOSTREAM_USART_VCOM_RTS_PORT gpioPortA
+#define SL_IOSTREAM_USART_VCOM_RTS_PIN 0
+
+// [USART_SL_IOSTREAM_USART_VCOM]$
+// <<< sl:end pin_tool >>>
+
+#endif
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_memlcd_eusart_config.h b/hardware/board/config/brd4328b_brd4001a/sl_memlcd_eusart_config.h
new file mode 100644
index 0000000000..4b21c6f11e
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_memlcd_eusart_config.h
@@ -0,0 +1,66 @@
+/***************************************************************************//**
+ * @file
+ * @brief SPI abstraction used by memory lcd display
+ *******************************************************************************
+ * # License
+ * Copyright 2022 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_MEMLCD_CONFIG_H
+#define SL_MEMLCD_CONFIG_H
+
+// <<< sl:start pin_tool >>>
+// SL_MEMLCD_SPI
+// $[EUSART_SL_MEMLCD_SPI]
+#define SL_MEMLCD_SPI_PERIPHERAL EUSART1
+#define SL_MEMLCD_SPI_PERIPHERAL_NO 1
+
+// EUSART1 TX on PC01
+#define SL_MEMLCD_SPI_TX_PORT gpioPortC
+#define SL_MEMLCD_SPI_TX_PIN 1
+
+// EUSART1 SCLK on PC03
+#define SL_MEMLCD_SPI_SCLK_PORT gpioPortC
+#define SL_MEMLCD_SPI_SCLK_PIN 3
+
+// [EUSART_SL_MEMLCD_SPI]$
+
+// SL_MEMLCD_SPI_CS
+// $[GPIO_SL_MEMLCD_SPI_CS]
+#define SL_MEMLCD_SPI_CS_PORT gpioPortC
+#define SL_MEMLCD_SPI_CS_PIN 8
+
+// [GPIO_SL_MEMLCD_SPI_CS]$
+
+// SL_MEMLCD_EXTCOMIN
+// $[GPIO_SL_MEMLCD_EXTCOMIN]
+#define SL_MEMLCD_EXTCOMIN_PORT gpioPortC
+#define SL_MEMLCD_EXTCOMIN_PIN 6
+
+// [GPIO_SL_MEMLCD_EXTCOMIN]$
+
+// <<< sl:end pin_tool >>>
+
+#endif
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_memlcd_usart_config.h b/hardware/board/config/brd4328b_brd4001a/sl_memlcd_usart_config.h
new file mode 100644
index 0000000000..3490e3829e
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_memlcd_usart_config.h
@@ -0,0 +1,66 @@
+/***************************************************************************//**
+ * @file
+ * @brief SPI abstraction used by memory lcd display
+ *******************************************************************************
+ * # License
+ * Copyright 2022 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_MEMLCD_CONFIG_H
+#define SL_MEMLCD_CONFIG_H
+
+// <<< sl:start pin_tool >>>
+// SL_MEMLCD_SPI
+// $[USART_SL_MEMLCD_SPI]
+#define SL_MEMLCD_SPI_PERIPHERAL USART0
+#define SL_MEMLCD_SPI_PERIPHERAL_NO 0
+
+// USART0 TX on PC01
+#define SL_MEMLCD_SPI_TX_PORT gpioPortC
+#define SL_MEMLCD_SPI_TX_PIN 1
+
+// USART0 CLK on PC03
+#define SL_MEMLCD_SPI_CLK_PORT gpioPortC
+#define SL_MEMLCD_SPI_CLK_PIN 3
+
+// [USART_SL_MEMLCD_SPI]$
+
+// SL_MEMLCD_SPI_CS
+// $[GPIO_SL_MEMLCD_SPI_CS]
+#define SL_MEMLCD_SPI_CS_PORT gpioPortC
+#define SL_MEMLCD_SPI_CS_PIN 8
+
+// [GPIO_SL_MEMLCD_SPI_CS]$
+
+// SL_MEMLCD_EXTCOMIN
+// $[GPIO_SL_MEMLCD_EXTCOMIN]
+#define SL_MEMLCD_EXTCOMIN_PORT gpioPortC
+#define SL_MEMLCD_EXTCOMIN_PIN 6
+
+// [GPIO_SL_MEMLCD_EXTCOMIN]$
+
+// <<< sl:end pin_tool >>>
+
+#endif
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_mx25_flash_shutdown_eusart_config.h b/hardware/board/config/brd4328b_brd4001a/sl_mx25_flash_shutdown_eusart_config.h
new file mode 100644
index 0000000000..63d60d5510
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_mx25_flash_shutdown_eusart_config.h
@@ -0,0 +1,64 @@
+/***************************************************************************//**
+ * @file
+ * @brief SL_MX25_FLASH_SHUTDOWN_USART Config
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_MX25_FLASH_SHUTDOWN_CONFIG_H
+#define SL_MX25_FLASH_SHUTDOWN_CONFIG_H
+
+// <<< sl:start pin_tool >>>
+// {eusart signal=TX,RX,SCLK} SL_MX25_FLASH_SHUTDOWN
+// [EUSART_SL_MX25_FLASH_SHUTDOWN]
+#define SL_MX25_FLASH_SHUTDOWN_PERIPHERAL EUSART1
+#define SL_MX25_FLASH_SHUTDOWN_PERIPHERAL_NO 1
+
+// EUSART1 TX on PC01
+#define SL_MX25_FLASH_SHUTDOWN_TX_PORT gpioPortC
+#define SL_MX25_FLASH_SHUTDOWN_TX_PIN 1
+
+// EUSART1 RX on PC02
+#define SL_MX25_FLASH_SHUTDOWN_RX_PORT gpioPortC
+#define SL_MX25_FLASH_SHUTDOWN_RX_PIN 2
+
+// EUSART1 SCLK on PC03
+#define SL_MX25_FLASH_SHUTDOWN_SCLK_PORT gpioPortC
+#define SL_MX25_FLASH_SHUTDOWN_SCLK_PIN 3
+
+// [EUSART_SL_MX25_FLASH_SHUTDOWN]
+
+// SL_MX25_FLASH_SHUTDOWN_CS
+
+// $[GPIO_SL_MX25_FLASH_SHUTDOWN_CS]
+#define SL_MX25_FLASH_SHUTDOWN_CS_PORT gpioPortC
+#define SL_MX25_FLASH_SHUTDOWN_CS_PIN 4
+
+// [GPIO_SL_MX25_FLASH_SHUTDOWN_CS]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // SL_MX25_FLASH_SHUTDOWN_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_mx25_flash_shutdown_usart_config.h b/hardware/board/config/brd4328b_brd4001a/sl_mx25_flash_shutdown_usart_config.h
new file mode 100644
index 0000000000..3b217bb736
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_mx25_flash_shutdown_usart_config.h
@@ -0,0 +1,64 @@
+/***************************************************************************//**
+ * @file
+ * @brief SL_MX25_FLASH_SHUTDOWN_USART Config
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_MX25_FLASH_SHUTDOWN_CONFIG_H
+#define SL_MX25_FLASH_SHUTDOWN_CONFIG_H
+
+// <<< sl:start pin_tool >>>
+// {usart signal=TX,RX,CLK} SL_MX25_FLASH_SHUTDOWN
+// [USART_SL_MX25_FLASH_SHUTDOWN]
+#define SL_MX25_FLASH_SHUTDOWN_PERIPHERAL USART0
+#define SL_MX25_FLASH_SHUTDOWN_PERIPHERAL_NO 0
+
+// USART0 TX on PC01
+#define SL_MX25_FLASH_SHUTDOWN_TX_PORT gpioPortC
+#define SL_MX25_FLASH_SHUTDOWN_TX_PIN 1
+
+// USART0 RX on PC02
+#define SL_MX25_FLASH_SHUTDOWN_RX_PORT gpioPortC
+#define SL_MX25_FLASH_SHUTDOWN_RX_PIN 2
+
+// USART0 CLK on PC03
+#define SL_MX25_FLASH_SHUTDOWN_CLK_PORT gpioPortC
+#define SL_MX25_FLASH_SHUTDOWN_CLK_PIN 3
+
+// [USART_SL_MX25_FLASH_SHUTDOWN]
+
+// SL_MX25_FLASH_SHUTDOWN_CS
+
+// $[GPIO_SL_MX25_FLASH_SHUTDOWN_CS]
+#define SL_MX25_FLASH_SHUTDOWN_CS_PORT gpioPortC
+#define SL_MX25_FLASH_SHUTDOWN_CS_PIN 4
+
+// [GPIO_SL_MX25_FLASH_SHUTDOWN_CS]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // SL_MX25_FLASH_SHUTDOWN_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_ncp_spidrv_usart_config.h b/hardware/board/config/brd4328b_brd4001a/sl_ncp_spidrv_usart_config.h
new file mode 100644
index 0000000000..3bd42bb9d8
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_ncp_spidrv_usart_config.h
@@ -0,0 +1,94 @@
+/***************************************************************************//**
+ * @file
+ * @brief Open thread NCP spidrv usart configuration file.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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.
+ *
+ ******************************************************************************/
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+#ifndef SL_NCP_SPIDRV_USART_CONFIG_H
+#define SL_NCP_SPIDRV_USART_CONFIG_H
+#include "spidrv.h"
+
+// NCP spidrv usart Configuration
+
+// Bit order on the SPI bus
+// LSB transmitted first
+// MSB transmitted first
+#define SL_NCP_SPIDRV_USART_BIT_ORDER spidrvBitOrderMsbFirst
+
+// SPI clock mode
+// SPI mode 0: CLKPOL=0, CLKPHA=0
+// SPI mode 1: CLKPOL=0, CLKPHA=1
+// SPI mode 2: CLKPOL=1, CLKPHA=0
+// SPI mode 3: CLKPOL=1, CLKPHA=1
+#define SL_NCP_SPIDRV_USART_CLOCK_MODE spidrvClockMode0
+
+// Chip Select Interrupt Number on Falling Edge
+// Default: 10
+#define SL_NCP_SPIDRV_USART_CS_FALLING_EDGE_INT_NO 0
+
+// Chip Select Interrupt Number on Rising Edge
+// Default: 9
+#define SL_NCP_SPIDRV_USART_CS_RISING_EDGE_INT_NO 1
+//
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_NCP_SPIDRV_USART_HOST_INT
+// $[GPIO_SL_NCP_SPIDRV_USART_HOST_INT]
+#define SL_NCP_SPIDRV_USART_HOST_INT_PORT gpioPortA
+#define SL_NCP_SPIDRV_USART_HOST_INT_PIN 5
+
+// [GPIO_SL_NCP_SPIDRV_USART_HOST_INT]$
+
+// SL_NCP_SPIDRV_USART
+// $[USART_SL_NCP_SPIDRV_USART]
+#define SL_NCP_SPIDRV_USART_PERIPHERAL USART0
+#define SL_NCP_SPIDRV_USART_PERIPHERAL_NO 0
+
+// USART0 TX on PC01
+#define SL_NCP_SPIDRV_USART_TX_PORT gpioPortC
+#define SL_NCP_SPIDRV_USART_TX_PIN 1
+
+// USART0 RX on PC02
+#define SL_NCP_SPIDRV_USART_RX_PORT gpioPortC
+#define SL_NCP_SPIDRV_USART_RX_PIN 2
+
+// USART0 CLK on PC03
+#define SL_NCP_SPIDRV_USART_CLK_PORT gpioPortC
+#define SL_NCP_SPIDRV_USART_CLK_PIN 3
+
+// USART0 CS on PC00
+#define SL_NCP_SPIDRV_USART_CS_PORT gpioPortC
+#define SL_NCP_SPIDRV_USART_CS_PIN 0
+
+// [USART_SL_NCP_SPIDRV_USART]$
+// <<< sl:end pin_tool >>>
+
+#endif /* SL_NCP_SPIDRV_USART_CONFIG_H */
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_pwm_init_led0_config.h b/hardware/board/config/brd4328b_brd4001a/sl_pwm_init_led0_config.h
new file mode 100644
index 0000000000..a86f33fec9
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_pwm_init_led0_config.h
@@ -0,0 +1,75 @@
+/***************************************************************************//**
+ * @file
+ * @brief PWM Driver
+ *******************************************************************************
+ * # License
+ * Copyright 2022 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 PWM_INIT_LED0_CONFIG_H
+#define PWM_INIT_LED0_CONFIG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// PWM configuration
+
+// PWM frequency [Hz]
+// Default: 10000
+#define SL_PWM_LED0_FREQUENCY 10000
+
+// Polarity
+// Active high
+// Active low
+// Default: PWM_ACTIVE_HIGH
+#define SL_PWM_LED0_POLARITY PWM_ACTIVE_HIGH
+// end pwm configuration
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+
+// SL_PWM_LED0
+// $[TIMER_SL_PWM_LED0]
+#define SL_PWM_LED0_PERIPHERAL TIMER0
+#define SL_PWM_LED0_PERIPHERAL_NO 0
+
+#define SL_PWM_LED0_OUTPUT_CHANNEL 0
+// TIMER0 CC0 on PB02
+#define SL_PWM_LED0_OUTPUT_PORT gpioPortB
+#define SL_PWM_LED0_OUTPUT_PIN 2
+
+// [TIMER_SL_PWM_LED0]$
+
+// <<< sl:end pin_tool >>>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // PWM_INIT_LED0_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_pwm_init_led1_config.h b/hardware/board/config/brd4328b_brd4001a/sl_pwm_init_led1_config.h
new file mode 100644
index 0000000000..199e48f279
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_pwm_init_led1_config.h
@@ -0,0 +1,75 @@
+/***************************************************************************//**
+ * @file
+ * @brief PWM Driver
+ *******************************************************************************
+ * # License
+ * Copyright 2022 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 PWM_INIT_LED1_CONFIG_H
+#define PWM_INIT_LED1_CONFIG_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// PWM configuration
+
+// PWM frequency [Hz]
+// Default: 10000
+#define SL_PWM_LED1_FREQUENCY 10000
+
+// Polarity
+// Active high
+// Active low
+// Default: PWM_ACTIVE_HIGH
+#define SL_PWM_LED1_POLARITY PWM_ACTIVE_HIGH
+// end pwm configuration
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+
+// SL_PWM_LED1
+// $[TIMER_SL_PWM_LED1]
+#define SL_PWM_LED1_PERIPHERAL TIMER1
+#define SL_PWM_LED1_PERIPHERAL_NO 1
+
+#define SL_PWM_LED1_OUTPUT_CHANNEL 0
+// TIMER1 CC0 on PD03
+#define SL_PWM_LED1_OUTPUT_PORT gpioPortD
+#define SL_PWM_LED1_OUTPUT_PIN 3
+
+// [TIMER_SL_PWM_LED1]$
+
+// <<< sl:end pin_tool >>>
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // PWM_INIT_LED1_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_rail_util_pti_config.h b/hardware/board/config/brd4328b_brd4001a/sl_rail_util_pti_config.h
new file mode 100644
index 0000000000..5165fc4204
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_rail_util_pti_config.h
@@ -0,0 +1,73 @@
+/***************************************************************************//**
+ * @file
+ * @brief Packet Trace Information configuration file.
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_RAIL_UTIL_PTI_CONFIG_H
+#define SL_RAIL_UTIL_PTI_CONFIG_H
+
+#include "rail_types.h"
+
+// <<< Use Configuration Wizard in Context Menu >>>
+// PTI Configuration
+
+// PTI mode
+// UART
+// UART onewire
+// SPI
+// Disabled
+// Default: RAIL_PTI_MODE_UART
+#define SL_RAIL_UTIL_PTI_MODE RAIL_PTI_MODE_UART
+
+// PTI Baud Rate (Hertz)
+// <147800-20000000:1>
+// Default: 1600000
+#define SL_RAIL_UTIL_PTI_BAUD_RATE_HZ 1600000
+
+//
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+// SL_RAIL_UTIL_PTI
+// $[PTI_SL_RAIL_UTIL_PTI]
+#define SL_RAIL_UTIL_PTI_PERIPHERAL PTI
+
+// PTI DOUT on PD04
+#define SL_RAIL_UTIL_PTI_DOUT_PORT gpioPortD
+#define SL_RAIL_UTIL_PTI_DOUT_PIN 4
+
+// PTI DFRAME on PD05
+#define SL_RAIL_UTIL_PTI_DFRAME_PORT gpioPortD
+#define SL_RAIL_UTIL_PTI_DFRAME_PIN 5
+
+
+// [PTI_SL_RAIL_UTIL_PTI]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // SL_RAIL_UTIL_PTI_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_simple_button_btn0_config.h b/hardware/board/config/brd4328b_brd4001a/sl_simple_button_btn0_config.h
new file mode 100644
index 0000000000..06f7fd29f5
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_simple_button_btn0_config.h
@@ -0,0 +1,58 @@
+/***************************************************************************//**
+ * @file
+ * @brief Simple Button Driver User Config
+ *******************************************************************************
+ * # License
+ * Copyright 2019 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_SIMPLE_BUTTON_BTN0_CONFIG_H
+#define SL_SIMPLE_BUTTON_BTN0_CONFIG_H
+
+#include "em_gpio.h"
+#include "sl_simple_button.h"
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+//
+// Interrupt
+// Poll and Debounce
+// Poll
+// Default: SL_SIMPLE_BUTTON_MODE_INTERRUPT
+#define SL_SIMPLE_BUTTON_BTN0_MODE SL_SIMPLE_BUTTON_MODE_INTERRUPT
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+
+// SL_SIMPLE_BUTTON_BTN0
+// $[GPIO_SL_SIMPLE_BUTTON_BTN0]
+#define SL_SIMPLE_BUTTON_BTN0_PORT gpioPortB
+#define SL_SIMPLE_BUTTON_BTN0_PIN 1
+
+// [GPIO_SL_SIMPLE_BUTTON_BTN0]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // SL_SIMPLE_BUTTON_BTN0_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_simple_button_btn1_config.h b/hardware/board/config/brd4328b_brd4001a/sl_simple_button_btn1_config.h
new file mode 100644
index 0000000000..ffd08203b6
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_simple_button_btn1_config.h
@@ -0,0 +1,58 @@
+/***************************************************************************//**
+ * @file
+ * @brief Simple Button Driver User Config
+ *******************************************************************************
+ * # License
+ * Copyright 2019 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_SIMPLE_BUTTON_BTN1_CONFIG_H
+#define SL_SIMPLE_BUTTON_BTN1_CONFIG_H
+
+#include "em_gpio.h"
+#include "sl_simple_button.h"
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+//
+// Interrupt
+// Poll and Debounce
+// Poll
+// Default: SL_SIMPLE_BUTTON_MODE_INTERRUPT
+#define SL_SIMPLE_BUTTON_BTN1_MODE SL_SIMPLE_BUTTON_MODE_INTERRUPT
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+
+// SL_SIMPLE_BUTTON_BTN1
+// $[GPIO_SL_SIMPLE_BUTTON_BTN1]
+#define SL_SIMPLE_BUTTON_BTN1_PORT gpioPortB
+#define SL_SIMPLE_BUTTON_BTN1_PIN 3
+
+// [GPIO_SL_SIMPLE_BUTTON_BTN1]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // SL_SIMPLE_BUTTON_BTN1_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_simple_led_led0_config.h b/hardware/board/config/brd4328b_brd4001a/sl_simple_led_led0_config.h
new file mode 100644
index 0000000000..2e6c868888
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_simple_led_led0_config.h
@@ -0,0 +1,57 @@
+/***************************************************************************//**
+ * @file
+ * @brief Simple Led Driver Configuration
+ *******************************************************************************
+ * # License
+ * Copyright 2019 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_SIMPLE_LED_LED0_CONFIG_H
+#define SL_SIMPLE_LED_LED0_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// Simple LED configuration
+//
+// Active low
+// Active high
+// Default: SL_SIMPLE_LED_POLARITY_ACTIVE_HIGH
+#define SL_SIMPLE_LED_LED0_POLARITY SL_SIMPLE_LED_POLARITY_ACTIVE_HIGH
+// end led configuration
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+
+// SL_SIMPLE_LED_LED0
+// $[GPIO_SL_SIMPLE_LED_LED0]
+#define SL_SIMPLE_LED_LED0_PORT gpioPortB
+#define SL_SIMPLE_LED_LED0_PIN 2
+
+// [GPIO_SL_SIMPLE_LED_LED0]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // SL_SIMPLE_LED_LED0_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_simple_led_led1_config.h b/hardware/board/config/brd4328b_brd4001a/sl_simple_led_led1_config.h
new file mode 100644
index 0000000000..baadcd50fd
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_simple_led_led1_config.h
@@ -0,0 +1,57 @@
+/***************************************************************************//**
+ * @file
+ * @brief Simple Led Driver Configuration
+ *******************************************************************************
+ * # License
+ * Copyright 2019 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_SIMPLE_LED_LED1_CONFIG_H
+#define SL_SIMPLE_LED_LED1_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// Simple LED configuration
+//
+// Active low
+// Active high
+// Default: SL_SIMPLE_LED_POLARITY_ACTIVE_HIGH
+#define SL_SIMPLE_LED_LED1_POLARITY SL_SIMPLE_LED_POLARITY_ACTIVE_HIGH
+// end led configuration
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+
+// SL_SIMPLE_LED_LED1
+// $[GPIO_SL_SIMPLE_LED_LED1]
+#define SL_SIMPLE_LED_LED1_PORT gpioPortD
+#define SL_SIMPLE_LED_LED1_PIN 3
+
+// [GPIO_SL_SIMPLE_LED_LED1]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // SL_SIMPLE_LED_LED1_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_simple_led_led2_config.h b/hardware/board/config/brd4328b_brd4001a/sl_simple_led_led2_config.h
new file mode 100644
index 0000000000..b20941f4a2
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_simple_led_led2_config.h
@@ -0,0 +1,57 @@
+/***************************************************************************//**
+ * @file
+ * @brief Simple Led Driver Configuration
+ *******************************************************************************
+ * # License
+ * Copyright 2019 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_SIMPLE_LED_LED2_CONFIG_H
+#define SL_SIMPLE_LED_LED2_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// Simple LED configuration
+//
+// Active low
+// Active high
+// Default: SL_SIMPLE_LED_POLARITY_ACTIVE_HIGH
+#define SL_SIMPLE_LED_LED2_POLARITY SL_SIMPLE_LED_POLARITY_ACTIVE_LOW
+// end led configuration
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+
+// SL_SIMPLE_LED_LED2
+// $[GPIO_SL_SIMPLE_LED_LED2]
+#define SL_SIMPLE_LED_LED2_PORT gpioPortB
+#define SL_SIMPLE_LED_LED2_PIN 4
+
+// [GPIO_SL_SIMPLE_LED_LED2]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // SL_SIMPLE_LED_LED2_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_simple_led_led3_config.h b/hardware/board/config/brd4328b_brd4001a/sl_simple_led_led3_config.h
new file mode 100644
index 0000000000..2ad6e07cea
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_simple_led_led3_config.h
@@ -0,0 +1,57 @@
+/***************************************************************************//**
+ * @file
+ * @brief Simple Led Driver Configuration
+ *******************************************************************************
+ * # License
+ * Copyright 2019 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_SIMPLE_LED_LED3_CONFIG_H
+#define SL_SIMPLE_LED_LED3_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// Simple LED configuration
+//
+// Active low
+// Active high
+// Default: SL_SIMPLE_LED_POLARITY_ACTIVE_HIGH
+#define SL_SIMPLE_LED_LED3_POLARITY SL_SIMPLE_LED_POLARITY_ACTIVE_LOW
+// end led configuration
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+
+// SL_SIMPLE_LED_LED3
+// $[GPIO_SL_SIMPLE_LED_LED3]
+#define SL_SIMPLE_LED_LED3_PORT gpioPortB
+#define SL_SIMPLE_LED_LED3_PIN 5
+
+// [GPIO_SL_SIMPLE_LED_LED3]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // SL_SIMPLE_LED_LED3_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_simple_led_led4_config.h b/hardware/board/config/brd4328b_brd4001a/sl_simple_led_led4_config.h
new file mode 100644
index 0000000000..a89bdb41d8
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_simple_led_led4_config.h
@@ -0,0 +1,57 @@
+/***************************************************************************//**
+ * @file
+ * @brief Simple Led Driver Configuration
+ *******************************************************************************
+ * # License
+ * Copyright 2019 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_SIMPLE_LED_LED4_CONFIG_H
+#define SL_SIMPLE_LED_LED4_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// Simple LED configuration
+//
+// Active low
+// Active high
+// Default: SL_SIMPLE_LED_POLARITY_ACTIVE_HIGH
+#define SL_SIMPLE_LED_LED4_POLARITY SL_SIMPLE_LED_POLARITY_ACTIVE_LOW
+// end led configuration
+
+// <<< end of configuration section >>>
+
+// <<< sl:start pin_tool >>>
+
+// SL_SIMPLE_LED_LED4
+// $[GPIO_SL_SIMPLE_LED_LED4]
+#define SL_SIMPLE_LED_LED4_PORT gpioPortB
+#define SL_SIMPLE_LED_LED4_PIN 6
+
+// [GPIO_SL_SIMPLE_LED_LED4]$
+
+// <<< sl:end pin_tool >>>
+
+#endif // SL_SIMPLE_LED_LED4_CONFIG_H
diff --git a/hardware/board/config/brd4328b_brd4001a/sl_simple_rgb_pwm_led_rgb_led0_config.h b/hardware/board/config/brd4328b_brd4001a/sl_simple_rgb_pwm_led_rgb_led0_config.h
new file mode 100644
index 0000000000..7a76addbf5
--- /dev/null
+++ b/hardware/board/config/brd4328b_brd4001a/sl_simple_rgb_pwm_led_rgb_led0_config.h
@@ -0,0 +1,97 @@
+/***************************************************************************//**
+ * @file
+ * @brief Simple RGB PWM Led Driver Configuration
+ *******************************************************************************
+ * # License
+ * Copyright 2020 Silicon Laboratories Inc. www.silabs.com
+ *******************************************************************************
+ *
+ * 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 SL_SIMPLE_RGB_PWM_LED_RGB_LED0_CONFIG_H
+#define SL_SIMPLE_RGB_PWM_LED_RGB_LED0_CONFIG_H
+
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// Simple RGB PWM LED Configuration
+// PWM frequency [Hz]
+// Sets the frequency of the PWM signal
+// 0 = Don't care
+// Default: 10000
+#define SL_SIMPLE_RGB_PWM_LED_RGB_LED0_FREQUENCY 10000
+
+// PWM resolution <2-65536>
+// Specifies the PWM (dimming) resolution. I.e. if you want a
+// dimming resolution that takes the input values from 0 to 99,
+// set this value to 100
+// Default: 256
+#define SL_SIMPLE_RGB_PWM_LED_RGB_LED0_RESOLUTION 256
+
+// Red LED Polarity
+// Active low
+//